Как исправить проблему с распределенной по времени формой ввода (требуется 5 измерений)

#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) него, это может решить проблему, с которой вы столкнулись.