小白學深度學習
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...