3.3 keras模型构建的三种方式

3.3 keras模型构建的三种方式

1. 使用tf.keras.Sequential按层顺序构建模型,代码示例:

model = Sequential()

#卷积层conv_1_1
model.add(Cov2D(input_shape = (64, 64, 3),filters = 32, 
			kernel_size = 3, activation = 'relu', kernel_initializer = 'he_uniform', name = 'conv_1_1)

#卷积层 conv_1_2
model.add(Cov2D(filters = 32, kernel_size = 3, 
			activation = 'relu', kernel_initializer = 'he_uniform', name = 'conv_1_2)

#池化层max_pool_1
model.add(MaxPool2D(pool_size = 32, name = 'max_pool_1))

#展平层
model.add(Flatten(name = 'flatten'))

#全连接层
model.add(Dense(unit = 6, activation = 'softmax', name = 'logit'))

#设置损失函数loss、优化器optimizer、评价指标metrics
model.compile(loss="categorical_crossentropy", 
			  optimizer = tf.keras.optimizers.SGD(learning_rate = 0.001), 
			  metrics = ["accuracy"])

或者:

model = Sequential([
	Conv2D(input_shape = (64, 64, 3), filters = 32,
			kernel_size = 3, activation = 'relu', name = 'conv_1_1'),
	Conv2D(filters = 32, kernel_size = 3, activation = 'relu', name = 'conv_1_2'),
	MaxPool2D(poo_size = 2, anme = 'max_pool_1'),
	Flatten(name = 'flatten'),
	Dense(units = 6, activation = "softmax", name = 'logit')])

#设置损失函数loss、优化器optimizer、评价标准metrics
model.compile(loss="categorical_crossentropy", 
			  optimizer = tf.keras.optimizers.SGD(learning_rate = 0.001), 
			  metrics = ["accuracy"])

适用场合:对于顺序结构的模型(没有多个输入输出,也没有分支),优先使用Sequential方法构建。

缺点:不能创建以下模型结构

  • 共享层
  • 模型分支
  • 多个输入分支
  • 多个输出分支

2. Keras函数式API创建模型,代码示例:

#输入层input
input = input(shape = (64, 64, 3), name = 'input')

#卷积层conv_1_2
x = Conv2D(filters = 32, kernel_size = 3, activation = 'relu', name = 'conv_1_1')(input)

#卷积层con_1_2
x = Conv2D(filters = 32, kernel_size = 3, activation = 'relu', name = 'conv_1_2)(x)

#池化层max_pool_1
x = MaxPool2D(pool_size = 2, name = 'max_pool_1)(x)

#展平层
x = Flatten(name = 'flatten')(x)

#全连接层
output = Dense(units = 6, activation = "softmax", name = 'logit')(x)

model = Model(inputs = input, outputs = output)

#设置损失函数loss、优化器optimizer、评价标准metrics
model.compile(loss="categorical_crossentropy", 
			  optimizer = tf.keras.optimizers.SGD(learning_rate = 0.001), 
			  metrics = ["accuracy"])

适用场合:如果模型有多输入或者多输出,或者模型需要共享权重,或者模型具有分支连接、循环连接等非顺序结构,推荐使用函数式API进行创建。

3. Keras Model Subclassing方式,代码示例:

#定义一个子类来搭建模型
class ConvModel(Model):
	def __init__(self):
		#父类初始化
		super(ConvModel, self).__init__()

		#卷积层conv_1_1
		self.conv_1_1 = Conv2D(input_shape = (64, 64, 3),
							  filters = 32, kernel_size = 3, activation = 'relu', name = 'con_1_1')
		
		#卷积层conv_1_2
		self.conv_1_2 = Conv2D(filters = 32, kernel_size = 3,
								activation = 'relu', name = 'conv_1_2')
		
		#池化层max_pool_1
		self.max_pool_1 = MaxPool2D(pool.size = 2, name = 'max_pool_1')

		#展平层flatten
		self.dense =  Dense(units = 6, activation = "softmax", name = 'logit')

	def call(selfm, x):
		x = self.conv_1_1(x)
		x = self.conv_1_2(x)
		x = self.max_pool_1(x)
		x = self.conv_2_1(x)
		x = self.conv_2_2(x)
		x = self.max_pool_2(x)
		x = self.flatten(x)
		x =  self.dense(x)
		return x

#类实例化
model = ConvModel()

构造tf.keras.Model的子类来编写模型,需要覆写Model类中的__init__方法和call方法。
__init__方法中定义我们要使用的层,这里可以使用Keras自带的层;
call方法中实现模型的网络层。

适用场合:需要编写自定义的模型,如在网络中使用自定义的层、自定义的损失函数、自定义的激活函数等。

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值