Keras中的两种模型:Sequential和Model用法
在Keras中有两种深度学习的模型:序列模型(Sequential)和通用模型(Model)。差异在于不同的拓扑结构。
序列模型Sequential
序列模型各层之间是依次顺序的线性关系,模型结构通过一个列表来制定。
fromkeras.modelsimportSequential fromkeras.layersimportDense,Activation layers=[Dense(32,input_shape=(784,)), Activation('relu'), Dense(10), Activation('softmax')] model=Sequential(layers)
或者逐层添加网络结构
fromkeras.modelsimportSequential fromkeras.layersimportDense,Activation model=Sequential() model.add(Dense(32,input_shape=(784,))) model.add(Activation('relu')) model.add(Dense(10)) model.add(Activation('softmax'))
通用模型Model
通用模型可以设计非常复杂、任意拓扑结构的神经网络,例如有向无环网络、共享层网络等。相比于序列模型只能依次线性逐层添加,通用模型能够比较灵活地构造网络结构,设定各层级的关系。
fromkeras.layersimportInput,Dense fromkeras.modelsimportModel #定义输入层,确定输入维度 input=input(shape=(784,)) #2个隐含层,每个都有64个神经元,使用relu激活函数,且由上一层作为参数 x=Dense(64,activation='relu')(input) x=Dense(64,activation='relu')(x) #输出层 y=Dense(10,activation='softmax')(x) #定义模型,指定输入输出 model=Model(input=input,output=y) #编译模型,指定优化器,损失函数,度量 model.compile(optimizer='rmsprop',loss='categorical_crossentropy',metrics=['accuracy']) #模型拟合,即训练 model.fit(data,labels)
补充知识:keras神经网络,Sequential序贯模型(二分类、多分类)
1Sequential参数
model=Sequential()model.add(Dense(32,input_dim=78))
解释:
Sequential的第一个关于输入数据shape的参数,后边的各个层则可以自动推到出中间数据的shape
01传递一个input_shape的关键字参数给第一层,如果填入None则表示此位置可能是任何正整数。数据的batch大小不应包含在其中。
02有些2D层,如Dense,支持通过指定其输入维度input_dim来隐含的指定输入数据shape,是一个Int类型的数据。一些3D的时域层支持通过参数input_dim和input_length来指定输入shape。
03如果你需要为输入指定一个固定大小的batch_size(常用于statefulRNN网络),可以传递batch_size参数到一个层中,例如你想指定输入张量的batch大小是32,数据shape是(6,8),则你需要传递batch_size=32和input_shape=(6,8)。
2、compile配置学习过程
model.compile(optimizer='rmspropy',loss='categorical_crossentropy',metrics=['accuracy'])
01优化器optimizer:
该参数可指定为已预定义的优化器名,如rmsprop、adagrad,或一个Optimizer类的对象。
02损失函数loss:
该参数为模型试图最小化的目标函数,它可为预定义的损失函数名,如categorical_crossentropy、mse,也可以为一个损失函数。
03指标列表metrics:
对分类问题,我们一般将该列表设置为metrics=['accuracy']。指标可以是一个预定义指标的名字,也可以是一个用户定制的函数.指标函数应该返回单个张量,或一个完成metric_name->metric_value映射的字典.
3、案例
01基于多层感知器Softmax多分类(图片)
fromkeras.modelsimportSequential fromkeras.layersimportDense,Dropout,Activation fromkeras.optimizersimportSGD importkeras#abd #Generatedummydata importnumpyasnp x_train=np.random.random((1000,20)) y_train=keras.utils.to_categorical(np.random.randint(10,size=(1000,1)),num_classes=10) x_test=np.random.random((100,20)) y_test=keras.utils.to_categorical(np.random.randint(10,size=(100,1)),num_classes=10) model=Sequential() #Dense(64)isafully-connectedLayerwith64hiddenunits. #inthefirstlayer,youmustspecifytheexpectedinputdatashape; #here,20-dimensionalvectors. model.add(Dense(64,activation='relu',input_dim=20)) model.add(Dropout(0.5)) model.add(Dense(64,activation='relu')) model.add(Dropout(0.5)) model.add(Dense(10,activation='softmax')) sgd=SGD(lr=0.01,decay=1e-6,momentum=0.9,nesterov=True) model.compile(loss='categorical_crossentropy',#损失函数 optimizer=sgd,# metrics=['accuracy']#精确度,评估模型在训练和测试时的网络性能的指标。 ) model.fit(x_train,y_train,epochs=20,batch_size=128) #batch_size整数,指定进行梯度下降时每个批次包含的样本数训练时一个批次的样本 #会被计算一次梯度下降,使目标函数进行一步优化 #epochs;训练20次,整数,训练终止时候的epoch值 score=model.evaluate(x_test,y_test,batch_size=128) #评估函数,本函数返回一个测试误差的标量值(如果模型没有其他评价指标)。
02MLP的二分类
importnumpyasnp fromkeras.modelsimportSequential fromkeras.layersimportDense,Dropout x_train=np.random.random((1000,20)) y_train=keras.utils.to_categorical(np.random.randint(10,size=(1000,1)),num_classes=10) x_test=np.random.random((100,20)) y_test=keras.utils.to_categorical(np.random.randint(10,size=(100,1)),num_classes=10) model=Sequential() model.add(Dense(64,input_dim=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, epoches=20, batch_size=128) score=model.evaluate(x_test,y_test,batch_size=128)
相关详细说明见官方文档:https://keras-cn.readthedocs.io/en/latest/getting_started/sequential_model/
以上这篇Keras中的两种模型:Sequential和Model用法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。