自定义模型与训练:从构建到优化
1. 子类化 API 与自定义层
“子类化 API”通常指通过子类化创建自定义模型,但实际上通过子类化还能创建很多其他内容。自定义层可以像其他层一样使用,但只能用于函数式 API 和子类化 API,不能用于顺序式 API(顺序式 API 只接受单输入单输出的层)。
若层在训练和测试阶段行为不同(如使用 Dropout 或 BatchNormalization 层),需在 call() 方法中添加 training 参数来决定具体操作。以下是一个在训练时添加高斯噪声进行正则化,测试时不做处理的自定义层示例:
import tensorflow as tf
import keras
class MyGaussianNoise(keras.layers.Layer):
def __init__(self, stddev, **kwargs):
super().__init__(**kwargs)
self.stddev = stddev
def call(self, X, training=None):
if training:
noise = tf.random.normal(tf.shape(X), stddev=self.stddev)
return X + noise
else:
return X
def compute_output_shape(self, ba
超级会员免费看
订阅专栏 解锁全文
4万+

被折叠的 条评论
为什么被折叠?



