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
    评论
Keras是一个高级神经网络API,它在TensorFlow、Theano和CNTK等低级库之上提供了一个简单易用的用户界面。在Keras中,您可以使用Python编写高级神经网络模型,而无需编写低级的神经网络代码。下面是构建模型的基本步骤: 1.导入必要的库 首先,您需要导入所需的库,包括Keras、NumPy和Matplotlib等。 ```python import keras import numpy as np import matplotlib.pyplot as plt ``` 2.加载数据集 接下来,您需要加载数据集。您可以使用Keras内置的数据集,例如MNIST数字图像数据集。您也可以使用自己的数据集。 ```python from keras.datasets import mnist (x_train, y_train), (x_test, y_test) = mnist.load_data() # 将图像数据转换为浮点数,并将其归一化为0到1之间的值 x_train = x_train.astype('float32') / 255. x_test = x_test.astype('float32') / 255. # 将标签数据转换为独热编码 y_train = keras.utils.to_categorical(y_train, 10) y_test = keras.utils.to_categorical(y_test, 10) ``` 3.定义模型 接下来,您需要定义模型Keras提供了一个Sequential模型,您可以使用它来堆叠各种神经网络层。例如,以下代码定义了一个具有两个密集层的模型: ```python from keras.models import Sequential from keras.layers import Dense model = Sequential() model.add(Dense(512, activation='relu', input_shape=(784,))) model.add(Dense(10, activation='softmax')) ``` 这个模型有两个密集层。第一层有512个神经元,使用ReLU激活函数。输入形状为(784,),因为MNIST图像大小为28x28像素,展平后为784个像素。第二层有10个神经元,使用Softmax激活函数,因为MNIST数据集有10个类别。 4.编译模型 接下来,您需要编译模型。在编译之前,您需要指定损失函数、优化器和评估指标。例如,以下代码将损失函数设置为交叉熵,优化器设置为Adam,并将评估指标设置为准确性: ```python model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) ``` 5.训练模型 接下来,您需要训练模型。您可以使用fit()函数来训练模型。例如,以下代码将模型拟合到训练数据中,并使用批量大小为128、训练周期数为5: ```python history = model.fit(x_train, y_train, batch_size=128, epochs=5, validation_data=(x_test, y_test)) ``` 6.评估模型 接下来,您需要评估模型。您可以使用evaluate()函数来评估模型。例如,以下代码将模型评估为测试数据集: ```python score = model.evaluate(x_test, y_test, verbose=0) print('Test loss:', score[0]) print('Test accuracy:', score[1]) ``` 7.绘制模型的训练过程 最后,您可以使用Matplotlib库绘制模型的训练过程。例如,以下代码绘制了模型的训练损失和准确性: ```python plt.plot(history.history['loss'], label='train_loss') plt.plot(history.history['val_loss'], label='val_loss') plt.plot(history.history['accuracy'], label='train_acc') plt.plot(history.history['val_accuracy'], label='val_acc') plt.legend() plt.show() ``` 这是一个基本的Keras模型构建过程。您可以根据需要添加更多的层和参数,以获得更好的性能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值