Как использовать StreamingDataFeeder в качестве contrib_learn.Estimator.fit() input_fn?
Я недавно начал использовать tensorflow.contrib.learn
(skflow) библиотека и очень нравится. Тем не менее, я столкнулся с проблемой использования Estimator
, функция подгонки использует либо
- (
X
,Y
, а такжеbatch_size
) - проблема с этим подходом состоит в том, что он не поддерживает предоставление для указания количества эпох и разрешения произвольного источника данных. input_fn
- кроме того, установка эпох дает мне гораздо больше гибкости в отношении источника обучения (который в моем случае исходит непосредственно из базы данных).
Теперь я знаю, что могу создать input_fn, который читает файлы, однако, поскольку я не заинтересован в работе с файлами, следующие функции для меня бесполезны:
tf.contrib.learn.read_batch_examples
tf.contrib.learn.read_batch_features
tf.contrib.learn.read_batch_record_features
В идеале я хотел бы использовать StreamingDataFeeder в качестве input_fn. Есть идеи, как мне этого добиться?
1 ответ
StreamingDataFeeder
используется, когда вы предоставляете итераторы как x
/ y
в fit
/predict
/evaluate
из Estimator
,
Пример:
x = (np.array([i]) for i in xrange(10**10)) # use range for python >=3.0
y = (np.array([i + 1]) for i in xrange(10**10))
lr = tf.contrib.learn.LinearRegressor(
feature_columns=[tf.contrib.layers.real_valued_column('')])
# only consumes 1000*10 values from iterators.
lr.fit(x, y, steps=1000, batch_size=10)
Если вы хотите использовать input_fn
для подачи данных - вам нужно использовать графические операции для чтения / обработки данных. Например, вы можете создать операцию C++, которая будет генерировать ваши данные (это может быть порт прослушивания или чтение из базы данных Op) и преобразовывать в Tensor
, В основном это хорошо для чтения данных из файлов, но могут быть реализованы и другие программы чтения.