深度学习小白之路-tensorflow中如何读取自己的数据集

2023-05-16

前言

自己在学习深度学习的时候,书上给的练习的小项目是mnist数字手写体识别,CIFAR-10分类等,这些数据集都是有封装好的数据读取函数,可以从tensorflow直接调用,但是当我们第一次想要用自己的数据去跑代码的时候发现有些无从下手,所以我下面简单写一下二维数据集的读取,怎么样去嵌入到你下载的基于tensorflow的代码中去。

1. tensorflow的数据格式

tensorflow中的数据格式为tensor,关于tensor可自行百度;
其中数据流的格式为
[batch_size, depth, Height, Weight, channel]或者
[batch_size, Height, Weight, channel],
输入数据的格式由占位符确定 tf.placeholder (tf.float32,[…])

调试代码的时候强烈建议使用jupyter notebook

2. 使用opencv读取自己的数据集

一般地,我们利用opencv读取自己的数据比较方便

cv2.imread()输出是[Depth, Height, Weight]或者[Height, Weight]
数据格式为numpy,为了和tensor的数据格式对应,在读取函数里
我们将其在axis=-1上扩展维度(channel),而Batch_size这个轴可以先定义一个数组,然后把每次读取的图像写到里面,具体见下面的代码。

import cv2,os
import numpy as np

def img_reader(file_path, batch_size, out_shape):
	#先定义一个临时的缓冲数组
	temp_buffer = np.zeros([batch_size, out_shape[0], out_shape[1], 1])
	file_name = os.listdir(file_path)
	np.random.shuffle(file_name)
	for i in range(batch_size):
		img = cv2.imread(file_path + file_name[i])
		img = cv2.resize(img, out_shape)
		img = np.expand_dims(img,axis=-1)
		temp_buffer[i] = img
		return temp_buffer / 255 #归一化,根据自己情况写

这是函数的输出就是[batch_size, Height, Weight, channel]
这个channel的作用是在网络训练中会有很多不同的通道,再根据你有多少个卷积核,可以计算变量的个数,具体可以看:
卷积神经网络的几个小细节

这样,就可以在网络中feed_dir中送数据了

sess.run(train_op, feed_dir:{x: img_reader(...)})

图像剪切

这里再说一个特殊的情况,如果你的数据是[596, 496]的,但是你想切掉一些没有用的,把它变成[496, 496],那么你可以使用WIN10的图片编辑,找到你要保留的像素区间,剪切;

img = cv2.imread(file_path + file_name[i])
img = img[0:496, :]
cv2.imwrite(save_path + file_name[i])
#如果高度的上下切除50个像素
img = cv2.imread(file_path + file_name[i])
img = img[50:447, :]

批量处理的话就是

file_name = os.listdir(file_path)
for i in range(len(file_name)):
	img = cv2.imread(file_path + file_name[i])
	img = img[0:496, :]
	cv2.imwrite(save_path + file_name[i])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深度学习小白之路-tensorflow中如何读取自己的数据集 的相关文章

随机推荐