《智能系统与技术丛书 生成对抗网络入门指南》—2.3.2Keras使用入门

举报
华章计算机 发表于 2019/05/29 16:04:50 2019/05/29
【摘要】 本书摘自《智能系统与技术丛书 生成对抗网络入门指南》一文中的第2章,第2.3.2节,作者是史丹青。

2.3.2 Keras使用入门

       Keras包含两种模型类型,第一种是序列模型,第二种是函数式模型。其中后者属于Keras的进阶型模型结构,适用于多入多出、有向无环图或具备共享层的模型,具体可参看Keras官方文档。本小节中主要以序列模型为例来带领读者学习Keras的使用方法。

       所谓序列模型是指多个网络层线性堆叠的模型,结构如下列代码所示。该序列模型包含了一个784×32的全连接层、ReLU激活函数、32×10的全连接层以及softmax激活函数。

from keras.models import Sequential

from keras.layers import Dense, Activation


model = Sequential([

    Dense(32, input_shape=(784,)),

    Activation('relu'),

    Dense(10),

    Activation('softmax'),

])

       也可以使用add()方法进行序列模型中网络层的添加。

model = Sequential()

model.add(Dense(32, input_dim=784))

model.add(Activation('relu'))

       下面我们来看一个Keras实现的神经网络二分类示例,其网络结构非常简单,由两个全连接层构成。示例中包含了网络模型的搭建、模型的编译以及训练,读者可以在自己的设备上尝试运行此代码以熟悉Keras的使用。

import numpy as np

from keras.models import Sequential

from keras.layers import Dense

data = np.random.random((1000,100))

labels = np.random.randint(2,size=(1000,1))

model = Sequential()

model.add(Dense(32, activation='relu', input_dim=100))

model.add(Dense(1, activation='sigmoid'))

model.compile(optimizer='rmsprop',loss='binary_crossentropy',metrics=['accuracy'])

model.fit(data,labels,epochs=10,batch_size=32)

predictions = model.predict(data)

       下面我们来尝试搭建一些序列模型。首先使用序列模型来搭建卷积神经网络(CNN),代码如下。

from keras.models import Sequential

from keras.layers import Activation,Conv2D,MaxPooling2D,Flatten

model = Sequential()

model.add(Conv2D(32,(3,3),padding='same',input_shape=x_train.shape[1:]))

model.add(Activation('relu'))

model.add(Conv2D(32,(3,3)))

model.add(Activation('relu'))

model.add(MaxPooling2D(pool_size=(2,2)))

model.add(Dropout(0.25))

model.add(Conv2D(64,(3,3), padding='same'))

model.add(Activation('relu'))

model.add(Conv2D(64,(3, 3)))

model.add(Activation('relu'))

model.add(MaxPooling2D(pool_size=(2,2)))

model.add(Dropout(0.25))

model.add(Flatten())

model.add(Dense(512))

model.add(Activation('relu'))

model.add(Dropout(0.5))

model.add(Dense(num_classes))

model.add(Activation('softmax'))

       同样,也可以使用Keras的序列模型实现循环神经网络(RNN),代码如下。

from keras.models import Sequential

from keras.klayers import Dense,Embedding,LSTM

model = Sequential()

model.add(Embedding(20000,128))

model.add(LSTM(128,dropout=0.2,recurrent_dropout=0.2))

model.add(Dense(1,activation='sigmoid'))

       可以发现使用Keras来实现那些复杂的深度学习网络其实是一件非常简单的事情,在模型搭建完毕后可以设置模型的编译,下面分别是CNN与RNN的编译。

       CNN模型的优化与编译:

from keras.optimizers import RMSprop

opt = keras.optimizers.rmsprop(lr=0.0001, decay=1e-6)

model.compile(loss='categorical_crossentropy', optimizer=opt, metrics=['accuracy'])

       RNN模型的编译:

model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

       在完成模型的编译后就可以对模型进行训练了,这里的代码是对RNN模型进行训练与评估。

model.fit(x_train, y_train, batch_size=32, epochs=15, verbose=1, validation_

    data=(x_test,y_test))

score = model.evaluate(x_test, y_test, batch_size=32)

       最终可以将模型保存到本地。

from keras.models import load_model

model.save('model_file.h5')

my_model = load_model('my_model.h5')

       在下一小节中会通过一个简明的案例让大家了解如何使用Keras解决实际的应用问题。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。