3 2 線性回歸的從零開始實現

2021-10-18 11:44:32 字數 2690 閱讀 2668

小白學深度學習

num_inputs =

2num_examples =

1000

truw_w =[2

,-3.4]

true_b =

4.2features = tf.random.normal(

(num_examples, num_inputs)

, stddev=

0.01

, dtype = tf.float32)

labels = tf.matmul(features, true_w)

labels += tf.random.normal(labels.shape, stddev=

0.01

)from matplotlib import pyplot as plt

plt.scatter(features[:,

1], labels, s=

1)

def

data_iter

(batch_size, features, labels)

: num_examples =

len(features)

indices =

list

(range

(num_examples)

) random.shuffle(indices)

for i in

range(0

, num_examples, batch_size)

: j = indices[i:

min(i + batch_size, num_examples)

]yield tf.gather(features, axis=

0, indices=j)

, tf.gather(labels, axis=

0, indices=j)

batch_size =

10for x, y in data_iter(batch_size, features, labels)

:print

(x, y)

break

注意:非常重要!定義變數,尤其是可變引數時,一定要使用tf.variable()

w = tf.variable(tf.random.normal(

(num_inputs,1)

, stddev=

0.01

, dytype=tf.float32)

b = tf.variable(tf.zeros((1

,)))

def

linreg

(x, w, b)

:return tf.matmul(x, w)

+ b

注意:這裡只是計算了在當前的引數下,乙個樣本的損失,所以在最後訓練模型時需要使用tf.reduce_sum()函式

def

squared_loss

(y_hat, y)

:return

(y_hat - tf.reshape(y, y_hat.shape))**

2/2

這裡的優化演算法實際上只是執行了乙個相減的步驟

def

sgd(params, lr, batch_size, grads)

:for i, param in enumarate(params)

: param.assign_sub(lr * grads[i]

/ batch_size)

lr =

0.03

num_epochs =

3net = linreg

loss = squared_loss

for epoch in

range

(num_epochs)

:## 對每乙個週期

for x, y in data_iter(batch_size, features, labels)

:## 調取每乙個小批量的資料,對每乙個小批量資料執行以下程式

with tf.gradienttape(

)as t:

t.watch(

[w, b]

) l = tf.reduce_sum(loss(net(x, w, b)

, y)

)## 計算在當前的小批量資料下的損失函式

grads = t.gradient(l,

[w, b]

)## 對損失函式進行求導得到梯度

sgd(

[w, b]

, lr, batch_size, grads)

train_l = loss(net(features, w, b)

, labels)

## 計算在一次迭代完成後,在新的引數下,所有樣本的損失函式

print

('epoch: %d, loss: %f'

%(epoch +

1, tf.reduce_mean(train_l)

))

線性回歸的從零開始實現

import torch from ipython import display from matplotlib import pyplot as plt import numpy as np import random 1 生成資料集 訓練資料集樣本數為1000,輸入個數 特徵數 為2 線性回歸模...

從零開始的canvas

最近工作都是增刪改查。正好you有時間學點新東西,er而不是單純的業務上的東西 所以就學學canvas吧 sho首選建立乙個canvas var c document.getelementbyid mycanvas var ctx c.getcontext 2d 然後進行定義 ctx.beginpa...

從零開始的聯合

關鍵字 union,語法與struct樣,區別是所有成員共用一塊儲存空間。當給其中乙個成員賦值時,其它成員的值也會發生變化。使用union判斷系統是大端還是小端。int num 0x01020304 0xe1e2e3e4 num 低位位址儲存低位資料 小端。0xe1e2e3e4 0x04 0xe1e...