keras框架下搭建卷积神经网络,并导入自己的图片做分类。保存自己的keras模型,并重新载入

本文档介绍了如何在Keras框架中搭建一个卷积神经网络(CNN),用于对个人图像数据集进行预处理和识别。首先,通过Python使用h5py库处理图片数据集。接着,详细描述了CNN的网络结构。最后,演示了如何保存和重新加载Keras模型,以便在新的Jupyter Notebook环境中继续使用。

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

Python将自己的图片数据集导入h5py,做识别的预处理

自己的图像导入可以参照上文。

在Keras框架下搭建一个卷积神经网络,结构如下:

                                

###一、导入必要的包
import numpy as np
#import tensorflow as tf
from keras import layers
from keras.layers import Input, Dense, Activation, ZeroPadding2D, BatchNormalization, Flatten, Conv2D
from keras.layers import AveragePooling2D, MaxPooling2D, Dropout, GlobalMaxPooling2D, GlobalAveragePooling2D
from keras.models import Model
from keras.preprocessing import image
from keras.utils import layer_utils
from keras.utils.data_utils import get_file
from keras.applications.imagenet_utils import preprocess_input
import pydot
from IPython.display import SVG
from keras.utils.vis_utils import model_to_dot
from keras.utils import plot_model


import keras.backend as K
K.set_image_data_format('channels_last')
import matplotlib.pyplot as plt
from matplotlib.pyplot import imshow


import os
import numpy as np
from PIL import Image
import tensorflow as tf
import sklearn
from sklearn import preprocessing
import h5py
import scipy
#导入必要的包
%matplotlib inline
# 二、导入 hdf5 数据集
#我的图片大小为(64*64*3)
train_dataset = h5py.File('data.h5', 'r')
X_train = np.array(train_dataset['X_train'][:]) # your train set features
Y_train = np.array(train_dataset['y_train'][:]) # your train set labels
X_test = np.array(train_dataset['X_test'][:]) # your train set features
Y_test = np.array(train_dataset['y_test'][:]) # your train set labels
train_dataset.close()
print ("number of training examples = " + str(X_train.shape[0]))
print ("number of test examples = " + str(X_test.shape[0]))
print ("X_train shape: " + str(X_train.shape))
print ("Y_train shape: " + str(Y_train.shape))
print ("X_test shape: " + str(X_test.shape))
print ("Y_test shape: " + str(Y_test.shape))
(1820, 64, 64, 3)
(1820, 1)
1.0
0.0
(450, 64, 64, 3)
(450, 1)

### 实现MNIST手写数字识别 为了实现基于卷积神经网络(CNN)的手写数字识别,可以采用Keras库中的功能来简化模型搭建过程。下面展示了一个完整的流程,包括加载数据、定义模型架构以及评估性能。 #### 加载必要的库 首先需要导入一些基础包: ```python import numpy as np from tensorflow.keras.datasets import mnist from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Dropout, Flatten from tensorflow.keras.layers import Conv2D, MaxPooling2D from tensorflow.keras.utils import to_categorical ``` #### 准备数据集 接着准备预处理MNIST数据集,将其转换成适合输入到CNN的形式: ```python # 输入图片尺寸为(28, 28),通道数为1(因为是灰度图) img_rows, img_cols = 28, 28 input_shape = (img_rows, img_cols, 1) # 载入mnist数据集 (x_train, y_train), (x_test, y_test) = mnist.load_data() # 将像素值缩放到0~1之间,调整形状以适应四维张量的要求 x_train = x_train.reshape((x_train.shape[0], img_rows, img_cols, 1)).astype('float32') / 255. x_test = x_test.reshape((x_test.shape[0], img_rows, img_cols, 1)).astype('float32') / 255. # 对标签进行one-hot编码 num_classes = 10 y_train = to_categorical(y_train, num_classes) y_test = to_categorical(y_test, num_classes) ``` #### 构建CNN模型 创建一个简单的两层卷积加池化层组成的CNN模型,最后接上全连接层用于分类预测: ```python model = Sequential() model.add(Conv2D(filters=32, kernel_size=(3, 3), activation='relu', input_shape=input_shape)) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(rate=0.2)) model.add(Flatten()) model.add(Dense(units=128, activation='relu')) model.add(Dropout(rate=0.5)) model.add(Dense(num_classes, activation='softmax')) model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) ``` #### 训练模型 设置批量大小(batch size)为128,迭代次数(epoch)设为3次来进行训练[^3]: ```python batch_size = 128 epochs = 3 history = model.fit(x=x_train, y=y_train, batch_size=batch_size, epochs=epochs, verbose=1, validation_split=.1) ``` #### 测试模型准确性 完成训练之后,在独立的测试集中验证模型的表现情况: ```python score = model.evaluate(x=x_test, y=y_test, verbose=0) print(f'Test loss: {score[0]}') print(f'Test accuracy: {score[1]}') ``` 上述代码展示了如何利用Python和TensorFlow/Keras框架快速建立一个能够对手写字体进行有效辨识的基础版CNN模型[^4]。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值