【问题标题】:Is there a way to selectively connect layers with Keras TensorFlow?有没有办法用 Keras TensorFlow 选择性地连接层?
【发布时间】:2023-03-03 18:57:02
【问题描述】:

我有一个自动编码器类型的串联网络,该网络由一个预训练的正向 DNN(权重冻结)组成,该网络从未经训练的反向 DNN 中获取输出。我希望在模型之间进行直接映射,以便第一个网络的输出层代表第二个网络的输入张量。我目前正在使用 Keras API 顺序模型来添加密集层,但是,这些是完全连接的。I've included a diagram here (please have a look)

这是我的代码的 sn-p:

(`#tandem architecture (with weights loaded from pre trained model)
Tandem = keras.models.Sequential()
Tandem.add(Dense(2, name = 'CIE_input'))
Tandem.add(Dense(1000, activation='relu', name = 'IH1'))
Tandem.add(Dense(1000, activation='relu', name = 'IH2'))
Tandem.add(Dense(3, name = 'Iout')) #need to feed a 3 layer input to FDNN
#FDNN for prediction:
Tandem.add(Dense(3, name = 'input',trainable = False))
Tandem.add(Dense(1000, activation='relu', name = 'FH1', trainable = False))
Tandem.add(Dense(1000, activation='relu', name = 'FH2', trainable = False))
Tandem.add(Dense(1000, activation='relu', name = 'FH3', trainable = False))
Tandem.add(Dense(1000, activation='relu', name = 'FH4', trainable = False))
Tandem.add(Dense(1000, activation='relu', name = 'FH5', trainable = False))
Tandem.add(Dense(1000, activation='relu', name = 'FH6', trainable = False))
Tandem.add(Dense(1000, activation='relu', name = 'FH7', trainable = False))
Tandem.add(Dense(1000, activation='relu', name = 'FH8', trainable = False))
Tandem.add(Dense(1000, activation='relu', name = 'FH9', trainable = False))
Tandem.add(Dense(1000, activation='relu', name = 'FH10', trainable = False)) 
Tandem.add(Dense(2, name = 'output')) # output layer (predicted colour (CIE))
Tandem.compile(loss='mse', optimizer='adam',metrics=['mean_squared_error','accuracy'])
#train the model for one batch to initialize variables (needed before loading weights by name)
Tandem.train_on_batch(y_train[:1], y_train[:1])
#load weights from pre-trained model 
Tandem.load_weights('/content/gdrive/My Drive/Colab Notebooks/Models/FDNN_Weights.h5', by_name=True)`

另外,我想固定两个网络之间的连接并且不允许重新缩放。我是 TensorFlow 和 Keras(以及 StackOverflow)的新手,所以我非常感谢任何关于如何简单地做到这一点的建议。

【问题讨论】:

    标签: keras layer tensor autoencoder transfer-learning


    【解决方案1】:

    我建议使用 tf.keras 中的功能 API。它可以帮助您创建具有多个内部连接和多个输入和输出的模型。

    • Here 是 TensorFlow 官方文档。
    • 另外,我推荐这些帖子(123)。



    【讨论】:

      【解决方案2】:

      我在我的代码中发现了一个错误;我没有定义顺序模型的输入形状。我现在删除了名为“input CIE”和“input”的层,将层“IH1”和“FH1”的输入维度分别定义为 2 和 3。这种正确的模型定义允许模型直接连接,强制逆模型的输出收敛到 3 个值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-07-31
        • 2021-02-04
        • 1970-01-01
        • 2011-01-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多