Tensorflow第三章线性神经网络线性回归实现

1.导包

import tensorflow as tf

2.构造数据y=W*x+b

def synthetic_data(w,b,num_examples):
    X=tf.zeros((num_examples,w.shape[0]))
    X+=tf.random.normal(shape=X.shape)
    y=tf.matmul(X,tf.reshape(w,(-1,1)))+b
    y+=tf.random.normal(shape=y.shape,stddev=0.01)
    #print(y.shape)
    y=tf.reshape(y,(-1,1))
    #print(y.shape)
    return X,y
true_w=tf.constant([2,-3.4])
true_b=4.2
features,lables=synthetic_data(true_w,true_b,1000)

3.构造一个tensorflow数据迭代器

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((features,lables),batch_size)
next(iter(data_iter))

请添加图片描述
4.设置线性网络
为了方便使用,Keras不要求我们为每个层指定输入形状。 所以在这里,我们不需要告诉Keras有多少输入进入这一层。 当我们第一次尝试通过我们的模型传递数据时,例如,当后面执行net(X)时, Keras会自动推断每个层输入的形状。

net=tf.keras.Sequential()
net.add(tf.keras.layers.Dense(1))
initializer=tf.initializers.RandomNormal(stddev=0.01)
net=tf.keras.Sequential()
net.add(tf.keras.layers.Dense(1,kernel_initializer=initializer))

5.设置均方误差

loss=tf.keras.losses.MeanSquaredError()

6.定义梯度下降

trainer=tf.keras.optimizers.SGD(learning_rate=0.03)

7.训练

num_epochs=3
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(features),lables)
    print(f'epoch {epoch+1},loss {l:f}')

请添加图片描述

8.预测值与真实值之间误差

w=net.get_weights()[0]
print(w.shape)
print(true_w.shape)
print(true_w-tf.reshape(w,true_w.shape))
b=net.get_weights()[1]
print(true_b-b)

请添加图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值