非线性模拟数据回归

人工神经网络的应用包含了很多的分类任务,但是事实上,很多这些分类任务都是用回归来实现的.
分类和回归的网络结构差不多,都可以使用多变量的输入,以及线性或者非线性的激活函数.
在一些例子中,唯一要变的就是在输出层,连接上sigmoid状函数,该函数能够表征结果为各个类别的可能性.
在第一个例子中,我们使用一个简单的带噪声的二次方程生成样本.模型,我们使用一个隐含层的神经网络,然后检测预测值跟真实值的距离远近.
(1)数据集描述和加载
本例中,我们使用生成的数据集.
我们这次选择的方程是一个二次方程,并加上随机噪声,这有助于帮助我们测试回归的泛化能力.

trainsamples = 200
testsamples = 60
dsX = np.linspace(-1, 1, trainsamples + testsamples).transpose()
dsY = 0.4* pow(dsX,2) +2 * dsX + np.random.randn(*dsX.shape) * 0.22 + 0.8
(2)数据集预处理
本例中的数据集不需要预处理,因为它是我们人工生成的,具有更好的性能,比如能够保证数据范围是(-1,1)
(3)模型结构–损失函数描述
本例中的损失函数使用均方误差,由以下代码实现:

cost = tf.pow(model_y-Y, 2)/(2) # Cost function
(4)损失函数优化器
本例中,我们使用梯度下降作为损失函数优化器,可以用以下代码实现:

train_op = tf.train.AdamOptimizer(0.0001).minimize(cost) # construct an optimizer
(5)准确度和收敛测试

train_op = tf.train.AdamOptimizer(0.0001).minimize(cost) # construct an optimizer
cost1 += sess.run(cost, feed_dict={X: [[x1]], Y: y1}) / testsamples