Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python无法识别已定义的函数_Python_Conv Neural Network - Fatal编程技术网

Python无法识别已定义的函数

Python无法识别已定义的函数,python,conv-neural-network,Python,Conv Neural Network,我有一个名为network3的对象,其中包含定义激活函数linear和ReLu和层ConvPoolLayer的代码: ### network3.py # Libraries import numpy as np import theano import theano.tensor as T from theano.tensor.nnet import conv from theano.tensor.nnet import softmax from theano.tensor import sha

我有一个名为
network3
的对象,其中包含定义激活函数
linear
ReLu
和层
ConvPoolLayer
的代码:

### network3.py
# Libraries
import numpy as np
import theano
import theano.tensor as T
from theano.tensor.nnet import conv
from theano.tensor.nnet import softmax
from theano.tensor import shared_randomstreams
from theano.tensor.signal import pool

# Activation functions for neurons
def linear(z): return z
def ReLU(z): return T.maximum(0.0, z)
from theano.tensor.nnet import sigmoid
from theano.tensor import tanh
...
class ConvPoolLayer(object):
    def __init__(self, filter_shape, image_shape, poolsize=(2, 2), activation_fn=sigmoid):
    self.activation_fn=activation_fn
...              
但是,在Jupyter笔记本中,当我运行以下代码时:

import network3
from network3 import Network
from network3 import ConvPoolLayer , FullyConnectedLayer , SoftmaxLayer

net = Network([
    ConvPoolLayer(image_shape=(mini_batch_size , 1, 28, 28),
                  filter_shape=(20, 1, 5, 5),
                  poolsize=(2, 2),
                  activation_fn=ReLU),
    ConvPoolLayer(image_shape=(mini_batch_size , 20, 12, 12),
                  filter_shape=(40, 20, 5, 5),
                  poolsize=(2, 2),
                  activation_fn=ReLU),
    FullyConnectedLayer(n_in=40*4*4, n_out=100, activation_fn=ReLU),
    SoftmaxLayer(n_in=100, n_out=10)], 
    mini_batch_size)

net.SGD(expanded_training_data, 60, mini_batch_size, 0.03, 
        validation_data, test_data , lmbda=0.1)
它返回了一个错误:

NameError                          Traceback (most recent call last)<ipython-input-4-55105ca84f86> in <module>
      5                   filter_shape=(20, 1, 5, 5),
      6                   poolsize=(2, 2),
----> 7                   activation_fn=ReLU),
      8     ConvPoolLayer(image_shape=(mini_batch_size , 20, 12, 12),
      9                   filter_shape=(40, 20, 5, 5),

NameError: name 'ReLU' is not defined
namererror回溯(最近一次调用最后一次)
5过滤器_形状=(20,1,5,5),
6池大小=(2,2),
---->7激活(fn=ReLU),
8层(图像形状=(最小批量大小,20,12,12),
9过滤器_形状=(40,20,5,5),
NameError:未定义名称“ReLU”
我将代码更改为
activation\u fn=linear
,得到了类似的错误


您知道定义的激活函数未被识别的原因吗?

正如@khelwood在使用
import network3
导入模块时所评论的那样,您需要提供名称空间来访问
network3
中定义的函数和类:

network3.ReLu
network3.linear
network3.ConvPoolLayer
为了能够简单地使用
ReLu
linear
ConvPoolLayer
,您可以将导入行更改为以下选项之一:

from network3 import *


这不应该是
activation\u fn=network3.ReLU
(或
network3.linear
),因为您不是按代码名导入
ReLU
(或
linear
),而是使用
linear
)与您的错误消息不匹配。行号也不匹配。我在将Jupyternotebook中的值复制到问题中时编辑了打字错误。我认为network3 import*的
意味着导入所有内容,那么为什么需要导入单个函数呢?我说了“以下其中一项”.为了避免误解,我将编辑并分为两个块Shi Hemerson,你知道为什么在原始代码中,Michael Nielsen没有导入激活函数,也没有使用前缀network3.对于激活函数,这是一个疏忽吗?
from network3 import ReLu, linear, ConvPoolLayer