机器学习三 卷积神经网络作业

本来这门课程http://speech.ee.ntu.edu.tw/~tlkagk/courses_ML16.html 作业是用卷积神经网络做半监督学习,这个还没完全解决,于是先从基础的开始,用keras 实现cifar10。

以下是代码

  1 # -*- coding: utf-8 -*-
  2 __author__ = ‘Administrator‘
  3
  4
  5 from keras.datasets import cifar10
  6 from keras.utils import np_utils
  7 from keras.models import Sequential
  8 from keras.layers import Convolution2D, MaxPooling2D
  9 from keras.layers import Dense, Dropout, Activation, Flatten
 10 from keras.optimizers import SGD
 11 from keras.preprocessing.image import ImageDataGenerator
 12 import matplotlib.pyplot as plt
 13
 14 # 下载数据
 15 (X_train, y_train), (X_test, y_test) = cifar10.load_data()
 16 print(‘X_train shape:‘, X_train.shape)
 17 print(X_train.shape[2], ‘train samples‘)
 18
 19 #对训练和测试数据处理,转为float
 20 X_train = X_train.astype(‘float32‘)
 21 X_test = X_test.astype(‘float32‘)
 22 #对数据进行归一化到0-1 因为图像数据最大是255
 23 X_train /= 255
 24 X_test /= 255
 25
 26 #一共10类
 27 nb_classes = 10
 28
 29 # 将标签进行转换为one-shot
 30 Y_train = np_utils.to_categorical(y_train, nb_classes)
 31 Y_test = np_utils.to_categorical(y_test, nb_classes)
 32
 33 #搭建网络
 34 model = Sequential()
 35 # 2d卷积核,包括32个3*3的卷积核  因为X_train的shape是【样本数,通道数,图宽度,图高度】这样排列的,而input_shape不需要(也不能)指定样本数。
 36 model.add(Convolution2D(32, 3, 3, border_mode=‘same‘,
 37                         input_shape=X_train.shape[1:]))#指定输入数据的形状
 38 model.add(Activation(‘relu‘))#激活函数
 39 model.add(Convolution2D(32, 3, 3))
 40 model.add(Activation(‘relu‘))
 41 model.add(MaxPooling2D(pool_size=(2, 2)))                #maxpool
 42 model.add(Dropout(0.25))                                 #dropout
 43 model.add(Flatten())                                     #压扁平准备全连接
 44 #全连接
 45 model.add(Dense(512))                                    #添加512节点的全连接
 46 model.add(Activation(‘relu‘))                           #激活
 47 model.add(Dropout(0.5))
 48 model.add(Dense(nb_classes))                             #添加输出10个节点
 49 model.add(Activation(‘softmax‘))                         #采用softmax激活
 50
 51 #设定求解器
 52 sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
 53 model.compile(loss=‘categorical_crossentropy‘,
 54               optimizer=sgd,
 55               metrics=[‘accuracy‘])
 56 #进行训练
 57 batch_size = 32
 58 nb_epoch = 200
 59 data_augmentation = False #是否数据扩充,主要针对样本过小方案
 60
 61 if not data_augmentation:
 62     print(‘Not using data augmentation.‘)
 63     result=model.fit(X_train, Y_train,
 64               batch_size=batch_size,
 65               nb_epoch=nb_epoch,
 66               validation_data=(X_test, Y_test),
 67               shuffle=True)
 68 else:
 69     print(‘Using real-time data augmentation.‘)
 70
 71     # this will do preprocessing and realtime data augmentation
 72     datagen = ImageDataGenerator(
 73         featurewise_center=False,  # set input mean to 0 over the dataset
 74         samplewise_center=False,  # set each sample mean to 0
 75         featurewise_std_normalization=False,  # divide inputs by std of the dataset
 76         samplewise_std_normalization=False,  # divide each input by its std
 77         zca_whitening=False,  # apply ZCA whitening
 78         rotation_range=0,  # randomly rotate images in the range (degrees, 0 to 180)
 79         width_shift_range=0.1,  # randomly shift images horizontally (fraction of total width)
 80         height_shift_range=0.1,  # randomly shift images vertically (fraction of total height)
 81         horizontal_flip=True,  # randomly flip images
 82         vertical_flip=False)  # randomly flip images
 83
 84     # compute quantities required for featurewise normalization
 85     # (std, mean, and principal components if ZCA whitening is applied)
 86     datagen.fit(X_train)
 87
 88     # fit the model on the batches generated by datagen.flow()
 89     result=model.fit_generator(datagen.flow(X_train, Y_train,
 90                         batch_size=batch_size),
 91                         samples_per_epoch=X_train.shape[0],
 92                         nb_epoch=nb_epoch,
 93                         validation_data=(X_test, Y_test))
 94
 95 #model.save_weights(weights,accuracy=False)
 96
 97 # 绘制出结果
 98 plt.figure
 99 plt.plot(result.epoch,result.history[‘acc‘],label="acc")
100 plt.plot(result.epoch,result.history[‘val_acc‘],label="val_acc")
101 plt.scatter(result.epoch,result.history[‘acc‘],marker=‘*‘)
102 plt.scatter(result.epoch,result.history[‘val_acc‘])
103 plt.legend(loc=‘under right‘)
104 plt.show()
105 plt.figure
106 plt.plot(result.epoch,result.history[‘loss‘],label="loss")
107 plt.plot(result.epoch,result.history[‘val_loss‘],label="val_loss")
108 plt.scatter(result.epoch,result.history[‘loss‘],marker=‘*‘)
109 plt.scatter(result.epoch,result.history[‘val_loss‘],marker=‘*‘)
110 plt.legend(loc=‘upper right‘)
111 plt.show()

以下是正确率和损失曲线

时间: 2024-10-06 10:39:23

机器学习三 卷积神经网络作业的相关文章

ufldl学习笔记与编程作业:Convolutional Neural Network(卷积神经网络)

ufldl出了新教程,感觉比之前的好,从基础讲起,系统清晰,又有编程实践. 在deep learning高质量群里面听一些前辈说,不必深究其他机器学习的算法,可以直接来学dl. 于是最近就开始搞这个了,教程加上matlab编程,就是完美啊. 新教程的地址是:http://ufldl.stanford.edu/tutorial/ 本节学习地址:http://ufldl.stanford.edu/tutorial/supervised/ConvolutionalNeuralNetwork/ 一直没更

使用CNN(convolutional neural nets)检测脸部关键点教程(三):卷积神经网络训练和数据扩充

第五部分 第二个模型:卷积神经网络 上图演示了卷积操作 LeNet-5式的卷积神经网络,是计算机视觉领域近期取得的巨大突破的核心.卷积层和之前的全连接层不同,采用了一些技巧来避免过多的参数个数,但保持了模型的描述能力.这些技巧是: 1, 局部联结:神经元仅仅联结前一层神经元的一小部分. 2, 权重共享:在卷积层,神经元子集之间的权重是共享的.(这些神经元的形式被称为特征图[feature map]) 3, 池化:对输入进行静态的子采样. 局部性和权重共享的图示 卷积层的单元实际上连接了前一层神经

从软件工程的角度写机器学习6——深度学习之卷积神经网络(CNN)实现

卷积神经网络(CNN)实现 背景 卷积神经网络广泛用于图像检测,它的实现原理与传统神经网络基本上是一样的,因此将普遍意义的神经网络和卷积神经网络的实现合成一篇. 神经网络实现思路 "扔掉神经元" 尽管所有教程在介绍神经网络时都会把一大堆神经元画出来,并且以输入节点--神经元--输出结点连线,但是,在编程实现时,基于神经元去编程是低效的.典型如这篇经典文章里面的代码: http://blog.csdn.net/zzwu/article/details/575125. 比较合适的方法是将神

吴恩达【深度学习工程师】 04.卷积神经网络 第三周目标检测 (1)基本的对象检测算法

该笔记介绍的是<卷积神经网络>系列第三周:目标检测(1)基本的对象检测算法 主要内容有: 1.目标定位 2.特征点检测 3.目标检测  目标定位 使用算法判断图片中是不是目标物体,如果是还要再图片中标出其位置并使用边框标记出来                          我们研究过的问题中,图片分类的思想可以帮助学习分类定位,而分类定位的思想又可以帮助学习对象检测 a.分类定位问题,通常有一个较大的对象位于图片中间位置. b.对象检测问题,图片可以含有多个对象,或一张图片中会有多个不同分

机器学习:利用卷积神经网络实现图像风格迁移 (一)

相信很多人都对之前大名鼎鼎的 Prisma 早有耳闻,Prisma 能够将一张普通的图像转换成各种艺术风格的图像,今天,我们将要介绍一下Prisma 这款软件背后的算法原理.就是发表于 2016 CVPR 一篇文章, " Image Style Transfer Using Convolutional Neural Networks" 算法的流程图主要如下: 总得来说,就是利用一个训练好的卷积神经网络 VGG-19,这个网络在ImageNet 上已经训练过了. 给定一张风格图像 a 和

【原创 深度学习与TensorFlow 动手实践系列 - 3】第三课:卷积神经网络 - 基础篇

提纲: 1. 链式反向梯度传到 2. 卷积神经网络 - 卷积层 3. 卷积神经网络 - 功能层 4. 实例:卷积神经网络MNIST分类 期待目标: 1. 清楚神经网络优化原理,掌握反向传播计算. 2. 掌握卷积神经网络卷积层的结构特点,关键参数,层间的连接方式. 3. 了解不同卷积神经网络功能层的作用,会进行简单的卷积神经网络结构设计. 4. 能够运行TensorFlow卷积神经网络 MNIST.  f(x, y, z) = (x + y) * z (3.00 + 1.00) * -2.00 =

卷积神经网络

1. 概述 回想一下BP神经网络.BP网络每一层节点是一个线性的一维排列状态,层与层的网络节点之间是全连接的.这样设想一下,如果BP网络中层与层之间的节点连接不再是全连接,而是局部连接的.这样,就是一种最简单的一维卷积网络.如果我们把上述这个思路扩展到二维,这就是我们在大多数参考资料上看到的卷积神经网络.具体参看下图: 上图左:全连接网络.如果我们有1000x1000像素的图像,有1百万个隐层神经元,每个隐层神经元都连接图像的每一个像素点,就有1000x1000x1000000=10^12个连接

【原创】梵高油画用深度卷积神经网络迭代十万次是什么效果? A neural style of convolutional neural networks

作为一个脱离了低级趣味的码农,春节假期闲来无事,决定做一些有意思的事情打发时间,碰巧看到这篇论文: A neural style of convolutional neural networks,译作卷积神经网络风格迁移. 这不是“暮光女”克里斯丁的研究方向吗?!连好莱坞女星都开始搞人工智能发paper,真是热的可见一斑! 这篇文章中讲述了如何用深层卷积神经网络来将一张普通的照片转化成一幅艺术风格的画作(比如梵高的星夜),可以看做是DL(deep learning)在NPR(非真实渲染non p

神经网络:卷积神经网络CNN

一.前言 这篇卷积神经网络是前面介绍的多层神经网络的进一步深入,它将深度学习的思想引入到了神经网络当中,通过卷积运算来由浅入深的提取图像的不同层次的特征,而利用神经网络的训练过程让整个网络自动调节卷积核的参数,从而无监督的产生了最适合的分类特征.这个概括可能有点抽象,我尽量在下面描述细致一些,但如果要更深入了解整个过程的原理,需要去了解DeepLearning. 这篇文章会涉及到卷积的原理与图像特征提取的一般概念,并详细描述卷积神经网络的实现.但是由于精力有限,没有对人类视觉的分层以及机器学习等