Я работаю над классификацией изображений. Я новичок в нейронных сетях. Я работал с CNN и LSTM по отдельности, это работало хорошо, тогда я пытаюсь выполнить вывод CNN на вход LSTM и обучить модель и попытаться сгенерировать прогнозы. Но я столкнулся с проблемой с размерами массива изображений, как упоминалось выше в вопросе.
В пакете
batch_input_shape, если я изменился на (4,70,70,1), то моя модель умеет тренироваться
. но при создании прогнозов я снова получаю ту же ошибку, но в обратном времени.
ValueError: Невозможно передать значение формы (1, 70, 70, 1) для Tensor 'time_distributed_1_input: 0', которое имеет shape '(4, 70, 70, 1)'.
В конце концов, мой код предсказания здесь.
X = np.load('features.npy')
y_train = np.load('labels.npy')
X = X/255.0
print(X.shape[1:])
model = Sequential()
model.add(TimeDistributed(Conv1D(256, kernel_size=3),batch_input_shape=(1,70,70,1)))
model.add(Activation('relu'))
model.add(TimeDistributed(MaxPooling1D(pool_size=2)))
model.add(TimeDistributed(Conv1D(256, 3)))
model.add(Activation('relu'))
model.add(TimeDistributed(MaxPooling1D(pool_size=2)))
model.add(TimeDistributed(Conv1D(256,3)))
model.add(Activation('relu'))
model.add(TimeDistributed(MaxPooling1D(pool_size=2)))
model.add(TimeDistributed(Flatten()))
model.add(LSTM(128, input_shape=(70,70,1),stateful=True,return_sequences=True))
model.add(LSTM(128, stateful=True))
model.add(Dense(64))
model.add(Dropout(0.2))
model.add(Dense(16))
model.add(Activation('sigmoid'))
sgd=SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='sparse_categorical_crossentropy',
optimizer='adam', #sgd, rmsprop
metrics=['accuracy'])
class_weights = class_weight.compute_class_weight('balanced',
np.unique(y_train),
y_train)
model.fit(X, y_train, batch_size=4, epochs=5,class_weight=class_weights)
model.save("LSTMCNN_model_8_8_128_layer_rmsprop.h5")
МОЙ файл прогноза:
model = load_model('LSTMCNN_model_8_8_128_layer_rmsprop.h5')
for category in CATEGORIES: # do dogs and cats
path = os.path.join(test_data_dir, category) # create path to dogs and cats
class_num = CATEGORIES.index(category)
for img in tqdm(os.listdir(path)): # iterate over each image per dogs and cats
img_array = cv2.imread(os.path.join(path, img), cv2.IMREAD_GRAYSCALE) # convert to array
new_array = cv2.resize(img_array, (70, 70))
new_array=new_array.reshape(-1,70,70,1)
images.append(new_array)
# stack up images list to pass for prediction
images = np.vstack(images)
classes = model.predict_classes(images)
Может кто-нибудь, пожалуйста, помогите .. как обучить мой cnn + lstm и прогнозировать значения. Если я делаю не так, скажите, пожалуйста, лучший подход
Заранее спасибо