theano实现神经网络反向传播
时间: 2023-10-13 16:05:05 浏览: 135
Theano 是一个 Python 的数学库,可以用来定义、优化和求解数学表达式,尤其是多维数组的运算,它的主要用途是支持深度学习,可以用它来实现神经网络的反向传播算法。
下面是一个简单的代码示例,用 Theano 实现一个单隐层神经网络的反向传播算法:
```python
import numpy as np
import theano
import theano.tensor as T
# 输入数据和标签
x = T.matrix('x')
y = T.matrix('y')
# 隐层大小
hidden_size = 100
# 初始化权重和偏置
w1 = theano.shared(np.random.randn(784, hidden_size).astype('float32'), name='w1')
b1 = theano.shared(np.zeros(hidden_size).astype('float32'), name='b1')
w2 = theano.shared(np.random.randn(hidden_size, 10).astype('float32'), name='w2')
b2 = theano.shared(np.zeros(10).astype('float32'), name='b2')
# 前向传播
hidden = T.nnet.sigmoid(T.dot(x, w1) + b1)
y_pred = T.nnet.softmax(T.dot(hidden, w2) + b2)
# 损失函数和梯度
loss = T.mean(T.nnet.categorical_crossentropy(y_pred, y))
gw1, gb1, gw2, gb2 = T.grad(loss, [w1, b1, w2, b2])
# 更新权重和偏置
lr = 0.1
updates = [(w1, w1 - lr * gw1), (b1, b1 - lr * gb1),
(w2, w2 - lr * gw2), (b2, b2 - lr * gb2)]
# 编译 Theano 函数
train_fn = theano.function(inputs=[x, y], outputs=loss, updates=updates)
# 训练网络
for i in range(1000):
loss = train_fn(x_train, y_train)
if i % 100 == 0:
print('Step {}: loss = {}'.format(i, loss))
```
这个示例中,我们定义了一个单隐层神经网络,使用 sigmoid 和 softmax 激活函数,用交叉熵函数作为损失函数,使用随机梯度下降法进行优化。在训练过程中,我们依次输入训练集中的每个样本,并计算损失函数和梯度,然后更新权重和偏置。最终得到一个训练好的神经网络模型。
阅读全文