Почему я получаю «Нет» при декодировании Tfrecords?

avatar
Pritesh
8 августа 2021 в 20:27
77
0
0

В настоящее время я работаю над проектом, основанным на глубоком обучении, где я использую 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)>
Источник
Karl Knechtel
8 августа 2021 в 20:32
0

Как вы думаете, что вы должны получить взамен? Что произошло, когда вы попытались проверить некоторые промежуточные значения из процесса — все ли else выглядит так, как вы ожидаете?

Pritesh
9 августа 2021 в 11:53
0

Если я кодирую и декодирую только одну функцию (я имею в виду одно изображение и одиночные xmins) без преобразования в «.tfrecords», это работает. map(read_tf_records') он не дает ничего в качестве вывода.

TFer2
19 августа 2021 в 13:48
0

Повторите попытку после изменения <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

Pritesh
21 августа 2021 в 21:36
0

После этого я также получаю тот же результат.

Ответы (0)