浅谈tensorflow中Dataset图片的批量读取及维度的操作详解
三维的读取图片(w,h,c):
importtensorflowastf importglob importos def_parse_function(filename): #print(filename) image_string=tf.read_file(filename) image_decoded=tf.image.decode_image(image_string)#(375,500,3) image_resized=tf.image.resize_image_with_crop_or_pad(image_decoded,200,200) returnimage_resized withtf.Session()assess: print(sess.run(img).shape)
读取批量图片的读取图片(b,w,h,c):
importtensorflowastf
importglob
importos
'''
Dataset批量读取图片
'''
def_parse_function(filename):
#print(filename)
image_string=tf.read_file(filename)
image_decoded=tf.image.decode_image(image_string)#(375,500,3)
image_decoded=tf.expand_dims(image_decoded,axis=0)
image_resized=tf.image.resize_image_with_crop_or_pad(image_decoded,200,200)
returnimage_resized
img=_parse_function('../pascal/VOCdevkit/VOC2012/JPEGImages/2007_000068.jpg')
#image_resized=tf.image.resize_image_with_crop_or_pad(tf.truncated_normal((1,220,300,3))*10,200,200)这种四维形式是可以的
withtf.Session()assess:
print(sess.run(img).shape)#直接初始化就可以,转换成四维报错误,不知道为什么,若谁想明白,请留言报错误
#InvalidArgumentError(seeabovefortraceback):Inputshapeaxis0mustequal4,gotshape[5]
Databae的操作:
importtensorflowastf
importglob
importos
'''
Dataset批量读取图片:
原因:
1.先定义图片名的list,存放在Dataset中from_tensor_slices()
2.映射函数,在函数中,对list中的图片进行读取,和resize,细节
tf.read_file(filename)返回的是三维的,因为这个每次取出一张图片,放进队列中的,不需要转化为四维
然后对图片进行resize,然后每个batch进行访问这个函数,所以get_next()返回的是[batch,w,h,c]
3.进行shuffle,batchrepeat的设置
4.iterator=dataset.make_one_shot_iterator()设置迭代器
5.iterator.get_next()获取每个batch的图片
'''
def_parse_function(filename):
#print(filename)
image_string=tf.read_file(filename)
image_decoded=tf.image.decode_image(image_string)#(375,500,3)
'''
Tensor`withtype`uint8`withshape`[height,width,num_channels]`for
BMP,JPEG,andPNGimagesandshape`[num_frames,height,width,3]`for
GIFimages.
'''
#image_resized=tf.image.resize_images(label,[200,200])
'''images三维,四维的都可以
images:4-DTensorofshape`[batch,height,width,channels]`or
3-DTensorofshape`[height,width,channels]`.
size:A1-Dint32Tensorof2elements:`new_height,new_width`.The
newsizefortheimages.
'''
image_resized=tf.image.resize_image_with_crop_or_pad(image_decoded,200,200)
#returntf.squeeze(mage_resized,axis=0)
returnimage_resized
filenames=glob.glob(os.path.join('../pascal/VOCdevkit/VOC2012/JPEGImages',"*."+'jpg'))
dataset=tf.data.Dataset.from_tensor_slices((filenames))
dataset=dataset.map(_parse_function)
dataset=dataset.shuffle(10).batch(2).repeat(10)
iterator=dataset.make_one_shot_iterator()
img=iterator.get_next()
withtf.Session()assess:
#print(sess.run(img).shape)#(4,200,200,3)
for_inrange(10):
print(sess.run(img).shape)
以上这篇浅谈tensorflow中Dataset图片的批量读取及维度的操作详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。