1. 程式人生 > >tf.nn.sparse_softmax_cross_entropy_with_logits()的內部計算的理解

tf.nn.sparse_softmax_cross_entropy_with_logits()的內部計算的理解

探索tf.nn.sparse_softmax_cross_entropy_with_logits,def sparse_softmax_cross_entropy_with_logits(
    _sentinel=None,  # pylint: disable=invalid-name
    labels=None,
    logits=None,
    name=None):它求得是張量最後一維與標籤的交叉熵,再對最後一維求和。(其中,labels引數是一維的張量,元素是對應的索引,轉換為對應的列表再求交叉熵。比如labels是[1,2],那麼列表就是[[0,1,0],[0,0,1]]下面是labels張量的正確形式。)tf.nn.sparse_softmax_cross_entropy_with_logits(),放在圖片上,就是對一個畫素深度方向的向量,與對應的標籤做交叉熵,再求一個畫素深度方向交叉熵的和。loss值是對所有畫素點的交叉熵和取平均。一句話說,就是畫素點上求交叉熵的和, 畫素間求上一步的平均數。實驗程式碼如下:import tensorflow as tfimport numpy as npsess = tf.InteractiveSession()def index_to_list(index): list = np.zeros([2,3], dtype=int) for j in range(2): for i in range(3): if i == index[j]: list[j][i] = 1 else: list[j][i] = 0 return list# index = [1, 2]# c = index_to_list(index)# print(c)a = tf.placeholder(tf.float32, [2,3])b = tf.placeholder(tf.int64, [2])aa = [[1.0, 2.0, 3.0], [2.0, 1.0, 3.0]]bb = [2,1]cross_entropy = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(logits=a, labels=b))c = sess.run(cross_entropy, feed_dict={a:[[1.0, 2.0, 3.0], [2.0, 1.0, 3.0]], b:[2, 1]})a_softmax = tf.nn.softmax(aa)b_list = index_to_list(bb)loss = tf.reduce_mean(-tf.reduce_sum(b_list*tf.log(a_softmax), axis=1))print(sess.run(loss))print(c)sess.close()

下面是執行結果:


相關推薦

tf.nn.sparse_softmax_cross_entropy_with_logits內部計算理解

探索tf.nn.sparse_softmax_cross_entropy_with_logits,def sparse_softmax_cross_entropy_with_logits(    _sentinel=None,  # pylint: disable=inval

【TensorFlow】關於tf.nn.sparse_softmax_cross_entropy_with_logits

tf.nn.sparse_softmax_cross_entropy_with_logits()這是一個TensorFlow中經常需要用到的函式。官方文件裡面有對它詳細的說明,傳入的logits為神經網路輸出層的輸出,shape為[batch_size,num_classes

個人總結:關於tf.nn.conv2d卷積tf.nn.conv2d_transpose反捲積的區別

官網中對於卷積tf.nn.conv2d的描述 tf.nn.conv2d(     input,     filter,     strides,     padding,     use_cudn

TensorFlow函式之tf.nn.conv2d()附程式碼詳解

tf.nn.conv2d是TensorFlow裡面實現卷積的函式,是搭建卷積神經網路比較核心的一個方法。 函式格式: tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu =  Noen, name = Non

java基礎-printf語句的理解

style [] cnblogs ble bsp public line 天突 ont 對print和println的理解很簡單,今天突然接觸到printf(),有點懵,整理了下也幫自己理一理 printf是格式化輸出的形式 下在舉個例子: package o

tensorflow之tf.nn.l2_normalize與l2_loss的計算

1.tf.nn.l2_normalize   tf.nn.l2_normalize(x, dim, epsilon=1e-12, name=None)  上式:  x為輸入的向量;  dim為l2範化的維數,dim取值為0或0或1;  eps

tf.layers.Dense用法

tf.layers.Dense函式 Dense類 繼承自: Layer 定義在:tensorflow/python/layers/core.py。 密集連線(Densely-connected)層類。 該層實現了操作:outputs = activation(inputs * k

eval函式的理解

  import tensorflow as tf import numpy as np with tf.variable_scope("test1",initializer=tf.constant_initializer(0.4)): var1=tf.get_variabl

JavaScript關於exec函式的理解

exec() 方法用於檢索字串中的正則表示式的匹配。 官方說法是這樣的,但是我剛開始查的時候看了一遍有點蒙圈。 所以重新把它翻譯成人話。 exec()作用就是在字串中 用 正則 來找 匹配的字元 返回值是一個數組 , 陣列中第一個元素是匹配到的內容,第二個是

tf.nn.sparse_softmax_cross_entropy_with_logits()函式的用法

tf.nn.sparse_softmax_cross_entropy_with_logits(_sentinel=None,labels=None,logits=None,name=None) 函式

初學者對js中sort方法的理解

定義和用法 sort() 方法用於對陣列的元素進行排序。 語法 arrayObject.sort(sortby) 引數 描述 sortby 可選。規定排序順序。必須是函式。 返回值 對陣列的引用。請注意,陣列在原陣列上進行排序,不生成副本。 說明 如果

tensorflow tf.nn.softmax_cross_entropy_with_logits & tf.nn.sparse_softmax_cross_entropy_with_logits

____tz_zstf.nn.sparse_softmax_cross_entropy_with_logits.sparse_softmax_cross_entropy_with_logits( _sentinel=None, labels=None,

opencv 滑鼠響應機制 onMouse函式的理解

void onMouse(int event, int x, int y, int, void*) { if (selectObject)//只有當滑鼠左鍵按下去時才有效,然後通過if裡面程式碼就可

TensorFlow 辨異 —— tf.add(a, b) 與 a+btf.assign 與 =tf.nn.bias_add 與 tf.add

fad codes live tin csdn hat targe ops 操作 1. tf.add(a, b) 與 a+b 在神經網絡前向傳播的過程中,經常可見如下兩種形式的代碼: tf.add(tf.matmul(x, w), b) tf.matmul(x, w) +

tensorflow學習2計算圖,tf.get_default_graph(),tf.Graph()

一、基本概念 顧名思義,TensorFlow的名字已經出賣了它的“靈魂”,TensorFlow=tensor(張量)+flow(流動)。TensorFlow是一個通過計算圖的形式來表達計算的程式設計框架。其每一個計算都是計算圖上的一個節點,而節點之間的邊描述了計算之間的依賴關係。 計算圖

tensorflow學習6:CNN必備函式tf.nn.conv2d和tf.nn.max_pool

一、卷積函式tf.nn.conv2d tf.nn.conv2d( input, filter, strides, padding, use_cudnn_on_gpu=None, name=None) 除去name引數用以指定該操作的name,與方法有關的一共五個引數: 第一個引數in

分貝dB計算理解

1. 基本理解 分貝(dB,decibels)表達的是功率比(power ratio,P2/P1P_2/P_1P2​/P1​),而不是一個amount,P2>P1P_2>P_

tensorflow學習——有關tensorflow不同層的使用tf.nntf.layers以及tf.contrib.layers的簡單區別

小trick: 對於使用tf.layers建立的神經網路,如果想要對loss函式進行正則話,可以採用如下方式[1]: 但是該方法不適用於程式設計者自己定義不同層的正則化。 l2 = tf.add_n([tf.nn.l2_loss(var) for var in tf.t

轉載tf.nntf.layers, tf.contrib概述

我們在使用tensorflow時,會發現tf.nn,tf.layers, tf.contrib模組有很多功能是重複的,尤其是卷積操作,在使用的時候,我們可以根據需要現在不同的模組。但有些時候可以一起混用。        下面是對三個模組的簡

TensorFlow 學習 — 常用函式 api、tf.nntf.keras

0. 四則運算 平方:tf.square(),開方:tf.sqrt() tf.add()、tf.sub()、tf.mul()、tf.div()、tf.mod()、tf.abs()、tf.neg()