получение ошибки при подаче выводов одной модели на генератор другой модели в керасе - PullRequest
0 голосов
/ 27 мая 2019

Я разработал автоэнкодер и обучил его.Теперь я хочу извлечь функции из кодировщика и передать их в генератор другой модели.

Это автоэкодер, который я реализовал.


    x = Conv1D(64, 5, activation="relu", padding="same")(input) 
    #x = BatchNormalization()(x)
    x = MaxPooling1D(2, padding="same")(x)
    x = Conv1D(32, 5, activation="relu", padding="same")(x) 
    #x = BatchNormalization()(x)
    x = MaxPooling1D(2, padding="same")(x)
    x = Conv1D(16, 5, activation="relu", padding="same")(x) 
    x = MaxPooling1D(2, padding="same")(x)
    x = Conv1D(1, 5, activation="relu", padding="same")(x)
    encoded = MaxPooling1D(2, padding="same")(x)


    x = Conv1D(1, 5, activation="relu", padding="same")(encoded) 
    #x = BatchNormalization()(x)
    x = UpSampling1D(2)(x) 
    x = Conv1D(16, 2, activation='relu',padding='same')(x)
    x = UpSampling1D(2)(x) 
    x = Conv1D(32, 2, activation='relu',padding='same')(x) 
    #x = BatchNormalization()(x)
    x = UpSampling1D(2, )(x) 
    x = Conv1D(64, 2, activation='relu',padding='same')(x)
    x = UpSampling1D(2, )(x) 
    decoded = Conv1D(1, 3, activation='sigmoid', padding='same')(x) 

    autoencoder = Model(input, decoded)

Вот где я получаювыходы кодирующей части.

def extract_features_from_encoder(left,right):
   get_8th_layer_output = K.function([autoencoder.layers[0].input],

      [autoencoder.layers[8].output])

   left_encoded = get_8th_layer_output([left])[0]
   right_encoded = get_8th_layer_output([right])[0]

Это мой генератор:

def generator_encoded():
   left = ...
   right = ...

   left_encoded,right_encoded = 
   extract_features_from_encoder(left,right)

   yield ({'input_1': left_encoded, 'input_2': right_encoded}, 
   {'dense_1': y})

Здесь я звоню генератору:

model.fit_generator(generator_encoded(),......)

Это моймодель.

input_l = Input(shape=(1000,1))
input_r = Input(shape=(1000,1))

shared_lstm = CuDNNLSTM(100)
encoded_l = shared_lstm(input_l)
encoded_r = shared_lstm(input_r)

L1_layer = Lambda(lambda tensors:K.abs(tensors[0] - tensors[1]))
L1_distance = L1_layer([encoded_l, encoded_r])

prediction = Dense(1,activation='sigmoid')(L1_distance)

model = Model(inputs=[input_l,input_r],outputs=prediction)

Это ошибка, которую я получаю при работе этой модели.

tensorflow.python.framework.errors_impl.InvalidArgumentError: 
Tensor input_2:0, specified in either feed_devices or 
fetch_devices was not found in the Graph

Может кто-нибудь сказать, пожалуйста, что не так и как это исправить?

1 Ответ

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

Проблема была решена. Добавление with tf.Session: перед выполнением выводов из автоэнкодера привело к исчезновению проблемы. Модель необходимо было явно указать для использования графа по умолчанию, так как было создано несколько графов.

...