Мы хотели бы, чтобы наш оценщик предсказывал слово или следующую работу так же, как клавиатура на вашем смартфоне. Мы хотели бы обучить его текстовому файлу.
Итак, мы пошли вперед и посмотрели API-интерфейс tensorflow и нашли
estimator = RNNEstimator(
head=tf.contrib.estimator.regression_head(),
sequence_feature_columns=[token_emb],
rnn_cell_fn=rnn_cell_fn)
который, кажется, является удобным способом создания оценки для RNN. Теперь мы сталкиваемся с проблемами с колонками функций. Мы настраиваем их таким образом
token_sequence = sequence_categorical_column_with_hash_bucket(
key="text", hash_bucket_size=num_of_categories, dtype=tf.string)
token_emb = embedding_column(categorical_column=token_sequence,
dimension=8)
где 'text'
определен в нашей функции ввода
train_input_fn = tf.estimator.inputs.numpy_input_fn(
x={"text": features},
y=labels,
batch_size=batch_size,
num_epochs=None,
shuffle=True)
где features
- это просто длинный список из 40-символьных последовательностей, взятых из нашего исходного текста.
Даже при вводе произвольных целых чисел в качестве меток мы все равно получаем ошибку при вызове estimator.train(input_fn=train_input_fn, steps=100)
который говорит
'Тип: {}'. Format (type (features))) ValueError: функции должны быть словарем
Tensor
s. Тип:
поэтому мы определенно делаем что-то не так. Любая помощь оценили :)
Существует короткий пример передачи строковых словных функций как SparseTensors в классификатор Estimator
(т.е. языковое моделирование) с одной меткой на шаг в модульных тестах StateSavingRnnEstimator. Это похоже на то, что вы пытаетесь сделать, с оговоркой, что рассматриваемый оценщик устарел; это может иметь смысл брать идеи от него и определять вашу собственную model_fn
.