tensorflow高階篇 4 損失函式1

2022-09-18 02:27:28 字數 2909 閱讀 5570

l2正則損失函式(即尤拉損失函式),l2正則損失函式是**值與目標函式差值的*方和。l2正則損失函式是非常有用的損失函式,因為它在目標值附*有更好的曲度,並且離目標越*收斂越慢:

# l = (pred - actual)^2

l2_y_vals = tf.square(target -x_vals)

l2_y_out = sess.run(l2_y_vals)

l1正則損失函式(即絕對值損失函式)。與l2正則損失函式對差值求*方差不同的是,l1正則損失函式對差值求絕對值。l1正則在目標附*不*滑,這回導致演算法不能很好的收斂。

# l = abs(pred -

actual)

l1_y_vals = tf.abs(target -x_vals)

l1_y_out = sess.run(l1_y_vals)

peseudo-huber損失函式是huber損失函式的連續、*滑估計,試圖

利用l1和l2正則消減極值處的陡峭,使得目標之附*連續。它的表示式依賴與引數delta。

# l = delta^2 * (sqrt(1 + ((pred - actual)/delta)^2) - 1

)delta1 = tf.constant(0.25) #delta=0

.25的情況下

phuber1_y_vals = tf.multiply(tf.square(delta1), tf.sqrt(1. + tf.square((target - x_vals)/delta1)) - 1

.)phuber1_y_out = sess.run(phuber1_y_vals)

delta2 = tf.constant(5.) #delta=5的情況下

phuber2_y_vals = tf.multiply(tf.square(delta2), tf.sqrt(1. + tf.square((target - x_vals)/delta2)) - 1.)

phuber2_y_out = sess.run(phuber2_y_vals)

利用matplotlib繪畫出以上的損失函式為:

完整**:

import matplotlib.pyplot as

pltimport tensorflow

astf

from

tensorflow.python.framework import ops

ops.reset_default_graph()

# create graph

sess =tf.session()

#建立與**函式序列和目標序列作為張量

x_vals = tf.linspace(-1., 1., 500

)target = tf.constant(0

.) #目標值為0

#l2正則損失函式(即尤拉損失函式)

# l

= (pred - actual)^2

l2_y_vals = tf.square(target -x_vals)

l2_y_out =sess.run(l2_y_vals)

#l1正則損失函式(即絕對值損失函式)

# l

= abs(pred -

actual)

l1_y_vals = tf.abs(target -x_vals)

l1_y_out =sess.run(l1_y_vals)

#peseudo

-huber損失函式是huber損失函式的連續 *滑估計,

#利用l1和l2正則消減極值處的陡峭,使得目標之附*連續。

# l = delta^2 * (sqrt(1 + ((pred - actual)/delta)^2) - 1

)delta1 = tf.constant(0.25) #delta=0

.25的情況下

phuber1_y_vals = tf.multiply(tf.square(delta1), tf.sqrt(1. + tf.square((target - x_vals)/delta1)) - 1

.)phuber1_y_out =sess.run(phuber1_y_vals)

delta2 = tf.constant(5.) #delta=

5的情況下

phuber2_y_vals = tf.multiply(tf.square(delta2), tf.sqrt(1. + tf.square((target - x_vals)/delta2)) - 1

.)phuber2_y_out =sess.run(phuber2_y_vals)

# plot the output:

x_array =sess.run(x_vals)

plt.plot(x_array, l2_y_out, 'b-

', label='

l2 loss')

plt.plot(x_array, l1_y_out,

'r--

', label='

l1 loss')

plt.plot(x_array, phuber1_y_out,

'k-.

', label='

p-huber loss (0.25)')

plt.plot(x_array, phuber2_y_out, 'g:

', label='

p-huber loss (5.0)')

plt.ylim(-0.2, 0.4

)plt.legend(loc='

lower right

', prop=)

plt.show()

tensorflow高階總結

tf.concat a,b axis n 拼接 不會會產生新的維度 e.g.a.shape 4,32,8 b.shape 6,32,8 axis 0 concat.shape 10,32,8 約束 非拼接維度之間必須保持一致,否則拼接不合法。tf.stack a,b axis n 堆疊 產生新的維度...

tensorflow 資料讀取篇

最近,心血來潮搞一搞tensorflow,看著 tensorflow實戰 碼了幾個簡單的小網路,自以為蠻簡單啊,當自己開始從頭開始構建自己網路時候,就開始懷疑人生了。自己的資料讀取都是乙個大問題,今天解決了使用tensorflow讀取csv文字資料,寫到部落格做個筆記。usr bin env pyt...

tensorflow基礎使用4

非線性回歸 coding utf 8 import tensorflow as tf import numpy as np import matplotlib.pyplot as plt 使用numpy生成200個隨機點 x data np.linspace 0.5,0.5,200 np.newax...