我尝试使用forward_特性来获取cloudml的实例键,但是我总是遇到一些错误,我不知道如何修复。使用的预处理部分tf.变换是对https://github.com/GoogleCloudPlatform/cloudml-samples/tree/master/reddit_tft的修改,其中实例键是一个字符串,其他的都是一堆浮点。在
def gzip_reader_fn():
return tf.TFRecordReader(options=tf.python_io.TFRecordOptions(
compression_type=tf.python_io.TFRecordCompressionType.GZIP))
def get_transformed_reader_input_fn(transformed_metadata,
transformed_data_paths,
batch_size,
mode):
"""Wrap the get input features function to provide the runtime arguments."""
return input_fn_maker.build_training_input_fn(
metadata=transformed_metadata,
file_pattern=(
transformed_data_paths[0] if len(transformed_data_paths) == 1
else transformed_data_paths),
training_batch_size=batch_size,
label_keys=[],
#feature_keys=FEATURE_COLUMNS,
#key_feature_name='example_id',
reader=gzip_reader_fn,
reader_num_threads=4,
queue_capacity=batch_size * 2,
randomize_input=(mode != tf.contrib.learn.ModeKeys.EVAL),
num_epochs=(1 if mode == tf.contrib.learn.ModeKeys.EVAL else None))
estimator = KMeansClustering(num_clusters=8,
initial_clusters=KMeansClustering.KMEANS_PLUS_PLUS_INIT,
kmeans_plus_plus_num_retries=32,
relative_tolerance=0.0001)
estimator = tf.contrib.estimator.forward_features(
estimator,
'example_id')
train_input_fn = get_transformed_reader_input_fn(
transformed_metadata, args.train_data_paths, args.batch_size,
tf.contrib.learn.ModeKeys.TRAIN)
estimator.train(input_fn=train_input_fn)
如果我要在keys列中传递训练特性,那么我会得到错误Tensors in list passed to 'values' of 'ConcatV2' Op have types [float32, float32, string, float32, float32, float32, float32, float32, float32, f
loat32, float32, float32, float32, float32, float32, float32, float32, float32, float32, float32, float32, float32, float32, float32] that don't all match.
但是,如果我在训练期间没有传递实例键,那么我会得到一个错误值,说明该键不存在于这些特性中。另外,如果我要将forward_features部分中的key column name从'example'u id'更改为某个不是列的随机名称,那么我仍然会得到前一个错误而不是后一个错误。有人能帮我弄明白吗?在
请检查以下内容:
(1)前向功能仅适用于TF.估计器. 确保您没有使用贡献学习估计器. (更新:您使用的类继承自tf.估计器)在
(2)确保输入函数在键列中读取。因此,键列必须是输入数据集的一部分。在
(3)在下列情况下tf.变换,#2表示转换元数据必须反映密钥的架构。您看到的错误消息似乎表明模式将其指定为float,而实际上它是一个字符串。或者类似的事情。在
(4)确保您的模型未使用键列。因此,您不应该用它创建FeatureColumn。换言之,模型只需将输入所读取的键传递给预测器。在
(5)如果在输出中看不到键,请查看此解决方法是否有助于:
https://github.com/GoogleCloudPlatform/training-data-analyst/blob/master/courses/machine_learning/deepdive/07_structured/babyweight/trainer/model.py#L132
本质上,forward_特性会改变内存中的图形,但不会更改导出的签名。我的解决方案解决了这个问题。在
相关问题 更多 >
编程相关推荐