1. 程式人生 > >tensorflow相關函式___tf.layers.dense(), tf.nn.softmax_cross_entropy_with_logits_v2

tensorflow相關函式___tf.layers.dense(), tf.nn.softmax_cross_entropy_with_logits_v2

dense :全連線層  相當於新增一個層

函式如下:

tf.layers.dense(

    inputs,

    units,

    activation=None,

    use_bias=True,

    kernel_initializer=None,  ##卷積核的初始化器

    bias_initializer=tf.zeros_initializer(),  ##偏置項的初始化器,預設初始化為0

    kernel_regularizer=None,    ##卷積核的正則化,可選

    bias_regularizer=None,    ##偏置項的正則化,可選

    activity_regularizer=None,   ##輸出的正則化函式

    kernel_constraint=None,   

    bias_constraint=None,

    trainable=True,

    name=None,  ##層的名字

    reuse=None  ##是否重複使用引數

)

 

部分引數解釋:

inputs:輸入該網路層的資料

units:輸出的維度大小,改變inputs的最後一維

activation:啟用函式,即神經網路的非線性變化

use_bias:使用bias為True(預設使用),不用bias改成False即可,是否使用偏置項

trainable=True:表明該層的引數是否參與訓練。如果為真則變數加入到圖集合中

 GraphKeys.TRAINABLE_VARIABLES (see tf.Variable)

 

 

tf.nn.softmax_cross_entropy_with_logits

【TensorFlow】tf.nn.softmax_cross_entropy_with_logits的用法

from:https://blog.csdn.net/mao_xiao_feng/article/details/53382790

 

在計算loss的時候,最常見的一句話就是tf.nn.softmax_cross_entropy_with_logits,那麼它到底是怎麼做的呢?

首先明確一點,loss是代價值,也就是我們要最小化的值

tf.nn.softmax_cross_entropy_with_logits(logits, labels, name=None)

除去name引數用以指定該操作的name,與方法有關的一共兩個引數

第一個引數logits:就是神經網路最後一層的輸出,如果有batch的話,它的大小就是[batchsize,num_classes],單樣本的話,大小就是num_classes

第二個引數labels:實際的標籤,大小同上

 

具體的執行流程大概分為兩步:

第一步是先對網路最後一層的輸出做一個softmax,這一步通常是求取輸出屬於某一類的概率,對於單樣本而言,輸出就是一個num_classes大小的向量([Y1,Y2,Y3...]其中Y1,Y2,Y3...分別代表了是屬於該類的概率)

softmax的公式是:

至於為什麼是用的這個公式?這裡不介紹了,涉及到比較多的理論證明

 

第二步是softmax的輸出向量[Y1,Y2,Y3...]和樣本的實際標籤做一個交叉熵,公式如下:

其中指代實際的標籤中第i個的值(用mnist資料舉例,如果是3,那麼標籤是[0,0,0,1,0,0,0,0,0,0],除了第4個值為1,其他全為0)

就是softmax的輸出向量[Y1,Y2,Y3...]中,第i個元素的值

顯而易見,預測越準確,結果的值越小(別忘了前面還有負號),最後求一個平均,得到我們想要的loss

注意!!!這個函式的返回值並不是一個數,而是一個向量,如果要求交叉熵,我們要再做一步tf.reduce_sum操作,就是對向量裡面所有元素求和,最後才得到,如果求loss,則要做一步tf.reduce_mean操作,對向量求均值!

 

tensorflow Optimizers