Я пытаюсь передать данные в tf.estimators
(tf версия 2.1.0) из генераторов Python без особого успеха. Я был бы очень признателен, если бы кто-то указал мне правильное направление.
Это пример того, что я пытаюсь сделать (с фиктивными данными):
import numpy as np
import tensorflow as tf
# Generate mock data and labels
def generator():
while True:
# Generate "features" and "label"
feat1 = np.random.normal(0, 1, size=100)
feat2 = np.random.uniform(-1, 1, size=100)
feat3 = np.random.exponential(1, size=100)
X = np.stack([feat1, feat2, feat3])
label = np.random.choice([0, 1], size=100)
yield X, label
# Input function for the train method
def input_func():
ds = tf.data.Dataset.from_generator(generator=generator,
output_types=(tf.float32, tf.int8))
return ds
feature_columns = []
feature_columns.append(tf.feature_column.numeric_column(key='X', shape=(3,)))
model = tf.estimator.LinearClassifier(feature_columns=feature_columns)
model.train(input_func, max_steps=10)
Запуск примера выше поднимает ValueError: features should be a dictionary of
Тензор s. Given type: <class 'tensorflow.python.framework.ops.Tensor'
.
Я понимаю, что в TF v1 у dataset
был метод make_one_shot_iterator
или что-то подобное, что я больше не могу найти. Я предполагаю, что я упускаю что-то фундаментальное здесь, но я не могу понять это, и я не могу найти соответствующие документы или примеры для TF версии 2.1.0.
Любая помощь или идея будут высоко оценены.
Ура!