在TensorFlow中将二进制张量的补丁转换为十进制

时间:2017-04-19 21:40:12

标签: python tensorflow

我想在TensorFlow中将二进制矩阵的片段转换为具有相同形状的十进制矩阵。更明确地说,

  • 输入:二进制H x L矩阵A
  • 输出:整数矩阵X,使X[i,j] = decimal(A[i,(j-k/2):(j+k/2)])。这是输出的每个元素,它需要1xk A补丁,并将其转换为带有零填充的十进制表示。
  • 计算注意事项:k通常非常大(即16)和H x L = 32*400。因此,用2**k来扩展任何东西在计算上是不可行的。

示例

A = [[1,1,0,1,0,1],
     [1,0,1,0,0,0]]
k = 3
X = [[3,6,5,2,5,2],
     [2,5,2,4,0,0]]

天真的解决方案

# Compute all possible binary substrings
rows = []
for i in range(2**k):
    binary = bin(i)[2:].zfill(k)
    row = np.array(map(float, list(binary)))
    rows.append(row)
W = tf.transpose(tf.to_float(tf.stack(rows))) # K x 2^K
W = tf.expand_dims(W,0) # 1 x K x 2^K

# Extract the indicator values via convolution
X = tf.nn.conv2d(A, W, strides=[1,1,1,1], padding = 'SAME') # H x L x 2^K

# Collapse to find the decimal value
X = tf.argmax(X, axis = 2) # H x L

但是,卷积方法会强制您定义形状为H x L x 2^K的张量。如果没有这个,在tensorflow中有一个很好的计算效率方法吗?

0 个答案:

没有答案