Я получаю сообщение об ошибке с моим массивом изменения размера / ввода для модели ConvLSTM - PullRequest
0 голосов
/ 28 декабря 2018

У меня есть набор данных с изображениями дневных карт осадков.Я пытаюсь построить модель прогнозирования осадков с использованием ConvLSTM2D.

Пожалуйста, помогите мне выяснить, как я могу изменить форму массива для работы.

Используя это в качестве ссылки: https://github.com/wqxu/ConvLSTM/blob/master/radar_forecast.py

Пожалуйста, помогите мне с этой ошибкой:

Error when checking input: expected conv_lst_m2d_167_input to have 5 dimensions, but got array with shape (1785, 400, 320, 3)

Если я добавлю другое измерение в массив изменения формы X_Train:

X_Train = np.array(X).reshape(-1, 400, 320, 1, 3)[:1785] # converting list to a numpy array

Я получу следующую ошибку [Что случилось с1785?]:

Error when checking input: expected conv_lst_m2d_167_input to have 5 dimensions, but got array with shape (400, 320, 1, 3)

Если я добавлю другое измерение к input_shape входного слоя ConvLSTM2D:

model.add(ConvLSTM2D(filters=128, kernel_size=(3, 3), input_shape=(None, 400, 320, 1, 3), padding='same', return_sequences=True))

Я получу следующую ошибку:

ValueError: Input 0 is incompatible with layer conv_lst_m2d_5:expected ndim=5, found ndim=6

В данный момент я просто пытаюсь найти любую ситуацию, которая действительно работает, чтобы я мог идти оттуда.Пожалуйста, помогите, если можете.

По сути, я хочу знать, заключается ли проблема в количестве измерений моих массивов?Если так, как я могу изменить это?

import numpy as np
import os
import cv2
import matplotlib.pyplot as plt
from keras.models import Sequential
from keras.layers.convolutional import Conv3D
from keras.layers.convolutional_recurrent import ConvLSTM2D
from keras.layers.normalization import BatchNormalization

DATADIR = "C:/Users/StephanIliffe/Documents/data"

training_data = []

def create_training_data():
    path = os.path.join(DATADIR, "Input") # path to jpg precipitation maps
    class_num = 1
    for img in os.listdir(path):
        img_array = cv2.imread(os.path.join(path, img))
        new_array = cv2.resize(img_array, (400, 320))
        training_data.append([new_array, class_num])  

create_training_data()

X = []
X_Train = []
X_Test = []

for features, label in training_data:
    X.append(features)

X_Train = np.array(X).reshape(-1, 400, 320, 3)[:1785] # converting list to a numpy array
X_Test = np.array(X).reshape(-1, 400, 320, 3)[765:] # converting list to a numpy array

model = Sequential()

model.add(ConvLSTM2D(filters=128, kernel_size=(3, 3),
                   input_shape=(None, 400, 320, 3),
                   padding='same', return_sequences=True))
model.add(BatchNormalization())

model.add(ConvLSTM2D(filters=128, kernel_size=(3, 3),
                   padding='same', return_sequences=True))
model.add(BatchNormalization())

model.add(ConvLSTM2D(filters=128, kernel_size=(3, 3),
                   padding='same', return_sequences=True))
model.add(BatchNormalization())

model.add(ConvLSTM2D(filters=128, kernel_size=(3, 3),
                 padding='same', return_sequences=True))
model.add(BatchNormalization())

model.add(Conv3D(filters=1, kernel_size=(3, 3, 3),
               activation='sigmoid',
               padding='same', data_format='channels_last'))

model.compile(loss='mean_squared_error', optimizer='adadelta')
model.fit(X_Train, X_Test, batch_size=30, epochs=10, validation_split=0.05)

1 Ответ

0 голосов
/ 28 декабря 2018

Ну, это именно то, что говорит ошибка: expected conv_lst_m2d_167_input to have 5 dimensions, but got array with shape (400, 320, 1, 3).Ваши входные данные имеют четыре измерения;должно быть пять: (samples, time, rows, columns, channels).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...