Python 属性错误:类没有对象和类型错误:不支持+;的操作数类型:';内置函数或方法';和';浮动';

Python 属性错误:类没有对象和类型错误:不支持+;的操作数类型:';内置函数或方法';和';浮动';,python,Python,我基本上是试图用一些变量集初始化这个类。对于self.dim_max我试图计算序列数据的排列和二值化,它只是一个5232 x 23 x 23的矩阵 我对逻辑没有问题,但我得到一个错误: 代码如下: Class Model(Object): def __init__(self, n_inpt, n_hiddens, n_output, train_data, hidden_transfers, out_transfer, loss,

我基本上是试图用一些变量集初始化这个类。对于
self.dim_max
我试图计算序列数据的排列和二值化,它只是一个5232 x 23 x 23的矩阵

  • 我对逻辑没有问题,但我得到一个错误:
  • 代码如下:

    Class Model(Object):    
    
         def __init__(self, n_inpt, n_hiddens, n_output, train_data,
                     hidden_transfers, out_transfer, loss,
                     imp_weight=False,
                     optimizer='adam',
                     batch_size=None,
                     max_iter=1000, verbose=False):
    
            self.dim_max = self.transformedData(train_data)
            self.n_inpt = self.dim_max.shape[1]
            self.n_hiddens = n_hiddens
            self.n_output = n_output
            self.hidden_transfers = hidden_transfers
            self.out_transfer = out_transfer
            self.loss_ident = loss
            self.optimizer = optimizer
            self.batch_size = batch_size
            self.imp_weight = imp_weight
    
            self.max_iter = max_iter
            self.verbose = verbose
    
            self.f_predict = None
    
            self._init_exprs()
    
    
        def transformedData(self, traindata):
            E = traindata
            self.step = 1.0
            self.noise = 1.0
            self.triuind = (np.arange(23)[:, np.newaxis] <= np.arange(23)[np.newaxis, :]).flatten()
            self.max = 0
            for _ in range(10):
                self.max = np.maximum(max, self.realize(E).max(axis=0))
            X = self.expand(self.realize(E))
            return X
    
        def realize(self, X):
            def _realize_(x):
                inds = np.argsort(-(x**2).sum(axis=0)**.5 + np.random.normal(0, self.noise, x[0].shape))
                x = x[inds, :][:, inds] * 1
                x = x.flatten()[self.triuind]
                return x
            return np.array([_realize_(z) for z in X])
    
        def expand(self, X):
            Xexp = []
            for i in range(X.shape[1]):
                for k in np.arange(0, self.max[i] + self.step, self.step):
                    Xexp += [np.tanh((X[:, i] - k) / self.step)]
            return np.array(Xexp).T
    
    以下是此操作的代码:

    Class Model(Object):    
    
         def __init__(self, n_inpt, n_hiddens, n_output, train_data,
                     hidden_transfers, out_transfer, loss,
                     imp_weight=False,
                     optimizer='adam',
                     batch_size=None,
                     max_iter=1000, verbose=False):
    
            self.dim_max = self.transformedData(train_data)
            self.n_inpt = self.dim_max.shape[1]
            self.n_hiddens = n_hiddens
            self.n_output = n_output
            self.hidden_transfers = hidden_transfers
            self.out_transfer = out_transfer
            self.loss_ident = loss
            self.optimizer = optimizer
            self.batch_size = batch_size
            self.imp_weight = imp_weight
    
            self.max_iter = max_iter
            self.verbose = verbose
    
            self.f_predict = None
    
            self._init_exprs()
            self.step = 1.0
            self.noise = 1.0
            self.triuind = (np.arange(23)[:, np.newaxis] <= np.arange(23)[np.newaxis, :]).flatten()
            self.max = 0
            for _ in range(10):
                self.max = np.maximum(max, self.realize(E).max(axis=0))   
    
        def transformedData(self, traindata):
            E = traindata
            X = self.expand(self.realize(E))
            return X
    
       def realize(self, X):
           **same as above**
    
       def expand(self, X):
          **same as above**
    
    类模型(对象):
    定义初始化(自身、n_输入、n_隐藏、n_输出、序列数据、,
    隐藏转移、外转移、损失、,
    imp_重量=错误,
    优化器='adam',
    批次大小=无,
    最大值=1000,详细值=False):
    self.dim\u max=self.transformedData(列车数据)
    self.n\u inpt=self.dim\u max.shape[1]
    self.n_hiddens=n_hiddens
    self.n_输出=n_输出
    self.hidden\u传输=hidden\u传输
    self.out\u transfer=out\u transfer
    自我损失识别=损失
    self.optimizer=优化器
    self.batch\u size=批次大小
    self.imp\u weight=imp\u weight
    self.max\u iter=max\u iter
    self.verbose=verbose
    self.f_predict=无
    self._init_exprs()
    self.step=1.0
    自噪声=1.0
    
    self.triuind=(np.arange(23)[:,np.newaxis]错误消息
    TypeError:unsupported operation type for+:“builtin\u function\u或\u method”和“float”
    的意思完全相同。您正在尝试添加浮点数和内置函数(不是函数的结果,而是实际函数)

    这要么意味着您有输入错误(即:调用函数时忘记添加
    ()
    ),要么您假设变量包含一个值,而实际上它是对内置函数的引用

    错误消息
    AttributeError:“Mlp”对象没有属性“noise”
    的字面意思也是这样。您有一个名为
    Mlp
    的对象,您试图访问
    noise
    属性,但它没有
    noise
    属性


    解决这些问题的第一步是验证您自己的假设。最简单的方法是在导致错误的行之前添加一条print语句,以便您可以看到失败代码中使用的值。

    我认为您的第一个错误是由以下行引起的:

    for _ in range(10):
        self.max = np.maximum(max, self.realize(E).max(axis=0))
    
    传递给您的
    max
    调用
    np.max
    可能是内置的
    max
    函数,而不是我认为您打算使用的数字
    self.max
    。在Python 2中,非数值对象始终可以与其他类对象进行比较,尽管结果是任意的(但一致)


    您的第二个错误与您在
    \uuu init\uuu
    中设置属性的顺序有关。您在函数中设置
    self.noise
    的时间很晚。在此之前,您调用
    self.transformdData
    ,它调用
    self.realize
    ,它试图访问尚不存在的
    self.noise
    。如果您重新在分配作业时,您应该避免此错误。

    这些错误是从哪里来的,在哪些行中?错误消息应该告诉您行号。请在您的问题中包含这些信息。我已更新错误消息您的代码无法运行。它似乎取决于名为
    np
    的全局变量。np只不过是imnpI尝试浮动时的端口numpy(self.max[i])+self.step,但它不起作用对不起,您的回答比较笼统,您能说得更具体一些吗。@prime:不,因为您的代码无法按发布的方式运行。当我试图修复某些问题时,我会遇到与您报告的错误不同的错误。请按照我在回答中的建议执行-验证您的假设。那么,您是否建议我为m使用不同的变量名ax?第二个问题的解决方案很有帮助。我认为您需要
    self.max
    而不仅仅是
    max
    。普通
    max
    是导致错误消息的内置函数。
    self.max
    最初是
    0
    ,当您向它添加浮点时,它应该可以正常工作。
    Class Model(Object):    
    
         def __init__(self, n_inpt, n_hiddens, n_output, train_data,
                     hidden_transfers, out_transfer, loss,
                     imp_weight=False,
                     optimizer='adam',
                     batch_size=None,
                     max_iter=1000, verbose=False):
    
            self.dim_max = self.transformedData(train_data)
            self.n_inpt = self.dim_max.shape[1]
            self.n_hiddens = n_hiddens
            self.n_output = n_output
            self.hidden_transfers = hidden_transfers
            self.out_transfer = out_transfer
            self.loss_ident = loss
            self.optimizer = optimizer
            self.batch_size = batch_size
            self.imp_weight = imp_weight
    
            self.max_iter = max_iter
            self.verbose = verbose
    
            self.f_predict = None
    
            self._init_exprs()
            self.step = 1.0
            self.noise = 1.0
            self.triuind = (np.arange(23)[:, np.newaxis] <= np.arange(23)[np.newaxis, :]).flatten()
            self.max = 0
            for _ in range(10):
                self.max = np.maximum(max, self.realize(E).max(axis=0))   
    
        def transformedData(self, traindata):
            E = traindata
            X = self.expand(self.realize(E))
            return X
    
       def realize(self, X):
           **same as above**
    
       def expand(self, X):
          **same as above**
    
    for _ in range(10):
        self.max = np.maximum(max, self.realize(E).max(axis=0))