Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 更新一维张量中的部分线性指数_Python_Python 2.7_Machine Learning_Tensorflow_Data Science - Fatal编程技术网

Python 更新一维张量中的部分线性指数

Python 更新一维张量中的部分线性指数,python,python-2.7,machine-learning,tensorflow,data-science,Python,Python 2.7,Machine Learning,Tensorflow,Data Science,我只想更新部分线性索引(单位为1),例如,一半或四分之一,如:[0,1,2,3,…N]更改为[0,1,…,N/2] 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] ones_mask = tf.ones([s1,s2]) indices

我只想更新部分线性索引(单位为1),例如,一半或四分之一,如:[0,1,2,3,…N]更改为[0,1,…,N/2]

    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]

    ones_mask = tf.ones([s1,s2])
    indices = tf.slice(ones_mask,[0,0],[s1/2,s2])
    # turn into 1d variable since "scatter_update" supports linear indexing only
    ones_flat = tf.Variable(tf.reshape(ones_mask, [-1]))
    indices_flat = tf.Variable(tf.reshape(indices, [-1]))

    # get linear indices
    linear_indices = tf.random_uniform(tf.shape(indices_flat), dtype=tf.int32, minval=0, maxval =s1*s2)

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

    # convert back into original shape
    ones_mask_new = tf.reshape(ones_flat_new, ones_mask.get_shape())

    W.assign(tf.mul(ones_mask_new,W))
问题是,在将1/2的元素设置为0,再乘以W之后,W似乎没有变化,因为网络的精度没有变化。没有错误,只是这样:

Accuracy_old: 0.9113
Extracting /tmp/data/train-images-idx3-ubyte.gz
Extracting /tmp/data/train-labels-idx1-ubyte.gz
Extracting /tmp/data/t10k-images-idx3-ubyte.gz
Extracting /tmp/data/t10k-labels-idx1-ubyte.gz
lin_ind Tensor("foo_1/random_uniform:0", shape=(1960,), dtype=int32)
upd Tensor("foo_1/zeros:0", shape=(3920,), dtype=float32)
W Tensor("foo/W/read:0", shape=(784, 10), dtype=float32)
Accuracy_new: 0.9113

你能帮我找出这里的错误吗?

对不起,你能不能用一个更集中的例子来重新表述你的问题,说明你想测试什么?@drpng,当然,对不起。我想检查我的分散更新是否正常工作。这是一个问题,因为我只能得到关于矩阵形状的信息,因为我没有找到一种方法来打印它,比如[[1,0,1,…,1],[0,1,1,…,0]],等等(eval()没有帮助),所以日志中没有显示错误,精度也没有变化,这取决于预测:
pred=tf.nn.softmax(tf.matmul(x,W)+b)
。你应该能够做
get_shape().shape
并打印它。@drpng,谢谢,但我已经知道了形状(选中了它),它是(7840,)我需要知道新值的确切值,以便理解权重是否真的设置为零。你可以做
print(sess.run(ones\u flat\u new))
,如果你想要一个“漂亮的打印”,你也可以做
ones\u flat\u new=tf.print(ones\u flat\u new,[ones\u flat\u new],“ones flat new:”)