Completed
Push — master ( dccd0d...37cade )
by Raphael
01:33
created

NeuralVariable.ts()   A

Complexity

Conditions 2

Size

Total Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 1 Features 0
Metric Value
cc 2
dl 0
loc 6
rs 9.4285
c 1
b 1
f 0
1
#!/usr/bin/env python
2
# -*- coding: utf-8 -*-
3
4
from layer import NeuralLayer
5
from deepy.utils.decorations import neural_computation
6
7
8
class NeuralVariable(NeuralLayer):
9
    """
10
    Create a constant layer with tensors.
11
    """
12
13
    def __init__(self, tensor, test_tensor=None, dim=0):
14
        """
15
        Create a tensor layer.
16
        """
17
        super(NeuralVariable, self).__init__("const")
18
        self.output_dim = dim
19
        self.tensor = tensor
20
        self.test_tensor = tensor if not test_tensor else test_tensor
21
        self.initialize(0)
22
23
    def __getitem__(self, index):
24
        @neural_computation
25
        def getitem_wrapper(t, index):
26
            if type(index) == list:
27
                index = tuple(index)
28
            return t.__getitem__(index)
29
        ret = getitem_wrapper(self, index)
30
        ret.output_dim = self.dim()
31
        return ret
32
33
    def __call__(self, *args, **kwargs):
34
        return NeuralVariable(self.tensor(*args, **kwargs), self.test_tensor(*args, **kwargs), dim=self.dim())
35
36
    def __getattr__(self, name):
37
        return NeuralVariable(getattr(self.tensor, name), getattr(self.test_tensor, name), dim=self.dim())
38
39
40
41
    def apply(self, func, dim=None):
42
        """
43
        Apply a function to tensors.
44
        """
45
        output_dim = dim if dim else self.output_dim
46
        return NeuralVariable(func(self.tensor), func(self.test_tensor), output_dim)
47
48
    def compute_tensor(self, x):
49
        return self.tensor
50
51
    def compute_test_tesnor(self, x):
52
        return self.test_tensor
53
54
    def set_test_value(self, value):
55
        self.tensor.tag.test_value = value
56
57
    def dim(self):
58
        return self.output_dim
59
60
    def shape(self, dim_index):
61
        return NeuralVariable(self.tensor.shape[dim_index], self.test_tensor.shape[dim_index])
62
63
    @property
64
    def test_value(self):
65
        if hasattr(self.tensot.tag, 'test_value'):
66
            return self.tensor.tag.test_value
67
        else:
68
            return None
69
70
    @property
71
    def tv(self):
72
        return self.test_value
73
74
    @property
75
    def ts(self):
76
        if self.test_value:
77
            return self.test_value.shape
78
        else:
79
            return None