当前位置:
首页 >
Keras —— 序贯模型和函数式模型
发布时间:2024/1/1
40
豆豆
生活随笔
收集整理的这篇文章主要介绍了
Keras —— 序贯模型和函数式模型
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
序贯模型
序贯模型是多个网络层的线性堆叠,是函数式模型的简略版,为最简单的线性、从头到尾的结构顺序,不发生分叉。
1、应用序贯模型的基本步骤
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、应用函数式模型的基本步骤
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 —— 序贯模型和函数式模型的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: ADC前端放大器以及RC滤波器设计考虑
- 下一篇: 【CentOS】CentOS镜像文件各个