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,這一步通常是求取輸出屬於某一類的概率,對於單樣本而言,輸出就是一個
大小的向量([Y1,Y2,Y3...]其中Y1,Y2,Y3...分別代表了是屬於該類的概率)num_classes
softmax的公式是:
至於為什麼是用的這個公式?這裡不介紹了,涉及到比較多的理論證明
第二步是
softmax的輸出向量[Y1,Y2,Y3...]和樣本的實際標籤做一個交叉熵,公式如下:
其中指代實際的標籤中第i個的值(用mnist資料舉例,如果是3,那麼標籤是[0,0,0,1,0,0,0,0,0,0],除了第4個值為1,其他全為0)
就是
中,第i個元素的值softmax的輸出向量[Y1,Y2,Y3...]
顯而易見,預測越準確,結果的值越小(別忘了前面還有負號),最後求一個平均,得到我們想要的loss
注意!!!這個函式的返回值並不是一個數,而是一個向量,如果要求交叉熵,我們要再做一步tf.reduce_sum操作,就是對向量裡面所有元素求和,最後才得到,如果求loss,則要做一步
tf.reduce_mean操作,對向量求均值!