#python #tensorflow #machine-learning #keras #deep-learning
#python #тензорный поток #машинное обучение #keras #глубокое обучение
Вопрос:
Мой Xtrain представляет собой изображение RGB размера (numofsamples, height, width, channel). Где numofsamples = 1047, высота = 128, ширина = 128, каналы = 3.
Это делается путем выполнения приведенных ниже кодов:
for img_filename in train_files:
img = image.load_img(os.path.join(rootdir,'train_image/train_image',img_filename), target_size=(128,128,1))
img = image.img_to_array(img)
img = img/255
train_image.append(img)
X_train = np.array(train_image)
Я пытаюсь запустить модель CNN LSTM для данных с увеличением изображения. Но я продолжаю получать ошибки разных измерений.
- Если бы я должен был запустить этот код:
batch_size = 64
model.add(TimeDistributed(Conv2D(64, kernel_size=(3, 3),activation='relu',input_shape = (128,128,3))))
model.add(TimeDistributed(MaxPooling2D(pool_size=(2, 2))))
model.add(TimeDistributed(Flatten()))
model.add(LSTM(512, return_sequences=False, dropout=0.1))
model.add(Flatten())
model.add(Dense(256))
model.add(Dense(3, activation='softmax'))
model.compile(loss='categorical_crossentropy',optimizer='Adam',metrics=['accuracy'])
model.fit_generator(train_generator.flow(Xtrain,ytrain,batch_size=batch_size),
#steps_per_epoch = Xtrain.shape[0] // batch_size,
epochs = 50,
verbose = True,
validation_data= (Xval,yval),
callbacks = [reduce_lr,es,ModelCheckpoint('cnnlstm' '_weights.hdf5', monitor='val_accuracy', verbose=1, save_best_only=True, mode='max')]
)
Моя ошибка, с которой я столкнулся,:
InvalidArgumentError: входные данные должны быть 4-мерными [8192,128,3] [Op: Conv2D]
Если бы я изменил его на (1047, 128, 128, 3, 1), Я получу ошибку numpy.
Xtrain_reshape = np.expand_dims(Xtrain, -1)
Xval_reshape = np.expand_dims(Xval, -1)
model = Sequential()
# define CNN model
model.add(TimeDistributed(Conv2D(64, kernel_size=(3, 3),activation='relu',input_shape = (128,128,3))))
model.add(TimeDistributed(MaxPooling2D(pool_size=(2, 2))))
model.add(TimeDistributed(Flatten()))
# define LSTM model
model.add(LSTM(512, return_sequences=False, dropout=0.1))
model.add(Flatten())
model.add(Dense(256))
model.add(Dense(3, activation='softmax'))
model.compile(loss='categorical_crossentropy',optimizer='Adam',metrics=['accuracy'])
model.fit_generator(train_generator.flow(Xtrain_reshape,ytrain,batch_size=batch_size),
#steps_per_epoch = Xtrain.shape[0] // batch_size,
epochs = 50,
verbose = True,
validation_data= (Xval_reshape,yval),
callbacks = [reduce_lr,es,ModelCheckpoint('cnnlstm' '_weights.hdf5', monitor='val_accuracy', verbose=1, save_best_only=True, mode='max')]
)
Моя ошибка здесь
Ошибка ValueError: (‘Входные данные
NumpyArrayIterator
должны иметь ранг 4. Вы передали массив с формой’, (1047, 128, 128, 3, 1))
Можете ли вы сообщить мне, как изменить его, чтобы я мог пройти через CNN и LSTM?
Комментарии:
1. укажите код, в котором вы готовите свои данные. В вашей исходной ошибке указано, что форма ваших входных данных
(8192,128,3)
2. @mb0850 Размер моего пакета равен 64. итак, я предполагаю, что его размер пакета * высота изображения = 64 * 128
3. Этого не должно быть, если размер вашего пакета равен 64, то форма ввода должна быть
(64, 128, 128, 3)
. Вам нужно указать код, который вы используете, для генерации ваших данных обучения / тестирования, чтобы мы могли понять, в чем проблема.4. Я загружаю его из своего каталога и выполняю только приведенные выше коды для генерации данных поезда
5. Похоже, что в предоставленном вами коде все еще существует разрыв между
model.fit_generator(train_generator.flow(Xtrain,ytrain,batch_size=batch_size)
иX_train
тем, что вы создаете.