Python高级架构模式的整理 Python高级架构模式知识点总结
小妮浅浅 人气:0想了解Python高级架构模式知识点总结的相关内容吗,小妮浅浅在本文为您仔细讲解Python高级架构模式的整理的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:Python,高级架构模式,下面大家一起来学习吧。
1、残差连接是目前常用的组件,解决了大规模深度学习模型梯度消失和瓶颈问题。
通常,在10层以上的模型中追加残差连接可能有帮助。
from keras import layers x = ... y = layers.Conv2D(128, 3, activation='relu', padding='same')(x) y = layers.Conv2D(128, 3, activation='relu', padding='same')(y) y = layers.MaxPooling2D(2, strides=2)(y) # 形状不同,要做线性变换: residual = layers.Conv2D(128, 1, strides=2, padding='same')(x) # 使用 1×1 卷积,将 x 线性下采样为与 y 具有相同的形状 y = layers.add([y, residual])
2、标准化用于使模型看到的不同样本更相似,有助于模型的优化和泛化。
# Conv conv_model.add(layers.Conv2D(32, 3, activation='relu')) conv_model.add(layers.BatchNormalization()) # Dense dense_model.add(layers.Dense(32, activation='relu')) dense_model.add(layers.BatchNormalization())
3、深度可分离卷积层,在Keras中被称为SeparableConv2D,其功能与普通Conv2D相同。
但是SeparableConv2D比Conv2D轻,训练快,精度高。
from tensorflow.keras.models import Sequential, Model from tensorflow.keras import layers height = 64 width = 64 channels = 3 num_classes = 10 model = Sequential() model.add(layers.SeparableConv2D(32, 3,activation='relu',input_shape=(height, width, channels,))) model.add(layers.SeparableConv2D(64, 3, activation='relu')) model.add(layers.MaxPooling2D(2)) model.add(layers.SeparableConv2D(64, 3, activation='relu')) model.add(layers.SeparableConv2D(128, 3, activation='relu')) model.add(layers.MaxPooling2D(2)) model.add(layers.SeparableConv2D(64, 3, activation='relu')) model.add(layers.SeparableConv2D(128, 3, activation='relu')) model.add(layers.GlobalAveragePooling2D()) model.add(layers.Dense(32, activation='relu')) model.add(layers.Dense(num_classes, activation='softmax')) model.compile(optimizer='rmsprop', loss='categorical_crossentropy')
Counter实例扩展:
from collections import Counter list1 = ['a','b','c',23,23,'a','d','b','e'] counter1 = Counter(list1) print(counter1) print(counter1['a']) #1.1.1统计不同单词的数目 print(len(set(list1))) #1.1.2对统计结果进行分组 下面的方法表示分为4组,不填默认全部分组,以列表 #存储,里面元素是tuple对象 print(counter1.most_common(4)) #1.1.3 elements()获取Counter()生成对象的所有键名,重复的几个会全部打印 # 该方法返回一个迭代器对象 keylist = counter1.elements() print(keylist) print(list(keylist)) #1.1.4 update(x) 更新计数器 把x的内容加入到原来计数器中 #x可以作为字符串,列表,元组,集合,但是不能作为字典,纯数字,否则报错 list2 = ['a','d','f','q',2,3,2,3,4] print(counter1) counter1.update(list2) print(counter1) #1.1.5 substract(x) 更新计数器 把x代表的次数减少1,默认减少1,(通过字典形式指定一次减少的个数) #,不存在则减为-1,依次减,作用与update()相反 counter1.subtract('a') print(counter1) counter1.subtract(['a','b',2]) print(counter1)
加载全部内容