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])) def convert_to_tfrecord(images_list,labels_list,save_dir,name): filename = os.path.join(save_dir,name+'.tfrecords') n_samples = len(labels_list) writer = tf.python_io.TFRecordWriter(filename) print('\nTransform start.........') for i in np.arange(0,n_samples): try: image = cv2.imread(images_list[i]) image_raw = image.tostring() label = int(labels_list[i]) example = tf.train.Example(features = tf.train.Features(feature = {'label':int64_feature(label),'image_raw':bytes_feature(image_raw)})) writer.write(example.SerializeToString()) except IOError as e: print('Could not read:',images_list[i]) writer.close() print('Transform done!') image,label =get_files(train_dir) convert_to_tfrecord(image,label,"",name)
问题: example = tf.train.Example(features = tf.train.Features(feature = {'label':int64_feature(label),'image_raw':bytes_feature(image_raw)}))
File "F:/opencv/tiaoshi.py", line 44, in int64_feature
return tf.train.Feature(int64_list = tf.train.Int64List(value = value))
TypeError: Value must be iterable
解决:
def convert_to_tfrecord(images_list, labels_list, save_dir, name):
filename = os.path.join(save_dir, name + '.tfrecodes')
n_samples = len(labels_list)
writer = tf.python_io.TFRecordWriter(filename)
print("\nTransform start......(%d in total)", n_samples)
for i in np.arange(0, n_samples):
print("my_list------", images_list[i])
try:
image = cv2.imread(images_list[i]) # type(image) must be array!
image_raw = image.tostring()
label = int(labels_list[i])
example = tf.train.Example(features=tf.train.Features(
feature={''
'label': tf.train.Feature(int64_list=tf.train.Int64List(value=[label])),
'image_aw': tf.train.Feature(bytes_list=tf.train.BytesList(value=[image_raw]))
}))
writer.write(example.SerializeToString())
except IOError as e:
print("Could not read:", images_list[i])
writer.close()
print("Transform done!")