Getting TypeError: While Creating TFRecords for Image input
Getting TypeError: While Creating TFRecords for Image input
为图像输入创建 TFrecords:如下
char_ids_padded, char_ids_unpadded = encode_utf8_string(text)
print("char_ids_padded:"+str(char_ids_padded))
print("char_ids_unpadded:"+str(char_ids_unpadded))
tf_example = tf.train.Example(features=tf.train.Features(feature={
'image/format': _bytes_feature(b'png'),
'image/encoded': _bytes_feature(image.tostring()),
'image/class': _int64_feature(char_ids_padded),
'image/unpadded_class': _int64_feature(char_ids_unpadded),
'height': _int64_feature(image.shape[0]),
'width': _int64_feature(image.shape[1]),
'orig_width': _int64_feature(image.shape[1]/num_of_views),
'image/text': _bytes_feature(text)
}))
def _int64_feature(value):
return tf.train.Feature(int64_list=tf.train.Int64List(value=[value]))
def _bytes_feature(value):
return tf.train.Feature(bytes_list=tf.train.BytesList(value=[value]))
char_ids_padded、char_ids_unpadded 的输出如下:
char_ids_padded:[47, 13, 16, 13, 16, 16, 16, 52, 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]
char_ids_unpadded:[47, 13, 16, 13, 16, 16, 16, 52]
注意:char_ids_padded 是列表格式,类型为 int,仍然在使用 tf.train.Features 映射时,出现 TypeError 错误: [47, 13, 16, 13, 16, 16, 16, 52, 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] 的类型为 "class 'list'",但应为以下之一:("class 'int'",)
您已经将列表传递给 tf.train.Int64List
,因此您不需要创建包含 _int64_feature
参数的新列表。也就是说,你应该尝试改变
tf.train.Int64List(value=[value])
到
tf.train.Int64List(value=value)
在 _int64_feature
函数中。
当我运行下面的代码时,它起作用了:
def _int64_feature(value):
return tf.train.Feature(int64_list=tf.train.Int64List(value=value))
char_ids_padded = [47, 13, 16, 13, 16, 16, 16, 52, 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]
tf_example = tf.train.Example(features=tf.train.Features(feature={
'image/class': _int64_feature(char_ids_padded),
}))
为图像输入创建 TFrecords:如下
char_ids_padded, char_ids_unpadded = encode_utf8_string(text)
print("char_ids_padded:"+str(char_ids_padded))
print("char_ids_unpadded:"+str(char_ids_unpadded))
tf_example = tf.train.Example(features=tf.train.Features(feature={
'image/format': _bytes_feature(b'png'),
'image/encoded': _bytes_feature(image.tostring()),
'image/class': _int64_feature(char_ids_padded),
'image/unpadded_class': _int64_feature(char_ids_unpadded),
'height': _int64_feature(image.shape[0]),
'width': _int64_feature(image.shape[1]),
'orig_width': _int64_feature(image.shape[1]/num_of_views),
'image/text': _bytes_feature(text)
}))
def _int64_feature(value):
return tf.train.Feature(int64_list=tf.train.Int64List(value=[value]))
def _bytes_feature(value):
return tf.train.Feature(bytes_list=tf.train.BytesList(value=[value]))
char_ids_padded、char_ids_unpadded 的输出如下:
char_ids_padded:[47, 13, 16, 13, 16, 16, 16, 52, 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]
char_ids_unpadded:[47, 13, 16, 13, 16, 16, 16, 52]
注意:char_ids_padded 是列表格式,类型为 int,仍然在使用 tf.train.Features 映射时,出现 TypeError 错误: [47, 13, 16, 13, 16, 16, 16, 52, 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] 的类型为 "class 'list'",但应为以下之一:("class 'int'",)
您已经将列表传递给 tf.train.Int64List
,因此您不需要创建包含 _int64_feature
参数的新列表。也就是说,你应该尝试改变
tf.train.Int64List(value=[value])
到
tf.train.Int64List(value=value)
在 _int64_feature
函数中。
当我运行下面的代码时,它起作用了:
def _int64_feature(value):
return tf.train.Feature(int64_list=tf.train.Int64List(value=value))
char_ids_padded = [47, 13, 16, 13, 16, 16, 16, 52, 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]
tf_example = tf.train.Example(features=tf.train.Features(feature={
'image/class': _int64_feature(char_ids_padded),
}))