Кто-нибудь знает, что означает "Ошибка значения: Ошибка при проверке ввода:" Ошибка кераса? - PullRequest
0 голосов
/ 21 мая 2019

Я в некотором роде новичок, когда дело доходит до keras ad tenorflow, поэтому я действительно мог бы использовать некоторую помощь, чтобы попытаться выяснить эту проблему, которая возникла в моем коде.Я пытаюсь запустить программу автоматического кодирования.Однако, когда я пытаюсь запустить программу, я получаю сообщение об ошибке: ValueError: Ошибка при проверке ввода: ожидалось, что input_1 будет иметь 2 измерения, но получил массив с формой (32, 256, 256, 3).Я почти уверен, что у программы возникли проблемы с извлечением изображений из моей базы данных, которую я сделал, в каталог под названием train.Я разрушаю этот код на Raspberry Pi, и это мой код:

 from keras.layers import Input, Dense
 from keras.models import Model
 import numpy as np
 from PIL import Image 
 from keras.preprocessing.image import ImageDataGenerator
 import matplotlib.pyplot as plt
 image = Image.open('/home/pi/Downloads/neural-network- 
 master/data/train/class_a/test(2chunk0.wav).png.jpg')
 encoding_dim = 28
 input_img = Input(shape=(65536,))
 encoded = Dense(encoding_dim, activation='relu')(input_img)
 decoded = Dense(65536, activation='sigmoid')(encoded)
 autoencoder = Model(input_img, decoded)
 encoder = Model(input_img, encoded)
 encoded_input = Input(shape=(encoding_dim,))
 decoder_layer = autoencoder.layers[-1]
 decoder = Model(encoded_input, decoder_layer(encoded_input))
 autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy')
 train_datagen=ImageDataGenerator(rescale=1./255)
 train_generator = train_datagen.flow_from_directory(
     directory=r"/home/pi/Downloads/neural-network-master/data/train",
     batch_size=32,
     class_mode="categorical",
     shuffle=True,
     seed=42
 )
 autoencoder.fit_generator(train_generator,
            epochs=2,
            steps_per_epoch=256,
            shuffle=True)
 encoded_img = encoder.predict(np.array(image))
 print (encoded_img)
 decoded_img = decoder.predict(encoded_img)
 plt.imshow(decoded_img)
 plt.imshow(image)

Точная ошибка, которую я продолжаю получать это:

 ValueError: Error when checking input: expected input_1 to have 2 
 dimensions, but got array with shape (32, 256, 256, 3)

Еще раз, я считаю, чтоэто проблема с программой, которой не нравится способ, которым я отформатировал каталоги, содержащие данные обучения.У меня есть каталог с именем class_a внутри моего каталога поездов, и еще два каталога внутри class_a с именами class_1 и class_2, и данные внутри этих папок.Я могу ошибаться из-за этой проблемы, но любая помощь будет высоко оценена, спасибо!

РЕДАКТИРОВАТЬ: поэтому я изменил строку, которая выглядит следующим образом: input_img = Input (shape = (65536,)) наэто: input_img = Input (shape = (256, 256, 3,)), и это, казалось, решило часть проблемы, но теперь, когда я запускаю код, я получаю эту ошибку:

 ValueError: Error when checking target: expected dense_2 to have 4 dimensions, but got array with shape (262, 1)

один разОпять же, любая помощь очень ценится!

1 Ответ

0 голосов
/ 21 мая 2019

Эта ошибка возникает, когда вы пытаетесь подобрать данные, форма которых отличается от ожидаемой моделью.
Здесь вы определяете ожидаемый ввод формы (65536,) и пытаетесь подогнать к ней данные с формой (256, 256, 3).

Таким образом, вам необходимо изменить свои входные данные, чтобы они соответствовали ожидаемой модели.

Попробуйте это:

input_img = Input(shape=(256*256*3,))

и преобразовать ваши входные данные в один вектор одинаковой формы (nb_batch, 256 * 256 * 3)

...