1、殘差連接是目前常用的組件,解決了大規(guī)模深度學(xué)習(xí)模型梯度消失和瓶頸問(wèn)題。
通常,在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、標(biāo)準(zhǔn)化用于使模型看到的不同樣本更相似,有助于模型的優(yōu)化和泛化。
# 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輕,訓(xùn)練快,精度高。
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實(shí)例擴(kuò)展:
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統(tǒng)計(jì)不同單詞的數(shù)目
print(len(set(list1)))
#1.1.2對(duì)統(tǒng)計(jì)結(jié)果進(jìn)行分組 下面的方法表示分為4組,不填默認(rèn)全部分組,以列表
#存儲(chǔ),里面元素是tuple對(duì)象
print(counter1.most_common(4))
#1.1.3 elements()獲取Counter()生成對(duì)象的所有鍵名,重復(fù)的幾個(gè)會(huì)全部打印
# 該方法返回一個(gè)迭代器對(duì)象
keylist = counter1.elements()
print(keylist)
print(list(keylist))
#1.1.4 update(x) 更新計(jì)數(shù)器 把x的內(nèi)容加入到原來(lái)計(jì)數(shù)器中
#x可以作為字符串,列表,元組,集合,但是不能作為字典,純數(shù)字,否則報(bào)錯(cuò)
list2 = ['a','d','f','q',2,3,2,3,4]
print(counter1)
counter1.update(list2)
print(counter1)
#1.1.5 substract(x) 更新計(jì)數(shù)器 把x代表的次數(shù)減少1,默認(rèn)減少1,(通過(guò)字典形式指定一次減少的個(gè)數(shù))
#,不存在則減為-1,依次減,作用與update()相反
counter1.subtract('a')
print(counter1)
counter1.subtract(['a','b',2])
print(counter1)
到此這篇關(guān)于Python高級(jí)架構(gòu)模式知識(shí)點(diǎn)總結(jié)的文章就介紹到這了,更多相關(guān)Python高級(jí)架構(gòu)模式的整理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!