Python 训练完成后在神经网络中测试数据的代码

Python 训练完成后在神经网络中测试数据的代码,python,numpy,testing,neural-network,training-data,Python,Numpy,Testing,Neural Network,Training Data,我已经修改了一个在线代码供我使用。神经网络的训练已经完成。但我不知道如何进行数据集的测试。我的数据集由350个条目组成,其中一半用于培训,另一半用于测试。有人能帮我看看测试模块中的代码是什么样子的吗? 神经网络的结构: 它有3个隐藏层 它有34列 多谢各位 这是我在培训中使用的工作代码: import numpy as np import csv X = X = np.array([[float(cell) for cell in row[:-1]] for row in csv.r

我已经修改了一个在线代码供我使用。神经网络的训练已经完成。但我不知道如何进行数据集的测试。我的数据集由350个条目组成,其中一半用于培训,另一半用于测试。有人能帮我看看测试模块中的代码是什么样子的吗? 神经网络的结构: 它有3个隐藏层 它有34列 多谢各位

这是我在培训中使用的工作代码:

import numpy as np
import csv

X = X = np.array([[float(cell) for cell in row[:-1]] for row in      csv.reader(open('C:/Users/Acer/Desktop/final sem/Project/Implementation/nn.csv'))])

Y = np.array([float(row[-1]) for row in   csv.reader(open('C:/Users/Acer/Desktop/final sem/Project/Implementation/nn.csv'))])

syn0 = 2*np.random.random((34,26)) - 1

syn1 = 2*np.random.random((26,18)) - 1

syn2 = 2*np.random.random((18,11)) - 1


syn3 = 2*np.random.random((11,6)) - 1


for j in xrange(350):

  l1 = 1/(1+np.exp(-(np.dot(X,syn0))))
  l2 = 1/(1+np.exp(-(l1.dot(syn1))))
  l3 = 1/(1+np.exp(-(l2.dot(syn2))))
  l4 = 1/(1+np.exp(-(l3.dot(syn3))))

  l4_delta = (Y[j] - l4)*(l4*(1-l4))
  l3_delta = l4_delta.dot(syn3.T) * (l3 * (1-l3))
  l2_delta = l3_delta.dot(syn2.T) * (l2 * (1-l2))
  l1_delta = l2_delta.dot(syn1.T) * (l1 * (1-l1))

  syn3 += np.dot(l3.transpose(),l4_delta)
  syn2 += np.dot(l2.transpose(),l3_delta)
  syn1 += np.dot(l1.transpose(),l2_delta)
  syn0 += X.T.dot(l1_delta)

据我所知,您希望使用神经网络对数据集的条目进行分类 因此,训练后,你的网络可能能够将这些条目分组到6个不同的类中,因为你的最后一层有6个神经元

以下是我想说的:

  • 取数据集的一个条目
  • 使用该项计算网络的输出,即使用相同的
    更新进行
    循环,直到行
    l4=1/(1+np.exp(-(l3.dot(syn3)))
    。(训练后,不再更新突触权重
    syn0、syn1、
  • 您将在
    l4
    中获得6个值的输出,您必须对其进行解释
  • 我认为通常的解释是这样的:假设
    l4
    中的第三个值是最大的,那么您的样本属于类别3
  • 现在,大多数与前一个相似的样本也应归类为第3类项目
  • 这样,您的神经网络应该能够识别样本中的模式

我希望这会有所帮助。这是非常笼统的,但你的例子也是如此,因为我们不知道你的数据是什么,它看起来像什么,或者你在其中搜索什么。

对不起,没有明智的答案,但通常只有1/3的数据用于测试,2/3的数据用于学习。好的,我会这样做。。谢谢你花时间回复。数据库是皮肤病学数据集。可预测的皮肤病有6种。所以我的问题是,测试是在培训代码下面执行的吗?重量是否保存并用于测试部分?好的,我想我知道了。。因此,基本上,训练代码中循环完成后的权重保存在一些数组中,这些数组稍后将用于测试代码。新的测试代码包含与训练相同的代码,除了循环持续到
l4=1/(1+np.exp(-(l3.dot(syn3)))
,并且在开始时通过训练期间获得的值初始化权重。是这样吗?好吧,现在我明白你的问题了。很抱歉,之前没有包含此内容:您应该将培训和测试分开。针对要用于测试的部分数据运行training for循环。(如果培训需要一些时间,例如对于较大的数据集,我建议保存
syn
数组,并加载它们进行测试/分类,这样您就不必一直重复相同的培训。)然后,运行第二个循环对剩余数据进行分类。是的,没错,这就是我要做的。好的,第二个循环将只使用一个新的X输入,它来自测试数据集,并且不改变权重。。非常感谢……)