【发布时间】:2018-09-03 05:59:30
【问题描述】:
我尝试按照此链接中的示例进行操作:
https://www.tensorflow.org/programmers_guide/datasets
但我完全不知道如何运行会话。我理解第一个参数是要运行的操作,而 feed_dict 是占位符(我的理解是训练或测试数据集的批次),
所以,这是我的代码:
batch_size = 100
handle_mix = tf.placeholder(tf.float64, shape=[])
handle_src0 = tf.placeholder(tf.float64, shape=[])
handle_src1 = tf.placeholder(tf.float64, shape=[])
handle_src2 = tf.placeholder(tf.float64, shape=[])
handle_src3 = tf.placeholder(tf.float64, shape=[])
我从 mp4 音轨和词干创建数据集,读取混合和源量级,并将它们填充以适合批处理
dataset = tf.data.Dataset.from_tensor_slices(
{"x_mixed":padded_lbl, "y_src0": padded_src[0], "y_src1":
padded_src[1],"y_src2": padded_src[1], "y_src3": padded_src[1]})
dataset = dataset.shuffle(1000).repeat().batch(batch_size)
iterator = tf.data.Iterator.from_structure(dataset.output_types, dataset.output_shapes)
从我应该做的例子中:
next_element = iterator.get_next()
training_init_op = iterator.make_initializer(dataset)
for _ in range(20):
# Initialize an iterator over the training dataset.
sess.run(training_init_op)
for _ in range(100):
sess.run(next_element)
但是,我有损失、汇总和优化器操作,需要将数据作为批次提供,下面的另一个示例如下:
l, _, summary = sess.run([loss_fn, optimizer, summary_op], feed_dict= {handle_mix: batch_mix, handle_src0: batch_src0, handle_src1: batch_src1, handle_src2: batch_src2, handle_src3: batch_src3})
所以我想到了类似的东西:
batch_mix、batch_src0、batch_src1、batch_src2、batch_src3 = data.train.next_batch(batch_size) 或者可能是单独运行以先获取批次,然后按上述方式运行优化,例如:
batch_mix, batch_src0, batch_src1, batch_src2, batch_src3 = sess.run(next_element)
l, _, summary = sess.run([loss_fn, optimizer, summary_op], feed_dict={handle_mix: batch_mix, handle_src0: batch_src0, handle_src1: batch_src1, handle_src2: batch_src2, handle_src3: batch_src3})
最后一次尝试返回了在 tf.data.Dataset.from_tensor_slices 中创建的批次的字符串名称(“x_mixed”、“y_src0”、...等),并且未能在会话中转换为 tf.float64 占位符.
能否请您告诉我如何创建此数据集,首先张量切片的结构可能存在错误,然后如何对它们进行批处理,
非常感谢,
【问题讨论】:
标签: tensorflow iterator dataset batching