Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tensorflow:将另一个模型内的模型用作层_Python_Tensorflow_Keras_Deep Learning - Fatal编程技术网

Python Tensorflow:将另一个模型内的模型用作层

Python Tensorflow:将另一个模型内的模型用作层,python,tensorflow,keras,deep-learning,Python,Tensorflow,Keras,Deep Learning,我想在另一个模型中使用一个分类模型作为层,因为我认为keras模型也可以用作层。这是第一个模型的代码: cencoder_inputs = keras.layers.Input(shape=[pad_len], dtype=np.int32) ccondi_input = keras.layers.Input(shape=[1], dtype=np.int32) ccondi_layer = tf.keras.layers.concatenate([cencoder_inputs, ccondi

我想在另一个模型中使用一个分类模型作为层,因为我认为keras模型也可以用作层。这是第一个模型的代码:

cencoder_inputs = keras.layers.Input(shape=[pad_len], dtype=np.int32)
ccondi_input = keras.layers.Input(shape=[1], dtype=np.int32)
ccondi_layer = tf.keras.layers.concatenate([cencoder_inputs, ccondi_input], axis=1)
cembeddings = keras.layers.Embedding(vocab_size, 4)
cencoder_embeddings = cembeddings(ccondi_layer)


clstm = keras.layers.LSTM(128)(cencoder_embeddings)
cout_layer = keras.layers.Dense(16, activation="softmax")(clstm)

classification_model = keras.Model(inputs=[cencoder_inputs, ccondi_input], outputs=[cout_layer])
classification_model.compile(optimizer="Nadam", loss="sparse_categorical_crossentropy", metrics=["accuracy"], experimental_run_tf_function=False)
我训练此模型,将其保存并重新加载为class_模型,并设置
trainable=False
这是我的模型的代码,它应该使用上面的模型作为层:

encoder_inputs = keras.layers.Input(shape=[pad_len], dtype=np.int32)
decoder_inputs = keras.layers.Input(shape=[pad_len], dtype=np.int32)
condi_input = keras.layers.Input(shape=[1], dtype=np.int32)

class_layer = class_model((encoder_inputs, condi_input))
#Thats how I use the class model. Compilation goes fine so far
class_pred_layer = keras.layers.Lambda(lambda x: tf.reshape(tf.cast(tf.keras.backend.argmax(x, axis=1), dtype=tf.int32),shape=(tf.shape(encoder_inputs)[0],1)))(class_layer)
# Lambda and reshape layer, so I get 1 prediction per batch as integer
condi_layer = tf.keras.layers.concatenate([encoder_inputs, condi_input, class_pred_layer], axis=1)

embeddings = keras.layers.Embedding(vocab_size, 2)
encoder_embeddings = embeddings(condi_layer)
decoder_embeddings = embeddings(decoder_inputs)

encoder_1 = keras.layers.LSTM(64, return_sequences=True, return_state=True)
encoder_lstm_bidirectional_1 = keras.layers.Bidirectional(encoder_1)

encoder_output, state_h1, state_c1, state_h2, state_c2 = encoder_lstm_bidirectional_1(encoder_embeddings)
encoder_state = [Concatenate()([state_h1, state_h2]), Concatenate()([state_c1, state_c2])]

decoder_lstm = keras.layers.LSTM(64*2, return_sequences=True, return_state=True, name="decoder_lstm")
print(encoder_output.shape)
decoder_outputs,decoder_fwd_state, decoder_back_state = decoder_lstm(decoder_embeddings,initial_state=encoder_state) 
print(decoder_outputs.shape)
attn_layer = AttentionLayer(name="attention_layer")
attn_out, attn_states = attn_layer([encoder_output, decoder_outputs])

decoder_concat_input = Concatenate(axis=-1, name="decoder_concat_layer")([decoder_outputs, attn_out])

decoder_dense_out = keras.layers.TimeDistributed(keras.layers.Dense(vocab_size, activation="softmax"))
decoder_outputs = decoder_dense_out(decoder_concat_input)

model = keras.Model(inputs=[encoder_inputs, decoder_inputs, condi_input], outputs=[decoder_outputs])
执行model.fit()时,我收到以下错误:

Inputs to eager execution function cannot be Keras symbolic tensors, but found [<tf.Tensor 'input_21:0' shape=(None, 35) dtype=int32>]
“急切执行”函数的输入不能作为符号张量,但可以找到[] 我认为经过训练的模型可以很容易地用作层,我做错了什么? 我也已经调查过了,但也没有帮到我。 谢谢你的帮助

好的,我将做两件事:(1)我将给你一个例子,我必须在另一个模型中调用一个模型,并且(2)试着给你一个提示,说明你在这里可能会遇到什么问题(我不能真正理解代码,但我过去也有同样的错误)

一,。 这是使用其他模型作为隐藏层的模型示例:

def model_test(input_shape, sub_model):
  inputs = Input(input_shape)
  eblock_1_1 = dense_convolve(inputs, n_filters=growth_rate)
  eblock_1_2 = dense_convolve(eblock_1_1, n_filters=growth_rate);
  dblock_1_1 = dense_convolve(eblock_1_2, n_filters=growth_rate);
  dblock_1_2 = dense_convolve(dblock_1_1, n_filters=growth_rate);
  final_convolution = Conv3D(2, (1, 1, 1), padding='same', activation='relu')(dblock_1_2)
  intermedio = sub_model(final_convolution)
  layer = LeakyReLU(alpha=0.3)(intermedio)
  model = Model(inputs=inputs, outputs=layer)
    
  return model
我这样称呼它:

with strategy.scope():
  sub_model = tf.keras.models.load_model('link_to_the_model')
  sub_model.trainable = False
  model = model_test(INPUT_SIZE, sub_model)
  model.compile(optimizer=Adam(lr=0.1),
                loss=tf.keras.losses.MeanSquaredError(),
                metrics=None)
我刚刚用keras在google colab上测试了这个

  • 不久前,当我试图在模型中调用一个具有急切执行的函数时,我也遇到了同样的错误,这里的问题是,训练是在图形模式下执行的(您可以在线找到一些有关的信息)
  • 如果问题是调用模型可能会尝试执行我所做的操作,将模型作为参数传递,并在内部使用层作为参数调用它,并将其作为简单层使用

    好的,我将做两件事:(1)我将给你一个示例,在其中我必须在其他模型中调用模型,以及(2)试着给你一个提示,说明你的问题是什么(我不能真正理解代码,但我过去也有同样的错误)

    一,。 这是使用其他模型作为隐藏层的模型示例:

    def model_test(input_shape, sub_model):
      inputs = Input(input_shape)
      eblock_1_1 = dense_convolve(inputs, n_filters=growth_rate)
      eblock_1_2 = dense_convolve(eblock_1_1, n_filters=growth_rate);
      dblock_1_1 = dense_convolve(eblock_1_2, n_filters=growth_rate);
      dblock_1_2 = dense_convolve(dblock_1_1, n_filters=growth_rate);
      final_convolution = Conv3D(2, (1, 1, 1), padding='same', activation='relu')(dblock_1_2)
      intermedio = sub_model(final_convolution)
      layer = LeakyReLU(alpha=0.3)(intermedio)
      model = Model(inputs=inputs, outputs=layer)
        
      return model
    
    我这样称呼它:

    with strategy.scope():
      sub_model = tf.keras.models.load_model('link_to_the_model')
      sub_model.trainable = False
      model = model_test(INPUT_SIZE, sub_model)
      model.compile(optimizer=Adam(lr=0.1),
                    loss=tf.keras.losses.MeanSquaredError(),
                    metrics=None)
    
    我刚刚用keras在google colab上测试了这个

  • 不久前,当我试图在模型中调用一个具有急切执行的函数时,我也遇到了同样的错误,这里的问题是,训练是在图形模式下执行的(您可以在线找到一些有关的信息)

  • 如果问题是模型的调用可能会尝试执行我所做的操作,将模型作为参数传递,并在内部使用层作为参数调用它,并将其作为简单层使用

    只是为了澄清,AttentionLayer从何而来?AttentionLayer是应用Bandau注意力的额外层。我在一些教程中找到了这个。重要的是,如果不使用class_模型,这些模型非常适合于澄清AttentionLayer从何而来?AttentionLayer是应用Bandau注意力的额外层。我在一些教程中找到了这个。重要的是,如果不使用class_模型,这些模型非常适合您好,谢谢您的回答!我目前没有时间检查,但我不会忘记,在几周内测试它,并给你反馈嗨,谢谢你的回答!我目前没有时间检查,但我不会忘记,并在几周内测试它,并给你反馈