相当于这个数据集就是用一个二维数组表示的,行为数量,列为数据特征值数量或者目标值数量
流程思路
首先要定义权重和偏置构建模型
然后在用softmax+平均建立损失函数
计算准确率:
import tensorflow as tf
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
from tensorflow.examples.tutorials.mnist import input_data
#1)获取数据
mnist = input_data.read_data_sets("./mnist_data", one_hot=True)
#2)构建未知数据
#首先是x和y_true,这两个是用占位符展位,因为50000多个数据不可能全部使用,
x = tf.placeholder(dtype=tf.float32 , shape= [None,784])
y_true = tf.placeholder(dtype=tf.float32,shape=[None,10])
#其次是变量权重和偏置
weights = tf.Variable(initial_value=tf.random_normal(shape=[784, 10], stddev=0.01))
bias = tf.Variable(initial_value=tf.random_normal(shape=[10], stddev=0.1))
#3)建立模型
y_pridct = tf.matmul(x,weights)+bias
#4)构造损失函数(求平均值,这里类比线性回归损失函数球了均值:均方误差)
loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=y_pridct,labels=y_true))
#5)优化损失
optimizer = tf.GradientDescentOptimizer(learning_rate=0.01).minimize(loss)
# 5.1)增加准确率计算
#axis为0则每行最大,axis为1则每列最大,由于bool_list输出的是布尔值,而准确率是浮点数,所以必须将布尔类型转换为浮点类型即tf.cast
bool_list = tf.equal(tf.argmax(y_true, axis=1), tf.argmax(y_predict, axis=1))
#equal是返回一个布尔列表
#求准确率
accuracy = tf.reduce_mean(tf.cast(bool_list, tf.float32))
#6)初始化变量
init = tf.global_variables_initializer()
#7)开启会话
with tf.Session() as sess():
sess.run(init)
#开始训练
for i in range(5000):
#获取数据,feed进占位
image, label = mnist.train.next_batch(500)
#注意feed的时候直接找那些占位符进行就行,由于optimizer不用得值,所以直接用_,空白接住
_,loss_value, accuracy_value= sess.run([optimizer,loss,accuracy],feed_dict = {x : image,y_true:label})
print("第%d次的损失为%f,准确率为%f" % (i + 1, loss_value, accuracy_value))
if __name__ == '__main__':
print(mnist.train.next_batch(100))