複雜度 學習率 損失函式

2021-10-25 14:14:30 字數 2283 閱讀 7437

神經網路的複雜度用:網路層數和神經網路引數的個數來表示;

空間複雜度:

import tensorflow as tf

x = tf.random.normal([20

,2], mean=

2, stddev=

1, dtype=tf.float32)

y =[item1 +

2* item2 for item1, item2 in x]

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

,1], mean=

0, stddev=1)

)epoch =

5000

lr =

0.002

for epoch in

range

(epoch)

:with tf.gradienttape(

)as tape:

y_hat = tf.matmul(x, w)

loss = tf.reduce_mean(tf.square(y_hat - y)

) w_grad = tape.gradient(loss, w)

w.assign_sub(lr * w_grad)

print

(w.numpy(

).t)

② 自定義;

還是上面的,我們定義損失函式為乙個分段函式。當**值大於真實值,我們認為對我們模型不利,即:

f (y

^,y)

=3(\hat y - y)& \hat y \geqslant y\\ y - \hat y& \hat y \leqslant y \end

f(y^​,

y)={

3(y^

​−y)

y−y^

​​y^

​⩾yy

^​⩽y

import tensorflow as tf

x = tf.random.normal([20

,2], mean=

2, stddev=

1, dtype=tf.float32)

y =[item1 +

2* item2 for item1, item2 in x]

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

,1], mean=

0, stddev=1)

)epoch =

5000

lr =

0.002

for epoch in

range

(epoch)

:with tf.gradienttape(

)as tape:

y_hat = tf.matmul(x, w)

loss = tf.reduce_mean(tf.where(tf.greater(y_hat, y),3

*(y_hat - y)

, y-y_hat)

) w_grad = tape.gradient(loss, w)

w.assign_sub(lr * w_grad)

print

(w.numpy(

).t)

# [[0.73728406 0.83368826]]

由於**大了對模型損失函式影響較大,故而應該盡量往小了**,也就是這裡的結果均偏小。

我們做乙個簡單的修改,即:

loss = tf.reduce_mean(tf.where(tf.greater(y_hat, y), (y_hat - y), 3*(y-y_hat)))
此時,**值小於真實值的時候,我們認為對模型不利,也就是要盡量往大了**,此時的訓練結果:[[1.6747012 1.9530903]]③ 交叉熵損失函式

tf.losses.categorical_crossentropy(y, y_)

交叉熵損失函式表示兩個概率分布之間的距離。

比如,給定已知類別(1, 0),而**的

y_1 = (0.6, 0.4);

y_2 = (0.8, 0.2);

我們需要衡量,哪個答案更加接近標準答案,就可以使用交叉熵來進行計算衡量。

tensorflow複雜度學習率

import tensorflow as tfw tf.variable tf.constant 5,dtype tf.float32 epoch 40lr base 0.2 最初學習率 lr decay 0.99 學習率衰減率 lr step 1 餵入多少輪batch size後,更新一次學習率f...

學習時間複雜度和空間複雜度

評判演算法的標準 時間複雜度 一般是最壞情況下的時間複雜度 根據數量級,描述時間複雜度,一般用 大 o 表示,記做 o f n n為資料的規模 常見數量級函式 當 n 增大時,數量級函式增長幅度排名 1.常數函式 n 100 1 次 sum 1 n n 2 1 次 print sum 1 次 上面的...

複雜度分析 時間複雜度 空間複雜度

執行效率是演算法的乙個重要的考量指標,演算法的執行效率用時間 空間複雜度來衡量。今天我們來學習一下複雜度的分析。通常我們可以通過執行程式來獲得演算法的真正的執行時間,這種方法我們可以稱為事後統計法,但這種方法得到的是具體的資料,測試結果很依賴測試環境,而且受資料規模影像最大。因此,我們需要乙個不需要...