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 从初始维度重建一个较低的维度吗,我的意思是 ex 在我的例子中我有 100 个维度,然后在减少维度后我只想重建 30 个?
从你的问题陈述方式来看没有,但我认为只是有一个错误的理解。
训练自动编码器的典型方法是使用重建误差。这被简单地定义为 ||x - f(g(x((||其中 g 是编码器网络,f 是解码器网络,x 是一些输入示例。根据这个特定的损失,f(g(x(( 必须与 x 具有相同的维度(在您的情况下为 100(。
你需要考虑用解码器重建一些东西意味着什么,你到底想生产什么维度为 30 的东西?为了重新表述您的问题,我们可以创建具有 30 个维度的 x 表示吗?答:是的!这就是自动编码器通常用于的用途,编码器可以接受 100 维输入并将其尺寸减小到 30。要获得这种表示形式(在上面给出的代码中将是 32 维的(,只需运行 x 到 g(您的编码器(并停止。如果目标只是构造此表示,则解码器仅用于训练。