如需转载,请注明出处,欢迎加入深度学习群 255568483
Tensorflow的介绍请各位自行google,就不做多的介绍了。
Tensorflow是一个深度学习框架,他和机器学习一样,有其固定的解决问题的方式。其训练过程有固定的模式,一般如下:
1.初始化模型参数
2.输入训练数据
3.在训练数据上验证模型
4.计算损失
5.调整模型参数
重复第2步操作。
解释:
1.在第一次运行的时候,初始化模型参数。通常我们使用随机数来代替,或者全部设置为0
2.对每个数据样本进行训练,通常会随机的打乱样本数据顺序
3.在训练数据上执行模型,根据当前的模型参数计算每次训练的输出。
4.计算模型损失,这个主要是用于表明我们的模型与实际模型的偏差有多大。对于不同的模型有不同的损失函数。
5.调整模型参数,这是在学习过程中发生的。根据损失函数,调整模型的参数,通常使用梯度下降算法来学习。
训练过程完成以后,就到了评估阶段,我们使用测试的数据来验证输出,并评估损失。通常的方法是把数据按训练/测试 70/30或者80/20来划分数据。
根据以上思路,整理一个解决问题的基本代码框架:
- import tensorflow as tf
-
-
-
- def inference(X):
- return ''
-
-
-
- def loss(X, Y):
- return ''
-
-
-
- def inputs():
- return ''
-
-
-
- def train(total_loss):
- return ''
-
-
-
- def evaluate(sess, X, Y):
- return ''
-
- saver = tf.train.Saver()
-
- with tf.Session() as sess:
- tf.initialize_all_variables().run()
- X, Y = inputs()
- total_loss = loss(X, Y)
- train_op = train(total_loss)
- coord = tf.train.Coordinator()
- threads = tf.train.start_queue_runners(sess=sess, coord=coord)
- training_steps = 1000
- for step in range(training_steps):
- sess.run([train_op])
- if step % 10 == 0:
- print("loss: ", sess.run([total_loss]))
-
- saver.save(sess, 'my-model', global_step=step)
-
- evaluate(sess, X, Y)
-
- saver.save(sess, 'my-model', global_step=training_steps)
-
- coord.request_stop()
- coord.join(threads)
- sess.close()
以上是处理问题的一个基本套路,第一步初始化模型的参数,然后定义一个模型,读取输入数据(method inputs),训练模型(method inference),计算损失函数(method loss),调整模型参数(method train),评估训练模型(method evaluate),然后在tensorflow中运行。
下面通过一个例子来解释,我们定义一个函数 y=2x+0.5,根据以上函数随机生成一个含有500个数据的数据集,使用matplotlib显示如下:
使用tensorflow来拟合此函数,根据以上的代码框架来看拟合的函数曲线,如下:
第1次
经过20次的训练基本上可以满足要求,看损失函数如下
完整代码如下:
- import numpy as np
- import matplotlib.pyplot as plt
- import tensorflow as tf
-
- number_of_points = 300
- x_point = []
- y_point = []
-
- a = 2
- b = 0.5
-
- for i in range(number_of_points):
- x = np.random.normal(0.0,0.5)
- y = a*x + b +np.random.normal(0.0,0.1)
- x_point.append([x])
- y_point.append([y])
-
- plt.plot(x_point,y_point, 'o', label='Input Data')
- plt.legend()
- plt.show()
-
-
-
- A = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
- b = tf.Variable(tf.zeros([1]))
-
-
- def inference(x):
- return A * x + b
-
-
-
- def loss(x, y):
- y_predicted = inference(x)
- return tf.reduce_sum(tf.squared_difference(y, y_predicted))
-
-
-
- def inputs():
- return tf.to_float(x_point), tf.to_float(y_point)
-
-
-
- def train(total_loss):
- learning_rate = 0.001
- return tf.train.GradientDescentOptimizer(learning_rate).minimize(total_loss)
-
-
-
-
- def evaluate(sess):
- print('evaluate>>>>>>>>>',sess.run(inference([[0.3]])))
- print('evaluate>>>>>>>>>',sess.run(inference([[0.4]])))
-
-
- saver = tf.train.Saver()
-
- with tf.Session() as sess:
- tf.global_variables_initializer().run()
- x, y = inputs()
- total_loss = loss(x, y)
- train_op = train(total_loss)
- coord = tf.train.Coordinator()
- threads = tf.train.start_queue_runners(sess=sess, coord=coord)
- training_steps = 21
- for step in range(training_steps):
- sess.run([train_op])
- if step % 5 == 0:
- print("loss: ", sess.run([total_loss]))
-
- saver.save(sess, 'model/my-model', global_step=step)
- plt.plot(x_point, y_point, 'o', label='step = {}'.format(step))
- plt.plot(x_point, sess.run(A) * x_point + sess.run(b))
- plt.legend()
- plt.show()
-
- evaluate(sess)
-
- saver.save(sess, 'model/my-model', global_step=training_steps)
-
- coord.request_stop()
- coord.join(threads)
- sess.close()
以上代码运行环境为tensorflow1.0
转:http://blog.csdn.net/vs412237401/article/details/61918780