python - “ValueError:如果您的数据是 Python 生成器的形式,则不能使用 `validation_split`。” 在 TensorFlow Keras 中
问题描述
我正在按照这个示例在我自己的类别上训练模型,并在 model.fit() 中使用 validation_split 来查看验证准确性。这是代码:
model.fit((item for item in image_data), epochs=30,
steps_per_epoch=steps_per_epoch,callbacks = [batch_stats], validation_split=0.33)
这样做我收到以下错误
Traceback (most recent call last):
File "C:\Users\admin\Desktop\phd python projects\tensorflow_img_class\src\tensorflow_img_class.py", line 65, in <module>
steps_per_epoch=steps_per_epoch,callbacks = [batch_stats], validation_split=0.33)
File "C:\Python37\lib\site-packages\tensorflow\python\keras\engine\training.py", line 758, in fit
y, sample_weight, validation_split=validation_split)
File "C:\Python37\lib\site-packages\tensorflow\python\keras\engine\training_utils.py", line 955, in check_generator_arguments
raise ValueError('If your data is in the form of a Python generator, '
ValueError: If your data is in the form of a Python generator, you cannot use `validation_split`.
我无法找到此错误的解决方案。如何在不从单独的目录加载验证数据的情况下查看验证分数?我希望我的原始训练数据被吐出以进行验证。是否可以?还有哪些其他选择?
更新遵循 KRUXX 的解决方案后,我在运行第一个 epoch 后收到此错误,它指向 model.fit 行
ValueError: Error when checking input: expected lambda_input to have shape (224, 224, 3) but got array with shape (256, 256, 3)
解决方案
当您遵循此示例时。您可以在ImageDataGenerator
像这样初始化时尝试拆分数据,
image_generator = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1/255, validation_split=0.33)
image_data_train = image_generator.flow_from_directory(str(data_root),subset='training')
image_data_val = image_generator.flow_from_directory(str(data_root),subset='validation')
这里subset
用于指定训练和验证生成器。您可以使用validation_data
参数将验证图像传递到model.fit
.
model.fit((item for item in image_data_train),
epochs=1,
steps_per_epoch=steps_per_epoch,
callbacks = [batch_stats],
validation_data = (item for item in image_data_val),
validation_steps =image_data_val.samples/image_data_val.batch_size )
更新
您需要flow_from_directory
根据自己的要求使用它。请阅读文档。
image_data_train = image_generator.flow_from_directory(str(data_root), target_size=(224,224),subset='training')
image_data_val = image_generator.flow_from_directory(str(data_root), target_size=(224,224),subset='validation')
推荐阅读
- python-3.x - 为什么我的乌龟子弹移动时会留下两条线?
- cordova - Cordova + WKWebView href 链接不会打开,除非长按
- c# - 断言来自 System.IO.Fakes 的方法被调用
- botframework - Microsoft Bot 框架 - Whatsapp 集成
- flutter - vscode中的颤动热重载按钮不起作用
- java - Checkmarx SQL 注入高严重性问题
- javascript - 如何确定加载时的空搜索结果列表?
- python - 根据另一列中的值将正则表达式应用于数据框列
- python - 试图建立
- vim - Vim 选项作用域:global-local、local 和 global