初始化零和零的张量

时间:2018-11-11 15:26:45

标签: python tensorflow

我有一个张量,给出我想初始化为行的行的行索引。看起来像这样:

[0 1 5 9]

对于所有其他行,我希望将它们初始化为零。也就是说,我想初始化一个秩2张量,其中行0、1、5、9为1,其余行为零。

我已经看过初始化函数,例如“ 1”,“ 0”和“填充”,但是我对创建此规范的张量不太满意。

我意识到我可以评估这个张量以使其返回为numpy数组,并使用numpy创建这种形式的矩阵,但这不适合我的代码结构。我试图做到这一点,所以我可以做到这一点,但是我必须删除占位符,而在我的tensorflow图中使用numpy数组,这不是一个好习惯。

是否存在可以创建上述张量的函数或特定方式?

2 个答案:

答案 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),可以根据需要对其进行初始化。