Python 计算线性指数Tensorflow

Python 计算线性指数Tensorflow,python,numpy,machine-learning,tensorflow,data-science,Python,Numpy,Machine Learning,Tensorflow,Data Science,下午好。 我仍然存在通过索引更新tensorflow中的随机元素的问题。 我想随机选择索引(例如,所有索引的一半),然后将对应于该索引的元素设置为零。 以下是有问题的部分: with tf.variable_scope("foo", reuse=True): temp_var = tf.get_variable("W") size_2a = tf.get_variable("b") s1 = tf.shape(temp_var).eval()[0] s2 = tf

下午好。 我仍然存在通过索引更新tensorflow中的随机元素的问题。 我想随机选择索引(例如,所有索引的一半),然后将对应于该索引的元素设置为零。 以下是有问题的部分:

with tf.variable_scope("foo", reuse=True):
    temp_var = tf.get_variable("W")
    size_2a = tf.get_variable("b")
    s1 = tf.shape(temp_var).eval()[0]
    s2 = tf.shape(size_2a).eval()[0]


    row_indices = tf.random_uniform(dtype=tf.int32, minval=0, maxval = s1 - 1, shape=[s1]).eval()
    col_indices = tf.random_uniform(dtype=tf.int32, minval=0, maxval = s2 - 1, shape=[s2]).eval()

    ones_mask = tf.ones([s1,s2])

    # turn 'ones_mask' into 1d variable since "scatter_update" supports linear indexing only
    ones_flat = tf.Variable(tf.reshape(ones_mask, [-1]))

    # no automatic promotion, so make updates float32 to match ones_mask
    updates = tf.zeros(shape=(s1,), dtype=tf.float32)


    # get linear indices
    linear_indices = row_indices*s2 + tf.reshape(col_indices,s1*s2)
    ones_flat = tf.scatter_update(ones_flat, linear_indices/2, updates) 
    #I want to set to zero only half of all elements,that's why linear_indices/2

    # convert back into original shape
    ones_mask = tf.reshape(ones_flat, ones_mask.get_shape())
它给了我ValueError:无法用10个元素重塑一个张量来塑造[784,10](7840个元素)为输入形状为[10],[2]的“foo_1/重塑_1”(op:“重塑”),但我不知道如何在这里不重塑(我试图重塑为s1和s2,没有用)


我已经读过这些主题:(feed_dict在我的案例中似乎不起作用),实际上stackoverflow=(

你能不能对它进行一点声音分析?-对不起,我无法抗拒;更严重的是:最后五行中的重塑在我看来是可疑的(大小似乎与您在创建
列索引时使用的大小不匹配;奇怪的是,错误消息看起来并不正确。也许您可以在该代码块名称中指定重塑操作,这样错误将更容易处理。)map@PaulPanzer,它不应该匹配,
col_index
已经有了s2的形状,从逻辑上看,我如果行索引具有形状s1并乘以s2,那么我应该相应地重塑列索引。但是如果我编写
tf.reformate(列索引[s1])
,我会得到值错误:无法将具有10个元素的张量重塑为具有输入形状[10],[1]的“foo_1/reformate_1”(op:'reformate')的形状[784](784个元素).Aggr我真的不明白如何计算这个线性指数。如果我没有完全弄错的话,那么tf的形状逻辑与numpy的形状逻辑非常相似,至少在numpy中,你不能用整形来改变元素的总数(=形状的乘积)。例如,x具有形状(n1,n2)合法性:x.整形(n2,n1),x.整形(n1*n2)但是:不起作用:x.重塑(n2)x.重塑(n1+n2)等等。你到底想实现什么?像(r1y,r1x)(r1y,r2x)(r2y,r1x)(r2y,r2x)或像(r1y,r1x)(r2y,r2x)(r3y,r3x)(r4y,r4x)这样的网格状随机坐标系?@PaulPanzer,谢谢。我想要散射更新()为了正常工作,我猜是后者。哇,线性指数意味着有一维张量,而不是二维张量。如果你的意思是在所有这些展平之前,是的,分散。好的,如果你想在矩形上均匀分布,你把矩形分成一个长向量,你会在向量上得到均匀分布,因此没有必要这样做按坐标进行坐标变换,然后将它们组合起来。直接操作
maxval=s1*s2
(您来自matlab,不是吗?在python中,约定包括下限,不包括上限,因此没有负一)和形状(int(s1*s2*france),(注意逗号),其中france是要更新的位置的分数