标签: autoencoder

深层信念网络与卷积神经网络

我是神经网络领域的新手,我想知道Deep Belief Networks和Convolutional Networks之间的区别.还有,深度卷积网络是深信仰和卷积神经网络的结合吗?

这是我到现在为止所收集到的.如果我错了,请纠正我.

对于图像分类问题,Deep Belief网络有许多层,每个层都使用贪婪的分层策略进行训练.例如,如果我的图像大小是50 x 50,我想要一个4层的深度网络

  1. 输入层
  2. 隐藏层1(HL1)
  3. 隐藏层2(HL2)
  4. 输出层

我的输入层将具有50 x 50 = 2500个神经元,HL1 = 1000个神经元(比如说),HL2 = 100个神经元(比如说)和输出层= 10个神经元,以便训练输入层和HL1之间的权重(W1),I使用AutoEncoder(2500 - 1000 - 2500)并学习大小为2500 x 1000的W1(这是无监督学习).然后我通过第一个隐藏层向前馈送所有图像以获得一组特征,然后使用另一个自动编码器(1000-100-1000)来获得下一组特征,最后使用softmax层(100-10)进行分类.(仅学习最后一层的权重(HL2-作为softmax层的输出)是监督学习).

(我可以使用RBM而不是自动编码器).

如果使用卷积神经网络解决了同样的问题,那么对于50x50输入图像,我将仅使用7 x 7个补丁开发一个网络(比方说).我的图层就是

  1. 输入层(7 x 7 = 49个神经元)
  2. HL1(25个不同特征的25个神经元) - (卷积层)
  3. 池层
  4. 输出层(Softmax)

为了学习权重,我从尺寸为50 x 50的图像中取出7 x 7个补丁,并通过卷积层向前馈送,因此我将有25个不同的特征映射,每个都有大小(50 - 7 + 1)x(50 - 7) + 1)= 44 x 44.

然后我使用一个11x11的窗口用于汇集手,因此获得25个大小(4 x 4)的特征映射作为汇集层的输出.我使用这些功能图进行分类.

在学习权重时,我不像深度信念网络(无监督学习)那样使用分层策略,而是使用监督学习并同时学习所有层的权重.这是正确的还是有其他方法来学习权重?

我所理解的是正确的吗?

因此,如果我想使用DBN进行图像分类,我应该将所有图像调整到特定大小(例如200x200)并在输入层中放置那么多神经元,而在CNN的情况下,我只训练一个较小的补丁.输入(比如尺寸为200x200的图像为10 x 10)并将学习的权重卷积在整个图像上?

DBN提供的结果是否比CNN更好,还是纯粹依赖于数据集?

谢谢.

machine-learning computer-vision neural-network dbn autoencoder

37
推荐指数
2
解决办法
2万
查看次数

keras中的add_loss函数

目前我偶然发现了变量自动编码器,并尝试使用keras使它们在MNIST上运行.我在github上找到了一个教程.

我的问题涉及以下几行代码:

# Build model
vae = Model(x, x_decoded_mean)

# Calculate custom loss
xent_loss = original_dim * metrics.binary_crossentropy(x, x_decoded_mean)
kl_loss = - 0.5 * K.sum(1 + z_log_var - K.square(z_mean) - K.exp(z_log_var), axis=-1)
vae_loss = K.mean(xent_loss + kl_loss)

# Compile
vae.add_loss(vae_loss)
vae.compile(optimizer='rmsprop')
Run Code Online (Sandbox Code Playgroud)

为什么使用add_loss而不是将其指定为编译选项?vae.compile(optimizer='rmsprop', loss=vae_loss)似乎没有工作的东西 ,并抛出以下错误:

ValueError: The model cannot be compiled because it has no loss to optimize.
Run Code Online (Sandbox Code Playgroud)

这个函数和自定义丢失函数有什么区别,我可以添加它作为Model.fit()的参数?

提前致谢!

PS:我知道在github上存在几个与此有关的问题,但大多数问题都是开放的,没有注释.如果已经解决,请分享链接!

编辑: 我删除了向模型添加损失的行,并使用了编译函数的loss参数.它现在看起来像这样:

# Build model
vae = Model(x, x_decoded_mean)

# Calculate custom loss
xent_loss = original_dim …
Run Code Online (Sandbox Code Playgroud)

neural-network autoencoder keras

17
推荐指数
3
解决办法
1万
查看次数

注意力对自动编码器有意义吗?

在自动编码器的上下文中,我正在努力解决注意力的概念。我相信我理解注意力在 seq2seq 翻译方面的用法——在训练组合编码器和解码器后,我们可以同时使用编码器和解码器来创建(例如)语言翻译器。因为我们仍在生产中使用解码器,所以我们可以利用注意力机制。

但是,如果自编码器的主要目标主要是生成输入向量的潜在压缩表示呢?我说的是在训练后我们基本上可以处理模型的解码器部分的情况。

例如,如果我在没有注意的情况下使用 LSTM,“经典”方法是使用最后一个隐藏状态作为上下文向量——它应该代表我输入序列的主要特征。如果我要注意使用 LSTM,我的潜在表示必须是每个时间步长的所有隐藏状态。这似乎不符合输入压缩和保留主要功能的概念。维度甚至可能更高。

此外,如果我需要使用所有隐藏状态作为我的潜在表示(就像在注意力情况下一样) - 为什么要使用注意力?我可以使用所有隐藏状态来初始化解码器。

dimensionality-reduction autoencoder lstm recurrent-neural-network attention-model

15
推荐指数
1
解决办法
1792
查看次数

Keras LSTM自动编码器时间序列重建

我正在尝试使用LSTM Autoencoder(Keras)重建时间序列数据。现在,我想在少量样本上训练自动编码器(5个样本,每个样本的长度为500个时间步长,并且具有1维)。我想确保模型可以重建5个样本,然后再使用所有数据(6000个样本)。

window_size = 500
features = 1
data = data.reshape(5, window_size, features)

model = Sequential()

model.add(LSTM(256, input_shape=(window_size, features), 
return_sequences=True))
model.add(LSTM(128, input_shape=(window_size, features), 
return_sequences=False))
model.add(RepeatVector(window_size))

model.add(LSTM(128, input_shape=(window_size, features), 
return_sequences=True))
model.add(LSTM(256, input_shape=(window_size, features), 
return_sequences=True))
model.add(TimeDistributed(Dense(1)))

model.compile(optimizer='adam', loss='mse')
model.fit(data, data, epochs=100, verbose=1)
Run Code Online (Sandbox Code Playgroud)

模型

训练:

Epoch 1/100
5/5 [==============================] - 2s 384ms/step - loss: 0.1603
...
Epoch 100/100
5/5 [==============================] - 2s 388ms/step - loss: 0.0018
Run Code Online (Sandbox Code Playgroud)

训练后,我尝试重建5个样本之一:

yhat = model.predict(np.expand_dims(data[1,:,:], axis=0), verbose=0)
Run Code Online (Sandbox Code Playgroud)

重构:蓝色
输入:橙色

重构(蓝色)与输入(橙色)

当损失很小时,为什么重建如此糟糕?如何改善模型?谢谢。

python time-series autoencoder lstm keras

14
推荐指数
2
解决办法
1003
查看次数

Caffe中带有重量的自动编码器

根据我的理解,通常自动编码器在编码和解码网络中使用绑定权重吗?

我看了一下Caffe的自动编码器示例,但我没看到权重是如何绑定的.我注意到编码和解码网络共享相同的blob,但是如何保证权重正确更新?

如何在Caffe中实现捆绑重量自动编码器?

machine-learning neural-network autoencoder caffe

13
推荐指数
1
解决办法
543
查看次数

TensorFlow:dataset.train.next_batch是如何定义的?

我正在尝试学习TensorFlow并在以下网址学习示例:https://github.com/aymericdamien/TensorFlow-Examples/blob/master/notebooks/3_NeuralNetworks/autoencoder.ipynb

然后,我在下面的代码中有一些问题:

for epoch in range(training_epochs):
    # Loop over all batches
    for i in range(total_batch):
        batch_xs, batch_ys = mnist.train.next_batch(batch_size)
        # Run optimization op (backprop) and cost op (to get loss value)
        _, c = sess.run([optimizer, cost], feed_dict={X: batch_xs})
    # Display logs per epoch step
    if epoch % display_step == 0:
        print("Epoch:", '%04d' % (epoch+1),
              "cost=", "{:.9f}".format(c))
Run Code Online (Sandbox Code Playgroud)

由于mnist只是一个数据集,究竟是什么mnist.train.next_batch意思呢?怎么dataset.train.next_batch定义?

谢谢!

neural-network python-3.x autoencoder tensorflow

13
推荐指数
1
解决办法
2万
查看次数

您如何确定用于图像分类的卷积神经网络的参数?

我正在使用卷积神经网络(无监督特征学习来检测特征+ Softmax回归分类器)进行图像分类.我已经完成了Andrew NG在这方面的所有教程.(http://sufldl.stanford.edu/wiki/index.php/UFLDL_Tutorial).

我开发的网络有:

  • 输入层 - 大小8x8(64个神经元)
  • 隐藏层 - 大小为400的神经元
  • 输出图层 - 大小3

我已经学会了使用稀疏自动编码器将输入层连接到隐藏层的权重,因此具有400种不同的功能.

通过从任何输入图像(64x64)获取连续的8x8色块并将其输入到输入层,我得到400个大小(57x57)的特征图.

然后,我使用最大池与大小为19 x 19的窗口来获得400个大小为3x3的要素图.

我将此要素图提供给softmax图层,以将其分为3个不同的类别.

这些参数,例如隐藏层数(网络深度)和每层神经元数量,在教程中提出,因为它们已成功用于所有图像大小为64x64的特定数据集.

我想将它扩展到我自己的数据集,其中图像更大(比如400x400).我该如何决定

  1. 层数.

  2. 每层神经元的数量.

  3. 池化窗口的大小(最大池).

computer-vision neural-network unsupervised-learning autoencoder

12
推荐指数
1
解决办法
2万
查看次数

LSTM 自编码器问题

域名注册地址:

自编码器欠拟合时间序列重建,仅预测平均值。

问题设置:

这是我对序列到序列自动编码器的尝试的总结。该图片取自本文:https : //arxiv.org/pdf/1607.00148.pdf 在此处输入图片说明

编码器:标准 LSTM 层。输入序列在最终隐藏状态中编码。

解码器: LSTM Cell(我想!)。从最后一个元素开始,一次一个元素地重建序列x[N]

对于长度为 的序列,解码器算法如下N

  1. 获取解码器初始隐藏状态hs[N]:只需使用编码器最终隐藏状态。
  2. 重建序列中的最后一个元素:x[N]= w.dot(hs[N]) + b
  3. 其他元素的相同模式: x[i]= w.dot(hs[i]) + b
  4. 使用x[i]hs[i]作为输入LSTMCell来获取x[i-1]hs[i-1]

最小工作示例:

这是我的实现,从编码器开始:

class SeqEncoderLSTM(nn.Module):
    def __init__(self, n_features, latent_size):
        super(SeqEncoderLSTM, self).__init__()
        
        self.lstm = nn.LSTM(
            n_features, 
            latent_size, 
            batch_first=True)
        
    def forward(self, x):
        _, hs = self.lstm(x)
        return hs
Run Code Online (Sandbox Code Playgroud)

解码器类:

class SeqDecoderLSTM(nn.Module):
    def __init__(self, emb_size, n_features):
        super(SeqDecoderLSTM, self).__init__()
        
        self.cell = …
Run Code Online (Sandbox Code Playgroud)

python neural-network autoencoder lstm pytorch

11
推荐指数
1
解决办法
928
查看次数

Autoencoder中的绑定权重

我一直在寻找自动编码器,并一直在想是否使用绑定的重量.我打算将它们作为预训练步骤进行堆叠,然后使用它们的隐藏表示来提供NN.

使用解开的权重,它看起来像:

F(X)=σ 2(b 2 + w ^ 21(b 1 + w ^ 1*X))

使用绑定的权重,它看起来像:

F(X)=σ 2(b 2 + w ^ 1 Ť1(b 1 + w ^ 1*X))

从一个非常简单的观点来看,可以说,绑定权重确保编码器部分在给定体系结构的情况下生成最佳表示,如果权重是独立的,那么解码器可以有效地采用非最优表示并仍然对其进行解码?

我问,因为如果解码器出现"魔术"并且我打算只使用编码器来驱动我的NN,那不会有问题.

machine-learning neural-network autoencoder deep-learning

10
推荐指数
1
解决办法
4727
查看次数

张量流中的稀疏自编码器代价函数

我一直在阅读各种TensorFlow教程,试图熟悉它的工作原理; 我对使用自动编码器感兴趣.

我开始在Tensorflow的模型库中使用模型autoencoder:

https://github.com/tensorflow/models/tree/master/autoencoder

我得到它的工作,并在可视化权重,期望看到这样的事情:

在此输入图像描述

但是,我的自动编码器给了我看起来很垃圾的权重(尽管准确地重新创建了输入图像).

在此输入图像描述

进一步阅读表明我缺少的是我的自动编码器不稀疏,所以我需要对权重实施稀疏成本.

我试图在原始代码中添加稀疏成本(基于此示例3),但它似乎没有将权重更改为看起来像模型.

如何正确地更改成本以获得看起来像自动编码的MNIST数据集中常见的功能?我修改过的模型在这里:

import numpy as np
import random
import math
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
import matplotlib.pyplot as plt

def xavier_init(fan_in, fan_out, constant = 1):
    low = -constant * np.sqrt(6.0 / (fan_in + fan_out))
    high = constant * np.sqrt(6.0 / (fan_in + fan_out))
    return tf.random_uniform((fan_in, fan_out), minval = low, maxval = high, dtype = tf.float32)

class AdditiveGaussianNoiseAutoencoder(object):
    def __init__(self, n_input, n_hidden, transfer_function = tf.nn.sigmoid, optimizer = tf.train.AdamOptimizer(),
                 scale …
Run Code Online (Sandbox Code Playgroud)

python autoencoder deep-learning tensorflow

10
推荐指数
1
解决办法
2160
查看次数