【问题标题】:How to give different size images to cnn model in keras/tensorflow如何在 keras/tensorflow 中为 cnn 模型提供不同尺寸的图像
【发布时间】:2018-10-14 01:14:49
【问题描述】:

我对如何输入两张尺寸的图片感到困惑,它也不能使用调整大小和裁剪。我已经看到了这个question,但它也没有解决。这是我的代码,但我得到了跟随错误:

StopIteration: 'NoneType' 对象不能解释为整数

希望大家多多指教

model = Sequential()
model.add(Conv2D(filters=6,kernel_size=(5,5),padding='same',input_shape=(None,None,3)))
model.add(Activation('tanh'))  
model.add(MaxPooling2D(pool_size=(2,2))) 

model.add(Conv2D(filters=16,kernel_size=(5,5),padding='same'))  
model.add(Activation('tanh')) 
model.add(GlobalAveragePooling2D())
model.add(Dense(1))  
model.add(Activation('sigmoid'))
#sgd = optimizers.RMSprop(lr=0.01, clipvalue=0.5)
model.compile(loss='binary_crossentropy',#'binary_crossentropy'categorical_crossentropy,
              optimizer='sgd',
              metrics=['accuracy'],
              )
train_datagen = ImageDataGenerator(rescale=1./255,
                                   vertical_flip=True,
                                   horizontal_flip=True)

test_datagen = ImageDataGenerator(rescale=1./255)

train_generator = train_datagen.flow_from_directory(
        train_data_dir,
        target_size=(img_width, img_height),
        batch_size=batch_size,
        class_mode='binary')#'binary'categorical)

validation_generator = test_datagen.flow_from_directory(
        validation_data_dir,
        target_size=(img_width, img_height),
        batch_size=batch_size,
        class_mode='binary')#'binary')

early_stopping = EarlyStopping(monitor='val_acc',patience=10,mode='max')
model.fit_generator(train_generator,
                    steps_per_epoch=nb_train_samples//batch_size,
                    epochs=nb_epoch,
                    validation_data=validation_generator,
                    validation_steps=nb_validation_samples,
                    callbacks=[early_stopping,
                               TensorBoard(log_dir='C:\\Users\\ccri\\Desktop\\new\\iou30\\426\\lenet\\log', write_images=True),
                               ModelCheckpoint(filepath='C:\\Users\\ccri\\Desktop\\new\\iou30\\426\\lenet\\canshu\\weights.{epoch:02d}-{val_loss:.2f}.h5', 
                               monitor='val_acc',                                   
                               save_best_only=True,
                               mode='auto')]
)

【问题讨论】:

  • 请格式化您的错误

标签: python tensorflow keras spp


【解决方案1】:

唯一的限制是创建一个可以适应不同大小图像的 numpy 数组。

您可以使用batch_size=1 解决此问题(这样您的 numpy 数组将永远不兼容)。

或者您可以尝试手动将所有相同大小的图像分组到一个数组中,将该数组训练为一个大批量,然后对其他大小执行相同操作。

【讨论】:

  • 谢谢daniel。但是你能告诉我如何将错误分类图像保存在evaluate_generator或错误图像的名称中吗?
【解决方案2】:

恐怕这是不可能的。权重矩阵如何更新?

假设你把它初始化为2x2矩阵:

a b
c d

假设您在一些 2x2 图像上进行了训练,然后您会想要在 4x4 图像上进行训练。它会是什么样子?元素abcd 会去哪里?左上方?中间?右上?你会生成一个新的吗?这将丢弃到目前为止的所有训练进度。

我真的建议将所有图像重新缩放到共同的宽度和高度。如果这是不可能的,并且每个宽度和高度都有相对大量的示例,您可以简单地创建几个神经网络(N1,N2,...),并且理论上,一旦您到达具有相同形状的层独立于输入图像切换到共享神经网络 N_shared。但是,您需要每个类别的大量示例。

【讨论】:

    猜你喜欢
    • 2018-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-27
    • 2020-05-04
    相关资源
    最近更新 更多