给出以下代码:
input<-layer_input(shape=2)
hidden<-layer_dense(input,units=4,activation="sigmoid",use_bias=T)
outputs<- list(
layer_dense(hidden,units=1,activation="linear",use_bias=F),
layer_dense(hidden,units=1,activation="linear",use_bias=F)
)
model<-keras_model(inputs=input, outputs=outputs)
summary(model)
摘要调用的输出如下:
Model
Model: "model_63"
____________________________________________________________________________________________________________________________________________________
Layer (type) Output Shape Param # Connected to
====================================================================================================================================================
input_63 (InputLayer) [(None, 2)] 0
____________________________________________________________________________________________________________________________________________________
dense_85 (Dense) (None, 4) 12 input_63[0][0]
____________________________________________________________________________________________________________________________________________________
dense_86 (Dense) (None, 1) 4 dense_85[0][0]
____________________________________________________________________________________________________________________________________________________
dense_87 (Dense) (None, 1) 4 dense_85[0][0]
====================================================================================================================================================
Total params: 20
Trainable params: 20
Non-trainable params: 0
以某种方式(此处未显示)网络无法正常运行。我怀疑该体系结构有问题。我想要的是一个具有两个输入神经元,4个隐藏神经元和2个线性输出神经元的网络。 关联列中括号内的数字是什么意思?
答案 0 :(得分:1)
您设计的模型完全符合您在此处描述的内容。连接到表示当前层连接到的上一层,在您的情况下,density_85 [0] [0]表示所有4个先前的神经元,但不是它们的偏差-应该如此。 density_85有两个部分; [0]是8个参数的图层,每个输入要素4个,然后[1]将是4个参数,表示它们的偏差-激活功能之前的衬线添加。
将最后一层分成两部分实际上具有零影响。为什么?因为您创建了4个权重,所以对于上一层中的每个神经元,权重为1; 4 x 1 x 2 -完全一样,如果您一次创建8个权重-每个输出1个权重-4 x2。即使加上偏差也是如此。当您要继续进行一些复杂的图层,或者每个图层具有不同的复杂损失函数时,中断输出会起作用。
要进行可视化,请尝试使用deepviz::plot_model
,它的绘制非常好,您可以更轻松地查看模型的功能。另外,如果您想增加模型容量,我建议增加层大小或也许增加额外的层。