【问题标题】:How to connect input layer to an extra layer in Tensorflow如何将输入层连接到 Tensorflow 中的额外层
【发布时间】:2022-01-08 07:17:43
【问题描述】:

我想知道是否可以使用tensorflow 创建一个自定义的网络结构,其中输入层与一个不与输入层相邻的隐藏层有额外的连接。例如,假设我有一个简单的网络结构,如下所示。

import numpy as np
import random
import tensorflow as tf
from tensorflow import keras 

m = 200
n = 5
my_input=  np.random.random([m,n])
my_output =  np.random.random([m,1])

          

my_model = tf.keras.Sequential([  
    tf.keras.layers.Flatten(input_shape=(my_input.shape[1],)),
    tf.keras.layers.Dense(32, activation='softmax'),
    tf.keras.layers.Dense(32, activation='tanh'),
    tf.keras.layers.Dense(32, activation='relu'),
    tf.keras.layers.Dense(1) 
])   
                    

my_model.compile(loss='mse',optimizer = tf.keras.optimizers.Adam(learning_rate=0.001))
res = my_model.fit(my_input,  my_output, epochs=50, batch_size=1,verbose=0)

有没有办法让具有输入值的第一层与具有 ReLU 激活的第三层有额外的连接?这样做时,我希望在每个连接中都有不同的约束。例如,对于来自上一层的连接,我想使用GlorotNormal 作为我的权重初始化。至于来自输入层的额外连接,我想使用HeUniform初始化。

我试着在下面想象一下我的想法。

【问题讨论】:

    标签: python tensorflow keras tensorflow2.0 keras-layer


    【解决方案1】:

    使用Keras 功能API 和tf.concat

    import numpy as np
    import random
    import tensorflow as tf
    from tensorflow import keras 
    
    m = 200
    n = 5
    my_input=  np.random.random([m,n])
    my_output =  np.random.random([m,1])
    
    inputs = tf.keras.layers.Input((my_input.shape[1],))  
    x = tf.keras.layers.Flatten()(inputs)
    x = tf.keras.layers.Dense(32, activation='softmax')(x)
    x = tf.keras.layers.Dense(32, activation='tanh', kernel_initializer=tf.keras.initializers.GlorotNormal())(x)
    y = tf.keras.layers.Dense(my_input.shape[1], kernel_initializer=tf.keras.initializers.HeUniform())(inputs)
    x = tf.keras.layers.Dense(32, activation='relu')(tf.concat([x, y], axis=1))
    outputs = tf.keras.layers.Dense(1)(x)
    
    my_model = tf.keras.Model(inputs, outputs)
    
    dot_img_file = 'model_1.png'
    tf.keras.utils.plot_model(my_model, to_file=dot_img_file, show_shapes=True)
    my_model.compile(loss='mse',optimizer = tf.keras.optimizers.Adam(learning_rate=0.001))
    res = my_model.fit(my_input,  my_output, epochs=50, batch_size=1,verbose=0)
    

    【讨论】:

    • 谢谢!我会试一试。请问你是在哪里找到这个信息的?我浏览了该网站,找不到任何信息。
    • 感谢您的图片。现在来看,我将如何以不同的方式限制这两个连接中的权重。我的意图是为xinputs 使用不同的权重结构?
    • 哦,好吧!我以为你正在阅读一个 png 文件并通过 tensorflow 调用它。
    • 是的,您可以定义一个新层。您可能需要安装 Graphviz 库来绘制模型。
    猜你喜欢
    • 2017-12-14
    • 1970-01-01
    • 1970-01-01
    • 2020-08-08
    • 1970-01-01
    • 1970-01-01
    • 2020-09-20
    • 2020-05-29
    • 2019-07-31
    相关资源
    最近更新 更多