在Keras中多层感知器(MLP)的情况下,如何在不同的稠密函数情况下使用输入参数
我已经尝试并看到了以下关于序贯模型的观察结果:
在MLP中添加第一个隐藏层时,input_dim参数始终作为Dense()函数的一部分传递
对于MLP中的其他隐藏层(例如第2层、第3层、第4层等)或输出层,input_dim参数永远不会作为Dense()函数的一部分传递
# To create a Sequential model
model_batch_drop_5lyr = Sequential()
# Hidden Layer1
model_batch_drop_5lyr.add(Dense(684, activation='relu', input_dim = input_dim, kernel_initializer=RandomNormal(mean=0.0, stddev=0.025, seed=None)))
model_batch_drop_5lyr.add(BatchNormalization())
model_batch_drop_5lyr.add(Dropout(0.5)) # 50% no. of neurons droped
# Hidden Layer2
model_batch_drop_5lyr.add(Dense(512, activation='relu', kernel_initializer=RandomNormal(mean=0.0, stddev=0.050, seed=None)))
model_batch_drop_5lyr.add(BatchNormalization())
model_batch_drop_5lyr.add(Dropout(0.5)) # 50% no. of neurons droped
# Hidden Layer3
model_batch_drop_5lyr.add(Dense(356, activation='relu', kernel_initializer=RandomNormal(mean=0.0, stddev=0.075, seed=None)))
model_batch_drop_5lyr.add(BatchNormalization())
model_batch_drop_5lyr.add(Dropout(0.5)) # 50% no. of neurons droped
# Hidden Layer4
model_batch_drop_5lyr.add(Dense(228, activation='relu', kernel_initializer=RandomNormal(mean=0.0, stddev=0.125, seed=None)))
model_batch_drop_5lyr.add(BatchNormalization())
model_batch_drop_5lyr.add(Dropout(0.5)) # 50% no. of neurons droped
# Hidden Layer5
model_batch_drop_5lyr.add(Dense(128, activation='relu', kernel_initializer=RandomNormal(mean=0.0, stddev=0.155, seed=None)))
model_batch_drop_5lyr.add(BatchNormalization())
model_batch_drop_5lyr.add(Dropout(0.5)) # 50% no. of neurons droped
# Output Layer
model_batch_drop_5lyr.add(Dense(output_dim, activation='softmax'))
# Printing Summary of the model with 3 hidden layers
print(model_batch_drop_5lyr.summary())
为什么我们只在隐藏层1中使用输入维度。在其他情况下,输入尺寸也可以用于其他层
input_dim
与input_shape
参数非常相似,它通常也只在第一层中使用。两者都告诉keras第一层的输入数据的维数是多少,从中可以对该层和后续层进行形状推断input_dim = n
等价于input_shape = (n,)
,您在接收输入的层中使用,因为输入是keras唯一未知的,所以用户需要指定输入的预期形状相关问题 更多 >
编程相关推荐