Keras两种工作模式及其实现

2020-08-14  本文已影响0人  卜是

Keras有两种主要的工作模式:顺序模型和功能模型。顺序类型用于简单体系结构,一般以线性方式堆叠层。功能类型可支持不同层结构的更通用模型,如多输出模型。

顺序模型

  1. 模型定义
model = Sequential()
model.add(Dense(units=64, input_dim=784))
model.add(Activation('softmax'))

等价于:

model = Sequential([
     Dense(64, input_shape(784,), activation='softmax')
])
  1. 设置学习配置
    损失函数、优化器、模型性能的度量
model.compile(loss='categorical_crossentropy',
                        optimizer='sgd',
                        metrics=['accuracy']
)

可使用如下方式更好的设置优化器:

optimizer = keras.optimizers.SGD(lr=0.02, momentum=0.8, nesterov=True)
  1. 模型训练、评估、预测
#提前终止,在多少个回合之内没有改进就停止
early_stop = EarlyStopping(monitor='val_loss', min_delta=0, patience=10, verbose=0, mode='auto')
model.fit(x_train, y_train, epochs=10, batch_size=64, casslbacks=[TensorBoard(log_dir='./logs'), early_stop])
loss = model.evaluate(x_test, y_test, batch_size=64)
classes = model.predict(x_test, batch_size=64)

功能模型

相比于顺序模型,功能模型的区别在于:首先定义输入输出,再实例化模型。

inputs = Input(shape=(784,))
x = Dense(64, activation='relu')(inputs)
x= Dense(32, activation='relu')(x)
outputs = Dense(10, activation='softmax')(x)
#生成模型
model = Model(inputs=inputs, outputs=outputs)

自编码器的实现

import keras
from keras.layers import Input, Conv2D, MaxPooling2D, UpSampling2D
from keras.models import Model
from keras.callbacks import TensorBoard, ModelCheckpoint
from keras.datasets import cifar10
import numpy as np

(x_train, y_train), (x_test, y_test) = cifar10.load_data()
x_train = x_train[np.where(y_train==1)[0],:,:,:]
x_test = x_test[np.where(y_test==1)[0],:,:,:]

x_train = x_train.astype('float32') / 255.
x_test = x_test.astype('float32') / 255.

x_train_n = x_train + 0.5 *\
 np.random.normal(loc=0.0, scale=0.4, size=x_train.shape) 

x_test_n = x_test + 0.5 *\
 np.random.normal(loc=0.0, scale=0.4, size=x_test.shape) 

x_train_n = np.clip(x_train_n, 0., 1.)
x_test_n = np.clip(x_test_n, 0., 1.)

inp_img = Input(shape=(32, 32, 3))   

img= Conv2D(32, (3, 3), activation='relu', padding='same')(inp_img)
img = MaxPooling2D((2, 2), padding='same')(img)
img = Conv2D(32, (3, 3), activation='relu', padding='same')(img)
img = UpSampling2D((2, 2))(img)
decoded = Conv2D(3, (3, 3), activation='sigmoid', padding='same')(img)

autoencoder = Model(inp_img, decoded)

autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy')

tensorboard = TensorBoard(log_dir='./models/autoencoder',\
              histogram_freq=0, write_graph=True, write_images=True)
model_saver = ModelCheckpoint(
                    filepath='./models/autoencoder/autoencoder_model',\
                     verbose=0, period=2)

autoencoder.fit(x_train_n, x_train,
                epochs=10,
                batch_size=64,
                shuffle=True,
                validation_data=(x_test_n, x_test),
                callbacks=[tensorboard, model_saver])
上一篇下一篇

猜你喜欢

热点阅读