我是神经网络领域的新手,我想知道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
使用Pybrain训练DBN有些困难.首先,我尝试以简单的方式做到这一点:
net = buildNetwork(*layerDims)
Run Code Online (Sandbox Code Playgroud)
我遇到了这个问题:如何在PyBrain中进行有监督的深度信仰训练?,建议的解决方案只是导致了另一个错误:
File "/home/WORK/Canopy_64bit/User/lib/python2.7/site-packages/PyBrain-0.3.1- py2.7.egg/pybrain/unsupervised/trainers/deepbelief.py", line 62, in <genexpr>
layercons = (self.net.connections[i][0] for i in layers)
IndexError: list index out of range
Run Code Online (Sandbox Code Playgroud)
所以我试着从头开始定义一个网络!
inp = LinearLayer(3 , 'visible')
hidden0 = SigmoidLayer(2 , 'hidden0')
hidden1= SigmoidLayer(2 , 'hidden1')
output = LinearLayer(2 , 'output')
bias = BiasUnit('bias')
net = Network()
net.addInputModule(inp)
net.addModule(hidden0)
net.addModule(hidden1)
net.addModule(output)
net.addModule(bias)
net.addConnection(FullConnection(inp, hidden0))
net.addConnection(FullConnection(hidden0, hidden1))
net.addConnection(FullConnection(hidden1, output))
net.addConnection(FullConnection(bias, hidden0))
net.addConnection(FullConnection(bias, hidden1))
net.addConnection(FullConnection(bias, output))
net.sortModules()
Run Code Online (Sandbox Code Playgroud)
我还在跑的时候:
trainer = deepbelief.DeepBeliefTrainer(net1, dataset=ds)
trainer.trainEpochs(epochs)
Run Code Online (Sandbox Code Playgroud)
我看到这个错误:
File "/home/WORK/Canopy_64bit/User/lib/python2.7/site-packages/PyBrain-0.3.1-py2.7.egg/pybrain/structure/connections/connection.py", …Run Code Online (Sandbox Code Playgroud) 在阅读了几篇关于深度学习和深度信念网络的论文后,我对它的工作方式有了基本的了解.但仍然坚持最后一步,即分类步骤.我在互联网上发现的大多数实现都涉及到生成.(MNIST数字)
是否有某些解释(或代码)可用于讨论使用DBN对图像(最好是自然图像或对象)进行分类?
此外,一些方向指针将非常有用.
我无法让DeepBeliefTrainer在PyBrain/Python中处理我的数据.由于我无法找到除了无人监督如何在PyBrain中使用深度学习之外的任何示例,我希望有人可以提供一些示例来展示使用的基本概念.
我试图初始化使用:
epochs = 100
layerDims = [768,100,100,1]
net = buildNetwork(*layerDims)
dataset = self.dataset
trainer = DeepBeliefTrainer(net, dataset=dataSet)
trainer.trainEpochs(epochs)
Run Code Online (Sandbox Code Playgroud)
我尝试使用SupervisedDataset进行回归,但训练失败了.有没有人成功使用deeplearning教练进行有监督的机器学习?你是怎么做到的?
我得到的错误:
File "/Library/Python/2.7/site-packages/PyBrain-0.3.1-py2.7.egg/pybrain/structure/networks/rbm.py", line 39, in __init__
self.con = self.net.connections[self.visible][0]
KeyError: None
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用python中的Theano库对Deep Belief Networks进行一些实验.我使用此地址中的代码:DBN完整代码.此代码使用MNIST手写数据库.此文件已处于pickle格式.它是unicked in:
在下面进一步展开:
请有人给我构建这个数据集的代码,以便创建我自己的数据集吗?我使用的DBN示例需要这种格式的数据,我不知道该怎么做.如果有人有任何想法如何解决这个问题,请告诉我.
这是我的代码:
from datetime import datetime
import time
import os
from pprint import pprint
import numpy as np
import gzip, cPickle
import theano.tensor as T
from theano import function
os.system("cls")
filename = "completeData.txt"
f = open(filename,"r")
X = []
Y = []
for line in f:
line = line.strip('\n')
b = line.split(';')
b[0] = float(b[0])
b[1] = float(b[1])
b[2] …Run Code Online (Sandbox Code Playgroud) 深度学习技术(深度神经网络,深度信念网络,深度堆叠网络......)在某些领域非常有效.他们需要很长时间才能进行训练,但这只是一次成本.
我读了几篇关于不同技术的论文,他们只关注准确性和训练时间.一旦受过训练,他们在实践中产生答案的速度有多快?
是否有一些数据可用于对可能有数百万个参数的深度网络进行基准测试?
我认为它们非常快,因为所有权重都是固定的,但由于函数非常复杂且参数数量很高,我不确定它们在实践中的表现如何.
我尝试使用从nolearn包导入的DBN函数,这是我的代码:
from nolearn.dbn import DBN
import numpy as np
from sklearn import cross_validation
fileName = 'data.csv'
fileName_1 = 'label.csv'
data = np.genfromtxt(fileName, dtype=float, delimiter = ',')
label = np.genfromtxt(fileName_1, dtype=int, delimiter = ',')
clf = DBN(
[data, 300, 10],
learn_rates=0.3,
learn_rate_decays=0.9,
epochs=10,
verbose=1,
)
clf.fit(data,label)
score = cross_validation.cross_val_score(clf, data, label,scoring='f1', cv=10)
print score
Run Code Online (Sandbox Code Playgroud)
由于我的数据具有形状(1231,229)和带有形状(1231,13)的标签,因此标签集看起来像([0 0 1 0 1 0 1 0 0 0 1 1 0] ...,[.. ..]),当我运行我的代码时,我得到了这个错误信息:输入形状不好(1231,13).我想知道这里可能发生两个问题: