ТипError из тензорного слоя ConcatLayer из-за изменения API tf.concat

106
11

Я использую tensorlayer concatLayer для конкатенации двух входов, один - вложение, другой - другой дополнительный вход. tl.layers.ConcatLayer всегда запускается в TypeError: "Ожидаемый int32, получивший список, содержащий тензоры типа" _Message "вместо этого".

Кажется, изменения tf.concat() могут быть причиной изменений, но я использую tf 1.2.0 + тензор-слой 1.5.1 (python 2.7.13 | Anaconda 4.3.0)

Может ли кто-нибудь помочь? Спасибо -Wei

дизайн сети:

emb_net = tl.layers.EmbeddingInputlayer(
inputs = x,
vocabulary_size = VOCAB_SIZE,
embedding_size = FLAGS.embedding_size,
E_init = tf.random_uniform_initializer(
-FLAGS.init_scale, FLAGS.init_scale),
name = 'embedding')

word_bound = tl.layers.InputLayer(
inputs = x_wb,
name = 'word_boundary')

network = tl.layers.ConcatLayer(
layer = [emb_net, word_bound],
concat_dim = 1,
name = 'concat_layer')

Сообщение об ошибке:

 File "./tensorlayer_lstm_classifier.py", line 147, in do_training
reuse=None)
File "./tensorlayer_lstm_classifier.py", line 53, in inference
name = 'concat_layer')
File "/Users/lin/anaconda2/lib/python2.7/site-packages/tensorlayer/layers.py", line 4717, in __init__
self.outputs = tf.concat(concat_dim, self.inputs, name=name)
File "/Users/lin/anaconda2/lib/python2.7/site-packages/tensorflow/python/ops/array_ops.py", line 1043, in concat
dtype=dtypes.int32).get_shape(
File "/Users/lin/anaconda2/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 676, in convert_to_tensor
as_ref=False)
File "/Users/lin/anaconda2/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 741, in internal_convert_to_tensor
ret = conversion_func(value, dtype=dtype, name=name, as_ref=as_ref)
File "/Users/lin/anaconda2/lib/python2.7/site-packages/tensorflow/python/framework/constant_op.py", line 113, in _constant_tensor_conversion_function
return constant(v, dtype=dtype, name=name)
File "/Users/lin/anaconda2/lib/python2.7/site-packages/tensorflow/python/framework/constant_op.py", line 102, in constant
tensor_util.make_tensor_proto(value, dtype=dtype, shape=shape, verify_shape=verify_shape))
File "/Users/lin/anaconda2/lib/python2.7/site-packages/tensorflow/python/framework/tensor_util.py", line 374, in make_tensor_proto
_AssertCompatible(values, dtype)
File "/Users/lin/anaconda2/lib/python2.7/site-packages/tensorflow/python/framework/tensor_util.py", line 302, in _AssertCompatible
(dtype.name, repr(mismatch), type(mismatch).__name__))
TypeError: Expected int32, got list containing Tensors of type '_Message' instead.

спросил(а) 2017-06-22T09:15:00+03:00 3 года, 9 месяцев назад
1
Решение
61

Я решил проблему, хотя все еще немного озадачен

в файле anaconda2/lib/python2.7/site-packages/tensorlayer/layers.py, строка 4717, просто сохраните первую строку tf.concat()

try: # TF1.0
self.outputs = tf.concat(self.inputs, concat_dim, name=name)
except: # TF0.12
self.outputs = tf.concat(concat_dim, self.inputs, name=name)

ответил(а) 2017-06-22T18:53:00+03:00 3 года, 9 месяцев назад
44

можете ли вы проверить размерность x и x_wb?

ответил(а) 2017-06-22T13:37:00+03:00 3 года, 9 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема