前向传播和反向传播_前向传播

前向传播和反向传播_前向传播前向传播 (Forward Propagation) 前向传播通过对一层的结点以及对应的连接权值进行加权和运算,结果加上一个偏置项,然后通过一个非线性函数(即激活函数),如ReLu,sigmoid等函数,得到的结果就是下一层结点的输出。从第一层(输入层)开始不断的通过这种方法一层层的运算,最后得到输

前向传播 (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

(0)
编程小号编程小号
上一篇 2023-08-31 20:30
下一篇 2023-08-31 20:46

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注