前向传播 (Forward Propagation)
前向传播通过对一层的结点以及对应的连接权值进行加权和运算,结果加上一个偏置项,然后通过一个非线性函数(即激活函数),如ReLu,sigmoid等函数,得到的结果就是下一层结点的输出。从第一层(输入层)开始不断的通过这种方法一层层的运算,最后得到输出层结果。
下面是一个简单的例子,暂不考虑偏置项和激活函数。输入层有结点A,B;隐藏层有结点C,D;输出层是结点E。
结点的计算公式可以是
, 这里激活函数用的是sigmoid,根据需要可以用其他函数。
如不考虑偏置项和激活函数,公式就简化成。由此可以得出,结点C的值就是:3×1 + 4×2 = 11; 同理结点D的值就是:3×2 + 4×1 = 10; 结点E的值就是:11×3 + 10x(-1) = 23。
PYTHON实现的程序是:
import numpy as np # 输入层数据 input_data = np.array([3, 4]) # 计算隐藏层 weight1 = np.array([[1, 2], [2, 1]]) hidden_layer_values = input_data.dot(weight1) print(hidden_layer_values) # 计算输出 weight2 = np.array([3, -1]) output = (hidden_layer_values * weight2).sum() print(output)
下面程序考虑了激活函数:
import numpy as np def sigmoid(x): # 计算sigmoid return 1/(1+np.exp(-x)) # 网络尺寸 input_node = 5 hidden_node = 3 output_node = 2 np.random.seed(42) # 产生随机输入数据 X = np.random.randn(input_node) # 用高斯分布产生随机权重数据 weights_input_to_hidden = np.random.normal(0, scale=0.1, size=(input_node, hidden_node)) weights_hidden_to_output = np.random.normal(0, scale=0.1, size=(hidden_node, output_node)) # 计算前向传播 hidden_layer_in = np.dot(X, weights_input_to_hidden) hidden_layer_out = sigmoid(hidden_layer_in) output_layer_in = np.dot(hidden_layer_out, weights_hidden_to_output) output_layer_out = sigmoid(output_layer_in) # 显示输出 print('Output-layer Output:') print(output_layer_out) output_layer_out = sigmoid(output_layer_in) print('Output-layer Output:') print(output_layer_out)
今天的文章前向传播和反向传播_前向传播分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/51999.html