假设您有一个生成数据的函数:
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)
希望您会发现它有用。但是,请记住,这不是完全有效的实现,而是伪代码,因为您几乎没有指定任何细节。
0
TensorFlow 文档描述了使用TFRecordReader,TextLineReader,QueueRunner等和队列读取数据的方法。
我想做的事情要简单得多:我有一个python生成器函数,可以生成无穷数量的训练数据序列,作为(X,y)元组(都是numpy数组,第一个维度是批处理大小)。我只想使用该数据作为输入来训练网络。
是否有一个简单的独立示例,使用生成数据的生成器来训练TensorFlow网络? (沿着MNIST或CIFAR示例)