mac m1 使用tensorflow2.6(一)

412 阅读2分钟

第一节:从线性回归入手

参考《简明的tensorflow2》

基础理论:深度学习学得的模型是为了拟合一个任务在真实世界分布,即:

真实世界:y=ϕ(x)y=\phi(x), 神经网络:ypred=f(x)y_{pred}=f(x) , 希望两个分布尽可能相似:f(x)f(x)ϕ(x)\phi(x)

而为了衡量这两个分布,各种损失函数被创造出,比如最常见的RMSEloss:L=Σi=1n(yy^)2RMSEloss:L=\Sigma_{i=1}^n(y-\hat{y})^2,让预测值的分布与真实值更相近

问题描述,商铺item在2013-2017年间的销售额如下,预测商品在2018年的销售

年份20132014201520162017
销售额1200014000150001650017500

首先,倒入我们需要的包

import numpy as np
import tensorflow as tf

第二,我们要拟合分布的预测任务:一件商品六年的销售额

x_raw = np.array([2013, 2014, 2015, 2016, 2017], dtype=np.float32)
y_raw = np.array([12000, 14000, 15000, 16500, 17500], dtype=np.float32)

第三,数据预处理,进行归一化,并转换成为tensorflow的张量

x = (x_raw - x_raw.min()) / (x_raw.max() - x_raw.min())
y = (y_raw - y_raw.min()) / (y_raw.max() - y_raw.min())
x=tf.constant(x)
y=tf.constant(y)

第四,设计你的模型需要的参数,因为tf2.x中tape计算时是给所有变量加梯度,所以用列表打包所有参数

a=tf.Variable(initial_value=0.)
b=tf.Variable(initial_value=0.)
variable=[a,b]

第五,设计迭代次数与优化方法,这里使用随机梯度下降的方法

epoch=1000
optimizer=tf.keras.optimizers.SGD(learning_rate=1e-3)

第六,开始训练!

for e in range(epoch):
    with tf.GradientTape() as tape:
        y_pred=a*x+b
        loss=tf.reduce_sum(tf.square(y_pred-y))
    grads=tape.gradient(loss,variable)
    optimizer.apply_gradients(grads_and_vars=zip(grads,variable))
    print(loss)

tips:tf2.x中提供tf.GradientTape()作为梯度反向传播空间,其中的参数均是需要求导的参数,通过tape.gradient方法,计算tape空间中两个张量间的梯度,最终放进优化器中optimizer.apply_gradients,进行参数优化。

最后,得到我们的预测值啦!

x_pred = tf.constant((2018 - x_raw.min()) / (x_raw.max() - x_raw.min()),dtype=tf.float32)
print(a * x_pred + b)