Model.evaluate в keras с несколькими входами и несколькими выходами

Я работаю над глубоким мультимодальным автокодером в случае неконтролируемого обучения, который принимает два входа с формой (1000, 50) и (1000,60) соответственно, чтобы восстановить два исходных входа. Модель имеет 3 скрытых слоя и стремится объединить два скрытых слоя input1 и input2. Оба выхода затем используются для вычисления двух потерь (MSE).

Обратите внимание, что X и X1 были сгенерированы следующим образом, чтобы вычислить для каждого элемента среднее значение его окрестности:

matrix(1000,50) , matrix1(1000,60) and A is the adjacency matrix with the shape of (1000,1000)
summed_groups_matrix = A@matrix
summed_groups_matrix1 = A@matrix1
neighborhood_sizes = A.sum(axis=1)
X=summed_groups_matrix / neighborhood_sizes
X1=summed_groups_matrix1 / neighborhood_sizes

Полный код мультимодального автокодировщика следующий:

input_X = Input(shape=(X[0].shape))

dense_X = Dense(40,activation='relu')(input_X)

dense1_X = Dense(20,activation='relu')(dense_X)

latent_X= Dense(2,activation='relu')(dense1_X)

input_X1 = Input(shape=(X1[0].shape))

dense_X1 = Dense(40,activation='relu')(input_X1)

dense1_X1 = Dense(20,activation='relu')(dense_X1)

latent_X1= Dense(2,activation='relu')(dense1_X1)

Concat_X_X1 = concatenate([latent_X, latent_X1])

decoding_X = Dense(20,activation='relu')(Concat_X_X1)

decoding1_X = Dense(40,activation='relu')(decoding_X)

output_X = Dense(X[0].shape[0],activation='sigmoid')(decoding1_X)

decoding_X1 = Dense(20,activation='relu')(Concat_X_X1)

decoding1_X1 = Dense(40,activation='relu')(decoding_X1)

output_X1 = Dense(X1[0].shape[0],activation='sigmoid')(decoding1_X1)

multi_modal_autoencoder = Model([input_X, input_X1], [output_X, output_X1], name='multi_modal_autoencoder')

multi_modal_autoencoder.compile(optimizer=keras.optimizers.Adam(lr=0.001),loss='mse')

model = multi_modal_autoencoder.fit([X,X1], [X, X1], epochs=70, batch_size=150)

При использовании multi_modal_autoencoder.evaluate (X, X1) он возвращает эту ошибку:

TypeError: 'method' object is not subscriptable

Что мне следует сдать в model.evaluate?


person Andrea    schedule 18.07.2020    source источник
comment
Пожалуйста, расскажите подробнее, как вы планируете построить AE с двумя потерями. Из вашего описания похоже, что это не AE, а 2 прямых NN, что подходит для этой задачи.   -  person Poe Dator    schedule 18.07.2020
comment
Обновил вопрос. Не могли бы вы взглянуть?   -  person Andrea    schedule 18.07.2020
comment
Если он вызывает ошибку, вы должны включить ее в свой вопрос. Иначе мы бы гадали.   -  person Dr. Snoopy    schedule 18.07.2020
comment
1) Похоже, неверный способ использования keras.Model. См. Пример здесь: keras.io/api/models/model 2) ввод не должен быть списком [X, X1], но одним тензором. Обработайте свои данные перед тем, как приступить к модели. Итак, вы можете сделать multi_modal_autoencoder.evaluate(X2,X2), где X2 - это некоторая комбинация X и X1 (объединить?). 3) начните с построения модели для прогнозирования одной функции, а затем добавьте сложности.   -  person Poe Dator    schedule 18.07.2020
comment
Вы правы, я редактировал вопрос @ Dr.Snoopy   -  person Andrea    schedule 18.07.2020
comment
@RuslanS. если я сделаю шаг 2, то модель будет с одним входом и одним выходом, чего я не искал. Кроме того, конкатенация должна быть между скрытым представлением обоих входов. PS, я последовал этому примеру wizardforcel.gitbooks .io / deep-learning-keras-tensorflow /.   -  person Andrea    schedule 18.07.2020
comment
Я получаю это сейчас. В этом случае tf.keras.Model.evaluate() возвращает значение потерь и значения показателей для модели в тестовом режиме. Поэтому вам нужно передать ему списки входов из тестовой выборки. Попробуйте multi_modal_autoencoder.evaluate([X_test,X1_test],[X_test,X1_test])   -  person Poe Dator    schedule 18.07.2020
comment
Я не разбивал свои данные на обучение и тестирование, я работаю со всеми данными, таким образом, они должны быть multi_modal_autoencoder.evaluate([X,X1],[X,X1]) Хорошо, он работает, но возвращает массив из 3 значений mse, которые я могу интерпретировать . Вот [[0.012900909228595816, 0.003546052612364292, 0.009347316808998585]]   -  person Andrea    schedule 18.07.2020


Ответы (1)


tf.keras.Model.evaluate() возвращает значение потерь и значения показателей для модели в тестовом режиме. Поэтому вам нужно передать ему списки входов из тестовой выборки. Попробуйте multi_modal_autoencoder.evaluate([X_test,X1_test],[X_test,X1_test])

person Poe Dator    schedule 18.07.2020