为了设计一个基于神经网络的预测器,f(x) = sin(x)我设计了以下网络。Input ----> Dense(num_neurons=1) ---> Relu() ----> Dense(num_neurons=100) ---> Relu() ---> Dense(num_neurons=1) ----> Relu()--> Output.
损失的选择是 L2,优化器是标准梯度下降。预测器在X_train = numpy.arange(0.0, 314.1, 0.1)和上进行了训练Y_train = numpy.sin(X_train)。随后对其进行了测试,X_test= numpy.arange(-10.0, 10.0, 0.001)但是Y_test = numpy.sin(X_test)预测器在测试数据上表现不佳。可能出了什么问题?
训练数据太小,无法训练网络。添加更多数据,尤其是当 X < 0 时
网络中使用的 Relu 激活是错误的。将输出节点中的激活从 Relu 更改为线性应该有助于网络更好地学习函数。
网络不够深。向网络添加更多隐藏单元/层将有助于网络泛化
当回归 sin(x) 时,L2 损失不是衡量损失的好指标
梯度下降不是这个问题的最佳优化器。亚当优化器将是一个更好的选择。
这种类型的神经网络架构根本无法学习像 sin(x) 这样的函数。