为了账号安全,请及时绑定邮箱和手机立即绑定

Python,打印执行了两次

Python,打印执行了两次

婷婷同学_ 2023-03-16 09:40:37
我已经开始使用 Tariq Rashid 的书来接触 Python 和神经网络。按照所有步骤仔细阅读并尝试。有一次,我应该测试一个方法,看它是否正确执行。所以我做了什么,我使用 print 转换了方法(该方法有一个返回值)。现在我的问题是,它工作正常,但虽然输出应该是单个数组,但它们是 2 个具有不同值的数组。当我尝试调试文件时,它也通过打印命令进行了 2 次,其中只有 1 次。我唯一的区别是,我将init用作主要类(来自 java),并且我将神经网络创建为其中的一个对象。还要提一下,如果我在神经网络文件中执行相同的程序,它工作正常。from src2.neuralNetwork import NeuralNetworknetwork = NeuralNetwork(3, 3, 3, 0.3)print(network.query([1.0, 0.5, -1.5]))这是 __init__.py 文件。import numpyimport scipy.specialclass 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 __ 文件打印时的输出这是从神经网络文件打印时的输出
查看完整描述

1 回答

?
狐的传说

TA贡献1804条经验 获得超3个赞

我用了两个文件来测试这个。这是每个的代码。测试初始化文件


import numpy

import scipy.special



class 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_outputs



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

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

并导入class.py


from testinit import NeuralNetwork #only consists of this line

问题似乎是当您在原始文件中定义网络并执行打印命令,然后将该文件导入新文件“importingclass.py”时,即使没有代码,importingclass.py 也会执行打印命令在原始的“testinit.py”文件中定义。


您可以使用我提供的文件代码自行尝试,如果您使用给定的“testinit.py”,您将看到执行“importingclass.py”文件将打印一次而没有代码。


在任一文件中只有一个打印命令实例将只产生一个打印输出,而在两个文件中都有一个打印命令实例(总共两个)将产生两个输出。这是我得出的结论。


这是我对 init 文件的输出(条件是导入类的文件中没有打印命令)

//img1.sycdn.imooc.com//641273cc0001005b17340114.jpg

因此,解决方案是不实例化一个对象并将其打印在您打算导入的 init 文件中,因为该对象将在导入中创建并打印一次,并使用导入从文件中打印一次(我相信 Python 贯穿于导入文件的行一次)。



查看完整回答
反对 回复 2023-03-16
  • 1 回答
  • 0 关注
  • 94 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信