TensorFlow数据集,其中每个张量是序列序列

时间:2019-10-28 05:44:30

标签: python tensorflow tensorflow-datasets tensorflow-serving tensorflow-estimator

我有三个问题。

1。。我需要将要素的pandas.DataFrame列转换为tf.data.Dataset

2。。我需要为我的tf.estimator.DNNRegressor feature_columns参数创建一个tf.feature_column。

3。。我需要创建一个serving_input_receiver_fn,以便最终为模型提供服务。

我的原始数据是符号字符串。我对它们进行了热编码,以遵循类似的格式。

datum1 = [[0,0,0,0,0,0,0,0,...,0,0,0,1,0,0,0,0],
          [0,0,0,1,0,0,0,0,...,0,0,0,0,0,0,0,0],
          [0,0,1,0,0,0,0,0,...,0,0,0,0,0,0,0,0],
                            .
                            .
                            .
          [1,0,0,0,0,0,0,0,...,0,0,0,0,0,0,0,0],
          [0,0,0,0,0,0,1,0,...,0,0,0,0,0,0,0,0],
          [0,0,0,0,0,0,0,0,...,0,0,0,0,0,0,1,0]]

datum2 = [[0,0,0,0,0,0,0,0,...,0,0,0,1,0,0,0,0],
          [0,0,0,1,0,0,0,0,...,0,0,0,0,0,0,0,0],
          [0,0,1,0,0,0,0,0,...,0,0,0,0,0,0,0,0],
                            .
                            .
                            .
          [1,0,0,0,0,0,0,0,...,0,0,0,0,0,0,0,0],
          [0,0,0,0,0,0,1,0,...,0,0,0,0,0,0,0,0],
          [0,0,0,0,0,0,0,0,...,0,0,0,0,0,0,1,0]]

                            .
                            .
                            .

datumN = [[0,0,0,0,0,0,0,0,...,0,0,0,1,0,0,0,0],
          [0,0,0,1,0,0,0,0,...,0,0,0,0,0,0,0,0],
          [0,0,1,0,0,0,0,0,...,0,0,0,0,0,0,0,0],
                            .
                            .
                            .
          [1,0,0,0,0,0,0,0,...,0,0,0,0,0,0,0,0],
          [0,0,0,0,0,0,1,0,...,0,0,0,0,0,0,0,0],
          [0,0,0,0,0,0,0,0,...,0,0,0,0,0,0,1,0]]

注意

a。每个数据的类型为numpy.ndarray

b。每个数据都是pandas.DataFrame的元素。

c。每个基准都是一个特征,其标签类型为float64

因此,这是我从数据框中获取数据集的方法。

def prepare_tf_dataset(dataframe):
    features = dataframe['features'] 
    labels = dataframe['labels'] 
    dataset = tf.data.Dataset.from_tensor_slices((features,labels))
    return dataset

运行代码时,我收到此错误:

TypeError: Expected binary or unicode string, got array([[0, 0, 0, ..., 0, 0, 0],
       [0, 0, 0, ..., 0, 0, 0],
       [0, 0, 0, ..., 0, 0, 0],
       ...,
       [0, 0, 0, ..., 0, 0, 0],
       [0, 0, 0, ..., 0, 0, 0],
       [0, 0, 0, ..., 0, 0, 0]])

为解决此问题,我尝试在每个数据上使用numpy.tostring(),但在此未收到任何错误。但是,这违背了热的目的,在我的脑海中使用了tf.feature_column.numeric_column编码。我在这个想法上弄错了吗?

这些生成tf.data.Dataset的操作针对使用tf.estimator.DNNRegressor.train的具有粘性的input_fn参数

这里TRAINING_DATA是我的一个热序列的数据帧,该热序列带有标签并编码在tf数据集中(弄清楚如何做到这一点是我最后一个问题的目标,但我们假设它已完成)。这段代码应该训练回归器,但是要完成它,我必须在tf.estimator.DNNRegressor中具有正确的feature_columns规范,而我目前没有。

def tf_dataset_input_fn(dataset):
    iterator = dataset.make_one_shot_iterator()
    features,labels = iterator.get_next()
    return {'my_feature':features},labels

train_input = lambda: tf_dataset_input_fn(TRAINING_DATA)
regressor.train(input_fn=train_input,steps=5000)

在将要传递到回归器中的每个张量是序列序列的地方使用什么正确的特征列?数字列是正确的选择吗,sequence_numeric_column函数是否起作用?

这是当前无法正常工作的代码。

feature_cols = [tf.feature_column.numeric_column(key='my_feature')]
regressor = tf.estimator.DNNRegressor(feature_columns = feature_cols,...)

现在让我们假设一切都已启动并运行。该模型已经过培训,现在我正在为其提供服务。我想说的是给定张量的一个例子是序列序列。怎么做?我有一个我了解更好的模型,用于我的serve_input_receiver_fn。

feature_config = {'my_feature': tf.FixedLenFeature([])}                                                                                                           

def serving_input_receiver_fn():                                                                                                                         
    serialized_tf_example = tf.placeholder(dtype = tf.int64,                                                                                             
                                           shape = [None],                                                                                               
                                           name = 'single_smi_input')                                                                                    
    receiver_tensors = {'input_features': serialized_tf_example}                                                                                         
    features = tf.parse_example(serialized_tf_example, feature_config)                                                                                   
    output = tf.estimator.export.ServingInputReceiver(features,receiver_tensors)                                                                         
    return output 

regressor.export_saved_model(PATH,serving_input_receiver_fn) 

我不知如何获得一个固定长度张量的示例,该示例是包含int64类型的序列的序列。

总而言之,我希望将我的一个热门数据框列及其标签列转换为tf.data.Dataset,并为此tf.data.Dataset设置一个适当的feature_column,然后将我的serve_input_receiver_fn()设置为正确。

0 个答案:

没有答案