我正在尝试使用反向传播编写一个天气预报程序.我是这个领域的初学者.我有不同参数的历史数据,如温度,湿度,风速,降雨量等.
我对如何将这些数据提供给输入层感到困惑.是否为每个输入节点提供给定日期的整个数据,或者我是否需要为每个参数设置不同的网络?我也对输出层感到困惑.
目前我正在学习神经网络,我正在尝试创建一个可以训练识别手写字符的应用程序.对于这个问题,我使用前馈神经网络,当我训练它识别1,2或3个不同的字符时,它似乎有效.但是当我尝试使网络学习超过3个字符时,它将停留在40 - 60%左右的错误百分比.
我尝试了多层和更少/更多的神经元,但我似乎无法正确,现在我想知道前馈神经网络是否能够识别那么多信息.
一些统计:
网络类型:前馈神经网络
输入神经元: 100(10*10)网格用于绘制字符
输出神经元:重新定位的字符数量
有谁知道我的架构中可能存在的缺陷是什么?输入神经元太多了吗?前馈神经网络不具备角色定位能力吗?
ocr artificial-intelligence backpropagation neural-network feed-forward
我用Java编写了一个神经网络,现在正在研究反向传播算法.
我已经读过,权重的批量更新将导致更稳定的渐变搜索,而不是在线权重更新.
作为测试,我创建了一个100分的时间序列函数,这样x = [0..99]和y = f(x).我创建了一个神经网络,其中包含一个输入和一个输出以及2个隐藏层,其中包含10个神经元用于测试.我正在努力解决的问题是在解决这个问题时反向传播算法的学习速度.
我有100个输入点,所以当我计算dw_{ij}每个节点的重量变化时,它实际上是一个总和:
dw_{ij} = dw_{ij,1} + dw_{ij,2} + ... + dw_{ij,p}
Run Code Online (Sandbox Code Playgroud)
其中,p = 100在这种情况下.
现在重量更新变得非常巨大,因此我的错误E反弹,因此很难找到最小值.我得到一些正确行为的唯一方法是当我将学习率设置为y类似的时候0.7 / p^2.
根据样本量,是否有一些设定学习率的一般规则?
是否可以定义具有多个输入的TensorFlow图?例如,我想给图形两个图像和一个文本,每个图像由一堆图层处理,最后有一个fc图层.然后有一个节点计算有损函数,该函数考虑了三个表示.目的是考虑到联合代表性的损失,让三个网络反向传播.可能吗?有关它的任何示例/教程?提前致谢!
对于我的教育,我试图在卷积神经网络中实现一个 N 维卷积层。
我想实现一个反向传播功能。但是,我不确定这样做的最有效方法。
目前,我正在使用signal.fftconvolve:
在 forwards 步骤中,卷积过滤器和内核对所有过滤器进行转发;
在反向传播步骤中,将导数(使用 FlipAllAxes 函数在所有维度上反转)与数组 ( https://jefkine.com/general/2016/09/05/backpropagation-in-convolutional-neural-networks/ ) 进行卷积所有过滤器并将它们相加。我认为输出是每个图像与每个过滤器的每个导数卷积的总和。
我对如何对导数进行卷积感到特别困惑。使用下面的类进行反向传播会导致权重的大小爆炸。
用输出和滤波器对导数的卷积进行编程的正确方法是什么?
编辑:
根据这篇论文(通过 FFT 快速训练卷积网络),它试图做我想做的事情:
前一层的导数由当前层的导数与权重的卷积给出:
dL/dy_f = dL/dx * w_f^T
权重的导数是导数与原始输入的卷积的分段和:
dL/dy = dL/dx * x
尽我所知,我已经在下面实现了这一点。然而,这似乎并没有给出预期的结果,因为我使用这一层编写的网络在训练期间表现出剧烈的波动。
import numpy as np
from scipy import signal
class ConvNDLayer:
def __init__(self,channels, kernel_size, dim):
self.channels = channels
self.kernel_size = kernel_size;
self.dim = dim
self.last_input = None
self.filt_dims = np.ones(dim+1).astype(int)
self.filt_dims[1:] = self.filt_dims[1:]*kernel_size
self.filt_dims[0]= self.filt_dims[0]*channels
self.filters = np.random.randn(*self.filt_dims)/(kernel_size)**dim
def …Run Code Online (Sandbox Code Playgroud) 我正在玩神经网络试图根据你需要解决的问题来理解设计架构的最佳实践.
我生成了一个由单个凸区域组成的非常简单的数据集,如下所示:

当我使用L = 1或L = 2隐藏层(加上输出层)的架构时,一切正常,但是当我添加第三个隐藏层(L = 3)时,我的性能下降到略好于机会.
我知道你添加到网络中的复杂性越多(要学习的权重和参数的数量),你越倾向于过度拟合数据,但我认为这不是我问题的本质,原因有两个:
任何人都可以帮助我理解为什么添加一个额外的隐藏层会让我在这么简单的任务中失败?
这是我的表现图像作为所用图层数量的函数:

补充部分评论如下:
L(s) = 1 / 1 + exp(-s)我试图在Javascript中实现神经网络,我的项目的规范更喜欢实现为每个节点和层分别拥有对象.我是编程神经网络的新手,我在网络的反向传播训练中遇到了一些障碍.我似乎无法找到解释为什么反向传播算法不能为每个训练时期正确训练网络的原因.
我已经在一些网站上关注了教程,请确保尽可能密切关注:http:
//galaxy.agh.edu.pl/~vlsi/AI/backp_t_en/backprop.html

这是原始代码的链接:http: //jsfiddle.net/Wkrgu/5/
这是我想要做的,据我所知,这是我能解释的事情:在计算每个节点/神经元的导数值和误差之后,我正在实现这个函数:
// Once all gradients are calculated, work forward and calculate
// the new weights. w = w + (lr * df/de * in)
for(i = 0; i < this._layers.length; i++) {
// For each neuron in each layer, ...
for(j = 0; j < this._layers[i]._neurons.length; j++) {
neuron = this._layers[i]._neurons[j];
// Modify the bias.
neuron.bias += this.options.learningRate * neuron.gradient;
// For each weight, ...
for(k = 0; k < neuron.weights.length; …Run Code Online (Sandbox Code Playgroud) 我正致力于复制神经网络.我试图了解标准图层类型的工作原理.特别是,我无法在任何地方查找跨通道归一化层在后向传递上的行为.
由于规范化层没有参数,我可以猜测两种可能的选择:
来自下一个(即后一个)层的误差梯度向后传递而不对它们做任何事情.
误差梯度的标准化方式与正向通道中的通道上的激活标准化的方式相同.
我想不出你为什么要根据任何直觉做另一个的原因,因此我为什么要对此有所帮助.
EDIT1:
该层是caffe中的标准层,如http://caffe.berkeleyvision.org/tutorial/layers.html所述(请参阅"本地响应规范化(LRN)").
在alexNet论文的3.3节中描述了前向传递中图层的实现:http://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf
EDIT2:
我相信这里的Torch库中都有前向和后向传递算法:https://github.com/soumith/cudnn.torch/blob/master/SpatialCrossMapLRN.lua
在这里的Caffe图书馆:https://github.com/BVLC/caffe/blob/master/src/caffe/layers/lrn_layer.cpp
任何熟悉这两种方法的人都可以将后向传递阶段的方法翻译成普通英语吗?
machine-learning backpropagation neural-network deep-learning conv-neural-network
神经网络中前向传递和后向传递的含义是什么?
在谈论反向传播和时代时,每个人都在提及这些表达.
我明白向前传球和向后传球一起形成一个时代.
在尝试创建神经网络并使用 Pytorch 对其进行优化时,我得到了
ValueError:优化器得到一个空的参数列表
这是代码。
import torch.nn as nn
import torch.nn.functional as F
from os.path import dirname
from os import getcwd
from os.path import realpath
from sys import argv
class NetActor(nn.Module):
def __init__(self, args, state_vector_size, action_vector_size, hidden_layer_size_list):
super(NetActor, self).__init__()
self.args = args
self.state_vector_size = state_vector_size
self.action_vector_size = action_vector_size
self.layer_sizes = hidden_layer_size_list
self.layer_sizes.append(action_vector_size)
self.nn_layers = []
self._create_net()
def _create_net(self):
prev_layer_size = self.state_vector_size
for next_layer_size in self.layer_sizes:
next_layer = nn.Linear(prev_layer_size, next_layer_size)
prev_layer_size = next_layer_size
self.nn_layers.append(next_layer)
def forward(self, torch_state):
activations = torch_state
for …Run Code Online (Sandbox Code Playgroud) python machine-learning reinforcement-learning backpropagation pytorch
backpropagation ×10
python ×2
convolution ×1
feed-forward ×1
javascript ×1
ocr ×1
prediction ×1
pytorch ×1
tensorflow ×1