为什么我的神经网络不能推广x ^ 2函数?

时间:2019-05-16 09:17:59

标签: python tensorflow deep-learning tf.keras

我正在尝试在Tensorflow中构建一个模型,该模型可以预测任何x输入的 x ^ 2 。到目前为止,我的模型在训练数据间隔[-100,100]内具有相当不错的准确性,但是对于超出此范围的任何数据都表现出色。

经过一些谷歌搜索和matplotlibing之后,很明显,神经网络在超出所示训练样本的x ^ 2曲线之后很难。

任何人都可以解释一下为什么神经网络在逼近高阶函数方面如此糟糕吗? 可以教网络遵循/逼近x ^ 2曲线的斜率吗?

  • 我尝试了一个10个单位的隐藏层,一直到10000个单位的10个隐藏层。它似乎无法概括。
  • 尝试了激活功能-Relu,Elu,Sigmoid,LeakyRelu。
  • 尝试过优化程序-Adam,SGD(学习率从0.1-0.0001)
  • 尝试的批量大小-8、10、16、32、64、128。
  • 尝试添加诸如Dropouts和Batch Normalization的层,可以提高训练速度,但是当然对归纳没有帮助。

代码:

input_num = np.arange(-100, 100, 1)
square = np.square(input_num)

l0 = tf.keras.layers.Dense(units=1024, input_shape=[1], activation='relu')

l1 = tf.keras.layers.Dense(units=512, activation='relu')
l2 = tf.keras.layers.Dense(units=512, activation='relu')
l3 = tf.keras.layers.Dense(units=512, activation='relu')

l4 = tf.keras.layers.Dense(units=256, activation='relu')
l5 = tf.keras.layers.Dense(units=256, activation='relu')

l6 = tf.keras.layers.Dense(units=1, activation='linear')
model = tf.keras.Sequential([l0, l1, l2, l3, l4, l5, l6])

model.compile(loss='mean_squared_error', optimizer=tf.keras.optimizers.Adam(0.0005))

model.fit(input_num, square, epochs=5000, verbose=True, batch_size=64)

0 个答案:

没有答案