AttributeError:'TensorVariable'对象没有属性'nonezeros'

时间:2017-04-29 18:41:41

标签: python deep-learning theano

我想要参考张量中的位置来剪切到特定值。所以当他们在张量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())

1 个答案:

答案 0 :(得分:1)

该方法称为nonzero,这就是您的第二个示例有效的原因:

loc = T.eq(Y, 1).nonzero()[0]

而第一个没有:

loc = T.eq(y,1).nonezeros()[0]
#                  ^------- to fix it remove this "e"