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

网友投稿 824 2022-05-29

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'))

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

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解决实际的应用问题。

网络 深度学习

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【IoT】加密与安全:动态密码图解:HOTP 与 TOTP 算法
下一篇:ObjectInputStream 所引起的 Java 内存泄漏问题
相关文章