1. tf.matmul(X, w) # 进行点乘操作
参数说明:X,w都表示输入的数据,
2.tf.equal(x, y) # 比较两个数据对应位置的数是否相等,返回值为True,或者False
参数说明:x,y表示需要比较的两组数
3.tf.cast(y, 'float') # 将布尔类型转换为数字类型
参数说明:y表示输入的数据,‘float’表示转换的数据类型
4.tf.argmax(y, 1) # 返回每一行的最大值的索引
参数说明:y表示输入数据,1表示每一行的最大值的索引,0表示每一列最大值得索引
5.tf.nn.softmax(y) # 对每一行数据,按照softmax方式,计算其概率值
参数说明:y表示输入的数据
6.tf.train.GradientDescentOptimizer(0.05).minimize(loss) # 对损失值采用梯度下降的方法进行降低操作
参数说明:0.05表示学习率的大小,loss表示损失值
代码说明:相较于上一个线性拟合的代码,逻辑回归的代码,使用了tf.placeholder()进行数据输入的占位,
预测结果等价于tf.matmul(X, w) + b,作为预测结果
代码:
第一步:载入mnist数据集
第二步:超参数的设置,包括输入样本的维度,分类的类别数,一个batch的大小,以及迭代的次数
第三步:使用tf.placeholder() 构造X特征和y标签
第四步:使用tf.Variable(tf.random_normal([inputSize, num_classes]))构造W和b
第五步:使用tf.matmul获得预测得分值,使用tf.nn.softmax() 将得分值转换为概率值
第六步:使用L2损失值,即均分误差作为损失值
第七步:使用tf.train.GradientDescentOptimizer(learning_rate=0.05).minimize(loss), 对损失值进行梯度下降
第八步:使用tf.equal(tf.argmax(y_pred), tf.argmax(y)) 获得两个标签的最大值索引是否一致,再使用tf.reduce_mean(tf.cast()) 计算准确率
第九步:循环,使用mnist.train.next_batch进行训练数据的部分数据的读取
第十步:sess.run([optm, loss], feed_dict={X:batch[0], y:batch[1]}) # 执行损失值和梯度下降降低损失值,从而更新参数
第十一步:每迭代1000次,打印部分数据的准确率
第十二步:打印测试数据部分的准确率
import numpy as np import tensorflow as tf import matplotlib.pyplot as plt from tensorflow.examples.tutorials.mnist import input_data # 第一步:mnist数据集的载入 mnist = input_data.read_data_sets('/data', one_hot=True) # 第二步:初始超参数的设置 # 输入层的维度 inputSize = 784 # 分类的类别数 num_classes = 10 # 每一次参数更新的batchSize batch_size = 64 # 循环的次数 trainIteration = 50000 # 第三步:输入数据初始化操作, 进行一个占位操作 # X的维度为[-1, inputSize] X = tf.placeholder(tf.float32, [None, inputSize]) # y的维度为[-1, num_classes] y = tf.placeholder(tf.float32, [None, num_classes]) # 第四步:变量的初始化操作 # W1进行正态参数初始化,维度为[inputSize, num_classes] W1 = tf.Variable(tf.random_normal([inputSize, num_classes], stddev=0.1)) # b1进行全零初始化,维度为[num_classes] b1 = tf.Variable(tf.zeros([num_classes])) # 第五步:使用tf.matmul进行预测操作, 使用softmax计算概率值,扩大类别差距 y_pred = tf.nn.softmax(tf.matmul(X, W1) + b1) # 第六步:使用L2 loss计算损失值, tf.reduce_mean求出所有的损失值的平均值 loss = tf.reduce_mean(tf.square(y-y_pred)) # 第七步:使用梯度下降法,对loss进行降低 opt = tf.train.GradientDescentOptimizer(learning_rate=0.05).minimize(loss) # 第八步:判断预测结果的最大值和真实值之间是否相等,使用True和False表示 correct_pred = tf.equal(tf.argmax(y_pred, 1), tf.argmax(y, 1)) # 使用tf.cast将布尔类型转换为float类型,使用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): # 第九步:使用mnist.train.next_batch 获得一个batch的数据 bacth = mnist.train.next_batch(batch_size) # 第十步:使用sess.run执行梯度下降和loss操作,输入的参数为batch_X和batch_y数据 _, loss = sess.run([opt, loss], feed_dict={X:bacth[0], y:bacth[1]}) # 第十一步:如果迭代1000次,打印当前训练数据的准确率 if i % 1000 == 0: print('train accr %g'%(sess.run(accr, feed_dict={X:bacth[0], y:bacth[1]}))) # 第十二步:打印测试数据的batch_size的准确率 batch = mnist.test.next_batch(batch_size) print('test accr %g'%(sess.run(accr, feed_dict={X: batch[0], y: batch[1]})))