神經網路的複雜度用:網路層數和神經網路引數的個數來表示;
空間複雜度:
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 次 上面的...
複雜度分析 時間複雜度 空間複雜度
執行效率是演算法的乙個重要的考量指標,演算法的執行效率用時間 空間複雜度來衡量。今天我們來學習一下複雜度的分析。通常我們可以通過執行程式來獲得演算法的真正的執行時間,這種方法我們可以稱為事後統計法,但這種方法得到的是具體的資料,測試結果很依賴測試環境,而且受資料規模影像最大。因此,我們需要乙個不需要...