1、keras数据集的制作 2、keras如何加载自己制作的数据集

本文介绍了如何使用Keras制作和加载自定义数据集。首先,详细阐述了从寻找样本、打标签到导入数据集的步骤,特别是如何从验证码图片生成样本和标签。接着,讨论了如何将数据集划分为训练集和测试集,并使用sklearn的train_test_split函数。最后,展示了如何在Keras中加载这些数据,以应用于DCGAN生成卡通人物图像的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

在接触keras之后,一开始的实验都是用keras内置的数据集,比如mnist数据集,直接用一行代码直接导入就好了。但是在学习的深入,想要导入自己所需要的数据集,下面就分两个大部分介绍

第一部分:keras数据集的制作

这一部分是参考这篇博客的:https://blog.csdn.net/baidu_35113561/article/details/79413308

以下类容作为自己的笔记记录下来

第一步:寻找和建立样本

captcha本身提供了用户自定义验证码生成API,利用它,我们可以轻松的建立样本。样本数目不要太少,视项目具体情况而定(本项目一般50000个左右)。网上有很多资源关于如何用captcha生成*.png的验证码,这里就不再赘述。

第二部:为样本打好标签(label)

得到了样本后我们下面一步要做的就是给样本打标签。作为一个监督学习的项目,我们有义务告诉计算机什么样的结果是正确的,什么样的结果是错误的。如果说X_train为样本的话,我们这里要做的便是得到y_train。打标签的方法有很多,比如建立*.txt文件对应样本一一做标签。Concretely, 本项目中,captcha在随机生成验证码 的同时已经将相应验证码样本命名为了代表其含义的png文件前缀(下图所示),这非常利于我们做标签。

训练这个项目的最简单方法就是建立n个神经网络并训练机器使其能够分辨第n位字符(n为验证码长度)。例如要训练机器识别第一位字符,我们要做的便是检索每个样本文件名,将其对应的ASCII码提取出来,经过处理①并写入*.txt中,这样就得到标签了。关于如何提取字符ascii,可自行网上搜索,相关资源很丰富。

①处理:将26个字母编码,比如:0代表A,1代表B,2代表C...........这样keras之后就能通过one_hot编码了。

第三部:导入数据集

这里,我们通过numpy和PIL两个库。

先说导入图片,这里我们的图片格式是RGB 60*160 png。单张图片灰度化和导入使用PIL(opencv也可以)。因为我们需要导入整个样本库,所以需要用append函数把新的单张图片矩阵加到整个矩阵集合里,这之前当然要定义一个数组来作为集合,如images = []。之后再使用X = numpy.array(images),这样便得到了numpy格式的数据集。导入完毕后,我们可以通过print(X.shape)看看导入是否正确,例如我们导入了30000张60*160的图片,应得到:(30000, 60, 160)

然后是导入标签,即y。直接y = numpy.loadtxt('*.txt')即可。之后print (y.shape)应得到:(30000,),注意样本数和标签数一定要对应。

第四步:得到训练集和测试集(X_train,X_test,y_train,y_test)

此项目,我们可以使用sklearn库中的train_test_split函数将整个数据集分成训练集和测试集(X_train,X_test,y_train,y_test),此函数还有一个优点是会打乱顺序,比较好。关于该函数用法可自行百度。提供个参考:X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state= 30)


通过上述四步,我们便人工完成了如下函数功能:(X_train, y_train), (X_test, y_test) = mnist.load_data()

之后reshape下X_train,X_test,y_train,y_test,搭建网络,训练即可。
 

源码:https://github.com/YingjieZhang31/Captcha-Verification-Code-Recognition

import os
import numpy as np
np.random.seed(1337)
from keras.datasets import mnist
from keras.utils import np_utils
from keras.models import Sequential
from keras.layers import Dropout, Dense, Activation, Convolution2D, MaxPooling2D, ZeroPadding2D, Flatten
from keras.optimizers import Adam
from sklearn.model_selection import train_test_split
from PIL import Image
###########################################################################
def read_image(img_name):
    im = Image.open(img_name).convert('L')
    data = np.array(im)
    return data

images = []
for fn in os.listdir('./images'):
    if fn.endswith('.png'):
        fd = os.path.join('./images',fn)
        images.append(read_image(fd))
print('load success!')
X = np.array(images)
print (X.shape)

y = np.loadtxt('out.txt')
print (y.shape)

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state= 30)
print (X_train.shape)
print (X_test.shape)
print (y_train.shape)
print (y_test.shape)

print("Changing format......")

X_train = X_train.reshape(-1, 1,60, 160)/255.
X_test = X_test.reshape(-1, 1,60, 160)/255.
y_train = np_utils.to_categorical(y_train, num_classes=26)
y_test = np_utils.to_categorical(y_test, num_classes=26)

print (X_train.shape)
print (X_test.shape)
print (y_train.shape)
print (y_test.shape)

print("Changing succeeded!")
os.system("pause")
#########################################################################
model = Sequential()
##1:64
model.add(Convolution2D(
		nb_filter = 64,
		nb_row = 3,
		nb_col = 3,
		border_mode = 'same',
		input_shape=(1,60,160)
						)
		)
model.add(Activation('relu'))
model.add(Dropou
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值