Tensorflow - 批量变量形状张量 - TFRecord

时间:2017-05-31 16:14:52

标签: python machine-learning tensorflow

您好stackoverflow社区。

我的问题/问题是下一个问题。我有一个TfRecord文件,我想将其提供给模型。该文件中的条目是int64的列表,可变大小。就像是: [121,122,158 ..] [10,15] 第一个表示RNN网络的输入,第二个表示某个目标。但是我一直在努力创造适当的管道线来读取这些内容。我认为主要原因是因为它们的大小不同。 到目前为止,我有以下内容:使用string_input_producer构建队列并解析readed元素:

filename_queue = tf.train.string_input_producer(   data_files    )

        _ , encoded_examples = tf.TFRecordReader(
            options = tf.python_io.TFRecordOptions  (
                compression_type= TFRecordCompressionType.GZIP
            )
        ).read_up_to( filename_queue , self.batch_size)



        feature, target =  parse_examples( encoded_examples )

和parse_examples函数:

def parse_examples( examples ):
    feature_map = {
        'target': tf.VarLenFeature(
            dtype = tf.int64
        ) ,
        'feature': tf.VarLenFeature(
        dtype = tf.int64
        )
    }
    parsed = tf.parse_example(examples , feature_map )
   continue below...

然后我继续操纵这个列表,我想做的是,获取目标输入,读取它们的元素并进行单一编码表示,因此输出目标的形状应该是[Nmax],[0, 0 .. 1,1,0] 对于特征张量,我希望序列中的每个int表示一个单张张量,在这种情况下,这个张量的形状应该是[Nsamples,Nmax],其中Nsamples是从记录中提取的元素的数量。

所以我做了以下事情:

sparse_target_indices = tf.reshape( parsed['target'].values , shape=(-1 , ) )
target = tf.one_hot( sparse_target_indices , TOTAL_ITEMS , on_value = 1.0 ,
                         off_value = 0.  )

target = tf.reduce_sum( target , 0   )
target = tf.reshape( target , [ -1 ,TOTAL_ITEMS ] )

并且我认为我有正确的输入。 对于我做类似的功能。

sparse_feature_indices = tf.reshape(  parsed['feature'].indices , shape=(-1 , ) )
features = tf.one_hot( sparse_feature_indices , TOTAL_ITEMS , on_value = 1.0 ,
                           off_value = 0.0 ,  )

features = tf.reshape( features , shape = (-1  ,TOTAL_ITEMS )  )

目标的形状是[1,TOTAL_ITEMS]和特征[? ,TOTAL_ITEMS]所以我假设我走在正确的轨道上。但接下来是问题,当我尝试用这个张量使用

构建批处理时
#continuation...
result = tf.train.batch(
            [feature,target] , batch_size = self.batch_size  ,
            capacity = capacity ,
            allow_smaller_final_batch=True ,

            enqueue_many = True 
        )

如果不运行图表,我会收到警告:

tensorflow / core / framework / op_kernel.cc:993]无效参数:元组组件中的形状不匹配1.预期[1038,49690],得到[1,49690] 这里49690是TOTAL_ITEMS恒定

如果我运行该操作,它显然不起作用。我还在学习张量流,我不知道这个错误到底在哪里。但我相信在调用中tf.train.batch正在进行的事情,这不允许我创建所需的批次。所以问题是,我如何创建我的一批元素,我需要的是每个训练示例 [batch_size ,? ,TOTAL_ITEMS] 各自的目标 [batch_size,TOTAL_ITEMS] 和?是序列中的输入数量。

或者有更好的方法来做到这一点?考虑到我想从TFRecord文件中读取我的样本。

在此先感谢,任何帮助和建议将不胜感激。

0 个答案:

没有答案