有没有办法在tensorflow python神经网络中创建我自己的数据集



我正试图根据自己的意愿来训练我的神经网络。目前我正在使用mnist.npz数据集,该数据集通过识别数字来训练神经网络。我想切换到我自己的数据集,但不知道如何切换。我尝试了不同的方法,但没有一种对我自己有效。我的训练准备代码目前看起来是这样的:

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.datasets import mnist
from tensorflow.keras import backend as K
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
def show_min_max(array, i):
random_image = array[i]
print(random_image.min(), random_image.max())
def plot_image(array, i, labels):
plt.imshow(np.squeeze(array[i]))
plt.title(" Class " + str(labels[i]))
plt.xticks([])
plt.yticks([])
plt.show()
img_rows, img_cols = 28, 28  
num_classes = 10 
(train_images, train_labels), (test_images, test_labels) = mnist.load_data(path="mnist.npz")  #training data
(train_images_backup, train_labels_backup), (test_images_backup, test_labels_backup) = mnist.load_data(path="mnist.npz") #untrained backup data
print(train_images.shape) 
print(test_images.shape) 
train_images = train_images.reshape(train_images.shape[0],  img_rows, img_cols, 1) 
test_images = test_images.reshape(test_images.shape[0], img_rows, img_cols, 1) 
input_shape = (img_rows, img_cols, 1) 
plot_image(train_images, 1, train_labels)
show_min_max(train_images, 100) 
train_images[3000:]=255-train_images[3000:] 
train_images = train_images.astype('float32') 
test_images = test_images.astype('float32') 
train_images /= 255 
test_images /= 255 
plot_image(train_images, 100, train_labels) 
show_min_max(train_images, 100) 
train_labels = keras.utils.to_categorical(train_labels, num_classes) 
test_labels = keras.utils.to_categorical(test_labels, num_classes) 

我做的事:

  1. 搜索tensorflow和mnist数据库的代码,以及将哪个单词重定向到我的数据库,但我需要我的数据集(文件夹(是npz文件
  2. 我尝试使用函数image_dataset_from_directory(),但它没有返回我所期望/需要的内容
  3. 把我所有的图像都变成了npz文件,但这仍然无关紧要

这只是我尝试过的许多事情中的3件。如果我能得到帮助,把我的数据集变成一个npz文件,或者只是从基础开始重新启动(从上面的代码开始(这是我所有技术的基础代码(

mnist.load_data()加载的是一个npz文件,其中包含4个数据值,x_train、y_train、x_test、y_test。我不知道这些项目的重要性,也不知道如何将我的数据集(文件夹(转换为npz文件。我在制作过程中遵循了一个教程,因此我有备份变量lol。

这是我目前的数据,不是很大,哈哈。只是等我知道我可以真正使用它https://drive.google.com/drive/folders/1Cvs7ie6232BLI9ZicaUJdyhxUu-JB4kV?usp=sharing

制作自己的数据集可以像以下一样简单:

  1. 遍历文件夹中的每张图片并附加到列表中,确保所有图像的形状相同。为了方便起见,他们可能应该将自己的类作为名称的一部分(class0.png,class1.png(。这假设你使用的是彩色图像。如果是灰度级,请使用cv2.IMREAD_GRAYSCALE
path = "folder/path/to/images"
images = []
labels = []
for i in os.path(path):
label = int(i[6])
i = os.path.join(path, i)
i = cv2.imread(i, cv2.IMREAD_COLOR)
# i = cv2.imread(i, cv2.IMREAD_GRAYSCALE)
cv2.resize(i, (desired_shape))
images.append(i)
labels.append(label)
  1. 将列表转换为数组
images = np.asarray(images)
labels = np.asarray(labels)
  1. 然后将它们保存到磁盘,或者您可以将它们添加到阵列中,这样您就可以拥有一个单独的数据集,而不是一个带有图像和标签的数据集
arr_path = "some/path"
np.save("images.npy", images)
np.save("labels.npy", labels)
# or optionally
np.savez("dataset.npz", images, labels)

只要确保你有足够的记忆力。然后,您可以使用np.load()加载它们,并像往常一样使用。

mnist已经分为训练集和测试集,这就是为什么你总共得到四个集,两个用于训练(图像和标签(,两个用来测试(图像和标记(。您可以使用scikit learn的train_test_split执行同样的操作。

最新更新