| 
 | 
 
 
发表于 2024-8-30 14:51:45
|
显示全部楼层
 
 
 
 
 
好的,我来解释一下代码中的每一步和关键概念。 
 
- # ? 信号正向传播
 
 - def update(self, inputs):
 
 -     print("输入层结点数:", len(inputs), self.num_in - 1)
 
 -     if len(inputs) != (self.num_in - 1):
 
 -         raise ValueError("与输入层结点数不符")
 
 -     # 数据输入 输入层
 
 -     self.active_in = inputs
 
 -     
 
 -     # 数据在隐藏层处理
 
 -     self.sum_hidden = np.dot(self.weight_in.T, self.active_in.reshape(-1, 1))  # 叉乘
 
 -     # .T操作是对于array操作后的数组进行转置操作
 
 -     # .reshape(x,y)操作是对于array操作后的数组进行重新排列成一个x*y的矩阵,参数为负数表示无限制,如(-1,1)转换成一列的矩阵
 
 -     self.active_hidden = sigmoid(self.sum_hidden)  # active_hidden是处理完输入数据之后处理,作为输出层的输入数据
 
 -     self.active_hidden = -1
 
 -     
 
 -     # 数据在输出层处理
 
 -     self.sum_out = np.dot(self.weight_out.T, self.active_hidden)
 
 -     self.active_out = sigmoid(self.sum_out)
 
 -     
 
 -     # 返回输出层结果
 
 -     return self.active_out
 
  复制代码 
 
### 代码详解 
 
1. **输入层初始化**: 
  - print("输入层结点数:", len(inputs), self.num_in - 1)
 
 -    if len(inputs) != (self.num_in - 1):
 
 -        raise ValueError("与输入层结点数不符")
 
  复制代码 
   这段代码首先打印输入层的结点数,并检查输入数据的长度是否与预期的输入层结点数相符。如果不一致,抛出 `ValueError` 错误。 
 
2. **输入数据存储**: 
   
   将输入数据 `inputs` 存储到 `self.active_in` 中。 
 
3. **数据在隐藏层处理**: 
  - self.sum_hidden = np.dot(self.weight_in.T, self.active_in.reshape(-1, 1))  # 叉乘
 
  复制代码 
   使用NumPy的 `np.dot` 函数进行矩阵乘法,计算隐藏层的输入信号 `sum_hidden`。这里 `self.weight_in.T` 是一个转置矩阵(即输入层到隐藏层的权重矩阵的转置),而 `self.active_in.reshape(-1, 1)` 将 `self.active_in` 转换为列向量。这样操作是为了符合矩阵乘法的规则。 
 
4. **激活隐藏层神经元**: 
  - self.active_hidden = sigmoid(self.sum_hidden)
 
  复制代码 
   通过激活函数(假设是 Sigmoid 函数)处理 `sum_hidden`,得到隐藏层的激活值 `active_hidden`。这一步是将输入信号转换为输出信号。 
 
5. **强制设置隐藏层输出**: 
   
   这里将 `self.active_hidden` 强制设置为 -1。这一步可能是一个意外或者调试代码,因为这会覆盖前一步的计算结果,通常不建议这样做。 
 
6. **数据在输出层处理**: 
  - self.sum_out = np.dot(self.weight_out.T, self.active_hidden)
 
  复制代码 
   隐藏层输出的信号通过权重矩阵 `self.weight_out.T` 传递到输出层。 
 
7. **激活输出层神经元**: 
  - self.active_out = sigmoid(self.sum_out)
 
  复制代码 
   使用激活函数(假设是 Sigmoid 函数)处理 `sum_out`,得到最终的输出信号 `active_out`。 
 
8. **返回输出层结果**: 
   
   将输出层的激活值 `self.active_out` 返回,作为该函数的执行结果。 
 
总结一下,这段代码主要描述了一个简单的神经网络正向传播的过程,从输入层经过隐藏层到达输出层,并且通过激活函数处理每个层的信号。通过矩阵乘法和激活函数进行计算,最终输出结果。特别注意,强制覆盖 `self.active_hidden = -1` 这一行可能是个错误或调试痕迹,应该进行检查。 
 
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |   
 
 
 
 |