我正在实现tf.keras.utils.Sequence的数据生成器子类。其 getitem 返回一个包含数据的组合标签,例如
def __getitem__(self, idx):
......
return image_batch, [label_batch_part1, label_batch_part2]
label_batch_part1和label_batch_part2具有不同的形状。 我将生成器实例(train_gen)传递给了tf.keras的model.fit_generator,例如
model.compile(optimizer = Adam(lr = 1e-4), loss = my_cost_func, metrics = ['accuracy'])
model.fit_generator(train_gen,
steps_per_epoch=50,
epochs=100,
callbacks=[model_checkpoint])
我还有一个自定义丢失功能,例如
def my_cost_func(y_true, y_pred, **kwargs):
y_true_part1, y_true_part2 = y_true[0], y_true[1]
cost = y_true_part1 - op(y_true_part2, y_pred)
... ...
我希望y_true_part1是label_batch_part1,而y_true_part2是label_batch_part2。
到目前为止,我遇到了运行时错误:
文件“ /home/chris/hdd2nd/dev/mlenv/lib/python3.6/site-packages/tensorflow/python/keras/engine/training_utils.py”,行346,在standardize_input_data中 ValueError:检查模型目标时出错:传递给模型的Numpy数组列表不是模型预期的大小。预计会看到1个数组,但获得了以下2个数组的列表
我想知道这样做的正确方法是什么?
谢谢