如何在 keras/tensorflow 中为 cnn 模型提供不同大小的图像
How to give different size images to cnn model in keras/tensorflow
我对如何输入两个尺寸的图片感到困惑,它也不能使用调整大小,crop.I 看过这个 question 但它也不是 resolved.this 是我的代码但是我收到以下错误:
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')]
)
恐怕这是不可能的。权重矩阵如何更新?
假设你将它初始化为2x2
矩阵:
a b
c d
一旦你训练了一些 2x2
图像,假设你想要训练 4x4
图像。它会是什么样子?元素 a
、b
、c
和 d
会去哪里?左上方?中间?右上?你会生成一个新的吗?这将丢弃到目前为止的所有训练进度。
我真的建议将所有图像重新调整为共同的宽度和高度。如果这是不可能的,并且每个宽度和高度的示例数量相对较多,您可以简单地创建几个神经网络(N1、N2、...),并且理论上,一旦您到达具有相同形状的层独立于输入图像切换到共享神经网络 N_shared。但是,您需要每个类别的大量示例。
唯一的限制是创建一个可以适应不同大小图像的 numpy 数组。
您可以使用 batch_size=1
解决此问题(这样您的 numpy 数组将永远不会不兼容)。
或者您可以尝试手动将所有相同大小的图像分组到一个数组中,将这个数组作为一个大批量训练,然后对其他大小执行相同的操作。
我对如何输入两个尺寸的图片感到困惑,它也不能使用调整大小,crop.I 看过这个 question 但它也不是 resolved.this 是我的代码但是我收到以下错误:
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')]
)
恐怕这是不可能的。权重矩阵如何更新?
假设你将它初始化为2x2
矩阵:
a b
c d
一旦你训练了一些 2x2
图像,假设你想要训练 4x4
图像。它会是什么样子?元素 a
、b
、c
和 d
会去哪里?左上方?中间?右上?你会生成一个新的吗?这将丢弃到目前为止的所有训练进度。
我真的建议将所有图像重新调整为共同的宽度和高度。如果这是不可能的,并且每个宽度和高度的示例数量相对较多,您可以简单地创建几个神经网络(N1、N2、...),并且理论上,一旦您到达具有相同形状的层独立于输入图像切换到共享神经网络 N_shared。但是,您需要每个类别的大量示例。
唯一的限制是创建一个可以适应不同大小图像的 numpy 数组。
您可以使用 batch_size=1
解决此问题(这样您的 numpy 数组将永远不会不兼容)。
或者您可以尝试手动将所有相同大小的图像分组到一个数组中,将这个数组作为一个大批量训练,然后对其他大小执行相同的操作。