Я пишу высокоуровневое приложение тензорного потока точно так же, как этот минст-оценщик - это сборка, за исключением того, что я создаю простую RNN, которая предсказывает последовательности. Я новичок в тензорном потоке, поэтому я пытаюсь разобраться в проблеме, которая может быть на самом деле простой для людей, которые раньше работали с высокоуровневым api тензорного потока.
Вот фрагмент моего кода, чтобы дать представление:
def main(argv=None):
"""Run the training experiment."""
....
# Setup the Estimator
model_estimator = build_estimator(config, params)
# Setup and start training and validation
train_spec = tf.estimator.TrainSpec(
input_fn=lambda: get_train_inputs(128),
max_steps=2000)
...
tf.estimator.train_and_evaluate(model_estimator, train_spec, eval_spec)
def build_estimator(config, params):
return tf.estimator.Estimator(
model_fn=model_fn,
config=config,
params=params,
)
def model_fn(features, mode, params):
#Input data
_inputs = tf.placeholder(tf.int32, shape=[batch_size, times_steps])
_labels = tf.placeholder(tf.float32, shape=[batch_size, num_classes])
# Sequence lengths for dynamic allocation
_seqlens = tf.placeholder(tf.int32, shape=[batch_size])
...
return tf.estimator.EstimatorSpec(
mode=mode,
predictions=predictions,
loss=loss,
train_op=train_op,
eval_metric_ops=eval_metric_ops
)
Вот моя входная функция pipleine:
# Get train inputs function
def get_train_inputs(batch_size):
def train_inputs(batch_size):
# Build dataset iterator
x_batch, y_batch, seqlen_batch = sequence_generator.get_sentence_batch(
batch_size, sequence_generator.train_x, sequence_generator.train_y, sequence_generator.train_seqlens)
features={'_inputs': x_batch, '_labels': y_batch, '_seqlens': seqlen_batch}
return features
return train_inputs(batch_size)
Из-за размера моего кода я вставил сюда только соответствующие фрагменты кода. Проблема здесь в том, что во время:
train_spec = tf.estimator.TrainSpec(
input_fn=lambda: get_train_inputs(128),
max_steps=2000)
get_train_inputs(128)
подает features
словарь в заполнитель _inputs model_fn
, поэтому _labels
и _seqlens
остаются пустыми и выдают ошибку во время выполнения, если для этих заполнителей не указаны значения. model_fn
принимает только два параметра функции: features
и labels
. Как ввести в модель все три параметра _inputs
, _labels
и _seqlens
?
Любые предложения будут высоко оценены.
ПРИМЕЧАНИЕ. Причина ввода третьего параметра _seqlens
заключается в том, что я использую tf.nn.dynamic_rnn
в моем model_fn
, который требует длины последовательности, тогда как метки используются в tf.nn.softmax_cross_entropy_with_logits
в моей функции softmax.