前言
在一开始,作为小白的我对Tensorflow、Theano编程并不习惯和理解,因为它跟我之前接触的编程风格不太一样。所以我就写一下这篇文章以梳理一下我的思路和对深度学习框架编程的理解。本文参考了:YJango的TensorFlow整体把握当中内容。
模型与结构
倘若对深度学习或者机器学习有所了解的人都知道,对于一个待处理或待预测的问题,我们需要对这个问题进行建模。建模后,我都会导入我们已经做好预处理的数据,然后就是进行漫长的训练过程。
正如上述,这就是Tensorflow、Theano编程的主要风格(思路)。总结如下:
- 建立模型(CNN,SVM,RNN)
- 导入数据(如Word2vec)
- 通过优化算法对模型求出最优解(如GD梯度下降法)
- 得到最优模型后,通过校验集合对模型进行评估
大家可能觉得这部就是我们做机器学习或者深度学习的流程嘛,也没啥的。那好吧,我就给出一些半伪代码,让大家感受一下吧!
建立模型
import tensorflow as tf
x = tf.placeholder(dtype=tf.float32, shape=(50, 10))
t = tf.placeholder(dtype=tf.float32, shape=(1))
w = tf.Variable(tf.random_normal([10, 1], mean=0, stddev=.35), name="w")
b = tf.Variable(tf.random_normal([50, 1], mean=0, stddev=.35), name="b")
pred = tf.matmul(x, w) + b
loss = tf.reduce_mean((t - pred) ** 2)
以上程序未必能够正确运行 ,但大家可以看得出这是一个很基本的线性回归问题。这就是基本把算法模型建立好了。接下来就用特定的优化算法对模型进行迭代优化。
给定优化算法
train_step = tf.train.AdamOptimizer(learning_rate=1e-5).minimize(loss)
以上是定义了adam算法对损失函数(loss)进行进行优化的步骤并且学习率为0.00001,其实可以理解为定义好训练的一次迭代。
开始训练
data, label = get_train_data()
sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)
for i in range(np.shape(label)[0] // 50):
sess.run(train_step, feed_dict={x: data[i * 50: (i + 1) * 50, :], z: label[i * 50: (i + 1) * 50, :]})
最后就是把数据导入,就开始漫长的训练旅程啦(假如我可以用GPU家加速就好了[哭崩了])。倘若你有校验数据对模型进行评估就更好啦,这里我就不多写啦。当作留给大家的练手吧。
总结
引用之前开头我说的那篇文章:
其实在我们一建立模型的时候,就好像建地下水管那样子。阀门就是我们的w,b这些参数阀门控制的数据的流动(水管中的水)。在建立模型之前,我们是不会注入水进去,也就是我们的数据。所以建立模型后,我们是没有给模型注入训练数据对其进行训练。在我们设计好、构建好模型后,我们注入训练数据,并通过一定的算法调整参数w和b(水管上的阀门)。最后这个模型(水管结构)就会模拟出较好的控制,输出接近我们想要的数据,达到一定的预测或分类想过。
好啦!是时候晚安咯。明天继续学习Tensorflow的内容。早唞!好梦!