tensorflow学习笔记3

实战,今天给大家举个回归例子,来说明下tensorflow的训练过程。

先贴上代码和注释。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 引入包
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt

#准备好数据,x为生成-1到1之间的100个数,y为2*x+1+噪声
data_x = np.linspace(-1, 1, 100)
data_y = np.multiply(data_x, 2) + 1 + np.random.uniform(-0.5, 0.5, 100)

#画图,将x,y的数据投上去
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.scatter(data_x, data_y)
plt.ion()
plt.show()

这里看下图吧

这里的点点就是我们的数据,大概按一条斜线分布,所以我们找到一条回归线来拟合这些数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#准备好placeholder,占位符,也叫容器,也就是个坑,用来放数据的
x_placeholder = tf.placeholder(tf.float32, name='X')
y_placeholder = tf.placeholder(tf.float32, name='Y')

#变量,
W = tf.Variable(dtype=tf.float32,name='W',initial_value=tf.random_normal([1]))
b = tf.Variable(dtype=tf.float32,name='W',initial_value=tf.random_normal([1]))

#y_pred 给出回归式的Op
y_pred = tf.add(tf.multiply(x_placeholder,W),b)

#求loss,给出优化器
loss = tf.reduce_mean(tf.square(y_placeholder-y_pred,name='loss'))

optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.1).minimize(loss)

#初始化变量
init = tf.global_variables_initializer()

#session会话
with tf.Session() as sess:
sess.run(init)
#迭代100次
for i in range(100):
total_loss = 0
for x, y in zip(data_x,data_y ):
#将之前graph中的loss和optimizer跑起来,训练过程就在这,因为有个minimize(loss)的操作
_, los = sess.run([optimizer, loss], feed_dict={x_placeholder: x, y_placeholder: y})
total_loss += los
#求预测值
yp = sess.run(y_pred,feed_dict={x_placeholder:data_x, y_placeholder: data_y})
if i % 5 == 0:
#每5步画一次线
lines = ax.plot(data_x, yp, 'r-', lw=5)
print('Epoch {0}: {1}'.format(i, total_loss / 100))
plt.pause(0.1)
try:
#为了不让线一直赖着不走,我们每画完就要删除。
ax.lines.pop(0)
except Exception:
print('error')

这里总结一下。本例解决的是一个线性回归问题,用tensorflow仍先画图,再运行。当然,还有准备数据。
其中画图部分包括:占位符定义,变量(权重)定义,运算式定义,loss定义,再加上一个让Loss减小的优化器
运行部分包括:将数据喂给相应的op,并run起来,画图操作是为了让大家更直观。