문제

분류를 위해 Theano를 사용하고 있습니다(컨볼루션 신경망).

이전에는 (평면화된) 이미지의 픽셀 값을 NN의 기능으로 사용해 왔습니다.이제 추가 기능을 추가하고 싶습니다.
추가 기능의 벡터를 평면화된 이미지 기능에 연결한 다음 이를 완전 연결 레이어의 입력으로 사용할 수 있다는 말을 들었지만 문제가 있습니다.

우선, 이것이 올바른 접근 방식입니까?

다음은 일부 코드 조각과 내 오류입니다.
일부 수정을 거쳐 해당 사이트에서 제공된 예와 유사

(모델을 구축하는 클래스에서)

 # allocate symbolic variables for the data
 self.x = T.matrix('x')   # the data is presented as rasterized images
 self.y = T.ivector('y')  # the labels are presented as 1D vector of [int] labels
 self.f = T.matrix('f') # additional features

아래에는 변수 v 그리고 rng 이전에 정의되어 있습니다.중요한 것은 layer2_input:

layer2_input = self.layer1.output.flatten(2)
layer2_input = T.concatenate([layer2_input, self.f.flatten(2)])
self.layer2 = HiddenLayer(rng, input=layer2_input, n_in=v, n_out=200, activation=T.tanh)

(훈련하는 수업에서)

train_model = theano.function([index], cost, updates=updates,
          givens={
             model.x: train_set_x[index * batch_size: (index + 1) * batch_size],
             model.y: train_set_y[index * batch_size: (index + 1) * batch_size],
             model.f: train_set_f[index * batch_size: (index + 1) * batch_size]
          })

그러나 train_model을 호출하면 오류가 발생합니다.

ValueError: GpuJoin: Wrong inputs for input 1 related to inputs 0.!
Apply node that caused the error: GpuJoin(TensorConstant{0}, GpuElemwise{tanh,no_inplace}.0, GpuFlatten{2}.0)
Inputs shapes: [(), (5, 11776), (5, 2)]
Inputs strides: [(), (11776, 1), (2, 1)]
Inputs types: [TensorType(int8, scalar), CudaNdarrayType(float32, matrix), CudaNdarrayType(float32, matrix)]

입력 모양이 다음의 모양을 나타냅니까? x, y 그리고 f, 각각?

그렇다면 세 번째가 올바른 것 같습니다(배치 크기=5, 2개의 추가 기능). 그런데 첫 번째는 스칼라이고 두 번째는 행렬인 이유는 무엇입니까?

자세한 내용은:

train_set_x.shape = (61, 19200) [61 flattened images (160x120), 19200 pixels]
train_set_y.shape = (61,) [61 integer labels]
train_set_f.shape = (61,2) [2 additional features per image]
batch_size = 5

내가 올바른 생각을 가지고 있습니까, 아니면 이를 달성하는 더 좋은 방법이 있습니까?오류가 발생하는 이유에 대한 통찰력이 있습니까?

도움이 되었습니까?

해결책

문제는 내가 잘못된 축을 연결하고 있다는 것이었습니다.

layer2_input = T.concatenate([layer2_input, self.f.flatten(2)])

그랬어야 했어

layer2_input = T.concatenate([layer2_input, self.f.flatten(2)], axis=1)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top