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))