data.pageNumber
k = 3的单热张量:
input_tensor=[[[1, 5, 7],
[2, 8, 1],
[3, 9, 1],
],
[[0, 9, 5],
[6, 0, 4],
[3, 0, 8]
]
]
tf.nn.top_k将仅从最后一个维度返回k个最大元素。如何从3d张量ex((3,3,1))获得k个最大元素。 同样,tf.one_hot将在每行中为指定的深度和给定的索引放置一个,这不是这种情况。
答案 0 :(得分:0)
考虑您的示例,它的形状实际上是2,3,3
output = tf.one_hot(tf.math.argmax(inp, 2), 3)
因此,首先我们获取所需轴上最大条目的索引,在这种情况下为2。然后应用所需深度3的一次热编码
答案 1 :(得分:0)
import numpy as np
import tensorflow as tf
inputs=np.array([[[1, 5, 7],
[2, 8, 1],
[3, 9, 1],
],
[[0, 9, 5],
[6, 0, 4],
[3, 0, 8]
]
])
j = tf.placeholder(tf.int32)
input_tensor = tf.placeholder(tf.float64, shape=(2,3,3))
_, inds = tf.nn.top_k(input_tensor, 3)
r = tf.reshape(inds[:,:,3-j], [-1])
encoded_tensor = tf.reshape(tf.one_hot(r, 3),tf.shape(input_tensor))
with tf.Session() as sess:
for k in [1,2,3]:
print ("K:",k)
print (sess.run(encoded_tensor , feed_dict={j: k, input_tensor: inputs}))
输出:
K: 1
[[[1. 0. 0.]
[0. 0. 1.]
[0. 0. 1.]]
[[1. 0. 0.]
[0. 1. 0.]
[0. 1. 0.]]]
K: 2
[[[0. 1. 0.]
[1. 0. 0.]
[1. 0. 0.]]
[[0. 0. 1.]
[0. 0. 1.]
[1. 0. 0.]]]
K: 3
[[[0. 0. 1.]
[0. 1. 0.]
[0. 1. 0.]]
[[0. 1. 0.]
[1. 0. 0.]
[0. 0. 1.]]]
top_k
来获取顺序中的所有索引k
的值选择所需的索引答案 2 :(得分:0)
如果要从每个矩阵中找到k
个最大的元素,则可以使用以下方法。
import tensorflow as tf
input_tensor = tf.constant([[[1, 5, 7],[2, 8, 1],[3, 9, 1]],
[[0, 9, 5],[6, 0, 4],[3, 0, 8]]],dtype=tf.int32)
k_tf = tf.placeholder(shape=(),dtype=tf.int32)
temp = tf.reshape(input_tensor,shape=(input_tensor.shape[0],-1))
# [[1 5 7 2 8 1 3 9 1]
# [0 9 5 6 0 4 3 0 8]]
result = tf.reduce_sum(tf.one_hot(indices=tf.nn.top_k(temp,k=k_tf)[1], depth=temp.shape[1]), axis=1)
# [[0. 0. 1. 0. 1. 0. 0. 1. 0.]
# [0. 1. 0. 1. 0. 0. 0. 0. 1.]]
result = tf.reshape(result,input_tensor.shape)
with tf.Session() as sess:
print('k=2:')
print(sess.run(result, feed_dict={k_tf: 2}))
print('k=3:')
print(sess.run(result,feed_dict={k_tf:3}))
k=2:
[[[0. 0. 0.]
[0. 1. 0.]
[0. 1. 0.]]
[[0. 1. 0.]
[0. 0. 0.]
[0. 0. 1.]]]
k=3:
[[[0. 0. 1.]
[0. 1. 0.]
[0. 1. 0.]]
[[0. 1. 0.]
[1. 0. 0.]
[0. 0. 1.]]]