keras卷积神经网络基本操作

"""卷积神经网络:
Dense层从输入空间中学到的是全局模式(全局模式就是涉及所有像素)
Conv层学到的是局部模式,卷积小窗口中发现的模式
卷积网络具有的性质:
    1.平移不变性:
        比如:在图像右下角学习到这种模式,在图像的其他任何位置都可以识别这个模式
    2.可以学习到模式的空间层次结构:
        后一层卷积可以将前一层卷积学习到的较小局部特征组合成更大的特征,从微小--宏观
池化操作:
    池化操作是对图像进行下采样,通常有最大池化和平均池化
    常见池化操作起始就是将图像尺寸缩小一倍,此时池化层相当于卷积核大小为(2,2),步长为2的卷积操作
为什么要使用池化操作:
①对图像进行下采样,可以减少需要处理特征图元素的个数,减小模型参数,使其不容易发生过拟合
②可以让连续卷积层观察的窗口越来越大(即窗口覆盖原始输入的比例越来越大),从而引入空间过滤器的层级结构
    如不加池化层,卷积核大小假设为3*3,则第三层3*3的窗口只会覆盖原始输入7*7的窗口包含的信息
"""


"""keras构建卷积神将网络用于手写数字识别"""

from tensorflow.keras import layers
from tensorflow.keras import models

model=models.Sequential()
#在keras中数据输入卷积层形式为[h,w,c],而在pytoch中为[c,h,w]
#构建卷积+池化,用于特征提取
model.add(layers.Conv2D(32,(3,3),activation="relu",input_shape=(28,28,1)))
model.add(layers.MaxPool2D((2,2)))
model.add(layers.Conv2D(64,(3,3),activation="relu"))
model.add(layers.MaxPool2D((2,2)))
model.add(layers.Conv2D(64,(3,3),activation="relu"))
#卷积层之后,将数据输入到全连接层用于分类决策
#数据展平
model.add(layers.Flatten())

#全连接层
model.add(layers.Dense(64,activation="relu"))
model.add(layers.Dense(10,activation="softmax")) #手写数字十分类问题
# #常看网络整体结构
# print(model.summary())

"""数据加载,keras自带的手写数字识别"""
from tensorflow.keras.datasets import mnist
import numpy as np
from tensorflow.keras.utils import to_categorical

(train_data,train_labels),(test_data,test_labels)=mnist.load_data()
"""数据预处理:
数据输入格式转化为[num,h,w,c],数据类型转为float,并将灰度值归一化
数据标签进行one-hot编码,如果损失函数采用categorical_crossentropy"""
train_data=train_data.reshape(60000,28,28,1)
train_data=train_data.astype("float32")/255.0
test_data=test_data.reshape(10000,28,28,1)
test_data=test_data.astype("float32")/255.0
train_labels=to_categorical(train_labels)
test_labels=to_categorical(test_labels)

# print(train_data.shape,train_labels.shape)
# print(test_data.shape,test_labels.shape)

"""配置学习过程"""
from tensorflow.keras import optimizers
from tensorflow.keras import losses
model.compile(optimizer=optimizers.RMSprop(),loss="categorical_crossentropy",metrics=["acc"])

#模型训练
model.fit(train_data,train_labels,batch_size=64,epochs=5)

#模型评估
test_loss,test_acc=model.evaluate(test_data,test_labels)
print("test_acc:",test_acc)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值