美文网首页
Keras两种工作模式及其实现

Keras两种工作模式及其实现

作者: 卜是 | 来源:发表于2020-08-14 09:53 被阅读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])
    

    相关文章

      网友评论

          本文标题:Keras两种工作模式及其实现

          本文链接:https://www.haomeiwen.com/subject/ofnwdktx.html