我的数据形状是一样的,我只是在这里生成随机数。实际上,数据是从-6到6的浮点数,我也将它们缩放。输入图层大小和编码维度必须保持不变。当我训练时,损失开始并始终保持在0.631
。我手动改变了学习率。我是python的新手,并且不知道要在网格搜索中实现此代码以找到正确的参数。我还能做些什么来调整我的网络?
import numpy as np
from keras.layers import Input, Dense
from keras.models import Model
from keras import optimizers
#Train data
x_train=np.random.rand(2666000)
x_train = (train-min(train))/(max(train)-min(train))
x_train=x_train.reshape(-1,2000)
x_test=[]#empty testing later
#Enc Dimension
encoding_dim=100
#Input shape
input_dim = Input(shape=(2000,))
#Encoding Layer
encoded = Dense(encoding_dim, activation='relu')(input_dim)
#Decoding Layer
decoded = Dense(2000, activation='sigmoid')(encoded)
#Model AE
autoencoder = Model(input_dim, decoded)
#Model Encoder
encoder = Model(input_dim, encoded)
#Encoding
encoded_input = Input(shape=(encoding_dim,))
#Decoding
decoder_layer = autoencoder.layers[-1]
#Model Decoder
decoder = Model(encoded_input, decoder_layer(encoded_input))
optimizers.Adadelta(lr=0.1, rho=0.95, epsilon=None, decay=0.0)
autoencoder.compile(optimizer=optimizer, loss='binary_crossentropy',
metrics=['accuracy'])
#Train and test
autoencoder_train= autoencoder.fit(x_train, x_train,
epochs=epochs, shuffle=False, batch_size=2048)
答案 0 :(得分:0)
我建议添加更多隐藏图层。如果您的损失保持不变,则至少意味着两件事之一:
您的数据或多或少是随机的,无法绘制关系
您的模型不够复杂,无法从您的数据中学习有意义的关系
对我来说,经验法则是模型应该足够强大,足以在给定足够的训练迭代的情况下过度拟合数据。
不幸的是,在复杂和过于复杂之间存在一条细线。您必须使用隐藏图层的数量,每个图层中的单位数量以及训练网络所用的纪元数量。由于您只有两个Dense图层,因此一个好的起点是增加模型的复杂性。
如果你坚持使用网格搜索keras有一个scikit_learn包装器,sklearn有一个网格搜索模块。玩具示例:
from keras.wrappers.scikit_learn import KerasClassifier
from sklearn.model_selection import GridSearchCV
def create_model():
<return a compiled but untrained keras model>
model = KerasClassifier(build_fn = create_model, batch_size=1000, epochs=10)
#now write out all the parameters you want to try out for the grid search
activation = ['relu', 'tanh', 'sigmoid'...]
learn_rate = [0.1, 0.2, ...]
init = ['unform', 'normal', 'zero', ...]
optimizer = ['SGD', 'Adam' ...]
param_grid = dict(activation=activation, learn_rate=learn_rate, init=init, optimizer=optimizer)
grid = GridSearchCV(estimator=model, param_grid=param_grid)
result = grid.fit(X, y)