预测酸奶日销量y, x1, x2是影响日销量的因素。
建模前,应预先采集的数据有:每日x1,x2和销量y_(即已知答案,最佳情况:产量=销量)
拟造数据集X,Y_:y_=x1 + x2 噪声:-0.05~ +0.05 拟合可以预测销量的函数
import tensorflow as tf
import numpy as np
SEED = 23455
rdm = np.random.RandomState(seed=SEED) # 生成[0,1)之间的随机数
x = rdm.rand(32, 2)
# 生成噪声[0,1)/10=[0,0.1); [0,0.1)-0.05=[-0.05,0.05)
y_ = [[x1 + x2 + (rdm.rand() / 10.0 - 0.05)] for (x1, x2) in x]
x = tf.cast(x, dtype=tf.float32)
w1 = tf.Variable(tf.random.normal([2, 1], stddev=1, seed=1))
epoch = 15000
lr = 0.002
for epoch in range(epoch):
with tf.GradientTape() as tape:
y = tf.matmul(x, w1)
loss_mse = tf.reduce_mean(tf.square(y_ - y)) #均方误差
grads = tape.gradient(loss_mse, w1)
w1.assign_sub(lr * grads)
if epoch % 500 == 0:
print("After %d training steps,w1 is " % (epoch))
print(w1.numpy(), "\n")
print("Final w1 is: ", w1.numpy())
———————————————————————————————————————————
每500次训练输出w的结果,最终Final w1 is: [[1.0009792],[0.9977485]],
预测销量y的结果等于 1.00倍x1 + 1.00倍x2,和y_=x1 + x2 对比,说明预测酸奶日销量的公式拟合正确。
After 0 training steps,w1 is
[[-0.8096241]
[ 1.4855157]]
After 500 training steps,w1 is
[[-0.21934733]
[ 1.6984866 ]]
After 1000 training steps,w1 is
[[0.08939711]
[1.673225 ]]
After 1500 training steps,w1 is
[[0.28368822]
[1.5853055 ]]
After 2000 training steps,w1 is
[[0.423243 ]
[1.4906037]]
After 2500 training steps,w1 is
[[0.531055 ]
[1.4053345]]
After 3000 training steps,w1 is
[[0.61725086]
[1.332841 ]]
After 3500 training steps,w1 is
[[0.687201 ]
[1.2725208]]
After 4000 training steps,w1 is
[[0.7443262]
[1.2227542]]
After 4500 training steps,w1 is
[[0.7910986]
[1.1818361]]
After 5000 training steps,w1 is
[[0.8294352]
[1.1482395]]
After 5500 training steps,w1 is
[[0.86087203]
[1.1206709 ]]
After 6000 training steps,w1 is
[[0.8866551]
[1.098054 ]]
After 6500 training steps,w1 is
[[0.9078028]
[1.0795006]]
After 7000 training steps,w1 is
[[0.9251489]
[1.0642821]]
After 7500 training steps,w1 is
[[0.9393773]
[1.0517985]]
After 8000 training steps,w1 is
[[0.9510481]
[1.041559 ]]
After 8500 training steps,w1 is
[[0.9606211]
[1.0331596]]
After 9000 training steps,w1 is
[[0.9684734]
[1.02627 ]]
After 9500 training steps,w1 is
[[0.9749144]
[1.0206192]]
After 10000 training steps,w1 is
[[0.98019755]
[1.0159837 ]]
After 10500 training steps,w1 is
[[0.9845312]
[1.0121814]]
After 11000 training steps,w1 is
[[0.9880858]
[1.0090628]]
After 11500 training steps,w1 is
[[0.99100184]
[1.0065047 ]]
After 12000 training steps,w1 is
[[0.9933934]
[1.0044063]]
After 12500 training steps,w1 is
[[0.9953551]
[1.0026854]]
After 13000 training steps,w1 is
[[0.99696386]
[1.0012728 ]]
After 13500 training steps,w1 is
[[0.9982835]
[1.0001147]]
After 14000 training steps,w1 is
[[0.9993659]
[0.999166 ]]
After 14500 training steps,w1 is
[[1.0002553 ]
[0.99838644]]
Final w1 is: [[1.0009792]
[0.9977485]]
Process finished with exit code 0