Я пытаюсь использовать условную случайную потерю поля в графе Tensorflow.
Я выполняю задачу тегирования последовательности:
У меня есть последовательность элементов в качестве ввода [A, B, C, D]
. Каждый элемент может принадлежать одному из 3 разных классов.
Классы представлены в горячем кодированном виде: элемент, принадлежащий классу 0, представлен вектором [1, 0, 0]
.
Мои метки ввода (y) имеют размер (batch_size
x sequence_length
x num_classes
).
Моя сеть создает логиты с одинаковой формой.
Предположим, что все мои последовательности имеют длину 4.
Это мой код:
import tensorflow as tf
sequence_length = 4
num_classes = 3
input_y = tf.placeholder(tf.int32, shape=[None, sequence_length, num_classes])
logits = tf.placeholder(tf.float32, shape=[None, None, num_classes])
dense_y = tf.argmax(input_y, -1, output_type=tf.int32)
log_likelihood, _ = tf.contrib.crf.crf_log_likelihood(logits, dense_y, sequence_length)
Я получаю следующую ошибку:
Файл "", строка 1, в
Файл "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/crf/python/ops/crf.py", строка 182, в crf_log_likelihood
transition_params)
Файл "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/crf/python/ops/crf.py", строка 109, в crf_sequence_score
false_fn = _multi_seq_fn)
Файл "/usr/local/lib/python2.7/dist-packages/tensorflow/python/layers/utils.py", строка 206, в smart_cond
pred, true_fn = true_fn, false_fn = false_fn, name = name)
Файл "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/smart_cond.py", строка 59, в smart_cond
Имя = имя)
Файл "/usr/local/lib/python2.7/dist-packages/tensorflow/python/util/deprecation.py", строка 432, в new_func
return func (* args, ** kwargs)
Файл "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/control_flow_ops.py", строка 2063, в cond
orig_res_t, res_t = context_t.BuildCondBranch (true_fn)
Файл "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/control_flow_ops.py", строка 1913, в BuildCondBranch
original_result = fn ()
Файл "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/crf/python/ops/crf.py", строка 95, в _single_seq_fn
array_ops.concat ([example_inds, tag_indices], axis = 1))
Файл "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/gen_array_ops.py", строка 2975, в collect_nd
"GatherNd", params = params, индексы = индексы, имя = имя)
Файл "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/op_def_library.py", строка 787, в _apply_op_helper
op_def = op_def)
Файл "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", строка 3392, в create_op
op_def = op_def)
Файл "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", строка 1734, в init
control_input_ops)
Файл "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", строка 1570, в _create_c_op
поднять ValueError (str (e))
ValueError: indices.shape [-1] должен быть <= params.rank, но должен иметь форму индексов: [?, 5] и форму params: [?, 3] для 'cond / GatherNd' (op: 'GatherNd') с формы ввода: [?, 3], [?, 5] </p>