input_size = 784hidden_size = 128code_size = 64x = Input(shape=(input_size,))h = Dense(hidden_size, activation='relu')(x)r = Dense(output_size, activation='sigmoid')(h)
autoencoder = Model(inputs=x, outputs=r)autoencoder.compile(optimizer='adam', loss='mse')input_size = 784hidden_size = 128code_size = 64
x = Input(shape=(input_size,))hidden_1 = Dense(hidden_size, activation='relu')(x)h = Dense(code_size, activation='relu')(hidden_1)hidden_2 = Dense(hidden_size, activation='relu')(h)r = Dense(input_size, activation='sigmoid')(hidden_2)
autoencoder = Model(inputs=x, outputs=r)autoencoder.compile(optimizer='adam', loss='mse')
其中, fi是模型預測值,yi是實際值,通過計算兩者的均方誤差來衡量模型的有效性。
x = Input(shape=(28, 28,1))
conv1_1 = Conv2D(16, (3, 3), activation='relu', padding='same')(x)pool1 = MaxPooling2D((2, 2), padding='same')(conv1_1)conv1_2 = Conv2D(8, (3, 3), activation='relu', padding='same')(pool1)pool2 = MaxPooling2D((2, 2), padding='same')(conv1_2)conv1_3 = Conv2D(8, (3, 3), activation='relu', padding='same')(pool2)h = MaxPooling2D((2, 2), padding='same')(conv1_3)
conv2_1 = Conv2D(8, (3, 3), activation='relu', padding='same')(h)up1 = UpSampling2D((2, 2))(conv2_1)conv2_2 = Conv2D(8, (3, 3), activation='relu', padding='same')(up1)up2 = UpSampling2D((2, 2))(conv2_2)conv2_3 = Conv2D(16, (3, 3), activation='relu')(up2)up3 = UpSampling2D((2, 2))(conv2_3)r = Conv2D(1, (3, 3), activation='sigmoid', padding='same')(up3)
autoencoder = Model(inputs=x, outputs=r)autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy')UpSampling2D:上採樣層,與MaxPooling2D相對應。
input_size = 784hidden_size = 32output_size = 784
x = Input(shape=(input_size,))h = Dense(hidden_size, activation='relu', activity_regularizer=regularizers.l1(10e-5))(x)r = Dense(output_size, activation='sigmoid')(h)
autoencoder = Model(inputs=x, outputs=r)autoencoder.compile(optimizer='adam', loss='mse')x = Input(shape=(28, 28, 1))
conv1_1 = Conv2D(32, (3, 3), activation='relu', padding='same')(x)pool1 = MaxPooling2D((2, 2), padding='same')(conv1_1)conv1_2 = Conv2D(32, (3, 3), activation='relu', padding='same')(pool1)h = MaxPooling2D((2, 2), padding='same')(conv1_2)conv2_1 = Conv2D(32, (3, 3), activation='relu',padding='same')(h)up1 = UpSampling2D((2, 2))(conv2_1)conv2_2 = Conv2D(32, (3, 3), activation='relu', padding='same')(up1)up2 = UpSampling2D((2, 2))(conv2_2)
r = Conv2D(1, (3, 3), activation='sigmoid', padding='same')(up2)
autoencoder = Model(inputs=x, outputs=r)autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy')
epochs = 3batch_size = 128
history = autoencoder.fit(X_train_noisy, X_train, batch_size=batch_size, epochs=epochs, verbose=1, validation_data=(X_test_noisy, X_test))參數
Dense: 全連接層。
CNN2D:2維卷積神經網絡,常用於處理圖像。
Dropout: 以一定概率放棄兩層之間的一些神經元連結,防止過擬合,可以加在網絡層與層之間。
optimizer: 優化器,梯度下降的優化方法
這些都在之前的推文中有所介紹,小夥伴們可以去翻閱一下。
碼前須知---TensorFlow超參數的設置
activation: 激勵函數,『linear』一般用在回歸任務的輸出層,而『softmax』一般用在分類任務的輸出層。
validation_split: 切分一定比例的訓練集作為驗證集
epochs 與 batch_size:前者是迭代次數,後者是用來更新梯度的批數據的大小,iteration = epochs / batch_size, 也就是完成一個epoch需要跑多少個batch。這這兩個參數可以用控制變量法來調參,控制一個參數,調另外一個,看損失曲線的變化。
小夥伴們可以去keras官網查看更多的參數含義與用途,博主也會在後續的課程中通過實驗的方法將這些參數涉及進來,讓大家的知識點串聯起來。
https://github.com/ChileWang0228/DeepLearningTutorial/blob/master/AutoEncoder/AutoEncoder.ipynb