想做AI工程师?这个案例必须掌握!(附完整代码Keras实现CNN)

本文通过Keras实现CNN,教你手写数字识别,准确率高达99.6%,并提供完整代码。介绍如何创建callback类、数据增强处理,以及利用MNIST数据进行模型训练,帮助技术者入门AI领域。
摘要由CSDN通过智能技术生成

有人说,2018年人工智能已经进入了全球爆发的时刻。个性化信息推送、人脸识别、语音操控等人工智能技术,已“入侵”日常生活的细枝末节。

十多年前,所有的企业都在想办法互联网化,如今,所有的互联网企业都在试图AI化,据数据统计,平均每 10.9 个小时会诞生一家 AI 企业。在这样的背景下,不难想象,未来机器学习技术将会是技术人的新门槛和领域。

那么问题来了,作为一名技术者,我该如何转型/学习 AI 技术?别着急,本文将带你入门AI第一课:《手把手教你Keras实现CNN》,让你实现手写数字识别准确率达到99.6%!(附完整代码)。

在我们安装过Tensorflow后,安装Keras默认将TF作为后端,Keras实现卷积网络的代码十分简洁,而且keras中的callback类提供对模型训练过程中变量的检测方法,能够根据检测变量的情况及时的调整模型的学习效率和一些参数. 下面的例子,MNIST数据作为测试:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.image as pimg
import seaborn as sb         # 一个构建在matplotlib上的绘画模块,支持numpy,pandas等数据结构
%matplotlib inline

from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix     # 混淆矩阵

import itertools
#  keras
from keras.utils import to_categorical         #数字标签转化成one-hot编码
from keras.models import Sequential
from keras.layers import Dense,Dropout,Flatten,Conv2D,MaxPool2D
from keras.optimizers import RMSprop
from keras.preprocessing.image import ImageDataGenerator
from keras.callbacks import ReduceLROnPlateau
Using TensorFlow backend.
# 设置绘画风格
sb.set(style='white', context='notebook', palette='deep')
# 加载数据
train_data = pd.read_csv('data/train.csv')
test_data = pd.read_csv('data/test.csv')
#train_x = train_data.drop(labels=['label'],axis=1)  # 去掉标签列
train_x = train_data.iloc[:,1:]
train_y = train_data.iloc[:,0]
del  train_data   # 释放一下内存
# 观察一下训练数据的分布情况
g = sb.countplot(train_y)
train_y.value_counts()
1    4684
7    4401
3    4351
9    4188
2    4177
6    4137
0    4132
4    4072
8    4063
5    3795
Name: label, dtype: int64

train_x.isnull().describe() # 检查是否存在确实值
train_x.isnull().any().describe()
count       784
unique        1
top       False
freq        784
dtype: object
test_data.isnull().any().describe()
count       784
unique        1
top       False
freq        784
dtype: object
以下是一个基于Keras的简单CNN代码实现示例: ```python # 导入必要的库 import keras from keras.models import Sequential from keras.layers import Dense, Dropout, Flatten from keras.layers import Conv2D, MaxPooling2D from keras.utils import np_utils # 加载数据集 from keras.datasets import mnist (X_train, y_train), (X_test, y_test) = mnist.load_data() # 数据预处理 X_train = X_train.reshape(X_train.shape[0], 28, 28, 1) X_test = X_test.reshape(X_test.shape[0], 28, 28, 1) X_train = X_train.astype('float32') X_test = X_test.astype('float32') X_train /= 255 X_test /= 255 y_train = np_utils.to_categorical(y_train, 10) y_test = np_utils.to_categorical(y_test, 10) # 定义模型 model = Sequential() model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1))) model.add(Conv2D(64, (3, 3), activation='relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.25)) model.add(Flatten()) model.add(Dense(128, activation='relu')) model.add(Dropout(0.5)) model.add(Dense(10, activation='softmax')) # 编译模型 model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) # 训练模型 model.fit(X_train, y_train, batch_size=32, epochs=10, verbose=1, validation_data=(X_test, y_test)) # 评估模型 score = model.evaluate(X_test, y_test, verbose=0) print('Test loss:', score[0]) print('Test accuracy:', score[1]) ``` 这个示例实现了一个简单的CNN,用于对MNIST手写数字数据集进行分类。该模型包括两个卷积层,一个池化层和两个全连接层。在训练期间,该模型将对MNIST数据集进行10个epoch的训练,并输出测试损失和测试准确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值