Keras搭建VGG搭建ResNet识别MNIST识别CIFAR10例程

该博客介绍了使用Keras搭建神经网络的两种编程方式,包括Sequential顺序模型和Model的嵌套模型。通过示例展示了如何构建网络,并提供了使用MNIST、CIFAR10和ASL数据集的识别实验脚本。

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

keras的两种编程方式

加载model模块的sequential类的顺序模型,特点是add,示例如下

"""
只是样例,跑不通的
"""
import keras
from keras.layers import Dense,Conv2D
from keras.models import Sequential
import keras.optimizers as optimizers
import keras.losses as losses

model = Sequential()
model.add(Conv2D(32,(3,3),activation='relu',input_dim =100))
model.add(Dense(units =64,activation ='relu'))
model.add(Dense(units = 32,activation ='softmax'))
SGD = optimizers.SGD(lr =0.01,momentum=0.9,nesterov =True)
model.compile(loss =losses.categorical_crossentropy,optimizer = SGD,metrics = {'accuracy'})
model.fit(x_train,y_train,epoch = 5,batch_size=16)
loss_and_metrics = model.evaluate(x_test,y_test,batch_size = 16)
classes = model.predict(x,batch_size=1)

使用Model的嵌套模型也是很流行的,特点是每条语句有都加一个(x),x表输出的特征图层

import keras
from keras.layers import Conv2D,MaxPooling2D,Dense,Flatten,Dropout
import keras.optimizers as optimizers
from keras.models import Model

inputs = Input(shape=(100, 100, 3))
x = Conv2D(32,(3,3),activation = 'relu')(inputs)
x = MaxPooling2D(pool_size= (2,2))(x)
x = Conv2D(32,(3,3),activation ='relu')(x)
x = MaxPooling2D(pool_size = (2,2))(x)

x = Flatten()(x)
x = Dropout(0.5)(x)
x = Dense(256,activation='relu')(x)
out = Dense(10,activation = 'softmax')(x)

model = Model(inputs = [inputs],outputs =[out])
SGD = optimizers.SGD(lr =0.001,decay = 1e-6,momentun = 0.9,nestervo = True)
model.compile(loss = 'categorical_crossentropy',optimizer= SGD,metrics = {'accuracy'})
model.fit(x_train,y_train,epoch = 5,batch_size=16)

loss_and_metrics = model.evaluate(x_test,y_test,batch_size = 16)
classes = model.predict(x,batch_size=1)

使用keras搭建神经网络识别三类数据练习

github地址

环境说明

  1. keras2.0
  2. 后端tensorflow-gpu版1.6
  3. Python3.5
  4. ubuntu16.4

搭建网络

  1. MLP
  2. 随意搭建的浅层CNN
  3. VGG
  4. ResNet

使用数据集

  1. mnist(在keras的example模块中自动下载,如果电脑不在实验室,需要科学上网辅助)
  2. cifar10(同上)
  3. asl美式手语数据集,识别A-E五类。共15000个数据,13600的训练集、1280的验证集、120的测试集

五个脚本

一些重要信息在程序注释里都解释了,这里就不多说了,自己研究研究就明白了。

数据加载脚本dataloader.py

import cv2
import numpy as np
import random
import keras
import os

class Dataloader():
    def __init__(self,path,n_classes = None):
        self.path = path
        self.files = os.listdir(self.path)
        self.n_classes = n_classes


    def load_data(self,name):
        """
        负责将数据一张一张读入并根据文件名(例23_D)生成标签,23只是数据的序号,根据
        最后的字母D打标签
        :param name:数据的路径
        :return:图像数据和标签
        """
        im = cv2.imread(name)
        im = cv2.resize(im,(224,224))
        label = name.split('_')[-1][0]
        if label == 'A':
            label = 0
        elif label == 'B':
            label = 1
        elif label == 'C':
            label = 2
        elif label == 'D':
            label = 3
        elif label == 'E':
            label = 4
        im = np.array(im).astype('float')/255
        label = keras.utils.to_categorical(label,self.n_classes)
        return im,label


    def load_predict_data(self,name,isgray= False,input_size=(28,28)):
        """
        测试模型的时候使用,一次测一张
        :param name: 文件名和路径
        :param isgray:如果像mnist一类,输入数据是灰度图赋值true
        :param input_size:传入图像的长宽
        :return: 格式如(1,28,28,1)的数据
        """
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值