TypeError:fit_generator() 为参数“steps_per_epoch”获得了多个值

Posted

技术标签:

【中文标题】TypeError:fit_generator() 为参数“steps_per_epoch”获得了多个值【英文标题】:TypeError: fit_generator() got multiple values for argument 'steps_per_epoch' 【发布时间】:2021-06-13 04:54:44 【问题描述】:

我正在尝试训练 keras 模型。下面是训练模型的函数。

def train_model(input_videos, video_label, mapping, micro_expressions, val_x=None, val_micro=None, val_y=None, return_best=False):
    print("train_model")
    input_videos = np.asarray(input_videos)
    data_x, data_y, data_mapping, data_micro = H1_preprocessing(input_videos, video_label, mapping, micro_expressions)
    model, callbacks_lst = build_model()
    print("data_x: ", data_x.shape)
    print("data_y: ", data_y.shape)
    if val_x is not None and val_y is not None and val_micro is not None:
        hist = model.fit_generator([data_x, data_micro[0], data_micro[1], data_micro[2]], data_y, steps_per_epoch = 2, epochs = 20, verbose = 2, callbacks = callbacks_lst, validation_data=([val_x, val_micro[0], val_micro[1], val_micro[2]], val_y), use_multiprocessing=True, shuffle=True)
        print(hist) 
    else:
        hist = model.fit_generator([data_x, data_micro[0], data_micro[1], data_micro[2]], data_y, steps_per_epoch = 2, epochs = 20, verbose = 2, callbacks = callbacks_lst, use_multiprocessing=True, shuffle=True)
        print(hist)

    if return_best:
        print("Applying weights")
        model.load_weights("weights.best.hdf5")
        model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
    return model

fit_generator() 函数会产生错误。我不知道在正确的位置提供正确的参数。它显示以下错误。

Traceback(最近一次调用最后一次):文件“concatenated_classifier.py”, 第 697 行,在trained_model = train_model(list_gray_train_videos, list_train_label, clips_mapping, micro_expressions, 无, 无, 无, 真)文件“concatenated_classifier.py”,第 613 行,在 train_model hist = model.fit_generator([data_x, data_micro[0], data_micro1, data_micro[2]], data_y, steps_per_epoch = 2, epochs = 20, verbose = 2, callbacks = callbacks_lst, use_multiprocessing=True, shuffle=True) 文件 "C:\Users\Me\Anaconda3\lib\site-packages\keras\legacy\interfaces.py", 第 91 行,在包装器中返回 func(*args, **kwargs) 类型错误: fit_generator() 为参数 'steps_per_epoch' 获得了多个值

建议我在哪里提供 steps_per_epoch 和 data_y。

【问题讨论】:

【参考方案1】:

错误是您首先提供了两个位置参数[data_x, data_micro[0], data_micro[1], data_micro[2]]data_y,并且假设steps_per_epoch 参数是fit_generator 的第二个参数(请参阅tensorflow docs),变量data_y 将是用于steps_per_epoch 参数。然后,您使用关键字参数为steps_per_epoch 提供另一个值,这会导致错误。另见this *** answer。为了解决这个问题,请确保只提供位置参数,它应该是一个数据生成器。

【讨论】:

以上是关于TypeError:fit_generator() 为参数“steps_per_epoch”获得了多个值的主要内容,如果未能解决你的问题,请参考以下文章

keras fit_generator 并行

keras中fit_generator()的优势

Keras:网络不使用 fit_generator() 进行训练

fit_generator() 缺少 1 个必需的位置参数:“生成器”

在连体 CNN 上使用 .fit_generator 时出错

Keras 用于二元分类预测的 fit_generator() 总是 50%