【发布时间】:2019-12-23 11:28:33
【问题描述】:
我想训练一个简单的 1-hidden layer 网络。 网络应该由三层组成:一个输入层(2 个维度)、一个隐藏层(10 个维度)和一个输出层(1 个维度)。 输入层的激活函数应该是线性的,隐藏层 sigmoid 的激活函数,输出层的激活函数也是线性的(因为我在做回归任务)。
以下是我的代码:
model <- keras_model_sequential() %>%
layer_dense(units = 10, activation = 'sigmoid', input_shape = 2)
这会导致错误:
Error in py_call_impl(callable, dots$args, dots$keywords) :
ValueError: A target array with shape (625, 1) was passed for an output of shape (None, 10) while using as loss `mean_squared_error`. This loss expects targets to have the same shape as the output.
问题好像是我的目标标签是一维的,但是网络的输出却是10维以上。
因此,我将模型更改如下:
model <- keras_model_sequential() %>%
layer_dense(units = 10, activation = 'sigmoid', input_shape = ncol(x_train)) %>%
layer_dense(units = 1, activation = 'linear')
现在我可以编译网络了。
绘制权重结果如下:
> get_weights(model)
[[1]]
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1.250297 -2.6194241 -1.5429267 1.025575 -1.9918470 2.1469700 -1.4964410 0.7511418 0.9715033 0.9903362
[2,] 2.805784 -0.2100081 -0.8766818 2.319680 0.6840908 0.3205897 -0.8494857 3.8642540 1.8826129 2.0817966
[[2]]
[1] -0.020989 -2.063512 -4.764145 -4.091934 1.964735 -5.380935 -4.615426 4.845552 -2.825072 -3.375803
[[3]]
[,1]
[1,] 3.338166
[2,] -2.492730
[3,] -3.012555
[4,] 2.306220
[5,] -2.523774
[6,] 3.265386
[7,] -2.959120
[8,] 4.011787
[9,] 1.740327
[10,] 2.033795
[[4]]
[1] -0.2520685
这个输出令人困惑。 根据需要,[[1]] 似乎是与具有 10 个神经元的隐藏层的连接。层 [[2]] 似乎是从隐藏层到输出层的连接,它总结了隐藏神经元的输出。 但是,我不明白这里的 [[3]] 和 [[4]] 是什么? [[4]] 好像代表了最终的输出连接权重,但是[[3]]是什么?
如何构建一个包含 10 个隐藏神经元和一个线性输出神经元的网络?
【问题讨论】:
-
我再次编辑以正确解决最后一个问题。如果它回答了问题,你可以接受它:)。