训练完成后在神经网络中测试数据的代码
Code for testing of data in a neural network after the training is complete
我修改了网上找到的代码供我使用。神经网络训练完成。但我不确定如何进行数据集测试。我的数据集包含 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 个 神经元 。
这是我想要的:
- 取数据集的条目之一
- 使用条目计算网络的输出,即,使用
for
循环的相同更新,直到第 l4 = 1/(1+np.exp(-(l3.dot(syn3))))
行。 (训练后,您不再更新突触权重 syn0,syn1, ...
)。
- 您将在
l4
中得到 6 个值的输出,您必须对其进行解释。
- 我认为通常的解释是这样的:假设
l4
中的 第三个值 最大 ,那么你的示例属于 类别 3。
- 现在,大多数与前一个样本相似的样本也应归类为第 3 类项目。
- 这样,您的神经网络应该能够识别样本中的模式
希望对您有所帮助。这是非常笼统的,但你的例子也是如此,因为我们不知道你的数据是什么,它看起来像什么,或者你在其中搜索什么。
我修改了网上找到的代码供我使用。神经网络训练完成。但我不确定如何进行数据集测试。我的数据集包含 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 个 神经元 。
这是我想要的:
- 取数据集的条目之一
- 使用条目计算网络的输出,即,使用
for
循环的相同更新,直到第l4 = 1/(1+np.exp(-(l3.dot(syn3))))
行。 (训练后,您不再更新突触权重syn0,syn1, ...
)。 - 您将在
l4
中得到 6 个值的输出,您必须对其进行解释。 - 我认为通常的解释是这样的:假设
l4
中的 第三个值 最大 ,那么你的示例属于 类别 3。 - 现在,大多数与前一个样本相似的样本也应归类为第 3 类项目。
- 这样,您的神经网络应该能够识别样本中的模式
希望对您有所帮助。这是非常笼统的,但你的例子也是如此,因为我们不知道你的数据是什么,它看起来像什么,或者你在其中搜索什么。