В настоящее время я работаю над проектом, основанным на глубоком обучении, где я использую tfrecords для более быстрого обучения нейронной сети. На самом деле я закодировал свои данные в «.tfrecords», но при декодировании он показывает тензор без формы. Я много раз проверял свой код, но ошибок не нашел. Кто-нибудь может мне с этим помочь ? Заранее спасибо. Вот мой код..
def _bytes_feature(value):
#Returns a bytes_list from a string / byte
if isinstance(value, type(tf.constant(0))):
value = value.numpy() # BytesList won't unpack a string from an EagerTensor.
return tf.train.Feature(bytes_list=tf.train.BytesList(value= [value]))
def serialize_example(image,xmins):
feature = {
'image':
_bytes_feature(image),
'xmins':
tf.train.Feature(float_list=tf.train.FloatList(value=[xmins])),
}
example_proto = tf.train.Example(features=tf.train.Features(feature=feature))
#print(example_proto.Features.feature['xmins'])
return example_proto.SerializeToString()
with tf.io.TFRecordWriter('/content/'+'prac.tfrecords') as writer:
image = np.array(image,dtype=int)
byte_image = tf.io.serialize_tensor(image)
xmins= float(2.3)
example = serialize_example(byte_image,xmins)
writer.write(example)
Для простоты я взял только два типа ввода, изображение и xmins. Здесь я сгенерировал '.tfrecords'
Расшифровка
def read_tf_records(example_proto):
image_feature_description = {
'image': tf.io.FixedLenFeature((), tf.string),
'xmins': tf.io.VarLenFeature(tf.float32),
}
sample = tf.io.parse_single_example(example_proto,image_feature_description)
image =tf.io.parse_tensor(sample['image'],out_type = tf.float64)
xmins = sample['xmins']
#image = tf.reshape(image,(416,416))
#print(image)
#xmins =tf.sparse.to_dense(sample['xmins'])
return image,xmins
path='/content/prac.tfrecords'
tfrecord_dataset = tf.data.TFRecordDataset(path)
decoded_data= tfrecord_dataset.map(read_tf_records)
print(decoded_data)
<MapDataset shapes: (<unknown> (None,)), types: (tf.float64, tf.float32)>
Как вы думаете, что вы должны получить взамен? Что произошло, когда вы попытались проверить некоторые промежуточные значения из процесса — все ли else выглядит так, как вы ожидаете?
Если я кодирую и декодирую только одну функцию (я имею в виду одно изображение и одиночные xmins) без преобразования в «.tfrecords», это работает. map(read_tf_records') он не дает ничего в качестве вывода.
Повторите попытку после изменения <image =tf.io.parse_tensor(sample['image'],out_type = tf.float64)> на <image =tf.ensure_shape(tf.io.parse_tensor(sample['image'],out_type) = tf.float64), ())> (ссылка) github.com/tensorflow/tensorflow/issues/34989
После этого я также получаю тот же результат.