1 训练模型的基本步骤
1.1 构造图
构造图的流程一般如下步骤:
- Step 1: 读数据 : tf.data
- Step 2: 为输入input和label标签创建placeholders: tf.placeholder()
- Step 3: 创建参数变量等:tf.get_variable()
- Step 4: inference
- Step 5: 构造loss function
- Step 6: 创建optimizer优化器
eg:
opt = tf.train.GradientDescentOptimizer(learning_rate=0.001)
optimizer = opt.minimize(loss)
1.2 训练模型
- Step 1 : 初始化variables
- Step 2: 运行optimizer,用feed_dict把输入值和标签label传进模型
- Step 3: 用FileWriter写日志文件
writer = tf.summary.FileWriter('./graphs/result', sess.graph)
- Step 4: 用TensorBoard看结果
tensorboard --logdir='./graphs'
2 Tensorflow读数据和优化器函数
2.1 tf.data
Placeholder的好处就是把数据处理放在tensorflow之外处理,用python方便,但是弊端就是使用单线程处理数据,通常会降低整个程序的执行过程。
如下是一些读取数据的函数,可以根据实际文件的格式进行读取:
- tf.data.Dataset.from_tensor_slices((features, labels))
- tf.data.TextLineDataset(filenames)
- tf.data.FixedLengthRecordDataset(filenames)
- tf.data.TFRecordDataset(filenames)
tf.data确实效率更高吗?
确实如此,如果用placeholder需要时间:9.05s,相同条件下用tf.data,处理时间是:6.12s。
2.2 Optimizer
tensorflow怎么知道哪些variable需要更新?
Session会将所有loss依赖的 trainable variables在训练过程中进行更新。
所有的变量参数默认都是trainable的,除非我们指定训练过程中不需要更新:
tf.Variable(initial_value=None, trainable=True, ...)
我们来看看tensorflow有一些什么优化器:
- tf.train.GradientDecscentOptimizer
- tf.train.AdagradOptimizer
- tf.train.MomentumOptimizer
- tf.train.AdamOptimizer
- tf.train.FtrlOptimizer
- tf.train.RMSPropOptimizer
- …