class ConditionBatchNorm(Layer):
def build(self, input_shape):
self.input_size = input_shape
n, h, w, c = input_shape
self.gamma = self.add_weight(shape=[self.n_class, c],
initializer=‘zeros’, trainable=True, name=‘gamma’)
self.moving_mean = self.add_weight(shape=[1, 1, 1, c],
initializer=‘zeros’, trainable=False, name=‘moving_mean’)
self.moving_var = self.add_weight(shape=[1, 1, 1, c],
initializer=‘zeros’, trainable=False, name=‘moving_var’)
当运行条件批归一化时,为标签检索正确的 β \beta β 和 γ \gamma γ。这是使用 tf.gather(self.beta, labels) 完成的,它在概念上等效于 beta = self.beta[labels],如下所示:
def call(self, x, labels, trainable=False):
beta = tf.gather(self.beta, labels)
beta = tf.expand_dims(beta, 1)
gamma = tf.gather(self.gamma, labels)
gamma = tf.expand_dims(gamma, 1)
if training:
mean, var = tf.nn.moments(x, axes=(0,1,2), keepdims=True)
self.moving_mean.assign(self.decay * self.moving_mean + (1-self.decay)*mean)
self.moving_var.assign(self.decay * self.moving_var + (1-self.decay)*var)
output = tf.nn.batch_normalization(x, mean, var, beta, gamma, self.eps)
else:
output = tf.nn.batch_normalization(x, self.moving_mean, self.moving_var, beta, gamma, self.eps)
return output
条件批归一化的使用方式与批归一化相同,作为示例,现在我们将条件批归一化添加到残差块中:
class ResBlock(Layer):
def build(self, input_shape):
input_filter = input_shape[-1]
self.conv_1 = Conv2D(self.filters, 3, padding=‘same’, name=‘conv2d_1’)
self.conv_2 = Conv2D(self.filters, 3, padding=‘same’, name=‘conv2d_2’)
self.cbn_1 = ConditionBatchNorm(self.n_class)
self.cbn_2 = ConditionBatchNorm(self.n_class)
self.learned_skip = False
if self.filters != input_filter:
self.learned_skip = True
self.conv_3 = Conv2D(self.filters, 1, padding=‘same’, name=‘conv2d_3’)
self.cbn_3 = ConditionBatchNorm(self.n_class)
以下是使用条件批归一化残差块的前向计算代码:
def call(self, input_tensor, labels):
x = self.conv_1(input_tensor)
x = self.cbn_1(x, labels)
x = tf.nn.leaky_relu(x, 0.2)
x = self.conv_2(x)
x = tf.cbn_2(x, labels)
x = tf.nn.leaky_relu(x, 0.2)
if self.learned_skip:
skip = self.conv_3(input_tensor)
skip = self.cbn_3(skip, labels)
最后
Python崛起并且风靡,因为优点多、应用领域广、被大牛们认可。学习 Python 门槛很低,但它的晋级路线很多,通过它你能进入机器学习、数据挖掘、大数据,CS等更加高级的领域。Python可以做网络应用,可以做科学计算,数据分析,可以做网络爬虫,可以做机器学习、自然语言处理、可以写游戏、可以做桌面应用…Python可以做的很多,你需要学好基础,再选择明确的方向。这里给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
👉Python所有方向的学习路线👈
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
👉Python必备开发工具👈
工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。
👉Python全套学习视频👈
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
👉实战案例👈
学python就与学数学一样,是不能只看书不做题的,直接看步骤和答案会让人误以为自己全都掌握了,但是碰到生题的时候还是会一筹莫展。
因此在学习python的过程中一定要记得多动手写代码,教程只需要看一两遍即可。
👉大厂面试真题👈
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。