我正在尝试使用RNNEstimator()
类训练TF估计量,但是在定义估计量时遇到了麻烦。我的目标是:
第一部分似乎工作正常。我定义
def _parse_func(record):
# takes tf record as input and returns the following tensors
# numeric_tensor.shape = (5,170) and y.shape=()
return {'numerical': numeric_tensor,}, y
def input_fn(filenames=['data.tfrecord']):
# Returns parsed tf record i.e. the tf.data.Dataset
dataset = tf.data.TFRecordDataset(filenames=filenames)
dataset = dataset.map(map_func=_parse_func)
dataset = dataset.repeat()
dataset = dataset.batch(batch_size=BATCH_SIZE)
return dataset
现在让我们进入肉的部分。
估计器负责创建会话和图形。因此,我只需按以下格式创建估算器:
# create the column
column = tf.contrib.feature_column.sequence_numeric_column('numerical')
# create the estimator
estimator = RNNEstimator(
head=tf.contrib.estimator.regression_head(),
sequence_feature_columns=[column],
num_units=[32, 16], cell_type='lstm')
# train the estimator
estimator.train(input_fn=input_fn, steps=100)
但是,这不起作用。它给了我各种各样的错误!特别是在此刻,我得到:
TypeError:输入必须为SparseTensor。
此外,我似乎无法将损失更改为对数损失。我尝试通过使用以下参数将其传递给head参数来设置它:
head = tf.contrib.estimator.regression_head(loss_fn=tf.losses.log_loss)