Class: Tensorflow::Graph::Operation

Inherits:
Object
  • Object
show all
Includes:
Operators
Defined in:
lib/tensorflow/graph/operation.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Operators

#%, #*, #**, #+, #-, #-@, #/

Constructor Details

#initialize(graph, pointer) ⇒ Operation

Returns a new instance of Operation.



7
8
9
10
# File 'lib/tensorflow/graph/operation.rb', line 7

def initialize(graph, pointer)
  @graph = graph
  @pointer = pointer
end

Instance Attribute Details

#graphObject (readonly)

Returns the value of attribute graph.



5
6
7
# File 'lib/tensorflow/graph/operation.rb', line 5

def graph
  @graph
end

Instance Method Details

#==(other) ⇒ Object



20
21
22
# File 'lib/tensorflow/graph/operation.rb', line 20

def ==(other)
  self.name == other.name
end

#[](index) ⇒ Object



91
92
93
# File 'lib/tensorflow/graph/operation.rb', line 91

def [](index)
  self.outputs[index]
end

#attr(attr_name) ⇒ Object



138
139
140
141
142
143
144
# File 'lib/tensorflow/graph/operation.rb', line 138

def attr(attr_name)
   = Status.check do |status|
    FFI.TF_OperationGetAttrMetadata(self, attr_name, status)
  end

  OperationAttr.new(self, attr_name, )
end

#attributesObject



132
133
134
135
136
# File 'lib/tensorflow/graph/operation.rb', line 132

def attributes
  self.op_def.attr.map do |attr_def|
    self.attr(attr_def.name)
  end
end

#consumersObject



159
160
161
162
163
164
# File 'lib/tensorflow/graph/operation.rb', line 159

def consumers
  self.outputs.reduce(Array.new) do |result, output|
    result.concat(self.output_consumers(output))
    result
  end
end

#control_inputsObject



123
124
125
126
127
128
129
130
# File 'lib/tensorflow/graph/operation.rb', line 123

def control_inputs
  pointer = ::FFI::MemoryPointer.new(:pointer, self.num_control_inputs)
  FFI.TF_OperationGetControlInputs(self, pointer, self.num_control_inputs)
  self.num_control_inputs.times.map do |index|
    operation_ptr = pointer[index].read_pointer
    self.class.new(self.graph, operation_ptr)
  end
end

#control_outputsObject



72
73
74
75
76
77
78
79
# File 'lib/tensorflow/graph/operation.rb', line 72

def control_outputs
  pointer = ::FFI::MemoryPointer.new(:pointer, self.num_control_outputs)
  FFI.TF_OperationGetControlOutputs(self, pointer, self.num_control_outputs)
  self.num_control_outputs.times.map do |index|
    operation_ptr = pointer[index].read_pointer
    self.class.new(self.graph, operation_ptr)
  end
end

#deviceObject



40
41
42
# File 'lib/tensorflow/graph/operation.rb', line 40

def device
  FFI.TF_OperationDevice(self)
end

#dtypeObject



109
110
111
# File 'lib/tensorflow/graph/operation.rb', line 109

def dtype
  self.output_types.first
end

#eql?(other) ⇒ Boolean

Returns:

  • (Boolean)


16
17
18
# File 'lib/tensorflow/graph/operation.rb', line 16

def eql?(other)
  self.name.eql?(other.name)
end

#hashObject



24
25
26
# File 'lib/tensorflow/graph/operation.rb', line 24

def hash
  self.name.hash
end

#inputsObject



60
61
62
63
64
65
66
# File 'lib/tensorflow/graph/operation.rb', line 60

def inputs
  pointer = ::FFI::MemoryPointer.new(FFI::Output, self.num_inputs)
  FFI.TF_OperationAllInputs(self, pointer, self.num_inputs)
  self.num_inputs.times.map do |index|
    OperationOutput.from_graph(self.graph, pointer[index])
  end
end

#nameObject



28
29
30
# File 'lib/tensorflow/graph/operation.rb', line 28

def name
  FFI.TF_OperationName(self)
end

#node_defObject



44
45
46
47
48
49
50
51
52
53
54
# File 'lib/tensorflow/graph/operation.rb', line 44

def node_def
  buffer_ptr = FFI.TF_NewBuffer
  Status.check do |status|
    FFI.TF_OperationToNodeDef(self, buffer_ptr, status)
  end
  buffer = FFI::Buffer.new(buffer_ptr)
  string = buffer[:data].read_string(buffer[:length])
  NodeDef.decode(string)
ensure
  FFI.TF_DeleteBuffer(buffer)
end

#num_control_inputsObject



119
120
121
# File 'lib/tensorflow/graph/operation.rb', line 119

def num_control_inputs
  FFI.TF_OperationNumControlInputs(self)
end

#num_control_outputsObject



68
69
70
# File 'lib/tensorflow/graph/operation.rb', line 68

def num_control_outputs
  FFI.TF_OperationNumControlOutputs(self)
end

#num_inputsObject



56
57
58
# File 'lib/tensorflow/graph/operation.rb', line 56

def num_inputs
  FFI.TF_OperationNumInputs(self)
end

#num_outputsObject



81
82
83
# File 'lib/tensorflow/graph/operation.rb', line 81

def num_outputs
  FFI.TF_OperationNumOutputs(self)
end

#op_defObject



36
37
38
# File 'lib/tensorflow/graph/operation.rb', line 36

def op_def
  self.graph.op_def(self.op_type)
end

#op_typeObject



32
33
34
# File 'lib/tensorflow/graph/operation.rb', line 32

def op_type
  FFI.TF_OperationOpType(self)
end

#output_consumers(output) ⇒ Object



146
147
148
149
150
151
152
153
154
155
156
157
# File 'lib/tensorflow/graph/operation.rb', line 146

def output_consumers(output)
  # How many consumers does this output have?
  count = FFI.TF_OperationOutputNumConsumers(output)

  # Get the consumers
  consumers_ptr = ::FFI::MemoryPointer.new(FFI::Input, count)
  FFI.TF_OperationOutputConsumers(output, consumers_ptr, count)

  count.times.map do |i|
    OperationOutput.from_graph(self.graph, consumers_ptr[i])
  end
end

#output_list_length(arg_name) ⇒ Object



113
114
115
116
117
# File 'lib/tensorflow/graph/operation.rb', line 113

def output_list_length(arg_name)
  Status.check do |status|
    FFI.TF_OperationOutputListLength(self, arg_name, status)
  end
end

#output_shapesObject



101
102
103
# File 'lib/tensorflow/graph/operation.rb', line 101

def output_shapes
  self.graph.output_shapes(self)
end

#output_typesObject



95
96
97
98
99
# File 'lib/tensorflow/graph/operation.rb', line 95

def output_types
  self.outputs.map do |output|
    FFI.TF_OperationOutputType(output)
  end
end

#outputsObject



85
86
87
88
89
# File 'lib/tensorflow/graph/operation.rb', line 85

def outputs
  self.num_outputs.times.map do |i|
    OperationOutput.from_index(self, i)
  end
end

#shapeObject



105
106
107
# File 'lib/tensorflow/graph/operation.rb', line 105

def shape
  self.output_shapes.first
end

#to_ptrObject



12
13
14
# File 'lib/tensorflow/graph/operation.rb', line 12

def to_ptr
  @pointer
end

#to_sObject



166
167
168
169
170
171
172
173
# File 'lib/tensorflow/graph/operation.rb', line 166

def to_s
  result = [self.op_type]
  result << "name=#{self.name}"
  outputs.length.times do |index|
    result << "#{index}:(shape=#{self.output_shapes[index]}, dtype=#{self.output_types[index]})"
  end
  result.join(', ')
end