keras实现cifar10数据集图像分类

cifar10数据集介绍

  • cifar10是一个图像识别的数据集,一共有6000张32x32像素的彩色图片(训练集:测试集=5:1);这些图片一共分为10类(飞机、汽车、鸟、猫、鹿、狗、青蛙、马、船、卡车)。

代码及解析

导入需要的库
import keras             # 使用keras深度学习框架
import numpy as np				# 数据处理 
from keras.models import Sequential   # 使用Sequential 创建模型实例
from keras.layers import Conv2D,MaxPooling2D,Dense,Dropout,Flatten  # 构建网络需要的各种层(卷积层、池化层、全连接层等)
from keras.datasets import cifar10  # 与数据集cifar10 有关的
可选(控制GPU资源,动态申请显存)
import tensorflow as tf     # 
config = tf.compat.v1.ConfigProto(gpu_options=tf.compat.v1.GPUOptions(allow_growth=True))
sess = tf.compat.v1.Session(config=config)
下载数据集
(x_train, y_train),(x_test, y_test) = cifar10.load_data()
#keras提供了在线下载数据集的方法,使用load_data()函数就可以在线下载,要保证网络连接正常,下载需要一定的时间,需要耐心的等待

在这里插入图片描述

数据集处理
# 归一化,将像素值都转化到0-1之间
x_train = x_train.astype('float32')/255.0 # 原本像素值都是在1-255之间的
x_test = x_test.astype('float32')/255.0

# one-hot 类似于这种形式[0,0,1,0,0,0,0,0,0,0]
from keras.utils import np_utils   # 辅助函数库
y_train = np_utils.to_categorical(y_train)
y_test = np_utils.to_categorical(y_test)

在这里插入图片描述

建立网络
model = Sequential() # 创建序列模型实例,可以把它考虑成一个栈,要向这里面添加一个一个的层
model.add(Conv2D(filters=32,				#卷积层 32个卷积核
                  kernel_size=(3,3),     # 卷积核的尺寸
                  input_shape=(32,32,3),   # 第一层的输入图片的大小 3为channel(RGB)
                  activation='relu',     # 激活函数使用线性流函数relu
                  padding='same'))      # 填充边界,保持图片尺寸大小不变
model.add(Dropout(0.25))                # 将25%的神经元职位0
model.add(MaxPooling2D(pool_size=(2,2))) # 池化层

model.add(Conv2D(filters=64, kernel_size=(3, 3),
                 activation='relu', padding='same'))
model.add(Dropout(0.25))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(filters=128, kernel_size=(3, 3),
                 activation='relu', padding='same'))
model.add(Dropout(0.25))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Flatten())					# 将数据展平二维nx1
# model.add(Dropout(rate=0.50))   
model.add(Dense(1024, activation='relu')) # 全连接层
# model.add(Dropout(rate=0.50))
model.add(Dense(10, activation='softmax'))

model.compile(loss='categorical_crossentropy',
              optimizer='adam', metrics=['accuracy']) # 使用交叉熵计算损失,使用Adam作优化方法

train_history = model.fit(x_train, y_train,  # 为模型提供训练数据
                        validation_split=0.2,  # 训练集中20%作为验证集
                        epochs=20, batch_size=128, verbose=1) # 迭代20次,每批128张,输出日志
测试

在这里插入图片描述

scores = model.evaluate(x_test, y_test, verbose=0) #使用测试数据测试结果并输出
print(scores[1])
输出
loss: 0.1013 - accuracy: 0.9640 - val_loss: 0.8371 - val_accuracy: 0.7604
0.7523000240325928

  • 虽然只迭代了20次,虽然网络很浅,但是在训练集上的结果还是不错,但是在验证集和测试集上的效果都不好,结果是高方差的,已经过拟合了。
  • 不要慌,慢慢来,将来我们就会学会如何防止过拟合,如何解决高方差和高偏差的问题,如何改进模型,尝试新的比较流行的网络结构了。
  • 1
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Keras一个基于Python开发的深度学习库,可以方便地创建和训练神经网络模型。CIFAR-10是一个用于图像分类数据集,包含了10个不同类别的6000032x32像素彩色图像。 VGG是一种经典的卷积神经网络模型,它在图像分类任务上具有很高的准确率。使用Keras对CIFAR-10数据集进行VGG模型的图像分类,可以通过以下步骤实现: 1. 首先,需要导入所需的Keras库和模块,包括导入CIFAR-10数据集。 2. 然后,可以创建一个顺序模型,该模型将用于构建VGG网络。 3. 在创建模型时,需要添加一系列的卷积层和池化层。对于VGG模型,常用的是使用多个卷积层和池化层的组合。 4. 在最后几层,可以添加全连接层和输出层,用于分类预测。可以根据具体情况设置神经元数量。 5. 在模型完成构建后,需要编译模型并选择适当的损失函数和优化器。对于图像分类,常用的是交叉熵损失函数和Adam优化器。 6. 接下来,可以使用训练集对模型进行训练。可以选择合适的批次大小和迭代次数,并使用模型的fit()函数进行训练。 7. 训练完成后,可以使用测试集对模型进行评估,并计算模型的准确率。 8. 最后,可以使用模型对新的图像进行预测,并得到图像的分类结果。 总之,使用Keras对CIFAR-10图像分类中的VGG模型,可以根据上述步骤实现。这样可以构建一个强大的深度学习模型,用于对CIFAR-10数据集中的图像进行准确的分类。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值