2021-01-30-tensorflow实现机器学习流程

// 导入 tensorflow
import tensorflow as tf 
// 导入处理 MNIST 数据集的工具类
import input_data

// 加载 MNIST 数据集,获得一个封装好的对象 mnist
mnist = input_data.read_data_sets('MNIST_data', one_hot=True)

// 设置输入(即手写图像),placeholder 表示 x是一个占位符,
// shape 的 None 表示输入数据的第一维可以任意大小
x = tf.placeholder(tf.float32, shape=[None, 784])
// 设置针对输入图像,其期望的输出
y_ = tf.placeholder(tf.float32, shape=[None, 10])

// 定义 Variable,用于存储隐藏层的权重,W 是一个二维权重矩阵,
// W[i][j] 表示第 i 个像素属于第 j 个数字的概率;b 是一维数组,b[i] 
// 表示第 i 个数字的偏移量。因此,要求输入 x 属于各个数字的概率
// 公式为:W * x + b
W = tf.Variable(tf.zeros([784,10]))
b = tf.Variable(tf.zeros([10]))

/** 定义好需要的参数变量后,就可以设置训练过程了,训练过程主要分为 3 步:
   1. 定义隐藏层的输入输出过程
   2. 定义损失函数
   3. 选择训练方法开始训练 **/

// 1.定义隐藏层的输入输出过程 :
//    之前我们说用 softmax 回归模型来做隐藏层,TensorFlow 已经实现了
//    softmax 的具体方法,所以我们只要一行代码就能表示整个前馈的过程
y = tf.nn.softmax(tf.matmul(x, W) + b)

// 2.定义损失函数:
//    我们使用交叉熵来衡量结果的好坏
cross_entropy = -tf.reduce_sum(y_*tf.log(y))

// 3.选择训练方法开始训练:
//    由于我们已经知道了损失函数,我们的训练目的是让损失函数最小,
//    这里我们使用梯度下降的方法求最小值
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)

// 定义好训练过程后,就可以开始真正的训练过程了

// 初始化 session
sess = tf.Session() 

//加载所有 variable
init = tf.initialize_all_variables() 
sess.run(init)

// 使用随机梯度下降的方法,分批次多次训练
for i in range(1000): 
    batch_xs, batch_ys = mnist.train.next_batch(100)   
    //这里随机获取的 batch_xs, batch_ys 用来填充之前定义的占位符 x, y_
    sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
上一篇:分类任务的标签与one-hot相互转化(tensorflow)


下一篇:PIPIOJ 1168: PIPI的方格