【问题标题】:Code for testing of data in a neural network after the training is complete训练完成后在神经网络中测试数据的代码
【发布时间】:2016-10-16 02:33:54
【问题描述】:

我修改了网上找到的代码供我使用。神经网络的训练就完成了。但我不确定如何进行数据集的测试。我的数据集包含 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)

【问题讨论】:

  • 对不起,没有聪明的答案,但通常它是 1/3 的数据用于测试,2/3 用于学习。
  • 好的,我会这样做的。谢谢

标签: python numpy testing neural-network training-data


【解决方案1】:

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

这就是我想要的:

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

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

【讨论】:

  • 感谢您抽出宝贵时间回复。该数据库是皮肤病学数据集。有6种皮肤病需要预测。所以我的查询是在训练代码下面执行的测试吗?重量是否保存并用于测试部分?
  • 好吧,我想我明白了。所以基本上训练代码中循环完成后的权重保存在某个数组中,稍后在测试代码中使用。新的测试代码包含与训练相同的代码,只是循环一直持续到l4 = 1/(1+np.exp(-(l3.dot(syn3)))),并且权重在开始时由训练期间获得的值初始化。是这样吗?
  • 好的,现在我可以更好地了解您的问题。很抱歉之前没有包括这个:你应该分开训练和测试。为要用于测试的部分数据运行训练循环。 (如果训练需要一些时间,例如对于更大的数据集,我建议保存 syn 数组,并加载它们以进行测试/分类,这样您就不必一直重复相同的训练。)然后,运行用于剩余数据分类的第二个循环。
  • 是的,没错,我就是这样做的。
  • 好的,所以第二个循环将只使用一个新的 X 输入,它来自测试数据集,并且没有更改权重.. 非常感谢.. : )
猜你喜欢
  • 1970-01-01
  • 2018-10-30
  • 2015-04-17
  • 2020-05-20
  • 1970-01-01
  • 2014-02-24
  • 2017-08-14
  • 2018-09-19
  • 2020-09-10
相关资源
最近更新 更多