在TensorFlow中设计网络时如何更改张量的值

时间:2017-07-12 07:37:52

标签: python compression tensorflow-gpu

我刚开始学习TensorFlow,我遇到了一些问题。我读了几天前的论文 - DEEP COMPRESSION:压缩深度神经网络与修剪,训练量化和HUFFMAN编码。在修剪部分,作者首先通过正常的网络培训学习连接。接下来,他们修剪小权重连接:从网络中删除权重低于阈值的所有连接。最后,他们重新训练网络以了解剩余稀疏连接的最终权重。

我想得到每一层的所有权重并逐个比较阈值并将小权重设置为零。这是我的代码,并且存在异常TypeError(“使用tf.Tensor作为Python不允许bool。“)。在设计网络时如何获得权重张量的值?有没有人实现过此代码或建议的任何其他方法?提前谢谢!

with tf.variable_scope('layer1-conv1'):
    conv1_weights = tf.get_variable(
        "weight", [CONV1_SIZE, CONV1_SIZE, NUM_CHANNELS, CONV1_DEEP],
        initializer = tf.truncated_normal_initializer(stddev=0.1)
    )

    shapeDim=CONV1_SIZE*CONV1_SIZE*NUM_CHANNELS*CONV1_DEEP
    reshape_w=tf.reshape(conv1_weights,[-1])

    i=0
    if step != 0 and step != 1:
        while i < shapeDim:
            if reshape_w[i] < RATIO:
                reshape_w[i] = 0

    conv1_weights=tf.reshape(reshape_w, [CONV1_SIZE, CONV1_SIZE, NUM_CHANNELS, CONV1_DEEP])

    conv1_biases = tf.get_variable("bias", [CONV1_DEEP], initializer=tf.constant_initializer(0.0))

    conv1 = tf.nn.conv2d(input_tensor, conv1_weights, strides=[1, 1, 1, 1], padding='SAME')

    relu1 = tf.nn.relu(tf.nn.bias_add(conv1, conv1_biases))

1 个答案:

答案 0 :(得分:0)

您可以使用tf.less一次比较整个矩阵,然后根据布尔矩阵进行分配,而不是逐个元素地进行。

以下答案可以让您更好地了解如何执行此操作:

Conditional assignment of tensor values in TensorFlow