Python,打印执行了两次

我已经开始使用 Tariq Rashid 的书来接触 Python 和神经网络。按照所有步骤仔细阅读并尝试。有一次,我应该测试一个方法,看它是否正确执行。所以我做了什么,我使用 print 转换了方法(该方法有一个返回值)。现在我的问题是,它工作正常,但虽然输出应该是单个数组,但它们是 2 个具有不同值的数组。当我尝试调试文件时,它也通过打印命令进行了 2 次,其中只有 1 次。


我唯一的区别是,我将init用作主要类(来自 java),并且我将神经网络创建为其中的一个对象。


还要提一下,如果我在神经网络文件中执行相同的程序,它工作正常。


from src2.neuralNetwork import NeuralNetwork


network = NeuralNetwork(3, 3, 3, 0.3)

print(network.query([1.0, 0.5, -1.5]))

这是 __init__.py 文件。


import numpy

import scipy.special



class NeuralNetwork:


    def __init__(self, inputnodes, hiddennodes, outputnodes, learningrate):

        self.inodes = inputnodes

        self.hnodes = hiddennodes

        self.onodes = outputnodes


        self.lr = learningrate


        self.wih = (numpy.random.rand(self.hnodes, self.inodes) - 0.5)

        self.who = (numpy.random.rand(self.onodes, self.hnodes) - 0.5)


        self.activation_function = lambda x: scipy.special.expit(x)

        pass


    def train(self):

        pass


    def query(self, inputs_list):

        inputs = numpy.array(inputs_list, ndmin=2).T


        hidden_inputs = numpy.dot(self.wih, inputs)

        hidden_outputs = self.activation_function(hidden_inputs)


        final_inputs = numpy.dot(self.who, hidden_outputs)

        final_outputs = self.activation_function(final_inputs)

        return final_outputs

那是神经网络的文件。

感谢您的每一个回答。

编辑:根据要求,输出。它们不是随机值的一致原因。

这是从 __ init __ 文件打印时的输出

这是从神经网络文件打印时的输出


婷婷同学_
浏览 58回答 1
1回答

狐的传说

我用了两个文件来测试这个。这是每个的代码。测试初始化文件import numpyimport scipy.specialclass NeuralNetwork:    def __init__(self, inputnodes, hiddennodes, outputnodes, learningrate):        self.reset(inputnodes, hiddennodes, outputnodes, learningrate)        self.inodes = inputnodes        self.hnodes = hiddennodes        self.onodes = outputnodes        self.lr = learningrate        self.wih = (numpy.random.rand(self.hnodes, self.inodes) - 0.5)        self.who = (numpy.random.rand(self.onodes, self.hnodes) - 0.5)        self.activation_function = lambda x: scipy.special.expit(x)                    pass    def reset(self, inputnodes, hiddennodes, outputnodes, learningrate):        self.inodes = inputnodes        self.hnodes = hiddennodes        self.onodes = outputnodes        self.lr = learningrate        self.wih = (numpy.random.rand(self.hnodes, self.inodes) - 0.5)        self.who = (numpy.random.rand(self.onodes, self.hnodes) - 0.5)    def train(self):        pass    def query(self, inputs_list):        inputs = numpy.array(inputs_list, ndmin=2).T        hidden_inputs = numpy.dot(self.wih, inputs)        hidden_outputs = self.activation_function(hidden_inputs)        final_inputs = numpy.dot(self.who, hidden_outputs)        final_outputs = self.activation_function(final_inputs)        return final_outputsnetwork = NeuralNetwork(3, 3, 3, 0.3)print(network.query([1.0, 0.5, -1.6]))并导入class.pyfrom testinit import NeuralNetwork #only consists of this line问题似乎是当您在原始文件中定义网络并执行打印命令,然后将该文件导入新文件“importingclass.py”时,即使没有代码,importingclass.py 也会执行打印命令在原始的“testinit.py”文件中定义。您可以使用我提供的文件代码自行尝试,如果您使用给定的“testinit.py”,您将看到执行“importingclass.py”文件将打印一次而没有代码。在任一文件中只有一个打印命令实例将只产生一个打印输出,而在两个文件中都有一个打印命令实例(总共两个)将产生两个输出。这是我得出的结论。这是我对 init 文件的输出(条件是导入类的文件中没有打印命令)因此,解决方案是不实例化一个对象并将其打印在您打算导入的 init 文件中,因为该对象将在导入中创建并打印一次,并使用导入从文件中打印一次(我相信 Python 贯穿于导入文件的行一次)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python