代码和运行结果
找了个例子,把代码敲进去,先贴代码吧:
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
def moving_average(a, w = 10):
if len(a) < w:
return a[:]
return [val if idx < w else sum(a[(idx - w): idx])/w for idx, val in enumerate(a)]
train_X = np.linspace(-1, 1, 100)
train_Y = 2 * train_X + np.random.randn(*train_X.shape) * 0.3 #y = 2x
plt.plot(train_X, train_Y,'ro', label = 'Original data')
plt.legend()
plt.show()
#创建模型
#占位符
X = tf.placeholder("float")
Y = tf.placeholder("float")
#模型参数
W = tf.Variable(tf.random_normal([1]), name = "weight")
b = tf.Variable(tf.Variable(tf.zeros([1])), name = "bias")
#向前结构
z = tf.multiply(X, W) + b
#反向优化
cost = tf.reduce_mean(tf.square(Y - z))
learning_rate = 0.01
optimizer = tf.compat.v1.train.GradientDescentOptimizer(learning_rate).minimize(cost)
#初始化所有变量
init = tf.global_variables_initializer()
#定义参数
train_epochs = 20
display_step = 1
#启动session
with tf.Session() as sess:
sess.run(init)
plotdata = {"batchsize": [], "loss":[]}
#向模型中输入数据
for epoch in range(train_epochs):
for (x, y) in zip(train_X, train_Y):
sess.run(optimizer, feed_dict = {X: x, Y: y})
#显示训练中的详细信息
if epoch % display_step == 0:
loss = sess.run(cost, feed_dict = {X: train_X, Y: train_Y})
print("Epoch:", epoch + 1, " cost = ", loss, " W = ", sess.run(W), "b = ", sess.run(b))
if not (loss == "NA"):
plotdata["batchsize"].append(epoch)
plotdata["loss"].append(loss)
print("Finished!")
print("cost = ", sess.run(cost, feed_dict = {X: train_X, Y: train_Y}), "W = ", sess.run(W), "b = ", sess.run(b))
#图形显示
plt.plot(train_X, train_Y, 'ro', label = 'Original data')
plt.plot(train_X, sess.run(W) * train_X + sess.run(b), label = 'Fittedline')
plt.legend()
plt.show()
plotdata["avgloss"] = moving_average(plotdata["loss"])
plt.figure(1)
plt.subplot(211)
plt.plot(plotdata["batchsize"], plotdata["avgloss"], 'b--')
plt.xlabel("Minibatch number")
plt.ylabel("Loss")
plt.title("Minibatch run vs. Training loss")
plt.show()
print("x = 0.2, z = ", sess.run(z, feed_dict = {X: 0.2}))
运行结果如下:
-
训练样本图示:
-
训练过程:
Epoch: 1 cost = 0.3932809 W = [1.0674796] b = [0.28588685]
Epoch: 2 cost = 0.18038075 W = [1.4702674] b = [0.19911513]
Epoch: 3 cost = 0.112091534 W = [1.6866398] b = [0.12487796]
Epoch: 4 cost = 0.09329908 W = [1.7981633] b = [0.08322224]
Epoch: 5 cost = 0.088284045 W = [1.8550674] b = [0.06153361]
Epoch: 6 cost = 0.086936906 W = [1.8840283] b = [0.05043918]
Epoch: 7 cost = 0.08656489 W = [1.898758] b = [0.04478921]
Epoch: 8 cost = 0.08645678 W = [1.9062486] b = [0.04191512]
Epoch: 9 cost = 0.08642279 W = [1.9100573] b = [0.04045354]
Epoch: 10 cost = 0.08641093 W = [1.9119941] b = [0.03971026]
Epoch: 11 cost = 0.0864063 W = [1.912979] b = [0.0393323]
Epoch: 12 cost = 0.0864043 W = [1.9134799] b = [0.03914016]
Epoch: 13 cost = 0.08640339 W = [1.9137341] b = [0.03904257]
Epoch: 14 cost = 0.08640294 W = [1.9138632] b = [0.03899306]
Epoch: 15 cost = 0.08640273 W = [1.9139293] b = [0.03896773]
Epoch: 16 cost = 0.08640262 W = [1.9139631] b = [0.03895474]
Epoch: 17 cost = 0.08640256 W = [1.91398] b = [0.03894821]
Epoch: 18 cost = 0.08640253 W = [1.9139886] b = [0.0389449]
Epoch: 19 cost = 0.08640251 W = [1.9139936] b = [0.03894305]
Epoch: 20 cost = 0.08640251 W = [1.9139961] b = [0.03894206]
Finished!
cost = 0.08640251 W = [1.9139961] b = [0.03894206]
- 训练结果:
- 训练过程中损失函数结果的变化,以及 x=0.2 时预测的 z 值:
遇到的问题
- 在 anaconda 下用 pip install tensorflow==1.15.0rc3 命令安装的 CPU 版本运行正常。
- 在 anaconda 下用 pip install tensorflow-gpu==1.15.0rc3 命令安装的 GPU 版本出现问题,错误提示说是某个函数设备不支持。更换成1.13.0rc1版本运行正常。
- 在 anaconda 下用 pip install tensorflow-gpu 命令默认安装 GPU 最新版本2.0.0出现问题,错误提示非法的数据。估计GPU驱动或者CUDA的版本不匹配。以后再考虑2.0版本。
进一步的讨论话题
- 得认真学习一下 Python 语言了,不然程序根本看不懂。
- Numpy 是个什么鬼?估计得花时间学习一下。