已知我们的训练数据集在坐标轴上是线性分布的,求数据集的分布规律,也就是求 Y = wX + b 函数中w和b的值,使得真实值Y1 和求得的值 wX1 + b,误差最小。
手动生成训练数据集:Y = X * 4 + 1 + noise
在训练一千遍之后,我们得到了w的值为4.00232605,b的值为0.99968383,测试集验证x1=1,y1=5.00200989,x2=2,y2= 9.00433594,x3=3,y3=13.00666,基本符合Y = X * 4 + 1规律。
代码:
import tensorflow as tfimport numpy as np# 随机生成 3000行,1列向量inputX = np.random.rand(3000,1)# numpy.random.normal(loc=0.0, scale=1.0, size=None)# 标准正态分布(μ=0, σ=1),对应loc=0.0, scale=1.0# loc:此概率分布的均值(对应着整个分布的中心centre)# scale:此概率分布的标准差(对应于分布的宽度,scale越大越矮胖,scale越小,越瘦高)# size:输出的shape,默认为None,只输出一个值noise = np.random.normal(0,0.05,inputX.shape)# y=4x + 1outputY = inputX * 4 + 1 + noise# 第一层# inputX.shape = (3000, 1)# inputX.shape[1] = 1# w 的shape实际是 (1, 4)weight1 = tf.Variable(np.random.rand(inputX.shape[1],4))bias1 = tf.Variable(np.random.rand(inputX.shape[1],4))# x和w的shape行列值正好是相反,原因请看矩阵的线性变换x1 = tf.placeholder(tf.float64, [None, 1])# Y = w * X + b 一元线性回归模型# tf.matmul是矩阵相乘y1_ = tf.matmul(x1, weight1) + bias1y = tf.placeholder(tf.float64, [None, 1])# tf.reduce_sum(tf.square((y1_ - y)) 最小二乘的累加# tf.reduce_mean 对矩阵降维loss = tf.reduce_mean(tf.reduce_sum(tf.square((y1_ - y)),reduction_indices=[1]))# 选择学习率为0.25的梯度下降法train = tf.train.GradientDescentOptimizer(0.25).minimize(loss)# 初始化全部变量init = tf.initialize_all_variables()sees = tf.Session()sees.run(init)# 训练一千遍for i in range(1000):sees.run(train, feed_dict={x1:inputX, y:outputY})print(weight1.eval(sees))print("====================")print(bias1.eval(sees))print("====================")x_data = np.matrix([[1.],[2.],[3.]])print(sees.run(y1_,feed_dict={x1: x_data}))
结论:
w值:[[4.00232605 4.00232605 4.00232605 4.00232605]]b值:[[0.99968383 0.99968383 0.99968383 0.99968383]]计算结果:[[ 5.00200989 5.00200989 5.00200989 5.00200989][ 9.00433594 9.00433594 9.00433594 9.00433594][13.006662 13.006662 13.006662 13.006662 ]]
感觉今天的推文有点划水,但其实经典的神经网络模型,也就一百多行代码,随便写个脚本都比这多。神经网络、tensorflow太难了,

,2021年立下的flag,要发够12篇深度学习的推文,后悔了,不想学了,太难了。
文章转载自大碗岛星期天下午的梦,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




