Keras CONV1D: Ошибка при проверке цели: ожидаемый декодированный выход имеет форму (50, 50), но получил массив с формой (50, 1) - PullRequest
0 голосов
/ 29 сентября 2019

У меня есть эта проблема: Ошибка при проверке цели: ожидалось, что decoded_output будет иметь форму (50, 50), но получил массив с формой (50, 1). С этим кодом, авто-кодер с CONV1D и двумя выходными данными, но проблема в том, чтовыход реконструкции (decode_output):

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

TAM_VECTOR = X_train.shape[1]

input_tweet = Input(shape=(TAM_VECTOR,X_train.shape[2]))

encoded = Conv1D(64, kernel_size=1, activation='relu')(input_tweet)
encoded = Conv1D(32, kernel_size=1, activation='relu')(encoded)

decoded = Conv1D(32, kernel_size=1, activation='relu')(encoded)
decoded = Conv1D(64, kernel_size=1, activation='relu')(decoded)
decoded = Conv1D(TAM_VECTOR, kernel_size=1, activation='relu', name='decode_output')(decoded)

encoded = Flatten()(encoded)
second_output = Dense(1, activation='linear', name='second_output')(encoded)

autoencoder = Model(inputs=input_tweet, outputs=[decoded, second_output])

autoencoder.compile(optimizer="adam",
                    loss={'decode_output': 'mse', 'second_output': 'mse'},
                    loss_weights={'decode_output': 0.001, 'second_output': 0.999},
                    metrics=["mae"])

autoencoder.fit([X_train], [X_train, y_train], epochs=10, batch_size=32)

Вход (X) имеет форму (50000,50), но поскольку Conv1D получает 3D-вход, я изменяю его на:

X = np.reshape(X, (X.shape[0], X.shape[1], -1))

(50000,50,1)

А у (второй выход) составляет

y.shape

(50000,1)

А вот сводная модель

Layer (type)                    Output Shape         Param #     Connected to                     
==================================================================================================
input_43 (InputLayer)           (None, 50, 1)        0                                            
__________________________________________________________________________________________________
conv1d_169 (Conv1D)             (None, 50, 64)       128         input_43[0][0]                   
__________________________________________________________________________________________________
conv1d_170 (Conv1D)             (None, 50, 32)       2080        conv1d_169[0][0]                 
__________________________________________________________________________________________________
conv1d_171 (Conv1D)             (None, 50, 32)       1056        conv1d_170[0][0]                 
__________________________________________________________________________________________________
conv1d_172 (Conv1D)             (None, 50, 64)       2112        conv1d_171[0][0]                 
__________________________________________________________________________________________________
flatten_62 (Flatten)            (None, 1600)         0           conv1d_170[0][0]                 
__________________________________________________________________________________________________
decode_output (Conv1D)          (None, 50, 50)       3250        conv1d_172[0][0]                 
__________________________________________________________________________________________________
pib_output (Dense)              (None, 1)            1601        flatten_62[0][0]                 
==================================================================================================
Total params: 10,227
Trainable params: 10,227
Non-trainable params: 0

Ответы [ 2 ]

0 голосов
/ 30 сентября 2019

Это ошибки: Ошибка 1):

InvalidArgumentError: 2 root error(s) found.
(0) Invalid argument: You must feed a value for placeholder tensor 'decode_output_sample_weights_32' with dtype float and shape [?]
[[{{node decode_output_sample_weights_32}}]]
 [[loss_2/second_output_loss/Mean_3/_3217]]
  (1) Invalid argument: You must feed a value for placeholder tensor 'decode_output_sample_weights_32' with dtype float and shape [?]
     [[{{node decode_output_sample_weights_32}}]]
0 successful operations.
0 derived errors ignored.

Ошибка 2):

InvalidArgumentError: You must feed a value for placeholder tensor 'decode_output_target_17' with dtype float and shape [?,?,?] [[{{node decode_output_target_17}}]]

Ошибка 3):

UnknownError: 2 root error(s) found.
  (0) Unknown: Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above.
     [[{{node conv1d_1/convolution}}]]
     [[loss/add/_157]]
  (1) Unknown: Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above.
     [[{{node conv1d_1/convolution}}]]
0 successful operations.
0 derived errors ignored.

Ошибка 4):

UnknownError: 2 root error(s) found.
  (0) Unknown: Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above.
     [[{{node conv1d_25/convolution}}]]
     [[loss_6/second_output_loss/Mean_3/_1025]]
  (1) Unknown: Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above.
     [[{{node conv1d_25/convolution}}]]
0 successful operations.
0 derived errors ignored.
0 голосов
/ 29 сентября 2019

TAM_VECTOR следует заменить на 1 в следующей строке.

Заменить

decoded = Conv1D(TAM_VECTOR, kernel_size=1, activation='relu', name='decode_output')(decoded)

на

decoded = Conv1D(1, kernel_size=1, activation='relu', name='decode_output')(decoded)

Декодированная форма вывода должна соответствовать форме ввода AutoEncoder (50,1).

from keras.layers import Conv1D, Flatten, Dense, Input
from keras.models import Model
import numpy as np

TAM_VECTOR = 50
input_tweet = Input(shape=(TAM_VECTOR,1))

encoded = Conv1D(64, kernel_size=1, activation='relu')(input_tweet)
encoded = Conv1D(32, kernel_size=1, activation='relu')(encoded)

decoded = Conv1D(32, kernel_size=1, activation='relu')(encoded)
decoded = Conv1D(64, kernel_size=1, activation='relu')(decoded)
decoded = Conv1D(1, kernel_size=1, activation='relu', name='decode_output')(decoded)

encoded = Flatten()(encoded)
second_output = Dense(1, activation='linear', name='second_output')(encoded)

autoencoder = Model(inputs=input_tweet, outputs=[decoded, second_output])

autoencoder.compile(optimizer="adam",
                    loss={'decode_output': 'mse', 'second_output': 'mse'},
                    loss_weights={'decode_output': 0.001, 'second_output': 0.999},
                    metrics=["mae"])

autoencoder.fit(np.ones((1,50,1)), [np.ones((1,50,1)), np.ones((1,1))])

1/1 [====================================] - 0 с 407 мс / шаг - потеря: 0,9112 - decode_output_loss:0,9549 - second_output_loss: 0,9111 - decode_output_mean_absolute_error: 0,9772 - second_output_mean_absolute_error: 0,9545

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