"None"차원에서 텐서를 분할하고 싶습니다. 예를 들어Tensorflow에서 None 차원으로 텐서를 분할하는 방법
,
tensor = tf.placeholder(tf.float32, shape=[None, None, 10], name="seq_holder")
sliced_tensor = tensor[:,1:,:] # it works well!
하지만
# Assume that tensor's shape will be [3,10, 10]
tensor = tf.placeholder(tf.float32, shape=[None, None, 10], name="seq_holder")
sliced_seq = tf.slice(tensor, [0,1,0],[3, 9, 10]) # it doens't work!
내가 tf.slice위한 크기 매개 변수를 공급하기 위해 다른 place_holder 사용할 때 메시지를 얻을 동일하다().
두 번째 방법은 "입력 크기 (입력 깊이)에 형태 추론을 통해 액세스 할 수 있어야합니다."라는 오류 메시지가 표시됩니다.
저는 두 가지 방법의 차이점과 더 많은 tensorflow-ish 방법을 알고 싶습니다.
는[편집 됨] 전체 코드는 아래
import tensorflow as tf
import numpy as np
print("Tensorflow for tests!")
vec_dim = 5
num_hidden = 10
# method 1
input_seq1 = np.random.random([3,7,vec_dim])
# method 2
input_seq2 = np.random.random([5,10,vec_dim])
shape_seq2 = [5,9,vec_dim]
# seq: [batch, seq_len]
seq = tf.placeholder(tf.float32, shape=[None, None, vec_dim], name="seq_holder")
# Method 1
sliced_seq = seq[:,1:,:]
# Method 2
seq_shape = tf.placeholder(tf.int32, shape=[3])
sliced_seq = tf.slice(seq,[0,0,0], seq_shape)
cell = tf.contrib.rnn.GRUCell(num_units=num_hidden)
init_state = cell.zero_state(tf.shape(seq)[0], tf.float32)
outputs, last_state = tf.nn.dynamic_rnn(cell, sliced_seq, initial_state=init_state)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
# method 1
# states = sess.run([sliced_seq], feed_dict={seq:input_seq1})
# print(states[0].shape)
# method 2
states = sess.run([sliced_seq], feed_dict={seq:input_seq2, seq_shape:shape_seq2})
print(states[0].shape)
작업을 정의 할 때 (그 두 줄을 실행할 때) 또는 일부 입력으로 실행 (예 : 세션에서'.run' 호출) 할 때 오류가 발생합니까? 나는이 두 명령을 실행하는 데 문제가 없습니다. – jdehesa
슬라이스 된 텐서 (두 번째 방법)를 동적 인 rnn 함수에 넣을 때 오류가 발생했습니다. dynamic_rnn의 문제입니까? –
흠, 말하기 힘듭니다 ... 질문을 편집하고 세부 정보를 추가 할 수 있습니까? 문제가 나타나는 부분을 최소한으로 재현 할 수 있습니까? – jdehesa