Keras实践笔记5——卷积深度神经网络

1from keras.datasets import mnist 2from keras.layers import Dense, Flatten, Conv2D, MaxPooling2D, Dropout 3from keras.models import Sequential 4from keras.optimizers import RMSprop 5from keras.utils import np_utils 6 7img_rows, img_cols = 28, 28 8 9(X_train, y_train), (X_test, y_test) = mnist.load_data() 10 11X_train = X_train.reshape(X_train.shape[0], img_rows, img_cols, 1) 12X_test = X_test.reshape(X_test.shape[0], img_rows, img_cols, 1) 13input_shape = (img_rows, img_cols, 1) 14 15X_train = X_train.astype('float32') / 255. 16X_test = X_test.astype('float32') / 255. 17 18Y_train = np_utils.to_categorical(y_train, 10) 19Y_test = np_utils.to_categorical(y_test, 10) 20 21model = Sequential() 22 23model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=input_shape)) 24model.add(MaxPooling2D()) 25model.add(Dropout(0.2)) 26 27model.add(Conv2D(64, kernel_size=(3, 3), activation='relu')) 28model.add(MaxPooling2D()) 29model.add(Dropout(0.2)) 30 31model.add(Conv2D(128, kernel_size=(3, 3), activation='relu')) 32model.add(MaxPooling2D()) 33model.add(Flatten()) 34model.add(Dropout(0.2)) 35 36model.add(Dense(625, activation='relu')) 37model.add(Dropout(0.5)) 38 39model.add(Dense(10, activation='softmax')) 40 41opt = RMSprop() 42model.compile(optimizer=opt, loss='categorical_crossentropy', metrics=['accuracy']) 43model.summary() 44 45history = model.fit(X_train, Y_train, nb_epoch=10, batch_size=128, shuffle=True, verbose=2, 46 validation_data=(X_test, Y_test)) 47 48 49_________________________________________________________________ 50Layer (type) Output Shape Param # 51================================================================= 52conv2d_1 (Conv2D) (None, 26, 26, 32) 320 53_________________________________________________________________ 54max_pooling2d_1 (MaxPooling2 (None, 13, 13, 32) 0 55_________________________________________________________________ 56dropout_1 (Dropout) (None, 13, 13, 32) 0 57_________________________________________________________________ 58conv2d_2 (Conv2D) (None, 11, 11, 64) 18496 59_________________________________________________________________ 60max_pooling2d_2 (MaxPooling2 (None, 5, 5, 64) 0 61_________________________________________________________________ 62dropout_2 (Dropout) (None, 5, 5, 64) 0 63_________________________________________________________________ 64conv2d_3 (Conv2D) (None, 3, 3, 128) 73856 65_________________________________________________________________ 66max_pooling2d_3 (MaxPooling2 (None, 1, 1, 128) 0 67_________________________________________________________________ 68flatten_1 (Flatten) (None, 128) 0 69_________________________________________________________________ 70dropout_3 (Dropout) (None, 128) 0 71_________________________________________________________________ 72dense_1 (Dense) (None, 625) 80625 73_________________________________________________________________ 74dropout_4 (Dropout) (None, 625) 0 75_________________________________________________________________ 76dense_2 (Dense) (None, 10) 6260 77================================================================= 78Total params: 179,557 79Trainable params: 179,557 80Non-trainable params: 0

卷积深度神经网络在深度神经网络的基础上,加入了卷积层和池化层。网络的第一层是二维卷积层

Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=input_shape)

这一层的卷积核的数目为32,也就是输出的维度。卷积的空间维度是3_3,也就是用一个3_3的框框去做卷积,采用relu激活函数。 接下来用了MaxPooling2D 这个二维的池化层,主要用来降维和特征提取。

在连续做了3次CNN之后,使用了一个Flatten层。这个层会把多维数据压扁成一维数据,但是不会影响数据总量也就是batch的大小,从summery里面来看,就是把(None, 1, 1, 128) 压扁成了(None, 128) 。

最后,在fit的时候我们看到了一个新的参数shuffle=True,这个参数其实是默认开启的,不写也可以,指定为True,会在每次训练的时候让训练集随机打乱

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

Keras实践笔记5——卷积深度神经网络 - HelloWorld