日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

稀疏自编码器_自编码(AutoEncoder)模型及几种扩展之二

發布時間:2025/3/8 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 稀疏自编码器_自编码(AutoEncoder)模型及几种扩展之二 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

4. 稀疏自編碼

假設我們只有一個沒有類別標簽的訓練樣本集合{x(1),x(2)...},一個自編碼神經網絡就是一種非監督學習算法,它使用BP算法,并將目標值設為: y(i)=x(i)。

我們的目標是希望得到hW,b(X)≈x。用aj(2)(x)表示輸入向量x對隱藏層單元j的激活值。則j的平均激活值:

為了達到稀疏性,也即用最少(最稀疏)的隱藏單元來表示輸入層的特征(也即,對每一個輸入X, 其特征表示是稀疏的),我們希望所有隱藏層單元平均激活值接近于0.于是應用KL距離:

其中為了方便書寫:

其中,

是稀疏參數,一般來說選一個很小的數,如0.05。

這樣,神經網絡整體代價函數就可以表示為:

,其中J(W,b)是BP自身的損失函數,預測損失+參數L2正則(減小權重的幅度,防止過度擬合)

這樣,一個稀疏自編碼器就完成了。

代碼:

Sparse自編碼 Autoencoder, 基本按照標準公式實現##### 設置網絡參數 ##### p = 0.05 # 使大部分神經元的激活值(所有神經元的激活值的平均值)接近這個p值 beta = 3 # 控制KL散度所占的比重input_dim = 784 encoding_dim = 64 lambda_val = 0.001 # J(W,b)自帶的對W進行的L2正則,weight decayepochs = 50 batch_size = 1024# 自定義正則項函數, 計算KL散度 def sparse_reg(activity_matrix):activity_matrix = K.softmax(activity_matrix, axis=0) # 把激活值先用softmax歸一化p_hat = K.mean(activity_matrix, axis=0) # 將第j個神經元在batch_size個輸入下所有的輸出激活值取平均print('p_hat=', p_hat)KLD = p*(K.log(p/p_hat))+(1-p)*(K.log((1-p)/(1-p_hat))) # 計算KL散度print('KLD=', KLD)return beta*K.sum(KLD) # 所有神經元的KL散度相加并乘以betainput_img = Input(shape=(input_dim,))h = Dense(encoding_dim,activation='relu',kernel_regularizer=regularizers.l2(lambda_val/2),activity_regularizer=sparse_reg)(input_img)r = Dense(input_dim, activation='sigmoid',kernel_regularizer=regularizers.l2(lambda_val/2),activity_regularizer=sparse_reg)(h)# sparse AE模型 autoencoder = Model(inputs=input_img, outputs=r) autoencoder.compile(optimizer='adam', loss='binary_crossentropy') #輸出模型結構 print(autoencoder.summary())# 注意:輸出是干凈的X_train history = autoencoder.fit(X_train, X_train, batch_size=batch_size, epochs=epochs, verbose=1, validation_data=(X_test, X_test))#編碼過程: 取出編碼部分 conv_encoder = Model(input_img, h) #在測試集上進行編碼輸出,輸出圖形的編碼形式(64維度) encoded_imgs = conv_encoder.predict(X_test)n = 10 plt.figure(figsize=(20, 8)) for i in range(n):ax = plt.subplot(1, n, i+1)plt.imshow(encoded_imgs[i].reshape(4, 16).T)plt.gray()ax.get_xaxis().set_visible(False)ax.get_yaxis().set_visible(False) plt.show()#解碼過程: #Predict on the test set decoded_imgs = autoencoder.predict(X_test)

生成的編碼圖像(64維)

變稀疏了嗎?

總結

以上是生活随笔為你收集整理的稀疏自编码器_自编码(AutoEncoder)模型及几种扩展之二的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。