首页 > 解决方案 > 如何解决 resnet 50 实现中的值错误?

问题描述

我正在resnet-50Kaggle 上实施,我收到一个值错误。请帮帮我

    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

标签: pythontensorflowkerasdeep-learning

解决方案


input_tensor=Input(shape=(224,224,3))在定义ResNet50基本模型时已经给出。但是你正在放弃target_size=(28,28)你的train_generatorand test_generatorResNet50接收到 ie的训练图像形状与target_size预期的 ie 不同input_tensor。更改您target_size以匹配中提到的形状input_tensor。此外,ResNet50预计color_modergb相当grayscale


推荐阅读