在训练多层感知器时, 时代与迭代有什么区别?
ANN(人工neural network)和SVM(支持向量机)是监督机器学习和分类的两种常用策略。 对于一个特定的项目来说,哪种方法更好是不常见的,我确定答案总是“取决于”。 通常,使用两者的组合以及贝叶斯分类。 这些关于Stackoverflow的问题已经被问及关于ANN和SVM: ANN和SVM分类 ANN,SVM和KNN在我的分类问题上有什么区别 支持向量机还是人工neural network进行文本处理? 在这个问题中,我想具体了解一个ANN(特别是一个多层感知器)的哪些方面可能使它适用于SVM? 我问的原因是因为很容易回答相反的问题:支持向量机通常比ANN更好,因为它避免了ANN的两个主要弱点: (1)人工neural network常常是局部最小值而不是全球最小值,这意味着它们有时会“缺失大局”(或者错过了森林) (2)如果训练时间过长,人工neural network往往会过度适应 ,这意味着对于任何给定的模式,人工neural network可能会开始将噪声视为模式的一部分。 SVM不受这两个问题的影响。 然而,支持向量机(SVMs)是人工neural network的完全替代品并不是显而易见的。 那么,人工neural network对SVM有什么特别的优势可以使它适用于某些情况呢? 我已经列举了一个支持向量机的特定优点,现在我想看看人工neural network优点列表(如果有的话)。
这是我在ANSI C中的感知器实现: #include <stdio.h> #include <stdlib.h> #include <math.h> float randomFloat() { srand(time(NULL)); float r = (float)rand() / (float)RAND_MAX; return r; } int calculateOutput(float weights[], float x, float y) { float sum = x * weights[0] + y * weights[1]; return (sum >= 0) ? 1 : -1; } int main(int argc, char *argv[]) { // […]
如果我们有10个特征向量,那么我们可以在input层有10个神经节点。如果我们有5个输出类,那么我们可以在输出层有5个节点。但是在MLP中select隐含层数的标准是多less? 1个隐藏层中的节点?
我想用一个向量标签的咖啡,而不是整数。 我查了一些答案,看来HDF5是一个更好的方法。 但是,然后我陷入了像这样的错误: outer_num_ * inner_num_ == bottom[1]->count() :34]检查失败: outer_num_ * inner_num_ == bottom[1]->count() (50与200)标签数量必须匹配预测数量; 例如,如果标签轴== 1且预测形状是(N,C,H,W),则标签计数(标签数量)必须是N*H*W ,其中整数值在{0,1,…, C-1}。 与HDF5创build为: f = h5py.File('train.h5', 'w') f.create_dataset('data', (1200, 128), dtype='f8') f.create_dataset('label', (1200, 4), dtype='f4') 我的networking是由以下产生的: def net(hdf5, batch_size): n = caffe.NetSpec() n.data, n.label = L.HDF5Data(batch_size=batch_size, source=hdf5, ntop=2) n.ip1 = L.InnerProduct(n.data, num_output=50, weight_filler=dict(type='xavier')) n.relu1 = L.ReLU(n.ip1, in_place=True) n.ip2 […]
这是关于neural network理论的一个主要问题: 为什么我们必须规范neural network的input? 我明白,有时候,例如当input值是非数值时,必须执行某个转换,但是当我们有一个数值input时? 为什么数字必须在一定的时间间隔? 如果数据没有正常化会发生什么?
我有火车和标签数据data.mat。 (我有200个具有6000个特征的训练数据,标签是保存在data.mat中的(-1,+1))。 我正在尝试在hdf5中转换我的数据并使用以下命令运行Caffe: load data.mat hdf5write('my_data.h5', '/new_train_x', single( reshape(new_train_x,[200, 6000, 1, 1]) ) ); hdf5write('my_data.h5', '/label_train', single( reshape(label_train,[200, 1, 1, 1]) ), 'WriteMode', 'append' ); 而我的layer.prototxt(只是数据层)是: layer { type: "HDF5Data" name: "data" top: "new_train_x" # note: same name as in HDF5 top: "label_train" # hdf5_data_param { source: "/path/to/list/file.txt" batch_size: 20 } include { phase: TRAIN […]
我希望在我的模型中使用InfogainLosstypes的丢失图层。 但是我很难正确定义它。 有没有关于使用INFOGAIN_LOSS图层的任何教程/例子? 该层的input,类概率,是否为SOFTMAX层的输出,还是足以input完全连接层的“顶层”? INFOGAIN_LOSS需要三个input:类概率,标签和matrixH matrixH可以作为层参数infogain_loss_param { source: "fiename" } 。 假设我有一个python脚本,用numpy.array dtype='f4' (其中L是模型中的标签数(L,L)计算H为numpy.array的形状(L,L) )。 我怎样才能将我的numpy.array转换成可以作为infogain_loss_param { source }给模型的binproto文件? 假设我想把H作为第三个input(底部)提供给损失层(而不是模型参数)。 我该怎么做? 我是否定义了一个“顶”是H的新数据层? 如果是这样的话,每次训练迭代都不会增加这个层的数据,就像训练数据增加一样? 我如何定义多个不相关的input“数据”层,caffe如何知道从批处理的训练/testing“数据”层中读取,而从H “数据”层知道只读取一次所有训练处理?
我从Caffe开始,这个例子运行得很好。 我有火车和标签数据data.mat 。 (我有300个训练数据,有30个特征,标签是(-1, +1) ,保存在data.mat )。 但是,我不太明白如何使用caffe来实现我自己的数据集? 有没有一步一步教程可以教我? 非常感谢!!!! 任何意见将不胜感激!
我正在使用这个库来实现一个学习代理。 我已经生成了培训案例,但我不确定validation和testing集是什么。 老师说: 70%应该是培训案例,10%将是testing案例,其余20%应该是validation案例。 编辑 我有这个训练的代码,但我不知道何时停止训练。 def train(self, train, validation, N=0.3, M=0.1): # N: learning rate # M: momentum factor accuracy = list() while(True): error = 0.0 for p in train: input, target = p self.update(input) error = error + self.backPropagate(target, N, M) print "validation" total = 0 for p in validation: input, target = […]