深度学习网络由四个重要部分组成:数据集,定义模型(网络结构),训练/学习,预测/评估。这些都可以在TensorFlow中实现。
一、数据集
数据被分为三部分:训练数据,验证数据和测试数据。
TensorFlow中的三种读取数据方式:
1)通过feed_dict传递数据
2)从文件中读取数据
3)使用预加载的数据
1、通过feed_dict传递数据
运行每个步骤时都会使用run()或eval()函数调用中的feed_dict参数来提供数据。是在占位符的帮助下完成的,允许穿度Numpy数组数据。
#x和y是占位符,在feed_dict的帮助下传递包含X值的数组和包含Y值的数组
y = tf.placeholder(tf.float32)
x = tf.palceholder(tf.float32)
with tf.Session as sess:
X_Array = some Numpy Array
Y_Array = some Numpy Array
loss = ...
sess.run(loss, fees_dict = {x:X_Array, y:Y_Array})
2、从文件中读取
当数据集非常大时,使用此方法确保不是所有数据都立即占用内存
1)使用字符串张量 ["file0","file1"] 或者 [("file%d"i)for in in range(2)] 的方式创建文件命名列表,或者使用 files=tf.train.match_filenames_once('*.JPG') 函数创建。
2)文件名队列:创建一个队列来保存文件名,此时需要使用 tf.train.string_input_producer 函数。
3)Reader用于从文件名队列中读取文件。根据输入文件格式选择相应的阅读器。read方法是标识文件和记录(调试时有用)以及标量字符串值的关键字。
4)Decoder:使用一个或多个解码器和转换操作来将值字符串解码为构成训练样本的张量。
3、预加载的数据
数据集很小时可以使用,可以在内存中完全加载。因此可以将数据存储在常量或变量中。在使用变量时,需要将可训练标志设置为False,以便训练时数据不会改变。
二、定义模型
建立描述网络结构的计算图。涉及指定信息从一组神经元到另一组神经元的超参数,变量和暂未付序列以及损失/错误函数。
三、训练/学习
在DNN中的学习通常基于梯度下降算法,其目的是找到训练变量(权重/偏执),将损失/错误函数最小化。
通过初始化变量并使用run()来实现:
with tf.Session as sess:
sess.run()
四、评估模型
一旦网络被训练,通过predict()函数使用验证数据和测试数据来评估网络。这可以评价模型是否适合相应数据集,可避免过拟合或欠拟合的问题。