AttributeError: 'TensorVariable' object has no attribute 'nonezeros'
AttributeError: 'TensorVariable' object has no attribute 'nonezeros'
我想根据它们在张量中的位置裁剪到特定值。所以我试图在张量 y 中等于 1 时获取它们的位置。但我收到此错误消息
AttributeError: 'TensorVariable' 对象没有属性 'nonezeros'
我不能post所有代码,但它类似于 theano 网站上的教程 CNN。
def MSE2(self, y):
loc = T.eq(y,1).nonezeros()[0]
# loc = np.where(y == 1)[0]
S = T.clip(self.input1[loc],0,1)
self.input1 = T.set_subtensor(self.input1[loc], S)
return T.mean((y - self.input1) ** 2)
classifier.predictor.MSE2(y)
train_model = theano.function(
inputs=[index],
outputs=cost,
updates=updates,
givens={
x: train_set_x[index * batch_size: (index + 1) * batch_size],
y: train_set_y[index * batch_size: (index + 1) * batch_size]
},
on_unused_input='ignore'
)
我从这个 CNN 代码中测试了非零值,它作为一个测试起作用了
class test:
def __init__(self, X):
self.X = X
def cost_MSE(self, Y):
loc = T.eq(Y, 1).nonzero()[0]
self.X = T.set_subtensor(self.X[loc], T.clip(self.X[loc], 0, 1))
return T.mean((Y - self.X)**2)
X = T.vector()
Y = T.ivector()
cnn = test(X)
MSE = cnn.cost_MSE(Y)
grads = T.grad(MSE, X)
x = np.array([.5, 10], np.float32)
y = np.array([0,1], np.int32)
y_test = theano.shared(y)
f = theano.function(
inputs = [],
outputs = grads,
givens = {
X: x,
Y: y_test
},
on_unused_input = 'ignore')
print(f())
该方法称为 nonzero
,这就是您的第二个示例起作用的原因:
loc = T.eq(Y, 1).nonzero()[0]
第一个没有:
loc = T.eq(y,1).nonezeros()[0]
# ^------- to fix it remove this "e"
我想根据它们在张量中的位置裁剪到特定值。所以我试图在张量 y 中等于 1 时获取它们的位置。但我收到此错误消息 AttributeError: 'TensorVariable' 对象没有属性 'nonezeros'
我不能post所有代码,但它类似于 theano 网站上的教程 CNN。
def MSE2(self, y):
loc = T.eq(y,1).nonezeros()[0]
# loc = np.where(y == 1)[0]
S = T.clip(self.input1[loc],0,1)
self.input1 = T.set_subtensor(self.input1[loc], S)
return T.mean((y - self.input1) ** 2)
classifier.predictor.MSE2(y)
train_model = theano.function(
inputs=[index],
outputs=cost,
updates=updates,
givens={
x: train_set_x[index * batch_size: (index + 1) * batch_size],
y: train_set_y[index * batch_size: (index + 1) * batch_size]
},
on_unused_input='ignore'
)
我从这个 CNN 代码中测试了非零值,它作为一个测试起作用了
class test:
def __init__(self, X):
self.X = X
def cost_MSE(self, Y):
loc = T.eq(Y, 1).nonzero()[0]
self.X = T.set_subtensor(self.X[loc], T.clip(self.X[loc], 0, 1))
return T.mean((Y - self.X)**2)
X = T.vector()
Y = T.ivector()
cnn = test(X)
MSE = cnn.cost_MSE(Y)
grads = T.grad(MSE, X)
x = np.array([.5, 10], np.float32)
y = np.array([0,1], np.int32)
y_test = theano.shared(y)
f = theano.function(
inputs = [],
outputs = grads,
givens = {
X: x,
Y: y_test
},
on_unused_input = 'ignore')
print(f())
该方法称为 nonzero
,这就是您的第二个示例起作用的原因:
loc = T.eq(Y, 1).nonzero()[0]
第一个没有:
loc = T.eq(y,1).nonezeros()[0]
# ^------- to fix it remove this "e"