Open danbi5228 opened 6 months ago
오토인코더가 선형 활성화 함수만 사용하고 비용 함수가 평균제곱오차MSE라면, 이는 결국 주성분 분석(PCA)를 수행하는 것으로 볼 수 있음
encoder = keras.models.Sequential([keras.layers.Dense(2, input_shape=[3])])
decoder = keras.models.Sequential([keras.layers.Dense(3, input_shape=[2])])
autoencoder = keras.models.Sequential([encoder, decoder])
autoencoder.compile(loss="mse", optimizer=keras.optimizers.SGD(learning_rate=0.1))
history = autoencoder.fit(X_train, X_train, epochs=20) codings = encoder.predict(X_train)
- 오토인코더를 인코더, 디코더 두 개 컴포넌트로 구성. 둘 다 하나의 dense 층을 가진 일반적인 sequential 모델
- 오토인코더의 출력 개수가 입력 개수와 동일 (=3)
- 단순 PCA를 위해서 활성화 함수를 사용하지 않고, 비용함수는 MSE
- 다음처럼 분산이 최대한 많이 보존되도록 데이터를 투영할 최상의 2D 평면을 찾음.
![image](https://github.com/njs03332/ml_study/assets/50584633/0412624f-c278-47da-bdb7-31cd3c6a451d)
from sklearn.manifold import TSNE
X_valid_compressed = stacked_encoder.predict(X_valid) tsne = TSNE() X_valid_2D = tsne.fit_transform(X_valid_compressed)
plt.scatter(X_valid_2D[:, 0], X_valid_2d[:, 1], c=y_valid, s=10, cmap="tab10")
![image](https://github.com/njs03332/ml_study/assets/26505830/81530044-9a1c-42e6-aab8-06ffd2c6614b)
패션 MNIST 데이터셋에서 SELU 활성화함수를 사용해 적층 오토인코더 만들기
stacked_encoder = keras.models.Sequential([
keras.layers.Flatten(input_shape=[28,28]),
keras.layers.Dense(100, activation="selu"),
keras.layers.Dense(30, activate="selu"),
])
stacked_decoder = keras.models.Sequential([
keras.layers.Dense(100, activation="selu", input_shape=[30]),
keras.layers.Dense(28*28, activation="sigmoid"),
keras.layers.Reshape([28,28]),
])
stacked_ae = keras.models.Sequential([stacked_encoder, stacked_decodr])
stacked_ae.compile(loss="binary_crossentropy",
optimizer=keras.optimizers.SGD(lr=1.5))
history = stacked_ae.fit(X_train, X_train, epochs=10, validation_data=(X_valid, X_valid))
오토인코더 모델을 인코더와 디코더 두 개의 서브 모델로 나눔
인코더는 28x28 픽셀의 흑백 이미지를 받아 각 이미지를 784 크기의 벡터로 표현하기 위해 펼침
디코더는 크기가 30인 코딩을 받음
적층 오토인코더를 컴파일할 때 평균 제곱 오차 대신 이진 크로스 엔트로피 손실을 사용
2024.04.08 pm 10:30
1 - ~17.2 2 - 17.3 ~ 17.3.1 3 - 17.3.2 ~ 17.3.3