我有一个张量,给出我想初始化为行的行的行索引。看起来像这样:
[0 1 5 9]
对于所有其他行,我希望将它们初始化为零。也就是说,我想初始化一个秩2张量,其中行0、1、5、9为1,其余行为零。
我已经看过初始化函数,例如“ 1”,“ 0”和“填充”,但是我对创建此规范的张量不太满意。
我意识到我可以评估这个张量以使其返回为numpy数组,并使用numpy创建这种形式的矩阵,但这不适合我的代码结构。我试图做到这一点,所以我可以做到这一点,但是我必须删除占位符,而在我的tensorflow图中使用numpy数组,这不是一个好习惯。
是否存在可以创建上述张量的函数或特定方式?
答案 0 :(得分:1)
如果您尝试基于另一个张量(It Solutions
)中的值将值分配给张量(display:none
),我相信正确的方法是在会话,然后使用返回的值调用t
操作,并使用传递给占位符的值覆盖t_0159
的内容。我不确定这是否就是您上面所描述的,但仅在会话期间,它不需要在图表内 内的任何t_0159
数组。
tf.assign
我相信这是做到这一点的“正确”方法,并产生输出:
t
我希望这会有所帮助,如果不能让我知道。
答案 1 :(得分:0)
这是一种方法(也许不是最好的方法)。
假设您要创建一个张量为(10, n_cols)
的张量,约束为将rows=[0, 1, 5, 9]
中具有索引的行初始化为1,将其他行初始化为0。
import tensorflow as tf
rows = [0, 1, 5, 9]
n_cols = 10 # for the sake of the example...
my_tensor = [tf.get_variable(name='my_tensor_row_' + str(idx),
shape=(1, n_cols),
initializer=tf.initializers.ones if idx in rows else tf.initalizers.zeros)
for idx in range(10)]
my_tensor = tf.concat(my_tensor, axis=0)
然后,您可以在张量流会话中访问my_tensor
的值:
sess = tf.Session()
sess.run(tf.global_variables_initializer()) # initialize the rows of `my_tensor`
my_tensor_val = sess.run(my_tensor)
将为您提供一个形状为my_tensor_val
的Numpy数组(10, n_cols)
,可以根据需要对其进行初始化。