我正在尝试与Keras一起使用Dataset API,并且正在尝试在here中提到的行动计划中使用第三个选项。另外,我假设@fchollet here看到第二条评论时,第三个选项已经完成。
但是当我尝试实现它时,出现以下错误:
将符号张量馈送到模型时,我们期望张量具有 静态批次大小。张量的形状为:
(None, 32, 64, 64, 3)
我使用以下策略拟合模型:
training_filenames = [.....]
dataset = tf.data.TFRecordDataset(training_filenames)
dataset = dataset.map(_parse_function_all) # Parse the record into tensors.
dataset = dataset.batch(20)
iterator = dataset.make_initializable_iterator()
videos, labels= iterator.get_next()
model = create_base_network(input_shape = ( 32, 64, 64 3))
# output dimension will be (None, 10) for the model above
sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy', optimizer=sgd)
model.fit(videos, labels, , epochs=10, steps_per_epoch=1000)
我可以使用fit_genertor解决问题。我找到了解决方案here,我应用了@ Dat-Nguyen的解决方案。但是后来我无法访问自定义回调中的验证数据集来计算AUC指标。所以我需要适合而不是适合发电机,但首先需要git摆脱这个错误。
那么谁能告诉我为什么会出现此错误?拟合模型的第三步是现在在Keras中运行还是存在问题?
答案 0 :(得分:0)
所以我弄清楚了如何在tf.DatasetAPI中使用keras,但不使用验证数据。您可以在Keras model.fit() with tf.dataset API iterator initializers
处查看我的问题答案 1 :(得分:0)
我认为我是根据自己的情况发现问题的。问题是我正在使用独立的Keras。不是从腱流导入的。因此,将迭代器直接馈送到model.fit()的新功能仅在使用tf.Keras而不是独立的Keras时有效。