深度神经网络学习函数f(x)= x ^ 2

时间:2020-04-12 05:48:29

标签: python tensorflow machine-learning neural-network

当前,我有一个函数f(x) = x^2

我有一个数据集,其特征是x,相应的标签是x ^ 2。

我希望我的机器学习模型能够准确地预测新值。

例如,对300的预测应接近300 * 300 = 90000

在我的代码中,我首先创建训练数据功能和标签,它们看起来像 功能:[0、1、2,... 999] 标签:[0,1,4,... 999 * 999]


import tensorflow as tf
import numpy as np
import logging
import matplotlib.pyplot as plt

logger = tf.get_logger()
logger.setLevel(logging.ERROR)
val = np.empty([1000], dtype = float)
val_squared = np.empty([1000], dtype = float)

#Create training data
for i in range(1000):
    val[i] = i
    val_squared[i] = i*i;

#Create layers of Deep Neural Network
l0 = tf.keras.layers.Dense(units = 500,input_shape=[1])
l1 = tf.keras.layers.Dense(units = 500, activation = 'sigmoid')
l2 = tf.keras.layers.Dense(units = 500, activation = 'sigmoid')
l3 = tf.keras.layers.Dense(units = 1)
model = tf.keras.Sequential([l0, l1, l2, l3])

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

history = model.fit(val,val_squared,epochs = 500, verbose = False, batch_size = 500)
plt.xlabel('Epoch Number')
plt.ylabel("Loss Magnitude")
plt.plot(history.history['loss'])


print("Prediction of 200: {}".format(model.predict([200.0])))
plt.show()

当绘制该图时,我们可以看到损耗收敛,这表明该模型正在学习。但是,实际预测与我们的预期值332823.16相比有很大差异,而不是40000。

可以在此处看到绘制的图形:https://imgur.com/a/GJMSrbV

我尝试将激活函数更改为relu和tanh,并调整了超参数以确保损耗收敛,但没有效果。我还有其他方法可以改善神经网络的性能吗?

1 个答案:

答案 0 :(得分:1)

您的损失图显示的误差约为0.8E11,即80亿,这是非常大的损失,相当于您的预测中的误差约为30万。

原因可能是您的学习率是10,这是很高的(tf.keras.optimizers.Adam(lr=10))。通常,对于Adam,使用的学习率约为1e-3(0.001)或1e-4(0.0001)。

还有两点-您甚至不需要多层模型来求解y = x ^ 2,请尝试使用具有500个隐藏节点的单层模型开始。较小的模型收敛更快。