Я пытаюсь использовать условную потерю случайного поля в графе 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, 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 name = name) File" /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 () File "/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, в gather_nd" GatherNd ", params = params, indices = index, name = name) File" / 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 < / strong> control_input_ops) Файл "/ usr / local / li b / python2.7 / dist-packages / tensorflow / python / framework / ops.py ", строка 1570, в _create_c_op поднять ValueError (str (e)) ValueError: indices.shape [-1] должен быть‹ = params.rank , но видел форму индексов: [?, 5] и форму параметров: [?, 3] для 'cond / GatherNd' (op: 'GatherNd') с входными формами: [?, 3], [?, 5]