나는 텐도를 [A, B, C, D]
에서 [A, B, C * D]
으로 바꾸고 dynamic_rnn
에 넣으려고합니다. B, C 및 D를 미리 알지 못한다고 가정합니다 (이들은 길쌈 네트워크의 결과입니다).TensorFlow에서 마지막 텐서의 두 치수를 평평하게하기
x_shape = tf.shape(x)
x = tf.reshape(x, [batch_size, x_shape[1], tf.reduce_prod(x_shape[2:])]
:
x = x.flatten(ndim=3)
TensorFlow 내가 해낸이이 작업을 수행하는 쉬운 방법은 없습니다 지금까지 여기 보인다 :
나는 같을 것이다 Theano 같은 고쳐 생각
x
의 모양이 그래프 작성 중에 알려지더라도 (즉, print(x.get_shape())
은 get_shape()
이 [10, None, None]
이되는 이후에 [10, 20, 30, 40]
과 같이 절대 값을 인쇄합니다. 초기 형상은 알 수 없으므로 절대 값으로 작동 할 수 없습니다.
dynamic_rnn
에
x
을 통과하고있을 때 그것은 실패
ValueError: Input size (depth of inputs) must be accessible via shape inference, but saw value None.
왜이 사건을 처리 할 수 없습니다 reshape
입니까? Tenano가 4 위 이상인 TensorFlow에서 Theano의 flatten(ndim=n)
을 복제하는 올바른 방법은 무엇입니까?
내가 오해 한 것이 있다면 나를 정정하십시오. 그러나 나는 "모양 [2] *에서 무엇을하는지 절대적 가치로 작동 할 수 없기 때문에 초기 모양을 알 수 없다고 가정합니다. 모양 [3]'. – naktinis
내가 틀렸다고 정정하십시오. 따라서 A는 모델을 학습 할 때 입력 샘플의 수에 따라 달라지는 일괄 처리 크기입니다. 따라서 훈련시 A 만 알 수 있습니다. 그러나 CNN의 출력은 입력 형태, 필터 모양 및 출력 채널 수에 따라 달라지며 get_shape() 메소드를 사용하여 계산하거나 확인할 수 있습니다. 게다가 B, C, D는 None과 같아서는 안됩니다. –
아마 가능할 수도 있지만, 데이터의 단순한 변환을 수행하기 위해 많은 값을 계산하고 하드 코드해야합니다. 이것은 내가 피하려고 시도한 것입니다 (그리고 Lasagne/Theano가 코드의 한 줄을 완성 할 수있게 해줍니다). 주된 질문의 주요 부분은 "왜 '재구성 (reshape)'이이 사건을 처리 할 수 없습니까?" – naktinis