python手写神经网络

本文介绍了使用Python从头编写神经网络的基本过程,包括神经网络原理的简单说明,特别是单个神经元的作用和非线性激活函数。文章还详细探讨了梯度下降在反向传播中的应用,并分享了一段三层神经网络的代码实现,强调了参数设计和理解数学原理的重要性。最后,展示了在鸢尾花分类任务上的应用结果。
摘要由CSDN通过智能技术生成

python手写神经网络

神经网络原理简单说明

要理解神经网络最开始应该理解的一个概念就是——单个神经元。这个神经元是非线性的,它可以是ReLu函数,sigmoid函数等多种的形式,它的作用就是,帮助线不要是直线,因为如果是直线的话,之后需要叠加组合就很难描绘多种的形状,难以完成拟合任务。

而神经网络就是由多个这样的神经元组合而成的,同一层的神经元是对于前一层数据的组合判断(同一层的每一个神经元都有自己不同的组合方式),激活函数对输出的组合计算值进行了包装,再进入下一层进行组合和处理。

精华的部分在于迭代的过程——梯度下降求导。具体的求导为反向传播,简单的理解其实就是复合函数的求导。

不过关于神经网络的具体细节,真的无法给出很具体很具体的解释,要真的解释只能说是梯度下降的作用了。

编写神经网络代码以及代码说明

我设计了一个三层的神经网络,其中在编写的时候,因为每一层的维度和系数矩阵是对应的,因此将每一层的神经的个数用变量来表示,方便之后的调节

参数设计

# 设置输出层神经元个数
k1 = 4
k2 = 8
k3 = 1
# 初始化系数矩阵
W1 = 2*np.random.random((k1,k0)
很高兴听到您想要实现一个手写神经网络来识别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、付费专栏及课程。

余额充值