日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

【深度学习】(3) 全连接层、激活函数

發(fā)布時間:2023/11/27 生活经验 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【深度学习】(3) 全连接层、激活函数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

各位同學(xué)好,今天和大家分享一下tensorflow2.0深度學(xué)習(xí)中的相關(guān)操作。內(nèi)容有:

(1) 全連接層創(chuàng)建:?tf.keras.Sequential(),tf.keras.layers.Dense()

(2) 輸出方式:?tf.sigmoid(),tf.softmax(),tf.tanh(),tf.nn.relu(),tf.nn.leaky_relu()


1. 全連接層

全連接層在整個網(wǎng)絡(luò)卷積神經(jīng)網(wǎng)絡(luò)中起到特征提取器的作用。全連接層將學(xué)到的特征表示映射到樣本的標(biāo)記空間。

(1)在全連接層中創(chuàng)建一層:?tf.keras.layers.Dense()

units: 正整數(shù),輸出空間的維數(shù)

activation=None: 激活函數(shù),不指定則沒有

use_bias=True: 布爾值,是否使用偏移向量

kernel_initializer='glorot_uniform': 核權(quán)重矩陣的初始值設(shè)定項

bias_initializer='zeros': 偏差向量的初始值設(shè)定項

kernel_regularizer=None: 正則化函數(shù)應(yīng)用于核權(quán)矩陣

bias_regularizer=None: 應(yīng)用于偏差向量的正則化函數(shù)

kernel_constraint=None: 對權(quán)重矩陣約束

bias_constraint=None: 對偏置向量約束

(2)堆層構(gòu)建全連接層:?tf.keras.Sequential([layer1,layer2,layer3])

通過組合層來構(gòu)建模型,直接堆疊各個層


1.1 創(chuàng)建單個連接層

首先構(gòu)造一個shape為[4,478]的隨機(jī)正態(tài)分布,構(gòu)造一個連接層tf.keras.layers.Dense(),輸出512個特征,shape為[4,512]。將輸入層放入連接層自動調(diào)用build()函數(shù)創(chuàng)建權(quán)重w和偏置b,將計算結(jié)果返回給out。

# 創(chuàng)建單個連接層
import tensorflow as tf
# 構(gòu)建輸入
x = tf.random.normal([4,478])
# 輸入的shape不需要指定,可以自動的根據(jù)輸入的特征生成對應(yīng)的權(quán)值
net = tf.keras.layers.Dense(512)
# 輸出結(jié)果
out = net(x)
out.shape  # 輸出結(jié)果的shape[4,512]
net.kernel.shape # 權(quán)值W的形狀,W的shape為[478,512]
net.bias.shape # 偏置b的形狀,X的shape為[4,478]
# 調(diào)用net函數(shù)時,自動判斷,如果當(dāng)前沒有創(chuàng)建w和b,自動調(diào)用build函數(shù)

1.2 創(chuàng)建多個連接層

使用tf.keras.Sequential()堆疊構(gòu)建全連接層;使用tf.keras.layers.Dense()創(chuàng)建每一個全連接層;使用build()構(gòu)建輸入層。網(wǎng)絡(luò)結(jié)構(gòu)為[b,10]=>[b,16]=>[b,32]=>[b,8];通過summary()查看整體網(wǎng)絡(luò)架構(gòu)。通過model.trainable_variables查看網(wǎng)絡(luò)的所有的權(quán)重和偏置。

#(4)創(chuàng)建多個全連接層
# 將所有連接層組成一個列表放入
from tensorflow import keras
# 構(gòu)建全連接層
model = keras.Sequential([keras.layers.Dense(16, activation='relu'), #w的shape為[10,16],b的shape為[16],共10*16+16=176個參數(shù)  keras.layers.Dense(32, activation='relu'), #w的shape為[16,32],b的shape為[32]keras.layers.Dense(8)])  #w的shape為[32,8],b的shape為[8]model.build(input_shape=[None,10]) #輸入層10個特征
model.summary()  # 查看網(wǎng)絡(luò)結(jié)構(gòu)
# 查看網(wǎng)絡(luò)所有的權(quán)重w和偏置b
for p in model.trainable_variables:print(p.name,p.shape)

整體網(wǎng)絡(luò)構(gòu)架如下:對于第一層,w的shape為[10,16],b的shape為[16],共10*16+16=176個參數(shù) ,下面幾層的參數(shù)個數(shù)同理

Model: "sequential"
_________________________________________________________________Layer (type)                Output Shape              Param #   
=================================================================dense (Dense)               (None, 16)                176       dense_1 (Dense)             (None, 32)                544       dense_2 (Dense)             (None, 8)                 264       =================================================================
Total params: 984
Trainable params: 984
Non-trainable params: 0
_________________________________________________________________

2. 輸出映射方式

2.1 sigmoid函數(shù)

sigmoid函數(shù): tf.sigmoid(tensor)

輸出結(jié)果的范圍映射到(0,1)之間,計算公式:

sigmoid只能保證單個數(shù)值的范圍在0-1之間

a = tf.linspace(-6,6,10) #-6到6的長度為10的向量
# sigmoid函數(shù)將其映射到0-1
tf.sigmoid(a)
# 輸入數(shù)據(jù):array([-6.        , -4.66666667, -3.33333333, -2.        , -0.66666667,0.66666667,  2.        ,  3.33333333,  4.66666667,  6.   
# 輸出結(jié)果:array([0.00247262, 0.00931596, 0.0344452 , 0.11920292, 0.33924363,0.66075637, 0.88079708, 0.9655548 , 0.99068404, 0.99752738])

2.2 softmax函數(shù)

對于分類問題,需要每一個概率在0-1之間,且總的概率和為1。

softmax函數(shù):tf.softmax(logits, axis)

logits:一個非空的Tensor。必須是下列類型之一:half, float32,float64。

axis:將在其上執(zhí)行維度softmax。默認(rèn)值為-1,表示最后一個維度。

公式為:

一般將沒有加激活函數(shù)的稱為Logits,加了softmax后稱為Probabilities,經(jīng)過softmax后,有把最大值放大的過程,相當(dāng)于把強(qiáng)的變得更強(qiáng),把弱的變得更弱。

logits = tf.random.uniform([1,10],minval=-2,maxval=2)
# 使用softmax
prob = tf.nn.softmax(logits,axis=1) #對整個列表的值求softmax
# 求和
tf.reduce_sum(prob,axis=1)# logits:array([[-0.80400324,  1.1189251 ,  1.7390656 ,  0.8317995 , -1.1970901 ,-0.48806524, -1.1161256 , -0.35890388,  0.765254  , -1.8393846 ]],dtype=float32)>
# prob:array([[0.02841684, 0.19439851, 0.3614236 , 0.14588003, 0.01918051,0.03897498, 0.02079806, 0.0443486 , 0.13648833, 0.01009056]],dtype=float32)>
# sum:<tf.Tensor: shape=(1,), dtype=float32, numpy=array([1.], dtype=float32)>

2.3 tanh函數(shù)

tanh是通過sigmoid函數(shù)放大平移得到,輸出結(jié)果在(-1,1)之間

tanh函數(shù): tf.tanh(tensor)

a = tf.linspace(-2, 2, 5)  # -2到2的長度為5的向量
# 結(jié)果映射到(-1,1)
tf.tanh(a)
# 輸入:<tf.Tensor: shape=(5,), dtype=float64, numpy=array([-2., -1.,  0.,  1.,  2.])>
# 輸出:<tf.Tensor: shape=(5,), dtype=float64, numpy=array([-0.96402758, -0.76159416,  0.        ,  0.76159416,  0.96402758])>


2.4 relu函數(shù)

將輸入小于0的值都變成0,大于0的值保持不變。

relu激活函數(shù):tf.nn.relu(features)

公式為:?

# relu函數(shù),x小于0,梯度0,x大于0梯度1
a = tf.linspace(-1,1,10) # -1到1,長度為10的向量
tf.nn.relu(a)# 輸入為:array([-1.        , -0.77777778, -0.55555556, -0.33333333, -0.11111111,        0.11111111,  0.33333333,  0.55555556,  0.77777778,  1.        ])>
# 輸出為:array([0.        , 0.        , 0.        , 0.        , 0.        ,       0.11111111, 0.33333333, 0.55555556, 0.77777778, 1.        ])>

2.5?leaky_relu函數(shù)

非飽和激活函數(shù): tf.nn.leaky_relu( features, alpha=0.2 )

features: tensor類型,表示預(yù)激活值,必須是下列類型之一:float16,float32,float64,int32,int64.

alpha: x <0時激活函數(shù)的斜率.

由于relu函數(shù)對于小于0的值,這個神經(jīng)元的梯度永遠(yuǎn)都會是0,在實際操作中,如果數(shù)據(jù)很大,很可能網(wǎng)絡(luò)中較多的神經(jīng)元都死了。這時需要leaky_relu函數(shù):

公式:y = max(0, x) + leak*min(0,x)?

leak是一個很小的常數(shù),這樣保留了一些負(fù)軸的值,使得負(fù)軸的信息不會全部丟失

a = tf.linspace(-1,1,10)
# tf.nn.leaky_rulu() ,x小于0y也小于0但接近0
tf.nn.leaky_relu(a)# 輸入:array([-1.        , -0.77777778, -0.55555556, -0.33333333, -0.11111111,        0.11111111,  0.33333333,  0.55555556,  0.77777778,  1.        ])>
# 輸出:array([-0.2       , -0.15555556, -0.11111111, -0.06666667, -0.02222222,        0.11111111,  0.33333333,  0.55555556,  0.77777778,  1.        ])>

總結(jié)

以上是生活随笔為你收集整理的【深度学习】(3) 全连接层、激活函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。