import numpy as np
import numpy.matlib
import numpy as np
import pandas as pd
from keras.layers import Input, Dense
from keras.models import Model
from keras.optimizers import RMSprop
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import MinMaxScaler
sgx=np.random.randn(25200, 100)
normx = MinMaxScaler().fit(sgx)
sgxx=normx.fit_transform(sgx)
encoding_dim = 32
input_img = Input(shape=(100,))
encoded = Dense(80, activation='relu')(input_img)
encoded = Dense(64, activation='relu')(encoded)
encoded = Dense(32, activation='relu')(encoded)
decoded = Dense(64, activation='relu')(encoded)
decoded = Dense(90, activation='relu')(decoded)
decoded = Dense(100, activation='sigmoid')(decoded)
autoencoder = Model(input_img, decoded)
autoencoder.compile(loss='mean_squared_error', optimizer = RMSprop())
# this model maps an input to its encoded representation
encoder = Model(input_img, encoded)
# create the decoder model
encoded_input = Input(shape=(encoding_dim,))
deco = autoencoder.layers[-3](encoded_input)
deco = autoencoder.layers[-2](deco)
deco = autoencoder.layers[-1](deco)
decoder = Model(encoded_input, deco)
autoencoder.fit(sgxx, sgxx,
epochs=100,
batch_size=560)
encoded_imgs = encoder.predict(sgx)
decoded_imgs = decoder.predict(encoded_imgs)
在上面的代码中,我重建了相同的初始尺寸,我们可以使用AE从初始尺寸中重建一个较低的尺寸吗,我的意思是说我有100个尺寸,那么在缩小尺寸后我只想重建30个尺寸??
答案 0 :(得分:2)
从表达您的问题的方式否,但是我认为这只是一种误解。
训练自动编码器的一种典型方法是使用重构误差。简单定义为|| x-f(g(x))||其中g是您的编码器网络,f是您的解码器网络,x是一些输入示例。根据这种特殊的损失,f(g(x))必须与x具有相同的尺寸(在您的情况下为100)。
您需要考虑使用解码器重建意味着什么,您究竟想生产尺寸为30的东西是什么?为了重新表达您的问题,我们可以创建一个具有30个维度的x的表示形式吗?答案:是!这是自动编码器经常用于的编码器可以采用的一个100维的输入并将其维减小到30维。要获得这种表示形式(在上面给出的代码中为32维),只需运行x到g(您的编码器)并停止。如果目标只是构建此表示形式,则解码器仅用于训练。
我希望这可以澄清一切!