Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.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 我想通过keras为深度学习添加一对一的层次_Python_Keras_Deep Learning_Layer - Fatal编程技术网

Python 我想通过keras为深度学习添加一对一的层次

Python 我想通过keras为深度学习添加一对一的层次,python,keras,deep-learning,layer,Python,Keras,Deep Learning,Layer,我想在Keras的深度学习中添加特征选择层。 我编写了以下代码 然而,我需要在输入层之后再多一个一对一的线性层。 我知道我不能使用密集层,但我应该如何使用代码 input_layer = Input(shape=(len(input_df.columns),), dtype='float') modelx_1 = Dense(64)(input_layer) modelx_1 = Activation("relu")(modelx_1) modelx_1 = Dropout(

我想在Keras的深度学习中添加特征选择层。 我编写了以下代码

然而,我需要在输入层之后再多一个一对一的线性层。 我知道我不能使用密集层,但我应该如何使用代码

input_layer = Input(shape=(len(input_df.columns),), dtype='float')
modelx_1 = Dense(64)(input_layer)
modelx_1 = Activation("relu")(modelx_1)
modelx_1 = Dropout(0.2)(modelx_1)
modelx_2 = Dense(16)(modelx_1)
modelx_2 = Activation("linear")(modelx_2)
modelx_2 = Dropout(0.2)(modelx_2)
modelx_2 = Dense(1)(modelx_2)
modely_1 = Dense(64)(input_layer)
modely_1 = Activation("relu")(modely_1)
modely_1 = Dropout(0.2)(modely_1)
modely_2 = Dense(16)(modely_1)
modely_2 = Activation("linear")(modely_2)
modely_2 = Dropout(0.2)(modely_2)
modely_2 = Dense(1)(modely_2)

output_layer = Concatenate()([modelx_2, modely_2])
model = Model(inputs=input_layer, outputs=output_layer)
这是我的目标深度学习架构。 ()


如果您不介意,请告诉我。

我不确定您提供的代码段是否与图像中显示的预期体系结构匹配,因为您的代码段中有多个输出,但图像中显示的只有1个输出,其中有3个单元,或者我可能遗漏了什么

我的回答将用于定义图像上显示的架构


有几种方法可以做到这一点,第一个问题是:加权输入层的权重是可训练的还是恒定的

  • 如果权重不变,则有两种解决方案:
  • 1.1。使用权重定义一个常数张量,并使用它乘以输入特征:

    将tensorflow导入为tf
    n_特征=4
    权重=tf常数([1.1,1.2,1.3,1.4])
    输入=tf.keras.layers.input(形状=(n_特征,)
    输入加权=tf.乘法(输入加权)
    稠密1=tf.keras.layers.dense(单位=5,激活=“relu”)(输入加权)
    密集型_2=tf.keras.layers.density(单位=4,活化=“relu”)(密集型_1)
    输出=tf.keras.layers.density(单位=3,激活=“softmax”)(密集度2)
    模型=tf.keras.model(输入=输入,输出=输出)
    tf.keras.utils.plot_model(model,show_shapes=True)
    
    这将为您提供以下模型:

    1.2。使用输入层提供权重

    将tensorflow导入为tf
    n_特征=4
    输入=tf.keras.layers.input(形状=(n_特征,)
    权重=tf.keras.layers.Input(形状=(n_特征,)
    输入加权=tf.keras.layers.Multiply(name=“加权输入”)([input,weights])
    稠密1=tf.keras.layers.dense(单位=5,激活=“relu”)(输入加权)
    密集型_2=tf.keras.layers.density(单位=4,活化=“relu”)(密集型_1)
    输出=tf.keras.layers.density(单位=3,激活=“softmax”)(密集度2)
    模型=tf.keras.model(输入=[输入,权重],输出=输出)
    tf.keras.utils.plot_model(model,show_shapes=True)
    
    这将为您提供以下模型:

  • 如果权重是可训练的,则可以创建自定义层并在模型中使用它
  • 将tensorflow导入为tf
    类加权层(tf.keras.layers.Layer):
    定义初始化(self,*args,**kwargs):
    super()
    def构建(自我,输入_形状):
    self.kernel=self.add_weight(“kernel”,shape=(int(输入_shape[-1]),)
    def呼叫(自我,输入):
    返回tf.multiply(输入,self.kernel)
    n_特征=4
    输入=tf.keras.layers.input(形状=(n_特征,)
    输入加权=加权层(name=“加权输入”)(输入)
    稠密1=tf.keras.layers.dense(单位=5,激活=“relu”)(输入加权)
    密集型_2=tf.keras.layers.density(单位=4,活化=“relu”)(密集型_1)
    输出=tf.keras.layers.density(单位=3,激活=“softmax”)(密集度2)
    模型=tf.keras.model(输入=输入,输出=输出)
    tf.keras.utils.plot_model(model,show_shapes=True)
    
    这将为您提供以下模型:


    通过每次打印模型摘要,您可以看到,对于前两个模型,您有64个可训练参数,对于最后一个模型,您有68个可训练参数,对应于前两个模型的64个+添加的4个权重