前言
学习Tensorflow的过程,好像很多人都是入门时候不好理解Tensorflow的运行形式,实际上我认为现有的很多教程只能达到作者自己看得懂的程度(当然我应该也干过),这一次复习优化器的过程中,我看到了一个不错的完整的入门例子,加上注释,提供给学习者参考
例子与解析
这一个例子使用了三个模块,分别是Tensorflow,提供机器学习库,numpy,提供数学计算还有随机数(矩阵)生成函数的库,matplotlib,提供图示显示,表格和可视化的库
放出所有的代码,在Python3.6和Tensorflow1.14上能运行
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
# ADD LAYER 的例子
# 神经层添加函数
def add_layer(inputs, in_size, out_size, activation_function=None):
Weights = tf.Variable(tf.random_normal([in_size, out_size])) # 设置一个随机变量,是一个矩阵
biases = tf.Variable(tf.zeros([1, out_size]) + 0.1) # 偏置是一行out_size大小列的
Wx_plus_biases = tf.matmul(inputs, Weights) + biases # 还没有激活的值
if activation_function is None: # 如果激活函数没有,激活函数是非线性方程,如果保持线性,则为None
outputs = Wx_plus_biases
else:
outputs = activation_function(Wx_plus_biases)
return outputs
# 自定义一个数据
x_data = np.linspace(-1, 1, 300)[:, np.newaxis] # linspace:等差数列 newaxis:增加一个维度
noise = np.random.normal(0, 0.05, x_data.shape)
y_data = np.square(x_data) - 0.5 + noise
xs = tf.placeholder(tf.float32, [None, 1]) # None就是不限制Sample数量
ys = tf.placeholder(tf.float32, [None, 1])
l1 = add_layer(xs, 1, 10, activation_function=tf.nn.relu) # 输入层,隐藏层10
prediction = add_layer(l1, 10, 1, activation_function=None) # 输出层,这里为啥一定要设置为prediction
# 计算loss即与真实值的差别,计算单个值,计算所有值,计算所有值的平均值
loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction), reduction_indices=[1]))
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss) # 设置Tensorflow优化器0.1学习率
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
fig = plt.figure() # 实例化图表
ax = fig.add_subplot(1, 1, 1) # 表示绘制的是1x1网格,第一子图
ax.scatter(x_data, y_data) # 表示加上数据
plt.show()
for i in range(500):
sess.run(train_step, feed_dict={xs: x_data, ys: y_data}) # 输入数据并进行训练
if i % 50:
print(sess.run(loss, feed_dict={xs: x_data, ys: y_data})) # 计算和输出损失
有空我会丰富下这个内容的