Как дать изображения разного размера модели cnn в keras/tensorflow

я запутался в том, как вводить изображения двух размеров, и он также не может использовать изменение размера и обрезку. Я видел это вопрос, но он также не решен. это мой код, но я получаю следующую ошибку:

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')]
)

person hades24    schedule 03.05.2018    source источник
comment
Пожалуйста, отформатируйте вашу ошибку   -  person nj2237    schedule 03.05.2018


Ответы (2)


Единственным ограничением является создание массива numpy, который может соответствовать изображениям разных размеров.

Вы можете решить это, используя либо batch_size=1 (тогда ваши массивы numpy никогда не будут несовместимы).

Или вы можете попытаться вручную сгруппировать все изображения одного размера в массив, обучить этот массив как большой пакет, а затем сделать то же самое для других размеров.

person Daniel Möller    schedule 03.05.2018
comment
Спасибо, Даниэль. Но не могли бы вы сказать мне, как я могу сохранить изображение классификации ошибок в Assessment_generator или имя изображения ошибки? - person hades24; 09.05.2018

Боюсь, это невозможно. Как будет обновляться весовая матрица?

Предположим, вы инициализируете его матрицей 2x2:

a b
c d

Допустим, после того, как вы потренировались на некоторых 2x2 изображениях, вы захотите потренироваться на 4x4 изображениях. Как бы это выглядело? Куда пойдут элементы a, b, c и d? Верхний левый? Середина? В правом верхнем углу? Вы бы создали новый? Это отбросило бы весь прогресс обучения до сих пор.

Я бы действительно предложил масштабировать все изображения до общей ширины и высоты. Если это невозможно и у вас есть относительно большое количество примеров для каждой ширины и высоты, вы можете просто создать несколько нейронных сетей (N1, N2, ...), и, теоретически, как только вы доберетесь до слоя, который имеет одинаковую форму независимо от входного изображения переключаться на общую нейронную сеть N_shared. Однако вам понадобится много примеров из каждой категории.

person Aechlys    schedule 03.05.2018