您好stackoverflow社区 .

我的问题/问题是下一个 . 我有一个TfRecord文件,我想将它提供给模型 . 该文件中的条目是int64的列表,可变大小 . 类似于:[121,122,158 ..] [10,15],第一个表示RNN网络的输入,第二个表示某个目标 . 但是,我一直在努力创造适当的管道,阅读那些entires . 我认为主要原因是因为它们的大小不同 . 到目前为止,我有以下内容:使用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 ...对于特征张量,我希望序列中的每个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] Invalid argument: Shape mismatch in tuple component 1. Expected [1038,49690], got [1,49690] 这里49690是TOTAL_ITEMS常量

如果我运行它显然没有't work. I'仍然在学习张量流,我不知道这个错误真的来自哪里 . 但我相信在调用tf.train.batch中会发生一些事情,这不允许我创建所需的批次 . 所以问题是,我如何创建我的批量元素,我需要的是每个训练示例 [ batch_size , ? , TOTAL_ITEMS] 与各自的目标 [batch_size , TOTAL_ITEMS] 和?是序列中的输入数量 .

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

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