python - 训练中的 TensorFlow 错误:tensorflow.python.framework.errors_impl.InvalidArgumentError
问题描述
我一直在尝试使用 CNN 训练一个模型来检测照片中的猫。我一直在使用这些数据集:
- https://www.kaggle.com/shaunthesheep/microsoft-catsvsdogs-dataset
- https://www.kaggle.com/balraj98/facades-dataset
我一直收到此错误:
tensorflow.python.framework.errors_impl.InvalidArgumentError: Input size should match (header_size + row_size * abs_height) but they differ by 2
[[{{node decode_image/DecodeImage}}]]
[[IteratorGetNext]] [Op:__inference_train_function_962]
Function call stack:
train_function
这是代码(我从早期项目中重用并调整了它):
import matplotlib.pyplot as plt
import numpy as np
import os
import PIL
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
from tensorflow.keras.models import Sequential
batch_size = 64
img_height = 180
img_width = 180
train_ds = tf.keras.preprocessing.image_dataset_from_directory(
"D://datasets and work//archive(2)//PetImages",
validation_split=0.2,
subset="training",
seed=123,
image_size=(img_height, img_width),
batch_size=batch_size)
val_ds = tf.keras.preprocessing.image_dataset_from_directory(
"D://datasets and work//archive(2)//PetImages",
validation_split=0.2,
subset="validation",
seed=123,
image_size=(img_height, img_width),
batch_size=batch_size)
class_names = train_ds.class_names
print(class_names)
AUTOTUNE = tf.data.AUTOTUNE
train_ds = train_ds.cache().shuffle(1000).prefetch(buffer_size=AUTOTUNE)
val_ds = val_ds.cache().prefetch(buffer_size=AUTOTUNE)
num_classes = 2
data_augmentation = tf.keras.Sequential([
layers.experimental.preprocessing.RandomZoom(0.1)
])
# horizontal image flipping is ok, chexnet did it;implement it later, Sahal
model = Sequential([
layers.experimental.preprocessing.Rescaling(1./255),
layers.Conv2D(32, 2, padding='same', activation='relu'),
layers.MaxPooling2D(pool_size=(2, 2), strides=(1, 1), padding='valid'),
layers.Conv2D(32, 2, padding='same', activation='relu'),
layers.MaxPooling2D(pool_size=(2, 2), strides=(1, 1), padding='valid'),
layers.Conv2D(64, 2, padding='same', activation='relu'),
layers.MaxPooling2D(pool_size=(2, 2), strides=(1, 1), padding='valid'),
layers.Conv2D(8, 2, padding='same', activation='relu'),
# layers.Dropout(0.1),
layers.Flatten(),
layers.Dense(128, activation='relu'),
layers.Dense(num_classes)
])
model.compile(optimizer=tf.optimizers.Adam(learning_rate=0.01),
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits = True),
metrics=['accuracy'])
epochs=10
history = model.fit(
train_ds,
validation_data=val_ds,
epochs=epochs
)
(我使用的是 TensorFlow 2.4.0 版和 Python 3.8.7 版)
解决方案
推荐阅读
- android - Bundle 在 Fragment 中为空
- c# - 如何在 ASP.NET 中读取上传的 CSV 文件并跳过第一行?
- python - 使用 pyspark 进行一次热编码的最有效方法
- javascript - 具有共享相同事件侦听器的多个输入的去抖动事件
- c++ - C/C++ CreateFileA 失败
- sql - group by 语句中未过滤的数据 - SQL Server
- sql - Creating a category tree table from an array of categories in PostgreSQL
- c++ - 如何在不使用 -I 选项的情况下链接静态库
- c# - 为 Statsd 引用 nuget 包时找不到 Visual Studio 2019 .cs 文件
- java - 如何初始化自定义迭代器?