Tensorflow tensor的列操作

2022-07-07 03:54:20 字數 2254 閱讀 8911

幾個point

[:,i]類似python直接的index 列操作是可行的,

注意i不能是variable,如果是使用slice

slice操作會保持和輸入tensor一樣的shape 返回

而1對應的列操作會降維

slice 使用-1 表示該維度元素全選類似:

importtensorflowastf

sess = tf.interactivesession()

in [12]:

t = tf.constant([[1, 2, 3], [4, 5, 6]], dtype=tf.float32)

in [19]:

tf.expand_dims(t, 1).eval()

out[19]:

array([[[ 1., 2., 3.]],

[[ 4., 5., 6.]]], dtype=float32)

in [14]:

t.eval().shape

out[14]:

(2, 3)

in [18]:

tf.expand_dims(t, 1).eval().shape

out[18]:

(2, 1, 3)

in [17]:

tf.concat(1, [tf.zeros([2,1]), t]).eval()

out[17]:

array([[ 0., 1., 2., 3.],

[ 0., 4., 5., 6.]], dtype=float32)

in [20]:

t[:,1].eval()

out[20]:

array([ 2., 5.], dtype=float32)

in [26]:

tf.reshape(t[:,1],[-1, 1]).

eval()

out[26]:

array([[ 2.],

[ 5.]], dtype=float32)

in [25]:

tf.reshape(t[:,1],[-1, 1]).eval().shape

out[25]:

(2, 1)

in [34]:

tf.expand_dims(t[:,1],1).eval()

out[34]:

array([[ 2.],

[ 5.]], dtype=float32)

in [28]:

tf.expand_dims(t[:,1],1).eval().shape

out[28]:

(2, 1)

in [29]:

tf.gather(t, 1).eval()

out[29]:

array([ 4., 5., 6.], dtype=float32)

in [35]:

tf.slice(t, [0, 1], [-1, 1]).eval()

out[35]:

array([[ 2., 3.],

[ 5., 6.]], dtype=float32)

建議使用slice,不過有的時候希望自動降維的時候

直接用[:,]操作更方便比如

輸入tensor

#[batch_size, num_negs, emb_dim]

neg_comment_feature = tf.reduce_mean(neg_comment_feature,2)

下面希望

#[batch_size, emb_dim] <= [batch_size, num_negs, emb_dim]

可能的幾種方式

for i in xrange(num_negs):

neg_comment_feature_i = tf.reshape(tf.slice(neg_comment_feature, [0, i, 0], [-1, 1, emb_dim]), [-1, emb_dim])

neg_comment_feature_i = tf.reshape(tf.slice(neg_comment_feature, [0, i, 0], [-1, 1, -1]), [-1, emb_dim])

neg_comment_feature_i = neg_comment_feature[:,i,:] #直接降維

Tensorflow tensor的列操作

幾個point i 類似python直接的index 列操作是可行的,注意i不能是variable,如果是使用slice slice操作會保持和輸入tensor一樣的shape 返回 而1對應的列操作會降維 slice 使用 1 表示該維度元素全選類似 importtensorflowastf se...

TensorFlow tensor的型別和形狀轉化

型別轉化 tf.string to number string tensor,out type none,name none 將字串轉化為tf.float32 預設 和tf.int32 tf.to double x,name todouble 轉化為tf.float64 tf.to float x,...

pandas對DataFrame中列的操作

要獲取一列的資料,還是用中括號 的方式,跟 series 類似。比如嘗試獲取上面這個表中的 name 列資料 data name 因為我們只獲取一列,所以返回的就是乙個 series。可以用 type 函式確認返回值的型別 type data name 增加資料列有兩種辦法 可以從頭開始定義乙個 p...