数据文件夹应该如何在 cnn 模型中将输入作为 (x-train, y-train), (x-test, y-test)
How should the data folder be to take input as (x-train, y-train), (x-test, y-test) in a cnn model
我是机器学习和深度学习的新手。我尝试过使用 CNN 算法的多 class class 化模型。我首先尝试使用 keras 提供的 CIFAR-10 数据集。
在那里,我们给出如下输入来加载数据集,
(x-train, y-train), (x-test, y-test) = tf.keras.datasets.cifar10.load_data()
这对我有用。但是,我现在正在尝试使用我的手动数据集而不是内置数据集。不知道数据集文件夹应该怎样,更不知道怎么访问。
目前,我的数据集文件夹安排如下,
Dataset=> Training_set => 10 different classes folders with corresponding images within
Test_set => 10 different classes folders with corresponding images within
调用 load_data
时,我不知道如何在代码中使用它。如果我以正常方式使用它,例如 flow_from_directory('../Dataset/Training_set')
,我会收到以下错误 - Too many values to unpack(expected 2)
。请帮助解决这个问题。对学习有很大的帮助。
您可以尝试使用 tf.keras.utils.image_dataset_from_directory
。
创建虚拟数据:
import os
import numpy
from PIL import Image
os.mkdir('Training_set')
for i in range(10):
os.mkdir('Training_set/class{}'.format(i))
for i in range(10):
for j in range(2):
imarray = numpy.random.rand(100,100,3) * 255
im = Image.fromarray(imarray.astype('uint8')).convert('RGB')
im.save('Training_set/class{}/result_image{}.png'.format(i, j))
文件夹结构:
- Training_set/
- class9/
- result_image1.png
- result_image0.png
- class8/
- result_image1.png
- result_image0.png
- class7/
- result_image1.png
- result_image0.png
- class0/
- result_image1.png
- result_image0.png
- class2/
- result_image1.png
- result_image0.png
- class5/
- result_image1.png
- result_image0.png
- class4/
- result_image1.png
- result_image0.png
- class3/
- result_image1.png
- result_image0.png
- class1/
- result_image1.png
- result_image0.png
- class6/
- result_image1.png
- result_image0.png
使用 validation_split=0.2
加载数据(80% 训练数据,20% 验证数据):
import tensorflow as tf
train_ds = tf.keras.utils.image_dataset_from_directory(
'Training_set',
validation_split=0.2,
subset="training",
seed=123,
image_size=(100, 100),
batch_size=2)
val_ds = tf.keras.utils.image_dataset_from_directory(
'Training_set',
validation_split=0.2,
subset="validation",
seed=123,
image_size=(100, 100),
batch_size=2)
for x, y in train_ds.take(1):
print(x.shape, y.shape)
Found 20 files belonging to 10 classes.
Using 16 files for training.
Found 20 files belonging to 10 classes.
Using 4 files for validation.
(2, 100, 100, 3) (2,)
您还可以选择是希望标签是稀疏的还是分类的。有关详细信息,请参阅 docs。
这些数据集可以像这样直接输入到您的模型中:
epochs=10
history = model.fit(
train_ds,
validation_data=val_ds,
epochs=epochs)
如果您确实需要,您可以将 tensorflow
数据集转换为 numpy
数组:
x_train, y_train = np.concatenate(list(train_ds.map(lambda x, y: x))), np.concatenate(list(train_ds.map(lambda x, y: y)))
x_test, y_test = np.concatenate(list(val_ds.map(lambda x, y: x))), np.concatenate(list(val_ds.map(lambda x, y: y)))
我是机器学习和深度学习的新手。我尝试过使用 CNN 算法的多 class class 化模型。我首先尝试使用 keras 提供的 CIFAR-10 数据集。 在那里,我们给出如下输入来加载数据集,
(x-train, y-train), (x-test, y-test) = tf.keras.datasets.cifar10.load_data()
这对我有用。但是,我现在正在尝试使用我的手动数据集而不是内置数据集。不知道数据集文件夹应该怎样,更不知道怎么访问。
目前,我的数据集文件夹安排如下,
Dataset=> Training_set => 10 different classes folders with corresponding images within
Test_set => 10 different classes folders with corresponding images within
调用 load_data
时,我不知道如何在代码中使用它。如果我以正常方式使用它,例如 flow_from_directory('../Dataset/Training_set')
,我会收到以下错误 - Too many values to unpack(expected 2)
。请帮助解决这个问题。对学习有很大的帮助。
您可以尝试使用 tf.keras.utils.image_dataset_from_directory
。
创建虚拟数据:
import os
import numpy
from PIL import Image
os.mkdir('Training_set')
for i in range(10):
os.mkdir('Training_set/class{}'.format(i))
for i in range(10):
for j in range(2):
imarray = numpy.random.rand(100,100,3) * 255
im = Image.fromarray(imarray.astype('uint8')).convert('RGB')
im.save('Training_set/class{}/result_image{}.png'.format(i, j))
文件夹结构:
- Training_set/
- class9/
- result_image1.png
- result_image0.png
- class8/
- result_image1.png
- result_image0.png
- class7/
- result_image1.png
- result_image0.png
- class0/
- result_image1.png
- result_image0.png
- class2/
- result_image1.png
- result_image0.png
- class5/
- result_image1.png
- result_image0.png
- class4/
- result_image1.png
- result_image0.png
- class3/
- result_image1.png
- result_image0.png
- class1/
- result_image1.png
- result_image0.png
- class6/
- result_image1.png
- result_image0.png
使用 validation_split=0.2
加载数据(80% 训练数据,20% 验证数据):
import tensorflow as tf
train_ds = tf.keras.utils.image_dataset_from_directory(
'Training_set',
validation_split=0.2,
subset="training",
seed=123,
image_size=(100, 100),
batch_size=2)
val_ds = tf.keras.utils.image_dataset_from_directory(
'Training_set',
validation_split=0.2,
subset="validation",
seed=123,
image_size=(100, 100),
batch_size=2)
for x, y in train_ds.take(1):
print(x.shape, y.shape)
Found 20 files belonging to 10 classes.
Using 16 files for training.
Found 20 files belonging to 10 classes.
Using 4 files for validation.
(2, 100, 100, 3) (2,)
您还可以选择是希望标签是稀疏的还是分类的。有关详细信息,请参阅 docs。
这些数据集可以像这样直接输入到您的模型中:
epochs=10
history = model.fit(
train_ds,
validation_data=val_ds,
epochs=epochs)
如果您确实需要,您可以将 tensorflow
数据集转换为 numpy
数组:
x_train, y_train = np.concatenate(list(train_ds.map(lambda x, y: x))), np.concatenate(list(train_ds.map(lambda x, y: y)))
x_test, y_test = np.concatenate(list(val_ds.map(lambda x, y: x))), np.concatenate(list(val_ds.map(lambda x, y: y)))