怎样用python构建一个卷积神经网络

用keras框架较为方便首先安装anaconda,然后通过pip安装keras以下转自wphh的博客。

#coding:utf-8'''    GPU run command:        THEANO_FLAGS=mode=FAST_RUN,device=gpu,floatX=float32 python     CPU run command:        python 2016.06.06更新:这份代码是keras开发初期写的,当时keras还没有现在这么流行,文档也还没那么丰富,所以我当时写了一些简单的教程。

现在keras的API也发生了一些的变化,建议及推荐直接上看更加详细的教程。

'''#导入各种用到的模块组件from __future__ import absolute_importfrom __future__ import print_functionfrom keras.preprocessing.image import ImageDataGeneratorfrom keras.models import Sequentialfrom  import Dense, Dropout, Activation, Flattenfrom keras.layers.advanced_activations import PReLUfrom keras.layers.convolutional import Convolution2D, MaxPooling2Dfrom keras.optimizers import SGD, Adadelta, Adagradfrom keras.utils import np_utils, generic_utilsfrom six.moves import rangefrom data import load_dataimport randomimport numpy as np(1024)  # for reproducibility#加载数据data, label = load_data()#打乱数据index = [i for i in range(len(data))]random.shuffle(index)data = data[index]label = label[index]print(data.shape[0], ' samples')#label为0~9共10个类别,keras要求格式为binary class matrices,转化一下,直接调用keras提供的这个函数label = np_utils.to_categorical(label, 10)################开始建立CNN模型################生成一个modelmodel = Sequential()#第一个卷积层,4个卷积核,每个卷积核大小5*5。

1表示输入的图片的通道,灰度图为1通道。

#border_mode可以是valid或者full,具体看这里说明:.conv2d#激活函数用tanh#你还可以在(Activation('tanh'))后加上dropout的技巧: (Dropout(0.5))(Convolution2D(4, 5, 5, border_mode='valid',input_shape=(1,28,28))) (Activation('tanh'))#第二个卷积层,8个卷积核,每个卷积核大小3*3。

4表示输入的特征图个数,等于上一层的卷积核个数#激活函数用tanh#采用maxpooling,poolsize为(2,2)(Convolution2D(8, 3, 3, border_mode='valid'))(Activation('tanh'))(MaxPooling2D(pool_size=(2, 2)))#第三个卷积层,16个卷积核,每个卷积核大小3*3#激活函数用tanh#采用maxpooling,poolsize为(2,2)(Convolution2D(16, 3, 3, border_mode='valid')) (Activation('relu'))(MaxPooling2D(pool_size=(2, 2)))#全连接层,先将前一层输出的二维特征图flatten为一维的。

#Dense就是隐藏层。16就是上一层输出的特征图个数。

4是根据每个卷积层计算出来的:(28-5+1)得到24,(24-3+1)/2得到11,(11-3+1)/2得到4#全连接有128个神经元节点,初始化方式为normal(Flatten())(Dense(128, init='normal'))(Activation('tanh'))#Softmax分类,输出是10类别(Dense(10, init='normal'))(Activation('softmax'))##############开始训练模型###############使用SGD + momentum#model.compile里的参数loss就是损失函数(目标函数)sgd = SGD(lr=0.05, decay=1e-6, momentum=0.9, nesterov=True)model.compile(loss='categorical_crossentropy', optimizer=sgd,metrics=["accuracy"])#调用fit方法,就是一个训练过程. 训练的epoch数设为10,batch_size为100.#数据经过随机打乱shuffle=True。

verbose=1,训练过程中输出的信息,0、1、2三种方式都可以,无关紧要。show_accuracy=True,训练时每一个epoch都输出accuracy。

#validation_split=0.2,将20%的数据作为验证集。

(data, label, batch_size=100, nb_epoch=10,shuffle=True,verbose=1,validation_split=0.2)"""#使用data augmentation的方法#一些参数和调用的方法,请看文档datagen = ImageDataGenerator(        featurewise_center=True, # set input mean to 0 over the dataset        samplewise_center=False, # set each sample mean to 0        featurewise_std_normalization=True, # divide inputs by std of the dataset        samplewise_std_normalization=False, # divide each input by its std        zca_whitening=False, # apply ZCA whitening        rotation_range=20, # randomly rotate images in the range (degrees, 0 to 180)        width_shift_range=0.2, # randomly shift images horizontally (fraction of total width)        height_shift_range=0.2, # randomly shift images vertically (fraction of total height)        horizontal_flip=True, # randomly flip images        vertical_flip=False) # randomly flip images# compute quantities required for featurewise normalization # (std, mean, and principal components if ZCA whitening is applied)(data)for e in range(nb_epoch):    print('-'*40)    print('Epoch', e)    print('-'*40)    print("Training...")    # batch train with realtime data augmentation    progbar = generic_utils.Progbar(data.shape[0])    for X_batch, Y_batch in (data, label):        loss,accuracy = model.train(X_batch, Y_batch,accuracy=True)        (X_batch.shape[0], values=[("train loss", loss),("accuracy:", accuracy)] )"""。

谷歌人工智能写作项目:神经网络伪原创

交叉熵损失函数是什么?

交叉熵能够衡量同一个随机变量中的两个不同概率分布的差异程度,在机器学习中就表示为真实概率分布与预测概率分布之间的差异写作猫。交叉熵的值越小,模型预测效果就越好。

交叉熵在分类问题中常常与softmax是标配,softmax将输出的结果进行处理,使其多个分类的预测值和为1,再通过交叉熵来计算损失。

交叉熵损失函数应用假设某个场景如下对于我们设计的用于图片分类的卷积神经网络的训练还没有完成,此时,终止我们的训练,显然,各种层的参数已经保留。

从数据集中任选一张图片(类别已经被记录),输入我们的神经网络,结果输出的是一个包含10个数据的一维张量。这10个数据分别对应10种物品的概率。

不妨记为q=[0.1058, 0.1043, 0.0988, 0.1066, 0.0875, 0.0881, 0.1027, 0.1046, 0.1057,  0.0958。

很显然,这个预测结果有点糟糕,不过主要是因为网络没有训练好。同时我们也已知道这个图片的真实类别为4,这时记p=[0,0,0,0,1,0,0,0,0,0],带入交叉熵损失函数。

这个结果就是我们的交叉熵损失,当然,我们希望越小越好,这意味着我们的神经网络较为成功。

训练好的cnn网络的损失函数最后为多少

上世纪60年代,Hubel等人通过对猫视觉皮层细胞的研究,提出了感受野这个概念,到80年代,Fukushima在感受野概念的基础之上提出了神经认知机的概念,可以看作是卷积神经网络的第一个实现网络,神经认知机将一个视觉模式分解成许多子模式(特征),然后进入分层递阶式相连的特征平面进行处理,它试图将视觉系统模型化,使其能够在即使物体有位移或轻微变形的时候,也能完成识别。

卷积神经网络(Convolutional Neural Networks, CNN)是多层感知机(MLP)的变种。由生物学家休博尔和维瑟尔在早期关于猫视觉皮层的研究发展而来。

视觉皮层的细胞存在一个复杂的构造。这些细胞对视觉输入空间的子区域非常敏感,我们称之为感受野,以这种方式平铺覆盖到整个视野区域。这些细胞可以分为两种基本类型,简单细胞和复杂细胞。

简单细胞最大程度响应来自感受野范围内的边缘刺激模式。复杂细胞有更大的接受域,它对来自确切位置的刺激具有局部不变性。

通常神经认知机包含两类神经元,即承担特征提取的采样元和抗变形的卷积元,采样元中涉及两个重要参数,即感受野与阈值参数,前者确定输入连接的数目,后者则控制对特征子模式的反应程度。

卷积神经网络可以看作是神经认知机的推广形式,神经认知机是卷积神经网络的一种特例。 CNN由纽约大学的Yann LeCun于1998年提出。

CNN本质上是一个多层感知机,其成功的原因关键在于它所采用的局部连接和共享权值的方式,一方面减少了的权值的数量使得网络易于优化,另一方面降低了过拟合的风险。

CNN是神经网络中的一种,它的权值共享网络结构使之更类似于生物神经网络,降低了网络模型的复杂度,减少了权值的数量。

该优点在网络的输入是多维图像时表现的更为明显,使图像可以直接作为网络的输入,避免了传统识别算法中复杂的特征提取和数据重建过程。

在二维图像处理上有众多优势,如网络能自行抽取图像特征包括颜色、纹理、形状及图像的拓扑结构;在处理二维图像问题上,特别是识别位移、缩放及其它形式扭曲不变性的应用上具有良好的鲁棒性和运算效率等。

CNN本身可以采用不同的神经元和学习规则的组合形式。

卷积神经网络的卷积运算,卷积神经网络里的卷积相关推荐

  1. 从图(Graph)到图卷积(Graph Convolution):漫谈图神经网络 (二)

    在从图(Graph)到图卷积(Graph Convolution): 漫谈图神经网络 (一)中,我们简单介绍了基于循环图神经网络的两种重要模型,在本篇中,我们将着大量笔墨介绍图卷积神经网络中的卷积操作 ...

  2. 花书+吴恩达深度学习(十三)卷积神经网络 CNN 之运算过程(前向传播、反向传播)

    目录 0. 前言 1. 单层卷积网络 2. 各参数维度 3. CNN 前向传播反向传播 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔~我会非常开心的~ 花书+吴恩达深度学习(十)卷积神经网络 ...

  3. 一维卷积filter_从零开始学Pytorch(七)之卷积神经网络

    卷积神经网络基础 我们介绍卷积神经网络的卷积层和池化层,并解释填充.步幅.输入通道和输出通道的含义. import torch from torch.autograd import Variable ...

  4. 图神经网络(一)图信号处理与图卷积神经网络(5)图卷积神经网络

    图神经网络(一)图信号处理与图卷积神经网络(5)图卷积神经网络 0. 概述 1. 对频率响应矩阵进行参数化 2. 对多项式系数进行参数化 3. 设计固定的图滤波器 0. 概述 在学习了图滤波器定义的基 ...

  5. gcn 图卷积神经网络_复制一文读懂图卷积GCN

    首发于郁蓁的机器学习笔记 写文章 一文读懂图卷积GCN 苘郁蓁 ​ 阿里巴巴 算法工程师 ​关注她 唯物链丶.小小将等 480 人赞同了该文章本文的内容包括图卷积的基础知识以及相关辅助理解的知识点,希 ...

  6. Tensorflow神经网络框架 小例子 三层神经网络 卷积神经网络 循环神经网络 神经网络可视化

    Tensorflow神经网络框架 以前我们讲了神经网络基础,但是如果从头开始实现,那将是一个庞大且费时的工作,所以我们选择一条捷径---神经网络框架.我理解的神经网络框架就相当于一个工具包.就比如我们 ...

  7. 深度学习与TensorFlow实战(十)卷积神经网络—VGG(16)神经网络

    架构: 训练输入:固定尺寸224x224的RGB图像. 预处理:每个像素减去训练集上的RGB均值. 卷积核:一系列3X3卷积核堆叠,步长为1,采用padding保持卷积后图像空间分辨率不变. 空间池化 ...

  8. 深度学习实验总结:PR-曲线、线性回归、卷积神经网络、GAN生成式对抗神经网络

    目录 0.前言 1.实验一:环境配置 (1)本机 1.Jupyter 2.Pycharm (2)云端 2.实验二:特征数据集制作和PR曲线 一.实验目的 二.实验环境 三.实验内容及实验步骤 3.实验 ...

  9. 图神经网络(一)图信号处理与图卷积神经网络(6)GCN实战

    图神经网络(一)图信号处理与图卷积神经网络(6)GCN实战 GCN实战 1.SetUp 2.数据准备 3.图卷积层定义 4.模型定义 5.模型训练 完整代码 代码说明 1.SetUp 2.数据准备 3 ...

  10. 图神经网络(一)图信号处理与图卷积神经网络(3)图傅里叶变换

    图神经网络(一)图信号处理与图卷积神经网络(3)图傅里叶变换 傅里叶变换是数字信号处理的基石,傅里叶变换将信号从时域空间转换到频域空间,而频域视角给信号的处理带来了极大的遍历.围绕傅里叶变换,信号的滤 ...

最新文章

  1. NLP中数据增强的综述,快速的生成大量的训练数据
  2. 推荐一个 React 技术揭秘的项目,自顶向下的 React 源码分析
  3. 交叉编译和交叉调试环境搭建及使用
  4. LeetCode 541. 反转字符串 II
  5. 基于X-Engine引擎的实时历史数据库解决方案揭秘
  6. javascript 禁止复制网页
  7. jquery 使用textarea
  8. (摘)Entity Framework Core 2.1带来更好的SQL语句生成方案
  9. 马来西亚什么时候学计算机,关于马来西亚大学里的计算机专业,你知道多少?...
  10. 如何使用计算机中的导出,(excel在电脑的哪个文件里?)excel怎么把查找的导出
  11. 深度学习 + OpenCV,Python实现实时视频目标检测
  12. 创业公司如何构建数据指标体系?
  13. 拓端tecdat|r语言聚类分析:k-means和层次聚类
  14. Repeater的ItemCommand事件和ItemCreated事件,高手请跳过~
  15. 【HDU 5869】Different GCD Subarray Query【区间不同 gcd 个数】
  16. 自定义函数处理excel单元格列序数
  17. 一点资讯战略升级:否定百度收购同时与微博牵手
  18. kali安装tools,和文件传输工具fuse问题合集
  19. Python学习——异常
  20. 多层嵌套json转换为Map再转换为单层

热门文章

  1. 从零开始debian----Debian安装与设置(2015.10)
  2. 阉割版BBBlack安装Debian
  3. 炉石传说服务器没有位置,3年前的今天,炉石传说服务器被偷了,玩家:根本没这回事...
  4. Layui 时间戳转日期格式
  5. [原]【Visual C++】游戏开发笔记十五 游戏人工智能(一) 运动型游戏AI
  6. 障碍物检测算法开发-(1)三种测距算法技术路线和实际应用
  7. 使用快启动一键重装系统详细图文教程
  8. python django前端重构_Django学习笔记(11)——开发图书管理页面
  9. 【C++】switch语句用法详解
  10. GenZ,CXL,NVLINK,OpenCAPI,CCIX乱战!