theano.tensor.nnet에서 theano의 conv2d를 사용하여 학습 한 기존 분류 모델이 있습니다. 이제 Java에서 일종의 예측을 수행하기 위해이 모델을 사용해야합니다.은 theano의 conv2d에서와 똑같은 컨볼 루션을 수행합니다.
나는 약간의 문서 (https://developer.apple.com/Library/ios/documentation/Performance/Conceptual/vImage/ConvolutionOperations/ConvolutionOperations.html)에 따라 파이썬에서 간단한 컨볼 루션을 구현한다. (결국은 자바로 코딩 할 것이다. 예를 들어 2 * 2 커널 (k11, k12, k21, k22)의 경우 커널 아래 영역 중 하나는 (a11, a12, a21, a22)입니다. 컨볼 루션은 a11 * k11 + a12 * k12 + a21 * k21 + a22 * k22에 의해 수행된다.
불행히도 일부 더미 행렬과 커널을 사용하여 회선 코드와 theano의 conv 코드를 테스트 할 때 다른 결과가 나타납니다. 드문 경우지만, 같은 결과를줍니다.
convolution 알고리즘에는 많은 변형이 있으며 theano의 ConvOp에서 사용 된 것과 동일한 정확한 회선 알고리즘을 구현해야합니다. 그러나, 나는 theano의 Conv2d 알고리즘을 설명하는 자료를 찾을 수 없습니다.
theano의 conv2d 알고리즘에 대해 조금 설명해 주시겠습니까?
다음은 회선 내 파이썬 코드 :
def convolution(img_arr, kernel):
h, w = img_arr.shape
k = len(kernel)
k_flat = kernel.flatten()
neww = w - len(kernel) + 1
newh = h - len(kernel) + 1
after = np.zeros((newh, neww))
for i in range(neww):
for j in range(newh):
after[j,i] = (img_arr[j:j+k,i:i+k].flatten()*k_flat).sum()
return after
는 것 같다 벤더에 대한 질문. vImage의 회선을 재교육 할 수 있습니까? 특히 정수 이미지의 경우 결과가 잘 정의되어 있습니다. –