实战,今天给大家举个回归例子,来说明下tensorflow的训练过程。
先贴上代码和注释。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 import numpy as npimport tensorflow as tfimport matplotlib.pyplot as pltdata_x = np.linspace(-1 , 1 , 100 ) data_y = np.multiply(data_x, 2 ) + 1 + np.random.uniform(-0.5 , 0.5 , 100 ) 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 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 = tf.add(tf.multiply(x_placeholder,W),b) 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() with tf.Session() as sess: sess.run(init) for i in range(100 ): total_loss = 0 for x, y in zip(data_x,data_y ): _, 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 : 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起来,画图操作是为了让大家更直观。