《一个图像复原实例入门深度学习&TensorFlow—第三篇》在TensorFlow中进行深度学习的流程

版权声明:转载注明出处,谢谢~ https://blog.csdn.net/qq_43024357/article/details/81981895

1. TensorFlow的基本使用

这里直接看官方文档的介绍:http://www.tensorfly.cn/tfdoc/get_started/basic_usage.html
我贴出最重要的内容(先看看,慢慢的就理解了):
使用 TensorFlow, 你必须明白 TensorFlow:
1. 使用图 (graph) 来表示计算任务.
2. 在会话 (Session) 中执行图(graph)
3. 使用 tensor 表示数据.
4. 通过 变量 (Variable) 维护状态.
5. 使用 feed 和 fetch 可以为任意的操作(arbitrary operation) 赋值或者从其中获取数据.

2. 在TensorFlow中进行深度学习的主要流程

这里我直接贴出一份python伪代码来介绍:

# 首先:导入各种你需要的包 tensorflow numpy...
import tensorflow as tf
import model # 导入自己定义的包,这样可以精简代码
# import any pkg if you need
# 构建计算图
# 1.从训练集和测试集中获取mini-batch
Train_Images_Batch,Train_Labels_Batch = input_Data.get_batch(......)
Test_Images_Batch,Test_Labels_Batch = input_Data.get_batch(......)

# 2.定义存放mini-batch的占位符
x = tf.placeholder(......)
y_label = tf.placeholder(......)

# 3.前向传播计算网络输出(model.py文件中的inference函数定义了我们的网络结构)
y_conv = model.inference(x)

# 4.计算实际输出和理论输出之间的均方误差
loss = tf.reduce_mean(tf.square(y_conv - y_label))

# 5.利用tensorflow自带的寻优算法来优化网络参数,使得loss最小,1e-4是学习率
train_op = tf.train.AdamOptimizer(1e-4).minimize(loss)

# 6.初始化所有的局部和全局变量
init_op = (tf.local_variables_initializer(),tf.global_variables_initializer())

# 在会话(Session)中执行创建好的计算图
# 1.打开一个Session
with tf.Session() as sess: 
# 2.变量初始化
    sess.run(init_op)      

# 3.开始训练,每个step取出一个mini-batch作为网络的输入,训练网络
#   每一次训练都会使得网络中可学习参数的值向使得loss更小的方向变化一些
#   这里训练100000步,也就是参数要向使得loss更小的方向调整10000次,最终达到收敛
    for step in range(100000): 

# 4.产生这一step输入网络的mini-batch
        train_images_batch,train_labels_batch = sess.run([Train_Images_Batch,Train_Labels_Batch]) 

# 5.将mini-batch喂给网络入口,x和y_label
        sess.run(train_op,feed_dict = {x:train_images_batch,y_label:train_labels_batch})

# 6.网络训练结束,现在使用网络。将测试数据输入网络,计算网络输出值,与实际输出对比,评价网络
test_images_batch,test_labels_batch = sess.run([Test_Images_Batch,Test_Labels_Batch])
y_pred = sess.run(y_conv,feed_dict = {x:test_images_batch})

3. 总结

TensorFlow将我们的很多繁琐的代码工作都省去了,我们只需要专注于整理输入数据,构建自己的网络(也就是定义前向传播过程),选择损失函数,然后在Session中反复将不同的mini-batch输入网络,程序就能自动调整我们所定义网络的中的可学习参数,使得网络输出与实际输出之间的差异变小,训练结束后,对于类似的输入,网络能够直接输出令人满意的结果。
小到我们即将处理的这个简单的图像复原实例,大到AlphaGo这种复杂的东东,大致都是这样一个过程,只是处理的数据不同,评价loss的方式不同,网络结构不同而已。当我们处理完这个实例之后,对于其它问题,你也只需要更换不同的训练数据,选择不同的loss评价方法,定义不同的网络结构罢了。所以真是一招鲜吃遍天啊,学习成本真的不高。
下一篇就直接开始流程中的第一步获取训练数据,我个人认为是最总要的一步。

猜你喜欢

转载自blog.csdn.net/qq_43024357/article/details/81981895