Выпуск временных рядов Keras 3Dconvnet - PullRequest
0 голосов
/ 30 января 2019

У меня есть временной ряд данных, и я выполняю несколько очень простых тестов, чтобы понять, как работают TensorFlow, Keras, Python и т. Д.

Для настройки проблемы у меня есть большое количество изображений, в результате чего7 изображений данных (с декартовыми размерами 33 х 33) при их накоплении должны давать одно значение.Следовательно, объем данных «x» должен составлять y * 7, где y - данные «истинности», с которыми осуществляется обучение.

Все обучающие данные находятся в заголовке «alldatax», который представляет собой большую матрицу: [420420 x 33 x 33 x 7 x 1], где размеры - это общее количество отдельных изображений, x-размерность, y-размерность, количество изображений, которые должны быть собраны для одного «истинного» значения, а затем окончательное измерение, необходимое дляСвертывание в 3D.

Матрица «истины», alldatay, представляет собой одномерную матрицу, которая просто 420420/7 = 60060.

При работе с простым коннетом:

model = models.Sequential()
model.add(layers.InputLayer(input_shape=(33,33,7,1)))
model.add(layers.Conv3D(16,(3,3,1), activation = 'relu', input_shape = (33,33,7,1)))
model.add(layers.LeakyReLU(alpha=0.3))
model.add(layers.MaxPooling3D((2,2,1)))
model.add(layers.Conv3D(32,(3,3,1), activation = 'relu')) 
model.add(layers.LeakyReLU(alpha=0.3))
model.add(layers.MaxPooling3D((2,2,1)))
model.add(layers.Flatten())
model.add(layers.Dense(512, activation = 'relu'))
model.add(layers.LeakyReLU(alpha=0.3))
model.add(layers.Dropout(0.5))
model.add(layers.Dense(32, activation = 'relu'))
model.add(layers.LeakyReLU(alpha=0.3))
model.add(layers.Dropout(0.5))
model.add(layers.Dense(1, activation = 'relu'))

model.compile(optimizer = 'adam', loss = 'mse')
model.fit(x = alldatax, y = alldatay,  batch_size = 1000, epochs = 50, verbose = 1, shuffle = False)

Я получаю сообщение об ошибке: ValueError: Входные массивы должны иметь то же количество выборок, что и целевые массивы.Найдено 420420 входных выборок и 60060 целевых выборок.

Что нужно изменить, чтобы убедить коннет в том, что ему нужно 7 * x для каждого значения y?

1 Ответ

0 голосов
/ 01 февраля 2019

Что-то не так в ваших расчетах.Вы утверждаете, что нейронная сеть должна брать семь 33x33 изображений в качестве одного входного примера, поэтому вы устанавливаете форму ввода первого слоя на (33,33,7,1), что является правильным.Это означает, что для каждого входа 33x33x7x1 должно быть ровно одно значение y.

Поскольку все ваши данные содержат все 420420 изображений 33x33x7x1, должно быть 420420 значений y, а не 60060.

...