Keras 模型建立方式--- 序贯模型和函数式模型

Keras有两种类型的模型,序贯模型(Sequential)和函数式模型(Model),函数式模型应用更为广泛,序贯模型是函数式模型的一种特殊情况。序贯模型:使用序贯模型可以像搭积木一样一层一层地网上叠加神经网络 .

一、序贯模型

序贯模型的基本步骤
model.add,添加层;
model.compile,模型训练的BP模式设置;
model.fit,模型训练参数设置 + 训练;
model.evaluate,模型评估
model.predict,模型预测

1、建立

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

from keras.models import Sequential
from keras.layers import Dense, Activation

model = Sequential([Dense(32, units=784),Activation('relu'),Dense(10),Activation('softmax'),])

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

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

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

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

model = Sequential()
model.add(Dense(64, input_shape=(50,), activation='sigmoid'))

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

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

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

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

4、训练
训练模型一般使用fit函数

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

5、评估
根据验证集评估模型的好坏,包含损失和精确度两个值

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

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

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

7、实例

import numpy as np
from keras.models import Sequential
from keras.layers import Dense, Dropout

# 生成训练集和验证集
x_train = np.random.random((2000,30))
y_train = np.random.randint(3, size=(2000, 1))
x_val = np.random.random((200, 30))
y_val = np.random.randint(3, size=(200, 1))

model = Sequential()
model.add(Dense(64, input_dim=30, 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,模型训练参数设置 + 训练;
model.evaluate,模型评估
model.predict,模型预测
与上文的主要区别是第一步,参数的输入方式有点区别

2、建立

model=Model(inputs=, outputs=)

3、指定输入数据的shape

inputs = Input(shape=(20,))

4、实例
与上文序贯式模型进行对比

import numpy as np
from keras.models import Model
from keras.layers import Dense, Dropout

# 生成训练集和验证集
x_train = np.random.random((2000,30))
y_train = np.random.randint(3, size=(2000, 1))
x_val = np.random.random((200, 30))
y_val = np.random.randint(3, size=(200, 1))

inputs = Input(shape=(30,))
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=2
y=model.predict(x,verbose=0)
print(y)
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值