Tôi đang sử dụng tf.while_loop để nối động các tensor.
mã số
embeds_raw = tf.constant(np.array([
[1, 1],
[1, 1],
[hai mươi hai],
[3, 3],
[3, 3],
[3, 3]
], dtype='float32'))
nhúng = tf.Variable(initial_value=embeds_raw)
container_variable = tf.zeros([512], dtype=tf.int32, name='container_variable')
sen_len = tf.placeholder('int32', shape=[None], name='sen_len')
# max_l = tf.reduce_max(sen_len)
current_size = tf.shape(sen_len)[0]
độn_sen_len = tf.pad(sen_len, [[0, 512 - current_size]], 'CONSTANT')
đã thêm_container_variable = tf.add(container_variable, độn_sen_len)
u1 = tf.TensorArray(dtype=tf.float32, size=512, clear_after_read=False)
u1 = u1.split(embed, added_container_variable)
res = tf.split(embed, added_container_variable)
i = tf.constant(0, shape=(), dtype='int32', name='i')
x = tf.Variable(tf.constant(0, shape=[2, 2], dtype=tf.float32), dtype=tf.float32)
điều kiện def(_i, _x):
trả về tf.less(_i, current_size)
phần thân xác định (_i, _x):
return _i + 1, tf.concat([x, u1.read(_i)], axis=0)
idx, x = tf.while_loop(
tình trạng,
thân hình,
[tôi,x],
shape_invariants=[tf.TensorShape([]), tf.TensorShape([Không, 2])],
)
với tf.Session() là sess:
sess.run(tf.global_variables_initializer())
đã gửi = sess.run(x, Feed_dict={sen_len: [2, 1, 3]})
in (đã gửi)
in(len(res))
Điều xảy ra là nó kết nối trong mỗi lần lặp nhưng loại bỏ các sửa đổi. Nói cách khác, lần lặp mới không sử dụng kết quả trước đó.
Đây là đầu ra tôi nhận được:
[[ 0. 0.]
[0,0.]
[3.3.]
[3.3.]
[3.3.]]
Và đầu ra tôi muốn là:
[[ 0. 0.]
[0,0.]
[1.1.]
[1.1.]
[ hai mươi hai.]
[3.3.]
[3.3.]
[3.3.]]
Đó là vì dòng này:
return _i + 1, tf.concat([x, u1.read(_i)], axis=0)
Bạn nên thay đổi nó thành:
return _i + 1, tf.concat([_x, u1.read(_i)], axis=0)
Tôi là một lập trình viên xuất sắc, rất giỏi!