tensor_stream 0.1.5 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +13 -0
  3. data/README.md +34 -0
  4. data/lib/tensor_stream.rb +7 -3
  5. data/lib/tensor_stream/control_flow.rb +1 -2
  6. data/lib/tensor_stream/evaluator/operation_helpers/array_ops_helper.rb +44 -3
  7. data/lib/tensor_stream/evaluator/operation_helpers/math_helper.rb +9 -0
  8. data/lib/tensor_stream/evaluator/ruby_evaluator.rb +70 -36
  9. data/lib/tensor_stream/graph.rb +15 -7
  10. data/lib/tensor_stream/graph_serializers/graphml.rb +183 -35
  11. data/lib/tensor_stream/graph_serializers/pbtext.rb +81 -14
  12. data/lib/tensor_stream/graph_serializers/serializer.rb +13 -0
  13. data/lib/tensor_stream/helpers/string_helper.rb +12 -0
  14. data/lib/tensor_stream/math_gradients.rb +203 -161
  15. data/lib/tensor_stream/operation.rb +30 -16
  16. data/lib/tensor_stream/ops.rb +29 -19
  17. data/lib/tensor_stream/placeholder.rb +2 -3
  18. data/lib/tensor_stream/session.rb +7 -13
  19. data/lib/tensor_stream/tensor.rb +22 -5
  20. data/lib/tensor_stream/tensor_shape.rb +2 -0
  21. data/lib/tensor_stream/trainer.rb +6 -1
  22. data/lib/tensor_stream/variable.rb +4 -3
  23. data/lib/tensor_stream/version.rb +1 -1
  24. data/samples/gradient_sample.graphml +1255 -0
  25. data/samples/linear_regression.rb +1 -1
  26. data/samples/logistic_regression.rb +9 -2
  27. data/tensor_stream.gemspec +1 -1
  28. data/test_samples/error.graphml +120 -0
  29. data/test_samples/gradient_sample.graphml +1255 -0
  30. data/{samples → test_samples}/iris.rb +0 -0
  31. data/{samples → test_samples}/raw_neural_net_sample.rb +0 -0
  32. data/{samples → test_samples}/test.py +2 -0
  33. data/test_samples/test2.py +41 -0
  34. metadata +41 -47
@@ -5,14 +5,13 @@ module TensorStream
5
5
  attr_reader :outputs
6
6
 
7
7
  def initialize(operation, input_a, input_b, options = {})
8
- @graph = options[:graph] || TensorStream.get_default_graph
8
+ setup_initial_state(options)
9
9
 
10
10
  @operation = operation
11
11
  @rank = options[:rank] || 0
12
- @name = [@graph.get_name_scope, options[:name] || set_name].compact.join('/')
12
+ @name = [@graph.get_name_scope, options[:name] || set_name].compact.reject(&:empty?).join('/')
13
13
  @internal = options[:internal]
14
14
  @given_name = @name
15
- @source = format_source(caller_locations)
16
15
 
17
16
  @options = options
18
17
 
@@ -106,12 +105,12 @@ module TensorStream
106
105
  else
107
106
  "(#{sub_item} * #{sub_item2})"
108
107
  end
109
- when :reduce_sum
110
- "reduce_sum(|#{sub_item}|)"
111
- when :reduce_mean
112
- "reduce_mean(|#{sub_item}|)"
113
- when :reduce_prod
114
- "reduce_prod(|#{sub_item}|)"
108
+ when :sum
109
+ "sum(|#{sub_item}|, axis=#{sub_item2})"
110
+ when :mean
111
+ "mean(|#{sub_item}|, axis=#{sub_item2})"
112
+ when :prod
113
+ "prod(|#{sub_item}|, axis=#{sub_item2})"
115
114
  when :gradients
116
115
  "gradient(#{sub_item})"
117
116
  when :stop_gradient
@@ -131,7 +130,7 @@ module TensorStream
131
130
  when :ones_like
132
131
  "ones_like(#{sub_item})"
133
132
  when :flow_group
134
- "flow_group(#{items.collect { |i| auto_math(i) }.join(',')})"
133
+ "flow_group(#{items.collect { |i| auto_math(i, name_only, max_depth - 1, _cur_depth) }.join(',')})"
135
134
  when :zeros
136
135
  "zeros(#{sub_item})"
137
136
  when :reshape
@@ -166,6 +165,8 @@ module TensorStream
166
165
  "#{sub_item} && #{sub_item2}"
167
166
  when :sqrt
168
167
  "sqrt(#{sub_item})"
168
+ when :log1p
169
+ "log1p(#{sub_item})"
169
170
  when :zeros_like
170
171
  "zeros_like(#{sub_item})"
171
172
  when :where
@@ -174,8 +175,13 @@ module TensorStream
174
175
  "max(#{sub_item},#{sub_item2})"
175
176
  when :cast
176
177
  "cast(#{sub_item}, #{data_type})"
178
+ when :broadcast_transform
179
+ "broadcast_transform(#{sub_item},#{sub_item2})"
180
+ when :broadcast_gradient_args
181
+ "broadcast_transform(#{sub_item},#{sub_item2})"
177
182
  else
178
- raise "no math form for #{operation} defined"
183
+ "#{operation}(#{sub_item})" if sub_item
184
+ "#{operation}(#{sub_item}, #{sub_item2})" if sub_item && sub_item2
179
185
  end
180
186
  ["\n",(_cur_depth + 1).times.collect { ' ' }, out].flatten.join
181
187
  end
@@ -196,11 +202,14 @@ module TensorStream
196
202
  item_shape = items[0].shape.shape
197
203
  return nil if item_shape.nil?
198
204
  return item_shape[1, item_shape.size]
199
- when :reduce_mean, :reduce_prod, :reduce_sum
200
- return [] if options[:axis].nil?
205
+ when :mean, :prod, :sum
206
+ return [] if items[1].nil?
207
+ return nil if items[0].nil?
201
208
  item_shape = items[0].shape.shape
202
209
  return nil if item_shape.nil?
203
- axis = options[:axis]
210
+ return nil if items[1].is_a?(Tensor) && items[1].value.nil?
211
+
212
+ axis = items[1].is_a?(Tensor) ? items[1].value : items[1]
204
213
 
205
214
  axis = [ axis ] unless axis.is_a?(Array)
206
215
  return item_shape.each_with_index.map do |s, index|
@@ -236,10 +245,15 @@ module TensorStream
236
245
  end
237
246
 
238
247
  def propagate_consumer(consumer)
239
- super(consumer)
248
+ super
249
+ @items.compact.each do |item|
250
+ item.send(:propagate_consumer, consumer) if item.name != name
251
+ end
252
+ end
240
253
 
254
+ def propagate_outputs
241
255
  @items.compact.each do |item|
242
- item.send(:propagate_consumer, consumer) if item.name!=self.name
256
+ item.send(:setup_output, self) if item.name != self.name
243
257
  end
244
258
  end
245
259
 
@@ -1,36 +1,34 @@
1
1
  module TensorStream
2
2
  # Class that defines all available ops supported by TensorStream
3
3
  module Ops
4
- FLOATING_POINT_TYPES = %w[float32 float64].map(&:to_sym)
5
- NUMERIC_TYPES = %w[int32 int64 float32 float64].map(&:to_sym)
4
+ FLOATING_POINT_TYPES = %i[float32 float64 float].freeze
5
+ INTEGER_TYPES = %i[int32 int int64].freeze
6
+ NUMERIC_TYPES = FLOATING_POINT_TYPES + INTEGER_TYPES
6
7
 
7
8
  def argmax(input, axis = nil, name: nil, dimension: nil, output_type: :int32)
8
9
  _op(:argmax, input, nil, axis: axis, name: name, dimension: dimension, data_type: output_type)
9
10
  end
10
11
 
11
12
  def gradients(input, wrt_xs, grad_ys: nil,
12
- name: 'gradients',
13
- colocate_gradients_with_ops: false,
14
- gate_gradients: false,
15
- aggregation_method: nil,
16
- stop_gradients: nil)
13
+ name: 'gradients',
14
+ colocate_gradients_with_ops: false,
15
+ gate_gradients: false,
16
+ aggregation_method: nil,
17
+ stop_gradients: nil)
17
18
 
18
19
  gs = wrt_xs.collect do |x|
19
- raise "#{x} passed is not a tensor object" unless x.is_a?(Tensor)
20
-
21
20
  stops = stop_gradients ? stop_gradients.map(&:name).join('_') : ''
22
21
  gradient_program_name = "grad_#{input.name}_#{x.name}_#{stops}".to_sym
23
22
 
24
23
  tensor_program = if input.graph.node_added?(gradient_program_name)
25
- input.graph.get_node(gradient_program_name)
26
- else
24
+ input.graph.get_node(gradient_program_name)
25
+ else
27
26
  input.graph.name_scope("gradient_wrt_#{x.name}") do
28
27
  derivative_ops = TensorStream::MathGradients.derivative(input, x, graph: input.graph,
29
- stop_gradients: stop_gradients)
30
- unit_matrix = _op(:ones_like, x)
31
- input.graph.add_node!(gradient_program_name, unit_matrix * derivative_ops)
32
- end
33
- end
28
+ stop_gradients: stop_gradients)
29
+ input.graph.add_node!(gradient_program_name, derivative_ops)
30
+ end
31
+ end
34
32
  tensor_program
35
33
  end
36
34
  TensorStream.group(gs)
@@ -58,6 +56,10 @@ module TensorStream
58
56
  _op(:shape, input, nil, name: name, out_type: out_type)
59
57
  end
60
58
 
59
+ def tile(input, multiples, name: nil)
60
+ _op(:tile, input, multiples, name: name)
61
+ end
62
+
61
63
  def rank(input, name: nil)
62
64
  _op(:rank, input, name: name)
63
65
  end
@@ -107,15 +109,15 @@ module TensorStream
107
109
  end
108
110
 
109
111
  def reduce_mean(input_tensor, axis = nil, keepdims: false, name: nil)
110
- _op(:reduce_mean, input_tensor, nil, axis: axis, keepdims: keepdims, name: name)
112
+ _op(:mean, input_tensor, axis, keepdims: keepdims, name: name)
111
113
  end
112
114
 
113
115
  def reduce_sum(input_tensor, axis = nil, keepdims: false, name: nil)
114
- _op(:reduce_sum, input_tensor, nil, axis: axis, keepdims: keepdims, name: name)
116
+ _op(:sum, input_tensor, axis, keepdims: keepdims, name: name)
115
117
  end
116
118
 
117
119
  def reduce_prod(input, axis = nil, keepdims: false, name: nil)
118
- _op(:reduce_prod, input, nil, axis: axis, keepdims: keepdims, name: name)
120
+ _op(:prod, input, axis, keepdims: keepdims, name: name)
119
121
  end
120
122
 
121
123
  def concat(values, axis, name: 'concat')
@@ -202,6 +204,14 @@ module TensorStream
202
204
  _op(:mul, input_a, input_b, name: name)
203
205
  end
204
206
 
207
+ def mul(input_a, input_b, name: nil)
208
+ _op(:mul, input_a, input_b, name: name)
209
+ end
210
+
211
+ def div(input_a, input_b, name: nil)
212
+ _op(:div, input_a, input_b, name: name)
213
+ end
214
+
205
215
  def pow(input_a, input_e, name: nil)
206
216
  _op(:pow, input_a, input_e, name: name)
207
217
  end
@@ -2,16 +2,15 @@ module TensorStream
2
2
  # Class that defines a TensorStream placeholder
3
3
  class Placeholder < Tensor
4
4
  def initialize(data_type, rank, shape, options = {})
5
- @graph = options[:graph] || TensorStream.get_default_graph
5
+ setup_initial_state(options)
6
6
 
7
7
  @data_type = data_type
8
8
  @rank = rank
9
9
  @shape = TensorShape.new(shape, rank)
10
10
  @value = nil
11
11
  @is_const = false
12
- @source = format_source(caller_locations)
13
12
 
14
- @name = [@graph.get_name_scope, options[:name] || build_name].compact.join('/')
13
+ @name = [@graph.get_name_scope, options[:name] || build_name].compact.reject(&:empty?).join('/')
15
14
  @graph.add_node(self)
16
15
  end
17
16
 
@@ -1,13 +1,16 @@
1
1
  module TensorStream
2
2
  # TensorStream class that defines a session
3
3
  class Session
4
+ include StringHelper
5
+
4
6
  attr_reader :last_session_context, :closed, :target
5
7
  attr_accessor :randomizer
6
-
8
+
7
9
  def initialize(evaluator = :ruby_evaluator, thread_pool_class: Concurrent::ImmediateExecutor)
8
10
  @evaluator_class = Object.const_get("TensorStream::Evaluator::#{camelize(evaluator.to_s)}")
9
11
  @thread_pool = thread_pool_class.new
10
12
  @closed = false
13
+ @session_cache = {}
11
14
  @randomizer = {}
12
15
  end
13
16
 
@@ -21,7 +24,9 @@ module TensorStream
21
24
  else
22
25
  {}
23
26
  end
24
- context = {}
27
+ context = {
28
+ _cache: @session_cache
29
+ }
25
30
 
26
31
  # scan for placeholders and assign value
27
32
  if options[:feed_dict]
@@ -71,16 +76,5 @@ module TensorStream
71
76
  def graph_ml(tensor, filename)
72
77
  TensorStream::Graphml.new(self).serialize(tensor, filename)
73
78
  end
74
-
75
- private
76
-
77
- def camelize(string, uppercase_first_letter = true)
78
- string = if uppercase_first_letter
79
- string.sub(/^[a-z\d]*/) { $&.capitalize }
80
- else
81
- string.sub(/^(?:(?=\b|[A-Z_])|\w)/) { $&.downcase }
82
- end
83
- string.gsub(/(?:_|(\/))([a-z\d]*)/) { "#{$1}#{$2.capitalize}" }.gsub('/', '::')
84
- end
85
79
  end
86
80
  end
@@ -7,18 +7,18 @@ module TensorStream
7
7
 
8
8
  attr_accessor :name, :data_type, :shape, :rank, :native_buffer, :is_const,
9
9
  :value, :breakpoint, :internal, :source, :given_name, :graph,
10
- :consumers
10
+ :consumers, :outputs
11
11
 
12
12
  def initialize(data_type, rank, shape, options = {})
13
+ setup_initial_state(options)
13
14
  @data_type = data_type
14
15
  @rank = rank
15
16
  @breakpoint = false
16
17
  @shape = TensorShape.new(shape, rank)
17
18
  @value = nil
18
- @source = format_source(caller_locations)
19
+
19
20
  @is_const = options[:const] || false
20
21
  @internal = options[:internal]
21
- @graph = options[:graph] || TensorStream.get_default_graph
22
22
  @name = [@graph.get_name_scope, options[:name] || build_name].compact.reject(&:empty?).join('/')
23
23
  @given_name = @name
24
24
 
@@ -113,7 +113,6 @@ module TensorStream
113
113
  def matmul(other)
114
114
  _op(:matmul, self, other)
115
115
  end
116
-
117
116
 
118
117
  def dot(other)
119
118
  _op(:matmul, self, other)
@@ -199,6 +198,10 @@ module TensorStream
199
198
  end
200
199
  end
201
200
 
201
+ if dtype.is_a?(Hash)
202
+ dtype = dtype[:dtype]
203
+ end
204
+
202
205
  case dtype.to_sym
203
206
  when :float32, :float
204
207
  if !!val == val
@@ -233,15 +236,29 @@ module TensorStream
233
236
 
234
237
  protected
235
238
 
239
+ def setup_initial_state(options)
240
+ @outputs = []
241
+ @graph = options[:graph] || TensorStream.get_default_graph
242
+ @source = format_source(caller_locations)
243
+ end
244
+
236
245
  def add_consumer(consumer)
237
246
  @consumers ||= []
238
- @consumers << consumer.name if !@consumers.include?(consumer.name) && consumer.name!=self.name
247
+ @consumers << consumer.name if !@consumers.include?(consumer.name) && consumer.name != name
248
+ end
249
+
250
+ def setup_output(consumer)
251
+ @outputs << consumer.name unless @outputs.include?(consumer.name)
239
252
  end
240
253
 
241
254
  def propagate_consumer(consumer)
242
255
  add_consumer(consumer)
243
256
  end
244
257
 
258
+ def propagate_outputs
259
+ # nop
260
+ end
261
+
245
262
  def hashify_tensor(tensor)
246
263
  if tensor.is_a?(Tensor)
247
264
  tensor.to_h
@@ -60,6 +60,8 @@ module TensorStream
60
60
  end
61
61
 
62
62
  dim = (arr.size / s)
63
+ return arr if dim.zero?
64
+
63
65
  arr.each_slice(dim).collect do |slice|
64
66
  reshape(slice, new_shape.dup)
65
67
  end
@@ -2,6 +2,11 @@ require 'tensor_stream/train/gradient_descent_optimizer'
2
2
  require 'tensor_stream/train/saver'
3
3
 
4
4
  module TensorStream
5
- module Train
5
+ module Trainer
6
+ def self.write_graph(graph, path, filename, as_text: true, serializer: TensorStream::Pbtext)
7
+ raise "only supports as_text=true for now" unless as_text
8
+ new_filename = File.join(path, filename)
9
+ File.write(new_filename, serializer.new.get_string(graph))
10
+ end
6
11
  end
7
12
  end
@@ -1,14 +1,15 @@
1
1
  module TensorStream
2
2
  # Class that defines a TensorStream variable
3
3
  class Variable < Tensor
4
- attr_accessor :trainable
4
+ attr_accessor :trainable, :options
5
5
  def initialize(data_type, rank, shape, options = {})
6
- @graph = options[:graph] || TensorStream.get_default_graph
6
+ setup_initial_state(options)
7
7
 
8
+ @options = {
9
+ }
8
10
  @data_type = data_type
9
11
  @rank = rank
10
12
  @value = nil
11
- @source = format_source(caller_locations)
12
13
  @name = [TensorStream.get_variable_scope, options[:name] || build_name].compact.reject(&:empty?).join('/')
13
14
  @initalizer_tensor = options[:initializer] ? options[:initializer] : _variable_scope.initializer || TensorStream.glorot_uniform_initializer
14
15
  if shape.nil? && @initalizer_tensor && @initalizer_tensor.shape
@@ -1,5 +1,5 @@
1
1
  module TensorStream
2
- VERSION = '0.1.5'.freeze
2
+ VERSION = '0.2.0'.freeze
3
3
 
4
4
  def self.version
5
5
  VERSION
@@ -0,0 +1,1255 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml"
3
+ xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">
4
+ <key id="d0" for="node" attr.name="label" attr.type="string"/>
5
+ <key id="d1" for="node" attr.name="formula" attr.type="string"/>
6
+ <key id="d2" for="node" attr.name="color" attr.type="string"/>
7
+ <key id="d3" for="node" attr.name="value" attr.type="string"/>
8
+ <key attr.name="description" attr.type="string" for="edge" id="d12"/>
9
+ <key for="edge" id="d13" yfiles.type="edgegraphics"/>
10
+ <key for="node" id="d9" yfiles.type="nodegraphics"/>
11
+ <graph id="g_-flow_group_615:" edgedefault="directed">
12
+ <node id="out">
13
+ <data key="d0">out</data>
14
+ <data key="d2">red</data>
15
+ <data key="d9">
16
+ <y:ShapeNode>
17
+ <y:Fill color="#FF0000" transparent="false"/>
18
+ <y:NodeLabel alignment="center">out</y:NodeLabel>
19
+ </y:ShapeNode>
20
+ </data>
21
+ </node>
22
+ <data key="d3">[[-0.18181076984697453, -0.2235356954437098]]</data>
23
+ <data key="d3">[-0.18181076984697453, -0.2235356954437098]</data>
24
+ <data key="d3">[-0.18181076984697453, -0.2235356954437098]</data>
25
+ <data key="d3">[-0.18181076984697453, -0.2235356954437098]</data>
26
+ <data key="d3">[[-0.18181076984697453, -0.2235356954437098]]</data>
27
+ <data key="d3">[[[5.25, 21.425]], [[-0.18181076984697453, -0.2235356954437098]]]</data>
28
+ <data key="d3">[[5.25, 21.425]]</data>
29
+ <data key="d3">[[1.25, 16.425]]</data>
30
+ <edge source="Const_113:2" target="matmul_462:0">
31
+ <data key="d13">
32
+ <y:PolyLineEdge>
33
+ <y:EdgeLabel >
34
+ <![CDATA[ [[1.0, 0.5, 4.0]] ]]>
35
+ </y:EdgeLabel >
36
+ <y:Arrows source="none" target="standard"/>
37
+ <y:LineStyle color="#FF0000" type="line" width="1.0"/>
38
+ </y:PolyLineEdge>
39
+ </data>
40
+ </edge>
41
+ <edge source="Const_114:2" target="matmul_462:0">
42
+ <data key="d13">
43
+ <y:PolyLineEdge>
44
+ <y:EdgeLabel >
45
+ <![CDATA[ [[0.4, 0.2], [0.1, 0.45], [0.2, 4.0]] ]]>
46
+ </y:EdgeLabel >
47
+ <y:Arrows source="none" target="standard"/>
48
+ <y:LineStyle color="#0000FF" type="line" width="1.0"/>
49
+ </y:PolyLineEdge>
50
+ </data>
51
+ </edge>
52
+ <edge source="matmul_462:0" target="add_463:0">
53
+ <data key="d13">
54
+ <y:PolyLineEdge>
55
+ <y:EdgeLabel >
56
+ <![CDATA[ [[1.25, 16.425]] ]]>
57
+ </y:EdgeLabel >
58
+ <y:Arrows source="none" target="standard"/>
59
+ <y:LineStyle color="#FF0000" type="line" width="1.0"/>
60
+ </y:PolyLineEdge>
61
+ </data>
62
+ </edge>
63
+ <edge source="Const_116:1" target="add_463:0">
64
+ <data key="d13">
65
+ <y:PolyLineEdge>
66
+ <y:EdgeLabel >
67
+ <![CDATA[ [4.0, 5.0] ]]>
68
+ </y:EdgeLabel >
69
+ <y:Arrows source="none" target="standard"/>
70
+ <y:LineStyle color="#0000FF" type="line" width="1.0"/>
71
+ </y:PolyLineEdge>
72
+ </data>
73
+ </edge>
74
+ <data key="d3">[[-0.18181076984697453, -0.2235356954437098]]</data>
75
+ <data key="d3">[[-0.3550398867513898, 0.2648611682365375]]</data>
76
+ <data key="d3">[[-0.7100797735027796, 0.44143528039422913]]</data>
77
+ <data key="d3">[[-0.7100797735027796, 0.44143528039422913]]</data>
78
+ <data key="d3">[[[3.9227774823857198, 5.169586592555774]], [[-0.7100797735027796, 0.44143528039422913]]]</data>
79
+ <data key="d3">[[3.9227774823857198, 5.169586592555774]]</data>
80
+ <data key="d3">[[-0.1772225176142799, 0.0695865925557746]]</data>
81
+ <data key="d3">[[-0.858934493426592, 0.5363855360913178]]</data>
82
+ <edge source="add_463:0" target="sin_464:0">
83
+ <data key="d13">
84
+ <y:PolyLineEdge>
85
+ <y:EdgeLabel >
86
+ <![CDATA[ [[5.25, 21.425]] ]]>
87
+ </y:EdgeLabel >
88
+ <y:Arrows source="none" target="standard"/>
89
+ <y:LineStyle color="#FF0000" type="line" width="1.0"/>
90
+ </y:PolyLineEdge>
91
+ </data>
92
+ </edge>
93
+ <edge source="sin_464:0" target="matmul_465:0">
94
+ <data key="d13">
95
+ <y:PolyLineEdge>
96
+ <y:EdgeLabel >
97
+ <![CDATA[ [[-0.858934493426592, 0.5363855360913178]] ]]>
98
+ </y:EdgeLabel >
99
+ <y:Arrows source="none" target="standard"/>
100
+ <y:LineStyle color="#FF0000" type="line" width="1.0"/>
101
+ </y:PolyLineEdge>
102
+ </data>
103
+ </edge>
104
+ <edge source="Const_115:2" target="matmul_465:0">
105
+ <data key="d13">
106
+ <y:PolyLineEdge>
107
+ <y:EdgeLabel >
108
+ <![CDATA[ [[0.3, 0.2], [0.15, 0.45]] ]]>
109
+ </y:EdgeLabel >
110
+ <y:Arrows source="none" target="standard"/>
111
+ <y:LineStyle color="#0000FF" type="line" width="1.0"/>
112
+ </y:PolyLineEdge>
113
+ </data>
114
+ </edge>
115
+ <edge source="matmul_465:0" target="add_466:0">
116
+ <data key="d13">
117
+ <y:PolyLineEdge>
118
+ <y:EdgeLabel >
119
+ <![CDATA[ [[-0.1772225176142799, 0.0695865925557746]] ]]>
120
+ </y:EdgeLabel >
121
+ <y:Arrows source="none" target="standard"/>
122
+ <y:LineStyle color="#FF0000" type="line" width="1.0"/>
123
+ </y:PolyLineEdge>
124
+ </data>
125
+ </edge>
126
+ <edge source="Const_117:1" target="add_466:0">
127
+ <data key="d13">
128
+ <y:PolyLineEdge>
129
+ <y:EdgeLabel >
130
+ <![CDATA[ [4.1, 5.1] ]]>
131
+ </y:EdgeLabel >
132
+ <y:Arrows source="none" target="standard"/>
133
+ <y:LineStyle color="#0000FF" type="line" width="1.0"/>
134
+ </y:PolyLineEdge>
135
+ </data>
136
+ </edge>
137
+ <data key="d3">[[-0.7100797735027796, 0.44143528039422913]]</data>
138
+ <data key="d3">[1.0, 1.0]</data>
139
+ <edge source="Const_116:1" target="gradient_wrt_Const_116:1-ones_like_577:0">
140
+ <data key="d13">
141
+ <y:PolyLineEdge>
142
+ <y:EdgeLabel >
143
+ <![CDATA[ [4.0, 5.0] ]]>
144
+ </y:EdgeLabel >
145
+ <y:Arrows source="none" target="standard"/>
146
+ <y:LineStyle color="#FF0000" type="line" width="1.0"/>
147
+ </y:PolyLineEdge>
148
+ </data>
149
+ </edge>
150
+ <data key="d3">[[-0.7100797735027796, 0.44143528039422913]]</data>
151
+ <edge source="add_466:0" target="gradient_wrt_Const_116:1-sin_467:0_grad-cos_578:0">
152
+ <data key="d13">
153
+ <y:PolyLineEdge>
154
+ <y:EdgeLabel >
155
+ <![CDATA[ [[3.9227774823857198, 5.169586592555774]] ]]>
156
+ </y:EdgeLabel >
157
+ <y:Arrows source="none" target="standard"/>
158
+ <y:LineStyle color="#FF0000" type="line" width="1.0"/>
159
+ </y:PolyLineEdge>
160
+ </data>
161
+ </edge>
162
+ <edge source="gradient_wrt_Const_116:1-ones_like_577:0" target="gradient_wrt_Const_116:1-sin_467:0_grad-mul_579:0">
163
+ <data key="d13">
164
+ <y:PolyLineEdge>
165
+ <y:EdgeLabel >
166
+ <![CDATA[ [1.0, 1.0] ]]>
167
+ </y:EdgeLabel >
168
+ <y:Arrows source="none" target="standard"/>
169
+ <y:LineStyle color="#FF0000" type="line" width="1.0"/>
170
+ </y:PolyLineEdge>
171
+ </data>
172
+ </edge>
173
+ <edge source="gradient_wrt_Const_116:1-sin_467:0_grad-cos_578:0" target="gradient_wrt_Const_116:1-sin_467:0_grad-mul_579:0">
174
+ <data key="d13">
175
+ <y:PolyLineEdge>
176
+ <y:EdgeLabel >
177
+ <![CDATA[ [[-0.7100797735027796, 0.44143528039422913]] ]]>
178
+ </y:EdgeLabel >
179
+ <y:Arrows source="none" target="standard"/>
180
+ <y:LineStyle color="#0000FF" type="line" width="1.0"/>
181
+ </y:PolyLineEdge>
182
+ </data>
183
+ </edge>
184
+ <edge source="add_466:0" target="gradient_wrt_Const_116:1-broadcast_transform_580:0">
185
+ <data key="d13">
186
+ <y:PolyLineEdge>
187
+ <y:EdgeLabel >
188
+ <![CDATA[ [[3.9227774823857198, 5.169586592555774]] ]]>
189
+ </y:EdgeLabel >
190
+ <y:Arrows source="none" target="standard"/>
191
+ <y:LineStyle color="#FF0000" type="line" width="1.0"/>
192
+ </y:PolyLineEdge>
193
+ </data>
194
+ </edge>
195
+ <edge source="gradient_wrt_Const_116:1-sin_467:0_grad-mul_579:0" target="gradient_wrt_Const_116:1-broadcast_transform_580:0">
196
+ <data key="d13">
197
+ <y:PolyLineEdge>
198
+ <y:EdgeLabel >
199
+ <![CDATA[ [[-0.7100797735027796, 0.44143528039422913]] ]]>
200
+ </y:EdgeLabel >
201
+ <y:Arrows source="none" target="standard"/>
202
+ <y:LineStyle color="#0000FF" type="line" width="1.0"/>
203
+ </y:PolyLineEdge>
204
+ </data>
205
+ </edge>
206
+ <edge source="gradient_wrt_Const_116:1-broadcast_transform_580:0" target="gradient_wrt_Const_116:1-index_581:0">
207
+ <data key="d13">
208
+ <y:PolyLineEdge>
209
+ <y:EdgeLabel >
210
+ <![CDATA[ [[[3.9227774823857198, 5.169586592555774]], [[-0.7100797735027796, 0.44143528039422913]]] ]]>
211
+ </y:EdgeLabel >
212
+ <y:Arrows source="none" target="standard"/>
213
+ <y:LineStyle color="#FF0000" type="line" width="1.0"/>
214
+ </y:PolyLineEdge>
215
+ </data>
216
+ </edge>
217
+ <edge source="gradient_wrt_Const_116:1-Const_148:0" target="gradient_wrt_Const_116:1-index_581:0">
218
+ <data key="d13">
219
+ <y:PolyLineEdge>
220
+ <y:EdgeLabel >
221
+ <![CDATA[ 1 ]]>
222
+ </y:EdgeLabel >
223
+ <y:Arrows source="none" target="standard"/>
224
+ <y:LineStyle color="#0000FF" type="line" width="1.0"/>
225
+ </y:PolyLineEdge>
226
+ </data>
227
+ </edge>
228
+ <data key="d3">[]</data>
229
+ <data key="d3">[2]</data>
230
+ <edge source="Const_117:1" target="gradient_wrt_Const_116:1-add_466:0_grad-add-shape_y_1">
231
+ <data key="d13">
232
+ <y:PolyLineEdge>
233
+ <y:EdgeLabel >
234
+ <![CDATA[ [4.1, 5.1] ]]>
235
+ </y:EdgeLabel >
236
+ <y:Arrows source="none" target="standard"/>
237
+ <y:LineStyle color="#FF0000" type="line" width="1.0"/>
238
+ </y:PolyLineEdge>
239
+ </data>
240
+ </edge>
241
+ <data key="d3">[1, 2]</data>
242
+ <edge source="matmul_465:0" target="gradient_wrt_Const_116:1-add_466:0_grad-add-shape_x_1">
243
+ <data key="d13">
244
+ <y:PolyLineEdge>
245
+ <y:EdgeLabel >
246
+ <![CDATA[ [[-0.1772225176142799, 0.0695865925557746]] ]]>
247
+ </y:EdgeLabel >
248
+ <y:Arrows source="none" target="standard"/>
249
+ <y:LineStyle color="#FF0000" type="line" width="1.0"/>
250
+ </y:PolyLineEdge>
251
+ </data>
252
+ </edge>
253
+ <edge source="gradient_wrt_Const_116:1-add_466:0_grad-add-shape_y_1" target="gradient_wrt_Const_116:1-add_466:0_grad-broadcast_gradient_args_582:0">
254
+ <data key="d13">
255
+ <y:PolyLineEdge>
256
+ <y:EdgeLabel >
257
+ <![CDATA[ [2] ]]>
258
+ </y:EdgeLabel >
259
+ <y:Arrows source="none" target="standard"/>
260
+ <y:LineStyle color="#FF0000" type="line" width="1.0"/>
261
+ </y:PolyLineEdge>
262
+ </data>
263
+ </edge>
264
+ <edge source="gradient_wrt_Const_116:1-add_466:0_grad-add-shape_x_1" target="gradient_wrt_Const_116:1-add_466:0_grad-broadcast_gradient_args_582:0">
265
+ <data key="d13">
266
+ <y:PolyLineEdge>
267
+ <y:EdgeLabel >
268
+ <![CDATA[ [1, 2] ]]>
269
+ </y:EdgeLabel >
270
+ <y:Arrows source="none" target="standard"/>
271
+ <y:LineStyle color="#0000FF" type="line" width="1.0"/>
272
+ </y:PolyLineEdge>
273
+ </data>
274
+ </edge>
275
+ <edge source="gradient_wrt_Const_116:1-index_581:0" target="gradient_wrt_Const_116:1-add_466:0_grad-add-reduce_sum_x_1">
276
+ <data key="d13">
277
+ <y:PolyLineEdge>
278
+ <y:EdgeLabel >
279
+ <![CDATA[ [[-0.7100797735027796, 0.44143528039422913]] ]]>
280
+ </y:EdgeLabel >
281
+ <y:Arrows source="none" target="standard"/>
282
+ <y:LineStyle color="#FF0000" type="line" width="1.0"/>
283
+ </y:PolyLineEdge>
284
+ </data>
285
+ </edge>
286
+ <edge source="gradient_wrt_Const_116:1-add_466:0_grad-broadcast_gradient_args_582:0" target="gradient_wrt_Const_116:1-add_466:0_grad-add-reduce_sum_x_1">
287
+ <data key="d13">
288
+ <y:PolyLineEdge>
289
+ <y:EdgeLabel >
290
+ <![CDATA[ [] ]]>
291
+ </y:EdgeLabel >
292
+ <y:Arrows source="none" target="standard"/>
293
+ <y:LineStyle color="#0000FF" type="line" width="1.0"/>
294
+ </y:PolyLineEdge>
295
+ </data>
296
+ </edge>
297
+ <data key="d3">[[0.5, 0.6]]</data>
298
+ <data key="d3">[[1.0, 1.0]]</data>
299
+ <edge source="gradient_wrt_Const_116:1-matmul_465:0_grad-Const_151:1" target="gradient_wrt_Const_116:1-matmul_465:0_grad-matmul-identity0_2">
300
+ <data key="d13">
301
+ <y:PolyLineEdge>
302
+ <y:EdgeLabel >
303
+ <![CDATA[ [1, 2] ]]>
304
+ </y:EdgeLabel >
305
+ <y:Arrows source="none" target="standard"/>
306
+ <y:LineStyle color="#FF0000" type="line" width="1.0"/>
307
+ </y:PolyLineEdge>
308
+ </data>
309
+ </edge>
310
+ <edge source="gradient_wrt_Const_116:1-matmul_465:0_grad-matmul-identity0_2" target="gradient_wrt_Const_116:1-matmul_465:0_grad-matmul_596:0">
311
+ <data key="d13">
312
+ <y:PolyLineEdge>
313
+ <y:EdgeLabel >
314
+ <![CDATA[ [[1.0, 1.0]] ]]>
315
+ </y:EdgeLabel >
316
+ <y:Arrows source="none" target="standard"/>
317
+ <y:LineStyle color="#FF0000" type="line" width="1.0"/>
318
+ </y:PolyLineEdge>
319
+ </data>
320
+ </edge>
321
+ <edge source="Const_115:2" target="gradient_wrt_Const_116:1-matmul_465:0_grad-matmul_596:0">
322
+ <data key="d13">
323
+ <y:PolyLineEdge>
324
+ <y:EdgeLabel >
325
+ <![CDATA[ [[0.3, 0.2], [0.15, 0.45]] ]]>
326
+ </y:EdgeLabel >
327
+ <y:Arrows source="none" target="standard"/>
328
+ <y:LineStyle color="#0000FF" type="line" width="1.0"/>
329
+ </y:PolyLineEdge>
330
+ </data>
331
+ </edge>
332
+ <edge source="gradient_wrt_Const_116:1-add_466:0_grad-add-reduce_sum_x_1" target="gradient_wrt_Const_116:1-matmul_465:0_grad-matmul-grad_a_norm_mul_da_2">
333
+ <data key="d13">
334
+ <y:PolyLineEdge>
335
+ <y:EdgeLabel >
336
+ <![CDATA[ [[-0.7100797735027796, 0.44143528039422913]] ]]>
337
+ </y:EdgeLabel >
338
+ <y:Arrows source="none" target="standard"/>
339
+ <y:LineStyle color="#FF0000" type="line" width="1.0"/>
340
+ </y:PolyLineEdge>
341
+ </data>
342
+ </edge>
343
+ <edge source="gradient_wrt_Const_116:1-matmul_465:0_grad-matmul_596:0" target="gradient_wrt_Const_116:1-matmul_465:0_grad-matmul-grad_a_norm_mul_da_2">
344
+ <data key="d13">
345
+ <y:PolyLineEdge>
346
+ <y:EdgeLabel >
347
+ <![CDATA[ [[0.5, 0.6]] ]]>
348
+ </y:EdgeLabel >
349
+ <y:Arrows source="none" target="standard"/>
350
+ <y:LineStyle color="#0000FF" type="line" width="1.0"/>
351
+ </y:PolyLineEdge>
352
+ </data>
353
+ </edge>
354
+ <data key="d3">[[0.5120854772418407, -0.8439730781677989]]</data>
355
+ <edge source="add_463:0" target="gradient_wrt_Const_116:1-sin_464:0_grad-cos_598:0">
356
+ <data key="d13">
357
+ <y:PolyLineEdge>
358
+ <y:EdgeLabel >
359
+ <![CDATA[ [[5.25, 21.425]] ]]>
360
+ </y:EdgeLabel >
361
+ <y:Arrows source="none" target="standard"/>
362
+ <y:LineStyle color="#FF0000" type="line" width="1.0"/>
363
+ </y:PolyLineEdge>
364
+ </data>
365
+ </edge>
366
+ <edge source="gradient_wrt_Const_116:1-matmul_465:0_grad-matmul-grad_a_norm_mul_da_2" target="gradient_wrt_Const_116:1-sin_464:0_grad-mul_599:0">
367
+ <data key="d13">
368
+ <y:PolyLineEdge>
369
+ <y:EdgeLabel >
370
+ <![CDATA[ [[-0.3550398867513898, 0.2648611682365375]] ]]>
371
+ </y:EdgeLabel >
372
+ <y:Arrows source="none" target="standard"/>
373
+ <y:LineStyle color="#FF0000" type="line" width="1.0"/>
374
+ </y:PolyLineEdge>
375
+ </data>
376
+ </edge>
377
+ <edge source="gradient_wrt_Const_116:1-sin_464:0_grad-cos_598:0" target="gradient_wrt_Const_116:1-sin_464:0_grad-mul_599:0">
378
+ <data key="d13">
379
+ <y:PolyLineEdge>
380
+ <y:EdgeLabel >
381
+ <![CDATA[ [[0.5120854772418407, -0.8439730781677989]] ]]>
382
+ </y:EdgeLabel >
383
+ <y:Arrows source="none" target="standard"/>
384
+ <y:LineStyle color="#0000FF" type="line" width="1.0"/>
385
+ </y:PolyLineEdge>
386
+ </data>
387
+ </edge>
388
+ <edge source="add_463:0" target="gradient_wrt_Const_116:1-broadcast_transform_600:0">
389
+ <data key="d13">
390
+ <y:PolyLineEdge>
391
+ <y:EdgeLabel >
392
+ <![CDATA[ [[5.25, 21.425]] ]]>
393
+ </y:EdgeLabel >
394
+ <y:Arrows source="none" target="standard"/>
395
+ <y:LineStyle color="#FF0000" type="line" width="1.0"/>
396
+ </y:PolyLineEdge>
397
+ </data>
398
+ </edge>
399
+ <edge source="gradient_wrt_Const_116:1-sin_464:0_grad-mul_599:0" target="gradient_wrt_Const_116:1-broadcast_transform_600:0">
400
+ <data key="d13">
401
+ <y:PolyLineEdge>
402
+ <y:EdgeLabel >
403
+ <![CDATA[ [[-0.18181076984697453, -0.2235356954437098]] ]]>
404
+ </y:EdgeLabel >
405
+ <y:Arrows source="none" target="standard"/>
406
+ <y:LineStyle color="#0000FF" type="line" width="1.0"/>
407
+ </y:PolyLineEdge>
408
+ </data>
409
+ </edge>
410
+ <edge source="gradient_wrt_Const_116:1-broadcast_transform_600:0" target="gradient_wrt_Const_116:1-index_602:0">
411
+ <data key="d13">
412
+ <y:PolyLineEdge>
413
+ <y:EdgeLabel >
414
+ <![CDATA[ [[[5.25, 21.425]], [[-0.18181076984697453, -0.2235356954437098]]] ]]>
415
+ </y:EdgeLabel >
416
+ <y:Arrows source="none" target="standard"/>
417
+ <y:LineStyle color="#FF0000" type="line" width="1.0"/>
418
+ </y:PolyLineEdge>
419
+ </data>
420
+ </edge>
421
+ <edge source="gradient_wrt_Const_116:1-Const_156:0" target="gradient_wrt_Const_116:1-index_602:0">
422
+ <data key="d13">
423
+ <y:PolyLineEdge>
424
+ <y:EdgeLabel >
425
+ <![CDATA[ 1 ]]>
426
+ </y:EdgeLabel >
427
+ <y:Arrows source="none" target="standard"/>
428
+ <y:LineStyle color="#0000FF" type="line" width="1.0"/>
429
+ </y:PolyLineEdge>
430
+ </data>
431
+ </edge>
432
+ <data key="d3">[0]</data>
433
+ <data key="d3">[1, 2]</data>
434
+ <edge source="matmul_462:0" target="gradient_wrt_Const_116:1-add_463:0_grad-add-shape_x_3">
435
+ <data key="d13">
436
+ <y:PolyLineEdge>
437
+ <y:EdgeLabel >
438
+ <![CDATA[ [[1.25, 16.425]] ]]>
439
+ </y:EdgeLabel >
440
+ <y:Arrows source="none" target="standard"/>
441
+ <y:LineStyle color="#FF0000" type="line" width="1.0"/>
442
+ </y:PolyLineEdge>
443
+ </data>
444
+ </edge>
445
+ <data key="d3">[2]</data>
446
+ <edge source="Const_116:1" target="gradient_wrt_Const_116:1-add_463:0_grad-add-shape_y_3">
447
+ <data key="d13">
448
+ <y:PolyLineEdge>
449
+ <y:EdgeLabel >
450
+ <![CDATA[ [4.0, 5.0] ]]>
451
+ </y:EdgeLabel >
452
+ <y:Arrows source="none" target="standard"/>
453
+ <y:LineStyle color="#FF0000" type="line" width="1.0"/>
454
+ </y:PolyLineEdge>
455
+ </data>
456
+ </edge>
457
+ <edge source="gradient_wrt_Const_116:1-add_463:0_grad-add-shape_x_3" target="gradient_wrt_Const_116:1-add_463:0_grad-broadcast_gradient_args_604:0">
458
+ <data key="d13">
459
+ <y:PolyLineEdge>
460
+ <y:EdgeLabel >
461
+ <![CDATA[ [1, 2] ]]>
462
+ </y:EdgeLabel >
463
+ <y:Arrows source="none" target="standard"/>
464
+ <y:LineStyle color="#FF0000" type="line" width="1.0"/>
465
+ </y:PolyLineEdge>
466
+ </data>
467
+ </edge>
468
+ <edge source="gradient_wrt_Const_116:1-add_463:0_grad-add-shape_y_3" target="gradient_wrt_Const_116:1-add_463:0_grad-broadcast_gradient_args_604:0">
469
+ <data key="d13">
470
+ <y:PolyLineEdge>
471
+ <y:EdgeLabel >
472
+ <![CDATA[ [2] ]]>
473
+ </y:EdgeLabel >
474
+ <y:Arrows source="none" target="standard"/>
475
+ <y:LineStyle color="#0000FF" type="line" width="1.0"/>
476
+ </y:PolyLineEdge>
477
+ </data>
478
+ </edge>
479
+ <edge source="gradient_wrt_Const_116:1-index_602:0" target="gradient_wrt_Const_116:1-add_463:0_grad-add-reduce_sum_y_3">
480
+ <data key="d13">
481
+ <y:PolyLineEdge>
482
+ <y:EdgeLabel >
483
+ <![CDATA[ [[-0.18181076984697453, -0.2235356954437098]] ]]>
484
+ </y:EdgeLabel >
485
+ <y:Arrows source="none" target="standard"/>
486
+ <y:LineStyle color="#FF0000" type="line" width="1.0"/>
487
+ </y:PolyLineEdge>
488
+ </data>
489
+ </edge>
490
+ <edge source="gradient_wrt_Const_116:1-add_463:0_grad-broadcast_gradient_args_604:0" target="gradient_wrt_Const_116:1-add_463:0_grad-add-reduce_sum_y_3">
491
+ <data key="d13">
492
+ <y:PolyLineEdge>
493
+ <y:EdgeLabel >
494
+ <![CDATA[ [0] ]]>
495
+ </y:EdgeLabel >
496
+ <y:Arrows source="none" target="standard"/>
497
+ <y:LineStyle color="#0000FF" type="line" width="1.0"/>
498
+ </y:PolyLineEdge>
499
+ </data>
500
+ </edge>
501
+ <edge source="Const_116:1" target="gradient_wrt_Const_116:1-ones_like_611:0">
502
+ <data key="d13">
503
+ <y:PolyLineEdge>
504
+ <y:EdgeLabel >
505
+ <![CDATA[ [4.0, 5.0] ]]>
506
+ </y:EdgeLabel >
507
+ <y:Arrows source="none" target="standard"/>
508
+ <y:LineStyle color="#FF0000" type="line" width="1.0"/>
509
+ </y:PolyLineEdge>
510
+ </data>
511
+ </edge>
512
+ <edge source="gradient_wrt_Const_116:1-add_463:0_grad-add-reduce_sum_y_3" target="gradient_wrt_Const_116:1-mul_612:0">
513
+ <data key="d13">
514
+ <y:PolyLineEdge>
515
+ <y:EdgeLabel >
516
+ <![CDATA[ [-0.18181076984697453, -0.2235356954437098] ]]>
517
+ </y:EdgeLabel >
518
+ <y:Arrows source="none" target="standard"/>
519
+ <y:LineStyle color="#FF0000" type="line" width="1.0"/>
520
+ </y:PolyLineEdge>
521
+ </data>
522
+ </edge>
523
+ <edge source="gradient_wrt_Const_116:1-ones_like_611:0" target="gradient_wrt_Const_116:1-mul_612:0">
524
+ <data key="d13">
525
+ <y:PolyLineEdge>
526
+ <y:EdgeLabel >
527
+ <![CDATA[ ]]>
528
+ </y:EdgeLabel >
529
+ <y:Arrows source="none" target="standard"/>
530
+ <y:LineStyle color="#0000FF" type="line" width="1.0"/>
531
+ </y:PolyLineEdge>
532
+ </data>
533
+ </edge>
534
+ <data key="d3">[]</data>
535
+ <edge source="Const_116:1" target="gradient_wrt_Const_116:1-shape_613:0">
536
+ <data key="d13">
537
+ <y:PolyLineEdge>
538
+ <y:EdgeLabel >
539
+ <![CDATA[ [4.0, 5.0] ]]>
540
+ </y:EdgeLabel >
541
+ <y:Arrows source="none" target="standard"/>
542
+ <y:LineStyle color="#FF0000" type="line" width="1.0"/>
543
+ </y:PolyLineEdge>
544
+ </data>
545
+ </edge>
546
+ <edge source="gradient_wrt_Const_116:1-mul_612:0" target="gradient_wrt_Const_116:1-truncate_614:0">
547
+ <data key="d13">
548
+ <y:PolyLineEdge>
549
+ <y:EdgeLabel >
550
+ <![CDATA[ [-0.18181076984697453, -0.2235356954437098] ]]>
551
+ </y:EdgeLabel >
552
+ <y:Arrows source="none" target="standard"/>
553
+ <y:LineStyle color="#FF0000" type="line" width="1.0"/>
554
+ </y:PolyLineEdge>
555
+ </data>
556
+ </edge>
557
+ <edge source="gradient_wrt_Const_116:1-shape_613:0" target="gradient_wrt_Const_116:1-truncate_614:0">
558
+ <data key="d13">
559
+ <y:PolyLineEdge>
560
+ <y:EdgeLabel >
561
+ <![CDATA[ [] ]]>
562
+ </y:EdgeLabel >
563
+ <y:Arrows source="none" target="standard"/>
564
+ <y:LineStyle color="#0000FF" type="line" width="1.0"/>
565
+ </y:PolyLineEdge>
566
+ </data>
567
+ </edge>
568
+ <edge source="gradient_wrt_Const_116:1-truncate_614:0" target="-flow_group_615:">
569
+ <data key="d13">
570
+ <y:PolyLineEdge>
571
+ <y:EdgeLabel >
572
+ <![CDATA[ [-0.18181076984697453, -0.2235356954437098] ]]>
573
+ </y:EdgeLabel >
574
+ <y:Arrows source="none" target="standard"/>
575
+ <y:LineStyle color="#FF0000" type="line" width="1.0"/>
576
+ </y:PolyLineEdge>
577
+ </data>
578
+ </edge>
579
+ <node id="" yfiles.foldertype="group">
580
+ <data key="d9">
581
+ <y:ProxyAutoBoundsNode>
582
+ <y:Realizers active="0">
583
+ <y:GroupNode>
584
+ <y:Fill color="#CAECFF84" transparent="false"/>
585
+ <y:BorderStyle color="#666699" type="dotted" width="1.0"/>
586
+ <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#99CCFF" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="67.18603515625" x="-8.593017578125" y="0.0"></y:NodeLabel>
587
+ <y:Shape type="roundrectangle"/>
588
+ </y:GroupNode>
589
+ </y:Realizers>
590
+ </y:ProxyAutoBoundsNode>
591
+ </data>
592
+ <graph edgedefault="directed" id="n105:">
593
+ <node id="" yfiles.foldertype="group">
594
+ <data key="d9">
595
+ <y:ProxyAutoBoundsNode>
596
+ <y:Realizers active="0">
597
+ <y:GroupNode>
598
+ <y:Fill color="#CAECFF84" transparent="false"/>
599
+ <y:BorderStyle color="#666699" type="dotted" width="1.0"/>
600
+ <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#99CCFF" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="67.18603515625" x="-8.593017578125" y="0.0"></y:NodeLabel>
601
+ <y:Shape type="roundrectangle"/>
602
+ </y:GroupNode>
603
+ </y:Realizers>
604
+ </y:ProxyAutoBoundsNode>
605
+ </data>
606
+ <graph edgedefault="directed" id="n105:">
607
+ <node id="-flow_group_615:">
608
+ <data key="d0">flow_group</data>
609
+ <data key="d1">
610
+ flow_group(gradient_wrt_Const_116:1/truncate_614:0)</data>
611
+ <data key="d2">blue</data>
612
+ <data key="d9">
613
+ <y:ShapeNode>
614
+ <y:Fill color="#99CC00" transparent="false"/>
615
+ <y:NodeLabel alignment="center">flow_group</y:NodeLabel>
616
+ </y:ShapeNode>
617
+ </data>
618
+ </node>
619
+ </graph>
620
+ </node>
621
+ </graph>
622
+ </node>
623
+ <node id="gradient_wrt_Const_116:1" yfiles.foldertype="group">
624
+ <data key="d9">
625
+ <y:ProxyAutoBoundsNode>
626
+ <y:Realizers active="0">
627
+ <y:GroupNode>
628
+ <y:Fill color="#CAECFF84" transparent="false"/>
629
+ <y:BorderStyle color="#666699" type="dotted" width="1.0"/>
630
+ <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#99CCFF" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="67.18603515625" x="-8.593017578125" y="0.0">gradient_wrt_Const_116:1</y:NodeLabel>
631
+ <y:Shape type="roundrectangle"/>
632
+ </y:GroupNode>
633
+ </y:Realizers>
634
+ </y:ProxyAutoBoundsNode>
635
+ </data>
636
+ <graph edgedefault="directed" id="n105:">
637
+ <node id="gradient_wrt_Const_116:1" yfiles.foldertype="group">
638
+ <data key="d9">
639
+ <y:ProxyAutoBoundsNode>
640
+ <y:Realizers active="0">
641
+ <y:GroupNode>
642
+ <y:Fill color="#CAECFF84" transparent="false"/>
643
+ <y:BorderStyle color="#666699" type="dotted" width="1.0"/>
644
+ <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#99CCFF" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="67.18603515625" x="-8.593017578125" y="0.0">gradient_wrt_Const_116:1</y:NodeLabel>
645
+ <y:Shape type="roundrectangle"/>
646
+ </y:GroupNode>
647
+ </y:Realizers>
648
+ </y:ProxyAutoBoundsNode>
649
+ </data>
650
+ <graph edgedefault="directed" id="n105:">
651
+ <node id="gradient_wrt_Const_116:1-truncate_614:0">
652
+ <data key="d0">truncate</data>
653
+ <data key="d1">
654
+ truncate(gradient_wrt_Const_116:1/mul_612:0, gradient_wrt_Const_116:1/shape_613:0)</data>
655
+ <data key="d2">blue</data>
656
+ <data key="d9">
657
+ <y:ShapeNode>
658
+ <y:Fill color="#FFFF99" transparent="false"/>
659
+ <y:NodeLabel alignment="center">truncate</y:NodeLabel>
660
+ </y:ShapeNode>
661
+ </data>
662
+ </node>
663
+ <node id="gradient_wrt_Const_116:1-mul_612:0">
664
+ <data key="d0">mul</data>
665
+ <data key="d1">
666
+ (gradient_wrt_Const_116:1/add_463:0_grad/add/reduce_sum_y_3 * gradient_wrt_Const_116:1/ones_like_611:0)</data>
667
+ <data key="d2">blue</data>
668
+ <data key="d9">
669
+ <y:ShapeNode>
670
+ <y:Fill color="#99CC00" transparent="false"/>
671
+ <y:NodeLabel alignment="center">mul</y:NodeLabel>
672
+ </y:ShapeNode>
673
+ </data>
674
+ </node>
675
+ <node id="gradient_wrt_Const_116:1-index_602:0">
676
+ <data key="d0">index</data>
677
+ <data key="d1">
678
+ gradient_wrt_Const_116:1/broadcast_transform_600:0[gradient_wrt_Const_116:1/Const_156:0]</data>
679
+ <data key="d2">blue</data>
680
+ <data key="d9">
681
+ <y:ShapeNode>
682
+ <y:Fill color="#99CC00" transparent="false"/>
683
+ <y:NodeLabel alignment="center">index</y:NodeLabel>
684
+ </y:ShapeNode>
685
+ </data>
686
+ </node>
687
+ <node id="gradient_wrt_Const_116:1-broadcast_transform_600:0">
688
+ <data key="d0">broadcast_transform</data>
689
+ <data key="d1">
690
+ broadcast_transform(add_463:0,gradient_wrt_Const_116:1/sin_464:0_grad/mul_599:0)</data>
691
+ <data key="d2">blue</data>
692
+ <data key="d9">
693
+ <y:ShapeNode>
694
+ <y:Fill color="#99CC00" transparent="false"/>
695
+ <y:NodeLabel alignment="center">broadcast_transform</y:NodeLabel>
696
+ </y:ShapeNode>
697
+ </data>
698
+ </node>
699
+ <node id="gradient_wrt_Const_116:1-index_581:0">
700
+ <data key="d0">index</data>
701
+ <data key="d1">
702
+ gradient_wrt_Const_116:1/broadcast_transform_580:0[gradient_wrt_Const_116:1/Const_148:0]</data>
703
+ <data key="d2">blue</data>
704
+ <data key="d9">
705
+ <y:ShapeNode>
706
+ <y:Fill color="#99CC00" transparent="false"/>
707
+ <y:NodeLabel alignment="center">index</y:NodeLabel>
708
+ </y:ShapeNode>
709
+ </data>
710
+ </node>
711
+ <node id="gradient_wrt_Const_116:1-broadcast_transform_580:0">
712
+ <data key="d0">broadcast_transform</data>
713
+ <data key="d1">
714
+ broadcast_transform(add_466:0,gradient_wrt_Const_116:1/sin_467:0_grad/mul_579:0)</data>
715
+ <data key="d2">blue</data>
716
+ <data key="d9">
717
+ <y:ShapeNode>
718
+ <y:Fill color="#99CC00" transparent="false"/>
719
+ <y:NodeLabel alignment="center">broadcast_transform</y:NodeLabel>
720
+ </y:ShapeNode>
721
+ </data>
722
+ </node>
723
+ <node id="gradient_wrt_Const_116:1-ones_like_577:0">
724
+ <data key="d0">ones_like</data>
725
+ <data key="d1">
726
+ ones_like(Const_116:1)</data>
727
+ <data key="d2">blue</data>
728
+ <data key="d9">
729
+ <y:ShapeNode>
730
+ <y:Fill color="#FFFF99" transparent="false"/>
731
+ <y:NodeLabel alignment="center">ones_like</y:NodeLabel>
732
+ </y:ShapeNode>
733
+ </data>
734
+ </node>
735
+ <node id="gradient_wrt_Const_116:1-Const_148:0">
736
+ <data key="d0">gradient_wrt_Const_116:1/Const_148:0</data>
737
+ <data key="d2">black</data>
738
+ <data key="d9">
739
+ <y:ShapeNode>
740
+ <y:Fill color="#FFFFFF" transparent="false"/>
741
+ <y:NodeLabel alignment="center">gradient_wrt_Const_116:1/Const_148:0</y:NodeLabel>
742
+ </y:ShapeNode>
743
+ </data>
744
+ </node>
745
+ <node id="gradient_wrt_Const_116:1-Const_156:0">
746
+ <data key="d0">gradient_wrt_Const_116:1/Const_156:0</data>
747
+ <data key="d2">black</data>
748
+ <data key="d9">
749
+ <y:ShapeNode>
750
+ <y:Fill color="#FFFFFF" transparent="false"/>
751
+ <y:NodeLabel alignment="center">gradient_wrt_Const_116:1/Const_156:0</y:NodeLabel>
752
+ </y:ShapeNode>
753
+ </data>
754
+ </node>
755
+ <node id="gradient_wrt_Const_116:1-ones_like_611:0">
756
+ <data key="d0">ones_like</data>
757
+ <data key="d1">
758
+ ones_like(Const_116:1)</data>
759
+ <data key="d2">blue</data>
760
+ <data key="d9">
761
+ <y:ShapeNode>
762
+ <y:Fill color="#FFFF99" transparent="false"/>
763
+ <y:NodeLabel alignment="center">ones_like</y:NodeLabel>
764
+ </y:ShapeNode>
765
+ </data>
766
+ </node>
767
+ <node id="gradient_wrt_Const_116:1-shape_613:0">
768
+ <data key="d0">shape</data>
769
+ <data key="d1">
770
+ Const_116:1.shape</data>
771
+ <data key="d2">blue</data>
772
+ <data key="d9">
773
+ <y:ShapeNode>
774
+ <y:Fill color="#99CC00" transparent="false"/>
775
+ <y:NodeLabel alignment="center">shape</y:NodeLabel>
776
+ </y:ShapeNode>
777
+ </data>
778
+ </node>
779
+ <node id="add_463:0_grad" yfiles.foldertype="group">
780
+ <data key="d9">
781
+ <y:ProxyAutoBoundsNode>
782
+ <y:Realizers active="0">
783
+ <y:GroupNode>
784
+ <y:Fill color="#CAECFF84" transparent="false"/>
785
+ <y:BorderStyle color="#666699" type="dotted" width="1.0"/>
786
+ <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#99CCFF" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="67.18603515625" x="-8.593017578125" y="0.0">add_463:0_grad</y:NodeLabel>
787
+ <y:Shape type="roundrectangle"/>
788
+ </y:GroupNode>
789
+ </y:Realizers>
790
+ </y:ProxyAutoBoundsNode>
791
+ </data>
792
+ <graph edgedefault="directed" id="n105:">
793
+ <node id="gradient_wrt_Const_116:1-add_463:0_grad-broadcast_gradient_args_604:0">
794
+ <data key="d0">broadcast_gradient_args</data>
795
+ <data key="d1">
796
+ broadcast_transform(gradient_wrt_Const_116:1/add_463:0_grad/add/shape_x_3,gradient_wrt_Const_116:1/add_463:0_grad/add/shape_y_3)</data>
797
+ <data key="d2">blue</data>
798
+ <data key="d9">
799
+ <y:ShapeNode>
800
+ <y:Fill color="#99CC00" transparent="false"/>
801
+ <y:NodeLabel alignment="center">broadcast_gradient_args</y:NodeLabel>
802
+ </y:ShapeNode>
803
+ </data>
804
+ </node>
805
+ <node id="add" yfiles.foldertype="group">
806
+ <data key="d9">
807
+ <y:ProxyAutoBoundsNode>
808
+ <y:Realizers active="0">
809
+ <y:GroupNode>
810
+ <y:Fill color="#CAECFF84" transparent="false"/>
811
+ <y:BorderStyle color="#666699" type="dotted" width="1.0"/>
812
+ <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#99CCFF" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="67.18603515625" x="-8.593017578125" y="0.0">add</y:NodeLabel>
813
+ <y:Shape type="roundrectangle"/>
814
+ </y:GroupNode>
815
+ </y:Realizers>
816
+ </y:ProxyAutoBoundsNode>
817
+ </data>
818
+ <graph edgedefault="directed" id="n105:">
819
+ <node id="gradient_wrt_Const_116:1-add_463:0_grad-add-reduce_sum_y_3">
820
+ <data key="d0">sum</data>
821
+ <data key="d1">
822
+ sum(|gradient_wrt_Const_116:1/index_602:0|, axis=gradient_wrt_Const_116:1/add_463:0_grad/broadcast_gradient_args_604:0)</data>
823
+ <data key="d2">blue</data>
824
+ <data key="d9">
825
+ <y:ShapeNode>
826
+ <y:Fill color="#99CC00" transparent="false"/>
827
+ <y:NodeLabel alignment="center">sum</y:NodeLabel>
828
+ </y:ShapeNode>
829
+ </data>
830
+ </node>
831
+ <node id="gradient_wrt_Const_116:1-add_463:0_grad-add-shape_x_3">
832
+ <data key="d0">shape</data>
833
+ <data key="d1">
834
+ matmul_462:0.shape</data>
835
+ <data key="d2">blue</data>
836
+ <data key="d9">
837
+ <y:ShapeNode>
838
+ <y:Fill color="#99CC00" transparent="false"/>
839
+ <y:NodeLabel alignment="center">shape</y:NodeLabel>
840
+ </y:ShapeNode>
841
+ </data>
842
+ </node>
843
+ <node id="gradient_wrt_Const_116:1-add_463:0_grad-add-shape_y_3">
844
+ <data key="d0">shape</data>
845
+ <data key="d1">
846
+ Const_116:1.shape</data>
847
+ <data key="d2">blue</data>
848
+ <data key="d9">
849
+ <y:ShapeNode>
850
+ <y:Fill color="#99CC00" transparent="false"/>
851
+ <y:NodeLabel alignment="center">shape</y:NodeLabel>
852
+ </y:ShapeNode>
853
+ </data>
854
+ </node>
855
+ </graph>
856
+ </node>
857
+ </graph>
858
+ </node>
859
+ <node id="sin_464:0_grad" yfiles.foldertype="group">
860
+ <data key="d9">
861
+ <y:ProxyAutoBoundsNode>
862
+ <y:Realizers active="0">
863
+ <y:GroupNode>
864
+ <y:Fill color="#CAECFF84" transparent="false"/>
865
+ <y:BorderStyle color="#666699" type="dotted" width="1.0"/>
866
+ <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#99CCFF" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="67.18603515625" x="-8.593017578125" y="0.0">sin_464:0_grad</y:NodeLabel>
867
+ <y:Shape type="roundrectangle"/>
868
+ </y:GroupNode>
869
+ </y:Realizers>
870
+ </y:ProxyAutoBoundsNode>
871
+ </data>
872
+ <graph edgedefault="directed" id="n105:">
873
+ <node id="gradient_wrt_Const_116:1-sin_464:0_grad-mul_599:0">
874
+ <data key="d0">mul</data>
875
+ <data key="d1">
876
+ (gradient_wrt_Const_116:1/matmul_465:0_grad/matmul/grad_a_norm_mul_da_2 * gradient_wrt_Const_116:1/sin_464:0_grad/cos_598:0)</data>
877
+ <data key="d2">blue</data>
878
+ <data key="d9">
879
+ <y:ShapeNode>
880
+ <y:Fill color="#99CC00" transparent="false"/>
881
+ <y:NodeLabel alignment="center">mul</y:NodeLabel>
882
+ </y:ShapeNode>
883
+ </data>
884
+ </node>
885
+ <node id="gradient_wrt_Const_116:1-sin_464:0_grad-cos_598:0">
886
+ <data key="d0">cos</data>
887
+ <data key="d1">
888
+ cos(add_463:0)</data>
889
+ <data key="d2">blue</data>
890
+ <data key="d9">
891
+ <y:ShapeNode>
892
+ <y:Fill color="#99CC00" transparent="false"/>
893
+ <y:NodeLabel alignment="center">cos</y:NodeLabel>
894
+ </y:ShapeNode>
895
+ </data>
896
+ </node>
897
+ </graph>
898
+ </node>
899
+ <node id="matmul_465:0_grad" yfiles.foldertype="group">
900
+ <data key="d9">
901
+ <y:ProxyAutoBoundsNode>
902
+ <y:Realizers active="0">
903
+ <y:GroupNode>
904
+ <y:Fill color="#CAECFF84" transparent="false"/>
905
+ <y:BorderStyle color="#666699" type="dotted" width="1.0"/>
906
+ <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#99CCFF" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="67.18603515625" x="-8.593017578125" y="0.0">matmul_465:0_grad</y:NodeLabel>
907
+ <y:Shape type="roundrectangle"/>
908
+ </y:GroupNode>
909
+ </y:Realizers>
910
+ </y:ProxyAutoBoundsNode>
911
+ </data>
912
+ <graph edgedefault="directed" id="n105:">
913
+ <node id="gradient_wrt_Const_116:1-matmul_465:0_grad-matmul_596:0">
914
+ <data key="d0">matmul</data>
915
+ <data key="d1">
916
+ gradient_wrt_Const_116:1/matmul_465:0_grad/matmul/identity0_2.matmul(Const_115:2)</data>
917
+ <data key="d2">blue</data>
918
+ <data key="d9">
919
+ <y:ShapeNode>
920
+ <y:Fill color="#99CC00" transparent="false"/>
921
+ <y:NodeLabel alignment="center">matmul</y:NodeLabel>
922
+ </y:ShapeNode>
923
+ </data>
924
+ </node>
925
+ <node id="gradient_wrt_Const_116:1-matmul_465:0_grad-Const_151:1">
926
+ <data key="d0">gradient_wrt_Const_116:1/matmul_465:0_grad/Const_151:1</data>
927
+ <data key="d2">black</data>
928
+ <data key="d9">
929
+ <y:ShapeNode>
930
+ <y:Fill color="#FFFFFF" transparent="false"/>
931
+ <y:NodeLabel alignment="center">gradient_wrt_Const_116:1/matmul_465:0_grad/Const_151:1</y:NodeLabel>
932
+ </y:ShapeNode>
933
+ </data>
934
+ </node>
935
+ <node id="matmul" yfiles.foldertype="group">
936
+ <data key="d9">
937
+ <y:ProxyAutoBoundsNode>
938
+ <y:Realizers active="0">
939
+ <y:GroupNode>
940
+ <y:Fill color="#CAECFF84" transparent="false"/>
941
+ <y:BorderStyle color="#666699" type="dotted" width="1.0"/>
942
+ <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#99CCFF" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="67.18603515625" x="-8.593017578125" y="0.0">matmul</y:NodeLabel>
943
+ <y:Shape type="roundrectangle"/>
944
+ </y:GroupNode>
945
+ </y:Realizers>
946
+ </y:ProxyAutoBoundsNode>
947
+ </data>
948
+ <graph edgedefault="directed" id="n105:">
949
+ <node id="gradient_wrt_Const_116:1-matmul_465:0_grad-matmul-grad_a_norm_mul_da_2">
950
+ <data key="d0">mul</data>
951
+ <data key="d1">
952
+ (gradient_wrt_Const_116:1/add_466:0_grad/add/reduce_sum_x_1 * gradient_wrt_Const_116:1/matmul_465:0_grad/matmul_596:0)</data>
953
+ <data key="d2">blue</data>
954
+ <data key="d9">
955
+ <y:ShapeNode>
956
+ <y:Fill color="#FFFF99" transparent="false"/>
957
+ <y:NodeLabel alignment="center">mul</y:NodeLabel>
958
+ </y:ShapeNode>
959
+ </data>
960
+ </node>
961
+ <node id="gradient_wrt_Const_116:1-matmul_465:0_grad-matmul-identity0_2">
962
+ <data key="d0">ones</data>
963
+ <data key="d1">
964
+ ones(gradient_wrt_Const_116:1/matmul_465:0_grad/Const_151:1)</data>
965
+ <data key="d2">blue</data>
966
+ <data key="d9">
967
+ <y:ShapeNode>
968
+ <y:Fill color="#99CC00" transparent="false"/>
969
+ <y:NodeLabel alignment="center">ones</y:NodeLabel>
970
+ </y:ShapeNode>
971
+ </data>
972
+ </node>
973
+ </graph>
974
+ </node>
975
+ </graph>
976
+ </node>
977
+ <node id="add_466:0_grad" yfiles.foldertype="group">
978
+ <data key="d9">
979
+ <y:ProxyAutoBoundsNode>
980
+ <y:Realizers active="0">
981
+ <y:GroupNode>
982
+ <y:Fill color="#CAECFF84" transparent="false"/>
983
+ <y:BorderStyle color="#666699" type="dotted" width="1.0"/>
984
+ <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#99CCFF" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="67.18603515625" x="-8.593017578125" y="0.0">add_466:0_grad</y:NodeLabel>
985
+ <y:Shape type="roundrectangle"/>
986
+ </y:GroupNode>
987
+ </y:Realizers>
988
+ </y:ProxyAutoBoundsNode>
989
+ </data>
990
+ <graph edgedefault="directed" id="n105:">
991
+ <node id="gradient_wrt_Const_116:1-add_466:0_grad-broadcast_gradient_args_582:0">
992
+ <data key="d0">broadcast_gradient_args</data>
993
+ <data key="d1">
994
+ broadcast_transform(gradient_wrt_Const_116:1/add_466:0_grad/add/shape_y_1,gradient_wrt_Const_116:1/add_466:0_grad/add/shape_x_1)</data>
995
+ <data key="d2">blue</data>
996
+ <data key="d9">
997
+ <y:ShapeNode>
998
+ <y:Fill color="#99CC00" transparent="false"/>
999
+ <y:NodeLabel alignment="center">broadcast_gradient_args</y:NodeLabel>
1000
+ </y:ShapeNode>
1001
+ </data>
1002
+ </node>
1003
+ <node id="add" yfiles.foldertype="group">
1004
+ <data key="d9">
1005
+ <y:ProxyAutoBoundsNode>
1006
+ <y:Realizers active="0">
1007
+ <y:GroupNode>
1008
+ <y:Fill color="#CAECFF84" transparent="false"/>
1009
+ <y:BorderStyle color="#666699" type="dotted" width="1.0"/>
1010
+ <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#99CCFF" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="67.18603515625" x="-8.593017578125" y="0.0">add</y:NodeLabel>
1011
+ <y:Shape type="roundrectangle"/>
1012
+ </y:GroupNode>
1013
+ </y:Realizers>
1014
+ </y:ProxyAutoBoundsNode>
1015
+ </data>
1016
+ <graph edgedefault="directed" id="n105:">
1017
+ <node id="gradient_wrt_Const_116:1-add_466:0_grad-add-reduce_sum_x_1">
1018
+ <data key="d0">sum</data>
1019
+ <data key="d1">
1020
+ sum(|gradient_wrt_Const_116:1/index_581:0|, axis=gradient_wrt_Const_116:1/add_466:0_grad/broadcast_gradient_args_582:0)</data>
1021
+ <data key="d2">blue</data>
1022
+ <data key="d9">
1023
+ <y:ShapeNode>
1024
+ <y:Fill color="#99CC00" transparent="false"/>
1025
+ <y:NodeLabel alignment="center">sum</y:NodeLabel>
1026
+ </y:ShapeNode>
1027
+ </data>
1028
+ </node>
1029
+ <node id="gradient_wrt_Const_116:1-add_466:0_grad-add-shape_y_1">
1030
+ <data key="d0">shape</data>
1031
+ <data key="d1">
1032
+ Const_117:1.shape</data>
1033
+ <data key="d2">blue</data>
1034
+ <data key="d9">
1035
+ <y:ShapeNode>
1036
+ <y:Fill color="#99CC00" transparent="false"/>
1037
+ <y:NodeLabel alignment="center">shape</y:NodeLabel>
1038
+ </y:ShapeNode>
1039
+ </data>
1040
+ </node>
1041
+ <node id="gradient_wrt_Const_116:1-add_466:0_grad-add-shape_x_1">
1042
+ <data key="d0">shape</data>
1043
+ <data key="d1">
1044
+ matmul_465:0.shape</data>
1045
+ <data key="d2">blue</data>
1046
+ <data key="d9">
1047
+ <y:ShapeNode>
1048
+ <y:Fill color="#99CC00" transparent="false"/>
1049
+ <y:NodeLabel alignment="center">shape</y:NodeLabel>
1050
+ </y:ShapeNode>
1051
+ </data>
1052
+ </node>
1053
+ </graph>
1054
+ </node>
1055
+ </graph>
1056
+ </node>
1057
+ <node id="sin_467:0_grad" yfiles.foldertype="group">
1058
+ <data key="d9">
1059
+ <y:ProxyAutoBoundsNode>
1060
+ <y:Realizers active="0">
1061
+ <y:GroupNode>
1062
+ <y:Fill color="#CAECFF84" transparent="false"/>
1063
+ <y:BorderStyle color="#666699" type="dotted" width="1.0"/>
1064
+ <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#99CCFF" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="67.18603515625" x="-8.593017578125" y="0.0">sin_467:0_grad</y:NodeLabel>
1065
+ <y:Shape type="roundrectangle"/>
1066
+ </y:GroupNode>
1067
+ </y:Realizers>
1068
+ </y:ProxyAutoBoundsNode>
1069
+ </data>
1070
+ <graph edgedefault="directed" id="n105:">
1071
+ <node id="gradient_wrt_Const_116:1-sin_467:0_grad-mul_579:0">
1072
+ <data key="d0">mul</data>
1073
+ <data key="d1">
1074
+ (gradient_wrt_Const_116:1/ones_like_577:0 * gradient_wrt_Const_116:1/sin_467:0_grad/cos_578:0)</data>
1075
+ <data key="d2">blue</data>
1076
+ <data key="d9">
1077
+ <y:ShapeNode>
1078
+ <y:Fill color="#99CC00" transparent="false"/>
1079
+ <y:NodeLabel alignment="center">mul</y:NodeLabel>
1080
+ </y:ShapeNode>
1081
+ </data>
1082
+ </node>
1083
+ <node id="gradient_wrt_Const_116:1-sin_467:0_grad-cos_578:0">
1084
+ <data key="d0">cos</data>
1085
+ <data key="d1">
1086
+ cos(add_466:0)</data>
1087
+ <data key="d2">blue</data>
1088
+ <data key="d9">
1089
+ <y:ShapeNode>
1090
+ <y:Fill color="#99CC00" transparent="false"/>
1091
+ <y:NodeLabel alignment="center">cos</y:NodeLabel>
1092
+ </y:ShapeNode>
1093
+ </data>
1094
+ </node>
1095
+ </graph>
1096
+ </node>
1097
+ </graph>
1098
+ </node>
1099
+ </graph>
1100
+ </node>
1101
+ <node id="program" yfiles.foldertype="group">
1102
+ <data key="d9">
1103
+ <y:ProxyAutoBoundsNode>
1104
+ <y:Realizers active="0">
1105
+ <y:GroupNode>
1106
+ <y:Fill color="#CAECFF84" transparent="false"/>
1107
+ <y:BorderStyle color="#666699" type="dotted" width="1.0"/>
1108
+ <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#99CCFF" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="67.18603515625" x="-8.593017578125" y="0.0">program</y:NodeLabel>
1109
+ <y:Shape type="roundrectangle"/>
1110
+ </y:GroupNode>
1111
+ </y:Realizers>
1112
+ </y:ProxyAutoBoundsNode>
1113
+ </data>
1114
+ <graph edgedefault="directed" id="n105:">
1115
+ <node id="program" yfiles.foldertype="group">
1116
+ <data key="d9">
1117
+ <y:ProxyAutoBoundsNode>
1118
+ <y:Realizers active="0">
1119
+ <y:GroupNode>
1120
+ <y:Fill color="#CAECFF84" transparent="false"/>
1121
+ <y:BorderStyle color="#666699" type="dotted" width="1.0"/>
1122
+ <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#99CCFF" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="67.18603515625" x="-8.593017578125" y="0.0">program</y:NodeLabel>
1123
+ <y:Shape type="roundrectangle"/>
1124
+ </y:GroupNode>
1125
+ </y:Realizers>
1126
+ </y:ProxyAutoBoundsNode>
1127
+ </data>
1128
+ <graph edgedefault="directed" id="n105:">
1129
+ <node id="add_463:0">
1130
+ <data key="d0">add</data>
1131
+ <data key="d1">
1132
+ (matmul_462:0 + Const_116:1)</data>
1133
+ <data key="d2">blue</data>
1134
+ <data key="d9">
1135
+ <y:ShapeNode>
1136
+ <y:Fill color="#99CC00" transparent="false"/>
1137
+ <y:NodeLabel alignment="center">add</y:NodeLabel>
1138
+ </y:ShapeNode>
1139
+ </data>
1140
+ </node>
1141
+ <node id="matmul_462:0">
1142
+ <data key="d0">matmul</data>
1143
+ <data key="d1">
1144
+ Const_113:2.matmul(Const_114:2)</data>
1145
+ <data key="d2">blue</data>
1146
+ <data key="d9">
1147
+ <y:ShapeNode>
1148
+ <y:Fill color="#99CC00" transparent="false"/>
1149
+ <y:NodeLabel alignment="center">matmul</y:NodeLabel>
1150
+ </y:ShapeNode>
1151
+ </data>
1152
+ </node>
1153
+ <node id="Const_113:2">
1154
+ <data key="d0">Const_113:2</data>
1155
+ <data key="d2">black</data>
1156
+ <data key="d9">
1157
+ <y:ShapeNode>
1158
+ <y:Fill color="#FFFFFF" transparent="false"/>
1159
+ <y:NodeLabel alignment="center">Const_113:2</y:NodeLabel>
1160
+ </y:ShapeNode>
1161
+ </data>
1162
+ </node>
1163
+ <node id="Const_114:2">
1164
+ <data key="d0">Const_114:2</data>
1165
+ <data key="d2">black</data>
1166
+ <data key="d9">
1167
+ <y:ShapeNode>
1168
+ <y:Fill color="#FFFFFF" transparent="false"/>
1169
+ <y:NodeLabel alignment="center">Const_114:2</y:NodeLabel>
1170
+ </y:ShapeNode>
1171
+ </data>
1172
+ </node>
1173
+ <node id="Const_116:1">
1174
+ <data key="d0">Const_116:1</data>
1175
+ <data key="d2">black</data>
1176
+ <data key="d9">
1177
+ <y:ShapeNode>
1178
+ <y:Fill color="#FFFFFF" transparent="false"/>
1179
+ <y:NodeLabel alignment="center">Const_116:1</y:NodeLabel>
1180
+ </y:ShapeNode>
1181
+ </data>
1182
+ </node>
1183
+ <node id="add_466:0">
1184
+ <data key="d0">add</data>
1185
+ <data key="d1">
1186
+ (matmul_465:0 + Const_117:1)</data>
1187
+ <data key="d2">blue</data>
1188
+ <data key="d9">
1189
+ <y:ShapeNode>
1190
+ <y:Fill color="#99CC00" transparent="false"/>
1191
+ <y:NodeLabel alignment="center">add</y:NodeLabel>
1192
+ </y:ShapeNode>
1193
+ </data>
1194
+ </node>
1195
+ <node id="matmul_465:0">
1196
+ <data key="d0">matmul</data>
1197
+ <data key="d1">
1198
+ sin_464:0.matmul(Const_115:2)</data>
1199
+ <data key="d2">blue</data>
1200
+ <data key="d9">
1201
+ <y:ShapeNode>
1202
+ <y:Fill color="#99CC00" transparent="false"/>
1203
+ <y:NodeLabel alignment="center">matmul</y:NodeLabel>
1204
+ </y:ShapeNode>
1205
+ </data>
1206
+ </node>
1207
+ <node id="sin_464:0">
1208
+ <data key="d0">sin</data>
1209
+ <data key="d1">
1210
+ sin(add_463:0)</data>
1211
+ <data key="d2">blue</data>
1212
+ <data key="d9">
1213
+ <y:ShapeNode>
1214
+ <y:Fill color="#99CC00" transparent="false"/>
1215
+ <y:NodeLabel alignment="center">sin</y:NodeLabel>
1216
+ </y:ShapeNode>
1217
+ </data>
1218
+ </node>
1219
+ <node id="Const_115:2">
1220
+ <data key="d0">Const_115:2</data>
1221
+ <data key="d2">black</data>
1222
+ <data key="d9">
1223
+ <y:ShapeNode>
1224
+ <y:Fill color="#FFFFFF" transparent="false"/>
1225
+ <y:NodeLabel alignment="center">Const_115:2</y:NodeLabel>
1226
+ </y:ShapeNode>
1227
+ </data>
1228
+ </node>
1229
+ <node id="Const_117:1">
1230
+ <data key="d0">Const_117:1</data>
1231
+ <data key="d2">black</data>
1232
+ <data key="d9">
1233
+ <y:ShapeNode>
1234
+ <y:Fill color="#FFFFFF" transparent="false"/>
1235
+ <y:NodeLabel alignment="center">Const_117:1</y:NodeLabel>
1236
+ </y:ShapeNode>
1237
+ </data>
1238
+ </node>
1239
+ </graph>
1240
+ </node>
1241
+ </graph>
1242
+ </node>
1243
+ <edge source="-flow_group_615:" target="out">
1244
+ <data key="d13">
1245
+ <y:PolyLineEdge>
1246
+ <y:EdgeLabel >
1247
+ <![CDATA[ [[-0.18181076984697453, -0.2235356954437098]] ]]>
1248
+ </y:EdgeLabel >
1249
+ <y:Arrows source="none" target="standard"/>
1250
+ <y:LineStyle color="#FF0000" type="line" width="1.0"/>
1251
+ </y:PolyLineEdge>
1252
+ </data>
1253
+ </edge>
1254
+ </graph>
1255
+ </graphml>