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))