Ինչպե՞ս է աշխատում Autoencoders-ը:
Ավտո կոդավորիչները նեյրոնային ցանցերի շատ արդյունավետ կատեգորիա են, որն օգտագործվում է չվերահսկվող ուսուցման և տվյալների ծավալը նվազեցնելու համար: Նրանք ունեն մուտքային տվյալների կոմպակտ ներկայացումներ սովորելու կարողություն՝ դրանք կոդավորելով ավելի ցածր չափերի լատենտ տարածության մեջ և հետագայում վերծանելով դրանք՝ սկզբնական մուտքագրումը վերականգնելու համար: Այս հոդվածը խորանում է Python-ում ավտոմատ կոդավորիչների աշխատանքի մեջ՝ մասնավորապես օգտագործելով Keras գրադարանը՝ դրանց ֆունկցիոնալության համապարփակ պատկերացում ապահովելու համար:
Ի՞նչ են ինքնակոդավորիչները:
Ավտոկոդավորիչները նեյրոնային ցանցերի մասնագիտացված ձև են, որոնք նախատեսված են մուտքային տվյալները վերակառուցելու համար: Դրանք բաղկացած են երկու հիմնական մասից՝ ապակոդավորող ցանցից, որը պատասխանատու է սեղմված ներկայացումից սկզբնական մուտքը վերստեղծելու համար, և կոդավորող ցանց, որը սեղմում է մուտքը ավելի ցածր չափերի պատկերման մեջ։ Ավտոկոդավորիչները գերազանցում են տվյալների կարևոր առանձնահատկություններն ու օրինաչափությունները ճանաչելու հարցում, և նրանք վերապատրաստված են վերակառուցման գործընթացում սխալները նվազագույնի հասցնելու համար: Դրանց կիրառությունները ներառում են ծավալների կրճատում, անոմալիաների հայտնաբերում և մոդելների ստեղծում:
Տվյալների սեղմումը, անոմալիաների հայտնաբերումը, պատկերների սինթեզը և ձայնազերծումը ընդամենը մի քանի ծրագրեր են, որտեղ ավտոկոդավորիչները կարևոր են: Դրանք հատկապես օգտակար են, երբ մուտքային տվյալները չունեն հստակ պիտակներ կամ երբ մենք ցանկանում ենք տվյալներից հանել բովանդակալից հատկանիշներ՝ առանց պիտակավորված օրինակների վրա հենվելու:
Ինչպե՞ս են աշխատում ավտոմատ կոդավորիչները:
Ավտոկոդավորիչները գործում են մուտքային տվյալների կոմպակտ և արդյունավետ ներկայացման միջոցով: Հիմնական բնութագրերը գրավելու համար ինքնակոդավորիչները օգտագործում են կոդավորող ցանց, որը սեղմում է մուտքագրումը ավելի ցածր չափերի թաքնված տարածության մեջ: Հետագայում, ապակոդավորող ցանցը վերակառուցում է այս սեղմված ներկայացման սկզբնական մուտքը: Ուսուցման գործընթացի ընթացքում ինքնակոդավորիչը փորձում է նվազագույնի հասցնել մուտքի և վերակառուցված ելքի միջև եղած անհավասարությունը: Սա հնարավորություն է տալիս ինքնակոդավորողին սովորել տվյալների կոդավորումն ու վերծանումը: Ստիպելով ցանցին հավատարմորեն վերակառուցել մուտքագրումը, ավտոկոդավորիչները ձեռք են բերում իմաստալից ներկայացումներ ստանալու և արժեքավոր հատկություններ հանելու կարողություն: Հետևաբար, դրանք արժեքավոր են դառնում այնպիսի առաջադրանքներում, ինչպիսիք են ծավալների կրճատումը, անոմալիաների հայտնաբերումը և մոդելների ստեղծումը:
Ստորև բերված են այն քայլերը, որոնք մենք կհետևենք՝ հասկանալու համար, թե ինչպես են ավտոմատ կոդավորիչները աշխատում ծրագրի օրինակի հետ
-
MNIST տվյալների բազայի բեռնում և այնուհետև նախնական մշակում:
Սահմանեք ինքնակոդավորիչի մոդելը կոդավորիչի և ապակոդավորիչի շերտերով:
Ստեղծեք առանձին կոդավորիչների և ապակոդավորիչների մոդելներ՝ դրանց գործառույթները մեկուսացնելու համար:
Կազմել և վարժեցնել ավտոկոդավորիչը վերապատրաստման տվյալների վրա:
Օգտագործեք կոդավորիչը՝ մուտքային փորձարկման տվյալները կոդավորելու համար, իսկ ապակոդավորիչը՝ կոդավորված տվյալները վերծանելու սկզբնական մուտքային տարածություն այն բանից հետո, երբ մենք ավարտել ենք մոդելի վերապատրաստումը:
Պատկերացրեք բնօրինակի կողմը և պատկերը, որը վերակառուցվում է Matplotlib-ի միջոցով:
Ստորև բերված ծրագիրը կցուցադրի 10 տող ունեցող պատկեր, որտեղ յուրաքանչյուր տող պարունակում է բնօրինակ պատկեր, որին հաջորդում է իր վերակառուցված նմանակը: Մենք կարող ենք նաև փորձարկել տարբեր հիպերպարամետրեր և դիտել, թե ինչպես են դրանք ազդում վերակառուցված պատկերների որակի վրա:
Օրինակ
import numpy as npp
import matplotlib.pyplot as pltt
from keras.datasets import mnist
from keras.layers import Input, Dense
from keras.models import Model
# Load the MNIST dataset
(x_train_m, _), (x_test_m, _) = mnist.load_data()
# Normalize the pixel values between 0 and 1
x_train_m = x_train_m.astype('float32') / 255.
x_test_m = x_test_m.astype('float32') / 255.
# Reshape the input images
x_train = x_train_m.reshape((len(x_train_m), npp.prod(x_train_m.shape[1:])))
x_test = x_test_m.reshape((len(x_test_m), npp.prod(x_test_m.shape[1:])))
# Define the size of the latent space
latent_dim = 32
# Define the input layer
input_img = Input(shape=(784,))
# Define the encoder layers
encoded1 = Dense(128, activation='relu')(input_img)
encoded2 = Dense(latent_dim, activation='relu')(encoded1)
# Define the decoder layers
decoded1 = Dense(128, activation='relu')(encoded2)
decoded2 = Dense(784, activation='sigmoid')(decoded1)
# Create the autoencoder model
autoencoder = Model(input_img, decoded2)
# Create separate encoder and decoder models
encoder = Model(input_img, encoded2)
# Define the decoder input
latent_input_m = Input(shape=(latent_dim,))
decoder_layer_m = autoencoder.layers[-2](latent_input_m)
decoder_layer_m = autoencoder.layers[-1](decoder_layer_m)
decoder = Model(latent_input_m, decoder_layer_m)
# Compile the autoencoder
autoencoder.compile(optimizer='adam', loss='binary_crossentropy')
# Train the autoencoder
autoencoder.fit(x_train, x_train,
epochs=50,
batch_size=256,
shuffle=True,
validation_data=(x_test, x_test))
# Encode and decode the input test data
encoded_imgs = encoder.predict(x_test)
decoded_imgs = decoder.predict(encoded_imgs)
# Display the original and reconstructed images
n = 10
pltt.figure(figsize=(20, 4))
for i in range(n):
# Original image
ax = pltt.subplot(2, n, i+1)
pltt.imshow(x_test[i].reshape(28, 28))
pltt.gray()
ax.get_xaxis().set_visible(False)
ax.get_yaxis().set_visible(False)
# Reconstructed image
ax = pltt.subplot(2, n, i+n+1)
pltt.imshow(decoded_imgs[i].reshape(28, 28))
pltt.gray()
ax.get_xaxis().set_visible(False)
ax.get_yaxis().set_visible(False)
pltt.show()
Արդյունք
Եզրակացություն
Եզրափակելով, ինքնակոդավորիչները հզոր շրջանակ են ապահովում մուտքային տվյալների սեղմված ներկայացումները սովորելու համար: Օգտագործելով կոդավորիչ-ապակոդավորիչ ճարտարապետություն՝ նրանք կարող են արդյունավետորեն գրավել տվյալների մեջ կարևոր առանձնահատկությունները և օրինաչափությունները: Ավտոկոդավորիչները լայնորեն օգտագործվում են այնպիսի առաջադրանքների համար, ինչպիսիք են անոմալիաների հայտնաբերումը, ծավալների կրճատումը և գեներատիվ մոդելավորումը: Ուսուցման գործընթացի միջոցով նրանք օպտիմիզացնում են վերակառուցման սխալը՝ հնարավորություն տալով նրանց սովորել բովանդակալից ներկայացումներ և արժեքավոր պատկերացումներ կորզել բարդ տվյալների հավաքածուներից: Տվյալները կոդավորելու և վերծանելու իրենց ունակությամբ՝ ավտոկոդավորիչներն առաջարկում են բազմակողմանի և արդյունավետ գործիք մեքենայական ուսուցման տարբեր ծրագրերի համար: