내가 할 일이있는 코드가 있는데, 예상했던 것보다 다르게 동작합니다.Keras에서 시퀀스 (숨겨진 레이어)를 왼쪽으로 이동하는 방법은 무엇입니까?
깊은 학습 모델의 일부로 벡터 (숨겨진 레이어) 시퀀스를 왼쪽으로 한 단계 씩 이동하는 (훈련 불가능한) 레이어가 필요합니다. 내 프레임 워크는 Theano 백엔드가있는 Keras2입니다. 레이어에 입력이 3 시간 단계의 순서 인 경우
함께 (두 숨겨진 요소다음 층의 출력은 좌측으로 이동한다
으로, 최소 예를 제공한다 제로 패딩) :1 차원 컨벌루션이 작업을 수행 할 것이라고 생각했습니다. 여기에서 적절한 가중치를 지정했습니다. 3의 회선 크기로, 그냥 0으로 왼쪽과 중간 위치에 대한 커널 가중치를 설정 것이고, (단지 1, 2 차원을 복사) 올바른 위치에 대각선 가중치를 가지고있는 경우,
[[[ 0., 0.],
[ 0., 0.]],
[[ 0., 0.],
[ 0., 0.]],
[[ 1., 0.],
[ 0., 1.]]]
그러나 나는 이것을 좋아한다. 벡터는 왼쪽이 아닌 오른쪽으로 이동한다. 완전히 동작하는 예제 :
import keras
import numpy as np
dim, length = 2,3
input_mat = np.arange(dim*length).reshape(1,length,dim)
inp = keras.layers.Input(shape=(length,dim))
shift_left_kernel = np.asarray([np.zeros((dim,dim)),np.zeros((dim,dim)), np.eye(dim)])
outp = keras.layers.Convolution1D(dim, length, padding='same', kernel_initializer='zeros', use_bias=False, trainable=False, weights=[shift_left_kernel])(inp)
model_network = keras.models.Model(inputs=inp, outputs=outp)
print(model_network.predict([input_mat]))
#[[[ 0. 0.]
# [ 0. 1.]
# [ 2. 3.]]]
대신, 나는 (내가 그렇지 왼쪽으로, 오른쪽으로 이동할 것이라고 기대) 나에게 비논리적 인 것 같다
shift_left_kernel = np.asarray([np.eye(dim), np.zeros((dim,dim)),np.zeros((dim,dim))])
를 사용해야합니다. 내 논리에서 균열은 어디에 있습니까?