欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

3.3 线性回归的简介实现

程序员文章站 2022-03-21 19:46:18
...

小白学深度学习

 
 

1. 生成数据集

同上节一样,略过

 
 

2. 读取数据

from tensorflow import data as tfdata

batch_size = 10
dataset = tfdata.Dataset.from_tensor_slices((features, labels))
dataset = dataset.shuffle(buffer_size=num_examples)
dataset = dataset.batch(batch_size)

for (batch, (X, y)) in enumerate(dataset):
    print(X, y)

这里重点是三个函数:

  • tfdata.Dataset.from_tensor_slices可以理解为将特征与标签切片后进行配对,即一组特征对应一个标签;
  • shuffle就是将配对后的组合顺序打乱;
  • batch就是将打乱顺序后的配对组合进行打包,按照batch_size的大小分成一份一份的。

 
 

3. 定义模型和初始化参数

from tensorflow import keras
from tensorflow.keras import layers
from tensorflow import initializers as init
model = keras.Sequential()
model.add(layers.Dense(1, kernel_initializer=init.RandomNormal(stddev=0.01)))
  • 这里首先利用keras定义一个Sequential实例,来装模型;
  • 构造模型的时候只需要在model里面不断加神经网络的层就可以了;
  • 初始化参数的时候在模型中加入第一层,利用kernel_initializer初始化权重,利用bias_initializer初始化偏置,偏差默认初始化为零。

 
 

4. 定义损失函数

from tensorflow import losses
loss = losses.MeanSquaredError()

直接使用losses里面的各种损失函数就可以了,当然也可以利用这个模块自定义损失函数。

 
 

5. 定义优化算法

from tensorflow.keras import optimizers
trainer = optimizers.SGD(learning_rate=0.03)

optimizers模块里面导入各种优化算法,这里利用小批量随机梯度下降法,并指定学习率(即步长)为0.03。

 
 

6. 训练模型

num_epochs = 3
for epoch in range(1, num_epochs):
    for (batch, (X, y)) in enumerate(dataset):
        with tf.GradientTape() as tape:
            l = loss(model(X, training=True), y)
        grads = tape.gradient(l, model.trainable_variables)
        trainer.apply_gradients(zip(grads, model.trainable_variable))

    l = loss(model(features), labels)
    print('epoch %d, loss: %f' % (epoch + 1, l))