700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > TensorFlow学习笔记(一):手写数字识别之softmax回归

TensorFlow学习笔记(一):手写数字识别之softmax回归

时间:2021-12-15 02:48:23

相关推荐

TensorFlow学习笔记(一):手写数字识别之softmax回归

在Tensorflow中实现逻辑回归的步骤:

一般来讲,使用Tensorflow实现机器学习算法模型的步骤如下:

1、定义算法公式; 2、定义loss函数,选择优化器优化loss; 3、使用输入训练集数据进行迭代训练; 4、在验证集或测试集上评估模型的准确率。

接下来一步一步的实现

#导入Tensorflow及MNIST数据集: import tensorflow as tf

from tensorflow.examples.tutorials.mnist import input_data

mnist = input_data.read_data_sets ( "MNIST_data/", one_hot = True )

#定义符号变量 x (数据)和 y_(标签) x = tf.placeholder ( tf.float32,[ None,784 ] ) y_ = tf.placeholder ( tf.float32, [ None,10 ] )

其中:x是一个占位符,我们在TensorFlow实际运行计算时再输入这个值。参数[ None,784 ]中的 None 表示我们接受输入任意数量的图像,784 表示每一张图展开成 784 维的向量。

#定义变量 w 和 b w = tf.Variable ( tf.zeros ( [ 784, 10 ] ) )

b = tf.Variable ( tf.zeros ( [ 10 ] ) )

其中:一个变量代表一个可修改的张量,它们可以用于计算输入值,也可以在计算中被修改。

#实现 softmax 模型 y = tf.nn.softmax ( tf.matmul ( x, w ) + b )

#计算交叉熵loss,并使用梯度下降算法优化loss

cross_entropy = tf.reduce_mean ( -tf.reduce_sum ( y_ * tf.log ( y ) , 1 ) )

train_step = tf.train.GradientDescentOptimizer ( 0.01 ) .minimize ( cross_entropy )

#找出那些预测正确的标签,返回给我们一组布尔值 correct_prediction=tf.equal(tf.argmax(y,1),tf.argmax(y_,1)) #把布尔值转换成浮点数,然后取平均值。例如,[True, False, True, True]会变成[1,0,1,1],取平均值后得到0.75.

accuracy = tf.reduce_mean ( tf.cast ( correct_prediction, "float" ) )

#添加一个操作来初始化我们创建的变量:

init = tf.global_variables_initializer( ) #在一个Session里面启动我们的模型

with tf.Session() as sess: #初始化变量:

sess.run ( init ) #开始训练模型,这里我们让模型循环训练 20000 次,在循环的每个步骤中,我们都会随机抓取训练数据中的 100 个批处理数据点,然后我们用这些数据点作为参数替换之前的占位符来运行train_stepfor i in range ( 20000 ) :

batch_xs, batch_ys = mnist.train.next_batch ( 100 )

result = sess.run ( [ accuracy, train_step ], feed_dict = { x : batch_xs, y_ : batch_ys } )

#计算模型在测试数据集上面的正确率。

print ( "accuracy:" , sess.run ( accuracy, feed_dict = { x : mnist.test.images, y_ : mnist.test.labels } ) )

在我的电脑上,准确率是 91.71% ,结果如下:

==================== RESTART: D:\Python_code\ML\mnist.py ====================

Extracting MNIST_data/train-images-idx3-ubyte.gz

Extracting MNIST_data/train-labels-idx1-ubyte.gz

Extracting MNIST_data/t10k-images-idx3-ubyte.gz

Extracting MNIST_data/t10k-labels-idx1-ubyte.gz

accuracy: 0.9171

>>>

在这里,我们训练了28 × 28 =784 像素的灰度数字图像(MNIST数据集)。将它们进行分类,使用了最简单的方法也就是使用 784 个像素作为单层神经网络的输入。然后通过非线性激活函数(softmax 函数)来反馈结果,得到的最后结果是 91.71%,这个结果并不理想,后面我们会使用含隐层的网络来训练同样的数据,测试结果会有巨大的提升。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。