深度学习原理与框架-Tensorflow卷积神经网络-神经网络mnist分类

使用tensorflow构造神经网络用来进行mnist数据集的分类

相比与上一节讲到的逻辑回归,神经网络比逻辑回归多了隐藏层,同时在每一个线性变化后添加了relu作为激活函数,

神经网络使用的损失值为softmax概率损失值,即为交叉熵损失值

代码:使用的是mnist数据集作为分类的测试数据,数据的维度为50000*784

第一步:载入mnist数据集

第二步:超参数的设置,输入图片的大小,分类的类别数,迭代的次数,每一个batch的大小

第三步:使用tf.placeholder() 进行输入数据的设置,进行数据的占位

第四步:使用tf.Variable() 设置里面设置tf.truncated_normal([inputSize, num_hidden], sttdv=0.1) 设置w的初始值,使用tf.Variable(tf.constant(0.1, [num_hidden])) 设置b,这一步主要是进行初始参数设置

第五步:使用tf.nn.relu(tf.matmul()+b) 构造第一层的网络,tf.nn.relu(tf.matmul() + b) 构造第二层的网络, tf.matmul() + b 构造输出层的得分

第六步:使用tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y, logits=score)) 来构造损失函数

第七步:使用tf.train.GradientDescentOptimizer().minimize(loss) 使用下降梯度降低损失值

第八步:使用tf.equal(tf.argmax(y, 1), tf.argmax(score, 1)) 即 tf.reduce_mean(tf.cast) 进行准确率的求解

第九步:进行循环,使用mnist.train.next_batch(batchSize) 读取部分数据

第十步:使用sess.run()执行梯度下降操作

第十一步:循环一千次,执行准确率的操作,并打印准确率

第十二步:使用验证集进行结果的验证

import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np
from tensorflow.examples.tutorials.mnist import input_data

# 第一步数据读取
mnist = input_data.read_data_sets(‘/data‘, one_hot=True)

# 第二步:超参数的设置
# 输入图片的大小
inputSize = 784
# 分类的类别数
num_classes = 10
# 隐藏层的个数
num_hidden = 50
# 迭代的次数
trainIteration = 10000
# 每一个batch值的大小
batch_size = 100
# 第二个隐藏层的个数
num_hidden_2 = 100

# 第三步:使用tf.placeholder()构造输入数据X 和 y
X = tf.placeholder(tf.float32, shape=[None, inputSize])
y = tf.placeholder(tf.float32, shape=[None, num_classes])

#第四步:初始化W和b参数
W1 = tf.Variable(tf.random_normal([inputSize, num_hidden], stddev=0.1), name=‘W1‘)
b1 = tf.Variable(tf.zeros([num_hidden]), name=‘b1‘)
# b1 = tf.Variable(tf.constant(0.1), [num_hidden])
W2 = tf.Variable(tf.random_normal([num_hidden, num_hidden_2], stddev=0.1), name=‘W2‘)
# b2 = tf.Variable(tf.constant(0.1), [num_classes])
b2 = tf.Variable(tf.zeros([num_hidden_2]), name=‘b2‘)
W3 = tf.Variable(tf.random_normal([num_hidden_2, num_classes], stddev=0.1), name=‘W3‘)
b3 = tf.Variable(tf.zeros([num_classes]))

# 第五步:使用点乘获得第一层,第二层和最后的得分值
h1 = tf.nn.relu(tf.matmul(X, W1) + b1)
h2 = tf.nn.relu(tf.matmul(h1, W2) + b2)
y_pred = tf.matmul(h2, W3) + b3
# 第六步:使用tf.nn.softmax_cross_entropy_with_logits计算交叉熵损失值
loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y, logits=y_pred))
# 第七步:使用tf.train.GradientDescentOptimizer降低损失值loss
opt = tf.train.GradientDescentOptimizer(learning_rate=0.05).minimize(loss)
# 第八步:使用tf.argmax(y_pred, 1)找出每一行的最大值索引,tf.equal判断索引是否相等
correct_pred = tf.equal(tf.argmax(y_pred, 1), tf.argmax(y, 1))
# tf.cast将索引转换为float类型,使用tf.reduce_mean求均值
accr = tf.reduce_mean(tf.cast(correct_pred, ‘float‘))

# 进行初始化
sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)

for i in range(trainIteration):
    # 第九步:获得一个batch的数据
    batch = mnist.train.next_batch(batch_size)
    # 第十步:使用sess.run()对损失值降低操作和损失值进行执行,从而进行参数更新
    _, data_loss = sess.run([opt, loss], feed_dict={X: batch[0], y: batch[1]})
    # 第十一步:每迭代1000次就进行打印准确率和损失值
    if i % 1000 == 0:
        accurracy = sess.run(accr, feed_dict={X: batch[0], y: batch[1]})
        print(‘loss: %g accr: %g‘ % (data_loss, accurracy))
# 第十二步:使用测试数据进行训练结果的验证
batch = mnist.test.next_batch(batch_size)
accurracy = sess.run(accr, feed_dict={X: batch[0], y: batch[1]})
print(‘test accr %g‘%(accurracy))

原文地址:https://www.cnblogs.com/my-love-is-python/p/10527432.html

时间: 2024-10-07 16:16:55

深度学习原理与框架-Tensorflow卷积神经网络-神经网络mnist分类的相关文章

深度学习原理与框架-卷积网络细节-经典网络架构 1.AlexNet 2.VGG

1.AlexNet是2012年最早的第一代神经网络,整个神经网络的构架是8层的网络结构.网络刚开始使用11*11获得较大的感受野,随后使用5*5和3*3做特征的提取,最后使用3个全连接层做得分值得运算,使用的是softmax分类器 2. VGG-net,网络的特点是全部使用3*3的卷积,通常有两个版本一个是16-VGG和19-VGG,每一进行完一次maxpool,都进行一次维度的提升,为了减少由于降维压缩而导致的信息损失.最后使用3个全连接层进行得分值得预测,使用的是softmax计算损失值 原

深度学习原理与框架-神经网络-cifar10分类(代码)

cifar神经网络的代码说明: 数据主要分为三部分: 第一部分:数据的准备 第二部分:神经网络模型的构造,返回loss和梯度值 第三部分:将数据与模型输入到函数中,用于进行模型的训练,同时进行验证集的预测,来判断验证集的预测结果,保留最好的验证集结果的参数组合 第一部分:数据的准备 第一步:构造列表,使用with open() as f: pickle.load进行数据的载入, 使用.reshape(1000, 3, 32, 32).transpose(0, 3, 1, 2).astype('f

深度学习原理与框架-递归神经网络-RNN网络基本框架(代码?) 1.rnn.LSTMCell(生成单层LSTM) 2.rnn.DropoutWrapper(对rnn进行dropout操作) 3.tf.contrib.rnn.MultiRNNCell(堆叠多层LSTM) 4.mlstm_cell.zero_state(state初始化) 5.mlstm_cell(进行LSTM求解)

问题:LSTM的输出值output和state是否是一样的 1. rnn.LSTMCell(num_hidden, reuse=tf.get_variable_scope().reuse)  # 构建单层的LSTM网络 参数说明:num_hidden表示隐藏层的个数,reuse表示LSTM的参数进行复用 2.rnn.DropoutWrapper(cell, output_keep_prob=keep_prob) # 表示对rnn的输出层进行dropout 参数说明:cell表示单层的lstm,o

深度学习原理与框架-递归神经网络-RNN_exmaple(代码) 1.rnn.BasicLSTMCell(构造基本网络) 2.tf.nn.dynamic_rnn(执行rnn网络) 3.tf.expand_dim(增加输入数据的维度) 4.tf.tile(在某个维度上按照倍数进行平铺迭代) 5.tf.squeeze(去除维度上为1的维度)

1. rnn.BasicLSTMCell(num_hidden) #  构造单层的lstm网络结构 参数说明:num_hidden表示隐藏层的个数 2.tf.nn.dynamic_rnn(cell, self.x, tf.float32) # 执行lstm网络,获得state和outputs 参数说明:cell表示实例化的rnn网络,self.x表示输入层,tf.float32表示类型 3. tf.expand_dim(self.w, axis=0) 对数据增加一个维度 参数说明:self.w表

深度学习原理与框架-递归神经网络-时间序列预测

代码说明:使用的是单层的rnn网络,迭代的终止条件为,第n的100次循环的损失值未降低次数超过3次,即跳出循环 数据说明:使用的是乘客的人数,训练集和测试集的分配为0.8和0.2, train_x使用的是前5个数据,train_y使用的是从2个数据到第6个数据,以此往后类推 代码: 第一部分:数据的读入,并将数据拆分为训练集和测试集,同时构造train_x, train_y, test_x, test_y, 每一个train的大小为5, 1 第二部分:实例化模型,同时对模型进行训练操作 第三部分

深度学习原理与框架-CNN在文本分类的应用 1.tf.nn.embedding_lookup(根据索引数据从数据中取出数据) 2.saver.restore(加载sess参数)

1. tf.nn.embedding_lookup(W, X) W的维度为[len(vocabulary_list), 128], X的维度为[?, 8],组合后的维度为[?, 8, 128] 代码说明一下:即根据每一行X中的一个数,从W中取出对应行的128个数据,比如X[1, 3]个数据是3062,即从W中的第3062行取出128个数据 import numpy as np import tensorflow as tf data = np.array([[2, 1], [3, 4], [5,

深度学习原理与框架- batch_normalize(归一化操作)

1. batch_normalize(归一化操作),公式:传统的归一化公式 (number - mean) / std, mean表示均值, std表示标准差 而此时的公式是 scale * (num - mean) / std + beta  #scale 和 beta在计算的过程中会进行不断的更新,以使得数据可以产生多样性的分步 即 经过一次卷积层后,进行一次归一化操作,同时进行一次激活操作 x = conv_layer(x, [5, 5, 3, 64], 1) x = batch_norm

对比深度学习十大框架:TensorFlow 并非最好?

http://www.oschina.net/news/80593/deep-learning-frameworks-a-review-before-finishing-2016 TensorFlow 链接:https://www.tensorflow.org/ 对于那些听说过深度学习但还没有太过专门深入的人来说,TensorFlow 是他们最喜欢的深度学习框架,但在这里我要澄清一些事实. 在 TensorFlow 的官网上,它被定义为「一个用于机器智能的开源软件库」,但我觉得应该这么定义:Te

神经网络与深度学习笔记 Chapter 6之卷积神经网络

深度学习 Introducing convolutional networks:卷积神经网络介绍 卷积神经网络中有三个基本的概念:局部感受野(local receptive fields), 共享权重( shared weights), 混合( pooling). 与前面的神经网络不同,在这里我们用下图中的矩阵来表示输入神经元. 在cnn中,输入层的一个区域(例如,5 * 5)对应下一层隐含层中的一个神经元,这个区域就是一个局部感受野.如下图所示: 通过在输入矩阵中滑动局部感受野来对应隐含层中的