2利用API实现线性回归深度学习训练

这一个就是把昨天写的一些函数用API代替实现,不需要自己去写,比较简洁,实现的功能跟1一样,都是实现一个简单的线性回归网络

import random
import tensorflow as tf

# 生成数据集 y = X*w + b + (误差)
def Data(w, b, num):
  # 生成全0矩阵
  X = tf.zeros((num, w.shape[0]))
  # 给x随机赋初值
  X = X + tf.random.normal(shape=X.shape)
  # 计算X对应y的值,w的值需要转换成1列,-1表示不确定行数,由后面的列自动求出前面的行
  # (-1, 1)表示n行1列,n由w的大小确定
  y = tf.matmul(X, tf.reshape(w, (-1, 1))) + b
  # 给y加上噪声
  y += tf.random.normal(shape=y.shape, stddev=0.01)
  y = tf.reshape(y, (-1, 1))
  return X, y


# 生成1000组数据
true_w = tf.constant([2, -3.4])
true_b = 4.2
data, labels = Data(true_w, true_b, 1000)

# 利用框架的API读取数据
def load_array(data_arrays, batch_size, is_train=True):
  dataset = tf.data.Dataset.from_tensor_slices(data_arrays)
  if is_train:
    dataset = dataset.shuffle(buffer_size=1000)
  dataset = dataset.batch(batch_size)
  return dataset

batch_size = 10
data_iter = load_array((data, labels), batch_size)

# 定义模型
# net = tf.keras.Sequential()
# net.add(tf.keras.layers.Dense(1))

# 初始化模型参数,重新创建了net
initializer = tf.initializers.RandomNormal(stddev=0.01)
net = tf.keras.Sequential()
net.add(tf.keras.layers.Dense(1, kernel_initializer=initializer))

# 定义损失函数
loss = tf.keras.losses.MeanSquaredError()

# 定义优化算法
trainer = tf.keras.optimizers.SGD(learning_rate=0.03)

# 训练
num_epochs = 10
for epoch in range(num_epochs):
  for X,y in data_iter:
    with tf.GradientTape() as tape:
      l = loss(net(X, training=True), y)
    grads = tape.gradient(l, net.trainable_variables)
    trainer.apply_gradients(zip(grads, net.trainable_variables))
  l = loss(net(data), labels)
  print(f'epoch {epoch + 1}, loss {l:f}')             

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值