無監督特徵學習(unsupervised feature learning)是一種仿人腦的對特徵逐層抽象提取的過程,學習過程中有兩點:一是無監督學習,即對訓練資料不需要進行標籤化標註,這種學習是對資料內容的組織形式的學習,提取的是頻繁出現的特徵;二是逐層抽象,特徵是需要不斷抽象的。
自編碼器(autoencoder),即可以使用自身的高階特徵自我編碼,自編碼器其實也是一種神經網路,其輸入和輸出是一致的,借助了稀疏編碼的思想,目標是使用稀疏的高階特徵重新組合來重構自己。
from keras.models import model #泛型模型
from keras.layers import dense, input
import matplotlib.pyplot as plt
# x shape (60,000 28x28), y shape (10,000, )
(x_train, _), (x_test, y_test) = mnist.load_data()
# 資料預處理
x_train = x_train.astype('float32') / 255. - 0.5 # minmax_normalized
x_test = x_test.astype('float32') / 255. - 0.5 # minmax_normalized
x_train = x_train.reshape((x_train.shape[0], -1))
x_test = x_test.reshape((x_test.shape[0], -1))
print(x_train.shape)
print(x_test.shape)
# 壓縮特徵維度至2維
encoding_dim = 2
# this is our input placeholder
input_img = input(shape=(784,))
# 編碼層
encoded = dense(128, activation='relu')(input_img)
encoded = dense(64, activation='relu')(encoded)
encoded = dense(10, activation='relu')(encoded)
encoder_output = dense(encoding_dim)(encoded)
# 解碼層
decoded = dense(10, activation='relu')(encoder_output)
decoded = dense(64, activation='relu')(decoded)
decoded = dense(128, activation='relu')(decoded)
decoded = dense(784, activation='tanh')(decoded)
# 構建自編碼模型
autoencoder = model(inputs=input_img, outputs=decoded)
# 構建編碼模型
encoder = model(inputs=input_img, outputs=encoder_output)
# compile autoencoder
autoencoder.compile(optimizer='adam', loss='mse')
# training
autoencoder.fit(x_train, x_train, epochs=20, batch_size=256, shuffle=true)
# plotting
encoded_imgs = encoder.predict(x_test)
plt.scatter(encoded_imgs[:, 0], encoded_imgs[:, 1], c=y_test, s=3)
plt.colorbar()
plt.show()
自編碼,簡單來說就是把輸入資料進行乙個壓縮和解壓縮的過程。原來有很多特徵,壓縮成幾個來代表原來的資料,解壓之後恢復成原來的維度,再和原資料進行比較。它是一種非監督演算法,只需要輸入資料,解壓縮之後的結果與原資料本身進行比較。程式的主要功能是把 datasets.mnist 資料的 28*28=784 維的資料,壓縮成 2 維的資料,然後在乙個二維空間中視覺化出分類的效果。
首先,匯入資料並進行資料預處理,本例使用model模組的keras的泛化模型來進行模型搭建,便於我們從模型中間匯出資料並進行視覺化。進行模型搭建的時候,注意要進行逐層特徵提取,最終壓縮至2維,解碼的過程要跟編碼過程一致相反。隨後對autoencoder和encoder分別建模,編譯、訓練。將編碼模型的**結果通過matplotlib視覺化出來,就可以看到原資料的二維編碼結果在二維平面上的聚類效果,還是很明顯的。
最後看到視覺化的結果,自編碼模型可以把這幾個數字給區分開來,我們可以用自編碼這個過程來作為乙個特徵壓縮的方法,和pca的功能一樣,效果要比它好一些,因為它是非線性的結構。
keras 上新增 roc auc指標
keras 輸出roc指標,不能每個batch輸出一次,需要全部計算完再一次計算一次。使用sklearn中的metrics roc來計算。幾個帖子類似 class roc callback keras.callbacks.callback def init self,training data,va...
keras實現分組卷積
分組卷積在pytorch中比較容易實現,只需要在卷積的時候設定group引數即可 比如設定分組數為2 conv group nn.conv2d c in,c out,kernel size 3,stride 3,padding 1,groups 2 但是,tensorflow中目前還沒有分組卷積,只...
Keras 2 3 keras實現卷積神經網路
cnn convolutional neural networks 卷積神經網路在 keras 上的 實現。用到的資料集還是mnist。不同的是這次用到的層比較多,匯入的模組也相應增加了一些。下面直接進入 部分 import numpy as np np.random.seed 1337 for r...