tensorflow导入自己的数据集

在构建tensorflow模型过程中,可谓是曲折颇多,一些教程上教会了我们如何使用下载的现成数据集,但却没有提及如何构建自己的数据集。我自己在学习过程中也走了不少弯路,希望这一系列的博客能解决大家的一些困惑。

我们本地构建数据集主要是以下几个步骤

1.数据处理

2.数据增强 

3.数据导入

4.构建模型

5.训练模型

这篇先讲一下数据处理的一些操作,后面的步骤会慢慢发出来。

1.导入第三方库

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import datasets, layers, optimizers, Sequential, metrics
from tensorflow.python.framework.convert_to_constants import convert_variables_to_constants_v2
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
import math
import pathlib
import random
import matplotlib.pyplot as plt
import numpy as np

这里会注意到,我在导入os库时,在后面加了

os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

这句话的作用是避免报错:This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN)

2.导入数据路径

data_root = pathlib.Path('./image')
all_image_paths = list(data_root.glob('*/*'))
all_image_paths = [str(path) for path in all_image_paths]

我这里的./image是我本地图片集所在的文件夹,image文件夹下是两个分别保存不同种类图片的文件夹,因为我这里是做二分类,所以只有两个不同种类的文件夹,如果大家需要构建识别多种图片的模型,可以添加其他文件夹。

 3.随机打乱图片,这一步的目的是为了让图片集去特殊化,提高模型的准确率,因为如果你的图片中有比较相近的,而且数量比较多,会影响模型的学习。这一步是调用了random的shuffle,传入图片集列表,随机打乱。

random.shuffle(all_image_paths)

 4.构建标签及索引

其实是构建了一个字典

#列出标签
label_names = sorted(item.name for item in data_root.glob('*/') if item.is_dir())
#为标签分配索引
label_to_index = dict((name, index) for index, name in enumerate(label_names))
#创建列表,存放标签和索引
all_image_labels = [label_to_index[pathlib.Path(path).parent.name]
                    for path in all_image_paths]

5.加载和格式化图片

我们可以看到,tf.image.decode_jpeg(image,channels=3,这句话的作用是把图片变成三通道图,即RGB式图片。需要强调一下,tf.image.resize()这个小东西好用的很,可以把你的图片统一大小,这在后面我们训练模型是必须的,统一大小的图片更有利于我们的模型学习。而image/255.0是为了使图像进行归一化,得到的数值范围为[0, 1],彩色图片会变成灰图。

load_and_prepro_image()这个函数就是读取传入路径的图片集,然后返回值是经过了preprocess_image 这个函数的调用,将返回的图片处理为灰度图,比较简单暴力。

#加载和格式化图片
def preprocess_image(image):
    image = tf.image.decode_jpeg(image,channels=3)
    image = tf.image.resize(image,[192,192])
    image /= 255.0
    return image

def load_and_prepro_image(path):
    image = tf.io.read_file(path)
    return preprocess_image(image)
for i in range(len(all_image_paths)):
    image_path = all_image_paths[i]
    label = all_image_labels[i]
    plt.imshow(load_and_prepro_image(image_path))
    plt.grid(False)
    plt.xlabel(image_path)
    plt.title(label_names[label].title())
    #plt.show()

然后关于这个for循环,其实不是必须的,只是为了方便我们检查图片的处理效果,调用的库是matplotlib,python比较有名的绘图库。

就先到这,后会有期。

下面是全部源码,tensorflow版本是2.5,py版本3.7,cuda11.6。

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import datasets, layers, optimizers, Sequential, metrics
from tensorflow.python.framework.convert_to_constants import convert_variables_to_constants_v2
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
import math
import pathlib
import random
import matplotlib.pyplot as plt
import numpy as np

#数据处理
#导入数据路径
data_root = pathlib.Path('./image')
all_image_paths = list(data_root.glob('*/*'))
all_image_paths = [str(path) for path in all_image_paths]
#随机打乱图片
random.shuffle(all_image_paths)
#列出标签
label_names = sorted(item.name for item in data_root.glob('*/') if item.is_dir())
#为标签分配索引
label_to_index = dict((name, index) for index, name in enumerate(label_names))
#创建列表,存放标签和索引
all_image_labels = [label_to_index[pathlib.Path(path).parent.name]
                    for path in all_image_paths]
#加载和格式化图片
def preprocess_image(image):
    image = tf.image.decode_jpeg(image,channels=3)
    image = tf.image.resize(image,[192,192])
    image = image/255.0
    return image

def load_and_prepro_image(path):
    image = tf.io.read_file(path)
    return preprocess_image(image)
for i in range(len(all_image_paths)):
    image_path = all_image_paths[i]
    label = all_image_labels[i]
    plt.imshow(load_and_prepro_image(image_path))
    plt.grid(False)
    plt.xlabel(image_path)
    plt.title(label_names[label].title())
    #plt.show()

  • 11
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 在 TensorFlow导入 MNIST 数据集的方法如下: 1. 首先需要安装 TensorFlow 和 Numpy,可以使用 `pip install tensorflow numpy` 安装。 2. 导入 TensorFlow 和 Numpy,并使用 TensorFlow 的 keras 模块加载 MNIST 数据集。 ```python import tensorflow as tf (x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data() ``` 3. 可以使用 `x_train`,`y_train`,`x_test` 和 `y_test` 变量来访问 MNIST 数据集中的训练数据和测试数据。 注意:如果你使用的版本是 Tensorflow 2.x以上,使用tf.keras.datasets.mnist.load_data()会报错,需要使用tf.keras.datasets.mnist.load_data(path='mnist.npz') ### 回答2: TensorFlow 是谷歌推出的一个开源机器学习框架,其具有良好的库函数、高效的计算能力、灵活可扩展、易于调试及部署等优点,是当前深度学习领域中应用广泛的框架之一。在 TensorFlow 中,MNIST 数据集是非常重要的一个标准数据集,因此学习如何导入 MNIST 数据集是很有必要的。 MNIST 数据集是一个手写数字数据集,包含 10 个类别,每个类别包含大约 7,000 个不同大小的灰度图像。在 TensorFlow 中,MNIST 数据集是有专门的模块进行处理的,可以方便地读取和使用。 在 TensorFlow导入 MNIST 数据集有多种方法,其中比较常见的有以下两种: 1. 使用 TensorFlow 内置的模块导入 MNIST 数据集 通过以下代码可以使用 TensorFlow 内置的模块直接导入 MNIST 数据集: ``` import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data mnist = input_data.read_data_sets("MNIST_data/", one_hot=True) ``` 其中,read_data_sets 函数的第一个参数指定 MNIST 数据集的存储路径,one_hot=True 表示采用 One-Hot 编码将标签转换为独热向量形式。使用后,我们可以像访问字典一样访问 MNIST 数据集。 2. 使用 Python 的第三方库 scikit-learn 导入 MNIST 数据集 使用 scikit-learn 导入 MNIST 数据集的代码如下: ``` from sklearn.datasets import fetch_mldata mnist = fetch_mldata('MNIST original', data_home='./') ``` 其中,fetch_mldata 函数的第一个参数指定要加载数据集名称,第二个参数指定存储路径。使用 after_import() 函数可以访问 MNIST 数据集。 总的来说,在 TensorFlow导入 MNIST 数据集非常方便,直接使用内置的模块就可以轻松导入,使用 Python 的第三方库也可以实现数据的导入。通过导入 MNIST 数据集,我们可以更好地了解 TensorFlow深度学习领域的应用。 ### 回答3: TensorFlow是一个广泛使用的开源机器学习框架,可用于各种任务,如分类、回归、聚类等。其中,MNIST数据集是一个常用的手写数字识别数据集,它包含了一系列的灰度图像和相应的标签。 TensorFlow支持导入MNIST数据集并对其进行预处理。下面介绍如何导入MNIST数据集: 首先,需要从TensorFlow导入MNIST数据集。可以通过以下代码来完成: ``` from tensorflow.examples.tutorials.mnist import input_data mnist = input_data.read_data_sets("MNIST_data/", one_hot=True) ``` 这将从MNIST_data文件夹中下载MNIST数据集,并将其分成三个部分:训练集、验证集和测试集。其中,训练集用于训练模型,验证集用于调整模型的超参数(如学习率、批大小等),测试集用于评估模型的性能。 接着,可以使用以下代码来检查数据的维度和大小: ``` print("Training data shape: {}".format(mnist.train.images.shape)) print("Training label shape: {}".format(mnist.train.labels.shape)) print("Validation data shape: {}".format(mnist.validation.images.shape)) print("Validation label shape: {}".format(mnist.validation.labels.shape)) print("Test data shape: {}".format(mnist.test.images.shape)) print("Test label shape: {}".format(mnist.test.labels.shape)) ``` 输出结果应该是: ``` Training data shape: (55000, 784) Training label shape: (55000, 10) Validation data shape: (5000, 784) Validation label shape: (5000, 10) Test data shape: (10000, 784) Test label shape: (10000, 10) ``` 其中,784是因为每张图像是28x28的,所以需要将其展平成一个784维的向量。而标签是一个10维的one-hot向量,表示该图像属于哪个数字类别。 最后,可以使用以下代码来可视化MNIST数据集中的一些样本: ``` import matplotlib.pyplot as plt # Plot the first 10 images for i in range(10): plt.subplot(2, 5, i+1) plt.imshow(mnist.train.images[i].reshape(28, 28), cmap='gray') plt.title('Label: {}'.format(mnist.train.labels[i])) plt.show() ``` 这将绘制前10个训练图像。 通过这些步骤,我们可以轻松地导入、预处理和可视化MNIST数据集,为机器学习任务打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冯简

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值