带有gcloud ml引擎作业的tensorflow估计器RNN分类器的值错误

带有gcloud ml引擎作业的tensorflow估计器RNN分类器的值错误,tensorflow,lstm,gcloud,recurrent-neural-network,tensorflow-estimator,Tensorflow,Lstm,Gcloud,Recurrent Neural Network,Tensorflow Estimator,我正在处理task.py文件以提交gcloud MLEngine作业。以前,我使用tensorflow.estimator.DNNClassifier成功地提交了包含我的数据的作业(仅包含加密货币价格和数量的8列连续数字数据;无分类) 我现在切换到tensorflow contrib估计器RNNClassifier。这是我的相关部分的当前代码: def get_feature_columns(): return [ tf.feature_column.numeric_column

我正在处理task.py文件以提交gcloud MLEngine作业。以前,我使用tensorflow.estimator.DNNClassifier成功地提交了包含我的数据的作业(仅包含加密货币价格和数量的8列连续数字数据;无分类)

我现在切换到tensorflow contrib估计器RNNClassifier。这是我的相关部分的当前代码:

def get_feature_columns():
  return [
      tf.feature_column.numeric_column(feature, shape=(1,))
      for feature in column_names[:len(column_names)-1]
  ]

def build_estimator(config, learning_rate, num_units):
  return tf.contrib.estimator.RNNClassifier(
    sequence_feature_columns=get_feature_columns(),
    num_units=num_units,
    cell_type='lstm',
    rnn_cell_fn=None,
    optimizer=tf.train.AdamOptimizer(learning_rate=learning_rate),
    config=config)

estimator = build_estimator(
    config=run_config,
    learning_rate=args.learning_rate,
    num_units=[32, 16])

tf.estimator.train_and_evaluate(estimator, train_spec, eval_spec)
但是,我得到以下ValueError:

ValueError: All feature_columns must be of type _SequenceDenseColumn. You can wrap a sequence_categorical_column with an embedding_column or indicator_column. Given (type <class 'tensorflow.python.feature_column.feature_column_v2.NumericColumn'>): NumericColumn(key='LTCUSD_close', shape=(1,), default_value=None, dtype=tf.float32, normalizer_fn=None)
ValueError:所有要素列必须为_SequenceDenseColumn类型。您可以使用嵌入列或指示符列包装序列列和分类列。给定(类型):NumericColumn(key='LTCUSD\u close',shape=(1,),默认值=None,dtype=tf.float32,normalizer\u fn=None)

我不理解这一点,因为数据不是分类的。

您之所以会出现此错误,是因为您使用了数字特征列,而这种估计器只能接受序列特征列,因为您可以在屏幕上看到它

因此,您必须使用@Ben7指出的数值列,而不是数字列。然而,根据文件,序列特征列需要稀疏传感器,序列数值列是稠密张量。这似乎是矛盾的

这里是我用来解决这个问题的一个变通方法(我从中获取了to_稀疏张量函数):

def到_稀疏_张量(密集):
#序列\数值\列默认值为float32
零=tf.constant(0.0,dtype=tf.dtypes.float32)
式中=tf.不等于(稠密,零)
指数=tf.where(where)
值=tf.聚集(密集,索引)
返回tf.SparseTensor(索引、值、tf.shape(稠密、out_type=tf.dtypes.int64))
def get_功能_列():
返回[
tf.feature\u column.sequence\u numeric\u column(feature,shape=(1,),normalizer\u fn=to\u sparse\u tensor)
对于列名称中的要素[:len(列名称)-1]
]
将tf.feature\u column.numeric\u column更改为tf.contrib.feature\u column.sequence\u numeric\u column会导致:“类型错误:输入必须是SparseTensor。”