Keras 自动编码器输出没有正确的形状

Keras 自动编码器输出没有正确的形状,keras,output,shape,autoencoder,Keras,Output,Shape,Autoencoder,我创建了一个类,在自动编码器中连续添加层,目的是从数据中学习越来越高的特征表示。 但是,在训练我的算法并使用预测函数后,输出形状不是正确的 x:shape=(6000,23) alg=成功自动编码器() 计算拟合(x,历元=10) x_compressed=alg.predict(x) 压缩x_的形状应为(6000,5),但应为(6000,23) 有人能帮我吗?问题在哪里 请查找以下代码: class SuccessiveAutoencoder(): “该算法一个接一个地堆叠自动编码器,其思想

我创建了一个类,在
自动编码器
中连续添加层,目的是从数据中学习越来越高的特征表示。 但是,在训练我的算法并使用预测函数后,输出形状不是正确的

x:shape=(6000,23)
alg=成功自动编码器()
计算拟合(x,历元=10)
x_compressed=alg.predict(x)
压缩x_的形状应为(6000,5),但应为(6000,23)
有人能帮我吗?问题在哪里

请查找以下代码:

class SuccessiveAutoencoder():
“该算法一个接一个地堆叠自动编码器,其思想是
从数据中学习更高级别的功能。
属性
-----------------   
-隐藏层:隐藏层的数量
-单位:每个隐藏层中的神经元数量
-激活:要使用的激活类型。请注意
解码器是在类中硬编码的,是一个sigmoid
-微调:如果算法训练一次整个网络
已创建。它可以是“y”或“n”
"""
定义初始层(自、隐藏层=5,单位nbr=5,激活=relu),
微调='y'):
“”“初始化算法”“”
self.hidden\u layers=隐藏的\u层
self.units\u nbr=units\u nbr
自我激活
自微调=微调
def创建_模型(自我,X):
“”“创建初始自动编码器结构”“”
#构建简单的自动编码器
input\u time\u series=input(shape=(X.shape[1],),name='input')
第1层=致密(单位=自激活单位,激活=自激活,
名称='hidden1')(输入时间序列)
解码=密集(单位=X.shape[1],激活='sigmoid',名称='output')(第1层)
返回模型(输入时间序列,解码)
def添加层(自身、型号、增量):
“”“添加新层,并使以前的层不可训练”“”
#将以前的层设置为不可训练
对于模型中的层。层[:-1]:
layer.trainable=错误
#上一层的输出
out=模型。图层[-2]。输出
#添加新图层
新层=致密层(单位=自激活单位,激活=自激活,
名称='hidden'+str(incr))(out)
解码=模型层[-1](新层)
返回模型(模型层[0]。输入,已解码)
def拟合(自、X、历元):
“”“运行算法,创建自动编码器并校准它”“”
#创建模型并对其进行训练
打印(“/Training Hidden Layer 1”)
模型=自身。创建模型(X)
compile(损失='mean_squared_error',优化器='adam')
h=model.fit(X,X,epochs=epochs,verbose=0)
打印('Last loss:{}'。格式(h.history['loss'][-1]))
#增量添加图层,并训练这些新图层
对于范围内的增量(2,自隐藏\u层+1):
打印(“/Training Hidden Layer{}.”格式(str(incr)))
模型=自身。添加图层(模型,增量)
compile(损失='mean_squared_error',优化器='adam')
h=model.fit(X,X,epochs=epochs,verbose=0)
打印('Last loss:{}'。格式(h.history['loss'][-1]))
#如果用户希望在整个模型上再次运行校准
如果self.fine_tuning==“y”:
#最后训练
打印(“/最终调整”)
对于model.layers中的图层:
layer.trainable=True
compile(损失='mean_squared_error',优化器='adam')
h=model.fit(X,X,epochs=epochs,verbose=0)
打印('Last loss:{}'。格式(h.history['loss'][-1]))
#去掉最后一层,并存储模型
model.layers.pop()
compile(损失='mean_squared_error',优化器='adam')
self.model=model
def预测(自我,X):
“”“从X预测压缩信息”“”
返回自.模型.预测(X)

代码的第103行,而不是

self.model=model
我把

self.model=model(model.layers[0]。输入,model.layers[-1]。输出)

看起来它起作用了。但是任何洞察都是受欢迎的。

您为什么要
model.layers.pop()
?我猜23是倒数第二层的隐藏维度。我删除最后一层,因为目标是降维。