我想在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中有一个很好的计算效率方法吗?