def train(self, training_inputs,training_results, epochs,test_data): #for (x,y) in training_data: training_inputs = list(training_inputs) training_results = list(training_results) self.y_real = training_results # 将训练数据集强转为list n = len(training_inputs) #n=50000 print(n) for j in range(epochs): self.forwardPropagation(training_inputs[j]) self.backwardPropagation(training_results[j]) # 调用梯度下降算法 if j%100 ==0: self.printResult(j) if test_data: # 如果有测试数据集 test_data = list(test_data) # 将测试数据集强转为list n_test = len(test_data) print("Epoch {} : {} / {}".format(j, self.evaluate(test_data), n_test)); # j为迭代期序号 # evaluate(test_data)为测试通过的数据个数 # n_test为测试数据集的大小 else: print("Epoch {} complete".format(j))
时间: 2024-02-14 11:04:48 浏览: 31
这段代码定义了神经网络类的训练方法"train"。它接受四个参数:训练数据集"training_inputs"、训练标签集"training_results"、训练轮数"epochs"和测试数据集"test_data"。
首先,将训练数据集和训练标签集强制转换为列表类型,并将训练标签集赋值给神经网络对象的"y_real"属性。
然后,使用循环进行模型训练,循环次数为"epochs"。在每次循环中,首先调用"forwardPropagation"方法,将当前训练数据集中的第"j"个数据传入神经网络,进行前向传播计算,得到神经网络的预测结果。然后调用"backwardPropagation"方法,进行反向传播计算,更新神经网络中各层的权重和偏置。接下来,根据训练轮数来判断是否需要打印训练结果。如果训练轮数可以被100整除,就调用"printResult"方法打印神经网络的预测结果和实际结果。最后,如果存在测试数据集"test_data",就将测试数据集强制转换为列表类型,并计算测试数据集的大小"n_test"。然后调用"evaluate"方法,计算测试数据集中预测正确的数据个数,并打印出当前训练轮数、测试通过的数据个数和测试数据集的大小。如果没有测试数据集,就只打印当前训练轮数。这样,整个模型训练的过程就完成了。
相关问题
def main(): m_net = net() m_data = data() training_inputs, training_results ,test_data= m_data.loadData('mnist.pkl.gz') model=m_net.train(training_inputs,training_results, 50000,test_data)
这段代码定义了一个名为"main"的函数,它没有任何参数。在函数中,首先创建了一个名为"m_net"的神经网络对象,和一个名为"m_data"的数据对象。然后调用"m_data"对象的"loadData"方法,将MNIST数据集的路径作为参数传入,从而得到训练数据、训练标签和测试数据。接下来,调用"m_net"对象的"train"方法,将训练数据、训练标签和测试数据作为参数传入,进行模型训练。"train"方法的第四个参数"50000"指定了模型的训练轮数,表示模型将会对训练数据进行50000次训练。最后,将训练好的模型存储在"model"对象中,并将其作为函数的返回值。整个"main"函数的作用是训练一个神经网络模型,并将训练好的模型存储在"model"对象中。
def loadData(self,mnist_url): f = gzip.open(str(mnist_url), 'rb') training_data, validation_data, test_data = pickle.load(f, encoding="latin1") f.close() training_inputs = [np.reshape(x, (784, 1)) for x in training_data[0]] #(50000,784,1) training_results = [self.vectorized_result(y) for y in training_data[1]] #(50000,10,1) training_data = zip(training_inputs, training_results) # validation_inputs = [np.reshape(x, (784, 1)) for x in validation_data[0]] # validation_data = zip(validation_inputs, validation_data[1]) # test_inputs = [np.reshape(x, (784, 1)) for x in test_data[0]] test_data = zip(test_inputs, test_data[1]) return (training_inputs,training_results,test_data)
这段代码定义了一个名为"loadData"的函数,它的参数是"mnist_url",表示MNIST数据集的路径。在函数中,首先使用gzip模块打开数据集文件,然后使用pickle模块将数据集文件中的数据读取出来,并将其分为训练数据、验证数据和测试数据。其中,训练数据和验证数据被合并成了一个列表"training_data",测试数据被转换为一个列表"test_data"。接下来,将训练数据中的每个样本按照784维展开成一个784x1的矩阵,并将其存储在"training_inputs"列表中。将训练数据的标签向量化,即将每个标签转换为一个10维的向量,其中对应标签的位置为1,其他位置为0,并将其存储在"training_results"列表中。最后,将"training_inputs"和"training_results"打包成一个元组,并将其作为函数的返回值。注释掉的代码是用来处理验证数据的,因为在这个函数中并没有使用验证数据,所以被注释掉了。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)