Oppikaa tekoälyä Pythonilla · Oppitunti

VGG16:n ja ResNet50:n käyttö perusmalleina

keras.applications.VGG16(weights='imagenet', include_top=False), mukautetun yläosan lisääminen.

Oppitunti 2/413 vaihetta

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 frozen

GlobalAveragePooling2D

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 = False

VGG16 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 results

Mallin 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.

Aloita maksutta

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

  1. Siirto-oppimisen käsitteet ja strategiat
  2. VGG16:n ja ResNet50:n käyttö perusmalleina
  3. Hienosäätö: kerrosten vapauttaminen ja uudelleenkoulutus
  4. MobileNet ja EfficientNet reunalaitteille käyttöönotettaviksi
← Takaisin: Oppikaa tekoälyä Pythonilla