Получение ValueError в керасе по неизвестной причине - PullRequest
0 голосов
/ 15 апреля 2019

Я использую следующую модель keras

input_profile = Input(shape=(23, 23, 1)) 
x = Conv2D(16, (3, 3), activation='relu', padding='same')(input_profile)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Conv2D(8, (3, 3), activation='relu', padding='same')(x)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Conv2D(8, (3, 3), activation='relu', padding='same')(x)
encoded = MaxPooling2D((2, 2), padding='same')(x)

# at this point the representation is (4, 4, 8) i.e. 128-dimensional

x = Conv2D(8, (3, 3), activation='relu', padding='same')(encoded)
x = UpSampling2D((2, 2))(x)
x = Conv2D(8, (3, 3), activation='relu', padding='same')(x)
x = UpSampling2D((2, 2))(x)
x = Conv2D(16, (3, 3), activation='relu')(x)
x = UpSampling2D((2, 2))(x)
decoded = Conv2D(1, (3, 3), activation='sigmoid', padding='same')(x)

autoencoder = Model(input_profile, decoded)
autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy')

X_GTEx = np.load('GTEx_X_float64.npy')
x_train = X_GTEx
x_train = np.reshape(x_train, (5207, 23, 23, 1))
from keras.callbacks import TensorBoard

autoencoder.fit(x_train, x_train,\
                epochs=50, batch_size=127,\
                shuffle=True, validation_data=(x_train, x_train),\
                callbacks=[TensorBoard(log_dir='/tmp/autoencoder')])

И его запуск выдает мне следующую ошибку:

ValueError: Error when checking target: expected conv2d_7 to have shape (20, 20, 1) but got array with shape (23, 23, 1)

Очевидно, я ничего не установил с формой (20,20,1). Что не так с моей программой?

1 Ответ

0 голосов
/ 15 апреля 2019

Длина каждого измерения ввода нечетна.Это делает слой MaxPooling2D понижающим дискретизацию тензора с оператором floor.

В вашей модели с Input(shape=(23, 23, 1)) размерное изменение тензора после каждого MaxPooling2D слоя будет 23 to 11 11 to 5.

Затем два слоя UpSampling будут простираться до (5, 5, 1) тензор до (20, 20, 1), но модели нужен тензор с той же формой, что и для ввода.

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