我想要参考张量中的位置来剪切到特定值。所以当他们在张量y中等于一个时,我正试图得到它们的位置。但我收到此错误消息 AttributeError:'TensorVariable'对象没有属性'nonezeros'
我无法发布所有代码,但它类似于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())
答案 0 :(得分:1)
该方法称为nonzero
,这就是您的第二个示例有效的原因:
loc = T.eq(Y, 1).nonzero()[0]
而第一个没有:
loc = T.eq(y,1).nonezeros()[0]
# ^------- to fix it remove this "e"