VGG16:n ja ResNet50:n käyttö perusmalleina
keras.applications.VGG16(weights='imagenet', include_top=False), mukautetun yläosan lisääminen.
VGG16:n ja ResNet50:n käyttö perusmalleina on ilmainen Oppikaa tekoälyä Pythonilla-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Oppikaa tekoälyä Pythonilla-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Oppikaa tekoälyä Pythonilla-kurssilla on yhteensä 4 oppituntia.
Keras Applications -moduuli
tf.keras.applications sisältää kymmeniä esikoulutettuja arkkitehtuureja, jotka voitte ladata yhdellä rivillä. Kaksi klassikkoa ovat VGG16 (yksinkertainen, syvä 3x3-konvoluutioiden pino) ja ResNet50 (residuaaliyhteydet, syvempi ja tarkempi).
VGG16:n lataaminen perusverkoksi
Ladatkaa VGG16 ImageNet-painoilla mutta ilman sen luokittelupäätä, jotta voitte liittää tilalle omanne.
from tensorflow.keras.applications import VGG16
base = VGG16(
weights="imagenet", # download pretrained weights
include_top=False, # drop the 1000-class classifier
input_shape=(224, 224, 3) # standard ImageNet input size
)Argumenttien ymmärtäminen
weights="imagenet": lataa esikoulutetut painot satunnaisten painojen sijaan.include_top=False: poistaa alkuperäisen tiheän luokittelijan, jotta voitte lisätä omanne.input_shape=(224,224,3): korkeus, leveys ja kolme RGB-kanavaa.
Asetus include_top=False tekee mallista uudelleenkäytettävän uutta tehtävää varten.
Perusverkon jäädyttäminen
Asettakaa base.trainable = False, jotta esikoulutetut konvoluutiopainot pysyvät muuttumattomina ensimmäisen koulutusvaiheen aikana. Vain uusi pää opetetaan.
base.trainable = False
print(len(base.trainable_weights)) # -> 0 when frozenGlobalAveragePooling2D
Perusverkko tuottaa esimerkiksi muotoa (7, 7, 512) olevan 3D-piirrekartan. GlobalAveragePooling2D laskee kunkin kanavan keskiarvon sen avaruudellisen ruudukon yli ja tiivistää sen yhdeksi vektoriksi kanavaa kohden – tässä tapauksessa vektorin pituudeksi tulee 512.
Se korvaa valtavan Flatten + Dense -rakenteen, vähentää parametrien määrää huomattavasti ja pienentää ylisovittamista.
from tensorflow.keras.layers import GlobalAveragePooling2D
# (batch, 7, 7, 512) -> (batch, 512)
pooled = GlobalAveragePooling2D()(base.output)Dense-tulostuspään lisääminen
Liittäkää Dense-kerros, jonka koko vastaa luokkienne määrää. Käyttäkää softmax-aktivointia moniluokkaiseen luokitteluun ja sigmoid-aktivointia binääriseen luokitteluun.
from tensorflow.keras import layers, Model
x = base.output
x = layers.GlobalAveragePooling2D()(x)
x = layers.Dropout(0.3)(x)
outputs = layers.Dense(10, activation="softmax")(x)
model = Model(inputs=base.input, outputs=outputs)Siirtyminen ResNet50:een
ResNet50 käyttää samaa rajapintaa. Sen residuaaliset eli ohitusyhteydet mahdollistavat paljon syvemmän verkon kouluttamisen ilman katoavia gradientteja, joten se saavuttaa yleensä paremman ImageNet-tarkkuuden kuin VGG16 vastaavalla nopeudella.
from tensorflow.keras.applications import ResNet50
base = ResNet50(
weights="imagenet",
include_top=False,
input_shape=(224, 224, 3)
)
base.trainable = FalseVGG16 vai ResNet50
- VGG16: noin 138 milj. parametria, yksinkertainen yhtenäinen 3x3-pino, raskas muistinkulutus ja helppo ymmärtää.
- ResNet50: noin 25 milj. parametria, residuaalilohkot, syvempi, yleensä tarkempi ja kevyempi.
Useimmissa moderneissa siirto-oppimistehtävissä ResNet50 on vahvempi oletusvalinta.
Esikäsittelyn sovittaminen
Jokaisella malliperheellä on oma preprocess_input-funktionsa. VGG16 vähentää keskimääräiset RGB-arvot, kun taas ResNet50 käyttää samankaltaista Caffe-tyylistä skaalausta. Tuokaa aina perusverkkoanne vastaava funktio.
from tensorflow.keras.applications.resnet50 import preprocess_input
x = preprocess_input(image_batch) # required for correct resultsMallin kääntäminen
Kun perusverkko on jäädytetty, kääntäkää malli ja kouluttakaa pää tavallisella optimoijalla.
model.compile(
optimizer="adam",
loss="categorical_crossentropy",
metrics=["accuracy"]
)
model.fit(train_ds, validation_data=val_ds, epochs=10)Arkkitehtuurin tarkasteleminen
Kutsukaa model.summary()-metodia varmistaaksenne, että perusverkko on jäädytetty (Non-trainable params on suuri) ja vain pää on opetettava. Tämä tarkistus paljastaa määritysvirheet varhain.
model.summary()
# Look at "Trainable params" vs "Non-trainable params"Pikatesti
Testatkaa, miten hyvin hallitsette siirto-oppimismallin rakentamisen Kerasilla.
Kertaus
Latasitte VGG16- ja ResNet50-mallit asetuksilla weights="imagenet", include_top=False ja input_shape=(224,224,3), jäädytitte perusverkon asetuksella base.trainable=False, tiivistitte piirteet GlobalAveragePooling2D-kerroksella ja lisäsitte Dense-tulostuspään.
ResNet50 on vahvempi oletusvalinta. Seuraavaksi poistamme kerrosten jäädytyksen hienosäätöä varten.
Opi Python tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 53
- Oppitunnit
- 225
Usein kysytyt kysymykset
Onko oppitunti ”VGG16:n ja ResNet50:n käyttö perusmalleina” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Oppikaa tekoälyä Pythonilla-oppimispolun 3 oppituntia, myös oppitunnin “VGG16:n ja ResNet50:n käyttö perusmalleina”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppikaa tekoälyä Pythonilla-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”VGG16:n ja ResNet50:n käyttö perusmalleina”?
keras.applications.VGG16(weights='imagenet', include_top=False), mukautetun yläosan lisääminen. Harjoittelet Oppikaa tekoälyä Pythonilla-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Oppikaa tekoälyä Pythonilla-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Oppikaa tekoälyä Pythonilla-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.
Kuinka kauan ”VGG16:n ja ResNet50:n käyttö perusmalleina”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Oppikaa tekoälyä Pythonilla-oppitunnilla?
Kyllä. Jokainen Oppikaa tekoälyä Pythonilla-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Siirto-oppimisen käsitteet ja strategiat
- VGG16:n ja ResNet50:n käyttö perusmalleina
- Hienosäätö: kerrosten vapauttaminen ja uudelleenkoulutus
- MobileNet ja EfficientNet reunalaitteille käyttöönotettaviksi