Попробуйте что-нибудь подобное ...

у код для классификации изображений для двух классов с использованием кера с тензорным бэкэндом. Мои изображения хранятся в папке на компьютере, и я хочу предоставить эти изображения в качестве входных данных для моей модели keras.load_img занимает только одно входное изображение, поэтому я должен использовать либоflow(x,y) или жеflow_from_directory(directory), но вflow(x,y) нам нужно также предоставить метки, которая является длина задачи, поэтому я используюflow_from_directory(directory), Мои изображения имеют переменные размеры, такие как 20 * 40, 55 * 43 ..... ноВот упомянуто, что фиксированный target_size требуется. Вэто Решение дано, что мы можем дать изображения переменного размера в качестве входа в слой свертки, используяinput_shape=(1, None, None) или input_shape = (None, None, 3) (последнее и цветное изображение канала), но fchollet упоминает, что это не полезно для сглаживания слоя, и моя модель состоит из свертки и сглаживания слоев. В этом посте только moi90 предлагает попробовать разные партии, но каждая партия должна иметь изображения одинакового размера, но я не могу сгруппировать изображения одинакового размера, потому что мои данные очень разбросаны. Поэтому я решил пойти сbatch size=1 и напишите следующий код:

from __future__ import print_function
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPooling2D
from keras import backend as K
import numpy as np
from keras.preprocessing.image import ImageDataGenerator

input_shape = (None,None,3)

model = Sequential()
model.add(Conv2D(8, kernel_size=(3, 3),
                 activation='relu',
                 input_shape=input_shape))
model.get_weights()
model.add(Conv2D(16, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(32, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(2, activation='softmax'))

model.compile(loss='binary_crossentropy',optimizer='rmsprop',metrics=['accuracy'])

train_datagen = ImageDataGenerator()
test_datagen = ImageDataGenerator()
train_generator = train_datagen.flow_from_directory('/data/train', target_size=input_shape, batch_size=1,class_mode='binary') 
validation_generator = test_datagen.flow_from_directory('/data/test',target_size=input_shape,batch_size=1,class_mode='binary')
model.fit_generator(train_generator,steps_per_epoch=1,epochs=2,validation_data=validation_generator,validation_steps=1)

Теперь я получаю следующую ошибку:

Traceback (most recent call last):

  File "<ipython-input-8-4e22d22e4bd7>", line 23, in <module>
    model.add(Flatten())

  File "/home/nd/anaconda3/lib/python3.6/site-packages/keras/models.py", line 489, in add
    output_tensor = layer(self.outputs[0])

  File "/home/nd/anaconda3/lib/python3.6/site-packages/keras/engine/topology.py", line 622, in __call__
    output_shape = self.compute_output_shape(input_shape)

  File "/home/nd/anaconda3/lib/python3.6/site-packages/keras/layers/core.py", line 478, in compute_output_shape
    '(got ' + str(input_shape[1:]) + '. '

ValueError: The shape of the input to "Flatten" is not fully defined (got (None, None, 16). Make sure to pass a complete "input_shape" or "batch_input_shape" argument to the first layer in your model.

Я уверен, что это не из-заimg_dim_ordering а такжеbackend но из-заэто я проверил обаth Пожалуйста, помогите исправить код или помогите, как я могу дать изображения переменного размера в качестве входных данных для моей модели.

Ответы на вопрос(3)

Ваш ответ на вопрос