激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - 淺談tensorflow中張量的提取值和賦值

淺談tensorflow中張量的提取值和賦值

2020-04-12 13:06信道者 Python

今天小編就為大家分享一篇淺談tensorflow中張量的提取值和賦值,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

tf.gather和gather_nd從params中收集數值,tf.scatter_nd 和 tf.scatter_nd_update用updates更新某一張量。嚴格上說,tf.gather_nd和tf.scatter_nd_update互為逆操作。

已知數值的位置,從張量中提取數值:tf.gather, tf.gather_nd

tf.gather indices每個元素(標量)是params某個axis的索引,tf.gather_nd 中indices最后一個階對應于索引值。

tf.gather函數

函數原型

?
1
2
3
4
5
6
7
gather(
 params,
 indices,
 validate_indices=None,
 name=None,
 axis=0
)

params是要查找的張量,indices是要查找值的索引(int32或int64),axis是查找軸,name是操作名。

如果indices是標量

淺談tensorflow中張量的提取值和賦值

如果indices是向量

淺談tensorflow中張量的提取值和賦值

如果indices是高階張量

淺談tensorflow中張量的提取值和賦值

返回值:

該函數返回值類型與params相同,具體值是從params中收集過來的,形狀為

淺談tensorflow中張量的提取值和賦值

tf.gather_nd函數

函數原型

?
1
2
3
4
5
gather_nd(
 params,
 indices,
 name=None
)

indices是K階張量,包含K-1階的索引值。它最后一階是索引,最后一階維度必須小于等于params的秩。indices最后一階的維數等于params的秩時,我們得到params的某些元素;indices最后一階的維數小于params的秩時,我們得到params的切片。

淺談tensorflow中張量的提取值和賦值

輸出張量的形狀由indices的K-1階和params索引到的形狀拼接而成,如下面

?
1
indices.shape[:-1] + params.shape[indices.shape[-1]:]

參數:

params:被收集的張量。

indices:索引張量。必須是以下類型之一:int32,int64。

name:操作的名稱(可選)。

返回值:

該函數返回一個張量.與params具有相同的類型。張量值從indices所給定的索引中收集,并且具有這樣的形狀:

淺談tensorflow中張量的提取值和賦值

已知賦值的位置,向張量賦值:tf.scatter_nd, tf.scatter_nd_update

tf.scatter_nd對零張量進行賦值,tf.scatter_nd_update對已有可變的張量進行賦值。

?
1
2
3
4
5
6
7
tf.scatter_nd函數
scatter_nd(
 indices,
 updates,
 shape,
 name=None
)

創建一個形狀為shape的零張量,將updates賦值到indices指定的位置。

indices是整數張量,最內部維度對應于索引。

?
1
indices.shape[-1] <= shape.rank

如果indices.shape[-1] = shape.rank,那么indices直接對應到新張量的單個元素。如果indices.shape[-1] < shape.rank,那么indices中每個元素對新張量做切片操作。updates的形狀應該如下所示

?
1
indices.shape[:-1] + shape[indices.shape[-1]:]

如果我們要把形狀為(4,)的updates賦值給形狀為(8,)的零張量,如下圖所示。

淺談tensorflow中張量的提取值和賦值

我們需要這樣子做

?
1
2
3
4
5
6
indices = tf.constant([[4], [3], [1], [7]])
updates = tf.constant([9, 10, 11, 12])
shape = tf.constant([8])
scatter = tf.scatter_nd(indices, updates, shape)
with tf.Session() as sess:
 print(sess.run(scatter))

我們得到這樣子的張量

?
1
[0, 11, 0, 10, 9, 0, 0, 12]

上面代碼中,indices的形狀是(4,1),updates的形狀是(4,),shape的形狀是(8,)。

?
1
indices.shape[:-1]+shape[indices.shape[-1]:] = (4,)+(,)=(4,)

如果我們要在三階張量中插入兩個切片,如下圖所示,則應該像下面代碼里所說的那樣子做。

淺談tensorflow中張量的提取值和賦值

?
1
2
3
4
5
6
7
8
9
indices = tf.constant([[0], [2]])
updates = tf.constant([[[5, 5, 5, 5], [6, 6, 6, 6],
   [7, 7, 7, 7], [8, 8, 8, 8]],
   [[5, 5, 5, 5], [6, 6, 6, 6],
   [7, 7, 7, 7], [8, 8, 8, 8]]])
shape = tf.constant([4, 4, 4])
scatter = tf.scatter_nd(indices, updates, shape)
with tf.Session() as sess:
 print(sess.run(scatter))

indices的形狀是(2,1),updates的形狀是(2,4,4),shape的形狀是(4,4,4)。

?
1
indices.shape[:-1]+shape[indices.shape[-1]:]=(2,)+(4,4)=(2,4,4)

我們會得到這樣子的張量

?
1
2
3
4
[[[5, 5, 5, 5], [6, 6, 6, 6], [7, 7, 7, 7], [8, 8, 8, 8]],
 [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]],
 [[5, 5, 5, 5], [6, 6, 6, 6], [7, 7, 7, 7], [8, 8, 8, 8]],
 [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]]

函數參數

indices:Tensor;必須是以下類型之一:int32,int64;索引值張量。

updates:Tensor;分散到輸出的更新。

shape:Tensor;必須與indices具有相同的類型;1-d;得到的張量的形狀。

name:操作的名稱(可選)。

返回值

此函數返回一個Tensor,它與updates有相同的類型;一個有shape形狀的新張量,初始化值為0,部分值根據indices用updates進行更新。

tf.scatter_nd_update函數

函數原型

?
1
2
3
4
5
6
7
scatter_nd_update(
 ref,
 indices,
 updates,
 use_locking=True,
 name=None
)

scatter_nd_update也是把updates里面的值根據indices賦值到另外一個張量中,與scatter_nd不同的是,它是賦值到ref。

ref是秩為P的張量,indices是秩為Q的張量。

indices是整數類型的張量,必須具有這樣的形狀淺談tensorflow中張量的提取值和賦值 。

indices最內部的維度對應于ref的某個元素或切片。

updates的形狀是淺談tensorflow中張量的提取值和賦值 ,是秩為Q-1+P-K的張量。

如果我們想要把(4,)的向量賦值到(8,)的ref中,我們可以像下面這樣子操作。

?
1
2
3
4
5
6
ref = tf.Variable([1, 2, 3, 4, 5, 6, 7, 8])
indices = tf.constant([[4], [3], [1] ,[7]])
updates = tf.constant([9, 10, 11, 12])
update = tf.scatter_nd_update(ref, indices, updates)
with tf.Session() as sess:
 print sess.run(update)

我們可以得到這樣的ref

?
1
[1, 11, 3, 10, 9, 6, 7, 12]

函數參數

ref:一個可變的Tensor。

indices:一個 int32 或 int64 Tensor;一個對ref進行索引的張量.

updates:一個Tensor.必須與ref具有相同的類型;更新值張量.

use_locking:可選的bool;如果為True,則賦值將受鎖定的保護;否則行為是不確定的,但可能表現出較少的爭用.

name:操作的名稱(可選).

返回值:

經過更新的ref。

以上這篇淺談tensorflow中張量的提取值和賦值就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/chr1991/article/details/93474638

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 亚洲情视频 | h视频免费观看 | 奶子吧naiziba.cc免费午夜片在线观看 | 国内精品国产三级国产a久久 | 在线成人免费网站 | 水卜樱一区二区av | 中文字幕专区高清在线观看 | 国产成人在线免费观看视频 | 久久久久久久久久亚洲 | 国产毛毛片一区二区三区四区 | 国产成人av免费观看 | 日本残忍极度灌浣肠视频 | 久久经典免费视频 | 欧美激情 在线播放 | 精品久久久久久成人av | 欧美69free性videos | 国产一区免费在线 | 99在线在线视频免费视频观看 | 国产在线观看免费视频软件 | 狠狠干最新网址 | 激情视频免费观看 | 久久99精品久久久久久园产越南 | 56av国产精品久久久久久久 | 黑人日比 | 新久草在线视频 | 亚洲va在线 | 激情影院在线观看 | 91精品国产91| 久久国产精品久久精品国产演员表 | 成人永久免费视频 | 国产精品色在线网站 | 日本网站一区 | 成人毛片在线 | 国产在线播放91 | 成年人激情在线 | 国产亚洲综合一区二区 | 一级毛片免费大片 | 色柚视频网站ww色 | 精品国产一区二区三区久久久蜜月 | 国产精品入口夜色视频大尺度 | 免费看日韩av |