首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在中将验证数据传递给.fit时不能识别生成器

在中将验证数据传递给.fit时不能识别生成器
EN

Stack Overflow用户
提问于 2019-09-25 07:42:13
回答 2查看 602关注 0票数 1

准确的错误:

ValueError:在传递validation_data时,必须包含2项(x_val、y_val)或3项(x_val、y_val、val_sample_weights),但是它包含39项

我在任何地方都找不到这个错误,除了源代码。

代码语言:javascript
复制
model.fit(  train_x
            , train_y
            , epochs=1
            , validation_data=validation_data_flow
            , callbacks=[checkpointer]
        )

validation_data是DirectoryIterator,由flow_from_directory著

代码语言:javascript
复制
validation_data_flow = ImageDataGenerator().flow_from_directory(
        validation_data_dir,
        target_size = (img_width, img_height),
        batch_size = batch_size,
        class_mode = 'categorical')
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-25 18:26:55

验证和培训数据必须是相同类型的,既可以是生成器,也可以是ndarray。要解决这个问题,您需要将其中一个转换为另一个类型。看看this的答案,了解如何将生成器转换为ndarray。若要将ndarray转换为生成器,请使用ImageDataGenerator.flow()

票数 0
EN

Stack Overflow用户

发布于 2019-09-25 19:47:03

对于同一类型的数据(如数组或生成器)进行训练和验证并不是完全正确的,但是不能使用相同的函数进行训练和验证。

您可以在数组上进行训练,并在生成器上进行验证,但这将需要两个不同的函数调用,这意味着如果您使用多个时代,则不会在每个时代之后获得验证度量。你可以解决这个问题,比如:

代码语言:javascript
复制
for i in range(epochs):
    model.fit(train_x, train_y, epochs=1, callbacks=[checkpointer])
    loss = model.evaluate_generator(validation_data_flow)

    print("Validation loss for epoch %s was %s" % (i, loss))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58093506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档