1
I 2 차원 차원에 컨볼 루션에 대한 다음과 같은 코드가 있습니다모양 오류
matrix = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
kernel = np.array([[1,-1],[1,-1]])
kr, kc = kernel.shape
mr, mc = matrix.shape
output = np.empty((mc-kc+1, mr-kr+1))
for row in range(mc-kc+1):
for column in range(mr-kr+1):
output[row][column] = (matrix[row:row+kr,column:column+kc]*kernel).sum()
print(output)
내가 진짜 컬러 이미지에 이것을 시도하고 싶습니다, 여기에 내가 뭘하려입니다
#matrix is now 3D
print(matrix.shape)
Out: (340, 360, 3)
#kernel is now 3D
print(kernel.shape)
Out: (34, 36, 3)
kr, kc, kdim = kernel.shape
mr, mc, mdim = matrix.shape
output = np.empty((mc-kc+1, mr-kr+1, 3))
for row in range(mc-kc+1):
for column in range(mr-kr+1):
for dim in range(3):
output[row][column][dim] = (matrix[row:row+kr,column:column+kc]*kernel).sum()
print(output)
Out: ValueError: operands could not be broadcast together with shapes (33,36,3) (34,36,3)
깊이 치수에 문제가 있다고 생각하지만 해결 방법은 아직 없습니다. 도움?
을'출력 = np.empty ((MC-KC, 1 + MR-KR + 1, 3))'는'대신 mcm''의 mc'을 사용하고 있습니다. 3d 행렬에있는'mcm'을 여기에 사용하셨습니까? 또는'mr, mcm, mdim = matrix.shape'을'mr, mc, mdim = matrix.shape'으로 변경하십시오. – gammazero
그건 오타였습니다. 이미 변경했지만 문제가 남아 있습니다. –
매트릭스 순위는 커널 순위보다 커야합니다. 2D 컨볼 루션은 4D 텐서 (일괄 처리의 경우 1 차원)로 작동하고 3D 컨볼 루션은 5D 텐서로 작동합니다. – Maxim