如何使用生成器训练TensorFlow网络以产生输入?
python
tensorflow
5
0

TensorFlow 文档描述了使用TFRecordReader,TextLineReader,QueueRunner等和队列读取数据的方法。

我想做的事情要简单得多:我有一个python生成器函数,可以生成无穷数量的训练数据序列,作为(X,y)元组(都是numpy数组,第一个维度是批处理大小)。我只想使用该数据作为输入来训练网络。

是否有一个简单的独立示例,使用生成数据的生成器来训练TensorFlow网络? (沿着MNIST或CIFAR示例)

参考资料:
Stack Overflow
收藏
评论
共 1 个回答
高赞 时间 活跃

假设您有一个生成数据的函数:

 def generator(data): 
    ...
    yield (X, y)

现在,您需要另一个描述模型架构的功能。它可以是任何处理X且必须将y预测为输出的函数(例如,神经网络)。

假设您的函数接受X和y作为输入,以某种方式从X计算出y的预测,并返回y与预测y之间的损失函数(例如,交叉熵或MSE(在回归的情况下)):

 def neural_network(X, y): 
    # computation of prediction for y using X
    ...
    return loss(y, y_pred)

为了使模型工作,您需要为X和y定义占位符,然后运行会话:

 X = tf.placeholder(tf.float32, shape=(batch_size, x_dim))
 y = tf.placeholder(tf.float32, shape=(batch_size, y_dim))

占位符类似于“自由变量”,在通过feed_dict运行会话时需要指定占位符:

 with tf.Session() as sess:
     # variables need to be initialized before any sess.run() calls
     tf.global_variables_initializer().run()

     for X_batch, y_batch in generator(data):
         feed_dict = {X: X_batch, y: y_batch} 
         _, loss_value, ... = sess.run([train_op, loss, ...], feed_dict)
         # train_op here stands for optimization operation you have defined
         # and loss for loss function (return value of neural_network function)

希望您会发现它有用。但是,请记住,这不是完全有效的实现,而是伪代码,因为您几乎没有指定任何细节。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号