github:https://github.com/dragen1860/Deep-Learning-with-TensorFlow-book
1、數(shù)據(jù)類型
x = tf.constant([[3,2],[3,4],[3,4]]) #?constant:不可變常量?3行2列?
print(type(x.shape))? ?#<class 'tensorflow.python.framework.tensor_shape.TensorShape'>
print(x.shape)? #?(3, 2)? ??3行2列
print(x.shape[0],x.shape[1], x.shape[-1], x.shape[-2]? ) # 3 2 2 3? ?x.shape[0]:行數(shù)疯潭;x.shape[1]:列數(shù)坝锰;x.shape[-1]:列數(shù)
2笋额、待優(yōu)化張量 - Variable
用來(lái)定義:要計(jì)算梯度并優(yōu)化的張量(屬于一種特殊的張量)淋纲,如神經(jīng)網(wǎng)絡(luò)層的W和??啄巧。默認(rèn)屬性trainable=true(啟動(dòng)張量?jī)?yōu)化)
v=tf.Variable([[1,2,3],[3,4,5]])? #?shape=(2, 3)? 2行3列??
3涮总、創(chuàng)建張量
Numpy類型轉(zhuǎn)tensor類型
a=tf.convert_to_tensor(np.array([[1,2.],[3,4]]))
創(chuàng)建全 0济瓢,全 1 張量
a =tf.fill([2,3],1) #?tf.Tensor( [[1 1 1] [1 1 1]], shape=(2, 3), dtype=int32),value值決定類型妹卿。包含tf.zeros、tf.ones的賦值
b =tf.zeros([2,3],dtype=tf.dtypes.float32)?#?全 0 張量, 值默認(rèn)float32類型
b =tf.ones([2,3],dtype=tf.dtypes.float32)? ?# 全 1 張量, 值默認(rèn)float32類型
創(chuàng)建正態(tài)分布和均勻分布 張量
正態(tài)分布張量
通過(guò) tf.random.normal(shape, mean=0.0, stddev=1.0)可以創(chuàng)建形狀為 shape蔑鹦,均值為mean夺克,標(biāo)準(zhǔn)差為 stddev 的正態(tài)分布??(????????, ????????????2)。例如:
創(chuàng)建均值為 0嚎朽,標(biāo)準(zhǔn)差為 1的正太分布:a=tf.random.normal([2,3])
創(chuàng)建均值為 1铺纽,標(biāo)準(zhǔn)差為 2 的正太分布:a=tf.random.normal([2,2], mean=1,stddev=2)
tf.random.truncated_normal([784, 256])? 正態(tài)分布取值會(huì)在區(qū)間(μ-2σ,μ+2σ)內(nèi)哟忍,否則重新取值
均勻分布?張量
創(chuàng)建采樣自[????????????, ????????????]區(qū)間的均勻分布的張量狡门。例如
創(chuàng)建采樣自區(qū)間[0,1]陷寝,shape 為[2,2]的矩陣:tf.random.uniform([2,2])
創(chuàng)建采樣自區(qū)間[0,10],shape 為[2,2]的矩陣: tf.random.uniform([2,2],maxval=10)
創(chuàng)建序列張量
tf.range(limit, delta=1)可以創(chuàng)建[0,??????????)之間其馏,步長(zhǎng)為 delta 的整形序列凤跑,不包含 limit 本身
例如,創(chuàng)建 0~9叛复,步長(zhǎng)為 1 的整形序列:?
a=tf.range(10)? # tf.Tensor([0 1 2 3 4 5 6 7 8 9], shape=(10,), dtype=int32)
向量
Dense全連接層創(chuàng)建
fc = layers.Dense(3) # 創(chuàng)建一層 Wx+b仔引,輸出節(jié)點(diǎn)為 3
# 通過(guò) build 函數(shù)創(chuàng)建 W,b 張量,輸入節(jié)點(diǎn)為 4
fc.build(input_shape=(2,4))
print(fc.kernel) # W? ?shape=(4, 3)? ?4行3列向量?
print(fc.bias)? # 查看偏置b??shape=(3,)
索引與切片
x = tf.random.normal([4,32,32,3])
print(x[0])? ?#? shape=(32, 32, 3)
start: end: step切片的簡(jiǎn)寫方式褐奥,其中從第一個(gè)元素讀取時(shí) start 可以省略咖耘,即 start=0 是可以省略,取到最后一個(gè)元素時(shí) end 可以省略撬码,步長(zhǎng)為 1 時(shí) step 可以省略
以 shape 為[4,32,32,3]的圖片張量為例, 讀取第 2,3 張圖片:? x[1:3]? ?# shape=(2, 32, 32, 3)
2儿倒、維度變換Reshape
x=tf.range(96)? # shape=(96,)
y= tf.reshape(x,[2,4,4,3]),過(guò)張量的 ndim 和 shape 成員屬性獲得張量的維度數(shù)和形狀: x.ndim, x.shape? #??(4, TensorShape([2, 4, 4, 3]))
tf.reshape(x, new_shape)呜笑,將張量的視圖任意的合法改變夫否。其中的參數(shù)-1 表示當(dāng)前軸上長(zhǎng)度需要根據(jù)視圖總元素不變的法則自動(dòng)計(jì)算
tf.reshape(x,[2,-1,3])? # x總共有96個(gè)元素,? 96/(2*3)=16蹈垢,即-1位置應(yīng)該對(duì)應(yīng)16個(gè)元素慷吊,所以? shape=(2, 16, 3)
# x [b, 28, 28] => [b, 28*28]
x = tf.reshape(x, [-1, 28*28])
維度增(expand_dims)刪 (squeeze)
x = tf.random.uniform([28,28],maxval=10,dtype=tf.int32)? #?x.ndim=2 ,? ? x.shape=(28, 28)?
通過(guò) tf.expand_dims(x, axis)可在指定的 axis 軸插入一個(gè)新的維度(插入新維度原始數(shù)據(jù)不會(huì)變):
y = tf.expand_dims(x,axis=0)???# y.ndim=3 曹抬,? ??y.shape=(1, 28, 28)? ?在第0維度上插入一維
y = tf.expand_dims(x,axis=2)???# y.ndim=3 溉瓶,? ??y.shape=(28, 28, 1)? ?在第2維度上插入一維
y = tf.squeeze(y, axis=0)? # y.ndim=2 ,? ??y.shape=(28, 28)? ?只能刪除長(zhǎng)度為 1 的維度(數(shù)據(jù)縮小一維)谤民, 不會(huì)改變張量的存儲(chǔ)堰酿。如果不指定axis參數(shù),刪除所有長(zhǎng)度為 1 的維度张足。
數(shù)據(jù)復(fù)制和Broadcasting廣播機(jī)制(自動(dòng)擴(kuò)展)
b = tf.constant([1,2])? #??x.ndim=1 触创, tf.Tensor([1 2], shape=(2,), dtype=int32)
b = tf.expand_dims(b, axis=0)??#x.ndim=2 , tf.Tensor([[1 2]], shape=(1, 2), dtype=int32)
c = tf.tile(b,multiples=[2,1])???#x.ndim=2 为牍,tf.Tensor([[1 2][1 2]], shape=(2, 2), dtype=int32)
操作符+在遇到 shape 不一致的 2 個(gè)張量時(shí)哼绑,會(huì)自動(dòng)考慮將 2 個(gè)張量Broadcasting 到一致的 shape, 它調(diào)用 Broadcasting函數(shù) tf.broadcast_to(x, new_shape)實(shí)現(xiàn)碉咆。
x = tf.random.normal([2,4])
w = tf.random.normal([4,3])
b = tf.random.normal([3])
y = x@w+b? ?---->?y = x@w + tf.broadcast_to(b,[2,3])? ?#?列數(shù)不變抖韩,行數(shù)復(fù)制擴(kuò)充。
數(shù)學(xué)運(yùn)算
加(tf.add +)減(tf.subtract -)乘(tf.multiply *)除(tf.divide /)整除(//)余除(%)
乘方( tf.pow(x, a) 或?? ?? ???)
x = tf.range(4)? ?#??tf.Tensor([0 1 2 3], shape=(4,), dtype=int32)
tf.pow(x,3)? ?#??tf.Tensor([ 0 1 8 27], shape=(4,), dtype=int32)
y = tf.square(x) #?平方
z=tf.sqrt(x)? ?#?平方根
指數(shù)(tf.pow(x, a) 或?? ?? ???)對(duì)數(shù)
自然指數(shù) 可以通過(guò) tf.exp(x)實(shí)現(xiàn)疫铜,自然對(duì)數(shù)l g?? ??可以通過(guò) tf.math.log(x)實(shí)現(xiàn)
x=tf.exp(3.)? #??tf.Tensor(20.085537, shape=(), dtype=float32)
y=tf.math.log(x)? #??tf.Tensor(3.0, shape=(), dtype=float32)
矩陣相乘(tf.multiply *)
a 和 b 能夠矩陣相乘的條件是茂浮,a 的倒數(shù)第一個(gè)維度長(zhǎng)度(列)和b 的倒數(shù)第二個(gè)維度長(zhǎng)度(行)必須相等(b最后一維是輸出維數(shù))
多層神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn):https://github.com/jianjunyue/deepplus/blob/master/tensorflow/%E5%A4%9A%E5%B1%82%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C.py
TensorFlow 進(jìn)階
合并(tf.concat) 堆疊(tf.stack) 分割( tf.split )
a = tf.random.normal([4,35,8]) # 模擬成績(jī)冊(cè) A
b = tf.random.normal([6,35,8]) # 模擬成績(jī)冊(cè) B
tf.concat([a,b],axis=0) # 合并成績(jī)冊(cè)?axis=0 表示在第一維上進(jìn)行合并,剩下其它維shape要相同
a = tf.random.normal([35,8])
b = tf.random.normal([35,8])
tf.stack([a,b],axis=0) # 堆疊合并為 2 個(gè)班級(jí)??axis=0 表示在第一維前面增加一維,要堆疊的a席揽、b的shape要相同
?分割(?tf.split?)
x = tf.random.normal([10,35,8])
result = tf.split(x,axis=0,num_or_size_splits=10)? ?#??print(type(result)) -->?<class 'list'> ;?print(result[0].shape)-->??(1, 35, 8)
result = tf.split(x,axis=0,num_or_size_splits=[4,2,2,2])? #?print(result[0].shape)-->??(4, 35, 8)
result = tf.unstack(x,axis=0)# Unstack 為長(zhǎng)度為 1??result[0].shape-->?(35, 8)??unstack與split區(qū)別是分割后顽馋,維度沒(méi)有了
向量范數(shù)
x = tf.ones([2,2])
tf.norm(x,ord=1) # 計(jì)算 L1 范數(shù) ,?L1 范數(shù)幌羞,定義為向量??的所有元素絕對(duì)值之和
tf.norm(x,ord=2) # 計(jì)算 L2 范數(shù) 寸谜,?L2 范數(shù),定義為向量??的所有元素的平方和新翎,再開(kāi)根號(hào)
tf.norm(x,ord=np.inf) # 計(jì)算∞范數(shù)? ∞ ?范數(shù)程帕,定義為向量??的所有元素絕對(duì)值的最大值
最大值(reduce_max)、最小值(reduce_min)地啰、均值(reduce_mean)愁拭、和(reduce_sum?)
通過(guò) tf.reduce_max, tf.reduce_min, tf.reduce_mean, tf.reduce_sum 可以求解張量在某個(gè)維度上的最大、最小亏吝、均值岭埠、和,也可以求全局最大蔚鸥、最小惜论、均值、和信息止喷。
x = tf.random.normal([4,10])
tf.reduce_max(x,axis=1) # 統(tǒng)計(jì)第2維上的最大值
tf.reduce_min(x,axis=1) # 統(tǒng)計(jì)第2維上的最小值
tf.reduce_mean(x,axis=1) # 統(tǒng)計(jì)第2維上的均值
當(dāng)不指定 axis 參數(shù)時(shí)馆类,tf.reduce_*函數(shù)會(huì)求解出全局元素的最大、最小弹谁、均值乾巧、和
out = tf.random.normal([2,10])
max=tf.reduce_max(out,axis=1)# 返回第一維概率最大的值? tf.Tensor([1.1277846 0.40908417], shape=(2,), dtype=float32)? ?,?1.1277846 --> 7位置值预愤,0.40908417?--> 4位置值
pred = tf.argmax(out,axis=1)# 返回第一維概率最大值的位置?tf.Tensor([7 4], shape=(2,), dtype=int64)
argmin = tf.argmin(out,axis=1)# 返回第一維概率最小值的位置?tf.Tensor([3 8], shape=(2,), dtype=int64)
out = tf.random.normal([4,10])# 網(wǎng)絡(luò)預(yù)測(cè)輸出
y = tf.constant([1,2,2,0])# 真實(shí)標(biāo)簽
y = tf.one_hot(y,depth=10)# one-hot 編碼
loss = tf.keras.losses.mse(y,out) # 計(jì)算每個(gè)樣本的誤差?tf.Tensor([0.7126961 0.79759413 0.5432343 0.9807483 ], shape=(4,), dtype=float32)
loss1 = tf.reduce_mean(loss) # 平均誤差??tf.Tensor(0.75856817, shape=(), dtype=float32)
out = tf.nn.softmax(out, axis=1) # 輸出轉(zhuǎn)換為概率 ?
loss =tf.keras.losses.mse(y,out) # 計(jì)算每個(gè)樣本的誤差 ?
---------------------------------------------------
a=tf.random.uniform([2,5],maxval=5,dtype=tf.int32)? # tf.Tensor([[0 4 1 4 0][2 4 2 1 3]], shape=(2, 5), dtype=int32)
b=tf.random.uniform([2,5],maxval=5,dtype=tf.int32) #tf.Tensor([[0 0 1 4 0][2 4 4 4 2]], shape=(2, 5), dtype=int32)
c=tf.equal(a,b) # 特征值是否相等? tf.Tensor([[ True False? True? True? True][ True? True False False False]], shape=(2, 5), dtype=bool)
d = tf.cast(c,dtype=tf.float32) # 布爾型轉(zhuǎn) int 型沟于!? tf.Tensor([[1. 0. 1. 1. 1.][1. 1. 0. 0. 0.]], shape=(2, 5), dtype=float32)
e=tf.reduce_sum(d,axis=1)? #? 第二維求和? tf.Tensor([4. 2.], shape=(2,), dtype=float32)
f=tf.reduce_sum(d) # 求總和 tf.Tensor(6.0, shape=(), dtype=float32)
常見(jiàn)大小比較函數(shù):
g=tf.math.greater(a,b)? # a>b 為true tf.Tensor([[False False? True False False][False? True? True? True False]], shape=(2, 5), dtype=bool)
m=tf.math.greater_equal(a,b)?# a>=b 為true
h=tf.math.less(a,b)?? # a<b 為true
n=tf.math.less_equal(a,b)??? # a<=b 為true
l=tf.math.not_equal(a,b)?? # a不等于b 為true
t=tf.math.is_nan(a)? # a=nan? ?為true
---------------------------------------------------?
填充?tf.pad(x, paddings)函數(shù)
b = tf.constant([1,2,3,4]) # 0維數(shù)據(jù)? shape:(4,)
p = tf.constant([[1,3]]) #???shape:(1, 2)
c = tf.pad(b, p)? #?一維數(shù)據(jù) 的 pad填充 ,tf.Tensor([0 1 2 3 4 0 0 0], shape=(8,), dtype=int32)植康,分別在左(1)右(3)填充
b = tf.constant([[1,2,3,4]])??# 一維數(shù)據(jù)?shape:?(1, 4)
p = tf.constant([[1,3],[1,2]])??#???shape:(2, 2)
c = tf.pad(b, p)# 填充?tf.Tensor([[0 0 0 0 0 0 0][0 1 2 3 4 0 0][0 0 0 0 0 0 0][0 0 0 0 0 0 0][0 0 0 0 0 0 0]], shape=(5, 7), dtype=int32)? ? ?分別在上(1)下(3)左(1)右(2)填充
b = tf.constant([[1,3],[1,2]])??#?二維數(shù)據(jù)????shape:(2, 2)
p = tf.constant([[1,3],[1,2]])??#???shape:(2, 2)
c = tf.pad(b, p)# 填充?tf.Tensor([[0 0 0 0 0][0 1 3 0 0][0 1 2 0 0][0 0 0 0 0][0 0 0 0 0][0 0 0 0 0]], shape=(6, 5), dtype=int32)?? ? ?分別在上(1)下(3)左(1)右(2)填充
復(fù)制(tf.tile)
x = tf.random.normal([4,32,32,3])
y=tf.tile(x,[2,3,3,1]) # 數(shù)據(jù)復(fù)制? y.shape:(8, 96, 96, 3)旷太,對(duì)應(yīng)維度進(jìn)行倍數(shù)復(fù)制
數(shù)據(jù)限幅--下限幅tf.maximum(x,a)? 上限幅tf.minimum(x,a)?
x=tf.range(10)? #?tf.Tensor([0 1 2 3 4 5 6 7 8 9], shape=(10,), dtype=int32)
y=tf.maximum(x,4)? #? 下限幅?tf.Tensor([4 4 4 4 4 5 6 7 8 9], shape=(10,), dtype=int32)
z=tf.minimum(x,6)? ?#?上限幅 tf.Tensor([0 1 2 3 4 5 6 6 6 6], shape=(10,), dtype=int32)
m=tf.clip_by_value(x,4,6)? #?下限幅 和?上限幅 ?tf.Tensor([4 4 4 4 4 5 6 6 6 6], shape=(10,), dtype=int32)
收集tf.gather
x = tf.random.uniform([4,35,8],maxval=100,dtype=tf.int32)# 4 個(gè)班級(jí),每個(gè)班級(jí) 35 個(gè)學(xué)生销睁,8 門科目供璧,保存成績(jī)冊(cè)的張量 shape 為[4,35,8]。
y=tf.gather(x,[0,1],axis=0) # 在班級(jí)維度收集第 1-2 號(hào)班級(jí)成績(jī)冊(cè) shape 為(2, 35, 8)
y=tf.gather(x,[0,1],axis=0) 等價(jià)于 切片??[: 2]冻记,但gather支持不規(guī)則索引收集
tf.gather(x,[0,3,8,11,12,26],axis=1)?# 收集第 1,4,9,12,13,27 號(hào)同學(xué)成績(jī)
多維度收集tf.gather_nd
tf.gather_nd(x,[[1,1],[2,2],[3,3]])???# 根據(jù)多維度坐標(biāo)收集數(shù)據(jù)
掩碼 tf.boolean_mask
x = tf.random.uniform([4,35,8],maxval=100,dtype=tf.int32)# 4 個(gè)班級(jí)睡毒,每個(gè)班級(jí) 35 個(gè)學(xué)生,8 門科目檩赢,保存成績(jī)冊(cè)的張量 shape 為[4,35,8]。
y=tf.boolean_mask(x,mask=[True, False,False,True],axis=0)# 根據(jù)掩碼方式采樣班級(jí)(第 1 和第 4 個(gè)班級(jí))? shape=(2, 35, 8)。掩碼的長(zhǎng)度必須與對(duì)應(yīng)維度的長(zhǎng)度一致
# tf.boolean_mask 的用法其實(shí)與 tf.gather 非常類似贞瞒,只不過(guò)一個(gè)通過(guò)掩碼方式采樣偶房,一個(gè)直接給出索引號(hào)采樣。y=tf.gather(x,[0,3],axis=0)? 和?y=tf.boolean_mask(x,mask=[True, False,False,True],axis=0) 等價(jià)
x = tf.random.uniform([2,3,8],maxval=100,dtype=tf.int32)
y=tf.boolean_mask(x,[[True,True,False],[False,True,True]])? #??shape=(4, 8)
z=tf.gather_nd(x,[[0,0],[0,1],[1,1],[1,2]])? # shape=(4, 8)? ?y和z等價(jià)军浆。收集0行0列棕洋、0行1列、1行1列乒融、1行2列
tf.where 掰盘?
tf.scatter_nd?
tf.meshgrid赞季?
六愧捕、神經(jīng)網(wǎng)絡(luò)?
6.1 激活函數(shù)
1、tf.nn.sigmoid? ?
到?? ∈ [0,1]區(qū)間申钩。?Sigmoid 函數(shù)在輸入值較大或較小時(shí)容易出現(xiàn)梯度值接 近于 0 的現(xiàn)象次绘,稱為梯度彌散現(xiàn)象
z = tf.constant([2.,1.,0.1])
y=tf.nn.sigmoid(z)? ?#?tf.Tensor([0.880797 0.7310586 0.5249792], shape=(3,), dtype=float32)
2、tf.nn.relu
ReLU(REctified Linear Unit撒遣,修正線性單元)激活函數(shù)邮偎。?? ∈ [0,x]區(qū)間。ReLU 函數(shù)在?? < 0時(shí)梯度值恒為 0义黎,也可能會(huì)造成梯度彌散現(xiàn)象
3禾进、tf.nn.leaky_relu?
tf.nn.leaky_relu(x, alpha=0.1) # 通過(guò) LeakyReLU激活函數(shù)。其中 alpha 參數(shù)即??參數(shù)
4廉涕、tf.nn.tanh
Tanh 函數(shù)能夠?qū)?? ∈ ??的輸入“壓縮”到[?1,1]區(qū)間泻云。tanh 激活函數(shù)可通過(guò) Sigmoid 函數(shù)縮放平移后實(shí)現(xiàn)
輸出函數(shù)
1、Softmax 函數(shù)
z = tf.constant([2.,1.,0.1])
tf.nn.softmax(z) # 通過(guò) Softmax 函數(shù)?tf.Tensor([0.6590012 0.24243298 0.09856589], shape=(3,), dtype=float32)? 元素和為1
6.2 誤差函數(shù)
1火的、均方差
均方差誤差(Mean Squared Error, MSE)函數(shù)把輸出向量和真實(shí)向量的兩個(gè)點(diǎn)之間的歐式距離
均方差廣泛應(yīng)用在回歸問(wèn)題中壶愤,在分類問(wèn)題中也可以應(yīng)用均方差誤差
loss = keras.losses.MSE(y_onehot, o) # 計(jì)算均方差,返回每個(gè)維度的均方差?shape=(2,)
loss = tf.reduce_mean(loss) # 計(jì)算batch均方差???shape=()
criteon = keras.losses.MeanSquaredError()?# 創(chuàng)建 MSE 類 計(jì)算均方差?
loss = criteon(y_onehot,o) # 計(jì)算 batch 均方差???shape=()
2馏鹤、交叉熵
6.3?神經(jīng)網(wǎng)絡(luò)類型
CNN(卷積神經(jīng)網(wǎng)絡(luò))征椒、RNN(循環(huán)神經(jīng)網(wǎng)絡(luò),LSTM)、DNN(深度神經(jīng)網(wǎng)絡(luò)湃累、全連接網(wǎng)絡(luò))勃救、注意力機(jī)制(Attention)網(wǎng)絡(luò)、圖神經(jīng)網(wǎng)絡(luò)(GCN)
激活函數(shù)(tf.keras.activations.*)?
tf.keras.activations.relu() relu激活函數(shù)? ?? ∈ [0,x]區(qū)間治力,適合多層網(wǎng)絡(luò)? 是tf.keras中的實(shí)現(xiàn)? --- > relu?蒙秒;tf.nn.relu是tensorflow中的實(shí)現(xiàn)? ?--->? tf.nn.leaky_relu
tf.keras.activations.tanh() tanh激活函數(shù)??? ∈ [-1,1]區(qū)間
tf.keras.activations.sigmoid() sigmoid激活函數(shù)???? ∈ [0,1]區(qū)間,適合淺層網(wǎng)絡(luò)宵统,多層容易出現(xiàn)梯度彌散現(xiàn)象
tf.keras.activations.softmax() softmax激活函數(shù)
tf.keras.activations.elu()指數(shù)線性激活函數(shù)
tf.keras.activations.hard_sigmoid() Hard sigmoid激活函數(shù)
tf.keras.activations.exponential()指數(shù)激活函數(shù)
tf.keras.activations.linear()線性激活函數(shù)
tf.keras.activations.selu() selu激活函數(shù)
tf.keras.activations.softplus() softplus激活函數(shù)
tf.keras.activations.softsign() softsign激活函數(shù)
損失函數(shù)(tf.keras.losses.*) 或
tf.keras.losses.categorical_crossentropy # -->?categorical_crossentropy (多分類的對(duì)數(shù)損失函數(shù),交叉熵),與 softmax 相對(duì)應(yīng)的損失函數(shù)晕讲,針對(duì)于多分類問(wèn)題。對(duì)應(yīng)評(píng)價(jià)函數(shù):keras.metrics.categorical_crossentropy
tf.keras.losses.binary_crossentropy # --> binary_crossentropy(對(duì)數(shù)損失函數(shù),交叉熵),即 log loss,與 sigmoid 相對(duì)應(yīng)的損失函數(shù)瓢省,針對(duì)于二分類問(wèn)題弄息。??對(duì)應(yīng)評(píng)價(jià)函數(shù):keras.metrics.binary_crossentropy。
如果使用的是類勤婚,那么別忘了后面呢還有一個(gè)括號(hào)摹量,用來(lái)得到實(shí)例化的對(duì)象;如果是函數(shù)就只寫函數(shù)名就可以了馒胆。tf.keras.losses.CategoricalCrossentropy()? -->?tf.keras.losses.categorical_crossentropy -->?categorical_crossentropy 缨称。
不管是BinaryCrossentropy還是CategoricalCrossentropy,其實(shí)兩者都可以用于二分類或者多分類祝迂,沒(méi)有那么明顯的界線睦尽,后者是在前者的基礎(chǔ)上進(jìn)行擴(kuò)展得來(lái)的。但是一般情況下都是按照上述例子中的默認(rèn)用法進(jìn)行使用的液兽。?
tf.keras.losses.sparse_categorical_crossentropy # (稀疏性多分類的對(duì)數(shù)損失函數(shù),交叉熵) 在上面的多分類的對(duì)數(shù)損失函數(shù)的基礎(chǔ)上骂删,增加了稀疏性(即數(shù)據(jù)中多包含一定0數(shù)據(jù)的數(shù)據(jù)集)?對(duì)應(yīng)評(píng)價(jià)函數(shù):keras.metrics.sparse_categorical_crossentropy
tf.keras.losses.mean_squared_error? ?--> mean_squared_error或mse(均方誤差)等價(jià)?keras.losses.mse,keras.losses.MSE四啰,tf.keras.losses.MeanSquaredError宁玫。對(duì)應(yīng)評(píng)價(jià)函數(shù):keras.metrics.mean_squared_error,keras.metrics.mse柑晒,keras.metrics.MSE
tf.keras.losses.mean_absolute_error??-->?mean_absolute_error??欧瘪,mae (平均絕對(duì)值誤差)等價(jià)?keras.losses.mae,keras.losses.MAE匙赞,tf.keras.losses.MeanAbsoluteError佛掖。對(duì)應(yīng)評(píng)價(jià)函數(shù):keras.metrics.mean_absolute_error,keras.metrics.mae涌庭,keras.metrics.MAE
tf.keras.losses.mean_absolute_percentage_error --->??mean_absolute_percentage_error或mape芥被。等價(jià)?keras.losses.mape,keras.losses.MAPE坐榆。對(duì)應(yīng)評(píng)價(jià)函數(shù):keras.metrics.mean_absolute_percentage_error拴魄,keras.metrics.mape,keras.metrics.MAPE
tf.keras.losses.mean_squared_logarithmic_error?? --->? mean_squared_logarithmic_error或msle席镀。 等價(jià)??keras.losses.msle匹中,keras.losses.MSLE。對(duì)應(yīng)評(píng)價(jià)函數(shù):keras.metrics.mean_squared_logarithmic_error豪诲,keras.metrics.msle顶捷,keras.metrics.MSLE
tf.keras.losses.squared_hinge??對(duì)應(yīng)評(píng)價(jià)函數(shù):keras.metrics.squared_hinge
tf.keras.losses.hinge????對(duì)應(yīng)評(píng)價(jià)函數(shù):keras.metrics.hinge
tf.keras.losses.kullback_leibler_divergence??????等價(jià)??keras.losses.kld,keras.losses.KLD屎篱。???對(duì)應(yīng)評(píng)價(jià)函數(shù):keras.metrics.kullback_leibler_divergence服赎,keras.metrics.kld葵蒂,keras.metrics.KLD
tf.keras.losses.poisson???對(duì)應(yīng)評(píng)價(jià)函數(shù):keras.metrics.poisson
tf.keras.losses.cosine_similarity??????等價(jià)?keras.losses.cosine_proximity,keras.losses.cosine重虑。???對(duì)應(yīng)評(píng)價(jià)函數(shù):keras.metrics.cosine_proximity刹勃,keras.metrics.cosine
tf.keras.losses.logcosh???對(duì)應(yīng)評(píng)價(jià)函數(shù):keras.losses.logcosh
tf.keras.losses.categorical_hinge???對(duì)應(yīng)評(píng)價(jià)函數(shù):keras.losses.categorical_hinge
優(yōu)化器(tf.keras.optimizers.*)?
tf.keras.optimizers.RMSprop? --> RMSprop
tf.keras.optimizers.SGD? -->? ?SGD 、sgd
tf.keras.optimizers.Adam
tf.keras.optimizers.Adadelta
tf.keras.optimizers.Adagrad
tf.keras.optimizers.Adamax
tf.keras.optimizers.Ftrl
tf.keras.optimizers.Nadam
評(píng)價(jià)函數(shù)(metrics)?
tf.keras.metrics.Accuracy? ? --> accuracy
tf.keras.metrics.BinaryAccuracy? --> binary_accuracy
tf.keras.metrics.BinaryCrossentropy -->?binary_crossentropy
tf.keras.metrics.CategoricalAccuracy? -->?categorical_accuracy
tf.keras.metrics.CategoricalCrossentropy -->?categorical_crossentropy
tf.keras.metrics.SparseCategoricalAccuracy -->?sparse_categorical_accuracy
tf.keras.metrics.SparseCategoricalCrossentropy -->?sparse_categorical_crossentropy
正則化?
https://mp.weixin.qq.com/s/qVGd7vfhEcchOuYp8IN6Rw
dropout?
# 添加 dropout 操作
x = tf.nn.dropout(x, rate=0.5)
# 添加 Dropout 層
model.add(layers.Dropout(rate=0.5))
隨機(jī)打散通
Dataset.shuffle(buffer_size)