您好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文件中读取我的样本。
在此先感谢,任何帮助和建议将不胜感激。