python - 如何解决 resnet 50 实现中的值错误?
问题描述
我正在resnet-50
Kaggle 上实施,我收到一个值错误。请帮帮我
train_dir='../input/project/data/train'
test_dir='../input/project/data/test'
train_datagen=ImageDataGenerator(rescale=1./255,
rotation_range=40,
width_shift_range=0.2,
height_shift_range=0.2,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True,
fill_mode='nearest')
test_datagen = ImageDataGenerator(rescale = 1./255)
train_generator = train_datagen.flow_from_directory(
train_dir,
color_mode='grayscale',
target_size=(28,28),
class_mode='binary',
batch_size=32,
)
test_generator = test_datagen.flow_from_directory(
test_dir,
color_mode='grayscale',
target_size=(28,28),
class_mode='binary',
batch_size=32,
shuffle='False',
)
model = Sequential()
model.add(ResNet50(include_top=False, pooling='avg', weights=resnet_weights_path,input_tensor=Input(shape=(224,224,3))))
model.add(Flatten())
model.add(BatchNormalization())
model.add(Dense(2048, activation='relu'))
model.add(BatchNormalization())
model.add(Dense(1024, activation='relu'))
model.add(BatchNormalization())
model.add(Dense(2, activation='sigmoid'))
model.layers[0].trainable = False
我正在训练一个二元分类器,我收到以下错误
ValueError: 由于变量形状 (1, 1, 256, 512) 和值形状 (512, 128, 1, 1) 不兼容,无法分配给变量 conv3_block1_0_conv/kernel:0
解决方案
您input_tensor=Input(shape=(224,224,3))
在定义ResNet50
基本模型时已经给出。但是你正在放弃target_size=(28,28)
你的train_generator
and test_generator
。ResNet50
接收到 ie的训练图像形状与target_size
预期的 ie 不同input_tensor
。更改您target_size
以匹配中提到的形状input_tensor
。此外,ResNet50
预计color_mode
会rgb
相当grayscale
。
推荐阅读
- php - PHP laravel 列搜索无法有效地使用 ->editcolumn getdatatable
- python - Xpath 不返回 TEXT 表单
Scrapy Shell 中的标签
- c++ - stack.size() 与 stack.empty()
- java - 在java中将XML文件保存到TXT
- python-3.x - 将循环结果添加为数据框中的行
- python - 如何在 Mac 上打开 ipynb 文件?
- karate - 任何示例都有一个 java 类实例调用一次并在具有不同特征文件的空手道的所有场景中使用
- ml.net - ML.NET 如何检测 PredictionEnginePool 中缺少模型
- javascript - 将 Double64 转换为 Long64 并返回 JavaScript
- python - 使用 altair 交互式绘图的编码错误?