tensor_stream 0.1.4 → 0.1.5

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.
@@ -8,6 +8,23 @@ module TensorStream
8
8
  def self.relu(features, name: nil)
9
9
  TensorStream.max(features, 0, name: "relu_#{name}")
10
10
  end
11
+
12
+ def self.sigmoid_cross_entropy_with_logits(labels: nil, logits: nil, name: nil)
13
+ TensorStream.name_scope(name, default: 'logistic_loss', values: [logits, labels]) do |name|
14
+ tf = TensorStream
15
+ logits = tf.convert_to_tensor(logits, name: 'logits')
16
+ labels = tf.convert_to_tensor(labels, name: 'labels')
17
+ zeros = tf.zeros_like(logits, dtype: logits.dtype)
18
+ cond = (logits >= zeros)
19
+ relu_logits = tf.where(cond, logits, zeros)
20
+ neg_abs_logits = tf.where(cond, -logits, logits)
21
+
22
+ return tf.add(
23
+ relu_logits - logits * labels,
24
+ tf.log1p(tf.exp(neg_abs_logits)),
25
+ name: name)
26
+ end
27
+ end
11
28
  end
12
29
 
13
30
  # tensorflow compatibility
@@ -9,18 +9,17 @@ module TensorStream
9
9
 
10
10
  @operation = operation
11
11
  @rank = options[:rank] || 0
12
- @name = options[:name] || set_name
12
+ @name = [@graph.get_name_scope, options[:name] || set_name].compact.join('/')
13
13
  @internal = options[:internal]
14
14
  @given_name = @name
15
15
  @source = format_source(caller_locations)
16
16
 
17
17
  @options = options
18
18
 
19
- @items = [input_a, input_b].map { |i| options[:preserve_params_type] ? i : auto_wrap(i) }
19
+ @items = [input_a, input_b].map { |i| options[:preserve_params_type] ? i : TensorStream.convert_to_tensor(i) }
20
20
  @data_type = set_data_type(options[:data_type])
21
21
 
22
- @shape = TensorShape.new(options[:shape], options[:shape].size || 0) if options[:shape]
23
-
22
+ @shape = TensorShape.new(infer_shape)
24
23
  @graph.add_node(self)
25
24
  end
26
25
 
@@ -57,47 +56,55 @@ module TensorStream
57
56
  when :shape, :rank
58
57
  :int32
59
58
  else
60
- passed_data_type || (@items[0] ? @items[0].data_type : :unknown)
59
+ return passed_data_type if passed_data_type
60
+ if @items[0]
61
+ @items[0].data_type
62
+ elsif @items[1]
63
+ @items[1].data_type
64
+ else
65
+ :unknown
66
+ end
61
67
  end
62
68
  end
63
69
 
64
- def to_math(name_only = false, max_depth = 99)
70
+ def to_math(name_only = false, max_depth = 99, _cur_depth = 0)
65
71
  return @name if max_depth.zero?
66
72
 
67
- sub_item = auto_math(items[0], name_only, max_depth - 1)
73
+ sub_item = auto_math(items[0], name_only, max_depth - 1, _cur_depth + 1)
74
+ sub_item2 = auto_math(items[1], name_only, max_depth - 1, _cur_depth + 1) if items[1]
68
75
 
69
- case operation
76
+ out = case operation
70
77
  when :argmax
71
- "argmax(#{auto_math(items[0])},#{options[:axis]})"
78
+ "argmax(#{sub_item},#{options[:axis]})"
72
79
  when :negate
73
80
  "-#{sub_item}"
74
81
  when :index
75
- "#{sub_item}[#{auto_math(items[1], name_only, max_depth - 1)}]"
82
+ "#{sub_item}[#{sub_item2}]"
76
83
  when :slice
77
- "#{sub_item}[#{auto_math(items[1], name_only, max_depth - 1)}]"
84
+ "#{sub_item}[#{sub_item2}]"
78
85
  when :assign_sub
79
- "(#{items[0] ? items[0].name : 'self'} -= #{auto_math(items[1], name_only)})"
86
+ "(#{items[0] ? items[0].name : 'self'} -= #{auto_math(items[1], name_only, 1)})"
80
87
  when :assign_add
81
- "(#{items[0] ? items[0].name : 'self'} += #{auto_math(items[1], name_only)})"
88
+ "(#{items[0] ? items[0].name : 'self'} += #{auto_math(items[1], name_only, 1)})"
82
89
  when :assign
83
- "(#{items[0] ? items[0].name : 'self'} = #{auto_math(items[1], name_only)})"
90
+ "(#{items[0] ? items[0].name : 'self'} = #{auto_math(items[1], name_only, 1)})"
84
91
  when :sin, :cos, :tanh
85
92
  "#{operation}(#{sub_item})"
86
93
  when :add
87
- "(#{sub_item} + #{auto_math(items[1], name_only, max_depth - 1)})"
94
+ "(#{sub_item} + #{sub_item2})"
88
95
  when :sub
89
- "(#{sub_item} - #{auto_math(items[1], name_only, max_depth - 1)})"
96
+ "(#{sub_item} - #{sub_item2})"
90
97
  when :pow
91
- "(#{sub_item}^#{auto_math(items[1], name_only, max_depth - 1)})"
98
+ "(#{sub_item}^#{sub_item2})"
92
99
  when :div
93
- "(#{sub_item} / #{auto_math(items[1], name_only, max_depth - 1)})"
100
+ "(#{sub_item} / #{sub_item2})"
94
101
  when :mul
95
102
  if auto_math(items[0]) == 1
96
- auto_math(items[1], name_only, max_depth - 1)
103
+ sub_item2
97
104
  elsif auto_math(items[1]) == 1
98
105
  sub_item
99
106
  else
100
- "(#{sub_item} * #{auto_math(items[1], name_only, max_depth - 1)})"
107
+ "(#{sub_item} * #{sub_item2})"
101
108
  end
102
109
  when :reduce_sum
103
110
  "reduce_sum(|#{sub_item}|)"
@@ -110,7 +117,7 @@ module TensorStream
110
117
  when :stop_gradient
111
118
  sub_item
112
119
  when :matmul
113
- "#{sub_item}.matmul(#{auto_math(items[1], name_only, max_depth - 1)})"
120
+ "#{sub_item}.matmul(#{sub_item2})"
114
121
  when :eye
115
122
  "eye(#{sub_item})"
116
123
  when :transpose
@@ -128,15 +135,19 @@ module TensorStream
128
135
  when :zeros
129
136
  "zeros(#{sub_item})"
130
137
  when :reshape
131
- "reshape(#{sub_item},#{auto_math(items[1], name_only, max_depth - 1)})"
138
+ "reshape(#{sub_item},#{sub_item2})"
132
139
  when :rank
133
140
  "#{sub_item}.rank"
134
141
  when :cond
135
- "(#{auto_math(options[:pred])} ? #{sub_item} : #{auto_math(items[1], name_only, max_depth - 1)})"
142
+ "(#{auto_math(options[:pred], name_only, max_depth - 1, _cur_depth)} ? #{sub_item} : #{sub_item2})"
136
143
  when :less
137
- "#{sub_item} < #{auto_math(items[1], name_only, max_depth - 1)}"
144
+ "#{sub_item} < #{sub_item2}"
145
+ when :less_equal
146
+ "#{sub_item} <= #{sub_item2}"
138
147
  when :greater
139
- "#{sub_item} > #{auto_math(items[1], name_only, max_depth - 1)}"
148
+ "#{sub_item} > #{sub_item2}"
149
+ when :greater_equal
150
+ "#{sub_item} >= #{sub_item2}"
140
151
  when :square
141
152
  "#{sub_item}\u00B2"
142
153
  when :log
@@ -148,32 +159,82 @@ module TensorStream
148
159
  when :pad
149
160
  "pad(#{sub_item},#{auto_math(options[:paddings])})"
150
161
  when :equal
151
- "#{sub_item} == #{auto_math(items[1], name_only, max_depth - 1)}"
162
+ "#{sub_item} == #{sub_item2}"
152
163
  when :not_equal
153
- "#{sub_item} != #{auto_math(items[1], name_only, max_depth - 1)}"
164
+ "#{sub_item} != #{sub_item2}"
154
165
  when :logical_and
155
- "#{sub_item} && #{auto_math(items[1], name_only, max_depth - 1)}"
166
+ "#{sub_item} && #{sub_item2}"
156
167
  when :sqrt
157
168
  "sqrt(#{sub_item})"
158
169
  when :zeros_like
159
170
  "zeros_like(#{sub_item})"
160
171
  when :where
161
- "where(#{auto_math(options[:pred], name_only, max_depth - 1)},#{auto_math(items[0])},#{auto_math(items[1])})"
172
+ "where(#{auto_math(options[:pred], name_only, max_depth - 1, _cur_depth)}, #{sub_item}, #{sub_item2})"
162
173
  when :max
163
- "max(#{auto_math(sub_item)},#{auto_math(items[1])})"
174
+ "max(#{sub_item},#{sub_item2})"
164
175
  when :cast
165
- "cast(#{auto_math(sub_item)}, #{data_type})"
176
+ "cast(#{sub_item}, #{data_type})"
166
177
  else
167
178
  raise "no math form for #{operation} defined"
168
179
  end
180
+ ["\n",(_cur_depth + 1).times.collect { ' ' }, out].flatten.join
169
181
  end
170
182
 
171
183
  def run
172
184
  eval
173
185
  end
174
186
 
187
+ def op
188
+ self
189
+ end
190
+
175
191
  private
176
192
 
193
+ def infer_shape
194
+ case operation
195
+ when :index
196
+ item_shape = items[0].shape.shape
197
+ return nil if item_shape.nil?
198
+ return item_shape[1, item_shape.size]
199
+ when :reduce_mean, :reduce_prod, :reduce_sum
200
+ return [] if options[:axis].nil?
201
+ item_shape = items[0].shape.shape
202
+ return nil if item_shape.nil?
203
+ axis = options[:axis]
204
+
205
+ axis = [ axis ] unless axis.is_a?(Array)
206
+ return item_shape.each_with_index.map do |s, index|
207
+ next nil if axis.include?(index)
208
+ s
209
+ end.compact
210
+ when :reshape
211
+ new_shape = items[1] && items[1].value ? items[1].value : nil
212
+ return nil if new_shape.nil?
213
+
214
+ item_shape = items[0].shape.shape
215
+ return new_shape if item_shape.nil?
216
+
217
+ return TensorShape.fix_inferred_elements(new_shape, item_shape.reduce(:*))
218
+ when :flow_group
219
+ return []
220
+ when :zeros, :ones
221
+ return items[0] ? items[0].value : options[:shape]
222
+ when :shape
223
+ return items[0].shape.shape ? [items[0].shape.shape.size] : nil
224
+ when :matmul
225
+ shape1 = items[0].shape.shape.nil? ? nil : items[0].shape.shape[0]
226
+ shape2 = items[1].shape.shape.nil? ? nil : items[1].shape.shape[1]
227
+ return [shape1, shape2]
228
+ else
229
+ return items[0].shape.shape if items.size == 1
230
+ if items.size == 2 && items[0] && items[1]
231
+ return TensorShape.infer_shape(items[0].shape.shape, items[1].shape.shape)
232
+ end
233
+ end
234
+
235
+ nil
236
+ end
237
+
177
238
  def propagate_consumer(consumer)
178
239
  super(consumer)
179
240
 
@@ -5,7 +5,7 @@ module TensorStream
5
5
  NUMERIC_TYPES = %w[int32 int64 float32 float64].map(&:to_sym)
6
6
 
7
7
  def argmax(input, axis = nil, name: nil, dimension: nil, output_type: :int32)
8
- op(:argmax, input, nil, axis: axis, name: name, dimension: dimension, data_type: output_type)
8
+ _op(:argmax, input, nil, axis: axis, name: name, dimension: dimension, data_type: output_type)
9
9
  end
10
10
 
11
11
  def gradients(input, wrt_xs, grad_ys: nil,
@@ -24,10 +24,12 @@ module TensorStream
24
24
  tensor_program = if input.graph.node_added?(gradient_program_name)
25
25
  input.graph.get_node(gradient_program_name)
26
26
  else
27
- derivative_ops = TensorStream::MathGradients.derivative(input, x, graph: input.graph,
28
- stop_gradients: stop_gradients)
29
- unit_matrix = op(:ones_like, x)
30
- input.graph.add_node!(gradient_program_name, unit_matrix * derivative_ops)
27
+ input.graph.name_scope("gradient_wrt_#{x.name}") do
28
+ 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
31
33
  end
32
34
  tensor_program
33
35
  end
@@ -36,183 +38,204 @@ module TensorStream
36
38
 
37
39
  def random_uniform(shape, dtype: :float32, minval: 0, maxval: 1, seed: nil, name: nil)
38
40
  options = { shape: shape, dtype: dtype, minval: minval, maxval: maxval, seed: seed, name: name }
39
- op(:random_uniform, nil, nil, options)
41
+ _op(:random_uniform, nil, nil, options)
40
42
  end
41
43
 
42
44
  def random_normal(shape, dtype: :float32, mean: 0.0, stddev: 1.0, seed: nil, name: nil)
43
45
  options = { shape: shape, dtype: dtype, mean: mean, stddev: stddev, seed: seed, name: name }
44
- op(:random_normal, nil, nil, options)
46
+ _op(:random_normal, nil, nil, options)
45
47
  end
46
48
 
47
49
  def stop_gradient(tensor, options = {})
48
- op(:stop_gradient, tensor, nil, options)
50
+ _op(:stop_gradient, tensor, nil, options)
49
51
  end
50
52
 
51
53
  def eye(num_rows, num_columns: nil, dtype: :float32, name: nil)
52
- op(:eye, num_rows, num_columns || num_rows, data_type: dtype, name: name)
54
+ _op(:eye, num_rows, num_columns || num_rows, data_type: dtype, name: name)
53
55
  end
54
56
 
55
57
  def shape(input, name: nil, out_type: :int32)
56
- op(:shape, input, nil, name: name, out_type: out_type)
58
+ _op(:shape, input, nil, name: name, out_type: out_type)
57
59
  end
58
60
 
59
61
  def rank(input, name: nil)
60
- op(:rank, input, name: name)
62
+ _op(:rank, input, name: name)
61
63
  end
62
64
 
63
65
  def zeros_initializer(options = {})
64
- op(:zeros, nil, nil, options)
66
+ _op(:zeros, nil, nil, options)
67
+ end
68
+
69
+ def glorot_uniform_initializer(seed: nil, dtype: :float32)
70
+ TensorStream::Initializer.new(-> { _op(:glorot_uniform, nil, nil, seed: seed, data_type: dtype) })
71
+ end
72
+
73
+ def random_uniform_initializer(minval: 0, maxval: 1, seed: nil, dtype: nil)
74
+ TensorStream::Initializer.new(-> { _op(:random_uniform, nil, nil, minval: 0, maxval: 1, seed: seed, data_type: dtype) })
65
75
  end
66
76
 
67
77
  def slice(input, start, size, name: nil)
68
- op(:slice, input, start, size: size, name: name)
78
+ _op(:slice, input, start, size: size, name: name)
69
79
  end
70
80
 
71
81
  def zeros(shape, dtype: :float32, name: nil)
72
- op(:zeros, shape, nil, data_type: dtype, name: name)
82
+ _op(:zeros, shape, nil, data_type: dtype, name: name)
73
83
  end
74
84
 
75
85
  def ones(shape, dtype: :float32, name: nil)
76
- op(:ones, shape, nil, data_type: dtype, name: name)
86
+ _op(:ones, shape, nil, data_type: dtype, name: name)
77
87
  end
78
88
 
79
89
  def less(input_a, input_b, name: nil)
80
- op(:less, input_a, input_b, name: name)
90
+ _op(:less, input_a, input_b, name: name)
81
91
  end
82
92
 
83
93
  def logical_and(input_a, input_b, name: nil)
84
- op(:logical_and, input_a, input_b, name: name)
94
+ _op(:logical_and, input_a, input_b, name: name)
85
95
  end
86
96
 
87
97
  def greater(input_a, input_b, name: nil)
88
- op(:greater, input_a, input_b, name: name)
98
+ _op(:greater, input_a, input_b, name: name)
89
99
  end
90
100
 
91
101
  def greater_equal(input_a, input_b, name: nil)
92
- op(:greater_equal, input_a, input_b, name: name)
102
+ _op(:greater_equal, input_a, input_b, name: name)
93
103
  end
94
104
 
95
105
  def less_equal(input_a, input_b, name: nil)
96
- op(:less_equal, input_a, input_b, name: name)
106
+ _op(:less_equal, input_a, input_b, name: name)
97
107
  end
98
108
 
99
109
  def reduce_mean(input_tensor, axis = nil, keepdims: false, name: nil)
100
- op(:reduce_mean, input_tensor, nil, axis: axis, keepdims: keepdims, name: name)
110
+ _op(:reduce_mean, input_tensor, nil, axis: axis, keepdims: keepdims, name: name)
101
111
  end
102
112
 
103
113
  def reduce_sum(input_tensor, axis = nil, keepdims: false, name: nil)
104
- op(:reduce_sum, input_tensor, nil, axis: axis, keepdims: keepdims, name: name)
114
+ _op(:reduce_sum, input_tensor, nil, axis: axis, keepdims: keepdims, name: name)
105
115
  end
106
116
 
107
117
  def reduce_prod(input, axis = nil, keepdims: false, name: nil)
108
- op(:reduce_prod, input, nil, axis: axis, keepdims: keepdims, name: name)
118
+ _op(:reduce_prod, input, nil, axis: axis, keepdims: keepdims, name: name)
109
119
  end
110
120
 
111
121
  def concat(values, axis, name: 'concat')
112
- op(:concat, values, nil, axis: axis, name: name)
122
+ _op(:concat, values, nil, axis: axis, name: name)
113
123
  end
114
124
 
115
125
  def reshape(tensor, shape, name: nil)
116
- op(:reshape, tensor, shape, name: name)
126
+ _op(:reshape, tensor, shape, name: name)
117
127
  end
118
128
 
119
129
  def square(tensor, name: nil)
120
- op(:square, tensor, nil, name: name)
130
+ _op(:square, tensor, nil, name: name)
131
+ end
132
+
133
+ def round(tensor, name: nil)
134
+ check_allowed_types(tensor, FLOATING_POINT_TYPES)
135
+ _op(:round, tensor, nil, name: name)
136
+ end
137
+
138
+ def reciprocal(tensor, name: nil)
139
+ _op(:reciprocal, tensor, nil, name: name)
121
140
  end
122
141
 
123
142
  def cond(pred, true_fn, false_fn, name: nil)
124
- op(:cond, true_fn, false_fn, pred: pred, name: name)
143
+ _op(:cond, true_fn, false_fn, pred: pred, name: name)
125
144
  end
126
145
 
127
146
  def where(condition, true_t = nil, false_t = nil, name: nil)
128
- op(:where, true_t, false_t, pred: condition, name: name)
147
+ _op(:where, true_t, false_t, pred: condition, name: name)
129
148
  end
130
149
 
131
150
  def add(input_a, input_b, name: nil)
132
- op(:add, input_a, input_b, name: name)
151
+ _op(:add, input_a, input_b, name: name)
133
152
  end
134
153
 
135
154
  def sub(input_a, input_b, name: nil)
136
- op(:sub, input_a, input_b, name: name)
155
+ _op(:sub, input_a, input_b, name: name)
137
156
  end
138
157
 
139
158
  def max(input_a, input_b, name: nil)
140
159
  check_allowed_types(input_a, NUMERIC_TYPES)
141
160
  check_allowed_types(input_b, NUMERIC_TYPES)
142
161
 
143
- op(:max, input_a, input_b, name: name)
162
+ _op(:max, input_a, input_b, name: name)
144
163
  end
145
164
 
165
+ def maximum(input_a, input_b, name: nil)
166
+ max(input_a, input_b, name: name)
167
+ end
168
+
146
169
  def cast(input, dtype, name: nil)
147
- op(:cast, input, nil, data_type: dtype, name: name)
170
+ _op(:cast, input, nil, data_type: dtype, name: name)
148
171
  end
149
172
 
150
173
  def print(input, data, message: nil, name: nil)
151
- op(:print, input, data, message: message, name: name)
174
+ _op(:print, input, data, message: message, name: name)
152
175
  end
153
176
 
154
177
  def negate(input, options = {})
155
- op(:negate, input, nil, options)
178
+ _op(:negate, input, nil, options)
156
179
  end
157
180
 
158
181
  def equal(input_a, input_b, name: nil)
159
- op(:equal, input_a, input_b, name: name)
182
+ _op(:equal, input_a, input_b, name: name)
160
183
  end
161
184
 
162
185
  def not_equal(input_a, input_b, name: nil)
163
- op(:not_equal, input_a, input_b, name: name)
186
+ _op(:not_equal, input_a, input_b, name: name)
164
187
  end
165
188
 
166
189
  def zeros_like(tensor, dtype: nil, name: nil)
167
- op(:zeros_like, tensor, nil, data_type: dtype, name: name)
190
+ _op(:zeros_like, tensor, nil, data_type: dtype, name: name)
168
191
  end
169
192
 
170
193
  def ones_like(tensor, dtype: nil, name: nil)
171
- op(:ones_like, tensor, nil, data_type: dtype, name: name)
194
+ _op(:ones_like, tensor, nil, data_type: dtype, name: name)
172
195
  end
173
196
 
174
197
  def identity(input, name: nil)
175
- op(:identity, input, nil, name: name)
198
+ _op(:identity, input, nil, name: name)
176
199
  end
177
200
 
178
201
  def multiply(input_a, input_b, name: nil)
179
- op(:mul, input_a, input_b, name: name)
202
+ _op(:mul, input_a, input_b, name: name)
180
203
  end
181
204
 
182
205
  def pow(input_a, input_e, name: nil)
183
- op(:pow, input_a, input_e, name: name)
206
+ _op(:pow, input_a, input_e, name: name)
184
207
  end
185
208
 
186
209
  def abs(input, name: nil)
187
- op(:abs, input, nil, name: name)
210
+ _op(:abs, input, nil, name: name)
188
211
  end
189
212
 
190
213
  def sign(input, name: nil)
191
- op(:sign, input, nil, name: name)
214
+ _op(:sign, input, nil, name: name)
192
215
  end
193
216
 
194
217
  def sin(input, options = {})
195
218
  options[:data_type] ||= :float32
196
219
  check_allowed_types(input, FLOATING_POINT_TYPES)
197
- op(:sin, input, nil, options)
220
+ _op(:sin, input, nil, options)
198
221
  end
199
222
 
200
223
  def cos(input, options = {})
201
224
  options[:data_type] ||= :float32
202
225
  check_allowed_types(input, FLOATING_POINT_TYPES)
203
- op(:cos, input, nil, options)
226
+ _op(:cos, input, nil, options)
204
227
  end
205
228
 
206
229
  def tan(input, options = {})
207
230
  options[:data_type] ||= :float32
208
231
  check_allowed_types(input, FLOATING_POINT_TYPES)
209
- op(:tan, input, nil, options)
232
+ _op(:tan, input, nil, options)
210
233
  end
211
234
 
212
235
  def tanh(input, options = {})
213
236
  options[:data_type] ||= :float32
214
237
  check_allowed_types(input, FLOATING_POINT_TYPES)
215
- op(:tanh, input, nil, options)
238
+ _op(:tanh, input, nil, options)
216
239
  end
217
240
 
218
241
  def sqrt(input, name: nil)
@@ -221,33 +244,44 @@ module TensorStream
221
244
  name: name
222
245
  }
223
246
  check_allowed_types(input, FLOATING_POINT_TYPES)
224
- op(:sqrt, input, nil, options)
247
+ _op(:sqrt, input, nil, options)
225
248
  end
226
249
 
227
250
  def log(input, options = {})
228
251
  options[:data_type] ||= :float32
229
252
  check_allowed_types(input, FLOATING_POINT_TYPES)
230
- op(:log, input, nil, options)
253
+ _op(:log, input, nil, options)
254
+ end
255
+
256
+ def log1p(input, options = {})
257
+ options[:data_type] ||= :float32
258
+ check_allowed_types(input, FLOATING_POINT_TYPES)
259
+ _op(:log1p, input, nil, options)
231
260
  end
232
261
 
233
262
  def exp(input, options = {})
234
263
  options[:data_type] ||= :float32
235
264
  check_allowed_types(input, FLOATING_POINT_TYPES)
236
- op(:exp, input, nil, options)
265
+ _op(:exp, input, nil, options)
266
+ end
267
+
268
+ def sigmoid(input, name: nil)
269
+ check_allowed_types(input, FLOATING_POINT_TYPES)
270
+ _op(:sigmoid, input, nil, name: name)
237
271
  end
238
272
 
239
273
  def matmul(input_a, input_b, transpose_a: false,
240
274
  transpose_b: false,
241
275
  name: nil)
242
- op(:matmul, input_a, input_b, transpose_a: transpose_a, transpose_b: transpose_b, name: name)
276
+ _op(:matmul, input_a, input_b, transpose_a: transpose_a, transpose_b: transpose_b, name: name)
243
277
  end
244
278
 
245
279
  def transpose(tensor, perm: nil, name: 'transpose')
246
- op(:transpose, tensor, nil, perm: perm, name: name)
280
+ _op(:transpose, tensor, nil, perm: perm, name: name)
247
281
  end
248
282
 
249
283
  def pad(tensor, paddings, mode: 'CONSTANT', name: nil)
250
- op(:pad, tensor, nil, paddings: paddings, mode: mode, name: name)
284
+ _op(:pad, tensor, nil, paddings: paddings, mode: mode, name: name)
251
285
  end
252
286
  end
253
287
  end