Menu
CoddyTech

Tekrar: Yüz Tarayıcı

Coddy'nin Machine Learning Journey'sinin Denetimsiz Öğrenme bölümünün bir parçası. Ders 33 / 51.

challenge icon

Görev

Orta

Bir ofis kapısı kamerası her yüz için yalnızca k sayı saklayabilir; program k değerini okur. Başlangıç kodu, X içine 16'ya 16 piksellik 300 yüz çizer.

  1. k bileşenle PCA'yı uydur. Aşağıda gösterildiği gibi, korunan varyans oranını yazdır.
  2. Yüz 0'ı axs[0] üzerinde, k sayıdan yeniden oluşturulmuş hâlini de axs[1] üzerinde, her ikisinde de cmap="gray" kullanarak çiz.
  3. 1. bileşeni axs[2] üzerinde cmap="gray_r" ile çiz. Göster.

Başka bir kamera ve 4 için:

Kept: 80.5% of the variance with 4 numbers per face

Üç adet 16'ya 16 resim: gülümseyen bir yüz, 4 sayıdan yeniden oluşturulmuş biraz daha pürüzsüz hâli ve 1. bileşen; beyaz üzerinde koyu bir yüz şekli

Coddy daha sonra üç panelinizi açıklar.

Kendin dene

import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA


# Her biri 16'ya 16 piksel boyutunda count adet yüz çizer: her yüz için 256 parlaklık değerinden (0 ile 1 arası) oluşan tek bir düz satır
def make_faces(count, seed):
    rng = np.random.default_rng(seed)
    cols, rows = np.meshgrid(np.arange(16), np.arange(16))
    faces = []
    for i in range(count):
        light = rng.uniform(0.55, 0.95)
        side = rng.uniform(-0.25, 0.25)
        head = ((cols - 7.5) / 6.2) ** 2 + ((rows - 8) / 7.6) ** 2 < 1
        face = head * (light + side * (cols - 7.5) / 7.5)
        eye_row = rng.uniform(5, 7)
        gap = rng.uniform(2.2, 3.6)
        for eye_col in [7.5 - gap, 7.5 + gap]:
            face = face - 0.7 * np.exp(-((cols - eye_col) ** 2 + (rows - eye_row) ** 2) / 1.2)
        smile = rng.uniform(-2, 2)
        mouth_row = 11.5 - smile * ((cols - 7.5) / 3.5) ** 2
        mouth = np.exp(-((rows - mouth_row) ** 2) / 0.4) * (np.abs(cols - 7.5) < 3.6)
        face = face - 0.6 * mouth + rng.normal(0, 0.04, size=(16, 16))
        faces.append(np.clip(face, 0, 1).flatten())
    return np.round(np.array(faces), 2)


# Kapı kamerasının gördüğü 300 yüz ve her yüz için kaç sayı saklayabileceği
X = make_faces(300, seed=7)
k = int(input())

# Aşağıdaki satırları değiştirmeyin
fig, axs = plt.subplots(1, 3)
axs[0].set_title("Face")
axs[1].set_title(f"Rebuilt from {k}")
axs[2].set_title("Component 1")

# Kodunuzu aşağıya yazın

Denetimsiz Öğrenme bölümündeki tüm dersler

Kendi başına pratik yap: Online Python derleyicisi