#python #keras #valueerror
#python #keras #ошибка значения
Вопрос:
Я пытаюсь создать модель распознавания действий человека. Но когда я пытаюсь добавить функцию распределения по времени, у меня возникает проблема с input_shape. Как я могу преобразовать input_shape из 4d в 5d?
Я хочу обучить свой набор данных с помощью каждых 10 изображений, чтобы понять действия.
Размер набора данных = (28000,90,90,1)
#define CNN model
cnn = Sequential()
cnn.add(Conv2D(filters=32,kernel_size=
(5,5),padding="Same",activation="relu",input_shape=(90,90,1)))
cnn.add(MaxPooling2D(pool_size=(2,2)))
cnn.add(Dropout(0.25))
cnn.add(Conv2D(filters=16,kernel_size=(5,5),padding="Same",activation="relu"))
cnn.add(MaxPooling2D(pool_size=(2,2)))
cnn.add(Dropout(0.25))
cnn.add(Conv2D(filters=32,kernel_size=(5,5),padding="Same",activation="relu"))
cnn.add(MaxPooling2D(pool_size=(2,2)))
cnn.add(Dropout(0.25))
cnn.add(Flatten())
cnn.add(Dense(4096, activation="relu"))
#define LSTM model
model = Sequential()
model.add(TimeDistributed(cnn,input_shape=(10,90,90,1)))
model.add(LSTM(10))
model.add(Dense(2, activation="softmax"))
verbose, epochs, batch_size = 0, 25, 64
optimizer=Adam(lr=0.001,beta_1=0.9,beta_2=0.999)
model.compile(optimizer=optimizer,loss="binary_crossentropy",metrics=["accuracy"])
model.fit(x_train, y_train,validation_data=(x_val,y_val), epochs=epochs, batch_size=batch_size)
Здесь ошибка:
Ошибка значения: ошибка при проверке ввода: ожидаемый time_distributed_8_input будет иметь 5 измерений, но получен массив с формой (28000, 90, 90)
Ответ №1:
У меня была такая же проблема. Я использую Tensorflow.keras из TensorFlow 2.0 alpha. Мои входные данные были сформированы следующим образом: (list, list, numpy.ndarray, numpy.ndarray, numpy.ndarray)
соответствует number of records in batch, number of timesteps, img_width, img_height, channels
.
Оказывается, код проверки формы ввода Tensorflow фактически пропускает случай, когда форма ввода данной записи создается из list
содержащего numpy arrays
, а list
измерение удаляется. Он обрабатывает почти все остальные формирования данных.
Я локально изменил код библиотеки Tensorflow, чтобы исправить это, и сообщил об исправлении (https://github.com/tensorflow/tensorflow/issues/28323 , который я надеюсь исправить и отправить в TF на этой неделе).
Тем не менее, я думаю, что если вы измените свой набор входных данных на форму, состоящую из (list, numpy.ndarray, numpy.ndarray, numpy.ndarray, numpy.ndarray)
него, это может решить проблему, с которой вы столкнулись.