《智能系统与技术丛书 生成对抗网络入门指南》—2.3.2Keras使用入门
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解决实际的应用问题。
- 点赞
- 收藏
- 关注作者
评论(0)