Python 我想通过keras为深度学习添加一对一的层次
我想在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(
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个单元,或者我可能遗漏了什么 我的回答将用于定义图像上显示的架构
有几种方法可以做到这一点,第一个问题是:加权输入层的权重是可训练的还是恒定的
将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个权重