我是神经网络领域的新手,我想知道Deep Belief Networks和Convolutional Networks之间的区别.还有,深度卷积网络是深信仰和卷积神经网络的结合吗?
这是我到现在为止所收集到的.如果我错了,请纠正我.
对于图像分类问题,Deep Belief网络有许多层,每个层都使用贪婪的分层策略进行训练.例如,如果我的图像大小是50 x 50,我想要一个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个补丁开发一个网络(比方说).我的图层就是
为了学习权重,我从尺寸为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
目前我偶然发现了变量自动编码器,并尝试使用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) 在自动编码器的上下文中,我正在努力解决注意力的概念。我相信我理解注意力在 seq2seq 翻译方面的用法——在训练组合编码器和解码器后,我们可以同时使用编码器和解码器来创建(例如)语言翻译器。因为我们仍在生产中使用解码器,所以我们可以利用注意力机制。
但是,如果自编码器的主要目标主要是生成输入向量的潜在压缩表示呢?我说的是在训练后我们基本上可以处理模型的解码器部分的情况。
例如,如果我在没有注意的情况下使用 LSTM,“经典”方法是使用最后一个隐藏状态作为上下文向量——它应该代表我输入序列的主要特征。如果我要注意使用 LSTM,我的潜在表示必须是每个时间步长的所有隐藏状态。这似乎不符合输入压缩和保留主要功能的概念。维度甚至可能更高。
此外,如果我需要使用所有隐藏状态作为我的潜在表示(就像在注意力情况下一样) - 为什么要使用注意力?我可以使用所有隐藏状态来初始化解码器。
dimensionality-reduction autoencoder lstm recurrent-neural-network attention-model
我正在尝试使用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)
重构:蓝色
输入:橙色

当损失很小时,为什么重建如此糟糕?如何改善模型?谢谢。
根据我的理解,通常自动编码器在编码和解码网络中使用绑定权重吗?
我看了一下Caffe的自动编码器示例,但我没看到权重是如何绑定的.我注意到编码和解码网络共享相同的blob,但是如何保证权重正确更新?
如何在Caffe中实现捆绑重量自动编码器?
我正在尝试学习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定义?
谢谢!
我正在使用卷积神经网络(无监督特征学习来检测特征+ Softmax回归分类器)进行图像分类.我已经完成了Andrew NG在这方面的所有教程.(http://sufldl.stanford.edu/wiki/index.php/UFLDL_Tutorial).
我开发的网络有:
我已经学会了使用稀疏自动编码器将输入层连接到隐藏层的权重,因此具有400种不同的功能.
通过从任何输入图像(64x64)获取连续的8x8色块并将其输入到输入层,我得到400个大小(57x57)的特征图.
然后,我使用最大池与大小为19 x 19的窗口来获得400个大小为3x3的要素图.
我将此要素图提供给softmax图层,以将其分为3个不同的类别.
这些参数,例如隐藏层数(网络深度)和每层神经元数量,在教程中提出,因为它们已成功用于所有图像大小为64x64的特定数据集.
我想将它扩展到我自己的数据集,其中图像更大(比如400x400).我该如何决定
层数.
每层神经元的数量.
池化窗口的大小(最大池).
computer-vision neural-network unsupervised-learning autoencoder
自编码器欠拟合时间序列重建,仅预测平均值。
这是我对序列到序列自动编码器的尝试的总结。该图片取自本文:https : //arxiv.org/pdf/1607.00148.pdf

编码器:标准 LSTM 层。输入序列在最终隐藏状态中编码。
解码器: LSTM Cell(我想!)。从最后一个元素开始,一次一个元素地重建序列x[N]。
对于长度为 的序列,解码器算法如下N:
hs[N]:只需使用编码器最终隐藏状态。x[N]= w.dot(hs[N]) + b。x[i]= w.dot(hs[i]) + bx[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) 我一直在寻找自动编码器,并一直在想是否使用绑定的重量.我打算将它们作为预训练步骤进行堆叠,然后使用它们的隐藏表示来提供NN.
使用解开的权重,它看起来像:
F(X)=σ 2(b 2 + w ^ 2*σ 1(b 1 + w ^ 1*X))
使用绑定的权重,它看起来像:
F(X)=σ 2(b 2 + w ^ 1 Ť*σ 1(b 1 + w ^ 1*X))
从一个非常简单的观点来看,可以说,绑定权重确保编码器部分在给定体系结构的情况下生成最佳表示,如果权重是独立的,那么解码器可以有效地采用非最优表示并仍然对其进行解码?
我问,因为如果解码器出现"魔术"并且我打算只使用编码器来驱动我的NN,那不会有问题.
我一直在阅读各种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) autoencoder ×10
lstm ×3
python ×3
keras ×2
tensorflow ×2
caffe ×1
dbn ×1
python-3.x ×1
pytorch ×1
time-series ×1