Python手写神经网络之(三)循环神经网络

本文旨在分享如何用Python3编写循环神经网络(RNN)。通过个人GitHub仓库提供的代码,探讨RNN的设计思路,强调在实现过程中应注意sigmoid数值稳定性、公式下标及链式求导等问题,邀请读者一同学习讨论。
摘要由CSDN通过智能技术生成

目的

  这个博客简要分享下RNN神经网络的python3写法。同时欢迎大家指出代码中潜在问题,一起学习与讨论~
  直接上代码:https://github.com/Site1997/RNN-implementation

个人repo:RNN的python实现

设计思路

这里就是实现一个非常非常简单的RNN。如果写完了一遍CNN的前向和反向传播话,RNN前后向传播也是相对好写的吧。主要注意三个问题:

  • 处理sigmoid函数数值不稳定
  • 公式下标,注意是t还是t-1
  • 链式求导到 h t h_t h
很高兴听到您想要实现一个手写神经网络来识别minist手写数字。以下是一个基本的Python代码实现: 首先,我们需要导入必要的库: ```python import numpy as np import matplotlib.pyplot as plt import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data ``` 然后,我们需要加载minist数据集: ```python mnist = input_data.read_data_sets("MNIST_data/", one_hot=True) ``` 接着,我们需要定义我们的神经网络模型。我们将使用一个层的全连接网络,其中第一层有784个输入神经元(对应于MNIST图像的像素数量),第二层有256个隐藏神经元,第层有10个输出神经元(对应于10个数字分类)。 ```python # 定义网络参数 n_input = 784 n_hidden_1 = 256 n_classes = 10 # 定义占位符 x = tf.placeholder("float", [None, n_input]) y = tf.placeholder("float", [None, n_classes]) # 定义权重和偏置 weights = { 'h1': tf.Variable(tf.random_normal([n_input, n_hidden_1])), 'out': tf.Variable(tf.random_normal([n_hidden_1, n_classes])) } biases = { 'b1': tf.Variable(tf.random_normal([n_hidden_1])), 'out': tf.Variable(tf.random_normal([n_classes])) } # 定义网络结构 def multilayer_perceptron(x, weights, biases): # 第一层隐藏层 layer_1 = tf.add(tf.matmul(x, weights['h1']), biases['b1']) layer_1 = tf.nn.relu(layer_1) # 输出层 out_layer = tf.matmul(layer_1, weights['out']) + biases['out'] return out_layer # 定义模型 pred = multilayer_perceptron(x, weights, biases) ``` 然后,我们需要定义我们的损失函数和优化器。我们将使用交叉熵损失函数和Adam优化器。 ```python # 定义损失函数和优化器 cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=pred, labels=y)) optimizer = tf.train.AdamOptimizer(learning_rate=0.001).minimize(cost) ``` 接下来,我们定义训练模型的参数。我们将使用100个批次,每个批次大小为128。 ```python # 定义训练参数 training_epochs = 100 batch_size = 128 display_step = 1 ``` 现在,我们可以开始训练我们的模型。我们将迭代训练数据集100次,并在每次迭代后计算损失和准确率。 ```python # 启动会话 with tf.Session() as sess: sess.run(tf.global_variables_initializer()) # 训练循环 for epoch in range(training_epochs): avg_cost = 0. total_batch = int(mnist
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值