Ⅰ 神经网络怎么把正确和错误数据集分开训练
1. 输入特征最好不相关。如果某些维输入的相关性太强,那么网络中与这些输入神经元相连的权重实际上起到的作用就是相似的,训练网络时花在调整这些权重之间关系上的力气就白费了。
2. 上面说的输入的相关是指所有训练数据某些维度上相关,而不是说某些训练数据在所有维度上相关。在你举的例子中,如果相似数据都非常接近,那么这些数据其实是冗余的,可以去掉一部分;如果相似数据之间的方差足够大,那么这种方差就能增强模型的鲁棒性。
3. 如果你不使用minibatch,那么没有影响。
4. 需要归一化,否则训练过程中容易遇到数值上的困难。
Ⅱ BP神经网络数据分类总出错。
你的数据矩阵的组织出问题了,你设置的网络输入神经元和你每次输入的数据这块有矛盾,可以尝试先再减少数据量去做,这里有可能用到转职,然后再加大数据量,这样去组织数据
Ⅲ 关于BP神经网络出现的错误要怎么解决啊,急!急!急!
你在工作路径下也有个u.m的文件与系统冲突了
Ⅳ 关于用bp神经网络做分类时,指标的筛选问题
把指标差异不显着的变量加入到特征中不会有任何意义,只会白白增加训练时间而已。
Ⅳ 如何删除神经网络样本中的预测误差较大的样本
样本变量不需要那么多,因为神经网络的信息存储能力有限,过多的样本会造成一些有用的信息被丢弃。如果样本数量过多,应增加隐层节点数或隐层数目,才能增强学习能力。
一、隐层数
一般认为,增加隐层数可以降低网络误差(也有文献认为不一定能有效降低),提高精度,但也使网络复杂化,从而增加了网络的训练时间和出现“过拟合”的倾向。一般来讲应设计神经网络应优先考虑3层网络(即有1个隐层)。一般地,靠增加隐层节点数来获得较低的误差,其训练效果要比增加隐层数更容易实现。对于没有隐层的神经网络模型,实际上就是一个线性或非线性(取决于输出层采用线性或非线性转换函数型式)回归模型。因此,一般认为,应将不含隐层的网络模型归入回归分析中,技术已很成熟,没有必要在神经网络理论中再讨论之。
二、隐层节点数
在BP 网络中,隐层节点数的选择非常重要,它不仅对建立的神经网络模型的性能影响很大,而且是训练时出现“过拟合”的直接原因,但是目前理论上还没有一种科学的和普遍的确定方法。 目前多数文献中提出的确定隐层节点数的计算公式都是针对训练样本任意多的情况,而且多数是针对最不利的情况,一般工程实践中很难满足,不宜采用。事实上,各种计算公式得到的隐层节点数有时相差几倍甚至上百倍。为尽可能避免训练时出现“过拟合”现象,保证足够高的网络性能和泛化能力,确定隐层节点数的最基本原则是:在满足精度要求的前提下取尽可能紧凑的结构,即取尽可能少的隐层节点数。研究表明,隐层节点数不仅与输入/输出层的节点数有关,更与需解决的问题的复杂程度和转换函数的型式以及样本数据的特性等因素有关。
Ⅵ 训练好的神经网络怎么分类未知数据
神经网络本来就是用于对没有训练过的数据的分类的。关键要看你的训练样本和你的实际数据的特点是否一致,越一致识别的效果越好,如果不好,你要考虑换选取的训练数据的样本了。
Ⅶ 2.搭建一个神经网络模型训练MNIST手写体数字数据集中遇到的问题及解决方法
批量输入后,如何使用numpy矩阵计算的方法计算各权值梯度,提高计算速度
def backprop(self, x, y): #x为多维矩阵。每列为一个x值。 y为多维矩阵。每列为一个y值。
batch_num=x.shape[1]
#print(x.shape)
#print(y.shape)
"""创建两个变量,用来存储所有b值和所有w值对应的梯度值。初始化为0.nabla_b为一个list,形状与biases的形状完全一致。nabla_w 为一个list,形状与weights的形状完全一致。
"""
nabla_b = [np.zeros(b.shape) for b in self.biases]
nabla_w = [np.zeros(w.shape) for w in self.weights]
# feedforward
"""activations,用来所有中间层和输出层在一次前向计算过程中的最终输出值,即a值。该值记录下来,以供后期使用BP算法求每个b和w的梯度。
"""
activation = x #x为本批多个x为列组成的矩阵。
activations = [x] # list to store all the activations, layer by layer
"""zs,用来所有中间层和输出层在一次前向计算过程中的线性输出值,即z值。该值记录下来,以供后期使用BP算法求每个b和w的梯度。
"""
zs = [] # list to store all the z vectors, layer by layer ,zs的每个元素为本batch的x对应的z为列构成的矩阵。
"""
通过一次正向计算,将中间层和输出层所有的z值和a值全部计算出来,并存储起来。供接下来求梯度使用。
"""
for b, w in zip(self.biases, self.weights):
#print(w.shape)
#print(np.dot(w, activation).shape)
#print(b.shape)
z = np.dot(w, activation)+b #z为本batch的x对应的z为列构成的矩阵。
zs.append(z)
activation = sigmoid(z)
activations.append(activation)
"""
以下部分是采用BP算法求解每个可训练参数的计算方法。是权重更新过程中的关键。
"""
# backward pass
# 求出输出层的delta值
delta = ((activations[-1]-y) * sigmoid_prime(zs[-1]))
nabla_b[-1] = delta.mean(axis=1).reshape(-1, 1)
nabla_w[-1] =np.dot(delta,activations[-2].transpose())/batch_num
# Note that the variable l in the loop below is used a little
# differently to the notation in Chapter 2 of the book. Here,
# l = 1 means the last layer of neurons, l = 2 is the
# second-last layer, and so on. It's a renumbering of the
# scheme in the book, used here to take advantage of the fact
# that Python can use negative indices in lists.
for l in range(2, self.num_layers):
z = zs[-l]
sp = sigmoid_prime(z)
delta = (np.dot(self.weights[-l+1].transpose(), delta) * sp)
nabla_b[-l] = delta.mean(axis=1).reshape(-1, 1)
nabla_w[-l] =np.dot(delta,activations[-l-1].transpose())/batch_num
return (nabla_b, nabla_w)
##梯度计算后,如何更新各权值
def update_mini_batch(self, mini_batch, eta):
"""Update the network's weights and biases by applying
gradient descent using backpropagation to a single mini batch.
The ``mini_batch`` is a list of tuples ``(x, y)``, and ``eta``
is the learning rate."""
""" 初始化变量,去存储各训练参数的微分和。
"""
nabla_b = [np.zeros(b.shape) for b in self.biases]
nabla_w = [np.zeros(w.shape) for w in self.weights]
""" 循环获取batch中的每个数据,获取各训练参数的微分,相加后获得各训练参数的微分和。
"""
x_batch=None
y_batch=None
for x, y in mini_batch:
if( x_batch is None):
x_batch=x
else:
x_batch=np.append(x_batch,x,axis=1)
if( y_batch is None):
y_batch=y
else:
y_batch=np.append(y_batch,y,axis=1)
delta_nabla_b, delta_nabla_w = self.backprop(x_batch, y_batch)
nabla_b = [nb+dnb for nb, dnb in zip(nabla_b, delta_nabla_b)]
nabla_w = [nw+dnw for nw, dnw in zip(nabla_w, delta_nabla_w)]
""" 使用各训练参数的平均微分和与步长的乘积,去更新每个训练参数
"""
self.weights = [w-eta*nw
for w, nw in zip(self.weights, nabla_w)]
self.biases = [b-eta*nb
for b, nb in zip(self.biases, nabla_b)]
Ⅷ 我想用神经网络算法将设备正常运行时候的各项参数的数据和中间一段时间出过故障的数据进行比对,找出故障
你可以将数据,作为输入,正常时输出0,故障时输出1, 这样去训练,若果能把网络训练好的话,最后你输入一组新数据的时候,就知道它是正常还是不正常的了。
具体怎么实现,这里也说不了。 下面给个例子你去看看,跟你的情况比较像。
不能发链接,我处理了一下,你照着看看。
ht据说网络不能发链接tp://据说网络不能发链接nnetinfo.c据说网络不能发链接om/nninfo/showTe据说网络不能发链接xt.jsp?id=19
希望能帮到你。 解决了你的问题的话帮我点个赞。