keras中的1D上采样速度慢得离谱?

keras中的1D上采样速度慢得离谱?,keras,autoencoder,Keras,Autoencoder,我正在尝试在Keras中构建一个自动编码器,一切都很顺利,但当我添加UpSampling1D层并运行代码并尝试获取模型摘要时,程序就永远冻结了。我的问题是,我的输入和输出大小为220500,卷积层对此没有问题,几乎可以立即编译。然而,当要上采样的层数达到50000左右并基本冻结时,上采样层开始变得异常缓慢。有没有办法解决这个问题,或者在上采样层中存在一些固有的限制?还有,为什么会这样?为什么卷积可以处理比上采样大得多的大小 这是我的实际代码: def autoencoder(input_dim)

我正在尝试在Keras中构建一个自动编码器,一切都很顺利,但当我添加UpSampling1D层并运行代码并尝试获取模型摘要时,程序就永远冻结了。我的问题是,我的输入和输出大小为220500,卷积层对此没有问题,几乎可以立即编译。然而,当要上采样的层数达到50000左右并基本冻结时,上采样层开始变得异常缓慢。有没有办法解决这个问题,或者在上采样层中存在一些固有的限制?还有,为什么会这样?为什么卷积可以处理比上采样大得多的大小

这是我的实际代码:

def autoencoder(input_dim):

input_layer = Input(shape=(input_dim,1))
encode = Conv1D(filters=1,kernel_size=10,strides=2,activation="relu",padding='same')(input_layer)
encode = BatchNormalization()(encode)
n=20
for i in range(15):
    encode = Conv1D(filters=1,kernel_size=10,strides=2,activation="relu",padding='same')(encode)
    encode = BatchNormalization()(encode)

decode = Conv1D(filters=1,kernel_size=10,strides=1,activation="relu",padding='same')(encode)
decode = UpSampling1D(2)(decode)
decode = BatchNormalization()(decode)
for i in range(14):
    decode = Conv1D(filters=1,kernel_size=10,strides=1,activation="relu",padding='same')(decode)
    decode = UpSampling1D(2)(decode)
    decode = BatchNormalization()(decode)

decode = Conv1D(filters=1,kernel_size=10,strides=1,activation="sigmoid",padding='same')(decode)
autoencoder_model = Model(input_layer, decode)
autoencoder_model.compile(optimizer='adadelta', loss='binary_crossentropy')
autoencoder_model.summary()
return autoencoder_model

你解决了这个问题吗?@jeevaa\v没有,但我确实想出了一个解决办法。使用几个密集的层和少量的单元,将它们以树形结构相互连接,以便可以提高输出的比例。想象一个基本的树,其中每个节点是一个密集层,可能有10个单位,然后它分支成两个单独的密集层,也有10个单位。为了不把它分成“左”和“右”两部分,你还要把左边最右边的孩子连接到右边。这使您的性能接近O(n^2),其中n是一个树节点中的单元数。对我来说效果不错。我使用UpSampling2D做了一个简单的变通方法。它似乎更快。所以,您将另一个维度的大小设置为1。@jeevaa_v这很奇怪,但很高兴知道:)您解决了这个问题吗?@jeevaa_v没有,但我确实想出了一种解决方法。使用几个密集的层和少量的单元,将它们以树形结构相互连接,以便可以提高输出的比例。想象一个基本的树,其中每个节点是一个密集层,可能有10个单位,然后它分支成两个单独的密集层,也有10个单位。为了不把它分成“左”和“右”两部分,你还要把左边最右边的孩子连接到右边。这使您的性能接近O(n^2),其中n是一个树节点中的单元数。对我来说效果不错。我使用UpSampling2D做了一个简单的变通方法。它似乎更快。所以,您将其他维度的大小设置为1。@jeevaa_v这很奇怪,但很高兴知道:)