欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

Keras —— 序贯模型和函数式模型

发布时间:2024/1/1 40 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Keras —— 序贯模型和函数式模型 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

序贯模型

序贯模型是多个网络层的线性堆叠,是函数式模型的简略版,为最简单的线性、从头到尾的结构顺序,不发生分叉。

1、应用序贯模型的基本步骤

  • model.add,添加层;
  • model.compile,模型训练的BP模式设置;
  • model.fit,模型训练参数设置 + 训练;
  • 模型评估
  • 模型预测
  • 2、创建

    1、可以通过向Sequential模型传递一个layer的list来构造该模型:

    from keras.models import Sequential from keras.layers import Dense, Activationmodel = Sequential([ Dense(32, units=784), Activation('relu'), Dense(10), Activation('softmax'), ])

    2、也可以通过.add()方法一个个的将layer加入模型中:

    model = Sequential() model.add(Dense(32, input_shape=(784,))) model.add(Activation('relu'))

    3、指定输入数据的shape

    模型需要知道输入数据的shape,因此,Sequential的第一层需要接受一个关于输入数据shape的参数,后面的各个层则可以自动的推导出中间数据的shape,因此不需要为每个层都指定这个参数。有几种方法来为第一层指定输入数据的shape

    1、传递一个input_shape的关键字参数给第一层,input_shape是一个tuple类型的数据

    model = Sequential() model.add(Dense(64, input_shape=(20,), activation='relu'))

    2、有些2D层,如Dense,支持通过指定其输入维度input_dim来隐含的指定输入数据shape,是一个Int类型的数据。一些3D的时域层支持通过参数input_dim和input_length来指定输入shape。

    model = Sequential() model.add(Dense(64, input_dim=20, activation='relu'))

    4、编译

    在训练模型之前,我们需要通过compile来对学习过程进行配置。compile接收三个参数:优化器optimizer,损失函数loss,指标列表metrics

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

    5、训练

    训练模型一般使用fit函数

    model.fit(x_train, y_train,epochs=20,batch_size=128)

    6、评估

    根据验证集评估模型的好坏

    score = model.evaluate(x_val, y_val, batch_size=128) print('val score:', score[0]) print('val accuracy:', score[1])

    7、预测

    对已训练完成的模型,输入特征值x会预测得到标签y

    x=1 y=model.predict(x,verbose=0) print(y)

    8、示例

    import numpy as np from keras.models import Sequential from keras.layers import Dense, Dropout# 准备训练集和验证集 x_train = np.random.random((1000, 20)) y_train = np.random.randint(2, size=(1000, 1)) x_val = np.random.random((100, 20)) y_val = np.random.randint(2, size=(100, 1))model = Sequential() model.add(Dense(64, input_dim=20, activation='relu')) # 或 model.add(Dense(64, input_shape=(20,), activation='relu')) model.add(Dropout(0.5)) model.add(Dense(64, activation='relu')) model.add(Dropout(0.5)) model.add(Dense(1, activation='sigmoid'))model.compile(loss='binary_crossentropy',optimizer='rmsprop',metrics=['accuracy']) model.fit(x_train, y_train,epochs=20,batch_size=128)score = model.evaluate(x_val, y_val, batch_size=128) print('val score:', score[0]) print('val accuracy:', score[1])x=1 y=model.predict(x,verbose=0) print(y)

    函数式模型

    比序贯模型要复杂,可以同时/分阶段输入变量,分阶段输出想要的模型

    1、应用函数式模型的基本步骤

  • model.layers,添加层;
  • model.compile,模型训练的BP模式设置;
  • model.fit,模型训练参数设置 + 训练;
  • 模型评估
  • 模型预测
  • 2、创建

    model=Model(inputs=, outputs=)

    3、指定输入数据的shape

    inputs = Input(shape=(20,))

    4、编译,训练,评估,预测等步骤与序贯式模型相同,这里不再赘述

    5、示例一

    基于上文序贯式模型进行改造

    import numpy as np from keras.models import Model from keras.layers import Dense, Dropout# 准备训练集和验证集 x_train = np.random.random((1000, 20)) y_train = np.random.randint(2, size=(1000, 1)) x_val = np.random.random((100, 20)) y_val = np.random.randint(2, size=(100, 1))inputs = Input(shape=(20,)) x=Dense(64,activation='relu')(inputs) x=Dropout(0.5)(x) x=Dense(64,activation='relu')(x) x=Dropout(0.5)(x) predictions=Dense(1, activation='sigmoid')(x)model=Model(inputs=inputs, outputs=predictions) model.compile(loss='binary_crossentropy', optimizer='rmsprop', metrics=['accuracy']) model.fit(x_train, y_train,epochs=20,batch_size=128)score = model.evaluate(x_val, y_val, batch_size=128) print('val score:', score[0]) print('val accuracy:', score[1])x=1 y=model.predict(x,verbose=0) print(y)

    6、示例二

    多输入多输出模型

    from keras.layers import Input, Embedding, LSTM, Dense from keras.models import Modelmain_input = Input(shape=(100,), dtype='int32', name='main_input') x = Embedding(output_dim=512, input_dim=10000, input_length=100)(main_input) lstm_out = LSTM(32)(x) auxiliary_output = Dense(1, activation='sigmoid', name='aux_output')(lstm_out) auxiliary_input = Input(shape=(5,), name='aux_input') x = keras.layers.concatenate([lstm_out, auxiliary_input])# We stack a deep densely-connected network on top x = Dense(64, activation='relu')(x) x = Dense(64, activation='relu')(x) x = Dense(64, activation='relu')(x)# And finally we add the main logistic regression layer main_output = Dense(1, activation='sigmoid', name='main_output')(x)model = Model(inputs=[main_input, auxiliary_input], outputs=[main_output, auxiliary_output]) model.compile(optimizer='rmsprop',loss={'main_output': 'binary_crossentropy', 'aux_output': 'binary_crossentropy'},loss_weights={'main_output': 1., 'aux_output': 0.2})# And trained it via: model.fit({'main_input': headline_data, 'aux_input': additional_data},{'main_output': labels, 'aux_output': labels},epochs=50, batch_size=32)

    总结

    以上是生活随笔为你收集整理的Keras —— 序贯模型和函数式模型的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。