1 // Copyright 2017 The TensorFlow Authors. All Rights Reserved. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 // DO NOT EDIT 16 // This file was machine generated by github.com/tensorflow/tensorflow/tensorflow/go/genop/internal 17 // 18 // WARNING: This generation of wrapper function for TensorFlow ops is in an 19 // experimental state. The generated API can change without notice. 20 21 package op 22 23 import tf "github.com/tensorflow/tensorflow/tensorflow/go" 24 25 // optionalAttr is an intentionally un-exported type to hide 26 // details of how optional attributes to operations are implemented. 27 type optionalAttr map[string]interface{} 28 29 func makeOutputList(op *tf.Operation, start int, output string) ([]tf.Output, int, error) { 30 size, err := op.OutputListSize(output) 31 if err != nil { 32 return nil, start, err 33 } 34 list := make([]tf.Output, size) 35 for i := 0; i < size; i++ { 36 list[i] = op.Output(start + i) 37 } 38 return list, start + size, nil 39 } 40 41 // FakeQuantWithMinMaxVarsPerChannelGradientAttr is an optional argument to FakeQuantWithMinMaxVarsPerChannelGradient. 42 type FakeQuantWithMinMaxVarsPerChannelGradientAttr func(optionalAttr) 43 44 // FakeQuantWithMinMaxVarsPerChannelGradientNumBits sets the optional num_bits attribute to value. 45 // 46 // value: The bitwidth of the quantization; between 2 and 16, inclusive. 47 // If not specified, defaults to 8 48 func FakeQuantWithMinMaxVarsPerChannelGradientNumBits(value int64) FakeQuantWithMinMaxVarsPerChannelGradientAttr { 49 return func(m optionalAttr) { 50 m["num_bits"] = value 51 } 52 } 53 54 // FakeQuantWithMinMaxVarsPerChannelGradientNarrowRange sets the optional narrow_range attribute to value. 55 // 56 // value: Whether to quantize into 2^num_bits - 1 distinct values. 57 // If not specified, defaults to false 58 func FakeQuantWithMinMaxVarsPerChannelGradientNarrowRange(value bool) FakeQuantWithMinMaxVarsPerChannelGradientAttr { 59 return func(m optionalAttr) { 60 m["narrow_range"] = value 61 } 62 } 63 64 // Compute gradients for a FakeQuantWithMinMaxVarsPerChannel operation. 65 // 66 // Arguments: 67 // gradients: Backpropagated gradients above the FakeQuantWithMinMaxVars operation, 68 // shape one of: `[d]`, `[b, d]`, `[b, h, w, d]`. 69 // inputs: Values passed as inputs to the FakeQuantWithMinMaxVars operation, shape 70 // same as `gradients`. 71 // min, max: Quantization interval, floats of shape `[d]`. 72 // 73 // 74 // 75 // Returns Backpropagated gradients w.r.t. inputs, shape same as 76 // `inputs`: 77 // `gradients * (inputs >= min && inputs <= max)`.Backpropagated gradients w.r.t. min parameter, shape `[d]`: 78 // `sum_per_d(gradients * (inputs < min))`.Backpropagated gradients w.r.t. max parameter, shape `[d]`: 79 // `sum_per_d(gradients * (inputs > max))`. 80 func FakeQuantWithMinMaxVarsPerChannelGradient(scope *Scope, gradients tf.Output, inputs tf.Output, min tf.Output, max tf.Output, optional ...FakeQuantWithMinMaxVarsPerChannelGradientAttr) (backprops_wrt_input tf.Output, backprop_wrt_min tf.Output, backprop_wrt_max tf.Output) { 81 if scope.Err() != nil { 82 return 83 } 84 attrs := map[string]interface{}{} 85 for _, a := range optional { 86 a(attrs) 87 } 88 opspec := tf.OpSpec{ 89 Type: "FakeQuantWithMinMaxVarsPerChannelGradient", 90 Input: []tf.Input{ 91 gradients, inputs, min, max, 92 }, 93 Attrs: attrs, 94 } 95 op := scope.AddOperation(opspec) 96 return op.Output(0), op.Output(1), op.Output(2) 97 } 98 99 // FakeQuantWithMinMaxVarsPerChannelAttr is an optional argument to FakeQuantWithMinMaxVarsPerChannel. 100 type FakeQuantWithMinMaxVarsPerChannelAttr func(optionalAttr) 101 102 // FakeQuantWithMinMaxVarsPerChannelNumBits sets the optional num_bits attribute to value. 103 // If not specified, defaults to 8 104 func FakeQuantWithMinMaxVarsPerChannelNumBits(value int64) FakeQuantWithMinMaxVarsPerChannelAttr { 105 return func(m optionalAttr) { 106 m["num_bits"] = value 107 } 108 } 109 110 // FakeQuantWithMinMaxVarsPerChannelNarrowRange sets the optional narrow_range attribute to value. 111 // If not specified, defaults to false 112 func FakeQuantWithMinMaxVarsPerChannelNarrowRange(value bool) FakeQuantWithMinMaxVarsPerChannelAttr { 113 return func(m optionalAttr) { 114 m["narrow_range"] = value 115 } 116 } 117 118 // Fake-quantize the 'inputs' tensor of type float and one of the shapes: `[d]`, 119 // 120 // `[b, d]` `[b, h, w, d]` via per-channel floats `min` and `max` of shape `[d]` 121 // to 'outputs' tensor of same shape as `inputs`. 122 // 123 // `[min; max]` define the clamping range for the `inputs` data. 124 // `inputs` values are quantized into the quantization range (`[0; 2^num_bits - 1]` 125 // when `narrow_range` is false and `[1; 2^num_bits - 1]` when it is true) and 126 // then de-quantized and output as floats in `[min; max]` interval. 127 // `num_bits` is the bitwidth of the quantization; between 2 and 16, inclusive. 128 // 129 // This operation has a gradient and thus allows for training `min` and `max` 130 // values. 131 func FakeQuantWithMinMaxVarsPerChannel(scope *Scope, inputs tf.Output, min tf.Output, max tf.Output, optional ...FakeQuantWithMinMaxVarsPerChannelAttr) (outputs tf.Output) { 132 if scope.Err() != nil { 133 return 134 } 135 attrs := map[string]interface{}{} 136 for _, a := range optional { 137 a(attrs) 138 } 139 opspec := tf.OpSpec{ 140 Type: "FakeQuantWithMinMaxVarsPerChannel", 141 Input: []tf.Input{ 142 inputs, min, max, 143 }, 144 Attrs: attrs, 145 } 146 op := scope.AddOperation(opspec) 147 return op.Output(0) 148 } 149 150 // FakeQuantWithMinMaxVarsGradientAttr is an optional argument to FakeQuantWithMinMaxVarsGradient. 151 type FakeQuantWithMinMaxVarsGradientAttr func(optionalAttr) 152 153 // FakeQuantWithMinMaxVarsGradientNumBits sets the optional num_bits attribute to value. 154 // 155 // value: The bitwidth of the quantization; between 2 and 8, inclusive. 156 // If not specified, defaults to 8 157 func FakeQuantWithMinMaxVarsGradientNumBits(value int64) FakeQuantWithMinMaxVarsGradientAttr { 158 return func(m optionalAttr) { 159 m["num_bits"] = value 160 } 161 } 162 163 // FakeQuantWithMinMaxVarsGradientNarrowRange sets the optional narrow_range attribute to value. 164 // 165 // value: Whether to quantize into 2^num_bits - 1 distinct values. 166 // If not specified, defaults to false 167 func FakeQuantWithMinMaxVarsGradientNarrowRange(value bool) FakeQuantWithMinMaxVarsGradientAttr { 168 return func(m optionalAttr) { 169 m["narrow_range"] = value 170 } 171 } 172 173 // Compute gradients for a FakeQuantWithMinMaxVars operation. 174 // 175 // Arguments: 176 // gradients: Backpropagated gradients above the FakeQuantWithMinMaxVars operation. 177 // inputs: Values passed as inputs to the FakeQuantWithMinMaxVars operation. 178 // min, max: Quantization interval, scalar floats. 179 // 180 // 181 // 182 // Returns Backpropagated gradients w.r.t. inputs: 183 // `gradients * (inputs >= min && inputs <= max)`.Backpropagated gradients w.r.t. min parameter: 184 // `sum(gradients * (inputs < min))`.Backpropagated gradients w.r.t. max parameter: 185 // `sum(gradients * (inputs > max))`. 186 func FakeQuantWithMinMaxVarsGradient(scope *Scope, gradients tf.Output, inputs tf.Output, min tf.Output, max tf.Output, optional ...FakeQuantWithMinMaxVarsGradientAttr) (backprops_wrt_input tf.Output, backprop_wrt_min tf.Output, backprop_wrt_max tf.Output) { 187 if scope.Err() != nil { 188 return 189 } 190 attrs := map[string]interface{}{} 191 for _, a := range optional { 192 a(attrs) 193 } 194 opspec := tf.OpSpec{ 195 Type: "FakeQuantWithMinMaxVarsGradient", 196 Input: []tf.Input{ 197 gradients, inputs, min, max, 198 }, 199 Attrs: attrs, 200 } 201 op := scope.AddOperation(opspec) 202 return op.Output(0), op.Output(1), op.Output(2) 203 } 204 205 // FakeQuantWithMinMaxArgsGradientAttr is an optional argument to FakeQuantWithMinMaxArgsGradient. 206 type FakeQuantWithMinMaxArgsGradientAttr func(optionalAttr) 207 208 // FakeQuantWithMinMaxArgsGradientMin sets the optional min attribute to value. 209 // If not specified, defaults to -6 210 func FakeQuantWithMinMaxArgsGradientMin(value float32) FakeQuantWithMinMaxArgsGradientAttr { 211 return func(m optionalAttr) { 212 m["min"] = value 213 } 214 } 215 216 // FakeQuantWithMinMaxArgsGradientMax sets the optional max attribute to value. 217 // If not specified, defaults to 6 218 func FakeQuantWithMinMaxArgsGradientMax(value float32) FakeQuantWithMinMaxArgsGradientAttr { 219 return func(m optionalAttr) { 220 m["max"] = value 221 } 222 } 223 224 // FakeQuantWithMinMaxArgsGradientNumBits sets the optional num_bits attribute to value. 225 // If not specified, defaults to 8 226 func FakeQuantWithMinMaxArgsGradientNumBits(value int64) FakeQuantWithMinMaxArgsGradientAttr { 227 return func(m optionalAttr) { 228 m["num_bits"] = value 229 } 230 } 231 232 // FakeQuantWithMinMaxArgsGradientNarrowRange sets the optional narrow_range attribute to value. 233 // If not specified, defaults to false 234 func FakeQuantWithMinMaxArgsGradientNarrowRange(value bool) FakeQuantWithMinMaxArgsGradientAttr { 235 return func(m optionalAttr) { 236 m["narrow_range"] = value 237 } 238 } 239 240 // Compute gradients for a FakeQuantWithMinMaxArgs operation. 241 // 242 // Arguments: 243 // gradients: Backpropagated gradients above the FakeQuantWithMinMaxArgs operation. 244 // inputs: Values passed as inputs to the FakeQuantWithMinMaxArgs operation. 245 // 246 // Returns Backpropagated gradients below the FakeQuantWithMinMaxArgs operation: 247 // `gradients * (inputs >= min && inputs <= max)`. 248 func FakeQuantWithMinMaxArgsGradient(scope *Scope, gradients tf.Output, inputs tf.Output, optional ...FakeQuantWithMinMaxArgsGradientAttr) (backprops tf.Output) { 249 if scope.Err() != nil { 250 return 251 } 252 attrs := map[string]interface{}{} 253 for _, a := range optional { 254 a(attrs) 255 } 256 opspec := tf.OpSpec{ 257 Type: "FakeQuantWithMinMaxArgsGradient", 258 Input: []tf.Input{ 259 gradients, inputs, 260 }, 261 Attrs: attrs, 262 } 263 op := scope.AddOperation(opspec) 264 return op.Output(0) 265 } 266 267 // FakeQuantWithMinMaxArgsAttr is an optional argument to FakeQuantWithMinMaxArgs. 268 type FakeQuantWithMinMaxArgsAttr func(optionalAttr) 269 270 // FakeQuantWithMinMaxArgsMin sets the optional min attribute to value. 271 // If not specified, defaults to -6 272 func FakeQuantWithMinMaxArgsMin(value float32) FakeQuantWithMinMaxArgsAttr { 273 return func(m optionalAttr) { 274 m["min"] = value 275 } 276 } 277 278 // FakeQuantWithMinMaxArgsMax sets the optional max attribute to value. 279 // If not specified, defaults to 6 280 func FakeQuantWithMinMaxArgsMax(value float32) FakeQuantWithMinMaxArgsAttr { 281 return func(m optionalAttr) { 282 m["max"] = value 283 } 284 } 285 286 // FakeQuantWithMinMaxArgsNumBits sets the optional num_bits attribute to value. 287 // If not specified, defaults to 8 288 func FakeQuantWithMinMaxArgsNumBits(value int64) FakeQuantWithMinMaxArgsAttr { 289 return func(m optionalAttr) { 290 m["num_bits"] = value 291 } 292 } 293 294 // FakeQuantWithMinMaxArgsNarrowRange sets the optional narrow_range attribute to value. 295 // If not specified, defaults to false 296 func FakeQuantWithMinMaxArgsNarrowRange(value bool) FakeQuantWithMinMaxArgsAttr { 297 return func(m optionalAttr) { 298 m["narrow_range"] = value 299 } 300 } 301 302 // Fake-quantize the 'inputs' tensor, type float to 'outputs' tensor of same type. 303 // 304 // Attributes `[min; max]` define the clamping range for the `inputs` data. 305 // `inputs` values are quantized into the quantization range (`[0; 2^num_bits - 1]` 306 // when `narrow_range` is false and `[1; 2^num_bits - 1]` when it is true) and 307 // then de-quantized and output as floats in `[min; max]` interval. 308 // `num_bits` is the bitwidth of the quantization; between 2 and 16, inclusive. 309 // 310 // Quantization is called fake since the output is still in floating point. 311 func FakeQuantWithMinMaxArgs(scope *Scope, inputs tf.Output, optional ...FakeQuantWithMinMaxArgsAttr) (outputs tf.Output) { 312 if scope.Err() != nil { 313 return 314 } 315 attrs := map[string]interface{}{} 316 for _, a := range optional { 317 a(attrs) 318 } 319 opspec := tf.OpSpec{ 320 Type: "FakeQuantWithMinMaxArgs", 321 Input: []tf.Input{ 322 inputs, 323 }, 324 Attrs: attrs, 325 } 326 op := scope.AddOperation(opspec) 327 return op.Output(0) 328 } 329 330 // Subtracts sparse `updates` from an existing tensor according to `indices`. 331 // 332 // This operation creates a new tensor by subtracting sparse `updates` from the 333 // passed in `tensor`. 334 // This operation is very similar to `tf.scatter_nd_sub`, except that the updates 335 // are subtracted from an existing tensor (as opposed to a variable). If the memory 336 // for the existing tensor cannot be re-used, a copy is made and updated. 337 // 338 // `indices` is an integer tensor containing indices into a new tensor of shape 339 // `shape`. The last dimension of `indices` can be at most the rank of `shape`: 340 // 341 // indices.shape[-1] <= shape.rank 342 // 343 // The last dimension of `indices` corresponds to indices into elements 344 // (if `indices.shape[-1] = shape.rank`) or slices 345 // (if `indices.shape[-1] < shape.rank`) along dimension `indices.shape[-1]` of 346 // `shape`. `updates` is a tensor with shape 347 // 348 // indices.shape[:-1] + shape[indices.shape[-1]:] 349 // 350 // The simplest form of tensor_scatter_sub is to subtract individual elements 351 // from a tensor by index. For example, say we want to insert 4 scattered elements 352 // in a rank-1 tensor with 8 elements. 353 // 354 // In Python, this scatter subtract operation would look like this: 355 // 356 // ```python 357 // indices = tf.constant([[4], [3], [1], [7]]) 358 // updates = tf.constant([9, 10, 11, 12]) 359 // tensor = tf.ones([8], dtype=tf.int32) 360 // updated = tf.tensor_scatter_sub(tensor, indices, updates) 361 // with tf.Session() as sess: 362 // print(sess.run(scatter)) 363 // ``` 364 // 365 // The resulting tensor would look like this: 366 // 367 // [1, -10, 1, -9, -8, 1, 1, -11] 368 // 369 // We can also, insert entire slices of a higher rank tensor all at once. For 370 // example, if we wanted to insert two slices in the first dimension of a 371 // rank-3 tensor with two matrices of new values. 372 // 373 // In Python, this scatter add operation would look like this: 374 // 375 // ```python 376 // indices = tf.constant([[0], [2]]) 377 // updates = tf.constant([[[5, 5, 5, 5], [6, 6, 6, 6], 378 // [7, 7, 7, 7], [8, 8, 8, 8]], 379 // [[5, 5, 5, 5], [6, 6, 6, 6], 380 // [7, 7, 7, 7], [8, 8, 8, 8]]]) 381 // tensor = tf.ones([4, 4, 4]) 382 // updated = tf.tensor_scatter_sub(tensor, indices, updates) 383 // with tf.Session() as sess: 384 // print(sess.run(scatter)) 385 // ``` 386 // 387 // The resulting tensor would look like this: 388 // 389 // [[[-4, -4, -4, -4], [-5, -5, -5, -5], [-6, -6, -6, -6], [-7, -7, -7, -7]], 390 // [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]], 391 // [[-4, -4, -4, -4], [-5, -5, -5, -5], [-6, -6, -6, -6], [-7, -7, -7, -7]], 392 // [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]] 393 // 394 // Note that on CPU, if an out of bound index is found, an error is returned. 395 // On GPU, if an out of bound index is found, the index is ignored. 396 // 397 // Arguments: 398 // tensor: Tensor to copy/update. 399 // indices: Index tensor. 400 // updates: Updates to scatter into output. 401 // 402 // Returns A new tensor copied from tensor and updates subtracted according to the indices. 403 func TensorScatterSub(scope *Scope, tensor tf.Output, indices tf.Output, updates tf.Output) (output tf.Output) { 404 if scope.Err() != nil { 405 return 406 } 407 opspec := tf.OpSpec{ 408 Type: "TensorScatterSub", 409 Input: []tf.Input{ 410 tensor, indices, updates, 411 }, 412 } 413 op := scope.AddOperation(opspec) 414 return op.Output(0) 415 } 416 417 // Scatter `updates` into an existing tensor according to `indices`. 418 // 419 // This operation creates a new tensor by applying sparse `updates` to the passed 420 // in `tensor`. 421 // This operation is very similar to `tf.scatter_nd`, except that the updates are 422 // scattered onto an existing tensor (as opposed to a zero-tensor). If the memory 423 // for the existing tensor cannot be re-used, a copy is made and updated. 424 // 425 // If `indices` contains duplicates, then their updates are accumulated (summed). 426 // 427 // **WARNING**: The order in which updates are applied is nondeterministic, so the 428 // output will be nondeterministic if `indices` contains duplicates -- because 429 // of some numerical approximation issues, numbers summed in different order 430 // may yield different results. 431 // 432 // `indices` is an integer tensor containing indices into a new tensor of shape 433 // `shape`. The last dimension of `indices` can be at most the rank of `shape`: 434 // 435 // indices.shape[-1] <= shape.rank 436 // 437 // The last dimension of `indices` corresponds to indices into elements 438 // (if `indices.shape[-1] = shape.rank`) or slices 439 // (if `indices.shape[-1] < shape.rank`) along dimension `indices.shape[-1]` of 440 // `shape`. `updates` is a tensor with shape 441 // 442 // indices.shape[:-1] + shape[indices.shape[-1]:] 443 // 444 // The simplest form of scatter is to insert individual elements in a tensor by 445 // index. For example, say we want to insert 4 scattered elements in a rank-1 446 // tensor with 8 elements. 447 // 448 // <div style="width:70%; margin:auto; margin-bottom:10px; margin-top:20px;"> 449 // <img style="width:100%" src="https://www.tensorflow.org/images/ScatterNd1.png" alt> 450 // </div> 451 // 452 // In Python, this scatter operation would look like this: 453 // 454 // ```python 455 // indices = tf.constant([[4], [3], [1], [7]]) 456 // updates = tf.constant([9, 10, 11, 12]) 457 // tensor = tf.ones([8], dtype=tf.int32) 458 // updated = tf.tensor_scatter_update(tensor, indices, updates) 459 // with tf.Session() as sess: 460 // print(sess.run(scatter)) 461 // ``` 462 // 463 // The resulting tensor would look like this: 464 // 465 // [1, 11, 1, 10, 9, 1, 1, 12] 466 // 467 // We can also, insert entire slices of a higher rank tensor all at once. For 468 // example, if we wanted to insert two slices in the first dimension of a 469 // rank-3 tensor with two matrices of new values. 470 // 471 // In Python, this scatter operation would look like this: 472 // 473 // ```python 474 // indices = tf.constant([[0], [2]]) 475 // updates = tf.constant([[[5, 5, 5, 5], [6, 6, 6, 6], 476 // [7, 7, 7, 7], [8, 8, 8, 8]], 477 // [[5, 5, 5, 5], [6, 6, 6, 6], 478 // [7, 7, 7, 7], [8, 8, 8, 8]]]) 479 // tensor = tf.ones([4, 4, 4]) 480 // updated = tf.tensor_scatter_update(tensor, indices, updates) 481 // with tf.Session() as sess: 482 // print(sess.run(scatter)) 483 // ``` 484 // 485 // The resulting tensor would look like this: 486 // 487 // [[[5, 5, 5, 5], [6, 6, 6, 6], [7, 7, 7, 7], [8, 8, 8, 8]], 488 // [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]], 489 // [[5, 5, 5, 5], [6, 6, 6, 6], [7, 7, 7, 7], [8, 8, 8, 8]], 490 // [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]] 491 // 492 // Note that on CPU, if an out of bound index is found, an error is returned. 493 // On GPU, if an out of bound index is found, the index is ignored. 494 // 495 // Arguments: 496 // tensor: Tensor to copy/update. 497 // indices: Index tensor. 498 // updates: Updates to scatter into output. 499 // 500 // Returns A new tensor with the given shape and updates applied according 501 // to the indices. 502 func TensorScatterUpdate(scope *Scope, tensor tf.Output, indices tf.Output, updates tf.Output) (output tf.Output) { 503 if scope.Err() != nil { 504 return 505 } 506 opspec := tf.OpSpec{ 507 Type: "TensorScatterUpdate", 508 Input: []tf.Input{ 509 tensor, indices, updates, 510 }, 511 } 512 op := scope.AddOperation(opspec) 513 return op.Output(0) 514 } 515 516 // Scatter `updates` into a new tensor according to `indices`. 517 // 518 // Creates a new tensor by applying sparse `updates` to individual values or 519 // slices within a tensor (initially zero for numeric, empty for string) of 520 // the given `shape` according to indices. This operator is the inverse of the 521 // `tf.gather_nd` operator which extracts values or slices from a given tensor. 522 // 523 // This operation is similar to tensor_scatter_add, except that the tensor is 524 // zero-initialized. Calling `tf.scatter_nd(indices, values, shape)` is identical 525 // to `tensor_scatter_add(tf.zeros(shape, values.dtype), indices, values)` 526 // 527 // If `indices` contains duplicates, then their updates are accumulated (summed). 528 // 529 // **WARNING**: The order in which updates are applied is nondeterministic, so the 530 // output will be nondeterministic if `indices` contains duplicates -- because 531 // of some numerical approximation issues, numbers summed in different order 532 // may yield different results. 533 // 534 // `indices` is an integer tensor containing indices into a new tensor of shape 535 // `shape`. The last dimension of `indices` can be at most the rank of `shape`: 536 // 537 // indices.shape[-1] <= shape.rank 538 // 539 // The last dimension of `indices` corresponds to indices into elements 540 // (if `indices.shape[-1] = shape.rank`) or slices 541 // (if `indices.shape[-1] < shape.rank`) along dimension `indices.shape[-1]` of 542 // `shape`. `updates` is a tensor with shape 543 // 544 // indices.shape[:-1] + shape[indices.shape[-1]:] 545 // 546 // The simplest form of scatter is to insert individual elements in a tensor by 547 // index. For example, say we want to insert 4 scattered elements in a rank-1 548 // tensor with 8 elements. 549 // 550 // <div style="width:70%; margin:auto; margin-bottom:10px; margin-top:20px;"> 551 // <img style="width:100%" src="https://www.tensorflow.org/images/ScatterNd1.png" alt> 552 // </div> 553 // 554 // In Python, this scatter operation would look like this: 555 // 556 // ```python 557 // indices = tf.constant([[4], [3], [1], [7]]) 558 // updates = tf.constant([9, 10, 11, 12]) 559 // shape = tf.constant([8]) 560 // scatter = tf.scatter_nd(indices, updates, shape) 561 // with tf.Session() as sess: 562 // print(sess.run(scatter)) 563 // ``` 564 // 565 // The resulting tensor would look like this: 566 // 567 // [0, 11, 0, 10, 9, 0, 0, 12] 568 // 569 // We can also, insert entire slices of a higher rank tensor all at once. For 570 // example, if we wanted to insert two slices in the first dimension of a 571 // rank-3 tensor with two matrices of new values. 572 // 573 // <div style="width:70%; margin:auto; margin-bottom:10px; margin-top:20px;"> 574 // <img style="width:100%" src="https://www.tensorflow.org/images/ScatterNd2.png" alt> 575 // </div> 576 // 577 // In Python, this scatter operation would look like this: 578 // 579 // ```python 580 // indices = tf.constant([[0], [2]]) 581 // updates = tf.constant([[[5, 5, 5, 5], [6, 6, 6, 6], 582 // [7, 7, 7, 7], [8, 8, 8, 8]], 583 // [[5, 5, 5, 5], [6, 6, 6, 6], 584 // [7, 7, 7, 7], [8, 8, 8, 8]]]) 585 // shape = tf.constant([4, 4, 4]) 586 // scatter = tf.scatter_nd(indices, updates, shape) 587 // with tf.Session() as sess: 588 // print(sess.run(scatter)) 589 // ``` 590 // 591 // The resulting tensor would look like this: 592 // 593 // [[[5, 5, 5, 5], [6, 6, 6, 6], [7, 7, 7, 7], [8, 8, 8, 8]], 594 // [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]], 595 // [[5, 5, 5, 5], [6, 6, 6, 6], [7, 7, 7, 7], [8, 8, 8, 8]], 596 // [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]] 597 // 598 // Note that on CPU, if an out of bound index is found, an error is returned. 599 // On GPU, if an out of bound index is found, the index is ignored. 600 // 601 // Arguments: 602 // indices: Index tensor. 603 // updates: Updates to scatter into output. 604 // shape: 1-D. The shape of the resulting tensor. 605 // 606 // Returns A new tensor with the given shape and updates applied according 607 // to the indices. 608 func ScatterNd(scope *Scope, indices tf.Output, updates tf.Output, shape tf.Output) (output tf.Output) { 609 if scope.Err() != nil { 610 return 611 } 612 opspec := tf.OpSpec{ 613 Type: "ScatterNd", 614 Input: []tf.Input{ 615 indices, updates, shape, 616 }, 617 } 618 op := scope.AddOperation(opspec) 619 return op.Output(0) 620 } 621 622 // Bitcasts a tensor from one type to another without copying data. 623 // 624 // Given a tensor `input`, this operation returns a tensor that has the same buffer 625 // data as `input` with datatype `type`. 626 // 627 // If the input datatype `T` is larger than the output datatype `type` then the 628 // shape changes from [...] to [..., sizeof(`T`)/sizeof(`type`)]. 629 // 630 // If `T` is smaller than `type`, the operator requires that the rightmost 631 // dimension be equal to sizeof(`type`)/sizeof(`T`). The shape then goes from 632 // [..., sizeof(`type`)/sizeof(`T`)] to [...]. 633 // 634 // *NOTE*: Bitcast is implemented as a low-level cast, so machines with different 635 // endian orderings will give different results. 636 func Bitcast(scope *Scope, input tf.Output, type_ tf.DataType) (output tf.Output) { 637 if scope.Err() != nil { 638 return 639 } 640 attrs := map[string]interface{}{"type": type_} 641 opspec := tf.OpSpec{ 642 Type: "Bitcast", 643 Input: []tf.Input{ 644 input, 645 }, 646 Attrs: attrs, 647 } 648 op := scope.AddOperation(opspec) 649 return op.Output(0) 650 } 651 652 // SpaceToDepthAttr is an optional argument to SpaceToDepth. 653 type SpaceToDepthAttr func(optionalAttr) 654 655 // SpaceToDepthDataFormat sets the optional data_format attribute to value. 656 // If not specified, defaults to "NHWC" 657 func SpaceToDepthDataFormat(value string) SpaceToDepthAttr { 658 return func(m optionalAttr) { 659 m["data_format"] = value 660 } 661 } 662 663 // SpaceToDepth for tensors of type T. 664 // 665 // Rearranges blocks of spatial data, into depth. More specifically, 666 // this op outputs a copy of the input tensor where values from the `height` 667 // and `width` dimensions are moved to the `depth` dimension. 668 // The attr `block_size` indicates the input block size. 669 // 670 // * Non-overlapping blocks of size `block_size x block size` are rearranged 671 // into depth at each location. 672 // * The depth of the output tensor is `block_size * block_size * input_depth`. 673 // * The Y, X coordinates within each block of the input become the high order 674 // component of the output channel index. 675 // * The input tensor's height and width must be divisible by block_size. 676 // 677 // The `data_format` attr specifies the layout of the input and output tensors 678 // with the following options: 679 // "NHWC": `[ batch, height, width, channels ]` 680 // "NCHW": `[ batch, channels, height, width ]` 681 // "NCHW_VECT_C": 682 // `qint8 [ batch, channels / 4, height, width, 4 ]` 683 // 684 // It is useful to consider the operation as transforming a 6-D Tensor. 685 // e.g. for data_format = NHWC, 686 // Each element in the input tensor can be specified via 6 coordinates, 687 // ordered by decreasing memory layout significance as: 688 // n,oY,bY,oX,bX,iC (where n=batch index, oX, oY means X or Y coordinates 689 // within the output image, bX, bY means coordinates 690 // within the input block, iC means input channels). 691 // The output would be a transpose to the following layout: 692 // n,oY,oX,bY,bX,iC 693 // 694 // This operation is useful for resizing the activations between convolutions 695 // (but keeping all data), e.g. instead of pooling. It is also useful for training 696 // purely convolutional models. 697 // 698 // For example, given an input of shape `[1, 2, 2, 1]`, data_format = "NHWC" and 699 // block_size = 2: 700 // 701 // ``` 702 // x = [[[[1], [2]], 703 // [[3], [4]]]] 704 // ``` 705 // 706 // This operation will output a tensor of shape `[1, 1, 1, 4]`: 707 // 708 // ``` 709 // [[[[1, 2, 3, 4]]]] 710 // ``` 711 // 712 // Here, the input has a batch of 1 and each batch element has shape `[2, 2, 1]`, 713 // the corresponding output will have a single element (i.e. width and height are 714 // both 1) and will have a depth of 4 channels (1 * block_size * block_size). 715 // The output element shape is `[1, 1, 4]`. 716 // 717 // For an input tensor with larger depth, here of shape `[1, 2, 2, 3]`, e.g. 718 // 719 // ``` 720 // x = [[[[1, 2, 3], [4, 5, 6]], 721 // [[7, 8, 9], [10, 11, 12]]]] 722 // ``` 723 // 724 // This operation, for block_size of 2, will return the following tensor of shape 725 // `[1, 1, 1, 12]` 726 // 727 // ``` 728 // [[[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]]]] 729 // ``` 730 // 731 // Similarly, for the following input of shape `[1 4 4 1]`, and a block size of 2: 732 // 733 // ``` 734 // x = [[[[1], [2], [5], [6]], 735 // [[3], [4], [7], [8]], 736 // [[9], [10], [13], [14]], 737 // [[11], [12], [15], [16]]]] 738 // ``` 739 // 740 // the operator will return the following tensor of shape `[1 2 2 4]`: 741 // 742 // ``` 743 // x = [[[[1, 2, 3, 4], 744 // [5, 6, 7, 8]], 745 // [[9, 10, 11, 12], 746 // [13, 14, 15, 16]]]] 747 // ``` 748 // 749 // Arguments: 750 // 751 // block_size: The size of the spatial block. 752 func SpaceToDepth(scope *Scope, input tf.Output, block_size int64, optional ...SpaceToDepthAttr) (output tf.Output) { 753 if scope.Err() != nil { 754 return 755 } 756 attrs := map[string]interface{}{"block_size": block_size} 757 for _, a := range optional { 758 a(attrs) 759 } 760 opspec := tf.OpSpec{ 761 Type: "SpaceToDepth", 762 Input: []tf.Input{ 763 input, 764 }, 765 Attrs: attrs, 766 } 767 op := scope.AddOperation(opspec) 768 return op.Output(0) 769 } 770 771 // SpaceToBatch for 4-D tensors of type T. 772 // 773 // This is a legacy version of the more general SpaceToBatchND. 774 // 775 // Zero-pads and then rearranges (permutes) blocks of spatial data into batch. 776 // More specifically, this op outputs a copy of the input tensor where values from 777 // the `height` and `width` dimensions are moved to the `batch` dimension. After 778 // the zero-padding, both `height` and `width` of the input must be divisible by the 779 // block size. 780 // 781 // Arguments: 782 // input: 4-D with shape `[batch, height, width, depth]`. 783 // paddings: 2-D tensor of non-negative integers with shape `[2, 2]`. It specifies 784 // the padding of the input with zeros across the spatial dimensions as follows: 785 // 786 // paddings = [[pad_top, pad_bottom], [pad_left, pad_right]] 787 // 788 // The effective spatial dimensions of the zero-padded input tensor will be: 789 // 790 // height_pad = pad_top + height + pad_bottom 791 // width_pad = pad_left + width + pad_right 792 // 793 // The attr `block_size` must be greater than one. It indicates the block size. 794 // 795 // * Non-overlapping blocks of size `block_size x block size` in the height and 796 // width dimensions are rearranged into the batch dimension at each location. 797 // * The batch of the output tensor is `batch * block_size * block_size`. 798 // * Both height_pad and width_pad must be divisible by block_size. 799 // 800 // The shape of the output will be: 801 // 802 // [batch*block_size*block_size, height_pad/block_size, width_pad/block_size, 803 // depth] 804 // 805 // Some examples: 806 // 807 // (1) For the following input of shape `[1, 2, 2, 1]` and block_size of 2: 808 // 809 // ``` 810 // x = [[[[1], [2]], [[3], [4]]]] 811 // ``` 812 // 813 // The output tensor has shape `[4, 1, 1, 1]` and value: 814 // 815 // ``` 816 // [[[[1]]], [[[2]]], [[[3]]], [[[4]]]] 817 // ``` 818 // 819 // (2) For the following input of shape `[1, 2, 2, 3]` and block_size of 2: 820 // 821 // ``` 822 // x = [[[[1, 2, 3], [4, 5, 6]], 823 // [[7, 8, 9], [10, 11, 12]]]] 824 // ``` 825 // 826 // The output tensor has shape `[4, 1, 1, 3]` and value: 827 // 828 // ``` 829 // [[[1, 2, 3]], [[4, 5, 6]], [[7, 8, 9]], [[10, 11, 12]]] 830 // ``` 831 // 832 // (3) For the following input of shape `[1, 4, 4, 1]` and block_size of 2: 833 // 834 // ``` 835 // x = [[[[1], [2], [3], [4]], 836 // [[5], [6], [7], [8]], 837 // [[9], [10], [11], [12]], 838 // [[13], [14], [15], [16]]]] 839 // ``` 840 // 841 // The output tensor has shape `[4, 2, 2, 1]` and value: 842 // 843 // ``` 844 // x = [[[[1], [3]], [[9], [11]]], 845 // [[[2], [4]], [[10], [12]]], 846 // [[[5], [7]], [[13], [15]]], 847 // [[[6], [8]], [[14], [16]]]] 848 // ``` 849 // 850 // (4) For the following input of shape `[2, 2, 4, 1]` and block_size of 2: 851 // 852 // ``` 853 // x = [[[[1], [2], [3], [4]], 854 // [[5], [6], [7], [8]]], 855 // [[[9], [10], [11], [12]], 856 // [[13], [14], [15], [16]]]] 857 // ``` 858 // 859 // The output tensor has shape `[8, 1, 2, 1]` and value: 860 // 861 // ``` 862 // x = [[[[1], [3]]], [[[9], [11]]], [[[2], [4]]], [[[10], [12]]], 863 // [[[5], [7]]], [[[13], [15]]], [[[6], [8]]], [[[14], [16]]]] 864 // ``` 865 // 866 // Among others, this operation is useful for reducing atrous convolution into 867 // regular convolution. 868 // 869 func SpaceToBatch(scope *Scope, input tf.Output, paddings tf.Output, block_size int64) (output tf.Output) { 870 if scope.Err() != nil { 871 return 872 } 873 attrs := map[string]interface{}{"block_size": block_size} 874 opspec := tf.OpSpec{ 875 Type: "SpaceToBatch", 876 Input: []tf.Input{ 877 input, paddings, 878 }, 879 Attrs: attrs, 880 } 881 op := scope.AddOperation(opspec) 882 return op.Output(0) 883 } 884 885 // SpaceToBatch for N-D tensors of type T. 886 // 887 // This operation divides "spatial" dimensions `[1, ..., M]` of the input into a 888 // grid of blocks of shape `block_shape`, and interleaves these blocks with the 889 // "batch" dimension (0) such that in the output, the spatial dimensions 890 // `[1, ..., M]` correspond to the position within the grid, and the batch 891 // dimension combines both the position within a spatial block and the original 892 // batch position. Prior to division into blocks, the spatial dimensions of the 893 // input are optionally zero padded according to `paddings`. See below for a 894 // precise description. 895 // 896 // Arguments: 897 // input: N-D with shape `input_shape = [batch] + spatial_shape + remaining_shape`, 898 // where spatial_shape has `M` dimensions. 899 // block_shape: 1-D with shape `[M]`, all values must be >= 1. 900 // paddings: 2-D with shape `[M, 2]`, all values must be >= 0. 901 // `paddings[i] = [pad_start, pad_end]` specifies the padding for input dimension 902 // `i + 1`, which corresponds to spatial dimension `i`. It is required that 903 // `block_shape[i]` divides `input_shape[i + 1] + pad_start + pad_end`. 904 // 905 // This operation is equivalent to the following steps: 906 // 907 // 1. Zero-pad the start and end of dimensions `[1, ..., M]` of the 908 // input according to `paddings` to produce `padded` of shape `padded_shape`. 909 // 910 // 2. Reshape `padded` to `reshaped_padded` of shape: 911 // 912 // [batch] + 913 // [padded_shape[1] / block_shape[0], 914 // block_shape[0], 915 // ..., 916 // padded_shape[M] / block_shape[M-1], 917 // block_shape[M-1]] + 918 // remaining_shape 919 // 920 // 3. Permute dimensions of `reshaped_padded` to produce 921 // `permuted_reshaped_padded` of shape: 922 // 923 // block_shape + 924 // [batch] + 925 // [padded_shape[1] / block_shape[0], 926 // ..., 927 // padded_shape[M] / block_shape[M-1]] + 928 // remaining_shape 929 // 930 // 4. Reshape `permuted_reshaped_padded` to flatten `block_shape` into the batch 931 // dimension, producing an output tensor of shape: 932 // 933 // [batch * prod(block_shape)] + 934 // [padded_shape[1] / block_shape[0], 935 // ..., 936 // padded_shape[M] / block_shape[M-1]] + 937 // remaining_shape 938 // 939 // Some examples: 940 // 941 // (1) For the following input of shape `[1, 2, 2, 1]`, `block_shape = [2, 2]`, and 942 // `paddings = [[0, 0], [0, 0]]`: 943 // 944 // ``` 945 // x = [[[[1], [2]], [[3], [4]]]] 946 // ``` 947 // 948 // The output tensor has shape `[4, 1, 1, 1]` and value: 949 // 950 // ``` 951 // [[[[1]]], [[[2]]], [[[3]]], [[[4]]]] 952 // ``` 953 // 954 // (2) For the following input of shape `[1, 2, 2, 3]`, `block_shape = [2, 2]`, and 955 // `paddings = [[0, 0], [0, 0]]`: 956 // 957 // ``` 958 // x = [[[[1, 2, 3], [4, 5, 6]], 959 // [[7, 8, 9], [10, 11, 12]]]] 960 // ``` 961 // 962 // The output tensor has shape `[4, 1, 1, 3]` and value: 963 // 964 // ``` 965 // [[[1, 2, 3]], [[4, 5, 6]], [[7, 8, 9]], [[10, 11, 12]]] 966 // ``` 967 // 968 // (3) For the following input of shape `[1, 4, 4, 1]`, `block_shape = [2, 2]`, and 969 // `paddings = [[0, 0], [0, 0]]`: 970 // 971 // ``` 972 // x = [[[[1], [2], [3], [4]], 973 // [[5], [6], [7], [8]], 974 // [[9], [10], [11], [12]], 975 // [[13], [14], [15], [16]]]] 976 // ``` 977 // 978 // The output tensor has shape `[4, 2, 2, 1]` and value: 979 // 980 // ``` 981 // x = [[[[1], [3]], [[9], [11]]], 982 // [[[2], [4]], [[10], [12]]], 983 // [[[5], [7]], [[13], [15]]], 984 // [[[6], [8]], [[14], [16]]]] 985 // ``` 986 // 987 // (4) For the following input of shape `[2, 2, 4, 1]`, block_shape = `[2, 2]`, and 988 // paddings = `[[0, 0], [2, 0]]`: 989 // 990 // ``` 991 // x = [[[[1], [2], [3], [4]], 992 // [[5], [6], [7], [8]]], 993 // [[[9], [10], [11], [12]], 994 // [[13], [14], [15], [16]]]] 995 // ``` 996 // 997 // The output tensor has shape `[8, 1, 3, 1]` and value: 998 // 999 // ``` 1000 // x = [[[[0], [1], [3]]], [[[0], [9], [11]]], 1001 // [[[0], [2], [4]]], [[[0], [10], [12]]], 1002 // [[[0], [5], [7]]], [[[0], [13], [15]]], 1003 // [[[0], [6], [8]]], [[[0], [14], [16]]]] 1004 // ``` 1005 // 1006 // Among others, this operation is useful for reducing atrous convolution into 1007 // regular convolution. 1008 func SpaceToBatchND(scope *Scope, input tf.Output, block_shape tf.Output, paddings tf.Output) (output tf.Output) { 1009 if scope.Err() != nil { 1010 return 1011 } 1012 opspec := tf.OpSpec{ 1013 Type: "SpaceToBatchND", 1014 Input: []tf.Input{ 1015 input, block_shape, paddings, 1016 }, 1017 } 1018 op := scope.AddOperation(opspec) 1019 return op.Output(0) 1020 } 1021 1022 // Inserts a dimension of 1 into a tensor's shape. 1023 // 1024 // Given a tensor `input`, this operation inserts a dimension of 1 at the 1025 // dimension index `axis` of `input`'s shape. The dimension index `axis` starts at 1026 // zero; if you specify a negative number for `axis` it is counted backward from 1027 // the end. 1028 // 1029 // This operation is useful if you want to add a batch dimension to a single 1030 // element. For example, if you have a single image of shape `[height, width, 1031 // channels]`, you can make it a batch of 1 image with `expand_dims(image, 0)`, 1032 // which will make the shape `[1, height, width, channels]`. 1033 // 1034 // Other examples: 1035 // 1036 // ``` 1037 // # 't' is a tensor of shape [2] 1038 // shape(expand_dims(t, 0)) ==> [1, 2] 1039 // shape(expand_dims(t, 1)) ==> [2, 1] 1040 // shape(expand_dims(t, -1)) ==> [2, 1] 1041 // 1042 // # 't2' is a tensor of shape [2, 3, 5] 1043 // shape(expand_dims(t2, 0)) ==> [1, 2, 3, 5] 1044 // shape(expand_dims(t2, 2)) ==> [2, 3, 1, 5] 1045 // shape(expand_dims(t2, 3)) ==> [2, 3, 5, 1] 1046 // ``` 1047 // 1048 // This operation requires that: 1049 // 1050 // `-1-input.dims() <= dim <= input.dims()` 1051 // 1052 // This operation is related to `squeeze()`, which removes dimensions of 1053 // size 1. 1054 // 1055 // Arguments: 1056 // 1057 // axis: 0-D (scalar). Specifies the dimension index at which to 1058 // expand the shape of `input`. Must be in the range 1059 // `[-rank(input) - 1, rank(input)]`. 1060 // 1061 // Returns Contains the same data as `input`, but its shape has an additional 1062 // dimension of size 1 added. 1063 func ExpandDims(scope *Scope, input tf.Output, axis tf.Output) (output tf.Output) { 1064 if scope.Err() != nil { 1065 return 1066 } 1067 opspec := tf.OpSpec{ 1068 Type: "ExpandDims", 1069 Input: []tf.Input{ 1070 input, axis, 1071 }, 1072 } 1073 op := scope.AddOperation(opspec) 1074 return op.Output(0) 1075 } 1076 1077 // A placeholder op that passes through `input` when its output is not fed. 1078 // 1079 // Arguments: 1080 // input: The default value to produce when `output` is not fed. 1081 // shape: The (possibly partial) shape of the tensor. 1082 // 1083 // Returns A placeholder tensor that defaults to `input` if it is not fed. 1084 func PlaceholderWithDefault(scope *Scope, input tf.Output, shape tf.Shape) (output tf.Output) { 1085 if scope.Err() != nil { 1086 return 1087 } 1088 attrs := map[string]interface{}{"shape": shape} 1089 opspec := tf.OpSpec{ 1090 Type: "PlaceholderWithDefault", 1091 Input: []tf.Input{ 1092 input, 1093 }, 1094 Attrs: attrs, 1095 } 1096 op := scope.AddOperation(opspec) 1097 return op.Output(0) 1098 } 1099 1100 // A placeholder op for a value that will be fed into the computation. 1101 // 1102 // DEPRECATED at GraphDef version 23: Placeholder now behaves the same as PlaceholderV2. 1103 // 1104 // N.B. This operation will fail with an error if it is executed. It is 1105 // intended as a way to represent a value that will always be fed, and to 1106 // provide attrs that enable the fed value to be checked at runtime. 1107 // 1108 // Arguments: 1109 // dtype: The type of elements in the tensor. 1110 // shape: The shape of the tensor. The shape can be any partially-specified 1111 // shape. To be unconstrained, pass in a shape with unknown rank. 1112 // 1113 // Returns A placeholder tensor that must be replaced using the feed mechanism. 1114 func PlaceholderV2(scope *Scope, dtype tf.DataType, shape tf.Shape) (output tf.Output) { 1115 if scope.Err() != nil { 1116 return 1117 } 1118 attrs := map[string]interface{}{"dtype": dtype, "shape": shape} 1119 opspec := tf.OpSpec{ 1120 Type: "PlaceholderV2", 1121 1122 Attrs: attrs, 1123 } 1124 op := scope.AddOperation(opspec) 1125 return op.Output(0) 1126 } 1127 1128 // PlaceholderAttr is an optional argument to Placeholder. 1129 type PlaceholderAttr func(optionalAttr) 1130 1131 // PlaceholderShape sets the optional shape attribute to value. 1132 // 1133 // value: (Optional) The shape of the tensor. If the shape has 0 dimensions, the 1134 // shape is unconstrained. 1135 // If not specified, defaults to <unknown_rank:true > 1136 func PlaceholderShape(value tf.Shape) PlaceholderAttr { 1137 return func(m optionalAttr) { 1138 m["shape"] = value 1139 } 1140 } 1141 1142 // A placeholder op for a value that will be fed into the computation. 1143 // 1144 // N.B. This operation will fail with an error if it is executed. It is 1145 // intended as a way to represent a value that will always be fed, and to 1146 // provide attrs that enable the fed value to be checked at runtime. 1147 // 1148 // Arguments: 1149 // dtype: The type of elements in the tensor. 1150 // 1151 // Returns A placeholder tensor that must be replaced using the feed mechanism. 1152 func Placeholder(scope *Scope, dtype tf.DataType, optional ...PlaceholderAttr) (output tf.Output) { 1153 if scope.Err() != nil { 1154 return 1155 } 1156 attrs := map[string]interface{}{"dtype": dtype} 1157 for _, a := range optional { 1158 a(attrs) 1159 } 1160 opspec := tf.OpSpec{ 1161 Type: "Placeholder", 1162 1163 Attrs: attrs, 1164 } 1165 op := scope.AddOperation(opspec) 1166 return op.Output(0) 1167 } 1168 1169 // Gradient op for `MirrorPad` op. This op folds a mirror-padded tensor. 1170 // 1171 // This operation folds the padded areas of `input` by `MirrorPad` according to the 1172 // `paddings` you specify. `paddings` must be the same as `paddings` argument 1173 // given to the corresponding `MirrorPad` op. 1174 // 1175 // The folded size of each dimension D of the output is: 1176 // 1177 // `input.dim_size(D) - paddings(D, 0) - paddings(D, 1)` 1178 // 1179 // For example: 1180 // 1181 // ``` 1182 // # 't' is [[1, 2, 3], [4, 5, 6], [7, 8, 9]]. 1183 // # 'paddings' is [[0, 1]], [0, 1]]. 1184 // # 'mode' is SYMMETRIC. 1185 // # rank of 't' is 2. 1186 // pad(t, paddings) ==> [[ 1, 5] 1187 // [11, 28]] 1188 // ``` 1189 // 1190 // Arguments: 1191 // input: The input tensor to be folded. 1192 // paddings: A two-column matrix specifying the padding sizes. The number of 1193 // rows must be the same as the rank of `input`. 1194 // mode: The mode used in the `MirrorPad` op. 1195 // 1196 // Returns The folded tensor. 1197 func MirrorPadGrad(scope *Scope, input tf.Output, paddings tf.Output, mode string) (output tf.Output) { 1198 if scope.Err() != nil { 1199 return 1200 } 1201 attrs := map[string]interface{}{"mode": mode} 1202 opspec := tf.OpSpec{ 1203 Type: "MirrorPadGrad", 1204 Input: []tf.Input{ 1205 input, paddings, 1206 }, 1207 Attrs: attrs, 1208 } 1209 op := scope.AddOperation(opspec) 1210 return op.Output(0) 1211 } 1212 1213 // Pads a tensor with mirrored values. 1214 // 1215 // This operation pads a `input` with mirrored values according to the `paddings` 1216 // you specify. `paddings` is an integer tensor with shape `[n, 2]`, where n is 1217 // the rank of `input`. For each dimension D of `input`, `paddings[D, 0]` indicates 1218 // how many values to add before the contents of `input` in that dimension, and 1219 // `paddings[D, 1]` indicates how many values to add after the contents of `input` 1220 // in that dimension. Both `paddings[D, 0]` and `paddings[D, 1]` must be no greater 1221 // than `input.dim_size(D)` (or `input.dim_size(D) - 1`) if `copy_border` is true 1222 // (if false, respectively). 1223 // 1224 // The padded size of each dimension D of the output is: 1225 // 1226 // `paddings(D, 0) + input.dim_size(D) + paddings(D, 1)` 1227 // 1228 // For example: 1229 // 1230 // ``` 1231 // # 't' is [[1, 2, 3], [4, 5, 6]]. 1232 // # 'paddings' is [[1, 1]], [2, 2]]. 1233 // # 'mode' is SYMMETRIC. 1234 // # rank of 't' is 2. 1235 // pad(t, paddings) ==> [[2, 1, 1, 2, 3, 3, 2] 1236 // [2, 1, 1, 2, 3, 3, 2] 1237 // [5, 4, 4, 5, 6, 6, 5] 1238 // [5, 4, 4, 5, 6, 6, 5]] 1239 // ``` 1240 // 1241 // Arguments: 1242 // input: The input tensor to be padded. 1243 // paddings: A two-column matrix specifying the padding sizes. The number of 1244 // rows must be the same as the rank of `input`. 1245 // mode: Either `REFLECT` or `SYMMETRIC`. In reflect mode the padded regions 1246 // do not include the borders, while in symmetric mode the padded regions 1247 // do include the borders. For example, if `input` is `[1, 2, 3]` and `paddings` 1248 // is `[0, 2]`, then the output is `[1, 2, 3, 2, 1]` in reflect mode, and 1249 // it is `[1, 2, 3, 3, 2]` in symmetric mode. 1250 // 1251 // Returns The padded tensor. 1252 func MirrorPad(scope *Scope, input tf.Output, paddings tf.Output, mode string) (output tf.Output) { 1253 if scope.Err() != nil { 1254 return 1255 } 1256 attrs := map[string]interface{}{"mode": mode} 1257 opspec := tf.OpSpec{ 1258 Type: "MirrorPad", 1259 Input: []tf.Input{ 1260 input, paddings, 1261 }, 1262 Attrs: attrs, 1263 } 1264 op := scope.AddOperation(opspec) 1265 return op.Output(0) 1266 } 1267 1268 // Pads a tensor. 1269 // 1270 // This operation pads `input` according to the `paddings` and `constant_values` 1271 // you specify. `paddings` is an integer tensor with shape `[Dn, 2]`, where n is 1272 // the rank of `input`. For each dimension D of `input`, `paddings[D, 0]` indicates 1273 // how many padding values to add before the contents of `input` in that dimension, 1274 // and `paddings[D, 1]` indicates how many padding values to add after the contents 1275 // of `input` in that dimension. `constant_values` is a scalar tensor of the same 1276 // type as `input` that indicates the value to use for padding `input`. 1277 // 1278 // The padded size of each dimension D of the output is: 1279 // 1280 // `paddings(D, 0) + input.dim_size(D) + paddings(D, 1)` 1281 // 1282 // For example: 1283 // 1284 // ``` 1285 // # 't' is [[1, 1], [2, 2]] 1286 // # 'paddings' is [[1, 1], [2, 2]] 1287 // # 'constant_values' is 0 1288 // # rank of 't' is 2 1289 // pad(t, paddings) ==> [[0, 0, 0, 0, 0, 0] 1290 // [0, 0, 1, 1, 0, 0] 1291 // [0, 0, 2, 2, 0, 0] 1292 // [0, 0, 0, 0, 0, 0]] 1293 // ``` 1294 func PadV2(scope *Scope, input tf.Output, paddings tf.Output, constant_values tf.Output) (output tf.Output) { 1295 if scope.Err() != nil { 1296 return 1297 } 1298 opspec := tf.OpSpec{ 1299 Type: "PadV2", 1300 Input: []tf.Input{ 1301 input, paddings, constant_values, 1302 }, 1303 } 1304 op := scope.AddOperation(opspec) 1305 return op.Output(0) 1306 } 1307 1308 // Return the reduction indices for computing gradients of s0 op s1 with broadcast. 1309 // 1310 // This is typically used by gradient computations for a broadcasting operation. 1311 func BroadcastGradientArgs(scope *Scope, s0 tf.Output, s1 tf.Output) (r0 tf.Output, r1 tf.Output) { 1312 if scope.Err() != nil { 1313 return 1314 } 1315 opspec := tf.OpSpec{ 1316 Type: "BroadcastGradientArgs", 1317 Input: []tf.Input{ 1318 s0, s1, 1319 }, 1320 } 1321 op := scope.AddOperation(opspec) 1322 return op.Output(0), op.Output(1) 1323 } 1324 1325 // Returns the gradient of `Tile`. 1326 // 1327 // DEPRECATED at GraphDef version 3: TileGrad has been replaced with reduce_sum 1328 // 1329 // Since `Tile` takes an input and repeats the input `multiples` times 1330 // along each dimension, `TileGrad` takes in `multiples` and aggregates 1331 // each repeated tile of `input` into `output`. 1332 func TileGrad(scope *Scope, input tf.Output, multiples tf.Output) (output tf.Output) { 1333 if scope.Err() != nil { 1334 return 1335 } 1336 opspec := tf.OpSpec{ 1337 Type: "TileGrad", 1338 Input: []tf.Input{ 1339 input, multiples, 1340 }, 1341 } 1342 op := scope.AddOperation(opspec) 1343 return op.Output(0) 1344 } 1345 1346 // Constructs a tensor by tiling a given tensor. 1347 // 1348 // This operation creates a new tensor by replicating `input` `multiples` times. 1349 // The output tensor's i'th dimension has `input.dims(i) * multiples[i]` elements, 1350 // and the values of `input` are replicated `multiples[i]` times along the 'i'th 1351 // dimension. For example, tiling `[a b c d]` by `[2]` produces 1352 // `[a b c d a b c d]`. 1353 // 1354 // Arguments: 1355 // input: 1-D or higher. 1356 // multiples: 1-D. Length must be the same as the number of dimensions in `input` 1357 func Tile(scope *Scope, input tf.Output, multiples tf.Output) (output tf.Output) { 1358 if scope.Err() != nil { 1359 return 1360 } 1361 opspec := tf.OpSpec{ 1362 Type: "Tile", 1363 Input: []tf.Input{ 1364 input, multiples, 1365 }, 1366 } 1367 op := scope.AddOperation(opspec) 1368 return op.Output(0) 1369 } 1370 1371 // StridedSliceAttr is an optional argument to StridedSlice. 1372 type StridedSliceAttr func(optionalAttr) 1373 1374 // StridedSliceBeginMask sets the optional begin_mask attribute to value. 1375 // 1376 // value: a bitmask where a bit i being 1 means to ignore the begin 1377 // value and instead use the largest interval possible. At runtime 1378 // begin[i] will be replaced with `[0, n-1)` if `stride[i] > 0` or 1379 // `[-1, n-1]` if `stride[i] < 0` 1380 // If not specified, defaults to 0 1381 func StridedSliceBeginMask(value int64) StridedSliceAttr { 1382 return func(m optionalAttr) { 1383 m["begin_mask"] = value 1384 } 1385 } 1386 1387 // StridedSliceEndMask sets the optional end_mask attribute to value. 1388 // 1389 // value: analogous to `begin_mask` 1390 // If not specified, defaults to 0 1391 func StridedSliceEndMask(value int64) StridedSliceAttr { 1392 return func(m optionalAttr) { 1393 m["end_mask"] = value 1394 } 1395 } 1396 1397 // StridedSliceEllipsisMask sets the optional ellipsis_mask attribute to value. 1398 // 1399 // value: a bitmask where bit `i` being 1 means the `i`th 1400 // position is actually an ellipsis. One bit at most can be 1. 1401 // If `ellipsis_mask == 0`, then an implicit ellipsis mask of `1 << (m+1)` 1402 // is provided. This means that `foo[3:5] == foo[3:5, ...]`. An ellipsis 1403 // implicitly creates as many range specifications as necessary to fully 1404 // specify the sliced range for every dimension. For example for a 4-dimensional 1405 // tensor `foo` the slice `foo[2, ..., 5:8]` implies `foo[2, :, :, 5:8]`. 1406 // If not specified, defaults to 0 1407 func StridedSliceEllipsisMask(value int64) StridedSliceAttr { 1408 return func(m optionalAttr) { 1409 m["ellipsis_mask"] = value 1410 } 1411 } 1412 1413 // StridedSliceNewAxisMask sets the optional new_axis_mask attribute to value. 1414 // 1415 // value: a bitmask where bit `i` being 1 means the `i`th 1416 // specification creates a new shape 1 dimension. For example 1417 // `foo[:4, tf.newaxis, :2]` would produce a shape `(4, 1, 2)` tensor. 1418 // If not specified, defaults to 0 1419 func StridedSliceNewAxisMask(value int64) StridedSliceAttr { 1420 return func(m optionalAttr) { 1421 m["new_axis_mask"] = value 1422 } 1423 } 1424 1425 // StridedSliceShrinkAxisMask sets the optional shrink_axis_mask attribute to value. 1426 // 1427 // value: a bitmask where bit `i` implies that the `i`th 1428 // specification should shrink the dimensionality. begin and end 1429 // must imply a slice of size 1 in the dimension. For example in 1430 // python one might do `foo[:, 3, :]` which would result in 1431 // `shrink_axis_mask` being 2. 1432 // If not specified, defaults to 0 1433 func StridedSliceShrinkAxisMask(value int64) StridedSliceAttr { 1434 return func(m optionalAttr) { 1435 m["shrink_axis_mask"] = value 1436 } 1437 } 1438 1439 // Return a strided slice from `input`. 1440 // 1441 // Note, most python users will want to use the Python `Tensor.__getitem__` 1442 // or `Variable.__getitem__` rather than this op directly. 1443 // 1444 // The goal of this op is to produce a new tensor with a subset of 1445 // the elements from the `n` dimensional `input` tensor. The subset is chosen using 1446 // a sequence of `m` sparse range specifications encoded into the arguments 1447 // of this function. Note, in some cases 1448 // `m` could be equal to `n`, but this need not be the case. Each 1449 // range specification entry can be one of the following: 1450 // 1451 // - An ellipsis (...). Ellipses are used to imply zero or more 1452 // dimensions of full-dimension selection and are produced using 1453 // `ellipsis_mask`. For example, `foo[...]` is the identity slice. 1454 // 1455 // - A new axis. This is used to insert a new shape=1 dimension and is 1456 // produced using `new_axis_mask`. For example, `foo[:, ...]` where 1457 // `foo` is shape `(3, 4)` produces a `(1, 3, 4)` tensor. 1458 // 1459 // 1460 // - A range `begin:end:stride`. This is used to specify how much to choose from 1461 // a given dimension. `stride` can be any integer but 0. `begin` is an integer 1462 // which represents the index of the first value to select while `end` represents 1463 // the index of the last value to select. The number of values selected in each 1464 // dimension is `end - begin` if `stride > 0` and `begin - end` if `stride < 0`. 1465 // `begin` and `end` can be negative where `-1` is the last element, `-2` is 1466 // the second to last. `begin_mask` controls whether to replace the explicitly 1467 // given `begin` with an implicit effective value of `0` if `stride > 0` and 1468 // `-1` if `stride < 0`. `end_mask` is analogous but produces the number 1469 // required to create the largest open interval. For example, given a shape 1470 // `(3,)` tensor `foo[:]`, the effective `begin` and `end` are `0` and `3`. Do 1471 // not assume this is equivalent to `foo[0:-1]` which has an effective `begin` 1472 // and `end` of `0` and `2`. Another example is `foo[-2::-1]` which reverses the 1473 // first dimension of a tensor while dropping the last two (in the original 1474 // order elements). For example `foo = [1,2,3,4]; foo[-2::-1]` is `[4,3]`. 1475 // 1476 // - A single index. This is used to keep only elements that have a given 1477 // index. For example (`foo[2, :]` on a shape `(5,6)` tensor produces a 1478 // shape `(6,)` tensor. This is encoded in `begin` and `end` and 1479 // `shrink_axis_mask`. 1480 // 1481 // Each conceptual range specification is encoded in the op's argument. This 1482 // encoding is best understand by considering a non-trivial example. In 1483 // particular, 1484 // `foo[1, 2:4, None, ..., :-3:-1, :]` will be encoded as 1485 // 1486 // ``` 1487 // begin = [1, 2, x, x, 0, x] # x denotes don't care (usually 0) 1488 // end = [2, 4, x, x, -3, x] 1489 // strides = [1, 1, x, x, -1, 1] 1490 // begin_mask = 1<<4 | 1 << 5 = 48 1491 // end_mask = 1<<5 = 32 1492 // ellipsis_mask = 1<<3 = 8 1493 // new_axis_mask = 1<<2 4 1494 // shrink_axis_mask = 1<<0 1495 // ``` 1496 // 1497 // In this case if `foo.shape` is (5, 5, 5, 5, 5, 5) the final shape of 1498 // the slice becomes (2, 1, 5, 5, 2, 5). 1499 // Let us walk step by step through each argument specification. 1500 // 1501 // 1. The first argument in the example slice is turned into `begin = 1` and 1502 // `end = begin + 1 = 2`. To disambiguate from the original spec `2:4` we 1503 // also set the appropriate bit in `shrink_axis_mask`. 1504 // 1505 // 2. `2:4` is contributes 2, 4, 1 to begin, end, and stride. All masks have 1506 // zero bits contributed. 1507 // 1508 // 3. None is a synonym for `tf.newaxis`. This means insert a dimension of size 1 1509 // dimension in the final shape. Dummy values are contributed to begin, 1510 // end and stride, while the new_axis_mask bit is set. 1511 // 1512 // 4. `...` grab the full ranges from as many dimensions as needed to 1513 // fully specify a slice for every dimension of the input shape. 1514 // 1515 // 5. `:-3:-1` shows the use of negative indices. A negative index `i` associated 1516 // with a dimension that has shape `s` is converted to a positive index 1517 // `s + i`. So `-1` becomes `s-1` (i.e. the last element). This conversion 1518 // is done internally so begin, end and strides receive x, -3, and -1. 1519 // The appropriate begin_mask bit is set to indicate the start range is the 1520 // full range (ignoring the x). 1521 // 1522 // 6. `:` indicates that the entire contents of the corresponding dimension 1523 // is selected. This is equivalent to `::` or `0::1`. begin, end, and strides 1524 // receive 0, 0, and 1, respectively. The appropriate bits in `begin_mask` and 1525 // `end_mask` are also set. 1526 // 1527 // *Requirements*: 1528 // `0 != strides[i] for i in [0, m)` 1529 // `ellipsis_mask must be a power of two (only one ellipsis)` 1530 // 1531 // Arguments: 1532 // 1533 // begin: `begin[k]` specifies the offset into the `k`th range specification. 1534 // The exact dimension this corresponds to will be determined by context. 1535 // Out-of-bounds values will be silently clamped. If the `k`th bit of 1536 // `begin_mask` then `begin[k]` is ignored and the full range of the 1537 // appropriate dimension is used instead. Negative values causes indexing 1538 // to start from the highest element e.g. If `foo==[1,2,3]` then `foo[-1]==3`. 1539 // end: `end[i]` is like `begin` with the exception that `end_mask` is 1540 // used to determine full ranges. 1541 // strides: `strides[i]` specifies the increment in the `i`th specification 1542 // after extracting a given element. Negative indices will reverse 1543 // the original order. Out or range values are 1544 // clamped to `[0,dim[i]) if slice[i]>0` or `[-1,dim[i]-1] if slice[i] < 0` 1545 func StridedSlice(scope *Scope, input tf.Output, begin tf.Output, end tf.Output, strides tf.Output, optional ...StridedSliceAttr) (output tf.Output) { 1546 if scope.Err() != nil { 1547 return 1548 } 1549 attrs := map[string]interface{}{} 1550 for _, a := range optional { 1551 a(attrs) 1552 } 1553 opspec := tf.OpSpec{ 1554 Type: "StridedSlice", 1555 Input: []tf.Input{ 1556 input, begin, end, strides, 1557 }, 1558 Attrs: attrs, 1559 } 1560 op := scope.AddOperation(opspec) 1561 return op.Output(0) 1562 } 1563 1564 // SizeAttr is an optional argument to Size. 1565 type SizeAttr func(optionalAttr) 1566 1567 // SizeOutType sets the optional out_type attribute to value. 1568 // If not specified, defaults to DT_INT32 1569 func SizeOutType(value tf.DataType) SizeAttr { 1570 return func(m optionalAttr) { 1571 m["out_type"] = value 1572 } 1573 } 1574 1575 // Returns the size of a tensor. 1576 // 1577 // This operation returns an integer representing the number of elements in 1578 // `input`. 1579 // 1580 // For example: 1581 // 1582 // ``` 1583 // # 't' is [[[1, 1,, 1], [2, 2, 2]], [[3, 3, 3], [4, 4, 4]]]] 1584 // size(t) ==> 12 1585 // ``` 1586 func Size(scope *Scope, input tf.Output, optional ...SizeAttr) (output tf.Output) { 1587 if scope.Err() != nil { 1588 return 1589 } 1590 attrs := map[string]interface{}{} 1591 for _, a := range optional { 1592 a(attrs) 1593 } 1594 opspec := tf.OpSpec{ 1595 Type: "Size", 1596 Input: []tf.Input{ 1597 input, 1598 }, 1599 Attrs: attrs, 1600 } 1601 op := scope.AddOperation(opspec) 1602 return op.Output(0) 1603 } 1604 1605 // Returns the rank of a tensor. 1606 // 1607 // This operation returns an integer representing the rank of `input`. 1608 // 1609 // For example: 1610 // 1611 // ``` 1612 // # 't' is [[[1, 1, 1], [2, 2, 2]], [[3, 3, 3], [4, 4, 4]]] 1613 // # shape of tensor 't' is [2, 2, 3] 1614 // rank(t) ==> 3 1615 // ``` 1616 // 1617 // **Note**: The rank of a tensor is not the same as the rank of a matrix. The rank 1618 // of a tensor is the number of indices required to uniquely select each element 1619 // of the tensor. Rank is also known as "order", "degree", or "ndims." 1620 func Rank(scope *Scope, input tf.Output) (output tf.Output) { 1621 if scope.Err() != nil { 1622 return 1623 } 1624 opspec := tf.OpSpec{ 1625 Type: "Rank", 1626 Input: []tf.Input{ 1627 input, 1628 }, 1629 } 1630 op := scope.AddOperation(opspec) 1631 return op.Output(0) 1632 } 1633 1634 // ReverseSequenceAttr is an optional argument to ReverseSequence. 1635 type ReverseSequenceAttr func(optionalAttr) 1636 1637 // ReverseSequenceBatchDim sets the optional batch_dim attribute to value. 1638 // 1639 // value: The dimension along which reversal is performed. 1640 // If not specified, defaults to 0 1641 func ReverseSequenceBatchDim(value int64) ReverseSequenceAttr { 1642 return func(m optionalAttr) { 1643 m["batch_dim"] = value 1644 } 1645 } 1646 1647 // Reverses variable length slices. 1648 // 1649 // This op first slices `input` along the dimension `batch_dim`, and for each 1650 // slice `i`, reverses the first `seq_lengths[i]` elements along 1651 // the dimension `seq_dim`. 1652 // 1653 // The elements of `seq_lengths` must obey `seq_lengths[i] <= input.dims[seq_dim]`, 1654 // and `seq_lengths` must be a vector of length `input.dims[batch_dim]`. 1655 // 1656 // The output slice `i` along dimension `batch_dim` is then given by input 1657 // slice `i`, with the first `seq_lengths[i]` slices along dimension 1658 // `seq_dim` reversed. 1659 // 1660 // For example: 1661 // 1662 // ``` 1663 // # Given this: 1664 // batch_dim = 0 1665 // seq_dim = 1 1666 // input.dims = (4, 8, ...) 1667 // seq_lengths = [7, 2, 3, 5] 1668 // 1669 // # then slices of input are reversed on seq_dim, but only up to seq_lengths: 1670 // output[0, 0:7, :, ...] = input[0, 7:0:-1, :, ...] 1671 // output[1, 0:2, :, ...] = input[1, 2:0:-1, :, ...] 1672 // output[2, 0:3, :, ...] = input[2, 3:0:-1, :, ...] 1673 // output[3, 0:5, :, ...] = input[3, 5:0:-1, :, ...] 1674 // 1675 // # while entries past seq_lens are copied through: 1676 // output[0, 7:, :, ...] = input[0, 7:, :, ...] 1677 // output[1, 2:, :, ...] = input[1, 2:, :, ...] 1678 // output[2, 3:, :, ...] = input[2, 3:, :, ...] 1679 // output[3, 2:, :, ...] = input[3, 2:, :, ...] 1680 // ``` 1681 // 1682 // In contrast, if: 1683 // 1684 // ``` 1685 // # Given this: 1686 // batch_dim = 2 1687 // seq_dim = 0 1688 // input.dims = (8, ?, 4, ...) 1689 // seq_lengths = [7, 2, 3, 5] 1690 // 1691 // # then slices of input are reversed on seq_dim, but only up to seq_lengths: 1692 // output[0:7, :, 0, :, ...] = input[7:0:-1, :, 0, :, ...] 1693 // output[0:2, :, 1, :, ...] = input[2:0:-1, :, 1, :, ...] 1694 // output[0:3, :, 2, :, ...] = input[3:0:-1, :, 2, :, ...] 1695 // output[0:5, :, 3, :, ...] = input[5:0:-1, :, 3, :, ...] 1696 // 1697 // # while entries past seq_lens are copied through: 1698 // output[7:, :, 0, :, ...] = input[7:, :, 0, :, ...] 1699 // output[2:, :, 1, :, ...] = input[2:, :, 1, :, ...] 1700 // output[3:, :, 2, :, ...] = input[3:, :, 2, :, ...] 1701 // output[2:, :, 3, :, ...] = input[2:, :, 3, :, ...] 1702 // ``` 1703 // 1704 // Arguments: 1705 // input: The input to reverse. 1706 // seq_lengths: 1-D with length `input.dims(batch_dim)` and 1707 // `max(seq_lengths) <= input.dims(seq_dim)` 1708 // seq_dim: The dimension which is partially reversed. 1709 // 1710 // Returns The partially reversed input. It has the same shape as `input`. 1711 func ReverseSequence(scope *Scope, input tf.Output, seq_lengths tf.Output, seq_dim int64, optional ...ReverseSequenceAttr) (output tf.Output) { 1712 if scope.Err() != nil { 1713 return 1714 } 1715 attrs := map[string]interface{}{"seq_dim": seq_dim} 1716 for _, a := range optional { 1717 a(attrs) 1718 } 1719 opspec := tf.OpSpec{ 1720 Type: "ReverseSequence", 1721 Input: []tf.Input{ 1722 input, seq_lengths, 1723 }, 1724 Attrs: attrs, 1725 } 1726 op := scope.AddOperation(opspec) 1727 return op.Output(0) 1728 } 1729 1730 // Ensures that the tensor's shape matches the expected shape. 1731 // 1732 // Raises an error if the input tensor's shape does not match the specified shape. 1733 // Returns the input tensor otherwise. 1734 // 1735 // Arguments: 1736 // input: A tensor, whose shape is to be validated. 1737 // shape: The expected (possibly partially specified) shape of the input tensor. 1738 // 1739 // Returns A tensor with the same shape and contents as the input tensor or value. 1740 func EnsureShape(scope *Scope, input tf.Output, shape tf.Shape) (output tf.Output) { 1741 if scope.Err() != nil { 1742 return 1743 } 1744 attrs := map[string]interface{}{"shape": shape} 1745 opspec := tf.OpSpec{ 1746 Type: "EnsureShape", 1747 Input: []tf.Input{ 1748 input, 1749 }, 1750 Attrs: attrs, 1751 } 1752 op := scope.AddOperation(opspec) 1753 return op.Output(0) 1754 } 1755 1756 // UniqueWithCountsV2Attr is an optional argument to UniqueWithCountsV2. 1757 type UniqueWithCountsV2Attr func(optionalAttr) 1758 1759 // UniqueWithCountsV2OutIdx sets the optional out_idx attribute to value. 1760 // If not specified, defaults to DT_INT32 1761 func UniqueWithCountsV2OutIdx(value tf.DataType) UniqueWithCountsV2Attr { 1762 return func(m optionalAttr) { 1763 m["out_idx"] = value 1764 } 1765 } 1766 1767 // Finds unique elements along an axis of a tensor. 1768 // 1769 // This operation either returns a tensor `y` containing unique elements 1770 // along the `axis` of a tensor. The returned unique elements is sorted 1771 // in the same order as they occur along `axis` in `x`. 1772 // This operation also returns a tensor `idx` and a tensor `count` 1773 // that are the same size as the number of the elements in `x` along the 1774 // `axis` dimension. The `idx` contains the index in the unique output `y` 1775 // and the `count` contains the count in the unique output `y`. 1776 // In other words, for an `1-D` tensor `x` with `axis = None: 1777 // 1778 // `y[idx[i]] = x[i] for i in [0, 1,...,rank(x) - 1]` 1779 // 1780 // For example: 1781 // 1782 // ``` 1783 // # tensor 'x' is [1, 1, 2, 4, 4, 4, 7, 8, 8] 1784 // y, idx, count = unique_with_counts(x) 1785 // y ==> [1, 2, 4, 7, 8] 1786 // idx ==> [0, 0, 1, 2, 2, 2, 3, 4, 4] 1787 // count ==> [2, 1, 3, 1, 2] 1788 // ``` 1789 // 1790 // For an `2-D` tensor `x` with `axis = 0`: 1791 // 1792 // ``` 1793 // # tensor 'x' is [[1, 0, 0], 1794 // # [1, 0, 0], 1795 // # [2, 0, 0]] 1796 // y, idx, count = unique_with_counts(x, axis=0) 1797 // y ==> [[1, 0, 0], 1798 // [2, 0, 0]] 1799 // idx ==> [0, 0, 1] 1800 // count ==> [2, 1] 1801 // ``` 1802 // 1803 // For an `2-D` tensor `x` with `axis = 1`: 1804 // 1805 // ``` 1806 // # tensor 'x' is [[1, 0, 0], 1807 // # [1, 0, 0], 1808 // # [2, 0, 0]] 1809 // y, idx, count = unique_with_counts(x, axis=1) 1810 // y ==> [[1, 0], 1811 // [1, 0], 1812 // [2, 0]] 1813 // idx ==> [0, 1, 1] 1814 // count ==> [1, 2] 1815 // ``` 1816 // 1817 // Arguments: 1818 // x: A `Tensor`. 1819 // axis: A `Tensor` of type `int32` (default: None). The axis of the Tensor to 1820 // find the unique elements. 1821 // 1822 // Returns A `Tensor`. Unique elements along the `axis` of `Tensor` x.A 1-D Tensor. Has the same type as x that contains the index of each 1823 // value of x in the output y.A 1-D Tensor. The count of each value of x in the output y. 1824 func UniqueWithCountsV2(scope *Scope, x tf.Output, axis tf.Output, optional ...UniqueWithCountsV2Attr) (y tf.Output, idx tf.Output, count tf.Output) { 1825 if scope.Err() != nil { 1826 return 1827 } 1828 attrs := map[string]interface{}{} 1829 for _, a := range optional { 1830 a(attrs) 1831 } 1832 opspec := tf.OpSpec{ 1833 Type: "UniqueWithCountsV2", 1834 Input: []tf.Input{ 1835 x, axis, 1836 }, 1837 Attrs: attrs, 1838 } 1839 op := scope.AddOperation(opspec) 1840 return op.Output(0), op.Output(1), op.Output(2) 1841 } 1842 1843 // UniqueWithCountsAttr is an optional argument to UniqueWithCounts. 1844 type UniqueWithCountsAttr func(optionalAttr) 1845 1846 // UniqueWithCountsOutIdx sets the optional out_idx attribute to value. 1847 // If not specified, defaults to DT_INT32 1848 func UniqueWithCountsOutIdx(value tf.DataType) UniqueWithCountsAttr { 1849 return func(m optionalAttr) { 1850 m["out_idx"] = value 1851 } 1852 } 1853 1854 // Finds unique elements in a 1-D tensor. 1855 // 1856 // This operation returns a tensor `y` containing all of the unique elements of `x` 1857 // sorted in the same order that they occur in `x`. This operation also returns a 1858 // tensor `idx` the same size as `x` that contains the index of each value of `x` 1859 // in the unique output `y`. Finally, it returns a third tensor `count` that 1860 // contains the count of each element of `y` in `x`. In other words: 1861 // 1862 // `y[idx[i]] = x[i] for i in [0, 1,...,rank(x) - 1]` 1863 // 1864 // For example: 1865 // 1866 // ``` 1867 // # tensor 'x' is [1, 1, 2, 4, 4, 4, 7, 8, 8] 1868 // y, idx, count = unique_with_counts(x) 1869 // y ==> [1, 2, 4, 7, 8] 1870 // idx ==> [0, 0, 1, 2, 2, 2, 3, 4, 4] 1871 // count ==> [2, 1, 3, 1, 2] 1872 // ``` 1873 // 1874 // Arguments: 1875 // x: 1-D. 1876 // 1877 // Returns 1-D.1-D.1-D. 1878 func UniqueWithCounts(scope *Scope, x tf.Output, optional ...UniqueWithCountsAttr) (y tf.Output, idx tf.Output, count tf.Output) { 1879 if scope.Err() != nil { 1880 return 1881 } 1882 attrs := map[string]interface{}{} 1883 for _, a := range optional { 1884 a(attrs) 1885 } 1886 opspec := tf.OpSpec{ 1887 Type: "UniqueWithCounts", 1888 Input: []tf.Input{ 1889 x, 1890 }, 1891 Attrs: attrs, 1892 } 1893 op := scope.AddOperation(opspec) 1894 return op.Output(0), op.Output(1), op.Output(2) 1895 } 1896 1897 // UniqueV2Attr is an optional argument to UniqueV2. 1898 type UniqueV2Attr func(optionalAttr) 1899 1900 // UniqueV2OutIdx sets the optional out_idx attribute to value. 1901 // If not specified, defaults to DT_INT32 1902 func UniqueV2OutIdx(value tf.DataType) UniqueV2Attr { 1903 return func(m optionalAttr) { 1904 m["out_idx"] = value 1905 } 1906 } 1907 1908 // Finds unique elements along an axis of a tensor. 1909 // 1910 // This operation either returns a tensor `y` containing unique elements 1911 // along the `axis` of a tensor. The returned unique elements is sorted 1912 // in the same order as they occur along `axis` in `x`. 1913 // This operation also returns a tensor `idx` that is the same size as 1914 // the number of the elements in `x` along the `axis` dimension. It 1915 // contains the index in the unique output `y`. 1916 // In other words, for an `1-D` tensor `x` with `axis = None: 1917 // 1918 // `y[idx[i]] = x[i] for i in [0, 1,...,rank(x) - 1]` 1919 // 1920 // For example: 1921 // 1922 // ``` 1923 // # tensor 'x' is [1, 1, 2, 4, 4, 4, 7, 8, 8] 1924 // y, idx = unique(x) 1925 // y ==> [1, 2, 4, 7, 8] 1926 // idx ==> [0, 0, 1, 2, 2, 2, 3, 4, 4] 1927 // ``` 1928 // 1929 // For an `2-D` tensor `x` with `axis = 0`: 1930 // 1931 // ``` 1932 // # tensor 'x' is [[1, 0, 0], 1933 // # [1, 0, 0], 1934 // # [2, 0, 0]] 1935 // y, idx = unique(x, axis=0) 1936 // y ==> [[1, 0, 0], 1937 // [2, 0, 0]] 1938 // idx ==> [0, 0, 1] 1939 // ``` 1940 // 1941 // For an `2-D` tensor `x` with `axis = 1`: 1942 // 1943 // ``` 1944 // # tensor 'x' is [[1, 0, 0], 1945 // # [1, 0, 0], 1946 // # [2, 0, 0]] 1947 // y, idx = unique(x, axis=1) 1948 // y ==> [[1, 0], 1949 // [1, 0], 1950 // [2, 0]] 1951 // idx ==> [0, 1, 1] 1952 // ``` 1953 // 1954 // Arguments: 1955 // x: A `Tensor`. 1956 // axis: A `Tensor` of type `int32` (default: None). The axis of the Tensor to 1957 // find the unique elements. 1958 // 1959 // Returns A `Tensor`. Unique elements along the `axis` of `Tensor` x.A 1-D Tensor. Has the same type as x that contains the index of each 1960 // value of x in the output y. 1961 func UniqueV2(scope *Scope, x tf.Output, axis tf.Output, optional ...UniqueV2Attr) (y tf.Output, idx tf.Output) { 1962 if scope.Err() != nil { 1963 return 1964 } 1965 attrs := map[string]interface{}{} 1966 for _, a := range optional { 1967 a(attrs) 1968 } 1969 opspec := tf.OpSpec{ 1970 Type: "UniqueV2", 1971 Input: []tf.Input{ 1972 x, axis, 1973 }, 1974 Attrs: attrs, 1975 } 1976 op := scope.AddOperation(opspec) 1977 return op.Output(0), op.Output(1) 1978 } 1979 1980 // UniqueAttr is an optional argument to Unique. 1981 type UniqueAttr func(optionalAttr) 1982 1983 // UniqueOutIdx sets the optional out_idx attribute to value. 1984 // If not specified, defaults to DT_INT32 1985 func UniqueOutIdx(value tf.DataType) UniqueAttr { 1986 return func(m optionalAttr) { 1987 m["out_idx"] = value 1988 } 1989 } 1990 1991 // Finds unique elements in a 1-D tensor. 1992 // 1993 // This operation returns a tensor `y` containing all of the unique elements of `x` 1994 // sorted in the same order that they occur in `x`. This operation also returns a 1995 // tensor `idx` the same size as `x` that contains the index of each value of `x` 1996 // in the unique output `y`. In other words: 1997 // 1998 // `y[idx[i]] = x[i] for i in [0, 1,...,rank(x) - 1]` 1999 // 2000 // For example: 2001 // 2002 // ``` 2003 // # tensor 'x' is [1, 1, 2, 4, 4, 4, 7, 8, 8] 2004 // y, idx = unique(x) 2005 // y ==> [1, 2, 4, 7, 8] 2006 // idx ==> [0, 0, 1, 2, 2, 2, 3, 4, 4] 2007 // ``` 2008 // 2009 // Arguments: 2010 // x: 1-D. 2011 // 2012 // Returns 1-D.1-D. 2013 func Unique(scope *Scope, x tf.Output, optional ...UniqueAttr) (y tf.Output, idx tf.Output) { 2014 if scope.Err() != nil { 2015 return 2016 } 2017 attrs := map[string]interface{}{} 2018 for _, a := range optional { 2019 a(attrs) 2020 } 2021 opspec := tf.OpSpec{ 2022 Type: "Unique", 2023 Input: []tf.Input{ 2024 x, 2025 }, 2026 Attrs: attrs, 2027 } 2028 op := scope.AddOperation(opspec) 2029 return op.Output(0), op.Output(1) 2030 } 2031 2032 // Shuffle dimensions of x according to a permutation and conjugate the result. 2033 // 2034 // The output `y` has the same rank as `x`. The shapes of `x` and `y` satisfy: 2035 // `y.shape[i] == x.shape[perm[i]] for i in [0, 1, ..., rank(x) - 1]` 2036 // `y[i,j,k,...,s,t,u] == conj(x[perm[i], perm[j], perm[k],...,perm[s], perm[t], perm[u]])` 2037 func ConjugateTranspose(scope *Scope, x tf.Output, perm tf.Output) (y tf.Output) { 2038 if scope.Err() != nil { 2039 return 2040 } 2041 opspec := tf.OpSpec{ 2042 Type: "ConjugateTranspose", 2043 Input: []tf.Input{ 2044 x, perm, 2045 }, 2046 } 2047 op := scope.AddOperation(opspec) 2048 return op.Output(0) 2049 } 2050 2051 // Reshapes a tensor. 2052 // 2053 // Given `tensor`, this operation returns a tensor that has the same values 2054 // as `tensor` with shape `shape`. 2055 // 2056 // If one component of `shape` is the special value -1, the size of that dimension 2057 // is computed so that the total size remains constant. In particular, a `shape` 2058 // of `[-1]` flattens into 1-D. At most one component of `shape` can be -1. 2059 // 2060 // If `shape` is 1-D or higher, then the operation returns a tensor with shape 2061 // `shape` filled with the values of `tensor`. In this case, the number of elements 2062 // implied by `shape` must be the same as the number of elements in `tensor`. 2063 // 2064 // For example: 2065 // 2066 // ``` 2067 // # tensor 't' is [1, 2, 3, 4, 5, 6, 7, 8, 9] 2068 // # tensor 't' has shape [9] 2069 // reshape(t, [3, 3]) ==> [[1, 2, 3], 2070 // [4, 5, 6], 2071 // [7, 8, 9]] 2072 // 2073 // # tensor 't' is [[[1, 1], [2, 2]], 2074 // # [[3, 3], [4, 4]]] 2075 // # tensor 't' has shape [2, 2, 2] 2076 // reshape(t, [2, 4]) ==> [[1, 1, 2, 2], 2077 // [3, 3, 4, 4]] 2078 // 2079 // # tensor 't' is [[[1, 1, 1], 2080 // # [2, 2, 2]], 2081 // # [[3, 3, 3], 2082 // # [4, 4, 4]], 2083 // # [[5, 5, 5], 2084 // # [6, 6, 6]]] 2085 // # tensor 't' has shape [3, 2, 3] 2086 // # pass '[-1]' to flatten 't' 2087 // reshape(t, [-1]) ==> [1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6] 2088 // 2089 // # -1 can also be used to infer the shape 2090 // 2091 // # -1 is inferred to be 9: 2092 // reshape(t, [2, -1]) ==> [[1, 1, 1, 2, 2, 2, 3, 3, 3], 2093 // [4, 4, 4, 5, 5, 5, 6, 6, 6]] 2094 // # -1 is inferred to be 2: 2095 // reshape(t, [-1, 9]) ==> [[1, 1, 1, 2, 2, 2, 3, 3, 3], 2096 // [4, 4, 4, 5, 5, 5, 6, 6, 6]] 2097 // # -1 is inferred to be 3: 2098 // reshape(t, [ 2, -1, 3]) ==> [[[1, 1, 1], 2099 // [2, 2, 2], 2100 // [3, 3, 3]], 2101 // [[4, 4, 4], 2102 // [5, 5, 5], 2103 // [6, 6, 6]]] 2104 // 2105 // # tensor 't' is [7] 2106 // # shape `[]` reshapes to a scalar 2107 // reshape(t, []) ==> 7 2108 // ``` 2109 // 2110 // Arguments: 2111 // 2112 // shape: Defines the shape of the output tensor. 2113 func Reshape(scope *Scope, tensor tf.Output, shape tf.Output) (output tf.Output) { 2114 if scope.Err() != nil { 2115 return 2116 } 2117 opspec := tf.OpSpec{ 2118 Type: "Reshape", 2119 Input: []tf.Input{ 2120 tensor, shape, 2121 }, 2122 } 2123 op := scope.AddOperation(opspec) 2124 return op.Output(0) 2125 } 2126 2127 // Checks a tensor for NaN and Inf values. 2128 // 2129 // When run, reports an `InvalidArgument` error if `tensor` has any values 2130 // that are not a number (NaN) or infinity (Inf). Otherwise, passes `tensor` as-is. 2131 // 2132 // Arguments: 2133 // 2134 // message: Prefix of the error message. 2135 func CheckNumerics(scope *Scope, tensor tf.Output, message string) (output tf.Output) { 2136 if scope.Err() != nil { 2137 return 2138 } 2139 attrs := map[string]interface{}{"message": message} 2140 opspec := tf.OpSpec{ 2141 Type: "CheckNumerics", 2142 Input: []tf.Input{ 2143 tensor, 2144 }, 2145 Attrs: attrs, 2146 } 2147 op := scope.AddOperation(opspec) 2148 return op.Output(0) 2149 } 2150 2151 // Gather slices from `params` into a Tensor with shape specified by `indices`. 2152 // 2153 // `indices` is an K-dimensional integer tensor, best thought of as a 2154 // (K-1)-dimensional tensor of indices into `params`, where each element defines a 2155 // slice of `params`: 2156 // 2157 // output[\\(i_0, ..., i_{K-2}\\)] = params[indices[\\(i_0, ..., i_{K-2}\\)]] 2158 // 2159 // Whereas in `tf.gather` `indices` defines slices into the first 2160 // dimension of `params`, in `tf.gather_nd`, `indices` defines slices into the 2161 // first `N` dimensions of `params`, where `N = indices.shape[-1]`. 2162 // 2163 // The last dimension of `indices` can be at most the rank of 2164 // `params`: 2165 // 2166 // indices.shape[-1] <= params.rank 2167 // 2168 // The last dimension of `indices` corresponds to elements 2169 // (if `indices.shape[-1] == params.rank`) or slices 2170 // (if `indices.shape[-1] < params.rank`) along dimension `indices.shape[-1]` 2171 // of `params`. The output tensor has shape 2172 // 2173 // indices.shape[:-1] + params.shape[indices.shape[-1]:] 2174 // 2175 // Note that on CPU, if an out of bound index is found, an error is returned. 2176 // On GPU, if an out of bound index is found, a 0 is stored in the 2177 // corresponding output value. 2178 // 2179 // Some examples below. 2180 // 2181 // Simple indexing into a matrix: 2182 // 2183 // ```python 2184 // indices = [[0, 0], [1, 1]] 2185 // params = [['a', 'b'], ['c', 'd']] 2186 // output = ['a', 'd'] 2187 // ``` 2188 // 2189 // Slice indexing into a matrix: 2190 // 2191 // ```python 2192 // indices = [[1], [0]] 2193 // params = [['a', 'b'], ['c', 'd']] 2194 // output = [['c', 'd'], ['a', 'b']] 2195 // ``` 2196 // 2197 // Indexing into a 3-tensor: 2198 // 2199 // ```python 2200 // indices = [[1]] 2201 // params = [[['a0', 'b0'], ['c0', 'd0']], 2202 // [['a1', 'b1'], ['c1', 'd1']]] 2203 // output = [[['a1', 'b1'], ['c1', 'd1']]] 2204 // 2205 // 2206 // indices = [[0, 1], [1, 0]] 2207 // params = [[['a0', 'b0'], ['c0', 'd0']], 2208 // [['a1', 'b1'], ['c1', 'd1']]] 2209 // output = [['c0', 'd0'], ['a1', 'b1']] 2210 // 2211 // 2212 // indices = [[0, 0, 1], [1, 0, 1]] 2213 // params = [[['a0', 'b0'], ['c0', 'd0']], 2214 // [['a1', 'b1'], ['c1', 'd1']]] 2215 // output = ['b0', 'b1'] 2216 // ``` 2217 // 2218 // Batched indexing into a matrix: 2219 // 2220 // ```python 2221 // indices = [[[0, 0]], [[0, 1]]] 2222 // params = [['a', 'b'], ['c', 'd']] 2223 // output = [['a'], ['b']] 2224 // ``` 2225 // 2226 // Batched slice indexing into a matrix: 2227 // 2228 // ```python 2229 // indices = [[[1]], [[0]]] 2230 // params = [['a', 'b'], ['c', 'd']] 2231 // output = [[['c', 'd']], [['a', 'b']]] 2232 // ``` 2233 // 2234 // Batched indexing into a 3-tensor: 2235 // 2236 // ```python 2237 // indices = [[[1]], [[0]]] 2238 // params = [[['a0', 'b0'], ['c0', 'd0']], 2239 // [['a1', 'b1'], ['c1', 'd1']]] 2240 // output = [[[['a1', 'b1'], ['c1', 'd1']]], 2241 // [[['a0', 'b0'], ['c0', 'd0']]]] 2242 // 2243 // indices = [[[0, 1], [1, 0]], [[0, 0], [1, 1]]] 2244 // params = [[['a0', 'b0'], ['c0', 'd0']], 2245 // [['a1', 'b1'], ['c1', 'd1']]] 2246 // output = [[['c0', 'd0'], ['a1', 'b1']], 2247 // [['a0', 'b0'], ['c1', 'd1']]] 2248 // 2249 // 2250 // indices = [[[0, 0, 1], [1, 0, 1]], [[0, 1, 1], [1, 1, 0]]] 2251 // params = [[['a0', 'b0'], ['c0', 'd0']], 2252 // [['a1', 'b1'], ['c1', 'd1']]] 2253 // output = [['b0', 'b1'], ['d0', 'c1']] 2254 // ``` 2255 // 2256 // See also `tf.gather` and `tf.batch_gather`. 2257 // 2258 // Arguments: 2259 // params: The tensor from which to gather values. 2260 // indices: Index tensor. 2261 // 2262 // Returns Values from `params` gathered from indices given by `indices`, with 2263 // shape `indices.shape[:-1] + params.shape[indices.shape[-1]:]`. 2264 func GatherNd(scope *Scope, params tf.Output, indices tf.Output) (output tf.Output) { 2265 if scope.Err() != nil { 2266 return 2267 } 2268 opspec := tf.OpSpec{ 2269 Type: "GatherNd", 2270 Input: []tf.Input{ 2271 params, indices, 2272 }, 2273 } 2274 op := scope.AddOperation(opspec) 2275 return op.Output(0) 2276 } 2277 2278 // GatherAttr is an optional argument to Gather. 2279 type GatherAttr func(optionalAttr) 2280 2281 // GatherValidateIndices sets the optional validate_indices attribute to value. 2282 // If not specified, defaults to true 2283 func GatherValidateIndices(value bool) GatherAttr { 2284 return func(m optionalAttr) { 2285 m["validate_indices"] = value 2286 } 2287 } 2288 2289 // Gather slices from `params` according to `indices`. 2290 // 2291 // `indices` must be an integer tensor of any dimension (usually 0-D or 1-D). 2292 // Produces an output tensor with shape `indices.shape + params.shape[1:]` where: 2293 // 2294 // ```python 2295 // # Scalar indices 2296 // output[:, ..., :] = params[indices, :, ... :] 2297 // 2298 // # Vector indices 2299 // output[i, :, ..., :] = params[indices[i], :, ... :] 2300 // 2301 // # Higher rank indices 2302 // output[i, ..., j, :, ... :] = params[indices[i, ..., j], :, ..., :] 2303 // ``` 2304 // 2305 // If `indices` is a permutation and `len(indices) == params.shape[0]` then 2306 // this operation will permute `params` accordingly. 2307 // 2308 // `validate_indices`: DEPRECATED. If this operation is assigned to CPU, values in 2309 // `indices` are always validated to be within range. If assigned to GPU, 2310 // out-of-bound indices result in safe but unspecified behavior, which may include 2311 // raising an error. 2312 // 2313 // <div style="width:70%; margin:auto; margin-bottom:10px; margin-top:20px;"> 2314 // <img style="width:100%" src="https://www.tensorflow.org/images/Gather.png" alt> 2315 // </div> 2316 func Gather(scope *Scope, params tf.Output, indices tf.Output, optional ...GatherAttr) (output tf.Output) { 2317 if scope.Err() != nil { 2318 return 2319 } 2320 attrs := map[string]interface{}{} 2321 for _, a := range optional { 2322 a(attrs) 2323 } 2324 opspec := tf.OpSpec{ 2325 Type: "Gather", 2326 Input: []tf.Input{ 2327 params, indices, 2328 }, 2329 Attrs: attrs, 2330 } 2331 op := scope.AddOperation(opspec) 2332 return op.Output(0) 2333 } 2334 2335 // LowerBoundAttr is an optional argument to LowerBound. 2336 type LowerBoundAttr func(optionalAttr) 2337 2338 // LowerBoundOutType sets the optional out_type attribute to value. 2339 // If not specified, defaults to DT_INT32 2340 func LowerBoundOutType(value tf.DataType) LowerBoundAttr { 2341 return func(m optionalAttr) { 2342 m["out_type"] = value 2343 } 2344 } 2345 2346 // Applies lower_bound(sorted_search_values, values) along each row. 2347 // 2348 // Each set of rows with the same index in (sorted_inputs, values) is treated 2349 // independently. The resulting row is the equivalent of calling 2350 // `np.searchsorted(sorted_inputs, values, side='left')`. 2351 // 2352 // The result is not a global index to the entire 2353 // `Tensor`, but rather just the index in the last dimension. 2354 // 2355 // A 2-D example: 2356 // sorted_sequence = [[0, 3, 9, 9, 10], 2357 // [1, 2, 3, 4, 5]] 2358 // values = [[2, 4, 9], 2359 // [0, 2, 6]] 2360 // 2361 // result = LowerBound(sorted_sequence, values) 2362 // 2363 // result == [[1, 2, 2], 2364 // [0, 1, 5]] 2365 // 2366 // Arguments: 2367 // sorted_inputs: 2-D Tensor where each row is ordered. 2368 // values: 2-D Tensor with the same numbers of rows as `sorted_search_values`. Contains 2369 // the values that will be searched for in `sorted_search_values`. 2370 // 2371 // Returns A `Tensor` with the same shape as `values`. It contains the first scalar index 2372 // into the last dimension where values can be inserted without changing the 2373 // ordered property. 2374 func LowerBound(scope *Scope, sorted_inputs tf.Output, values tf.Output, optional ...LowerBoundAttr) (output tf.Output) { 2375 if scope.Err() != nil { 2376 return 2377 } 2378 attrs := map[string]interface{}{} 2379 for _, a := range optional { 2380 a(attrs) 2381 } 2382 opspec := tf.OpSpec{ 2383 Type: "LowerBound", 2384 Input: []tf.Input{ 2385 sorted_inputs, values, 2386 }, 2387 Attrs: attrs, 2388 } 2389 op := scope.AddOperation(opspec) 2390 return op.Output(0) 2391 } 2392 2393 // Creates a tensor filled with a scalar value. 2394 // 2395 // This operation creates a tensor of shape `dims` and fills it with `value`. 2396 // 2397 // For example: 2398 // 2399 // ``` 2400 // # Output tensor has shape [2, 3]. 2401 // fill([2, 3], 9) ==> [[9, 9, 9] 2402 // [9, 9, 9]] 2403 // ``` 2404 // 2405 // `tf.fill` differs from `tf.constant` in a few ways: 2406 // 2407 // * `tf.fill` only supports scalar contents, whereas `tf.constant` supports 2408 // Tensor values. 2409 // * `tf.fill` creates an Op in the computation graph that constructs the actual 2410 // Tensor value at runtime. This is in contrast to `tf.constant` which embeds 2411 // the entire Tensor into the graph with a `Const` node. 2412 // * Because `tf.fill` evaluates at graph runtime, it supports dynamic shapes 2413 // based on other runtime Tensors, unlike `tf.constant`. 2414 // 2415 // Arguments: 2416 // dims: 1-D. Represents the shape of the output tensor. 2417 // value: 0-D (scalar). Value to fill the returned tensor. 2418 // 2419 // @compatibility(numpy) 2420 // Equivalent to np.full 2421 // @end_compatibility 2422 func Fill(scope *Scope, dims tf.Output, value tf.Output) (output tf.Output) { 2423 if scope.Err() != nil { 2424 return 2425 } 2426 opspec := tf.OpSpec{ 2427 Type: "Fill", 2428 Input: []tf.Input{ 2429 dims, value, 2430 }, 2431 } 2432 op := scope.AddOperation(opspec) 2433 return op.Output(0) 2434 } 2435 2436 // Reverses specific dimensions of a tensor. 2437 // 2438 // Given a `tensor`, and a `bool` tensor `dims` representing the dimensions 2439 // of `tensor`, this operation reverses each dimension i of `tensor` where 2440 // `dims[i]` is `True`. 2441 // 2442 // `tensor` can have up to 8 dimensions. The number of dimensions 2443 // of `tensor` must equal the number of elements in `dims`. In other words: 2444 // 2445 // `rank(tensor) = size(dims)` 2446 // 2447 // For example: 2448 // 2449 // ``` 2450 // # tensor 't' is [[[[ 0, 1, 2, 3], 2451 // # [ 4, 5, 6, 7], 2452 // # [ 8, 9, 10, 11]], 2453 // # [[12, 13, 14, 15], 2454 // # [16, 17, 18, 19], 2455 // # [20, 21, 22, 23]]]] 2456 // # tensor 't' shape is [1, 2, 3, 4] 2457 // 2458 // # 'dims' is [False, False, False, True] 2459 // reverse(t, dims) ==> [[[[ 3, 2, 1, 0], 2460 // [ 7, 6, 5, 4], 2461 // [ 11, 10, 9, 8]], 2462 // [[15, 14, 13, 12], 2463 // [19, 18, 17, 16], 2464 // [23, 22, 21, 20]]]] 2465 // 2466 // # 'dims' is [False, True, False, False] 2467 // reverse(t, dims) ==> [[[[12, 13, 14, 15], 2468 // [16, 17, 18, 19], 2469 // [20, 21, 22, 23] 2470 // [[ 0, 1, 2, 3], 2471 // [ 4, 5, 6, 7], 2472 // [ 8, 9, 10, 11]]]] 2473 // 2474 // # 'dims' is [False, False, True, False] 2475 // reverse(t, dims) ==> [[[[8, 9, 10, 11], 2476 // [4, 5, 6, 7], 2477 // [0, 1, 2, 3]] 2478 // [[20, 21, 22, 23], 2479 // [16, 17, 18, 19], 2480 // [12, 13, 14, 15]]]] 2481 // ``` 2482 // 2483 // Arguments: 2484 // tensor: Up to 8-D. 2485 // dims: 1-D. The dimensions to reverse. 2486 // 2487 // Returns The same shape as `tensor`. 2488 func Reverse(scope *Scope, tensor tf.Output, dims tf.Output) (output tf.Output) { 2489 if scope.Err() != nil { 2490 return 2491 } 2492 opspec := tf.OpSpec{ 2493 Type: "Reverse", 2494 Input: []tf.Input{ 2495 tensor, dims, 2496 }, 2497 } 2498 op := scope.AddOperation(opspec) 2499 return op.Output(0) 2500 } 2501 2502 // Returns the batched diagonal part of a batched tensor. 2503 // 2504 // This operation returns a tensor with the `diagonal` part 2505 // of the batched `input`. The `diagonal` part is computed as follows: 2506 // 2507 // Assume `input` has `k` dimensions `[I, J, K, ..., M, N]`, then the output is a 2508 // tensor of rank `k - 1` with dimensions `[I, J, K, ..., min(M, N)]` where: 2509 // 2510 // `diagonal[i, j, k, ..., n] = input[i, j, k, ..., n, n]`. 2511 // 2512 // The input must be at least a matrix. 2513 // 2514 // For example: 2515 // 2516 // ``` 2517 // # 'input' is [[[1, 0, 0, 0] 2518 // [0, 2, 0, 0] 2519 // [0, 0, 3, 0] 2520 // [0, 0, 0, 4]], 2521 // [[5, 0, 0, 0] 2522 // [0, 6, 0, 0] 2523 // [0, 0, 7, 0] 2524 // [0, 0, 0, 8]]] 2525 // 2526 // and input.shape = (2, 4, 4) 2527 // 2528 // tf.matrix_diag_part(input) ==> [[1, 2, 3, 4], [5, 6, 7, 8]] 2529 // 2530 // which has shape (2, 4) 2531 // ``` 2532 // 2533 // Arguments: 2534 // input: Rank `k` tensor where `k >= 2`. 2535 // 2536 // Returns The extracted diagonal(s) having shape 2537 // `diagonal.shape = input.shape[:-2] + [min(input.shape[-2:])]`. 2538 func MatrixDiagPart(scope *Scope, input tf.Output) (diagonal tf.Output) { 2539 if scope.Err() != nil { 2540 return 2541 } 2542 opspec := tf.OpSpec{ 2543 Type: "MatrixDiagPart", 2544 Input: []tf.Input{ 2545 input, 2546 }, 2547 } 2548 op := scope.AddOperation(opspec) 2549 return op.Output(0) 2550 } 2551 2552 // Returns a batched diagonal tensor with a given batched diagonal values. 2553 // 2554 // Given a `diagonal`, this operation returns a tensor with the `diagonal` and 2555 // everything else padded with zeros. The diagonal is computed as follows: 2556 // 2557 // Assume `diagonal` has `k` dimensions `[I, J, K, ..., N]`, then the output is a 2558 // tensor of rank `k+1` with dimensions [I, J, K, ..., N, N]` where: 2559 // 2560 // `output[i, j, k, ..., m, n] = 1{m=n} * diagonal[i, j, k, ..., n]`. 2561 // 2562 // For example: 2563 // 2564 // ``` 2565 // # 'diagonal' is [[1, 2, 3, 4], [5, 6, 7, 8]] 2566 // 2567 // and diagonal.shape = (2, 4) 2568 // 2569 // tf.matrix_diag(diagonal) ==> [[[1, 0, 0, 0] 2570 // [0, 2, 0, 0] 2571 // [0, 0, 3, 0] 2572 // [0, 0, 0, 4]], 2573 // [[5, 0, 0, 0] 2574 // [0, 6, 0, 0] 2575 // [0, 0, 7, 0] 2576 // [0, 0, 0, 8]]] 2577 // 2578 // which has shape (2, 4, 4) 2579 // ``` 2580 // 2581 // Arguments: 2582 // diagonal: Rank `k`, where `k >= 1`. 2583 // 2584 // Returns Rank `k+1`, with `output.shape = diagonal.shape + [diagonal.shape[-1]]`. 2585 func MatrixDiag(scope *Scope, diagonal tf.Output) (output tf.Output) { 2586 if scope.Err() != nil { 2587 return 2588 } 2589 opspec := tf.OpSpec{ 2590 Type: "MatrixDiag", 2591 Input: []tf.Input{ 2592 diagonal, 2593 }, 2594 } 2595 op := scope.AddOperation(opspec) 2596 return op.Output(0) 2597 } 2598 2599 // QuantizedInstanceNormAttr is an optional argument to QuantizedInstanceNorm. 2600 type QuantizedInstanceNormAttr func(optionalAttr) 2601 2602 // QuantizedInstanceNormOutputRangeGiven sets the optional output_range_given attribute to value. 2603 // 2604 // value: If True, `given_y_min` and `given_y_min` 2605 // and `given_y_max` are used as the output range. Otherwise, 2606 // the implementation computes the output range. 2607 // If not specified, defaults to false 2608 func QuantizedInstanceNormOutputRangeGiven(value bool) QuantizedInstanceNormAttr { 2609 return func(m optionalAttr) { 2610 m["output_range_given"] = value 2611 } 2612 } 2613 2614 // QuantizedInstanceNormGivenYMin sets the optional given_y_min attribute to value. 2615 // 2616 // value: Output in `y_min` if `output_range_given` is True. 2617 // If not specified, defaults to 0 2618 func QuantizedInstanceNormGivenYMin(value float32) QuantizedInstanceNormAttr { 2619 return func(m optionalAttr) { 2620 m["given_y_min"] = value 2621 } 2622 } 2623 2624 // QuantizedInstanceNormGivenYMax sets the optional given_y_max attribute to value. 2625 // 2626 // value: Output in `y_max` if `output_range_given` is True. 2627 // If not specified, defaults to 0 2628 func QuantizedInstanceNormGivenYMax(value float32) QuantizedInstanceNormAttr { 2629 return func(m optionalAttr) { 2630 m["given_y_max"] = value 2631 } 2632 } 2633 2634 // QuantizedInstanceNormVarianceEpsilon sets the optional variance_epsilon attribute to value. 2635 // 2636 // value: A small float number to avoid dividing by 0. 2637 // If not specified, defaults to 1e-05 2638 func QuantizedInstanceNormVarianceEpsilon(value float32) QuantizedInstanceNormAttr { 2639 return func(m optionalAttr) { 2640 m["variance_epsilon"] = value 2641 } 2642 } 2643 2644 // QuantizedInstanceNormMinSeparation sets the optional min_separation attribute to value. 2645 // 2646 // value: Minimum value of `y_max - y_min` 2647 // If not specified, defaults to 0.001 2648 func QuantizedInstanceNormMinSeparation(value float32) QuantizedInstanceNormAttr { 2649 return func(m optionalAttr) { 2650 m["min_separation"] = value 2651 } 2652 } 2653 2654 // Quantized Instance normalization. 2655 // 2656 // Arguments: 2657 // x: A 4D input Tensor. 2658 // x_min: The value represented by the lowest quantized input. 2659 // x_max: The value represented by the highest quantized input. 2660 // 2661 // Returns A 4D Tensor.The value represented by the lowest quantized output.The value represented by the highest quantized output. 2662 func QuantizedInstanceNorm(scope *Scope, x tf.Output, x_min tf.Output, x_max tf.Output, optional ...QuantizedInstanceNormAttr) (y tf.Output, y_min tf.Output, y_max tf.Output) { 2663 if scope.Err() != nil { 2664 return 2665 } 2666 attrs := map[string]interface{}{} 2667 for _, a := range optional { 2668 a(attrs) 2669 } 2670 opspec := tf.OpSpec{ 2671 Type: "QuantizedInstanceNorm", 2672 Input: []tf.Input{ 2673 x, x_min, x_max, 2674 }, 2675 Attrs: attrs, 2676 } 2677 op := scope.AddOperation(opspec) 2678 return op.Output(0), op.Output(1), op.Output(2) 2679 } 2680 2681 // Returns the diagonal part of the tensor. 2682 // 2683 // This operation returns a tensor with the `diagonal` part 2684 // of the `input`. The `diagonal` part is computed as follows: 2685 // 2686 // Assume `input` has dimensions `[D1,..., Dk, D1,..., Dk]`, then the output is a 2687 // tensor of rank `k` with dimensions `[D1,..., Dk]` where: 2688 // 2689 // `diagonal[i1,..., ik] = input[i1, ..., ik, i1,..., ik]`. 2690 // 2691 // For example: 2692 // 2693 // ``` 2694 // # 'input' is [[1, 0, 0, 0] 2695 // [0, 2, 0, 0] 2696 // [0, 0, 3, 0] 2697 // [0, 0, 0, 4]] 2698 // 2699 // tf.diag_part(input) ==> [1, 2, 3, 4] 2700 // ``` 2701 // 2702 // Arguments: 2703 // input: Rank k tensor where k is even and not zero. 2704 // 2705 // Returns The extracted diagonal. 2706 func DiagPart(scope *Scope, input tf.Output) (diagonal tf.Output) { 2707 if scope.Err() != nil { 2708 return 2709 } 2710 opspec := tf.OpSpec{ 2711 Type: "DiagPart", 2712 Input: []tf.Input{ 2713 input, 2714 }, 2715 } 2716 op := scope.AddOperation(opspec) 2717 return op.Output(0) 2718 } 2719 2720 // Gives a guarantee to the TF runtime that the input tensor is a constant. 2721 // 2722 // The runtime is then free to make optimizations based on this. 2723 // 2724 // Only accepts value typed tensors as inputs and rejects resource variable handles 2725 // as input. 2726 // 2727 // Returns the input tensor without modification. 2728 func GuaranteeConst(scope *Scope, input tf.Output) (output tf.Output) { 2729 if scope.Err() != nil { 2730 return 2731 } 2732 opspec := tf.OpSpec{ 2733 Type: "GuaranteeConst", 2734 Input: []tf.Input{ 2735 input, 2736 }, 2737 } 2738 op := scope.AddOperation(opspec) 2739 return op.Output(0) 2740 } 2741 2742 // Returns a constant tensor on the host. Only for writing C++ tests. 2743 // 2744 // Arguments: 2745 // value: Attr `value` is the tensor to return. 2746 // 2747 func HostConst(scope *Scope, value tf.Tensor, dtype tf.DataType) (output tf.Output) { 2748 if scope.Err() != nil { 2749 return 2750 } 2751 attrs := map[string]interface{}{"value": value, "dtype": dtype} 2752 opspec := tf.OpSpec{ 2753 Type: "HostConst", 2754 2755 Attrs: attrs, 2756 } 2757 op := scope.AddOperation(opspec) 2758 return op.Output(0) 2759 } 2760 2761 // Splits a tensor into `num_split` tensors along one dimension. 2762 // 2763 // Arguments: 2764 // value: The tensor to split. 2765 // size_splits: list containing the sizes of each output tensor along the split 2766 // dimension. Must sum to the dimension of value along split_dim. 2767 // Can contain one -1 indicating that dimension is to be inferred. 2768 // axis: 0-D. The dimension along which to split. Must be in the range 2769 // `[-rank(value), rank(value))`. 2770 // 2771 // 2772 // Returns Tensors whose shape matches that of `value` 2773 // except along `axis`, where their sizes are 2774 // `size_splits[i]`. 2775 func SplitV(scope *Scope, value tf.Output, size_splits tf.Output, axis tf.Output, num_split int64) (output []tf.Output) { 2776 if scope.Err() != nil { 2777 return 2778 } 2779 attrs := map[string]interface{}{"num_split": num_split} 2780 opspec := tf.OpSpec{ 2781 Type: "SplitV", 2782 Input: []tf.Input{ 2783 value, size_splits, axis, 2784 }, 2785 Attrs: attrs, 2786 } 2787 op := scope.AddOperation(opspec) 2788 if scope.Err() != nil { 2789 return 2790 } 2791 var idx int 2792 var err error 2793 if output, idx, err = makeOutputList(op, idx, "output"); err != nil { 2794 scope.UpdateErr("SplitV", err) 2795 return 2796 } 2797 return output 2798 } 2799 2800 // Splits a tensor into `num_split` tensors along one dimension. 2801 // 2802 // Arguments: 2803 // axis: 0-D. The dimension along which to split. Must be in the range 2804 // `[-rank(value), rank(value))`. 2805 // value: The tensor to split. 2806 // num_split: The number of ways to split. Must evenly divide 2807 // `value.shape[split_dim]`. 2808 // 2809 // Returns They are identically shaped tensors, whose shape matches that of `value` 2810 // except along `axis`, where their sizes are 2811 // `values.shape[split_dim] / num_split`. 2812 func Split(scope *Scope, axis tf.Output, value tf.Output, num_split int64) (output []tf.Output) { 2813 if scope.Err() != nil { 2814 return 2815 } 2816 attrs := map[string]interface{}{"num_split": num_split} 2817 opspec := tf.OpSpec{ 2818 Type: "Split", 2819 Input: []tf.Input{ 2820 axis, value, 2821 }, 2822 Attrs: attrs, 2823 } 2824 op := scope.AddOperation(opspec) 2825 if scope.Err() != nil { 2826 return 2827 } 2828 var idx int 2829 var err error 2830 if output, idx, err = makeOutputList(op, idx, "output"); err != nil { 2831 scope.UpdateErr("Split", err) 2832 return 2833 } 2834 return output 2835 } 2836 2837 // Concatenates tensors along one dimension. 2838 // 2839 // Arguments: 2840 // concat_dim: 0-D. The dimension along which to concatenate. Must be in the 2841 // range [0, rank(values)). 2842 // values: The `N` Tensors to concatenate. Their ranks and types must match, 2843 // and their sizes must match in all dimensions except `concat_dim`. 2844 // 2845 // Returns A `Tensor` with the concatenation of values stacked along the 2846 // `concat_dim` dimension. This tensor's shape matches that of `values` except 2847 // in `concat_dim` where it has the sum of the sizes. 2848 func Concat(scope *Scope, concat_dim tf.Output, values []tf.Output) (output tf.Output) { 2849 if scope.Err() != nil { 2850 return 2851 } 2852 opspec := tf.OpSpec{ 2853 Type: "Concat", 2854 Input: []tf.Input{ 2855 concat_dim, tf.OutputList(values), 2856 }, 2857 } 2858 op := scope.AddOperation(opspec) 2859 return op.Output(0) 2860 } 2861 2862 // Broadcast an array for a compatible shape. 2863 // 2864 // Broadcasting is the process of making arrays to have compatible shapes 2865 // for arithmetic operations. Two shapes are compatible if for each 2866 // dimension pair they are either equal or one of them is one. When trying 2867 // to broadcast a Tensor to a shape, it starts with the trailing dimensions, 2868 // and works its way forward. 2869 // 2870 // For example, 2871 // ``` 2872 // >>> x = tf.constant([1, 2, 3]) 2873 // >>> y = tf.broadcast_to(x, [3, 3]) 2874 // >>> sess.run(y) 2875 // array([[1, 2, 3], 2876 // [1, 2, 3], 2877 // [1, 2, 3]], dtype=int32) 2878 // ``` 2879 // In the above example, the input Tensor with the shape of `[1, 3]` 2880 // is broadcasted to output Tensor with shape of `[3, 3]`. 2881 // 2882 // Arguments: 2883 // input: A Tensor to broadcast. 2884 // shape: An 1-D `int` Tensor. The shape of the desired output. 2885 // 2886 // Returns A Tensor. 2887 func BroadcastTo(scope *Scope, input tf.Output, shape tf.Output) (output tf.Output) { 2888 if scope.Err() != nil { 2889 return 2890 } 2891 opspec := tf.OpSpec{ 2892 Type: "BroadcastTo", 2893 Input: []tf.Input{ 2894 input, shape, 2895 }, 2896 } 2897 op := scope.AddOperation(opspec) 2898 return op.Output(0) 2899 } 2900 2901 // Converts a flat index or array of flat indices into a tuple of 2902 // 2903 // coordinate arrays. 2904 // 2905 // @compatibility(numpy) 2906 // Equivalent to np.unravel_index 2907 // @end_compatibility 2908 // 2909 // Arguments: 2910 // indices: An 0-D or 1-D `int` Tensor whose elements are indices into the 2911 // flattened version of an array of dimensions dims. 2912 // dims: An 1-D `int` Tensor. The shape of the array to use for unraveling 2913 // indices. 2914 // 2915 // Returns An 2-D (or 1-D if indices is 0-D) tensor where each row has the 2916 // same shape as the indices array. 2917 func UnravelIndex(scope *Scope, indices tf.Output, dims tf.Output) (output tf.Output) { 2918 if scope.Err() != nil { 2919 return 2920 } 2921 opspec := tf.OpSpec{ 2922 Type: "UnravelIndex", 2923 Input: []tf.Input{ 2924 indices, dims, 2925 }, 2926 } 2927 op := scope.AddOperation(opspec) 2928 return op.Output(0) 2929 } 2930 2931 // Subtracts `v` into specified rows of `x`. 2932 // 2933 // Computes y = x; y[i, :] -= v; return y. 2934 // 2935 // Arguments: 2936 // x: A `Tensor` of type T. 2937 // i: A vector. Indices into the left-most dimension of `x`. 2938 // v: A `Tensor` of type T. Same dimension sizes as x except the first dimension, which must be the same as i's size. 2939 // 2940 // Returns A `Tensor` of type T. An alias of `x`. The content of `y` is undefined if there are duplicates in `i`. 2941 func InplaceSub(scope *Scope, x tf.Output, i tf.Output, v tf.Output) (y tf.Output) { 2942 if scope.Err() != nil { 2943 return 2944 } 2945 opspec := tf.OpSpec{ 2946 Type: "InplaceSub", 2947 Input: []tf.Input{ 2948 x, i, v, 2949 }, 2950 } 2951 op := scope.AddOperation(opspec) 2952 return op.Output(0) 2953 } 2954 2955 // Makes a copy of `x`. 2956 // 2957 // Arguments: 2958 // x: The source tensor of type `T`. 2959 // 2960 // Returns y: A `Tensor` of type `T`. A copy of `x`. Guaranteed that `y` 2961 // is not an alias of `x`. 2962 func DeepCopy(scope *Scope, x tf.Output) (y tf.Output) { 2963 if scope.Err() != nil { 2964 return 2965 } 2966 opspec := tf.OpSpec{ 2967 Type: "DeepCopy", 2968 Input: []tf.Input{ 2969 x, 2970 }, 2971 } 2972 op := scope.AddOperation(opspec) 2973 return op.Output(0) 2974 } 2975 2976 // PackAttr is an optional argument to Pack. 2977 type PackAttr func(optionalAttr) 2978 2979 // PackAxis sets the optional axis attribute to value. 2980 // 2981 // value: Dimension along which to pack. Negative values wrap around, so the 2982 // valid range is `[-(R+1), R+1)`. 2983 // If not specified, defaults to 0 2984 func PackAxis(value int64) PackAttr { 2985 return func(m optionalAttr) { 2986 m["axis"] = value 2987 } 2988 } 2989 2990 // Packs a list of `N` rank-`R` tensors into one rank-`(R+1)` tensor. 2991 // 2992 // Packs the `N` tensors in `values` into a tensor with rank one higher than each 2993 // tensor in `values`, by packing them along the `axis` dimension. 2994 // Given a list of tensors of shape `(A, B, C)`; 2995 // 2996 // if `axis == 0` then the `output` tensor will have the shape `(N, A, B, C)`. 2997 // if `axis == 1` then the `output` tensor will have the shape `(A, N, B, C)`. 2998 // Etc. 2999 // 3000 // For example: 3001 // 3002 // ``` 3003 // # 'x' is [1, 4] 3004 // # 'y' is [2, 5] 3005 // # 'z' is [3, 6] 3006 // pack([x, y, z]) => [[1, 4], [2, 5], [3, 6]] # Pack along first dim. 3007 // pack([x, y, z], axis=1) => [[1, 2, 3], [4, 5, 6]] 3008 // ``` 3009 // 3010 // This is the opposite of `unpack`. 3011 // 3012 // Arguments: 3013 // values: Must be of same shape and type. 3014 // 3015 // Returns The packed tensor. 3016 func Pack(scope *Scope, values []tf.Output, optional ...PackAttr) (output tf.Output) { 3017 if scope.Err() != nil { 3018 return 3019 } 3020 attrs := map[string]interface{}{} 3021 for _, a := range optional { 3022 a(attrs) 3023 } 3024 opspec := tf.OpSpec{ 3025 Type: "Pack", 3026 Input: []tf.Input{ 3027 tf.OutputList(values), 3028 }, 3029 Attrs: attrs, 3030 } 3031 op := scope.AddOperation(opspec) 3032 return op.Output(0) 3033 } 3034 3035 // Concatenates a list of `N` tensors along the first dimension. 3036 // 3037 // The input tensors are all required to have size 1 in the first dimension. 3038 // 3039 // For example: 3040 // 3041 // ``` 3042 // # 'x' is [[1, 4]] 3043 // # 'y' is [[2, 5]] 3044 // # 'z' is [[3, 6]] 3045 // parallel_concat([x, y, z]) => [[1, 4], [2, 5], [3, 6]] # Pack along first dim. 3046 // ``` 3047 // 3048 // The difference between concat and parallel_concat is that concat requires all 3049 // of the inputs be computed before the operation will begin but doesn't require 3050 // that the input shapes be known during graph construction. Parallel concat 3051 // will copy pieces of the input into the output as they become available, in 3052 // some situations this can provide a performance benefit. 3053 // 3054 // Arguments: 3055 // values: Tensors to be concatenated. All must have size 1 in the first dimension 3056 // and same shape. 3057 // shape: the final shape of the result; should be equal to the shapes of any input 3058 // but with the number of input values in the first dimension. 3059 // 3060 // Returns The concatenated tensor. 3061 func ParallelConcat(scope *Scope, values []tf.Output, shape tf.Shape) (output tf.Output) { 3062 if scope.Err() != nil { 3063 return 3064 } 3065 attrs := map[string]interface{}{"shape": shape} 3066 opspec := tf.OpSpec{ 3067 Type: "ParallelConcat", 3068 Input: []tf.Input{ 3069 tf.OutputList(values), 3070 }, 3071 Attrs: attrs, 3072 } 3073 op := scope.AddOperation(opspec) 3074 return op.Output(0) 3075 } 3076 3077 // DecodeWavAttr is an optional argument to DecodeWav. 3078 type DecodeWavAttr func(optionalAttr) 3079 3080 // DecodeWavDesiredChannels sets the optional desired_channels attribute to value. 3081 // 3082 // value: Number of sample channels wanted. 3083 // If not specified, defaults to -1 3084 func DecodeWavDesiredChannels(value int64) DecodeWavAttr { 3085 return func(m optionalAttr) { 3086 m["desired_channels"] = value 3087 } 3088 } 3089 3090 // DecodeWavDesiredSamples sets the optional desired_samples attribute to value. 3091 // 3092 // value: Length of audio requested. 3093 // If not specified, defaults to -1 3094 func DecodeWavDesiredSamples(value int64) DecodeWavAttr { 3095 return func(m optionalAttr) { 3096 m["desired_samples"] = value 3097 } 3098 } 3099 3100 // Decode a 16-bit PCM WAV file to a float tensor. 3101 // 3102 // The -32768 to 32767 signed 16-bit values will be scaled to -1.0 to 1.0 in float. 3103 // 3104 // When desired_channels is set, if the input contains fewer channels than this 3105 // then the last channel will be duplicated to give the requested number, else if 3106 // the input has more channels than requested then the additional channels will be 3107 // ignored. 3108 // 3109 // If desired_samples is set, then the audio will be cropped or padded with zeroes 3110 // to the requested length. 3111 // 3112 // The first output contains a Tensor with the content of the audio samples. The 3113 // lowest dimension will be the number of channels, and the second will be the 3114 // number of samples. For example, a ten-sample-long stereo WAV file should give an 3115 // output shape of [10, 2]. 3116 // 3117 // Arguments: 3118 // contents: The WAV-encoded audio, usually from a file. 3119 // 3120 // Returns 2-D with shape `[length, channels]`.Scalar holding the sample rate found in the WAV header. 3121 func DecodeWav(scope *Scope, contents tf.Output, optional ...DecodeWavAttr) (audio tf.Output, sample_rate tf.Output) { 3122 if scope.Err() != nil { 3123 return 3124 } 3125 attrs := map[string]interface{}{} 3126 for _, a := range optional { 3127 a(attrs) 3128 } 3129 opspec := tf.OpSpec{ 3130 Type: "DecodeWav", 3131 Input: []tf.Input{ 3132 contents, 3133 }, 3134 Attrs: attrs, 3135 } 3136 op := scope.AddOperation(opspec) 3137 return op.Output(0), op.Output(1) 3138 } 3139 3140 // UnbatchAttr is an optional argument to Unbatch. 3141 type UnbatchAttr func(optionalAttr) 3142 3143 // UnbatchContainer sets the optional container attribute to value. 3144 // If not specified, defaults to "" 3145 func UnbatchContainer(value string) UnbatchAttr { 3146 return func(m optionalAttr) { 3147 m["container"] = value 3148 } 3149 } 3150 3151 // UnbatchSharedName sets the optional shared_name attribute to value. 3152 // If not specified, defaults to "" 3153 func UnbatchSharedName(value string) UnbatchAttr { 3154 return func(m optionalAttr) { 3155 m["shared_name"] = value 3156 } 3157 } 3158 3159 // Reverses the operation of Batch for a single output Tensor. 3160 // 3161 // An instance of Unbatch either receives an empty batched_tensor, in which case it 3162 // asynchronously waits until the values become available from a concurrently 3163 // running instance of Unbatch with the same container and shared_name, or receives 3164 // a non-empty batched_tensor in which case it finalizes all other concurrently 3165 // running instances and outputs its own element from the batch. 3166 // 3167 // batched_tensor: The possibly transformed output of Batch. The size of the first 3168 // dimension should remain unchanged by the transformations for the operation to 3169 // work. 3170 // batch_index: The matching batch_index obtained from Batch. 3171 // id: The id scalar emitted by Batch. 3172 // unbatched_tensor: The Tensor corresponding to this execution. 3173 // timeout_micros: Maximum amount of time (in microseconds) to wait to receive the 3174 // batched input tensor associated with a given invocation of the op. 3175 // container: Container to control resource sharing. 3176 // shared_name: Instances of Unbatch with the same container and shared_name are 3177 // assumed to possibly belong to the same batch. If left empty, the op name will 3178 // be used as the shared name. 3179 func Unbatch(scope *Scope, batched_tensor tf.Output, batch_index tf.Output, id tf.Output, timeout_micros int64, optional ...UnbatchAttr) (unbatched_tensor tf.Output) { 3180 if scope.Err() != nil { 3181 return 3182 } 3183 attrs := map[string]interface{}{"timeout_micros": timeout_micros} 3184 for _, a := range optional { 3185 a(attrs) 3186 } 3187 opspec := tf.OpSpec{ 3188 Type: "Unbatch", 3189 Input: []tf.Input{ 3190 batched_tensor, batch_index, id, 3191 }, 3192 Attrs: attrs, 3193 } 3194 op := scope.AddOperation(opspec) 3195 return op.Output(0) 3196 } 3197 3198 // Elementwise computes the bitwise left-shift of `x` and `y`. 3199 // 3200 // If `y` is negative, or greater than or equal to the width of `x` in bits the 3201 // result is implementation defined. 3202 func LeftShift(scope *Scope, x tf.Output, y tf.Output) (z tf.Output) { 3203 if scope.Err() != nil { 3204 return 3205 } 3206 opspec := tf.OpSpec{ 3207 Type: "LeftShift", 3208 Input: []tf.Input{ 3209 x, y, 3210 }, 3211 } 3212 op := scope.AddOperation(opspec) 3213 return op.Output(0) 3214 } 3215 3216 // Elementwise computes the bitwise XOR of `x` and `y`. 3217 // 3218 // The result will have those bits set, that are different in `x` and `y`. The 3219 // computation is performed on the underlying representations of `x` and `y`. 3220 func BitwiseXor(scope *Scope, x tf.Output, y tf.Output) (z tf.Output) { 3221 if scope.Err() != nil { 3222 return 3223 } 3224 opspec := tf.OpSpec{ 3225 Type: "BitwiseXor", 3226 Input: []tf.Input{ 3227 x, y, 3228 }, 3229 } 3230 op := scope.AddOperation(opspec) 3231 return op.Output(0) 3232 } 3233 3234 // Computes element-wise population count (a.k.a. popcount, bitsum, bitcount). 3235 // 3236 // For each entry in `x`, calculates the number of `1` (on) bits in the binary 3237 // representation of that entry. 3238 // 3239 // **NOTE**: It is more efficient to first `tf.bitcast` your tensors into 3240 // `int32` or `int64` and perform the bitcount on the result, than to feed in 3241 // 8- or 16-bit inputs and then aggregate the resulting counts. 3242 func PopulationCount(scope *Scope, x tf.Output) (y tf.Output) { 3243 if scope.Err() != nil { 3244 return 3245 } 3246 opspec := tf.OpSpec{ 3247 Type: "PopulationCount", 3248 Input: []tf.Input{ 3249 x, 3250 }, 3251 } 3252 op := scope.AddOperation(opspec) 3253 return op.Output(0) 3254 } 3255 3256 // Bucketize each feature based on bucket boundaries. 3257 // 3258 // An op that returns a list of float tensors, where each tensor represents the 3259 // bucketized values for a single feature. 3260 // 3261 // Arguments: 3262 // float_values: float; List of Rank 1 Tensor each containing float values for a single feature. 3263 // bucket_boundaries: float; List of Rank 1 Tensors each containing the bucket boundaries for a single 3264 // feature. 3265 // 3266 // Returns int; List of Rank 1 Tensors each containing the bucketized values for a single feature. 3267 func BoostedTreesBucketize(scope *Scope, float_values []tf.Output, bucket_boundaries []tf.Output) (buckets []tf.Output) { 3268 if scope.Err() != nil { 3269 return 3270 } 3271 opspec := tf.OpSpec{ 3272 Type: "BoostedTreesBucketize", 3273 Input: []tf.Input{ 3274 tf.OutputList(float_values), tf.OutputList(bucket_boundaries), 3275 }, 3276 } 3277 op := scope.AddOperation(opspec) 3278 if scope.Err() != nil { 3279 return 3280 } 3281 var idx int 3282 var err error 3283 if buckets, idx, err = makeOutputList(op, idx, "buckets"); err != nil { 3284 scope.UpdateErr("BoostedTreesBucketize", err) 3285 return 3286 } 3287 return buckets 3288 } 3289 3290 // BoostedTreesQuantileStreamResourceFlushAttr is an optional argument to BoostedTreesQuantileStreamResourceFlush. 3291 type BoostedTreesQuantileStreamResourceFlushAttr func(optionalAttr) 3292 3293 // BoostedTreesQuantileStreamResourceFlushGenerateQuantiles sets the optional generate_quantiles attribute to value. 3294 // 3295 // value: bool; If True, the output will be the num_quantiles for each stream where the ith 3296 // entry is the ith quantile of the input with an approximation error of epsilon. 3297 // Duplicate values may be present. 3298 // If False, the output will be the points in the histogram that we got which roughly 3299 // translates to 1/epsilon boundaries and without any duplicates. 3300 // Default to False. 3301 // If not specified, defaults to false 3302 func BoostedTreesQuantileStreamResourceFlushGenerateQuantiles(value bool) BoostedTreesQuantileStreamResourceFlushAttr { 3303 return func(m optionalAttr) { 3304 m["generate_quantiles"] = value 3305 } 3306 } 3307 3308 // Flush the summaries for a quantile stream resource. 3309 // 3310 // An op that flushes the summaries for a quantile stream resource. 3311 // 3312 // Arguments: 3313 // quantile_stream_resource_handle: resource handle referring to a QuantileStreamResource. 3314 // num_buckets: int; approximate number of buckets unless using generate_quantiles. 3315 // 3316 // Returns the created operation. 3317 func BoostedTreesQuantileStreamResourceFlush(scope *Scope, quantile_stream_resource_handle tf.Output, num_buckets tf.Output, optional ...BoostedTreesQuantileStreamResourceFlushAttr) (o *tf.Operation) { 3318 if scope.Err() != nil { 3319 return 3320 } 3321 attrs := map[string]interface{}{} 3322 for _, a := range optional { 3323 a(attrs) 3324 } 3325 opspec := tf.OpSpec{ 3326 Type: "BoostedTreesQuantileStreamResourceFlush", 3327 Input: []tf.Input{ 3328 quantile_stream_resource_handle, num_buckets, 3329 }, 3330 Attrs: attrs, 3331 } 3332 return scope.AddOperation(opspec) 3333 } 3334 3335 // Makes the summary of quantiles for the batch. 3336 // 3337 // An op that takes a list of tensors (one tensor per feature) and outputs the 3338 // quantile summaries for each tensor. 3339 // 3340 // Arguments: 3341 // float_values: float; List of Rank 1 Tensors each containing values for a single feature. 3342 // example_weights: float; Rank 1 Tensor with weights per instance. 3343 // epsilon: float; The required maximum approximation error. 3344 // 3345 // Returns float; List of Rank 2 Tensors each containing the quantile summary 3346 // (value, weight, min_rank, max_rank) of a single feature. 3347 func BoostedTreesMakeQuantileSummaries(scope *Scope, float_values []tf.Output, example_weights tf.Output, epsilon tf.Output) (summaries []tf.Output) { 3348 if scope.Err() != nil { 3349 return 3350 } 3351 opspec := tf.OpSpec{ 3352 Type: "BoostedTreesMakeQuantileSummaries", 3353 Input: []tf.Input{ 3354 tf.OutputList(float_values), example_weights, epsilon, 3355 }, 3356 } 3357 op := scope.AddOperation(opspec) 3358 if scope.Err() != nil { 3359 return 3360 } 3361 var idx int 3362 var err error 3363 if summaries, idx, err = makeOutputList(op, idx, "summaries"); err != nil { 3364 scope.UpdateErr("BoostedTreesMakeQuantileSummaries", err) 3365 return 3366 } 3367 return summaries 3368 } 3369 3370 // BoostedTreesCreateQuantileStreamResourceAttr is an optional argument to BoostedTreesCreateQuantileStreamResource. 3371 type BoostedTreesCreateQuantileStreamResourceAttr func(optionalAttr) 3372 3373 // BoostedTreesCreateQuantileStreamResourceMaxElements sets the optional max_elements attribute to value. 3374 // 3375 // value: int; The maximum number of data points that can be fed to the stream. 3376 // If not specified, defaults to 1099511627776 3377 func BoostedTreesCreateQuantileStreamResourceMaxElements(value int64) BoostedTreesCreateQuantileStreamResourceAttr { 3378 return func(m optionalAttr) { 3379 m["max_elements"] = value 3380 } 3381 } 3382 3383 // Create the Resource for Quantile Streams. 3384 // 3385 // Arguments: 3386 // quantile_stream_resource_handle: resource; Handle to quantile stream resource. 3387 // epsilon: float; The required approximation error of the stream resource. 3388 // num_streams: int; The number of streams managed by the resource that shares the same epsilon. 3389 // 3390 // Returns the created operation. 3391 func BoostedTreesCreateQuantileStreamResource(scope *Scope, quantile_stream_resource_handle tf.Output, epsilon tf.Output, num_streams tf.Output, optional ...BoostedTreesCreateQuantileStreamResourceAttr) (o *tf.Operation) { 3392 if scope.Err() != nil { 3393 return 3394 } 3395 attrs := map[string]interface{}{} 3396 for _, a := range optional { 3397 a(attrs) 3398 } 3399 opspec := tf.OpSpec{ 3400 Type: "BoostedTreesCreateQuantileStreamResource", 3401 Input: []tf.Input{ 3402 quantile_stream_resource_handle, epsilon, num_streams, 3403 }, 3404 Attrs: attrs, 3405 } 3406 return scope.AddOperation(opspec) 3407 } 3408 3409 // Checks whether a quantile stream has been initialized. 3410 // 3411 // An Op that checks if quantile stream resource is initialized. 3412 // 3413 // Arguments: 3414 // quantile_stream_resource_handle: resource; The reference to quantile stream resource handle. 3415 // 3416 // Returns bool; True if the resource is initialized, False otherwise. 3417 func IsBoostedTreesQuantileStreamResourceInitialized(scope *Scope, quantile_stream_resource_handle tf.Output) (is_initialized tf.Output) { 3418 if scope.Err() != nil { 3419 return 3420 } 3421 opspec := tf.OpSpec{ 3422 Type: "IsBoostedTreesQuantileStreamResourceInitialized", 3423 Input: []tf.Input{ 3424 quantile_stream_resource_handle, 3425 }, 3426 } 3427 op := scope.AddOperation(opspec) 3428 return op.Output(0) 3429 } 3430 3431 // Calculates the prior from the training data (the bias) and fills in the first node with the logits' prior. Returns a boolean indicating whether to continue centering. 3432 // 3433 // Arguments: 3434 // tree_ensemble_handle: Handle to the tree ensemble. 3435 // mean_gradients: A tensor with shape=[logits_dimension] with mean of gradients for a first node. 3436 // mean_hessians: A tensor with shape=[logits_dimension] mean of hessians for a first node. 3437 // l1: l1 regularization factor on leaf weights, per instance based. 3438 // l2: l2 regularization factor on leaf weights, per instance based. 3439 // 3440 // Returns Bool, whether to continue bias centering. 3441 func BoostedTreesCenterBias(scope *Scope, tree_ensemble_handle tf.Output, mean_gradients tf.Output, mean_hessians tf.Output, l1 tf.Output, l2 tf.Output) (continue_centering tf.Output) { 3442 if scope.Err() != nil { 3443 return 3444 } 3445 opspec := tf.OpSpec{ 3446 Type: "BoostedTreesCenterBias", 3447 Input: []tf.Input{ 3448 tree_ensemble_handle, mean_gradients, mean_hessians, l1, l2, 3449 }, 3450 } 3451 op := scope.AddOperation(opspec) 3452 return op.Output(0) 3453 } 3454 3455 // Runs multiple additive regression ensemble predictors on input instances and 3456 // 3457 // computes the update to cached logits. It is designed to be used during training. 3458 // It traverses the trees starting from cached tree id and cached node id and 3459 // calculates the updates to be pushed to the cache. 3460 // 3461 // Arguments: 3462 // 3463 // cached_tree_ids: Rank 1 Tensor containing cached tree ids which is the starting 3464 // tree of prediction. 3465 // cached_node_ids: Rank 1 Tensor containing cached node id which is the starting 3466 // node of prediction. 3467 // bucketized_features: A list of rank 1 Tensors containing bucket id for each 3468 // feature. 3469 // logits_dimension: scalar, dimension of the logits, to be used for partial logits 3470 // shape. 3471 // 3472 // Returns Rank 2 Tensor containing logits update (with respect to cached 3473 // values stored) for each example.Rank 1 Tensor containing new tree ids for each example.Rank 1 Tensor containing new node ids in the new tree_ids. 3474 func BoostedTreesTrainingPredict(scope *Scope, tree_ensemble_handle tf.Output, cached_tree_ids tf.Output, cached_node_ids tf.Output, bucketized_features []tf.Output, logits_dimension int64) (partial_logits tf.Output, tree_ids tf.Output, node_ids tf.Output) { 3475 if scope.Err() != nil { 3476 return 3477 } 3478 attrs := map[string]interface{}{"logits_dimension": logits_dimension} 3479 opspec := tf.OpSpec{ 3480 Type: "BoostedTreesTrainingPredict", 3481 Input: []tf.Input{ 3482 tree_ensemble_handle, cached_tree_ids, cached_node_ids, tf.OutputList(bucketized_features), 3483 }, 3484 Attrs: attrs, 3485 } 3486 op := scope.AddOperation(opspec) 3487 return op.Output(0), op.Output(1), op.Output(2) 3488 } 3489 3490 // Serializes the tree ensemble to a proto. 3491 // 3492 // Arguments: 3493 // tree_ensemble_handle: Handle to the tree ensemble. 3494 // 3495 // Returns Stamp token of the tree ensemble resource.Serialized proto of the ensemble. 3496 func BoostedTreesSerializeEnsemble(scope *Scope, tree_ensemble_handle tf.Output) (stamp_token tf.Output, tree_ensemble_serialized tf.Output) { 3497 if scope.Err() != nil { 3498 return 3499 } 3500 opspec := tf.OpSpec{ 3501 Type: "BoostedTreesSerializeEnsemble", 3502 Input: []tf.Input{ 3503 tree_ensemble_handle, 3504 }, 3505 } 3506 op := scope.AddOperation(opspec) 3507 return op.Output(0), op.Output(1) 3508 } 3509 3510 // Debugging/model interpretability outputs for each example. 3511 // 3512 // It traverses all the trees and computes debug metrics for individual examples, 3513 // such as getting split feature ids and logits after each split along the decision 3514 // path used to compute directional feature contributions. 3515 // 3516 // Arguments: 3517 // 3518 // bucketized_features: A list of rank 1 Tensors containing bucket id for each 3519 // feature. 3520 // logits_dimension: scalar, dimension of the logits, to be used for constructing the protos in 3521 // examples_debug_outputs_serialized. 3522 // 3523 // Returns Output rank 1 Tensor containing a proto serialized as a string for each example. 3524 func BoostedTreesExampleDebugOutputs(scope *Scope, tree_ensemble_handle tf.Output, bucketized_features []tf.Output, logits_dimension int64) (examples_debug_outputs_serialized tf.Output) { 3525 if scope.Err() != nil { 3526 return 3527 } 3528 attrs := map[string]interface{}{"logits_dimension": logits_dimension} 3529 opspec := tf.OpSpec{ 3530 Type: "BoostedTreesExampleDebugOutputs", 3531 Input: []tf.Input{ 3532 tree_ensemble_handle, tf.OutputList(bucketized_features), 3533 }, 3534 Attrs: attrs, 3535 } 3536 op := scope.AddOperation(opspec) 3537 return op.Output(0) 3538 } 3539 3540 // Makes the summary of accumulated stats for the batch. 3541 // 3542 // The summary stats contains gradients and hessians accumulated into the corresponding node and bucket for each example. 3543 // 3544 // Arguments: 3545 // node_ids: int32 Rank 1 Tensor containing node ids, which each example falls into for the requested layer. 3546 // gradients: float32; Rank 2 Tensor (shape=[#examples, 1]) for gradients. 3547 // hessians: float32; Rank 2 Tensor (shape=[#examples, 1]) for hessians. 3548 // bucketized_features_list: int32 list of Rank 1 Tensors, each containing the bucketized feature (for each feature column). 3549 // max_splits: int; the maximum number of splits possible in the whole tree. 3550 // num_buckets: int; equals to the maximum possible value of bucketized feature. 3551 // 3552 // Returns output Rank 4 Tensor (shape=[#features, #splits, #buckets, 2]) containing accumulated stats put into the corresponding node and bucket. The first index of 4th dimension refers to gradients, and the second to hessians. 3553 func BoostedTreesMakeStatsSummary(scope *Scope, node_ids tf.Output, gradients tf.Output, hessians tf.Output, bucketized_features_list []tf.Output, max_splits int64, num_buckets int64) (stats_summary tf.Output) { 3554 if scope.Err() != nil { 3555 return 3556 } 3557 attrs := map[string]interface{}{"max_splits": max_splits, "num_buckets": num_buckets} 3558 opspec := tf.OpSpec{ 3559 Type: "BoostedTreesMakeStatsSummary", 3560 Input: []tf.Input{ 3561 node_ids, gradients, hessians, tf.OutputList(bucketized_features_list), 3562 }, 3563 Attrs: attrs, 3564 } 3565 op := scope.AddOperation(opspec) 3566 return op.Output(0) 3567 } 3568 3569 // Creates a tree ensemble model and returns a handle to it. 3570 // 3571 // Arguments: 3572 // tree_ensemble_handle: Handle to the tree ensemble resource to be created. 3573 // stamp_token: Token to use as the initial value of the resource stamp. 3574 // tree_ensemble_serialized: Serialized proto of the tree ensemble. 3575 // 3576 // Returns the created operation. 3577 func BoostedTreesCreateEnsemble(scope *Scope, tree_ensemble_handle tf.Output, stamp_token tf.Output, tree_ensemble_serialized tf.Output) (o *tf.Operation) { 3578 if scope.Err() != nil { 3579 return 3580 } 3581 opspec := tf.OpSpec{ 3582 Type: "BoostedTreesCreateEnsemble", 3583 Input: []tf.Input{ 3584 tree_ensemble_handle, stamp_token, tree_ensemble_serialized, 3585 }, 3586 } 3587 return scope.AddOperation(opspec) 3588 } 3589 3590 // Checks whether a tree ensemble has been initialized. 3591 // 3592 // Arguments: 3593 // tree_ensemble_handle: Handle to the tree ensemble resouce. 3594 // 3595 // Returns output boolean on whether it is initialized or not. 3596 func IsBoostedTreesEnsembleInitialized(scope *Scope, tree_ensemble_handle tf.Output) (is_initialized tf.Output) { 3597 if scope.Err() != nil { 3598 return 3599 } 3600 opspec := tf.OpSpec{ 3601 Type: "IsBoostedTreesEnsembleInitialized", 3602 Input: []tf.Input{ 3603 tree_ensemble_handle, 3604 }, 3605 } 3606 op := scope.AddOperation(opspec) 3607 return op.Output(0) 3608 } 3609 3610 // BoostedTreesEnsembleResourceHandleOpAttr is an optional argument to BoostedTreesEnsembleResourceHandleOp. 3611 type BoostedTreesEnsembleResourceHandleOpAttr func(optionalAttr) 3612 3613 // BoostedTreesEnsembleResourceHandleOpContainer sets the optional container attribute to value. 3614 // If not specified, defaults to "" 3615 func BoostedTreesEnsembleResourceHandleOpContainer(value string) BoostedTreesEnsembleResourceHandleOpAttr { 3616 return func(m optionalAttr) { 3617 m["container"] = value 3618 } 3619 } 3620 3621 // BoostedTreesEnsembleResourceHandleOpSharedName sets the optional shared_name attribute to value. 3622 // If not specified, defaults to "" 3623 func BoostedTreesEnsembleResourceHandleOpSharedName(value string) BoostedTreesEnsembleResourceHandleOpAttr { 3624 return func(m optionalAttr) { 3625 m["shared_name"] = value 3626 } 3627 } 3628 3629 // Creates a handle to a BoostedTreesEnsembleResource 3630 func BoostedTreesEnsembleResourceHandleOp(scope *Scope, optional ...BoostedTreesEnsembleResourceHandleOpAttr) (resource tf.Output) { 3631 if scope.Err() != nil { 3632 return 3633 } 3634 attrs := map[string]interface{}{} 3635 for _, a := range optional { 3636 a(attrs) 3637 } 3638 opspec := tf.OpSpec{ 3639 Type: "BoostedTreesEnsembleResourceHandleOp", 3640 3641 Attrs: attrs, 3642 } 3643 op := scope.AddOperation(opspec) 3644 return op.Output(0) 3645 } 3646 3647 // Output the logits for the given input data 3648 // 3649 // Arguments: 3650 // tree_handle: Handle to the tree resource. 3651 // dense_features: Rank 2 dense features tensor. 3652 // logits_dimension: Scalar, dimension of the logits. 3653 // 3654 // Returns The logits predictions from the tree for each instance in the batch. 3655 func TensorForestTreePredict(scope *Scope, tree_handle tf.Output, dense_features tf.Output, logits_dimension int64) (logits tf.Output) { 3656 if scope.Err() != nil { 3657 return 3658 } 3659 attrs := map[string]interface{}{"logits_dimension": logits_dimension} 3660 opspec := tf.OpSpec{ 3661 Type: "TensorForestTreePredict", 3662 Input: []tf.Input{ 3663 tree_handle, dense_features, 3664 }, 3665 Attrs: attrs, 3666 } 3667 op := scope.AddOperation(opspec) 3668 return op.Output(0) 3669 } 3670 3671 // Get the number of nodes in a tree 3672 // 3673 // Arguments: 3674 // tree_handle: Handle to the tree resource. 3675 // 3676 // Returns The size of the tree. 3677 func TensorForestTreeSize(scope *Scope, tree_handle tf.Output) (tree_size tf.Output) { 3678 if scope.Err() != nil { 3679 return 3680 } 3681 opspec := tf.OpSpec{ 3682 Type: "TensorForestTreeSize", 3683 Input: []tf.Input{ 3684 tree_handle, 3685 }, 3686 } 3687 op := scope.AddOperation(opspec) 3688 return op.Output(0) 3689 } 3690 3691 // Creates a tree resource and returns a handle to it. 3692 // 3693 // Arguments: 3694 // tree_handle: Handle to the tree resource to be created. 3695 // tree_config: Serialized proto string of the boosted_trees.Tree. 3696 // 3697 // Returns the created operation. 3698 func TensorForestCreateTreeVariable(scope *Scope, tree_handle tf.Output, tree_config tf.Output) (o *tf.Operation) { 3699 if scope.Err() != nil { 3700 return 3701 } 3702 opspec := tf.OpSpec{ 3703 Type: "TensorForestCreateTreeVariable", 3704 Input: []tf.Input{ 3705 tree_handle, tree_config, 3706 }, 3707 } 3708 return scope.AddOperation(opspec) 3709 } 3710 3711 // ComputeAccidentalHitsAttr is an optional argument to ComputeAccidentalHits. 3712 type ComputeAccidentalHitsAttr func(optionalAttr) 3713 3714 // ComputeAccidentalHitsSeed sets the optional seed attribute to value. 3715 // 3716 // value: If either seed or seed2 are set to be non-zero, the random number 3717 // generator is seeded by the given seed. Otherwise, it is seeded by a 3718 // random seed. 3719 // If not specified, defaults to 0 3720 func ComputeAccidentalHitsSeed(value int64) ComputeAccidentalHitsAttr { 3721 return func(m optionalAttr) { 3722 m["seed"] = value 3723 } 3724 } 3725 3726 // ComputeAccidentalHitsSeed2 sets the optional seed2 attribute to value. 3727 // 3728 // value: An second seed to avoid seed collision. 3729 // If not specified, defaults to 0 3730 func ComputeAccidentalHitsSeed2(value int64) ComputeAccidentalHitsAttr { 3731 return func(m optionalAttr) { 3732 m["seed2"] = value 3733 } 3734 } 3735 3736 // Computes the ids of the positions in sampled_candidates that match true_labels. 3737 // 3738 // When doing log-odds NCE, the result of this op should be passed through a 3739 // SparseToDense op, then added to the logits of the sampled candidates. This has 3740 // the effect of 'removing' the sampled labels that match the true labels by 3741 // making the classifier sure that they are sampled labels. 3742 // 3743 // Arguments: 3744 // true_classes: The true_classes output of UnpackSparseLabels. 3745 // sampled_candidates: The sampled_candidates output of CandidateSampler. 3746 // num_true: Number of true labels per context. 3747 // 3748 // Returns A vector of indices corresponding to rows of true_candidates.A vector of IDs of positions in sampled_candidates that match a true_label 3749 // for the row with the corresponding index in indices.A vector of the same length as indices and ids, in which each element 3750 // is -FLOAT_MAX. 3751 func ComputeAccidentalHits(scope *Scope, true_classes tf.Output, sampled_candidates tf.Output, num_true int64, optional ...ComputeAccidentalHitsAttr) (indices tf.Output, ids tf.Output, weights tf.Output) { 3752 if scope.Err() != nil { 3753 return 3754 } 3755 attrs := map[string]interface{}{"num_true": num_true} 3756 for _, a := range optional { 3757 a(attrs) 3758 } 3759 opspec := tf.OpSpec{ 3760 Type: "ComputeAccidentalHits", 3761 Input: []tf.Input{ 3762 true_classes, sampled_candidates, 3763 }, 3764 Attrs: attrs, 3765 } 3766 op := scope.AddOperation(opspec) 3767 return op.Output(0), op.Output(1), op.Output(2) 3768 } 3769 3770 // FixedUnigramCandidateSamplerAttr is an optional argument to FixedUnigramCandidateSampler. 3771 type FixedUnigramCandidateSamplerAttr func(optionalAttr) 3772 3773 // FixedUnigramCandidateSamplerVocabFile sets the optional vocab_file attribute to value. 3774 // 3775 // value: Each valid line in this file (which should have a CSV-like format) 3776 // corresponds to a valid word ID. IDs are in sequential order, starting from 3777 // num_reserved_ids. The last entry in each line is expected to be a value 3778 // corresponding to the count or relative probability. Exactly one of vocab_file 3779 // and unigrams needs to be passed to this op. 3780 // If not specified, defaults to "" 3781 func FixedUnigramCandidateSamplerVocabFile(value string) FixedUnigramCandidateSamplerAttr { 3782 return func(m optionalAttr) { 3783 m["vocab_file"] = value 3784 } 3785 } 3786 3787 // FixedUnigramCandidateSamplerDistortion sets the optional distortion attribute to value. 3788 // 3789 // value: The distortion is used to skew the unigram probability distribution. 3790 // Each weight is first raised to the distortion's power before adding to the 3791 // internal unigram distribution. As a result, distortion = 1.0 gives regular 3792 // unigram sampling (as defined by the vocab file), and distortion = 0.0 gives 3793 // a uniform distribution. 3794 // If not specified, defaults to 1 3795 func FixedUnigramCandidateSamplerDistortion(value float32) FixedUnigramCandidateSamplerAttr { 3796 return func(m optionalAttr) { 3797 m["distortion"] = value 3798 } 3799 } 3800 3801 // FixedUnigramCandidateSamplerNumReservedIds sets the optional num_reserved_ids attribute to value. 3802 // 3803 // value: Optionally some reserved IDs can be added in the range [0, 3804 // ..., num_reserved_ids) by the users. One use case is that a special unknown 3805 // word token is used as ID 0. These IDs will have a sampling probability of 0. 3806 // If not specified, defaults to 0 3807 func FixedUnigramCandidateSamplerNumReservedIds(value int64) FixedUnigramCandidateSamplerAttr { 3808 return func(m optionalAttr) { 3809 m["num_reserved_ids"] = value 3810 } 3811 } 3812 3813 // FixedUnigramCandidateSamplerNumShards sets the optional num_shards attribute to value. 3814 // 3815 // value: A sampler can be used to sample from a subset of the original range 3816 // in order to speed up the whole computation through parallelism. This parameter 3817 // (together with 'shard') indicates the number of partitions that are being 3818 // used in the overall computation. 3819 // If not specified, defaults to 1 3820 // 3821 // REQUIRES: value >= 1 3822 func FixedUnigramCandidateSamplerNumShards(value int64) FixedUnigramCandidateSamplerAttr { 3823 return func(m optionalAttr) { 3824 m["num_shards"] = value 3825 } 3826 } 3827 3828 // FixedUnigramCandidateSamplerShard sets the optional shard attribute to value. 3829 // 3830 // value: A sampler can be used to sample from a subset of the original range 3831 // in order to speed up the whole computation through parallelism. This parameter 3832 // (together with 'num_shards') indicates the particular partition number of a 3833 // sampler op, when partitioning is being used. 3834 // If not specified, defaults to 0 3835 // 3836 // REQUIRES: value >= 0 3837 func FixedUnigramCandidateSamplerShard(value int64) FixedUnigramCandidateSamplerAttr { 3838 return func(m optionalAttr) { 3839 m["shard"] = value 3840 } 3841 } 3842 3843 // FixedUnigramCandidateSamplerUnigrams sets the optional unigrams attribute to value. 3844 // 3845 // value: A list of unigram counts or probabilities, one per ID in sequential 3846 // order. Exactly one of vocab_file and unigrams should be passed to this op. 3847 // If not specified, defaults to <> 3848 func FixedUnigramCandidateSamplerUnigrams(value []float32) FixedUnigramCandidateSamplerAttr { 3849 return func(m optionalAttr) { 3850 m["unigrams"] = value 3851 } 3852 } 3853 3854 // FixedUnigramCandidateSamplerSeed sets the optional seed attribute to value. 3855 // 3856 // value: If either seed or seed2 are set to be non-zero, the random number 3857 // generator is seeded by the given seed. Otherwise, it is seeded by a 3858 // random seed. 3859 // If not specified, defaults to 0 3860 func FixedUnigramCandidateSamplerSeed(value int64) FixedUnigramCandidateSamplerAttr { 3861 return func(m optionalAttr) { 3862 m["seed"] = value 3863 } 3864 } 3865 3866 // FixedUnigramCandidateSamplerSeed2 sets the optional seed2 attribute to value. 3867 // 3868 // value: An second seed to avoid seed collision. 3869 // If not specified, defaults to 0 3870 func FixedUnigramCandidateSamplerSeed2(value int64) FixedUnigramCandidateSamplerAttr { 3871 return func(m optionalAttr) { 3872 m["seed2"] = value 3873 } 3874 } 3875 3876 // Generates labels for candidate sampling with a learned unigram distribution. 3877 // 3878 // A unigram sampler could use a fixed unigram distribution read from a 3879 // file or passed in as an in-memory array instead of building up the distribution 3880 // from data on the fly. There is also an option to skew the distribution by 3881 // applying a distortion power to the weights. 3882 // 3883 // The vocabulary file should be in CSV-like format, with the last field 3884 // being the weight associated with the word. 3885 // 3886 // For each batch, this op picks a single set of sampled candidate labels. 3887 // 3888 // The advantages of sampling candidates per-batch are simplicity and the 3889 // possibility of efficient dense matrix multiplication. The disadvantage is that 3890 // the sampled candidates must be chosen independently of the context and of the 3891 // true labels. 3892 // 3893 // Arguments: 3894 // true_classes: A batch_size * num_true matrix, in which each row contains the 3895 // IDs of the num_true target_classes in the corresponding original label. 3896 // num_true: Number of true labels per context. 3897 // num_sampled: Number of candidates to randomly sample. 3898 // unique: If unique is true, we sample with rejection, so that all sampled 3899 // candidates in a batch are unique. This requires some approximation to 3900 // estimate the post-rejection sampling probabilities. 3901 // range_max: The sampler will sample integers from the interval [0, range_max). 3902 // 3903 // Returns A vector of length num_sampled, in which each element is 3904 // the ID of a sampled candidate.A batch_size * num_true matrix, representing 3905 // the number of times each candidate is expected to occur in a batch 3906 // of sampled candidates. If unique=true, then this is a probability.A vector of length num_sampled, for each sampled 3907 // candidate representing the number of times the candidate is expected 3908 // to occur in a batch of sampled candidates. If unique=true, then this is a 3909 // probability. 3910 func FixedUnigramCandidateSampler(scope *Scope, true_classes tf.Output, num_true int64, num_sampled int64, unique bool, range_max int64, optional ...FixedUnigramCandidateSamplerAttr) (sampled_candidates tf.Output, true_expected_count tf.Output, sampled_expected_count tf.Output) { 3911 if scope.Err() != nil { 3912 return 3913 } 3914 attrs := map[string]interface{}{"num_true": num_true, "num_sampled": num_sampled, "unique": unique, "range_max": range_max} 3915 for _, a := range optional { 3916 a(attrs) 3917 } 3918 opspec := tf.OpSpec{ 3919 Type: "FixedUnigramCandidateSampler", 3920 Input: []tf.Input{ 3921 true_classes, 3922 }, 3923 Attrs: attrs, 3924 } 3925 op := scope.AddOperation(opspec) 3926 return op.Output(0), op.Output(1), op.Output(2) 3927 } 3928 3929 // LogUniformCandidateSamplerAttr is an optional argument to LogUniformCandidateSampler. 3930 type LogUniformCandidateSamplerAttr func(optionalAttr) 3931 3932 // LogUniformCandidateSamplerSeed sets the optional seed attribute to value. 3933 // 3934 // value: If either seed or seed2 are set to be non-zero, the random number 3935 // generator is seeded by the given seed. Otherwise, it is seeded by a 3936 // random seed. 3937 // If not specified, defaults to 0 3938 func LogUniformCandidateSamplerSeed(value int64) LogUniformCandidateSamplerAttr { 3939 return func(m optionalAttr) { 3940 m["seed"] = value 3941 } 3942 } 3943 3944 // LogUniformCandidateSamplerSeed2 sets the optional seed2 attribute to value. 3945 // 3946 // value: An second seed to avoid seed collision. 3947 // If not specified, defaults to 0 3948 func LogUniformCandidateSamplerSeed2(value int64) LogUniformCandidateSamplerAttr { 3949 return func(m optionalAttr) { 3950 m["seed2"] = value 3951 } 3952 } 3953 3954 // Generates labels for candidate sampling with a log-uniform distribution. 3955 // 3956 // See explanations of candidate sampling and the data formats at 3957 // go/candidate-sampling. 3958 // 3959 // For each batch, this op picks a single set of sampled candidate labels. 3960 // 3961 // The advantages of sampling candidates per-batch are simplicity and the 3962 // possibility of efficient dense matrix multiplication. The disadvantage is that 3963 // the sampled candidates must be chosen independently of the context and of the 3964 // true labels. 3965 // 3966 // Arguments: 3967 // true_classes: A batch_size * num_true matrix, in which each row contains the 3968 // IDs of the num_true target_classes in the corresponding original label. 3969 // num_true: Number of true labels per context. 3970 // num_sampled: Number of candidates to randomly sample. 3971 // unique: If unique is true, we sample with rejection, so that all sampled 3972 // candidates in a batch are unique. This requires some approximation to 3973 // estimate the post-rejection sampling probabilities. 3974 // range_max: The sampler will sample integers from the interval [0, range_max). 3975 // 3976 // Returns A vector of length num_sampled, in which each element is 3977 // the ID of a sampled candidate.A batch_size * num_true matrix, representing 3978 // the number of times each candidate is expected to occur in a batch 3979 // of sampled candidates. If unique=true, then this is a probability.A vector of length num_sampled, for each sampled 3980 // candidate representing the number of times the candidate is expected 3981 // to occur in a batch of sampled candidates. If unique=true, then this is a 3982 // probability. 3983 func LogUniformCandidateSampler(scope *Scope, true_classes tf.Output, num_true int64, num_sampled int64, unique bool, range_max int64, optional ...LogUniformCandidateSamplerAttr) (sampled_candidates tf.Output, true_expected_count tf.Output, sampled_expected_count tf.Output) { 3984 if scope.Err() != nil { 3985 return 3986 } 3987 attrs := map[string]interface{}{"num_true": num_true, "num_sampled": num_sampled, "unique": unique, "range_max": range_max} 3988 for _, a := range optional { 3989 a(attrs) 3990 } 3991 opspec := tf.OpSpec{ 3992 Type: "LogUniformCandidateSampler", 3993 Input: []tf.Input{ 3994 true_classes, 3995 }, 3996 Attrs: attrs, 3997 } 3998 op := scope.AddOperation(opspec) 3999 return op.Output(0), op.Output(1), op.Output(2) 4000 } 4001 4002 // UniformCandidateSamplerAttr is an optional argument to UniformCandidateSampler. 4003 type UniformCandidateSamplerAttr func(optionalAttr) 4004 4005 // UniformCandidateSamplerSeed sets the optional seed attribute to value. 4006 // 4007 // value: If either seed or seed2 are set to be non-zero, the random number 4008 // generator is seeded by the given seed. Otherwise, it is seeded by a 4009 // random seed. 4010 // If not specified, defaults to 0 4011 func UniformCandidateSamplerSeed(value int64) UniformCandidateSamplerAttr { 4012 return func(m optionalAttr) { 4013 m["seed"] = value 4014 } 4015 } 4016 4017 // UniformCandidateSamplerSeed2 sets the optional seed2 attribute to value. 4018 // 4019 // value: An second seed to avoid seed collision. 4020 // If not specified, defaults to 0 4021 func UniformCandidateSamplerSeed2(value int64) UniformCandidateSamplerAttr { 4022 return func(m optionalAttr) { 4023 m["seed2"] = value 4024 } 4025 } 4026 4027 // Generates labels for candidate sampling with a uniform distribution. 4028 // 4029 // See explanations of candidate sampling and the data formats at 4030 // go/candidate-sampling. 4031 // 4032 // For each batch, this op picks a single set of sampled candidate labels. 4033 // 4034 // The advantages of sampling candidates per-batch are simplicity and the 4035 // possibility of efficient dense matrix multiplication. The disadvantage is that 4036 // the sampled candidates must be chosen independently of the context and of the 4037 // true labels. 4038 // 4039 // Arguments: 4040 // true_classes: A batch_size * num_true matrix, in which each row contains the 4041 // IDs of the num_true target_classes in the corresponding original label. 4042 // num_true: Number of true labels per context. 4043 // num_sampled: Number of candidates to randomly sample. 4044 // unique: If unique is true, we sample with rejection, so that all sampled 4045 // candidates in a batch are unique. This requires some approximation to 4046 // estimate the post-rejection sampling probabilities. 4047 // range_max: The sampler will sample integers from the interval [0, range_max). 4048 // 4049 // Returns A vector of length num_sampled, in which each element is 4050 // the ID of a sampled candidate.A batch_size * num_true matrix, representing 4051 // the number of times each candidate is expected to occur in a batch 4052 // of sampled candidates. If unique=true, then this is a probability.A vector of length num_sampled, for each sampled 4053 // candidate representing the number of times the candidate is expected 4054 // to occur in a batch of sampled candidates. If unique=true, then this is a 4055 // probability. 4056 func UniformCandidateSampler(scope *Scope, true_classes tf.Output, num_true int64, num_sampled int64, unique bool, range_max int64, optional ...UniformCandidateSamplerAttr) (sampled_candidates tf.Output, true_expected_count tf.Output, sampled_expected_count tf.Output) { 4057 if scope.Err() != nil { 4058 return 4059 } 4060 attrs := map[string]interface{}{"num_true": num_true, "num_sampled": num_sampled, "unique": unique, "range_max": range_max} 4061 for _, a := range optional { 4062 a(attrs) 4063 } 4064 opspec := tf.OpSpec{ 4065 Type: "UniformCandidateSampler", 4066 Input: []tf.Input{ 4067 true_classes, 4068 }, 4069 Attrs: attrs, 4070 } 4071 op := scope.AddOperation(opspec) 4072 return op.Output(0), op.Output(1), op.Output(2) 4073 } 4074 4075 // Broadcasts a tensor value to one or more other devices. 4076 func CollectiveBcastSend(scope *Scope, input tf.Output, group_size int64, group_key int64, instance_key int64, shape tf.Shape) (data tf.Output) { 4077 if scope.Err() != nil { 4078 return 4079 } 4080 attrs := map[string]interface{}{"group_size": group_size, "group_key": group_key, "instance_key": instance_key, "shape": shape} 4081 opspec := tf.OpSpec{ 4082 Type: "CollectiveBcastSend", 4083 Input: []tf.Input{ 4084 input, 4085 }, 4086 Attrs: attrs, 4087 } 4088 op := scope.AddOperation(opspec) 4089 return op.Output(0) 4090 } 4091 4092 // Mutually accumulates multiple tensors of identical type and shape. 4093 func CollectiveGather(scope *Scope, input tf.Output, group_size int64, group_key int64, instance_key int64, shape tf.Shape) (data tf.Output) { 4094 if scope.Err() != nil { 4095 return 4096 } 4097 attrs := map[string]interface{}{"group_size": group_size, "group_key": group_key, "instance_key": instance_key, "shape": shape} 4098 opspec := tf.OpSpec{ 4099 Type: "CollectiveGather", 4100 Input: []tf.Input{ 4101 input, 4102 }, 4103 Attrs: attrs, 4104 } 4105 op := scope.AddOperation(opspec) 4106 return op.Output(0) 4107 } 4108 4109 // CollectiveReduceAttr is an optional argument to CollectiveReduce. 4110 type CollectiveReduceAttr func(optionalAttr) 4111 4112 // CollectiveReduceWaitFor sets the optional wait_for attribute to value. 4113 // If not specified, defaults to <> 4114 func CollectiveReduceWaitFor(value []int64) CollectiveReduceAttr { 4115 return func(m optionalAttr) { 4116 m["wait_for"] = value 4117 } 4118 } 4119 4120 // Mutually reduces multiple tensors of identical type and shape. 4121 func CollectiveReduce(scope *Scope, input tf.Output, group_size int64, group_key int64, instance_key int64, merge_op string, final_op string, subdiv_offsets []int64, optional ...CollectiveReduceAttr) (data tf.Output) { 4122 if scope.Err() != nil { 4123 return 4124 } 4125 attrs := map[string]interface{}{"group_size": group_size, "group_key": group_key, "instance_key": instance_key, "merge_op": merge_op, "final_op": final_op, "subdiv_offsets": subdiv_offsets} 4126 for _, a := range optional { 4127 a(attrs) 4128 } 4129 opspec := tf.OpSpec{ 4130 Type: "CollectiveReduce", 4131 Input: []tf.Input{ 4132 input, 4133 }, 4134 Attrs: attrs, 4135 } 4136 op := scope.AddOperation(opspec) 4137 return op.Output(0) 4138 } 4139 4140 // AbortAttr is an optional argument to Abort. 4141 type AbortAttr func(optionalAttr) 4142 4143 // AbortErrorMsg sets the optional error_msg attribute to value. 4144 // 4145 // value: A string which is the message associated with the exception. 4146 // If not specified, defaults to "" 4147 func AbortErrorMsg(value string) AbortAttr { 4148 return func(m optionalAttr) { 4149 m["error_msg"] = value 4150 } 4151 } 4152 4153 // AbortExitWithoutError sets the optional exit_without_error attribute to value. 4154 // If not specified, defaults to false 4155 func AbortExitWithoutError(value bool) AbortAttr { 4156 return func(m optionalAttr) { 4157 m["exit_without_error"] = value 4158 } 4159 } 4160 4161 // Raise a exception to abort the process when called. 4162 // 4163 // If exit_without_error is true, the process will exit normally, 4164 // otherwise it will exit with a SIGABORT signal. 4165 // 4166 // Returns nothing but an exception. 4167 // 4168 // Returns the created operation. 4169 func Abort(scope *Scope, optional ...AbortAttr) (o *tf.Operation) { 4170 if scope.Err() != nil { 4171 return 4172 } 4173 attrs := map[string]interface{}{} 4174 for _, a := range optional { 4175 a(attrs) 4176 } 4177 opspec := tf.OpSpec{ 4178 Type: "Abort", 4179 4180 Attrs: attrs, 4181 } 4182 return scope.AddOperation(opspec) 4183 } 4184 4185 // Forwards the input to the output. 4186 // 4187 // This operator represents the loop termination condition used by the 4188 // "pivot" switches of a loop. 4189 // 4190 // Arguments: 4191 // input: A boolean scalar, representing the branch predicate of the Switch op. 4192 // 4193 // Returns The same tensor as `input`. 4194 func LoopCond(scope *Scope, input tf.Output) (output tf.Output) { 4195 if scope.Err() != nil { 4196 return 4197 } 4198 opspec := tf.OpSpec{ 4199 Type: "LoopCond", 4200 Input: []tf.Input{ 4201 input, 4202 }, 4203 } 4204 op := scope.AddOperation(opspec) 4205 return op.Output(0) 4206 } 4207 4208 // Returns a tensor of zeros with the same shape and type as x. 4209 // 4210 // Arguments: 4211 // x: a tensor of type T. 4212 // 4213 // Returns a tensor of the same shape and type as x but filled with zeros. 4214 func ZerosLike(scope *Scope, x tf.Output) (y tf.Output) { 4215 if scope.Err() != nil { 4216 return 4217 } 4218 opspec := tf.OpSpec{ 4219 Type: "ZerosLike", 4220 Input: []tf.Input{ 4221 x, 4222 }, 4223 } 4224 op := scope.AddOperation(opspec) 4225 return op.Output(0) 4226 } 4227 4228 // Returns a copy of the input tensor. 4229 func Snapshot(scope *Scope, input tf.Output) (output tf.Output) { 4230 if scope.Err() != nil { 4231 return 4232 } 4233 opspec := tf.OpSpec{ 4234 Type: "Snapshot", 4235 Input: []tf.Input{ 4236 input, 4237 }, 4238 } 4239 op := scope.AddOperation(opspec) 4240 return op.Output(0) 4241 } 4242 4243 // Forwards `data` to the output port determined by `pred`. 4244 // 4245 // If `pred` is true, the `data` input is forwarded to `output_true`. Otherwise, 4246 // the data goes to `output_false`. 4247 // 4248 // See also `RefSwitch` and `Merge`. 4249 // 4250 // Arguments: 4251 // data: The tensor to be forwarded to the appropriate output. 4252 // pred: A scalar that specifies which output port will receive data. 4253 // 4254 // Returns If `pred` is false, data will be forwarded to this output.If `pred` is true, data will be forwarded to this output. 4255 func Switch(scope *Scope, data tf.Output, pred tf.Output) (output_false tf.Output, output_true tf.Output) { 4256 if scope.Err() != nil { 4257 return 4258 } 4259 opspec := tf.OpSpec{ 4260 Type: "Switch", 4261 Input: []tf.Input{ 4262 data, pred, 4263 }, 4264 } 4265 op := scope.AddOperation(opspec) 4266 return op.Output(0), op.Output(1) 4267 } 4268 4269 // AudioSpectrogramAttr is an optional argument to AudioSpectrogram. 4270 type AudioSpectrogramAttr func(optionalAttr) 4271 4272 // AudioSpectrogramMagnitudeSquared sets the optional magnitude_squared attribute to value. 4273 // 4274 // value: Whether to return the squared magnitude or just the 4275 // magnitude. Using squared magnitude can avoid extra calculations. 4276 // If not specified, defaults to false 4277 func AudioSpectrogramMagnitudeSquared(value bool) AudioSpectrogramAttr { 4278 return func(m optionalAttr) { 4279 m["magnitude_squared"] = value 4280 } 4281 } 4282 4283 // Produces a visualization of audio data over time. 4284 // 4285 // Spectrograms are a standard way of representing audio information as a series of 4286 // slices of frequency information, one slice for each window of time. By joining 4287 // these together into a sequence, they form a distinctive fingerprint of the sound 4288 // over time. 4289 // 4290 // This op expects to receive audio data as an input, stored as floats in the range 4291 // -1 to 1, together with a window width in samples, and a stride specifying how 4292 // far to move the window between slices. From this it generates a three 4293 // dimensional output. The lowest dimension has an amplitude value for each 4294 // frequency during that time slice. The next dimension is time, with successive 4295 // frequency slices. The final dimension is for the channels in the input, so a 4296 // stereo audio input would have two here for example. 4297 // 4298 // This means the layout when converted and saved as an image is rotated 90 degrees 4299 // clockwise from a typical spectrogram. Time is descending down the Y axis, and 4300 // the frequency decreases from left to right. 4301 // 4302 // Each value in the result represents the square root of the sum of the real and 4303 // imaginary parts of an FFT on the current window of samples. In this way, the 4304 // lowest dimension represents the power of each frequency in the current window, 4305 // and adjacent windows are concatenated in the next dimension. 4306 // 4307 // To get a more intuitive and visual look at what this operation does, you can run 4308 // tensorflow/examples/wav_to_spectrogram to read in an audio file and save out the 4309 // resulting spectrogram as a PNG image. 4310 // 4311 // Arguments: 4312 // input: Float representation of audio data. 4313 // window_size: How wide the input window is in samples. For the highest efficiency 4314 // this should be a power of two, but other values are accepted. 4315 // stride: How widely apart the center of adjacent sample windows should be. 4316 // 4317 // Returns 3D representation of the audio frequencies as an image. 4318 func AudioSpectrogram(scope *Scope, input tf.Output, window_size int64, stride int64, optional ...AudioSpectrogramAttr) (spectrogram tf.Output) { 4319 if scope.Err() != nil { 4320 return 4321 } 4322 attrs := map[string]interface{}{"window_size": window_size, "stride": stride} 4323 for _, a := range optional { 4324 a(attrs) 4325 } 4326 opspec := tf.OpSpec{ 4327 Type: "AudioSpectrogram", 4328 Input: []tf.Input{ 4329 input, 4330 }, 4331 Attrs: attrs, 4332 } 4333 op := scope.AddOperation(opspec) 4334 return op.Output(0) 4335 } 4336 4337 // CTCBeamSearchDecoderAttr is an optional argument to CTCBeamSearchDecoder. 4338 type CTCBeamSearchDecoderAttr func(optionalAttr) 4339 4340 // CTCBeamSearchDecoderMergeRepeated sets the optional merge_repeated attribute to value. 4341 // 4342 // value: If true, merge repeated classes in output. 4343 // If not specified, defaults to true 4344 func CTCBeamSearchDecoderMergeRepeated(value bool) CTCBeamSearchDecoderAttr { 4345 return func(m optionalAttr) { 4346 m["merge_repeated"] = value 4347 } 4348 } 4349 4350 // Performs beam search decoding on the logits given in input. 4351 // 4352 // A note about the attribute merge_repeated: For the beam search decoder, 4353 // this means that if consecutive entries in a beam are the same, only 4354 // the first of these is emitted. That is, when the top path is "A B B B B", 4355 // "A B" is returned if merge_repeated = True but "A B B B B" is 4356 // returned if merge_repeated = False. 4357 // 4358 // Arguments: 4359 // inputs: 3-D, shape: `(max_time x batch_size x num_classes)`, the logits. 4360 // sequence_length: A vector containing sequence lengths, size `(batch)`. 4361 // beam_width: A scalar >= 0 (beam search beam width). 4362 // top_paths: A scalar >= 0, <= beam_width (controls output size). 4363 // 4364 // Returns A list (length: top_paths) of indices matrices. Matrix j, 4365 // size `(total_decoded_outputs[j] x 2)`, has indices of a 4366 // `SparseTensor<int64, 2>`. The rows store: [batch, time].A list (length: top_paths) of values vectors. Vector j, 4367 // size `(length total_decoded_outputs[j])`, has the values of a 4368 // `SparseTensor<int64, 2>`. The vector stores the decoded classes for beam j.A list (length: top_paths) of shape vector. Vector j, 4369 // size `(2)`, stores the shape of the decoded `SparseTensor[j]`. 4370 // Its values are: `[batch_size, max_decoded_length[j]]`.A matrix, shaped: `(batch_size x top_paths)`. The 4371 // sequence log-probabilities. 4372 func CTCBeamSearchDecoder(scope *Scope, inputs tf.Output, sequence_length tf.Output, beam_width int64, top_paths int64, optional ...CTCBeamSearchDecoderAttr) (decoded_indices []tf.Output, decoded_values []tf.Output, decoded_shape []tf.Output, log_probability tf.Output) { 4373 if scope.Err() != nil { 4374 return 4375 } 4376 attrs := map[string]interface{}{"beam_width": beam_width, "top_paths": top_paths} 4377 for _, a := range optional { 4378 a(attrs) 4379 } 4380 opspec := tf.OpSpec{ 4381 Type: "CTCBeamSearchDecoder", 4382 Input: []tf.Input{ 4383 inputs, sequence_length, 4384 }, 4385 Attrs: attrs, 4386 } 4387 op := scope.AddOperation(opspec) 4388 if scope.Err() != nil { 4389 return 4390 } 4391 var idx int 4392 var err error 4393 if decoded_indices, idx, err = makeOutputList(op, idx, "decoded_indices"); err != nil { 4394 scope.UpdateErr("CTCBeamSearchDecoder", err) 4395 return 4396 } 4397 if decoded_values, idx, err = makeOutputList(op, idx, "decoded_values"); err != nil { 4398 scope.UpdateErr("CTCBeamSearchDecoder", err) 4399 return 4400 } 4401 if decoded_shape, idx, err = makeOutputList(op, idx, "decoded_shape"); err != nil { 4402 scope.UpdateErr("CTCBeamSearchDecoder", err) 4403 return 4404 } 4405 log_probability = op.Output(idx) 4406 return decoded_indices, decoded_values, decoded_shape, log_probability 4407 } 4408 4409 // CTCGreedyDecoderAttr is an optional argument to CTCGreedyDecoder. 4410 type CTCGreedyDecoderAttr func(optionalAttr) 4411 4412 // CTCGreedyDecoderMergeRepeated sets the optional merge_repeated attribute to value. 4413 // 4414 // value: If True, merge repeated classes in output. 4415 // If not specified, defaults to false 4416 func CTCGreedyDecoderMergeRepeated(value bool) CTCGreedyDecoderAttr { 4417 return func(m optionalAttr) { 4418 m["merge_repeated"] = value 4419 } 4420 } 4421 4422 // Performs greedy decoding on the logits given in inputs. 4423 // 4424 // A note about the attribute merge_repeated: if enabled, when 4425 // consecutive logits' maximum indices are the same, only the first of 4426 // these is emitted. Labeling the blank '*', the sequence "A B B * B B" 4427 // becomes "A B B" if merge_repeated = True and "A B B B B" if 4428 // merge_repeated = False. 4429 // 4430 // Regardless of the value of merge_repeated, if the maximum index of a given 4431 // time and batch corresponds to the blank, index `(num_classes - 1)`, no new 4432 // element is emitted. 4433 // 4434 // Arguments: 4435 // inputs: 3-D, shape: `(max_time x batch_size x num_classes)`, the logits. 4436 // sequence_length: A vector containing sequence lengths, size `(batch_size)`. 4437 // 4438 // Returns Indices matrix, size `(total_decoded_outputs x 2)`, 4439 // of a `SparseTensor<int64, 2>`. The rows store: [batch, time].Values vector, size: `(total_decoded_outputs)`, 4440 // of a `SparseTensor<int64, 2>`. The vector stores the decoded classes.Shape vector, size `(2)`, of the decoded SparseTensor. 4441 // Values are: `[batch_size, max_decoded_length]`.Matrix, size `(batch_size x 1)`, containing sequence 4442 // log-probabilities. 4443 func CTCGreedyDecoder(scope *Scope, inputs tf.Output, sequence_length tf.Output, optional ...CTCGreedyDecoderAttr) (decoded_indices tf.Output, decoded_values tf.Output, decoded_shape tf.Output, log_probability tf.Output) { 4444 if scope.Err() != nil { 4445 return 4446 } 4447 attrs := map[string]interface{}{} 4448 for _, a := range optional { 4449 a(attrs) 4450 } 4451 opspec := tf.OpSpec{ 4452 Type: "CTCGreedyDecoder", 4453 Input: []tf.Input{ 4454 inputs, sequence_length, 4455 }, 4456 Attrs: attrs, 4457 } 4458 op := scope.AddOperation(opspec) 4459 return op.Output(0), op.Output(1), op.Output(2), op.Output(3) 4460 } 4461 4462 // CTCLossAttr is an optional argument to CTCLoss. 4463 type CTCLossAttr func(optionalAttr) 4464 4465 // CTCLossPreprocessCollapseRepeated sets the optional preprocess_collapse_repeated attribute to value. 4466 // 4467 // value: Scalar, if true then repeated labels are 4468 // collapsed prior to the CTC calculation. 4469 // If not specified, defaults to false 4470 func CTCLossPreprocessCollapseRepeated(value bool) CTCLossAttr { 4471 return func(m optionalAttr) { 4472 m["preprocess_collapse_repeated"] = value 4473 } 4474 } 4475 4476 // CTCLossCtcMergeRepeated sets the optional ctc_merge_repeated attribute to value. 4477 // 4478 // value: Scalar. If set to false, *during* CTC calculation 4479 // repeated non-blank labels will not be merged and are interpreted as 4480 // individual labels. This is a simplified version of CTC. 4481 // If not specified, defaults to true 4482 func CTCLossCtcMergeRepeated(value bool) CTCLossAttr { 4483 return func(m optionalAttr) { 4484 m["ctc_merge_repeated"] = value 4485 } 4486 } 4487 4488 // CTCLossIgnoreLongerOutputsThanInputs sets the optional ignore_longer_outputs_than_inputs attribute to value. 4489 // 4490 // value: Scalar. If set to true, during CTC 4491 // calculation, items that have longer output sequences than input sequences 4492 // are skipped: they don't contribute to the loss term and have zero-gradient. 4493 // If not specified, defaults to false 4494 func CTCLossIgnoreLongerOutputsThanInputs(value bool) CTCLossAttr { 4495 return func(m optionalAttr) { 4496 m["ignore_longer_outputs_than_inputs"] = value 4497 } 4498 } 4499 4500 // Calculates the CTC Loss (log probability) for each batch entry. Also calculates 4501 // 4502 // the gradient. This class performs the softmax operation for you, so inputs 4503 // should be e.g. linear projections of outputs by an LSTM. 4504 // 4505 // Arguments: 4506 // inputs: 3-D, shape: `(max_time x batch_size x num_classes)`, the logits. 4507 // labels_indices: The indices of a `SparseTensor<int32, 2>`. 4508 // `labels_indices(i, :) == [b, t]` means `labels_values(i)` stores the id for 4509 // `(batch b, time t)`. 4510 // labels_values: The values (labels) associated with the given batch and time. 4511 // sequence_length: A vector containing sequence lengths (batch). 4512 // 4513 // Returns A vector (batch) containing log-probabilities.The gradient of `loss`. 3-D, shape: 4514 // `(max_time x batch_size x num_classes)`. 4515 func CTCLoss(scope *Scope, inputs tf.Output, labels_indices tf.Output, labels_values tf.Output, sequence_length tf.Output, optional ...CTCLossAttr) (loss tf.Output, gradient tf.Output) { 4516 if scope.Err() != nil { 4517 return 4518 } 4519 attrs := map[string]interface{}{} 4520 for _, a := range optional { 4521 a(attrs) 4522 } 4523 opspec := tf.OpSpec{ 4524 Type: "CTCLoss", 4525 Input: []tf.Input{ 4526 inputs, labels_indices, labels_values, sequence_length, 4527 }, 4528 Attrs: attrs, 4529 } 4530 op := scope.AddOperation(opspec) 4531 return op.Output(0), op.Output(1) 4532 } 4533 4534 // ShapeNAttr is an optional argument to ShapeN. 4535 type ShapeNAttr func(optionalAttr) 4536 4537 // ShapeNOutType sets the optional out_type attribute to value. 4538 // If not specified, defaults to DT_INT32 4539 func ShapeNOutType(value tf.DataType) ShapeNAttr { 4540 return func(m optionalAttr) { 4541 m["out_type"] = value 4542 } 4543 } 4544 4545 // Returns shape of tensors. 4546 // 4547 // This operation returns N 1-D integer tensors representing shape of `input[i]s`. 4548 func ShapeN(scope *Scope, input []tf.Output, optional ...ShapeNAttr) (output []tf.Output) { 4549 if scope.Err() != nil { 4550 return 4551 } 4552 attrs := map[string]interface{}{} 4553 for _, a := range optional { 4554 a(attrs) 4555 } 4556 opspec := tf.OpSpec{ 4557 Type: "ShapeN", 4558 Input: []tf.Input{ 4559 tf.OutputList(input), 4560 }, 4561 Attrs: attrs, 4562 } 4563 op := scope.AddOperation(opspec) 4564 if scope.Err() != nil { 4565 return 4566 } 4567 var idx int 4568 var err error 4569 if output, idx, err = makeOutputList(op, idx, "output"); err != nil { 4570 scope.UpdateErr("ShapeN", err) 4571 return 4572 } 4573 return output 4574 } 4575 4576 // CudnnRNNParamsToCanonicalAttr is an optional argument to CudnnRNNParamsToCanonical. 4577 type CudnnRNNParamsToCanonicalAttr func(optionalAttr) 4578 4579 // CudnnRNNParamsToCanonicalRnnMode sets the optional rnn_mode attribute to value. 4580 // If not specified, defaults to "lstm" 4581 func CudnnRNNParamsToCanonicalRnnMode(value string) CudnnRNNParamsToCanonicalAttr { 4582 return func(m optionalAttr) { 4583 m["rnn_mode"] = value 4584 } 4585 } 4586 4587 // CudnnRNNParamsToCanonicalInputMode sets the optional input_mode attribute to value. 4588 // If not specified, defaults to "linear_input" 4589 func CudnnRNNParamsToCanonicalInputMode(value string) CudnnRNNParamsToCanonicalAttr { 4590 return func(m optionalAttr) { 4591 m["input_mode"] = value 4592 } 4593 } 4594 4595 // CudnnRNNParamsToCanonicalDirection sets the optional direction attribute to value. 4596 // If not specified, defaults to "unidirectional" 4597 func CudnnRNNParamsToCanonicalDirection(value string) CudnnRNNParamsToCanonicalAttr { 4598 return func(m optionalAttr) { 4599 m["direction"] = value 4600 } 4601 } 4602 4603 // CudnnRNNParamsToCanonicalDropout sets the optional dropout attribute to value. 4604 // If not specified, defaults to 0 4605 func CudnnRNNParamsToCanonicalDropout(value float32) CudnnRNNParamsToCanonicalAttr { 4606 return func(m optionalAttr) { 4607 m["dropout"] = value 4608 } 4609 } 4610 4611 // CudnnRNNParamsToCanonicalSeed sets the optional seed attribute to value. 4612 // If not specified, defaults to 0 4613 func CudnnRNNParamsToCanonicalSeed(value int64) CudnnRNNParamsToCanonicalAttr { 4614 return func(m optionalAttr) { 4615 m["seed"] = value 4616 } 4617 } 4618 4619 // CudnnRNNParamsToCanonicalSeed2 sets the optional seed2 attribute to value. 4620 // If not specified, defaults to 0 4621 func CudnnRNNParamsToCanonicalSeed2(value int64) CudnnRNNParamsToCanonicalAttr { 4622 return func(m optionalAttr) { 4623 m["seed2"] = value 4624 } 4625 } 4626 4627 // Retrieves CudnnRNN params in canonical form. 4628 // 4629 // Retrieves a set of weights from the opaque params buffer that can be saved and 4630 // restored in a way compatible with future runs. 4631 // 4632 // Note that the params buffer may not be compatible across different GPUs. So any 4633 // save and restoration should be converted to and from the canonical weights and 4634 // biases. 4635 // 4636 // num_layers: Specifies the number of layers in the RNN model. 4637 // num_units: Specifies the size of the hidden state. 4638 // input_size: Specifies the size of the input state. 4639 // num_params: number of parameter sets for all layers. 4640 // Each layer may contain multiple parameter sets, with each set consisting of 4641 // a weight matrix and a bias vector. 4642 // weights: the canonical form of weights that can be used for saving 4643 // and restoration. They are more likely to be compatible across different 4644 // generations. 4645 // biases: the canonical form of biases that can be used for saving 4646 // and restoration. They are more likely to be compatible across different 4647 // generations. 4648 // rnn_mode: Indicates the type of the RNN model. 4649 // input_mode: Indicate whether there is a linear projection between the input and 4650 // The actual computation before the first layer. 'skip_input' is only allowed 4651 // when input_size == num_units; 'auto_select' implies 'skip_input' when 4652 // input_size == num_units; otherwise, it implies 'linear_input'. 4653 // direction: Indicates whether a bidirectional model will be used. 4654 // dir = (direction == bidirectional) ? 2 : 1 4655 // dropout: dropout probability. When set to 0., dropout is disabled. 4656 // seed: the 1st part of a seed to initialize dropout. 4657 // seed2: the 2nd part of a seed to initialize dropout. 4658 func CudnnRNNParamsToCanonical(scope *Scope, num_layers tf.Output, num_units tf.Output, input_size tf.Output, params tf.Output, num_params int64, optional ...CudnnRNNParamsToCanonicalAttr) (weights []tf.Output, biases []tf.Output) { 4659 if scope.Err() != nil { 4660 return 4661 } 4662 attrs := map[string]interface{}{"num_params": num_params} 4663 for _, a := range optional { 4664 a(attrs) 4665 } 4666 opspec := tf.OpSpec{ 4667 Type: "CudnnRNNParamsToCanonical", 4668 Input: []tf.Input{ 4669 num_layers, num_units, input_size, params, 4670 }, 4671 Attrs: attrs, 4672 } 4673 op := scope.AddOperation(opspec) 4674 if scope.Err() != nil { 4675 return 4676 } 4677 var idx int 4678 var err error 4679 if weights, idx, err = makeOutputList(op, idx, "weights"); err != nil { 4680 scope.UpdateErr("CudnnRNNParamsToCanonical", err) 4681 return 4682 } 4683 if biases, idx, err = makeOutputList(op, idx, "biases"); err != nil { 4684 scope.UpdateErr("CudnnRNNParamsToCanonical", err) 4685 return 4686 } 4687 return weights, biases 4688 } 4689 4690 // CudnnRNNBackpropV3Attr is an optional argument to CudnnRNNBackpropV3. 4691 type CudnnRNNBackpropV3Attr func(optionalAttr) 4692 4693 // CudnnRNNBackpropV3RnnMode sets the optional rnn_mode attribute to value. 4694 // If not specified, defaults to "lstm" 4695 func CudnnRNNBackpropV3RnnMode(value string) CudnnRNNBackpropV3Attr { 4696 return func(m optionalAttr) { 4697 m["rnn_mode"] = value 4698 } 4699 } 4700 4701 // CudnnRNNBackpropV3InputMode sets the optional input_mode attribute to value. 4702 // If not specified, defaults to "linear_input" 4703 func CudnnRNNBackpropV3InputMode(value string) CudnnRNNBackpropV3Attr { 4704 return func(m optionalAttr) { 4705 m["input_mode"] = value 4706 } 4707 } 4708 4709 // CudnnRNNBackpropV3Direction sets the optional direction attribute to value. 4710 // If not specified, defaults to "unidirectional" 4711 func CudnnRNNBackpropV3Direction(value string) CudnnRNNBackpropV3Attr { 4712 return func(m optionalAttr) { 4713 m["direction"] = value 4714 } 4715 } 4716 4717 // CudnnRNNBackpropV3Dropout sets the optional dropout attribute to value. 4718 // If not specified, defaults to 0 4719 func CudnnRNNBackpropV3Dropout(value float32) CudnnRNNBackpropV3Attr { 4720 return func(m optionalAttr) { 4721 m["dropout"] = value 4722 } 4723 } 4724 4725 // CudnnRNNBackpropV3Seed sets the optional seed attribute to value. 4726 // If not specified, defaults to 0 4727 func CudnnRNNBackpropV3Seed(value int64) CudnnRNNBackpropV3Attr { 4728 return func(m optionalAttr) { 4729 m["seed"] = value 4730 } 4731 } 4732 4733 // CudnnRNNBackpropV3Seed2 sets the optional seed2 attribute to value. 4734 // If not specified, defaults to 0 4735 func CudnnRNNBackpropV3Seed2(value int64) CudnnRNNBackpropV3Attr { 4736 return func(m optionalAttr) { 4737 m["seed2"] = value 4738 } 4739 } 4740 4741 // CudnnRNNBackpropV3TimeMajor sets the optional time_major attribute to value. 4742 // If not specified, defaults to true 4743 func CudnnRNNBackpropV3TimeMajor(value bool) CudnnRNNBackpropV3Attr { 4744 return func(m optionalAttr) { 4745 m["time_major"] = value 4746 } 4747 } 4748 4749 // Backprop step of CudnnRNNV3. 4750 // 4751 // Compute the backprop of both data and weights in a RNN. Takes an extra 4752 // "sequence_lengths" input than CudnnRNNBackprop. 4753 // 4754 // rnn_mode: Indicates the type of the RNN model. 4755 // input_mode: Indicates whether there is a linear projection between the input and 4756 // the actual computation before the first layer. 'skip_input' is only allowed 4757 // when input_size == num_units; 'auto_select' implies 'skip_input' when 4758 // input_size == num_units; otherwise, it implies 'linear_input'. 4759 // direction: Indicates whether a bidirectional model will be used. Should be 4760 // "unidirectional" or "bidirectional". 4761 // dropout: Dropout probability. When set to 0., dropout is disabled. 4762 // seed: The 1st part of a seed to initialize dropout. 4763 // seed2: The 2nd part of a seed to initialize dropout. 4764 // input: If time_major is true, this is a 3-D tensor with the shape of 4765 // [seq_length, batch_size, input_size]. If time_major is false, the shape is 4766 // [batch_size, seq_length, input_size]. 4767 // input_h: If time_major is true, this is a 3-D tensor with the shape of 4768 // [num_layer * dir, batch_size, num_units]. If time_major is false, the shape 4769 // is [batch_size, num_layer * dir, num_units]. 4770 // input_c: For LSTM, a 3-D tensor with the shape of 4771 // [num_layer * dir, batch, num_units]. For other models, it is ignored. 4772 // params: A 1-D tensor that contains the weights and biases in an opaque layout. 4773 // The size must be created through CudnnRNNParamsSize, and initialized 4774 // separately. Note that they might not be compatible across different 4775 // generations. So it is a good idea to save and restore 4776 // sequence_lengths: a vector of lengths of each input sequence. 4777 // output: If time_major is true, this is a 3-D tensor with the shape of 4778 // [seq_length, batch_size, dir * num_units]. If time_major is false, the 4779 // shape is [batch_size, seq_length, dir * num_units]. 4780 // output_h: The same shape has input_h. 4781 // output_c: The same shape as input_c for LSTM. An empty tensor for other models. 4782 // output_backprop: A 3-D tensor with the same shape as output in the forward pass. 4783 // output_h_backprop: A 3-D tensor with the same shape as output_h in the forward 4784 // pass. 4785 // output_c_backprop: A 3-D tensor with the same shape as output_c in the forward 4786 // pass. 4787 // time_major: Indicates whether the input/output format is time major or batch 4788 // major. 4789 // reserve_space: The same reserve_space produced in the forward operation. 4790 // input_backprop: The backprop to input in the forward pass. Has the same shape 4791 // as input. 4792 // input_h_backprop: The backprop to input_h in the forward pass. Has the same 4793 // shape as input_h. 4794 // input_c_backprop: The backprop to input_c in the forward pass. Has the same 4795 // shape as input_c. 4796 // params_backprop: The backprop to the params buffer in the forward pass. Has the 4797 // same shape as params. 4798 func CudnnRNNBackpropV3(scope *Scope, input tf.Output, input_h tf.Output, input_c tf.Output, params tf.Output, sequence_lengths tf.Output, output tf.Output, output_h tf.Output, output_c tf.Output, output_backprop tf.Output, output_h_backprop tf.Output, output_c_backprop tf.Output, reserve_space tf.Output, host_reserved tf.Output, optional ...CudnnRNNBackpropV3Attr) (input_backprop tf.Output, input_h_backprop tf.Output, input_c_backprop tf.Output, params_backprop tf.Output) { 4799 if scope.Err() != nil { 4800 return 4801 } 4802 attrs := map[string]interface{}{} 4803 for _, a := range optional { 4804 a(attrs) 4805 } 4806 opspec := tf.OpSpec{ 4807 Type: "CudnnRNNBackpropV3", 4808 Input: []tf.Input{ 4809 input, input_h, input_c, params, sequence_lengths, output, output_h, output_c, output_backprop, output_h_backprop, output_c_backprop, reserve_space, host_reserved, 4810 }, 4811 Attrs: attrs, 4812 } 4813 op := scope.AddOperation(opspec) 4814 return op.Output(0), op.Output(1), op.Output(2), op.Output(3) 4815 } 4816 4817 // CudnnRNNBackpropV2Attr is an optional argument to CudnnRNNBackpropV2. 4818 type CudnnRNNBackpropV2Attr func(optionalAttr) 4819 4820 // CudnnRNNBackpropV2RnnMode sets the optional rnn_mode attribute to value. 4821 // If not specified, defaults to "lstm" 4822 func CudnnRNNBackpropV2RnnMode(value string) CudnnRNNBackpropV2Attr { 4823 return func(m optionalAttr) { 4824 m["rnn_mode"] = value 4825 } 4826 } 4827 4828 // CudnnRNNBackpropV2InputMode sets the optional input_mode attribute to value. 4829 // If not specified, defaults to "linear_input" 4830 func CudnnRNNBackpropV2InputMode(value string) CudnnRNNBackpropV2Attr { 4831 return func(m optionalAttr) { 4832 m["input_mode"] = value 4833 } 4834 } 4835 4836 // CudnnRNNBackpropV2Direction sets the optional direction attribute to value. 4837 // If not specified, defaults to "unidirectional" 4838 func CudnnRNNBackpropV2Direction(value string) CudnnRNNBackpropV2Attr { 4839 return func(m optionalAttr) { 4840 m["direction"] = value 4841 } 4842 } 4843 4844 // CudnnRNNBackpropV2Dropout sets the optional dropout attribute to value. 4845 // If not specified, defaults to 0 4846 func CudnnRNNBackpropV2Dropout(value float32) CudnnRNNBackpropV2Attr { 4847 return func(m optionalAttr) { 4848 m["dropout"] = value 4849 } 4850 } 4851 4852 // CudnnRNNBackpropV2Seed sets the optional seed attribute to value. 4853 // If not specified, defaults to 0 4854 func CudnnRNNBackpropV2Seed(value int64) CudnnRNNBackpropV2Attr { 4855 return func(m optionalAttr) { 4856 m["seed"] = value 4857 } 4858 } 4859 4860 // CudnnRNNBackpropV2Seed2 sets the optional seed2 attribute to value. 4861 // If not specified, defaults to 0 4862 func CudnnRNNBackpropV2Seed2(value int64) CudnnRNNBackpropV2Attr { 4863 return func(m optionalAttr) { 4864 m["seed2"] = value 4865 } 4866 } 4867 4868 // Backprop step of CudnnRNN. 4869 // 4870 // Compute the backprop of both data and weights in a RNN. Takes an extra 4871 // "host_reserved" inupt than CudnnRNNBackprop, which is used to determine RNN 4872 // cudnnRNNAlgo_t and cudnnMathType_t. 4873 // 4874 // rnn_mode: Indicates the type of the RNN model. 4875 // input_mode: Indicates whether there is a linear projection between the input and 4876 // the actual computation before the first layer. 'skip_input' is only allowed 4877 // when input_size == num_units; 'auto_select' implies 'skip_input' when 4878 // input_size == num_units; otherwise, it implies 'linear_input'. 4879 // direction: Indicates whether a bidirectional model will be used. Should be 4880 // "unidirectional" or "bidirectional". 4881 // dropout: Dropout probability. When set to 0., dropout is disabled. 4882 // seed: The 1st part of a seed to initialize dropout. 4883 // seed2: The 2nd part of a seed to initialize dropout. 4884 // input: A 3-D tensor with the shape of [seq_length, batch_size, input_size]. 4885 // input_h: A 3-D tensor with the shape of [num_layer * dir, batch_size, 4886 // num_units]. 4887 // input_c: For LSTM, a 3-D tensor with the shape of 4888 // [num_layer * dir, batch, num_units]. For other models, it is ignored. 4889 // params: A 1-D tensor that contains the weights and biases in an opaque layout. 4890 // The size must be created through CudnnRNNParamsSize, and initialized 4891 // separately. Note that they might not be compatible across different 4892 // generations. So it is a good idea to save and restore 4893 // output: A 3-D tensor with the shape of [seq_length, batch_size, 4894 // dir * num_units]. 4895 // output_h: The same shape has input_h. 4896 // output_c: The same shape as input_c for LSTM. An empty tensor for other models. 4897 // output_backprop: A 3-D tensor with the same shape as output in the forward pass. 4898 // output_h_backprop: A 3-D tensor with the same shape as output_h in the forward 4899 // pass. 4900 // output_c_backprop: A 3-D tensor with the same shape as output_c in the forward 4901 // pass. 4902 // reserve_space: The same reserve_space produced in the forward operation. 4903 // host_reserved: The same host_reserved produced in the forward operation. 4904 // input_backprop: The backprop to input in the forward pass. Has the same shape 4905 // as input. 4906 // input_h_backprop: The backprop to input_h in the forward pass. Has the same 4907 // shape as input_h. 4908 // input_c_backprop: The backprop to input_c in the forward pass. Has the same 4909 // shape as input_c. 4910 // params_backprop: The backprop to the params buffer in the forward pass. Has the 4911 // same shape as params. 4912 func CudnnRNNBackpropV2(scope *Scope, input tf.Output, input_h tf.Output, input_c tf.Output, params tf.Output, output tf.Output, output_h tf.Output, output_c tf.Output, output_backprop tf.Output, output_h_backprop tf.Output, output_c_backprop tf.Output, reserve_space tf.Output, host_reserved tf.Output, optional ...CudnnRNNBackpropV2Attr) (input_backprop tf.Output, input_h_backprop tf.Output, input_c_backprop tf.Output, params_backprop tf.Output) { 4913 if scope.Err() != nil { 4914 return 4915 } 4916 attrs := map[string]interface{}{} 4917 for _, a := range optional { 4918 a(attrs) 4919 } 4920 opspec := tf.OpSpec{ 4921 Type: "CudnnRNNBackpropV2", 4922 Input: []tf.Input{ 4923 input, input_h, input_c, params, output, output_h, output_c, output_backprop, output_h_backprop, output_c_backprop, reserve_space, host_reserved, 4924 }, 4925 Attrs: attrs, 4926 } 4927 op := scope.AddOperation(opspec) 4928 return op.Output(0), op.Output(1), op.Output(2), op.Output(3) 4929 } 4930 4931 // CudnnRNNV2Attr is an optional argument to CudnnRNNV2. 4932 type CudnnRNNV2Attr func(optionalAttr) 4933 4934 // CudnnRNNV2RnnMode sets the optional rnn_mode attribute to value. 4935 // If not specified, defaults to "lstm" 4936 func CudnnRNNV2RnnMode(value string) CudnnRNNV2Attr { 4937 return func(m optionalAttr) { 4938 m["rnn_mode"] = value 4939 } 4940 } 4941 4942 // CudnnRNNV2InputMode sets the optional input_mode attribute to value. 4943 // If not specified, defaults to "linear_input" 4944 func CudnnRNNV2InputMode(value string) CudnnRNNV2Attr { 4945 return func(m optionalAttr) { 4946 m["input_mode"] = value 4947 } 4948 } 4949 4950 // CudnnRNNV2Direction sets the optional direction attribute to value. 4951 // If not specified, defaults to "unidirectional" 4952 func CudnnRNNV2Direction(value string) CudnnRNNV2Attr { 4953 return func(m optionalAttr) { 4954 m["direction"] = value 4955 } 4956 } 4957 4958 // CudnnRNNV2Dropout sets the optional dropout attribute to value. 4959 // If not specified, defaults to 0 4960 func CudnnRNNV2Dropout(value float32) CudnnRNNV2Attr { 4961 return func(m optionalAttr) { 4962 m["dropout"] = value 4963 } 4964 } 4965 4966 // CudnnRNNV2Seed sets the optional seed attribute to value. 4967 // If not specified, defaults to 0 4968 func CudnnRNNV2Seed(value int64) CudnnRNNV2Attr { 4969 return func(m optionalAttr) { 4970 m["seed"] = value 4971 } 4972 } 4973 4974 // CudnnRNNV2Seed2 sets the optional seed2 attribute to value. 4975 // If not specified, defaults to 0 4976 func CudnnRNNV2Seed2(value int64) CudnnRNNV2Attr { 4977 return func(m optionalAttr) { 4978 m["seed2"] = value 4979 } 4980 } 4981 4982 // CudnnRNNV2IsTraining sets the optional is_training attribute to value. 4983 // If not specified, defaults to true 4984 func CudnnRNNV2IsTraining(value bool) CudnnRNNV2Attr { 4985 return func(m optionalAttr) { 4986 m["is_training"] = value 4987 } 4988 } 4989 4990 // A RNN backed by cuDNN. 4991 // 4992 // Computes the RNN from the input and initial states, with respect to the params 4993 // buffer. Produces one extra output "host_reserved" than CudnnRNN. 4994 // 4995 // rnn_mode: Indicates the type of the RNN model. 4996 // input_mode: Indicates whether there is a linear projection between the input and 4997 // the actual computation before the first layer. 'skip_input' is only allowed 4998 // when input_size == num_units; 'auto_select' implies 'skip_input' when 4999 // input_size == num_units; otherwise, it implies 'linear_input'. 5000 // direction: Indicates whether a bidirectional model will be used. Should be 5001 // "unidirectional" or "bidirectional". 5002 // dropout: Dropout probability. When set to 0., dropout is disabled. 5003 // seed: The 1st part of a seed to initialize dropout. 5004 // seed2: The 2nd part of a seed to initialize dropout. 5005 // input: A 3-D tensor with the shape of [seq_length, batch_size, input_size]. 5006 // input_h: A 3-D tensor with the shape of [num_layer * dir, batch_size, 5007 // num_units]. 5008 // input_c: For LSTM, a 3-D tensor with the shape of 5009 // [num_layer * dir, batch, num_units]. For other models, it is ignored. 5010 // params: A 1-D tensor that contains the weights and biases in an opaque layout. 5011 // The size must be created through CudnnRNNParamsSize, and initialized 5012 // separately. Note that they might not be compatible across different 5013 // generations. So it is a good idea to save and restore 5014 // output: A 3-D tensor with the shape of [seq_length, batch_size, 5015 // dir * num_units]. 5016 // output_h: The same shape has input_h. 5017 // output_c: The same shape as input_c for LSTM. An empty tensor for other models. 5018 // is_training: Indicates whether this operation is used for inferenece or 5019 // training. 5020 // reserve_space: An opaque tensor that can be used in backprop calculation. It 5021 // is only produced if is_training is true. 5022 // host_reserved: An opaque tensor that can be used in backprop calculation. It is 5023 // only produced if is_training is true. It is output on host memory rather than 5024 // device memory. 5025 func CudnnRNNV2(scope *Scope, input tf.Output, input_h tf.Output, input_c tf.Output, params tf.Output, optional ...CudnnRNNV2Attr) (output tf.Output, output_h tf.Output, output_c tf.Output, reserve_space tf.Output, host_reserved tf.Output) { 5026 if scope.Err() != nil { 5027 return 5028 } 5029 attrs := map[string]interface{}{} 5030 for _, a := range optional { 5031 a(attrs) 5032 } 5033 opspec := tf.OpSpec{ 5034 Type: "CudnnRNNV2", 5035 Input: []tf.Input{ 5036 input, input_h, input_c, params, 5037 }, 5038 Attrs: attrs, 5039 } 5040 op := scope.AddOperation(opspec) 5041 return op.Output(0), op.Output(1), op.Output(2), op.Output(3), op.Output(4) 5042 } 5043 5044 // RecordInputAttr is an optional argument to RecordInput. 5045 type RecordInputAttr func(optionalAttr) 5046 5047 // RecordInputFileRandomSeed sets the optional file_random_seed attribute to value. 5048 // 5049 // value: Random seeds used to produce randomized records. 5050 // If not specified, defaults to 301 5051 func RecordInputFileRandomSeed(value int64) RecordInputAttr { 5052 return func(m optionalAttr) { 5053 m["file_random_seed"] = value 5054 } 5055 } 5056 5057 // RecordInputFileShuffleShiftRatio sets the optional file_shuffle_shift_ratio attribute to value. 5058 // 5059 // value: Shifts the list of files after the list is randomly 5060 // shuffled. 5061 // If not specified, defaults to 0 5062 func RecordInputFileShuffleShiftRatio(value float32) RecordInputAttr { 5063 return func(m optionalAttr) { 5064 m["file_shuffle_shift_ratio"] = value 5065 } 5066 } 5067 5068 // RecordInputFileBufferSize sets the optional file_buffer_size attribute to value. 5069 // 5070 // value: The randomization shuffling buffer. 5071 // If not specified, defaults to 10000 5072 func RecordInputFileBufferSize(value int64) RecordInputAttr { 5073 return func(m optionalAttr) { 5074 m["file_buffer_size"] = value 5075 } 5076 } 5077 5078 // RecordInputFileParallelism sets the optional file_parallelism attribute to value. 5079 // 5080 // value: How many sstables are opened and concurrently iterated over. 5081 // If not specified, defaults to 16 5082 func RecordInputFileParallelism(value int64) RecordInputAttr { 5083 return func(m optionalAttr) { 5084 m["file_parallelism"] = value 5085 } 5086 } 5087 5088 // RecordInputBatchSize sets the optional batch_size attribute to value. 5089 // 5090 // value: The batch size. 5091 // If not specified, defaults to 32 5092 func RecordInputBatchSize(value int64) RecordInputAttr { 5093 return func(m optionalAttr) { 5094 m["batch_size"] = value 5095 } 5096 } 5097 5098 // RecordInputCompressionType sets the optional compression_type attribute to value. 5099 // 5100 // value: The type of compression for the file. Currently ZLIB and 5101 // GZIP are supported. Defaults to none. 5102 // If not specified, defaults to "" 5103 func RecordInputCompressionType(value string) RecordInputAttr { 5104 return func(m optionalAttr) { 5105 m["compression_type"] = value 5106 } 5107 } 5108 5109 // Emits randomized records. 5110 // 5111 // Arguments: 5112 // file_pattern: Glob pattern for the data files. 5113 // 5114 // Returns A tensor of shape [batch_size]. 5115 func RecordInput(scope *Scope, file_pattern string, optional ...RecordInputAttr) (records tf.Output) { 5116 if scope.Err() != nil { 5117 return 5118 } 5119 attrs := map[string]interface{}{"file_pattern": file_pattern} 5120 for _, a := range optional { 5121 a(attrs) 5122 } 5123 opspec := tf.OpSpec{ 5124 Type: "RecordInput", 5125 5126 Attrs: attrs, 5127 } 5128 op := scope.AddOperation(opspec) 5129 return op.Output(0) 5130 } 5131 5132 // OrderedMapClearAttr is an optional argument to OrderedMapClear. 5133 type OrderedMapClearAttr func(optionalAttr) 5134 5135 // OrderedMapClearCapacity sets the optional capacity attribute to value. 5136 // If not specified, defaults to 0 5137 // 5138 // REQUIRES: value >= 0 5139 func OrderedMapClearCapacity(value int64) OrderedMapClearAttr { 5140 return func(m optionalAttr) { 5141 m["capacity"] = value 5142 } 5143 } 5144 5145 // OrderedMapClearMemoryLimit sets the optional memory_limit attribute to value. 5146 // If not specified, defaults to 0 5147 // 5148 // REQUIRES: value >= 0 5149 func OrderedMapClearMemoryLimit(value int64) OrderedMapClearAttr { 5150 return func(m optionalAttr) { 5151 m["memory_limit"] = value 5152 } 5153 } 5154 5155 // OrderedMapClearContainer sets the optional container attribute to value. 5156 // If not specified, defaults to "" 5157 func OrderedMapClearContainer(value string) OrderedMapClearAttr { 5158 return func(m optionalAttr) { 5159 m["container"] = value 5160 } 5161 } 5162 5163 // OrderedMapClearSharedName sets the optional shared_name attribute to value. 5164 // If not specified, defaults to "" 5165 func OrderedMapClearSharedName(value string) OrderedMapClearAttr { 5166 return func(m optionalAttr) { 5167 m["shared_name"] = value 5168 } 5169 } 5170 5171 // Op removes all elements in the underlying container. 5172 // 5173 // Returns the created operation. 5174 func OrderedMapClear(scope *Scope, dtypes []tf.DataType, optional ...OrderedMapClearAttr) (o *tf.Operation) { 5175 if scope.Err() != nil { 5176 return 5177 } 5178 attrs := map[string]interface{}{"dtypes": dtypes} 5179 for _, a := range optional { 5180 a(attrs) 5181 } 5182 opspec := tf.OpSpec{ 5183 Type: "OrderedMapClear", 5184 5185 Attrs: attrs, 5186 } 5187 return scope.AddOperation(opspec) 5188 } 5189 5190 // OrderedMapIncompleteSizeAttr is an optional argument to OrderedMapIncompleteSize. 5191 type OrderedMapIncompleteSizeAttr func(optionalAttr) 5192 5193 // OrderedMapIncompleteSizeCapacity sets the optional capacity attribute to value. 5194 // If not specified, defaults to 0 5195 // 5196 // REQUIRES: value >= 0 5197 func OrderedMapIncompleteSizeCapacity(value int64) OrderedMapIncompleteSizeAttr { 5198 return func(m optionalAttr) { 5199 m["capacity"] = value 5200 } 5201 } 5202 5203 // OrderedMapIncompleteSizeMemoryLimit sets the optional memory_limit attribute to value. 5204 // If not specified, defaults to 0 5205 // 5206 // REQUIRES: value >= 0 5207 func OrderedMapIncompleteSizeMemoryLimit(value int64) OrderedMapIncompleteSizeAttr { 5208 return func(m optionalAttr) { 5209 m["memory_limit"] = value 5210 } 5211 } 5212 5213 // OrderedMapIncompleteSizeContainer sets the optional container attribute to value. 5214 // If not specified, defaults to "" 5215 func OrderedMapIncompleteSizeContainer(value string) OrderedMapIncompleteSizeAttr { 5216 return func(m optionalAttr) { 5217 m["container"] = value 5218 } 5219 } 5220 5221 // OrderedMapIncompleteSizeSharedName sets the optional shared_name attribute to value. 5222 // If not specified, defaults to "" 5223 func OrderedMapIncompleteSizeSharedName(value string) OrderedMapIncompleteSizeAttr { 5224 return func(m optionalAttr) { 5225 m["shared_name"] = value 5226 } 5227 } 5228 5229 // Op returns the number of incomplete elements in the underlying container. 5230 func OrderedMapIncompleteSize(scope *Scope, dtypes []tf.DataType, optional ...OrderedMapIncompleteSizeAttr) (size tf.Output) { 5231 if scope.Err() != nil { 5232 return 5233 } 5234 attrs := map[string]interface{}{"dtypes": dtypes} 5235 for _, a := range optional { 5236 a(attrs) 5237 } 5238 opspec := tf.OpSpec{ 5239 Type: "OrderedMapIncompleteSize", 5240 5241 Attrs: attrs, 5242 } 5243 op := scope.AddOperation(opspec) 5244 return op.Output(0) 5245 } 5246 5247 // BoostedTreesQuantileStreamResourceHandleOpAttr is an optional argument to BoostedTreesQuantileStreamResourceHandleOp. 5248 type BoostedTreesQuantileStreamResourceHandleOpAttr func(optionalAttr) 5249 5250 // BoostedTreesQuantileStreamResourceHandleOpContainer sets the optional container attribute to value. 5251 // If not specified, defaults to "" 5252 func BoostedTreesQuantileStreamResourceHandleOpContainer(value string) BoostedTreesQuantileStreamResourceHandleOpAttr { 5253 return func(m optionalAttr) { 5254 m["container"] = value 5255 } 5256 } 5257 5258 // BoostedTreesQuantileStreamResourceHandleOpSharedName sets the optional shared_name attribute to value. 5259 // If not specified, defaults to "" 5260 func BoostedTreesQuantileStreamResourceHandleOpSharedName(value string) BoostedTreesQuantileStreamResourceHandleOpAttr { 5261 return func(m optionalAttr) { 5262 m["shared_name"] = value 5263 } 5264 } 5265 5266 // Creates a handle to a BoostedTreesQuantileStreamResource. 5267 func BoostedTreesQuantileStreamResourceHandleOp(scope *Scope, optional ...BoostedTreesQuantileStreamResourceHandleOpAttr) (resource tf.Output) { 5268 if scope.Err() != nil { 5269 return 5270 } 5271 attrs := map[string]interface{}{} 5272 for _, a := range optional { 5273 a(attrs) 5274 } 5275 opspec := tf.OpSpec{ 5276 Type: "BoostedTreesQuantileStreamResourceHandleOp", 5277 5278 Attrs: attrs, 5279 } 5280 op := scope.AddOperation(opspec) 5281 return op.Output(0) 5282 } 5283 5284 // OrderedMapSizeAttr is an optional argument to OrderedMapSize. 5285 type OrderedMapSizeAttr func(optionalAttr) 5286 5287 // OrderedMapSizeCapacity sets the optional capacity attribute to value. 5288 // If not specified, defaults to 0 5289 // 5290 // REQUIRES: value >= 0 5291 func OrderedMapSizeCapacity(value int64) OrderedMapSizeAttr { 5292 return func(m optionalAttr) { 5293 m["capacity"] = value 5294 } 5295 } 5296 5297 // OrderedMapSizeMemoryLimit sets the optional memory_limit attribute to value. 5298 // If not specified, defaults to 0 5299 // 5300 // REQUIRES: value >= 0 5301 func OrderedMapSizeMemoryLimit(value int64) OrderedMapSizeAttr { 5302 return func(m optionalAttr) { 5303 m["memory_limit"] = value 5304 } 5305 } 5306 5307 // OrderedMapSizeContainer sets the optional container attribute to value. 5308 // If not specified, defaults to "" 5309 func OrderedMapSizeContainer(value string) OrderedMapSizeAttr { 5310 return func(m optionalAttr) { 5311 m["container"] = value 5312 } 5313 } 5314 5315 // OrderedMapSizeSharedName sets the optional shared_name attribute to value. 5316 // If not specified, defaults to "" 5317 func OrderedMapSizeSharedName(value string) OrderedMapSizeAttr { 5318 return func(m optionalAttr) { 5319 m["shared_name"] = value 5320 } 5321 } 5322 5323 // Op returns the number of elements in the underlying container. 5324 func OrderedMapSize(scope *Scope, dtypes []tf.DataType, optional ...OrderedMapSizeAttr) (size tf.Output) { 5325 if scope.Err() != nil { 5326 return 5327 } 5328 attrs := map[string]interface{}{"dtypes": dtypes} 5329 for _, a := range optional { 5330 a(attrs) 5331 } 5332 opspec := tf.OpSpec{ 5333 Type: "OrderedMapSize", 5334 5335 Attrs: attrs, 5336 } 5337 op := scope.AddOperation(opspec) 5338 return op.Output(0) 5339 } 5340 5341 // Generate the bucket boundaries for each feature based on accumulated summaries. 5342 // 5343 // An op that returns a list of float tensors for a quantile stream resource. Each 5344 // tensor is Rank 1 containing bucket boundaries for a single feature. 5345 // 5346 // Arguments: 5347 // quantile_stream_resource_handle: resource handle referring to a QuantileStreamResource. 5348 // num_features: inferred int; number of features to get bucket boundaries for. 5349 // 5350 // Returns float; List of Rank 1 Tensors each containing the bucket boundaries for a feature. 5351 func BoostedTreesQuantileStreamResourceGetBucketBoundaries(scope *Scope, quantile_stream_resource_handle tf.Output, num_features int64) (bucket_boundaries []tf.Output) { 5352 if scope.Err() != nil { 5353 return 5354 } 5355 attrs := map[string]interface{}{"num_features": num_features} 5356 opspec := tf.OpSpec{ 5357 Type: "BoostedTreesQuantileStreamResourceGetBucketBoundaries", 5358 Input: []tf.Input{ 5359 quantile_stream_resource_handle, 5360 }, 5361 Attrs: attrs, 5362 } 5363 op := scope.AddOperation(opspec) 5364 if scope.Err() != nil { 5365 return 5366 } 5367 var idx int 5368 var err error 5369 if bucket_boundaries, idx, err = makeOutputList(op, idx, "bucket_boundaries"); err != nil { 5370 scope.UpdateErr("BoostedTreesQuantileStreamResourceGetBucketBoundaries", err) 5371 return 5372 } 5373 return bucket_boundaries 5374 } 5375 5376 // OrderedMapUnstageAttr is an optional argument to OrderedMapUnstage. 5377 type OrderedMapUnstageAttr func(optionalAttr) 5378 5379 // OrderedMapUnstageCapacity sets the optional capacity attribute to value. 5380 // If not specified, defaults to 0 5381 // 5382 // REQUIRES: value >= 0 5383 func OrderedMapUnstageCapacity(value int64) OrderedMapUnstageAttr { 5384 return func(m optionalAttr) { 5385 m["capacity"] = value 5386 } 5387 } 5388 5389 // OrderedMapUnstageMemoryLimit sets the optional memory_limit attribute to value. 5390 // If not specified, defaults to 0 5391 // 5392 // REQUIRES: value >= 0 5393 func OrderedMapUnstageMemoryLimit(value int64) OrderedMapUnstageAttr { 5394 return func(m optionalAttr) { 5395 m["memory_limit"] = value 5396 } 5397 } 5398 5399 // OrderedMapUnstageContainer sets the optional container attribute to value. 5400 // If not specified, defaults to "" 5401 func OrderedMapUnstageContainer(value string) OrderedMapUnstageAttr { 5402 return func(m optionalAttr) { 5403 m["container"] = value 5404 } 5405 } 5406 5407 // OrderedMapUnstageSharedName sets the optional shared_name attribute to value. 5408 // If not specified, defaults to "" 5409 func OrderedMapUnstageSharedName(value string) OrderedMapUnstageAttr { 5410 return func(m optionalAttr) { 5411 m["shared_name"] = value 5412 } 5413 } 5414 5415 // Op removes and returns the values associated with the key 5416 // 5417 // from the underlying container. If the underlying container 5418 // does not contain this key, the op will block until it does. 5419 func OrderedMapUnstage(scope *Scope, key tf.Output, indices tf.Output, dtypes []tf.DataType, optional ...OrderedMapUnstageAttr) (values []tf.Output) { 5420 if scope.Err() != nil { 5421 return 5422 } 5423 attrs := map[string]interface{}{"dtypes": dtypes} 5424 for _, a := range optional { 5425 a(attrs) 5426 } 5427 opspec := tf.OpSpec{ 5428 Type: "OrderedMapUnstage", 5429 Input: []tf.Input{ 5430 key, indices, 5431 }, 5432 Attrs: attrs, 5433 } 5434 op := scope.AddOperation(opspec) 5435 if scope.Err() != nil { 5436 return 5437 } 5438 var idx int 5439 var err error 5440 if values, idx, err = makeOutputList(op, idx, "values"); err != nil { 5441 scope.UpdateErr("OrderedMapUnstage", err) 5442 return 5443 } 5444 return values 5445 } 5446 5447 // OrderedMapPeekAttr is an optional argument to OrderedMapPeek. 5448 type OrderedMapPeekAttr func(optionalAttr) 5449 5450 // OrderedMapPeekCapacity sets the optional capacity attribute to value. 5451 // If not specified, defaults to 0 5452 // 5453 // REQUIRES: value >= 0 5454 func OrderedMapPeekCapacity(value int64) OrderedMapPeekAttr { 5455 return func(m optionalAttr) { 5456 m["capacity"] = value 5457 } 5458 } 5459 5460 // OrderedMapPeekMemoryLimit sets the optional memory_limit attribute to value. 5461 // If not specified, defaults to 0 5462 // 5463 // REQUIRES: value >= 0 5464 func OrderedMapPeekMemoryLimit(value int64) OrderedMapPeekAttr { 5465 return func(m optionalAttr) { 5466 m["memory_limit"] = value 5467 } 5468 } 5469 5470 // OrderedMapPeekContainer sets the optional container attribute to value. 5471 // If not specified, defaults to "" 5472 func OrderedMapPeekContainer(value string) OrderedMapPeekAttr { 5473 return func(m optionalAttr) { 5474 m["container"] = value 5475 } 5476 } 5477 5478 // OrderedMapPeekSharedName sets the optional shared_name attribute to value. 5479 // If not specified, defaults to "" 5480 func OrderedMapPeekSharedName(value string) OrderedMapPeekAttr { 5481 return func(m optionalAttr) { 5482 m["shared_name"] = value 5483 } 5484 } 5485 5486 // Op peeks at the values at the specified key. If the 5487 // 5488 // underlying container does not contain this key 5489 // this op will block until it does. This Op is optimized for 5490 // performance. 5491 func OrderedMapPeek(scope *Scope, key tf.Output, indices tf.Output, dtypes []tf.DataType, optional ...OrderedMapPeekAttr) (values []tf.Output) { 5492 if scope.Err() != nil { 5493 return 5494 } 5495 attrs := map[string]interface{}{"dtypes": dtypes} 5496 for _, a := range optional { 5497 a(attrs) 5498 } 5499 opspec := tf.OpSpec{ 5500 Type: "OrderedMapPeek", 5501 Input: []tf.Input{ 5502 key, indices, 5503 }, 5504 Attrs: attrs, 5505 } 5506 op := scope.AddOperation(opspec) 5507 if scope.Err() != nil { 5508 return 5509 } 5510 var idx int 5511 var err error 5512 if values, idx, err = makeOutputList(op, idx, "values"); err != nil { 5513 scope.UpdateErr("OrderedMapPeek", err) 5514 return 5515 } 5516 return values 5517 } 5518 5519 // MapIncompleteSizeAttr is an optional argument to MapIncompleteSize. 5520 type MapIncompleteSizeAttr func(optionalAttr) 5521 5522 // MapIncompleteSizeCapacity sets the optional capacity attribute to value. 5523 // If not specified, defaults to 0 5524 // 5525 // REQUIRES: value >= 0 5526 func MapIncompleteSizeCapacity(value int64) MapIncompleteSizeAttr { 5527 return func(m optionalAttr) { 5528 m["capacity"] = value 5529 } 5530 } 5531 5532 // MapIncompleteSizeMemoryLimit sets the optional memory_limit attribute to value. 5533 // If not specified, defaults to 0 5534 // 5535 // REQUIRES: value >= 0 5536 func MapIncompleteSizeMemoryLimit(value int64) MapIncompleteSizeAttr { 5537 return func(m optionalAttr) { 5538 m["memory_limit"] = value 5539 } 5540 } 5541 5542 // MapIncompleteSizeContainer sets the optional container attribute to value. 5543 // If not specified, defaults to "" 5544 func MapIncompleteSizeContainer(value string) MapIncompleteSizeAttr { 5545 return func(m optionalAttr) { 5546 m["container"] = value 5547 } 5548 } 5549 5550 // MapIncompleteSizeSharedName sets the optional shared_name attribute to value. 5551 // If not specified, defaults to "" 5552 func MapIncompleteSizeSharedName(value string) MapIncompleteSizeAttr { 5553 return func(m optionalAttr) { 5554 m["shared_name"] = value 5555 } 5556 } 5557 5558 // Op returns the number of incomplete elements in the underlying container. 5559 func MapIncompleteSize(scope *Scope, dtypes []tf.DataType, optional ...MapIncompleteSizeAttr) (size tf.Output) { 5560 if scope.Err() != nil { 5561 return 5562 } 5563 attrs := map[string]interface{}{"dtypes": dtypes} 5564 for _, a := range optional { 5565 a(attrs) 5566 } 5567 opspec := tf.OpSpec{ 5568 Type: "MapIncompleteSize", 5569 5570 Attrs: attrs, 5571 } 5572 op := scope.AddOperation(opspec) 5573 return op.Output(0) 5574 } 5575 5576 // MapSizeAttr is an optional argument to MapSize. 5577 type MapSizeAttr func(optionalAttr) 5578 5579 // MapSizeCapacity sets the optional capacity attribute to value. 5580 // If not specified, defaults to 0 5581 // 5582 // REQUIRES: value >= 0 5583 func MapSizeCapacity(value int64) MapSizeAttr { 5584 return func(m optionalAttr) { 5585 m["capacity"] = value 5586 } 5587 } 5588 5589 // MapSizeMemoryLimit sets the optional memory_limit attribute to value. 5590 // If not specified, defaults to 0 5591 // 5592 // REQUIRES: value >= 0 5593 func MapSizeMemoryLimit(value int64) MapSizeAttr { 5594 return func(m optionalAttr) { 5595 m["memory_limit"] = value 5596 } 5597 } 5598 5599 // MapSizeContainer sets the optional container attribute to value. 5600 // If not specified, defaults to "" 5601 func MapSizeContainer(value string) MapSizeAttr { 5602 return func(m optionalAttr) { 5603 m["container"] = value 5604 } 5605 } 5606 5607 // MapSizeSharedName sets the optional shared_name attribute to value. 5608 // If not specified, defaults to "" 5609 func MapSizeSharedName(value string) MapSizeAttr { 5610 return func(m optionalAttr) { 5611 m["shared_name"] = value 5612 } 5613 } 5614 5615 // Op returns the number of elements in the underlying container. 5616 func MapSize(scope *Scope, dtypes []tf.DataType, optional ...MapSizeAttr) (size tf.Output) { 5617 if scope.Err() != nil { 5618 return 5619 } 5620 attrs := map[string]interface{}{"dtypes": dtypes} 5621 for _, a := range optional { 5622 a(attrs) 5623 } 5624 opspec := tf.OpSpec{ 5625 Type: "MapSize", 5626 5627 Attrs: attrs, 5628 } 5629 op := scope.AddOperation(opspec) 5630 return op.Output(0) 5631 } 5632 5633 // MapPeekAttr is an optional argument to MapPeek. 5634 type MapPeekAttr func(optionalAttr) 5635 5636 // MapPeekCapacity sets the optional capacity attribute to value. 5637 // If not specified, defaults to 0 5638 // 5639 // REQUIRES: value >= 0 5640 func MapPeekCapacity(value int64) MapPeekAttr { 5641 return func(m optionalAttr) { 5642 m["capacity"] = value 5643 } 5644 } 5645 5646 // MapPeekMemoryLimit sets the optional memory_limit attribute to value. 5647 // If not specified, defaults to 0 5648 // 5649 // REQUIRES: value >= 0 5650 func MapPeekMemoryLimit(value int64) MapPeekAttr { 5651 return func(m optionalAttr) { 5652 m["memory_limit"] = value 5653 } 5654 } 5655 5656 // MapPeekContainer sets the optional container attribute to value. 5657 // If not specified, defaults to "" 5658 func MapPeekContainer(value string) MapPeekAttr { 5659 return func(m optionalAttr) { 5660 m["container"] = value 5661 } 5662 } 5663 5664 // MapPeekSharedName sets the optional shared_name attribute to value. 5665 // If not specified, defaults to "" 5666 func MapPeekSharedName(value string) MapPeekAttr { 5667 return func(m optionalAttr) { 5668 m["shared_name"] = value 5669 } 5670 } 5671 5672 // Op peeks at the values at the specified key. If the 5673 // 5674 // underlying container does not contain this key 5675 // this op will block until it does. 5676 func MapPeek(scope *Scope, key tf.Output, indices tf.Output, dtypes []tf.DataType, optional ...MapPeekAttr) (values []tf.Output) { 5677 if scope.Err() != nil { 5678 return 5679 } 5680 attrs := map[string]interface{}{"dtypes": dtypes} 5681 for _, a := range optional { 5682 a(attrs) 5683 } 5684 opspec := tf.OpSpec{ 5685 Type: "MapPeek", 5686 Input: []tf.Input{ 5687 key, indices, 5688 }, 5689 Attrs: attrs, 5690 } 5691 op := scope.AddOperation(opspec) 5692 if scope.Err() != nil { 5693 return 5694 } 5695 var idx int 5696 var err error 5697 if values, idx, err = makeOutputList(op, idx, "values"); err != nil { 5698 scope.UpdateErr("MapPeek", err) 5699 return 5700 } 5701 return values 5702 } 5703 5704 // MapStageAttr is an optional argument to MapStage. 5705 type MapStageAttr func(optionalAttr) 5706 5707 // MapStageCapacity sets the optional capacity attribute to value. 5708 // 5709 // value: Maximum number of elements in the Staging Area. If > 0, inserts 5710 // on the container will block when the capacity is reached. 5711 // If not specified, defaults to 0 5712 // 5713 // REQUIRES: value >= 0 5714 func MapStageCapacity(value int64) MapStageAttr { 5715 return func(m optionalAttr) { 5716 m["capacity"] = value 5717 } 5718 } 5719 5720 // MapStageMemoryLimit sets the optional memory_limit attribute to value. 5721 // If not specified, defaults to 0 5722 // 5723 // REQUIRES: value >= 0 5724 func MapStageMemoryLimit(value int64) MapStageAttr { 5725 return func(m optionalAttr) { 5726 m["memory_limit"] = value 5727 } 5728 } 5729 5730 // MapStageContainer sets the optional container attribute to value. 5731 // 5732 // value: If non-empty, this queue is placed in the given container. Otherwise, 5733 // a default container is used. 5734 // If not specified, defaults to "" 5735 func MapStageContainer(value string) MapStageAttr { 5736 return func(m optionalAttr) { 5737 m["container"] = value 5738 } 5739 } 5740 5741 // MapStageSharedName sets the optional shared_name attribute to value. 5742 // 5743 // value: It is necessary to match this name to the matching Unstage Op. 5744 // If not specified, defaults to "" 5745 func MapStageSharedName(value string) MapStageAttr { 5746 return func(m optionalAttr) { 5747 m["shared_name"] = value 5748 } 5749 } 5750 5751 // Stage (key, values) in the underlying container which behaves like a hashtable. 5752 // 5753 // Arguments: 5754 // key: int64 5755 // 5756 // values: a list of tensors 5757 // dtypes A list of data types that inserted values should adhere to. 5758 // 5759 // 5760 // Returns the created operation. 5761 func MapStage(scope *Scope, key tf.Output, indices tf.Output, values []tf.Output, dtypes []tf.DataType, optional ...MapStageAttr) (o *tf.Operation) { 5762 if scope.Err() != nil { 5763 return 5764 } 5765 attrs := map[string]interface{}{"dtypes": dtypes} 5766 for _, a := range optional { 5767 a(attrs) 5768 } 5769 opspec := tf.OpSpec{ 5770 Type: "MapStage", 5771 Input: []tf.Input{ 5772 key, indices, tf.OutputList(values), 5773 }, 5774 Attrs: attrs, 5775 } 5776 return scope.AddOperation(opspec) 5777 } 5778 5779 // StageClearAttr is an optional argument to StageClear. 5780 type StageClearAttr func(optionalAttr) 5781 5782 // StageClearCapacity sets the optional capacity attribute to value. 5783 // If not specified, defaults to 0 5784 // 5785 // REQUIRES: value >= 0 5786 func StageClearCapacity(value int64) StageClearAttr { 5787 return func(m optionalAttr) { 5788 m["capacity"] = value 5789 } 5790 } 5791 5792 // StageClearMemoryLimit sets the optional memory_limit attribute to value. 5793 // If not specified, defaults to 0 5794 // 5795 // REQUIRES: value >= 0 5796 func StageClearMemoryLimit(value int64) StageClearAttr { 5797 return func(m optionalAttr) { 5798 m["memory_limit"] = value 5799 } 5800 } 5801 5802 // StageClearContainer sets the optional container attribute to value. 5803 // If not specified, defaults to "" 5804 func StageClearContainer(value string) StageClearAttr { 5805 return func(m optionalAttr) { 5806 m["container"] = value 5807 } 5808 } 5809 5810 // StageClearSharedName sets the optional shared_name attribute to value. 5811 // If not specified, defaults to "" 5812 func StageClearSharedName(value string) StageClearAttr { 5813 return func(m optionalAttr) { 5814 m["shared_name"] = value 5815 } 5816 } 5817 5818 // Op removes all elements in the underlying container. 5819 // 5820 // Returns the created operation. 5821 func StageClear(scope *Scope, dtypes []tf.DataType, optional ...StageClearAttr) (o *tf.Operation) { 5822 if scope.Err() != nil { 5823 return 5824 } 5825 attrs := map[string]interface{}{"dtypes": dtypes} 5826 for _, a := range optional { 5827 a(attrs) 5828 } 5829 opspec := tf.OpSpec{ 5830 Type: "StageClear", 5831 5832 Attrs: attrs, 5833 } 5834 return scope.AddOperation(opspec) 5835 } 5836 5837 // StageSizeAttr is an optional argument to StageSize. 5838 type StageSizeAttr func(optionalAttr) 5839 5840 // StageSizeCapacity sets the optional capacity attribute to value. 5841 // If not specified, defaults to 0 5842 // 5843 // REQUIRES: value >= 0 5844 func StageSizeCapacity(value int64) StageSizeAttr { 5845 return func(m optionalAttr) { 5846 m["capacity"] = value 5847 } 5848 } 5849 5850 // StageSizeMemoryLimit sets the optional memory_limit attribute to value. 5851 // If not specified, defaults to 0 5852 // 5853 // REQUIRES: value >= 0 5854 func StageSizeMemoryLimit(value int64) StageSizeAttr { 5855 return func(m optionalAttr) { 5856 m["memory_limit"] = value 5857 } 5858 } 5859 5860 // StageSizeContainer sets the optional container attribute to value. 5861 // If not specified, defaults to "" 5862 func StageSizeContainer(value string) StageSizeAttr { 5863 return func(m optionalAttr) { 5864 m["container"] = value 5865 } 5866 } 5867 5868 // StageSizeSharedName sets the optional shared_name attribute to value. 5869 // If not specified, defaults to "" 5870 func StageSizeSharedName(value string) StageSizeAttr { 5871 return func(m optionalAttr) { 5872 m["shared_name"] = value 5873 } 5874 } 5875 5876 // Op returns the number of elements in the underlying container. 5877 func StageSize(scope *Scope, dtypes []tf.DataType, optional ...StageSizeAttr) (size tf.Output) { 5878 if scope.Err() != nil { 5879 return 5880 } 5881 attrs := map[string]interface{}{"dtypes": dtypes} 5882 for _, a := range optional { 5883 a(attrs) 5884 } 5885 opspec := tf.OpSpec{ 5886 Type: "StageSize", 5887 5888 Attrs: attrs, 5889 } 5890 op := scope.AddOperation(opspec) 5891 return op.Output(0) 5892 } 5893 5894 // StagePeekAttr is an optional argument to StagePeek. 5895 type StagePeekAttr func(optionalAttr) 5896 5897 // StagePeekCapacity sets the optional capacity attribute to value. 5898 // If not specified, defaults to 0 5899 // 5900 // REQUIRES: value >= 0 5901 func StagePeekCapacity(value int64) StagePeekAttr { 5902 return func(m optionalAttr) { 5903 m["capacity"] = value 5904 } 5905 } 5906 5907 // StagePeekMemoryLimit sets the optional memory_limit attribute to value. 5908 // If not specified, defaults to 0 5909 // 5910 // REQUIRES: value >= 0 5911 func StagePeekMemoryLimit(value int64) StagePeekAttr { 5912 return func(m optionalAttr) { 5913 m["memory_limit"] = value 5914 } 5915 } 5916 5917 // StagePeekContainer sets the optional container attribute to value. 5918 // If not specified, defaults to "" 5919 func StagePeekContainer(value string) StagePeekAttr { 5920 return func(m optionalAttr) { 5921 m["container"] = value 5922 } 5923 } 5924 5925 // StagePeekSharedName sets the optional shared_name attribute to value. 5926 // If not specified, defaults to "" 5927 func StagePeekSharedName(value string) StagePeekAttr { 5928 return func(m optionalAttr) { 5929 m["shared_name"] = value 5930 } 5931 } 5932 5933 // Op peeks at the values at the specified index. If the 5934 // 5935 // underlying container does not contain sufficient elements 5936 // this op will block until it does. This Op is optimized for 5937 // performance. 5938 func StagePeek(scope *Scope, index tf.Output, dtypes []tf.DataType, optional ...StagePeekAttr) (values []tf.Output) { 5939 if scope.Err() != nil { 5940 return 5941 } 5942 attrs := map[string]interface{}{"dtypes": dtypes} 5943 for _, a := range optional { 5944 a(attrs) 5945 } 5946 opspec := tf.OpSpec{ 5947 Type: "StagePeek", 5948 Input: []tf.Input{ 5949 index, 5950 }, 5951 Attrs: attrs, 5952 } 5953 op := scope.AddOperation(opspec) 5954 if scope.Err() != nil { 5955 return 5956 } 5957 var idx int 5958 var err error 5959 if values, idx, err = makeOutputList(op, idx, "values"); err != nil { 5960 scope.UpdateErr("StagePeek", err) 5961 return 5962 } 5963 return values 5964 } 5965 5966 // UnstageAttr is an optional argument to Unstage. 5967 type UnstageAttr func(optionalAttr) 5968 5969 // UnstageCapacity sets the optional capacity attribute to value. 5970 // If not specified, defaults to 0 5971 // 5972 // REQUIRES: value >= 0 5973 func UnstageCapacity(value int64) UnstageAttr { 5974 return func(m optionalAttr) { 5975 m["capacity"] = value 5976 } 5977 } 5978 5979 // UnstageMemoryLimit sets the optional memory_limit attribute to value. 5980 // If not specified, defaults to 0 5981 // 5982 // REQUIRES: value >= 0 5983 func UnstageMemoryLimit(value int64) UnstageAttr { 5984 return func(m optionalAttr) { 5985 m["memory_limit"] = value 5986 } 5987 } 5988 5989 // UnstageContainer sets the optional container attribute to value. 5990 // If not specified, defaults to "" 5991 func UnstageContainer(value string) UnstageAttr { 5992 return func(m optionalAttr) { 5993 m["container"] = value 5994 } 5995 } 5996 5997 // UnstageSharedName sets the optional shared_name attribute to value. 5998 // If not specified, defaults to "" 5999 func UnstageSharedName(value string) UnstageAttr { 6000 return func(m optionalAttr) { 6001 m["shared_name"] = value 6002 } 6003 } 6004 6005 // Op is similar to a lightweight Dequeue. 6006 // 6007 // The basic functionality is similar to dequeue with many fewer 6008 // capabilities and options. This Op is optimized for performance. 6009 func Unstage(scope *Scope, dtypes []tf.DataType, optional ...UnstageAttr) (values []tf.Output) { 6010 if scope.Err() != nil { 6011 return 6012 } 6013 attrs := map[string]interface{}{"dtypes": dtypes} 6014 for _, a := range optional { 6015 a(attrs) 6016 } 6017 opspec := tf.OpSpec{ 6018 Type: "Unstage", 6019 6020 Attrs: attrs, 6021 } 6022 op := scope.AddOperation(opspec) 6023 if scope.Err() != nil { 6024 return 6025 } 6026 var idx int 6027 var err error 6028 if values, idx, err = makeOutputList(op, idx, "values"); err != nil { 6029 scope.UpdateErr("Unstage", err) 6030 return 6031 } 6032 return values 6033 } 6034 6035 // StageAttr is an optional argument to Stage. 6036 type StageAttr func(optionalAttr) 6037 6038 // StageCapacity sets the optional capacity attribute to value. 6039 // 6040 // value: Maximum number of elements in the Staging Area. If > 0, inserts 6041 // on the container will block when the capacity is reached. 6042 // If not specified, defaults to 0 6043 // 6044 // REQUIRES: value >= 0 6045 func StageCapacity(value int64) StageAttr { 6046 return func(m optionalAttr) { 6047 m["capacity"] = value 6048 } 6049 } 6050 6051 // StageMemoryLimit sets the optional memory_limit attribute to value. 6052 // 6053 // value: The maximum number of bytes allowed for Tensors in the Staging Area. 6054 // If > 0, inserts will block until sufficient space is available. 6055 // If not specified, defaults to 0 6056 // 6057 // REQUIRES: value >= 0 6058 func StageMemoryLimit(value int64) StageAttr { 6059 return func(m optionalAttr) { 6060 m["memory_limit"] = value 6061 } 6062 } 6063 6064 // StageContainer sets the optional container attribute to value. 6065 // 6066 // value: If non-empty, this queue is placed in the given container. Otherwise, 6067 // a default container is used. 6068 // If not specified, defaults to "" 6069 func StageContainer(value string) StageAttr { 6070 return func(m optionalAttr) { 6071 m["container"] = value 6072 } 6073 } 6074 6075 // StageSharedName sets the optional shared_name attribute to value. 6076 // 6077 // value: It is necessary to match this name to the matching Unstage Op. 6078 // If not specified, defaults to "" 6079 func StageSharedName(value string) StageAttr { 6080 return func(m optionalAttr) { 6081 m["shared_name"] = value 6082 } 6083 } 6084 6085 // Stage values similar to a lightweight Enqueue. 6086 // 6087 // The basic functionality of this Op is similar to a queue with many 6088 // fewer capabilities and options. This Op is optimized for performance. 6089 // 6090 // Arguments: 6091 // values: a list of tensors 6092 // dtypes A list of data types that inserted values should adhere to. 6093 // 6094 // Returns the created operation. 6095 func Stage(scope *Scope, values []tf.Output, optional ...StageAttr) (o *tf.Operation) { 6096 if scope.Err() != nil { 6097 return 6098 } 6099 attrs := map[string]interface{}{} 6100 for _, a := range optional { 6101 a(attrs) 6102 } 6103 opspec := tf.OpSpec{ 6104 Type: "Stage", 6105 Input: []tf.Input{ 6106 tf.OutputList(values), 6107 }, 6108 Attrs: attrs, 6109 } 6110 return scope.AddOperation(opspec) 6111 } 6112 6113 // Delete the tensor specified by its handle in the session. 6114 // 6115 // Arguments: 6116 // handle: The handle for a tensor stored in the session state. 6117 // 6118 // Returns the created operation. 6119 func DeleteSessionTensor(scope *Scope, handle tf.Output) (o *tf.Operation) { 6120 if scope.Err() != nil { 6121 return 6122 } 6123 opspec := tf.OpSpec{ 6124 Type: "DeleteSessionTensor", 6125 Input: []tf.Input{ 6126 handle, 6127 }, 6128 } 6129 return scope.AddOperation(opspec) 6130 } 6131 6132 // Store the input tensor in the state of the current session. 6133 // 6134 // Arguments: 6135 // value: The tensor to be stored. 6136 // 6137 // Returns The handle for the tensor stored in the session state, represented 6138 // as a string. 6139 func GetSessionHandle(scope *Scope, value tf.Output) (handle tf.Output) { 6140 if scope.Err() != nil { 6141 return 6142 } 6143 opspec := tf.OpSpec{ 6144 Type: "GetSessionHandle", 6145 Input: []tf.Input{ 6146 value, 6147 }, 6148 } 6149 op := scope.AddOperation(opspec) 6150 return op.Output(0) 6151 } 6152 6153 // Deprecated. Use TensorArraySizeV3 6154 // 6155 // DEPRECATED at GraphDef version 26: Use TensorArraySizeV3 6156 func TensorArraySizeV2(scope *Scope, handle tf.Output, flow_in tf.Output) (size tf.Output) { 6157 if scope.Err() != nil { 6158 return 6159 } 6160 opspec := tf.OpSpec{ 6161 Type: "TensorArraySizeV2", 6162 Input: []tf.Input{ 6163 handle, flow_in, 6164 }, 6165 } 6166 op := scope.AddOperation(opspec) 6167 return op.Output(0) 6168 } 6169 6170 // TensorArrayConcatV2Attr is an optional argument to TensorArrayConcatV2. 6171 type TensorArrayConcatV2Attr func(optionalAttr) 6172 6173 // TensorArrayConcatV2ElementShapeExcept0 sets the optional element_shape_except0 attribute to value. 6174 // If not specified, defaults to <unknown_rank:true > 6175 func TensorArrayConcatV2ElementShapeExcept0(value tf.Shape) TensorArrayConcatV2Attr { 6176 return func(m optionalAttr) { 6177 m["element_shape_except0"] = value 6178 } 6179 } 6180 6181 // Deprecated. Use TensorArrayConcatV3 6182 func TensorArrayConcatV2(scope *Scope, handle tf.Output, flow_in tf.Output, dtype tf.DataType, optional ...TensorArrayConcatV2Attr) (value tf.Output, lengths tf.Output) { 6183 if scope.Err() != nil { 6184 return 6185 } 6186 attrs := map[string]interface{}{"dtype": dtype} 6187 for _, a := range optional { 6188 a(attrs) 6189 } 6190 opspec := tf.OpSpec{ 6191 Type: "TensorArrayConcatV2", 6192 Input: []tf.Input{ 6193 handle, flow_in, 6194 }, 6195 Attrs: attrs, 6196 } 6197 op := scope.AddOperation(opspec) 6198 return op.Output(0), op.Output(1) 6199 } 6200 6201 // Deprecated. Use TensorArrayGradV3 6202 // 6203 // DEPRECATED at GraphDef version 26: Use TensorArrayWriteV3 6204 func TensorArrayWriteV2(scope *Scope, handle tf.Output, index tf.Output, value tf.Output, flow_in tf.Output) (flow_out tf.Output) { 6205 if scope.Err() != nil { 6206 return 6207 } 6208 opspec := tf.OpSpec{ 6209 Type: "TensorArrayWriteV2", 6210 Input: []tf.Input{ 6211 handle, index, value, flow_in, 6212 }, 6213 } 6214 op := scope.AddOperation(opspec) 6215 return op.Output(0) 6216 } 6217 6218 // Deprecated. Use TensorArrayGradV3 6219 // 6220 // DEPRECATED at GraphDef version 26: Use TensorArrayGradV3 6221 func TensorArrayGradV2(scope *Scope, handle tf.Output, flow_in tf.Output, source string) (grad_handle tf.Output) { 6222 if scope.Err() != nil { 6223 return 6224 } 6225 attrs := map[string]interface{}{"source": source} 6226 opspec := tf.OpSpec{ 6227 Type: "TensorArrayGradV2", 6228 Input: []tf.Input{ 6229 handle, flow_in, 6230 }, 6231 Attrs: attrs, 6232 } 6233 op := scope.AddOperation(opspec) 6234 return op.Output(0) 6235 } 6236 6237 // TensorArrayV2Attr is an optional argument to TensorArrayV2. 6238 type TensorArrayV2Attr func(optionalAttr) 6239 6240 // TensorArrayV2ElementShape sets the optional element_shape attribute to value. 6241 // If not specified, defaults to <unknown_rank:true > 6242 func TensorArrayV2ElementShape(value tf.Shape) TensorArrayV2Attr { 6243 return func(m optionalAttr) { 6244 m["element_shape"] = value 6245 } 6246 } 6247 6248 // TensorArrayV2DynamicSize sets the optional dynamic_size attribute to value. 6249 // If not specified, defaults to false 6250 func TensorArrayV2DynamicSize(value bool) TensorArrayV2Attr { 6251 return func(m optionalAttr) { 6252 m["dynamic_size"] = value 6253 } 6254 } 6255 6256 // TensorArrayV2ClearAfterRead sets the optional clear_after_read attribute to value. 6257 // If not specified, defaults to true 6258 func TensorArrayV2ClearAfterRead(value bool) TensorArrayV2Attr { 6259 return func(m optionalAttr) { 6260 m["clear_after_read"] = value 6261 } 6262 } 6263 6264 // TensorArrayV2TensorArrayName sets the optional tensor_array_name attribute to value. 6265 // If not specified, defaults to "" 6266 func TensorArrayV2TensorArrayName(value string) TensorArrayV2Attr { 6267 return func(m optionalAttr) { 6268 m["tensor_array_name"] = value 6269 } 6270 } 6271 6272 // Deprecated. Use TensorArrayV3 6273 // 6274 // DEPRECATED at GraphDef version 26: Use TensorArrayV3 6275 func TensorArrayV2(scope *Scope, size tf.Output, dtype tf.DataType, optional ...TensorArrayV2Attr) (handle tf.Output) { 6276 if scope.Err() != nil { 6277 return 6278 } 6279 attrs := map[string]interface{}{"dtype": dtype} 6280 for _, a := range optional { 6281 a(attrs) 6282 } 6283 opspec := tf.OpSpec{ 6284 Type: "TensorArrayV2", 6285 Input: []tf.Input{ 6286 size, 6287 }, 6288 Attrs: attrs, 6289 } 6290 op := scope.AddOperation(opspec) 6291 return op.Output(0) 6292 } 6293 6294 // Split the data from the input value into TensorArray elements. 6295 // 6296 // Assuming that `lengths` takes on values 6297 // 6298 // ```(n0, n1, ..., n(T-1))``` 6299 // 6300 // and that `value` has shape 6301 // 6302 // ```(n0 + n1 + ... + n(T-1) x d0 x d1 x ...)```, 6303 // 6304 // this splits values into a TensorArray with T tensors. 6305 // 6306 // TensorArray index t will be the subtensor of values with starting position 6307 // 6308 // ```(n0 + n1 + ... + n(t-1), 0, 0, ...)``` 6309 // 6310 // and having size 6311 // 6312 // ```nt x d0 x d1 x ...``` 6313 // 6314 // Arguments: 6315 // handle: The handle to a TensorArray. 6316 // value: The concatenated tensor to write to the TensorArray. 6317 // lengths: The vector of lengths, how to split the rows of value into the 6318 // TensorArray. 6319 // flow_in: A float scalar that enforces proper chaining of operations. 6320 // 6321 // Returns A float scalar that enforces proper chaining of operations. 6322 func TensorArraySplitV3(scope *Scope, handle tf.Output, value tf.Output, lengths tf.Output, flow_in tf.Output) (flow_out tf.Output) { 6323 if scope.Err() != nil { 6324 return 6325 } 6326 opspec := tf.OpSpec{ 6327 Type: "TensorArraySplitV3", 6328 Input: []tf.Input{ 6329 handle, value, lengths, flow_in, 6330 }, 6331 } 6332 op := scope.AddOperation(opspec) 6333 return op.Output(0) 6334 } 6335 6336 // EmptyAttr is an optional argument to Empty. 6337 type EmptyAttr func(optionalAttr) 6338 6339 // EmptyInit sets the optional init attribute to value. 6340 // 6341 // value: If True, initialize the returned tensor with the default value of dtype. Otherwise, the implementation is free not to initializethe tensor's content. 6342 // If not specified, defaults to false 6343 func EmptyInit(value bool) EmptyAttr { 6344 return func(m optionalAttr) { 6345 m["init"] = value 6346 } 6347 } 6348 6349 // Creates a tensor with the given shape. 6350 // 6351 // This operation creates a tensor of `shape` and `dtype`. 6352 // 6353 // Arguments: 6354 // shape: 1-D. Represents the shape of the output tensor. 6355 // 6356 // 6357 // Returns A `Tensor` of type `T`. 6358 func Empty(scope *Scope, shape tf.Output, dtype tf.DataType, optional ...EmptyAttr) (output tf.Output) { 6359 if scope.Err() != nil { 6360 return 6361 } 6362 attrs := map[string]interface{}{"dtype": dtype} 6363 for _, a := range optional { 6364 a(attrs) 6365 } 6366 opspec := tf.OpSpec{ 6367 Type: "Empty", 6368 Input: []tf.Input{ 6369 shape, 6370 }, 6371 Attrs: attrs, 6372 } 6373 op := scope.AddOperation(opspec) 6374 return op.Output(0) 6375 } 6376 6377 // TensorArrayConcatV3Attr is an optional argument to TensorArrayConcatV3. 6378 type TensorArrayConcatV3Attr func(optionalAttr) 6379 6380 // TensorArrayConcatV3ElementShapeExcept0 sets the optional element_shape_except0 attribute to value. 6381 // 6382 // value: The expected shape of an element, if known, 6383 // excluding the first dimension. Used to validate the shapes of 6384 // TensorArray elements. If this shape is not fully specified, concatenating 6385 // zero-size TensorArrays is an error. 6386 // If not specified, defaults to <unknown_rank:true > 6387 func TensorArrayConcatV3ElementShapeExcept0(value tf.Shape) TensorArrayConcatV3Attr { 6388 return func(m optionalAttr) { 6389 m["element_shape_except0"] = value 6390 } 6391 } 6392 6393 // Concat the elements from the TensorArray into value `value`. 6394 // 6395 // Takes `T` elements of shapes 6396 // 6397 // ``` 6398 // (n0 x d0 x d1 x ...), (n1 x d0 x d1 x ...), ..., (n(T-1) x d0 x d1 x ...) 6399 // ``` 6400 // 6401 // and concatenates them into a Tensor of shape: 6402 // 6403 // ```(n0 + n1 + ... + n(T-1) x d0 x d1 x ...)``` 6404 // 6405 // All elements must have the same shape (excepting the first dimension). 6406 // 6407 // Arguments: 6408 // handle: The handle to a TensorArray. 6409 // flow_in: A float scalar that enforces proper chaining of operations. 6410 // dtype: The type of the elem that is returned. 6411 // 6412 // Returns All of the elements in the TensorArray, concatenated along the first 6413 // axis.A vector of the row sizes of the original T elements in the 6414 // value output. In the example above, this would be the values: 6415 // `(n1, n2, ..., n(T-1))`. 6416 func TensorArrayConcatV3(scope *Scope, handle tf.Output, flow_in tf.Output, dtype tf.DataType, optional ...TensorArrayConcatV3Attr) (value tf.Output, lengths tf.Output) { 6417 if scope.Err() != nil { 6418 return 6419 } 6420 attrs := map[string]interface{}{"dtype": dtype} 6421 for _, a := range optional { 6422 a(attrs) 6423 } 6424 opspec := tf.OpSpec{ 6425 Type: "TensorArrayConcatV3", 6426 Input: []tf.Input{ 6427 handle, flow_in, 6428 }, 6429 Attrs: attrs, 6430 } 6431 op := scope.AddOperation(opspec) 6432 return op.Output(0), op.Output(1) 6433 } 6434 6435 // Scatter the data from the input value into specific TensorArray elements. 6436 // 6437 // `indices` must be a vector, its length must match the first dim of `value`. 6438 // 6439 // Arguments: 6440 // handle: The handle to a TensorArray. 6441 // indices: The locations at which to write the tensor elements. 6442 // value: The concatenated tensor to write to the TensorArray. 6443 // flow_in: A float scalar that enforces proper chaining of operations. 6444 // 6445 // Returns A float scalar that enforces proper chaining of operations. 6446 func TensorArrayScatterV3(scope *Scope, handle tf.Output, indices tf.Output, value tf.Output, flow_in tf.Output) (flow_out tf.Output) { 6447 if scope.Err() != nil { 6448 return 6449 } 6450 opspec := tf.OpSpec{ 6451 Type: "TensorArrayScatterV3", 6452 Input: []tf.Input{ 6453 handle, indices, value, flow_in, 6454 }, 6455 } 6456 op := scope.AddOperation(opspec) 6457 return op.Output(0) 6458 } 6459 6460 // TensorArrayGatherV3Attr is an optional argument to TensorArrayGatherV3. 6461 type TensorArrayGatherV3Attr func(optionalAttr) 6462 6463 // TensorArrayGatherV3ElementShape sets the optional element_shape attribute to value. 6464 // 6465 // value: The expected shape of an element, if known. Used to 6466 // validate the shapes of TensorArray elements. If this shape is not 6467 // fully specified, gathering zero-size TensorArrays is an error. 6468 // If not specified, defaults to <unknown_rank:true > 6469 func TensorArrayGatherV3ElementShape(value tf.Shape) TensorArrayGatherV3Attr { 6470 return func(m optionalAttr) { 6471 m["element_shape"] = value 6472 } 6473 } 6474 6475 // Gather specific elements from the TensorArray into output `value`. 6476 // 6477 // All elements selected by `indices` must have the same shape. 6478 // 6479 // Arguments: 6480 // handle: The handle to a TensorArray. 6481 // indices: The locations in the TensorArray from which to read tensor elements. 6482 // flow_in: A float scalar that enforces proper chaining of operations. 6483 // dtype: The type of the elem that is returned. 6484 // 6485 // Returns All of the elements in the TensorArray, concatenated along a new 6486 // axis (the new dimension 0). 6487 func TensorArrayGatherV3(scope *Scope, handle tf.Output, indices tf.Output, flow_in tf.Output, dtype tf.DataType, optional ...TensorArrayGatherV3Attr) (value tf.Output) { 6488 if scope.Err() != nil { 6489 return 6490 } 6491 attrs := map[string]interface{}{"dtype": dtype} 6492 for _, a := range optional { 6493 a(attrs) 6494 } 6495 opspec := tf.OpSpec{ 6496 Type: "TensorArrayGatherV3", 6497 Input: []tf.Input{ 6498 handle, indices, flow_in, 6499 }, 6500 Attrs: attrs, 6501 } 6502 op := scope.AddOperation(opspec) 6503 return op.Output(0) 6504 } 6505 6506 // Creates a TensorArray for storing multiple gradients of values in the given handle. 6507 // 6508 // Similar to TensorArrayGradV3. However it creates an accumulator with an 6509 // expanded shape compared to the input TensorArray whose gradient is being 6510 // computed. This enables multiple gradients for the same TensorArray to be 6511 // calculated using the same accumulator. 6512 // 6513 // Arguments: 6514 // handle: The handle to the forward TensorArray. 6515 // flow_in: A float scalar that enforces proper chaining of operations. 6516 // shape_to_prepend: An int32 vector representing a shape. Elements in the gradient accumulator will 6517 // have shape which is this shape_to_prepend value concatenated with shape of the 6518 // elements in the TensorArray corresponding to the input handle. 6519 // source: The gradient source string, used to decide which gradient TensorArray 6520 // to return. 6521 func TensorArrayGradWithShape(scope *Scope, handle tf.Output, flow_in tf.Output, shape_to_prepend tf.Output, source string) (grad_handle tf.Output, flow_out tf.Output) { 6522 if scope.Err() != nil { 6523 return 6524 } 6525 attrs := map[string]interface{}{"source": source} 6526 opspec := tf.OpSpec{ 6527 Type: "TensorArrayGradWithShape", 6528 Input: []tf.Input{ 6529 handle, flow_in, shape_to_prepend, 6530 }, 6531 Attrs: attrs, 6532 } 6533 op := scope.AddOperation(opspec) 6534 return op.Output(0), op.Output(1) 6535 } 6536 6537 // Creates a TensorArray for storing the gradients of values in the given handle. 6538 // 6539 // If the given TensorArray gradient already exists, returns a reference to it. 6540 // 6541 // Locks the size of the original TensorArray by disabling its dynamic size flag. 6542 // 6543 // **A note about the input flow_in:** 6544 // 6545 // The handle flow_in forces the execution of the gradient lookup to occur 6546 // only after certain other operations have occurred. For example, when 6547 // the forward TensorArray is dynamically sized, writes to this TensorArray 6548 // may resize the object. The gradient TensorArray is statically sized based 6549 // on the size of the forward TensorArray when this operation executes. 6550 // Furthermore, the size of the forward TensorArray is frozen by this call. 6551 // As a result, the flow is used to ensure that the call to generate the gradient 6552 // TensorArray only happens after all writes are executed. 6553 // 6554 // In the case of dynamically sized TensorArrays, gradient computation should 6555 // only be performed on read operations that have themselves been chained via 6556 // flow to occur only after all writes have executed. That way the final size 6557 // of the forward TensorArray is known when this operation is called. 6558 // 6559 // **A note about the source attribute:** 6560 // 6561 // TensorArray gradient calls use an accumulator TensorArray object. If 6562 // multiple gradients are calculated and run in the same session, the multiple 6563 // gradient nodes may accidentally flow through the same accumulator TensorArray. 6564 // This double counts and generally breaks the TensorArray gradient flow. 6565 // 6566 // The solution is to identify which gradient call this particular 6567 // TensorArray gradient is being called in. This is performed by identifying 6568 // a unique string (e.g. "gradients", "gradients_1", ...) from the input 6569 // gradient Tensor's name. This string is used as a suffix when creating 6570 // the TensorArray gradient object here (the attribute `source`). 6571 // 6572 // The attribute `source` is added as a suffix to the forward TensorArray's 6573 // name when performing the creation / lookup, so that each separate gradient 6574 // calculation gets its own TensorArray accumulator. 6575 // 6576 // Arguments: 6577 // handle: The handle to the forward TensorArray. 6578 // flow_in: A float scalar that enforces proper chaining of operations. 6579 // source: The gradient source string, used to decide which gradient TensorArray 6580 // to return. 6581 func TensorArrayGradV3(scope *Scope, handle tf.Output, flow_in tf.Output, source string) (grad_handle tf.Output, flow_out tf.Output) { 6582 if scope.Err() != nil { 6583 return 6584 } 6585 attrs := map[string]interface{}{"source": source} 6586 opspec := tf.OpSpec{ 6587 Type: "TensorArrayGradV3", 6588 Input: []tf.Input{ 6589 handle, flow_in, 6590 }, 6591 Attrs: attrs, 6592 } 6593 op := scope.AddOperation(opspec) 6594 return op.Output(0), op.Output(1) 6595 } 6596 6597 // Pop the element at the top of the stack. 6598 // 6599 // Arguments: 6600 // handle: The handle to a stack. 6601 // elem_type: The type of the elem that is popped. 6602 // 6603 // Returns The tensor that is popped from the top of the stack. 6604 func StackPopV2(scope *Scope, handle tf.Output, elem_type tf.DataType) (elem tf.Output) { 6605 if scope.Err() != nil { 6606 return 6607 } 6608 attrs := map[string]interface{}{"elem_type": elem_type} 6609 opspec := tf.OpSpec{ 6610 Type: "StackPopV2", 6611 Input: []tf.Input{ 6612 handle, 6613 }, 6614 Attrs: attrs, 6615 } 6616 op := scope.AddOperation(opspec) 6617 return op.Output(0) 6618 } 6619 6620 // OneHotAttr is an optional argument to OneHot. 6621 type OneHotAttr func(optionalAttr) 6622 6623 // OneHotAxis sets the optional axis attribute to value. 6624 // 6625 // value: The axis to fill (default: -1, a new inner-most axis). 6626 // If not specified, defaults to -1 6627 func OneHotAxis(value int64) OneHotAttr { 6628 return func(m optionalAttr) { 6629 m["axis"] = value 6630 } 6631 } 6632 6633 // Returns a one-hot tensor. 6634 // 6635 // The locations represented by indices in `indices` take value `on_value`, 6636 // while all other locations take value `off_value`. 6637 // 6638 // If the input `indices` is rank `N`, the output will have rank `N+1`, 6639 // The new axis is created at dimension `axis` (default: the new axis is 6640 // appended at the end). 6641 // 6642 // If `indices` is a scalar the output shape will be a vector of length `depth`. 6643 // 6644 // If `indices` is a vector of length `features`, the output shape will be: 6645 // ``` 6646 // features x depth if axis == -1 6647 // depth x features if axis == 0 6648 // ``` 6649 // 6650 // If `indices` is a matrix (batch) with shape `[batch, features]`, 6651 // the output shape will be: 6652 // ``` 6653 // batch x features x depth if axis == -1 6654 // batch x depth x features if axis == 1 6655 // depth x batch x features if axis == 0 6656 // ``` 6657 // 6658 // 6659 // Examples 6660 // ========= 6661 // 6662 // Suppose that 6663 // ``` 6664 // indices = [0, 2, -1, 1] 6665 // depth = 3 6666 // on_value = 5.0 6667 // off_value = 0.0 6668 // axis = -1 6669 // ``` 6670 // 6671 // Then output is `[4 x 3]`: 6672 // ``` 6673 // output = 6674 // [5.0 0.0 0.0] // one_hot(0) 6675 // [0.0 0.0 5.0] // one_hot(2) 6676 // [0.0 0.0 0.0] // one_hot(-1) 6677 // [0.0 5.0 0.0] // one_hot(1) 6678 // ``` 6679 // 6680 // Suppose that 6681 // ``` 6682 // indices = [0, 2, -1, 1] 6683 // depth = 3 6684 // on_value = 0.0 6685 // off_value = 3.0 6686 // axis = 0 6687 // ``` 6688 // 6689 // Then output is `[3 x 4]`: 6690 // ``` 6691 // output = 6692 // [0.0 3.0 3.0 3.0] 6693 // [3.0 3.0 3.0 0.0] 6694 // [3.0 3.0 3.0 3.0] 6695 // [3.0 0.0 3.0 3.0] 6696 // // ^ one_hot(0) 6697 // // ^ one_hot(2) 6698 // // ^ one_hot(-1) 6699 // // ^ one_hot(1) 6700 // ``` 6701 // 6702 // Suppose that 6703 // ``` 6704 // indices = [[0, 2], [1, -1]] 6705 // depth = 3 6706 // on_value = 1.0 6707 // off_value = 0.0 6708 // axis = -1 6709 // ``` 6710 // 6711 // Then output is `[2 x 2 x 3]`: 6712 // ``` 6713 // output = 6714 // [ 6715 // [1.0, 0.0, 0.0] // one_hot(0) 6716 // [0.0, 0.0, 1.0] // one_hot(2) 6717 // ][ 6718 // [0.0, 1.0, 0.0] // one_hot(1) 6719 // [0.0, 0.0, 0.0] // one_hot(-1) 6720 // ] 6721 // ``` 6722 // 6723 // Arguments: 6724 // indices: A tensor of indices. 6725 // depth: A scalar defining the depth of the one hot dimension. 6726 // on_value: A scalar defining the value to fill in output when `indices[j] = i`. 6727 // off_value: A scalar defining the value to fill in output when `indices[j] != i`. 6728 // 6729 // Returns The one-hot tensor. 6730 func OneHot(scope *Scope, indices tf.Output, depth tf.Output, on_value tf.Output, off_value tf.Output, optional ...OneHotAttr) (output tf.Output) { 6731 if scope.Err() != nil { 6732 return 6733 } 6734 attrs := map[string]interface{}{} 6735 for _, a := range optional { 6736 a(attrs) 6737 } 6738 opspec := tf.OpSpec{ 6739 Type: "OneHot", 6740 Input: []tf.Input{ 6741 indices, depth, on_value, off_value, 6742 }, 6743 Attrs: attrs, 6744 } 6745 op := scope.AddOperation(opspec) 6746 return op.Output(0) 6747 } 6748 6749 // Computes the number of elements in the given queue. 6750 // 6751 // Arguments: 6752 // handle: The handle to a queue. 6753 // 6754 // Returns The number of elements in the given queue. 6755 func QueueSizeV2(scope *Scope, handle tf.Output) (size tf.Output) { 6756 if scope.Err() != nil { 6757 return 6758 } 6759 opspec := tf.OpSpec{ 6760 Type: "QueueSizeV2", 6761 Input: []tf.Input{ 6762 handle, 6763 }, 6764 } 6765 op := scope.AddOperation(opspec) 6766 return op.Output(0) 6767 } 6768 6769 // QueueDequeueManyV2Attr is an optional argument to QueueDequeueManyV2. 6770 type QueueDequeueManyV2Attr func(optionalAttr) 6771 6772 // QueueDequeueManyV2TimeoutMs sets the optional timeout_ms attribute to value. 6773 // 6774 // value: If the queue has fewer than n elements, this operation 6775 // will block for up to timeout_ms milliseconds. 6776 // Note: This option is not supported yet. 6777 // If not specified, defaults to -1 6778 func QueueDequeueManyV2TimeoutMs(value int64) QueueDequeueManyV2Attr { 6779 return func(m optionalAttr) { 6780 m["timeout_ms"] = value 6781 } 6782 } 6783 6784 // Dequeues `n` tuples of one or more tensors from the given queue. 6785 // 6786 // If the queue is closed and there are fewer than `n` elements, then an 6787 // OutOfRange error is returned. 6788 // 6789 // This operation concatenates queue-element component tensors along the 6790 // 0th dimension to make a single component tensor. All of the components 6791 // in the dequeued tuple will have size `n` in the 0th dimension. 6792 // 6793 // This operation has `k` outputs, where `k` is the number of components in 6794 // the tuples stored in the given queue, and output `i` is the ith 6795 // component of the dequeued tuple. 6796 // 6797 // N.B. If the queue is empty, this operation will block until `n` elements 6798 // have been dequeued (or 'timeout_ms' elapses, if specified). 6799 // 6800 // Arguments: 6801 // handle: The handle to a queue. 6802 // n: The number of tuples to dequeue. 6803 // component_types: The type of each component in a tuple. 6804 // 6805 // Returns One or more tensors that were dequeued as a tuple. 6806 func QueueDequeueManyV2(scope *Scope, handle tf.Output, n tf.Output, component_types []tf.DataType, optional ...QueueDequeueManyV2Attr) (components []tf.Output) { 6807 if scope.Err() != nil { 6808 return 6809 } 6810 attrs := map[string]interface{}{"component_types": component_types} 6811 for _, a := range optional { 6812 a(attrs) 6813 } 6814 opspec := tf.OpSpec{ 6815 Type: "QueueDequeueManyV2", 6816 Input: []tf.Input{ 6817 handle, n, 6818 }, 6819 Attrs: attrs, 6820 } 6821 op := scope.AddOperation(opspec) 6822 if scope.Err() != nil { 6823 return 6824 } 6825 var idx int 6826 var err error 6827 if components, idx, err = makeOutputList(op, idx, "components"); err != nil { 6828 scope.UpdateErr("QueueDequeueManyV2", err) 6829 return 6830 } 6831 return components 6832 } 6833 6834 // QuantizeAndDequantizeAttr is an optional argument to QuantizeAndDequantize. 6835 type QuantizeAndDequantizeAttr func(optionalAttr) 6836 6837 // QuantizeAndDequantizeSignedInput sets the optional signed_input attribute to value. 6838 // If not specified, defaults to true 6839 func QuantizeAndDequantizeSignedInput(value bool) QuantizeAndDequantizeAttr { 6840 return func(m optionalAttr) { 6841 m["signed_input"] = value 6842 } 6843 } 6844 6845 // QuantizeAndDequantizeNumBits sets the optional num_bits attribute to value. 6846 // If not specified, defaults to 8 6847 func QuantizeAndDequantizeNumBits(value int64) QuantizeAndDequantizeAttr { 6848 return func(m optionalAttr) { 6849 m["num_bits"] = value 6850 } 6851 } 6852 6853 // QuantizeAndDequantizeRangeGiven sets the optional range_given attribute to value. 6854 // If not specified, defaults to false 6855 func QuantizeAndDequantizeRangeGiven(value bool) QuantizeAndDequantizeAttr { 6856 return func(m optionalAttr) { 6857 m["range_given"] = value 6858 } 6859 } 6860 6861 // QuantizeAndDequantizeInputMin sets the optional input_min attribute to value. 6862 // If not specified, defaults to 0 6863 func QuantizeAndDequantizeInputMin(value float32) QuantizeAndDequantizeAttr { 6864 return func(m optionalAttr) { 6865 m["input_min"] = value 6866 } 6867 } 6868 6869 // QuantizeAndDequantizeInputMax sets the optional input_max attribute to value. 6870 // If not specified, defaults to 0 6871 func QuantizeAndDequantizeInputMax(value float32) QuantizeAndDequantizeAttr { 6872 return func(m optionalAttr) { 6873 m["input_max"] = value 6874 } 6875 } 6876 6877 // Use QuantizeAndDequantizeV2 instead. 6878 // 6879 // DEPRECATED at GraphDef version 22: Replaced by QuantizeAndDequantizeV2 6880 func QuantizeAndDequantize(scope *Scope, input tf.Output, optional ...QuantizeAndDequantizeAttr) (output tf.Output) { 6881 if scope.Err() != nil { 6882 return 6883 } 6884 attrs := map[string]interface{}{} 6885 for _, a := range optional { 6886 a(attrs) 6887 } 6888 opspec := tf.OpSpec{ 6889 Type: "QuantizeAndDequantize", 6890 Input: []tf.Input{ 6891 input, 6892 }, 6893 Attrs: attrs, 6894 } 6895 op := scope.AddOperation(opspec) 6896 return op.Output(0) 6897 } 6898 6899 // Returns locations of nonzero / true values in a tensor. 6900 // 6901 // This operation returns the coordinates of true elements in `condition`. The 6902 // coordinates are returned in a 2-D tensor where the first dimension (rows) 6903 // represents the number of true elements, and the second dimension (columns) 6904 // represents the coordinates of the true elements. Keep in mind, the shape of 6905 // the output tensor can vary depending on how many true values there are in 6906 // `condition`. Indices are output in row-major order. 6907 // 6908 // For example: 6909 // 6910 // ``` 6911 // # 'input' tensor is [[True, False] 6912 // # [True, False]] 6913 // # 'input' has two true values, so output has two coordinates. 6914 // # 'input' has rank of 2, so coordinates have two indices. 6915 // where(input) ==> [[0, 0], 6916 // [1, 0]] 6917 // 6918 // # `condition` tensor is [[[True, False] 6919 // # [True, False]] 6920 // # [[False, True] 6921 // # [False, True]] 6922 // # [[False, False] 6923 // # [False, True]]] 6924 // # 'input' has 5 true values, so output has 5 coordinates. 6925 // # 'input' has rank of 3, so coordinates have three indices. 6926 // where(input) ==> [[0, 0, 0], 6927 // [0, 1, 0], 6928 // [1, 0, 1], 6929 // [1, 1, 1], 6930 // [2, 1, 1]] 6931 // 6932 // # `condition` tensor is [[[1.5, 0.0] 6933 // # [-0.5, 0.0]] 6934 // # [[0.0, 0.25] 6935 // # [0.0, 0.75]] 6936 // # [[0.0, 0.0] 6937 // # [0.0, 0.01]]] 6938 // # 'input' has 5 nonzero values, so output has 5 coordinates. 6939 // # 'input' has rank of 3, so coordinates have three indices. 6940 // where(input) ==> [[0, 0, 0], 6941 // [0, 1, 0], 6942 // [1, 0, 1], 6943 // [1, 1, 1], 6944 // [2, 1, 1]] 6945 // 6946 // # `condition` tensor is [[[1.5 + 0.0j, 0.0 + 0.0j] 6947 // # [0.0 + 0.5j, 0.0 + 0.0j]] 6948 // # [[0.0 + 0.0j, 0.25 + 1.5j] 6949 // # [0.0 + 0.0j, 0.75 + 0.0j]] 6950 // # [[0.0 + 0.0j, 0.0 + 0.0j] 6951 // # [0.0 + 0.0j, 0.01 + 0.0j]]] 6952 // # 'input' has 5 nonzero magnitude values, so output has 5 coordinates. 6953 // # 'input' has rank of 3, so coordinates have three indices. 6954 // where(input) ==> [[0, 0, 0], 6955 // [0, 1, 0], 6956 // [1, 0, 1], 6957 // [1, 1, 1], 6958 // [2, 1, 1]] 6959 // ``` 6960 func Where(scope *Scope, condition tf.Output) (index tf.Output) { 6961 if scope.Err() != nil { 6962 return 6963 } 6964 opspec := tf.OpSpec{ 6965 Type: "Where", 6966 Input: []tf.Input{ 6967 condition, 6968 }, 6969 } 6970 op := scope.AddOperation(opspec) 6971 return op.Output(0) 6972 } 6973 6974 // QueueDequeueV2Attr is an optional argument to QueueDequeueV2. 6975 type QueueDequeueV2Attr func(optionalAttr) 6976 6977 // QueueDequeueV2TimeoutMs sets the optional timeout_ms attribute to value. 6978 // 6979 // value: If the queue is empty, this operation will block for up to 6980 // timeout_ms milliseconds. 6981 // Note: This option is not supported yet. 6982 // If not specified, defaults to -1 6983 func QueueDequeueV2TimeoutMs(value int64) QueueDequeueV2Attr { 6984 return func(m optionalAttr) { 6985 m["timeout_ms"] = value 6986 } 6987 } 6988 6989 // Dequeues a tuple of one or more tensors from the given queue. 6990 // 6991 // This operation has k outputs, where k is the number of components 6992 // in the tuples stored in the given queue, and output i is the ith 6993 // component of the dequeued tuple. 6994 // 6995 // N.B. If the queue is empty, this operation will block until an element 6996 // has been dequeued (or 'timeout_ms' elapses, if specified). 6997 // 6998 // Arguments: 6999 // handle: The handle to a queue. 7000 // component_types: The type of each component in a tuple. 7001 // 7002 // Returns One or more tensors that were dequeued as a tuple. 7003 func QueueDequeueV2(scope *Scope, handle tf.Output, component_types []tf.DataType, optional ...QueueDequeueV2Attr) (components []tf.Output) { 7004 if scope.Err() != nil { 7005 return 7006 } 7007 attrs := map[string]interface{}{"component_types": component_types} 7008 for _, a := range optional { 7009 a(attrs) 7010 } 7011 opspec := tf.OpSpec{ 7012 Type: "QueueDequeueV2", 7013 Input: []tf.Input{ 7014 handle, 7015 }, 7016 Attrs: attrs, 7017 } 7018 op := scope.AddOperation(opspec) 7019 if scope.Err() != nil { 7020 return 7021 } 7022 var idx int 7023 var err error 7024 if components, idx, err = makeOutputList(op, idx, "components"); err != nil { 7025 scope.UpdateErr("QueueDequeueV2", err) 7026 return 7027 } 7028 return components 7029 } 7030 7031 // QueueEnqueueV2Attr is an optional argument to QueueEnqueueV2. 7032 type QueueEnqueueV2Attr func(optionalAttr) 7033 7034 // QueueEnqueueV2TimeoutMs sets the optional timeout_ms attribute to value. 7035 // 7036 // value: If the queue is full, this operation will block for up to 7037 // timeout_ms milliseconds. 7038 // Note: This option is not supported yet. 7039 // If not specified, defaults to -1 7040 func QueueEnqueueV2TimeoutMs(value int64) QueueEnqueueV2Attr { 7041 return func(m optionalAttr) { 7042 m["timeout_ms"] = value 7043 } 7044 } 7045 7046 // Enqueues a tuple of one or more tensors in the given queue. 7047 // 7048 // The components input has k elements, which correspond to the components of 7049 // tuples stored in the given queue. 7050 // 7051 // N.B. If the queue is full, this operation will block until the given 7052 // element has been enqueued (or 'timeout_ms' elapses, if specified). 7053 // 7054 // Arguments: 7055 // handle: The handle to a queue. 7056 // components: One or more tensors from which the enqueued tensors should be taken. 7057 // 7058 // Returns the created operation. 7059 func QueueEnqueueV2(scope *Scope, handle tf.Output, components []tf.Output, optional ...QueueEnqueueV2Attr) (o *tf.Operation) { 7060 if scope.Err() != nil { 7061 return 7062 } 7063 attrs := map[string]interface{}{} 7064 for _, a := range optional { 7065 a(attrs) 7066 } 7067 opspec := tf.OpSpec{ 7068 Type: "QueueEnqueueV2", 7069 Input: []tf.Input{ 7070 handle, tf.OutputList(components), 7071 }, 7072 Attrs: attrs, 7073 } 7074 return scope.AddOperation(opspec) 7075 } 7076 7077 // MfccAttr is an optional argument to Mfcc. 7078 type MfccAttr func(optionalAttr) 7079 7080 // MfccUpperFrequencyLimit sets the optional upper_frequency_limit attribute to value. 7081 // 7082 // value: The highest frequency to use when calculating the 7083 // ceptstrum. 7084 // If not specified, defaults to 4000 7085 func MfccUpperFrequencyLimit(value float32) MfccAttr { 7086 return func(m optionalAttr) { 7087 m["upper_frequency_limit"] = value 7088 } 7089 } 7090 7091 // MfccLowerFrequencyLimit sets the optional lower_frequency_limit attribute to value. 7092 // 7093 // value: The lowest frequency to use when calculating the 7094 // ceptstrum. 7095 // If not specified, defaults to 20 7096 func MfccLowerFrequencyLimit(value float32) MfccAttr { 7097 return func(m optionalAttr) { 7098 m["lower_frequency_limit"] = value 7099 } 7100 } 7101 7102 // MfccFilterbankChannelCount sets the optional filterbank_channel_count attribute to value. 7103 // 7104 // value: Resolution of the Mel bank used internally. 7105 // If not specified, defaults to 40 7106 func MfccFilterbankChannelCount(value int64) MfccAttr { 7107 return func(m optionalAttr) { 7108 m["filterbank_channel_count"] = value 7109 } 7110 } 7111 7112 // MfccDctCoefficientCount sets the optional dct_coefficient_count attribute to value. 7113 // 7114 // value: How many output channels to produce per time slice. 7115 // If not specified, defaults to 13 7116 func MfccDctCoefficientCount(value int64) MfccAttr { 7117 return func(m optionalAttr) { 7118 m["dct_coefficient_count"] = value 7119 } 7120 } 7121 7122 // Transforms a spectrogram into a form that's useful for speech recognition. 7123 // 7124 // Mel Frequency Cepstral Coefficients are a way of representing audio data that's 7125 // been effective as an input feature for machine learning. They are created by 7126 // taking the spectrum of a spectrogram (a 'cepstrum'), and discarding some of the 7127 // higher frequencies that are less significant to the human ear. They have a long 7128 // history in the speech recognition world, and https://en.wikipedia.org/wiki/Mel-frequency_cepstrum 7129 // is a good resource to learn more. 7130 // 7131 // Arguments: 7132 // spectrogram: Typically produced by the Spectrogram op, with magnitude_squared 7133 // set to true. 7134 // sample_rate: How many samples per second the source audio used. 7135 func Mfcc(scope *Scope, spectrogram tf.Output, sample_rate tf.Output, optional ...MfccAttr) (output tf.Output) { 7136 if scope.Err() != nil { 7137 return 7138 } 7139 attrs := map[string]interface{}{} 7140 for _, a := range optional { 7141 a(attrs) 7142 } 7143 opspec := tf.OpSpec{ 7144 Type: "Mfcc", 7145 Input: []tf.Input{ 7146 spectrogram, sample_rate, 7147 }, 7148 Attrs: attrs, 7149 } 7150 op := scope.AddOperation(opspec) 7151 return op.Output(0) 7152 } 7153 7154 // PaddingFIFOQueueV2Attr is an optional argument to PaddingFIFOQueueV2. 7155 type PaddingFIFOQueueV2Attr func(optionalAttr) 7156 7157 // PaddingFIFOQueueV2Shapes sets the optional shapes attribute to value. 7158 // 7159 // value: The shape of each component in a value. The length of this attr must 7160 // be either 0 or the same as the length of component_types. 7161 // Shapes of fixed rank but variable size are allowed by setting 7162 // any shape dimension to -1. In this case, the inputs' shape may vary along 7163 // the given dimension, and DequeueMany will pad the given dimension with 7164 // zeros up to the maximum shape of all elements in the given batch. 7165 // If the length of this attr is 0, different queue elements may have 7166 // different ranks and shapes, but only one element may be dequeued at a time. 7167 // If not specified, defaults to <> 7168 // 7169 // REQUIRES: len(value) >= 0 7170 func PaddingFIFOQueueV2Shapes(value []tf.Shape) PaddingFIFOQueueV2Attr { 7171 return func(m optionalAttr) { 7172 m["shapes"] = value 7173 } 7174 } 7175 7176 // PaddingFIFOQueueV2Capacity sets the optional capacity attribute to value. 7177 // 7178 // value: The upper bound on the number of elements in this queue. 7179 // Negative numbers mean no limit. 7180 // If not specified, defaults to -1 7181 func PaddingFIFOQueueV2Capacity(value int64) PaddingFIFOQueueV2Attr { 7182 return func(m optionalAttr) { 7183 m["capacity"] = value 7184 } 7185 } 7186 7187 // PaddingFIFOQueueV2Container sets the optional container attribute to value. 7188 // 7189 // value: If non-empty, this queue is placed in the given container. 7190 // Otherwise, a default container is used. 7191 // If not specified, defaults to "" 7192 func PaddingFIFOQueueV2Container(value string) PaddingFIFOQueueV2Attr { 7193 return func(m optionalAttr) { 7194 m["container"] = value 7195 } 7196 } 7197 7198 // PaddingFIFOQueueV2SharedName sets the optional shared_name attribute to value. 7199 // 7200 // value: If non-empty, this queue will be shared under the given name 7201 // across multiple sessions. 7202 // If not specified, defaults to "" 7203 func PaddingFIFOQueueV2SharedName(value string) PaddingFIFOQueueV2Attr { 7204 return func(m optionalAttr) { 7205 m["shared_name"] = value 7206 } 7207 } 7208 7209 // A queue that produces elements in first-in first-out order. 7210 // 7211 // Variable-size shapes are allowed by setting the corresponding shape dimensions 7212 // to 0 in the shape attr. In this case DequeueMany will pad up to the maximum 7213 // size of any given element in the minibatch. See below for details. 7214 // 7215 // Arguments: 7216 // component_types: The type of each component in a value. 7217 // 7218 // Returns The handle to the queue. 7219 func PaddingFIFOQueueV2(scope *Scope, component_types []tf.DataType, optional ...PaddingFIFOQueueV2Attr) (handle tf.Output) { 7220 if scope.Err() != nil { 7221 return 7222 } 7223 attrs := map[string]interface{}{"component_types": component_types} 7224 for _, a := range optional { 7225 a(attrs) 7226 } 7227 opspec := tf.OpSpec{ 7228 Type: "PaddingFIFOQueueV2", 7229 7230 Attrs: attrs, 7231 } 7232 op := scope.AddOperation(opspec) 7233 return op.Output(0) 7234 } 7235 7236 // Interleave the values from the `data` tensors into a single tensor. 7237 // 7238 // Builds a merged tensor such that 7239 // 7240 // ```python 7241 // merged[indices[m][i, ..., j], ...] = data[m][i, ..., j, ...] 7242 // ``` 7243 // 7244 // For example, if each `indices[m]` is scalar or vector, we have 7245 // 7246 // ```python 7247 // # Scalar indices: 7248 // merged[indices[m], ...] = data[m][...] 7249 // 7250 // # Vector indices: 7251 // merged[indices[m][i], ...] = data[m][i, ...] 7252 // ``` 7253 // 7254 // Each `data[i].shape` must start with the corresponding `indices[i].shape`, 7255 // and the rest of `data[i].shape` must be constant w.r.t. `i`. That is, we 7256 // must have `data[i].shape = indices[i].shape + constant`. In terms of this 7257 // `constant`, the output shape is 7258 // 7259 // merged.shape = [max(indices)] + constant 7260 // 7261 // Values may be merged in parallel, so if an index appears in both `indices[m][i]` 7262 // and `indices[n][j]`, the result may be invalid. This differs from the normal 7263 // DynamicStitch operator that defines the behavior in that case. 7264 // 7265 // For example: 7266 // 7267 // ```python 7268 // indices[0] = 6 7269 // indices[1] = [4, 1] 7270 // indices[2] = [[5, 2], [0, 3]] 7271 // data[0] = [61, 62] 7272 // data[1] = [[41, 42], [11, 12]] 7273 // data[2] = [[[51, 52], [21, 22]], [[1, 2], [31, 32]]] 7274 // merged = [[1, 2], [11, 12], [21, 22], [31, 32], [41, 42], 7275 // [51, 52], [61, 62]] 7276 // ``` 7277 // 7278 // This method can be used to merge partitions created by `dynamic_partition` 7279 // as illustrated on the following example: 7280 // 7281 // ```python 7282 // # Apply function (increments x_i) on elements for which a certain condition 7283 // # apply (x_i != -1 in this example). 7284 // x=tf.constant([0.1, -1., 5.2, 4.3, -1., 7.4]) 7285 // condition_mask=tf.not_equal(x,tf.constant(-1.)) 7286 // partitioned_data = tf.dynamic_partition( 7287 // x, tf.cast(condition_mask, tf.int32) , 2) 7288 // partitioned_data[1] = partitioned_data[1] + 1.0 7289 // condition_indices = tf.dynamic_partition( 7290 // tf.range(tf.shape(x)[0]), tf.cast(condition_mask, tf.int32) , 2) 7291 // x = tf.dynamic_stitch(condition_indices, partitioned_data) 7292 // # Here x=[1.1, -1., 6.2, 5.3, -1, 8.4], the -1. values remain 7293 // # unchanged. 7294 // ``` 7295 // 7296 // <div style="width:70%; margin:auto; margin-bottom:10px; margin-top:20px;"> 7297 // <img style="width:100%" src="https://www.tensorflow.org/images/DynamicStitch.png" alt> 7298 // </div> 7299 func ParallelDynamicStitch(scope *Scope, indices []tf.Output, data []tf.Output) (merged tf.Output) { 7300 if scope.Err() != nil { 7301 return 7302 } 7303 opspec := tf.OpSpec{ 7304 Type: "ParallelDynamicStitch", 7305 Input: []tf.Input{ 7306 tf.OutputList(indices), tf.OutputList(data), 7307 }, 7308 } 7309 op := scope.AddOperation(opspec) 7310 return op.Output(0) 7311 } 7312 7313 // Partitions `data` into `num_partitions` tensors using indices from `partitions`. 7314 // 7315 // For each index tuple `js` of size `partitions.ndim`, the slice `data[js, ...]` 7316 // becomes part of `outputs[partitions[js]]`. The slices with `partitions[js] = i` 7317 // are placed in `outputs[i]` in lexicographic order of `js`, and the first 7318 // dimension of `outputs[i]` is the number of entries in `partitions` equal to `i`. 7319 // In detail, 7320 // 7321 // ```python 7322 // outputs[i].shape = [sum(partitions == i)] + data.shape[partitions.ndim:] 7323 // 7324 // outputs[i] = pack([data[js, ...] for js if partitions[js] == i]) 7325 // ``` 7326 // 7327 // `data.shape` must start with `partitions.shape`. 7328 // 7329 // For example: 7330 // 7331 // ```python 7332 // # Scalar partitions. 7333 // partitions = 1 7334 // num_partitions = 2 7335 // data = [10, 20] 7336 // outputs[0] = [] # Empty with shape [0, 2] 7337 // outputs[1] = [[10, 20]] 7338 // 7339 // # Vector partitions. 7340 // partitions = [0, 0, 1, 1, 0] 7341 // num_partitions = 2 7342 // data = [10, 20, 30, 40, 50] 7343 // outputs[0] = [10, 20, 50] 7344 // outputs[1] = [30, 40] 7345 // ``` 7346 // 7347 // See `dynamic_stitch` for an example on how to merge partitions back. 7348 // 7349 // <div style="width:70%; margin:auto; margin-bottom:10px; margin-top:20px;"> 7350 // <img style="width:100%" src="https://www.tensorflow.org/images/DynamicPartition.png" alt> 7351 // </div> 7352 // 7353 // Arguments: 7354 // 7355 // partitions: Any shape. Indices in the range `[0, num_partitions)`. 7356 // num_partitions: The number of partitions to output. 7357 func DynamicPartition(scope *Scope, data tf.Output, partitions tf.Output, num_partitions int64) (outputs []tf.Output) { 7358 if scope.Err() != nil { 7359 return 7360 } 7361 attrs := map[string]interface{}{"num_partitions": num_partitions} 7362 opspec := tf.OpSpec{ 7363 Type: "DynamicPartition", 7364 Input: []tf.Input{ 7365 data, partitions, 7366 }, 7367 Attrs: attrs, 7368 } 7369 op := scope.AddOperation(opspec) 7370 if scope.Err() != nil { 7371 return 7372 } 7373 var idx int 7374 var err error 7375 if outputs, idx, err = makeOutputList(op, idx, "outputs"); err != nil { 7376 scope.UpdateErr("DynamicPartition", err) 7377 return 7378 } 7379 return outputs 7380 } 7381 7382 // Produces a string handle for the given MultiDeviceIterator. 7383 // 7384 // Arguments: 7385 // multi_device_iterator: A MultiDeviceIterator resource. 7386 // 7387 // Returns A string representing the resource. 7388 func MultiDeviceIteratorToStringHandle(scope *Scope, multi_device_iterator tf.Output) (string_handle tf.Output) { 7389 if scope.Err() != nil { 7390 return 7391 } 7392 opspec := tf.OpSpec{ 7393 Type: "MultiDeviceIteratorToStringHandle", 7394 Input: []tf.Input{ 7395 multi_device_iterator, 7396 }, 7397 } 7398 op := scope.AddOperation(opspec) 7399 return op.Output(0) 7400 } 7401 7402 // Checks whether a tree has been initialized. 7403 // 7404 // Arguments: 7405 // tree_handle: Handle to the tree. 7406 // 7407 // Returns Whether the tree is initialized. 7408 func TensorForestTreeIsInitializedOp(scope *Scope, tree_handle tf.Output) (is_initialized tf.Output) { 7409 if scope.Err() != nil { 7410 return 7411 } 7412 opspec := tf.OpSpec{ 7413 Type: "TensorForestTreeIsInitializedOp", 7414 Input: []tf.Input{ 7415 tree_handle, 7416 }, 7417 } 7418 op := scope.AddOperation(opspec) 7419 return op.Output(0) 7420 } 7421 7422 // Gets next element for the provided shard number. 7423 // 7424 // Arguments: 7425 // multi_device_iterator: A MultiDeviceIterator resource. 7426 // shard_num: Integer representing which shard to fetch data for. 7427 // incarnation_id: Which incarnation of the MultiDeviceIterator is running. 7428 // output_types: The type list for the return values. 7429 // output_shapes: The list of shapes being produced. 7430 // 7431 // Returns Result of the get_next on the dataset. 7432 func MultiDeviceIteratorGetNextFromShard(scope *Scope, multi_device_iterator tf.Output, shard_num tf.Output, incarnation_id tf.Output, output_types []tf.DataType, output_shapes []tf.Shape) (components []tf.Output) { 7433 if scope.Err() != nil { 7434 return 7435 } 7436 attrs := map[string]interface{}{"output_types": output_types, "output_shapes": output_shapes} 7437 opspec := tf.OpSpec{ 7438 Type: "MultiDeviceIteratorGetNextFromShard", 7439 Input: []tf.Input{ 7440 multi_device_iterator, shard_num, incarnation_id, 7441 }, 7442 Attrs: attrs, 7443 } 7444 op := scope.AddOperation(opspec) 7445 if scope.Err() != nil { 7446 return 7447 } 7448 var idx int 7449 var err error 7450 if components, idx, err = makeOutputList(op, idx, "components"); err != nil { 7451 scope.UpdateErr("MultiDeviceIteratorGetNextFromShard", err) 7452 return 7453 } 7454 return components 7455 } 7456 7457 // Initializes the multi device iterator with the given dataset. 7458 // 7459 // Arguments: 7460 // dataset: Dataset to be iterated upon. 7461 // multi_device_iterator: A MultiDeviceIteratorResource. 7462 // max_buffer_size: The maximum size of the host side per device buffer to keep. 7463 // 7464 // Returns An int64 indicating which incarnation of the MultiDeviceIterator 7465 // is running. 7466 func MultiDeviceIteratorInit(scope *Scope, dataset tf.Output, multi_device_iterator tf.Output, max_buffer_size tf.Output) (incarnation_id tf.Output) { 7467 if scope.Err() != nil { 7468 return 7469 } 7470 opspec := tf.OpSpec{ 7471 Type: "MultiDeviceIteratorInit", 7472 Input: []tf.Input{ 7473 dataset, multi_device_iterator, max_buffer_size, 7474 }, 7475 } 7476 op := scope.AddOperation(opspec) 7477 return op.Output(0) 7478 } 7479 7480 // Copy a tensor setting everything outside a central band in each innermost matrix 7481 // 7482 // to zero. 7483 // 7484 // The `band` part is computed as follows: 7485 // Assume `input` has `k` dimensions `[I, J, K, ..., M, N]`, then the output is a 7486 // tensor with the same shape where 7487 // 7488 // `band[i, j, k, ..., m, n] = in_band(m, n) * input[i, j, k, ..., m, n]`. 7489 // 7490 // The indicator function 7491 // 7492 // `in_band(m, n) = (num_lower < 0 || (m-n) <= num_lower)) && 7493 // (num_upper < 0 || (n-m) <= num_upper)`. 7494 // 7495 // For example: 7496 // 7497 // ``` 7498 // # if 'input' is [[ 0, 1, 2, 3] 7499 // [-1, 0, 1, 2] 7500 // [-2, -1, 0, 1] 7501 // [-3, -2, -1, 0]], 7502 // 7503 // tf.matrix_band_part(input, 1, -1) ==> [[ 0, 1, 2, 3] 7504 // [-1, 0, 1, 2] 7505 // [ 0, -1, 0, 1] 7506 // [ 0, 0, -1, 0]], 7507 // 7508 // tf.matrix_band_part(input, 2, 1) ==> [[ 0, 1, 0, 0] 7509 // [-1, 0, 1, 0] 7510 // [-2, -1, 0, 1] 7511 // [ 0, -2, -1, 0]] 7512 // ``` 7513 // 7514 // Useful special cases: 7515 // 7516 // ``` 7517 // tf.matrix_band_part(input, 0, -1) ==> Upper triangular part. 7518 // tf.matrix_band_part(input, -1, 0) ==> Lower triangular part. 7519 // tf.matrix_band_part(input, 0, 0) ==> Diagonal. 7520 // ``` 7521 // 7522 // Arguments: 7523 // input: Rank `k` tensor. 7524 // num_lower: 0-D tensor. Number of subdiagonals to keep. If negative, keep entire 7525 // lower triangle. 7526 // num_upper: 0-D tensor. Number of superdiagonals to keep. If negative, keep 7527 // entire upper triangle. 7528 // 7529 // Returns Rank `k` tensor of the same shape as input. The extracted banded tensor. 7530 func MatrixBandPart(scope *Scope, input tf.Output, num_lower tf.Output, num_upper tf.Output) (band tf.Output) { 7531 if scope.Err() != nil { 7532 return 7533 } 7534 opspec := tf.OpSpec{ 7535 Type: "MatrixBandPart", 7536 Input: []tf.Input{ 7537 input, num_lower, num_upper, 7538 }, 7539 } 7540 op := scope.AddOperation(opspec) 7541 return op.Output(0) 7542 } 7543 7544 // Gets the next output from the given iterator as an Optional variant. 7545 func IteratorGetNextAsOptional(scope *Scope, iterator tf.Output, output_types []tf.DataType, output_shapes []tf.Shape) (optional tf.Output) { 7546 if scope.Err() != nil { 7547 return 7548 } 7549 attrs := map[string]interface{}{"output_types": output_types, "output_shapes": output_shapes} 7550 opspec := tf.OpSpec{ 7551 Type: "IteratorGetNextAsOptional", 7552 Input: []tf.Input{ 7553 iterator, 7554 }, 7555 Attrs: attrs, 7556 } 7557 op := scope.AddOperation(opspec) 7558 return op.Output(0) 7559 } 7560 7561 // Returns the value stored in an Optional variant or raises an error if none exists. 7562 func OptionalGetValue(scope *Scope, optional tf.Output, output_types []tf.DataType, output_shapes []tf.Shape) (components []tf.Output) { 7563 if scope.Err() != nil { 7564 return 7565 } 7566 attrs := map[string]interface{}{"output_types": output_types, "output_shapes": output_shapes} 7567 opspec := tf.OpSpec{ 7568 Type: "OptionalGetValue", 7569 Input: []tf.Input{ 7570 optional, 7571 }, 7572 Attrs: attrs, 7573 } 7574 op := scope.AddOperation(opspec) 7575 if scope.Err() != nil { 7576 return 7577 } 7578 var idx int 7579 var err error 7580 if components, idx, err = makeOutputList(op, idx, "components"); err != nil { 7581 scope.UpdateErr("OptionalGetValue", err) 7582 return 7583 } 7584 return components 7585 } 7586 7587 // Returns true if and only if the given Optional variant has a value. 7588 func OptionalHasValue(scope *Scope, optional tf.Output) (has_value tf.Output) { 7589 if scope.Err() != nil { 7590 return 7591 } 7592 opspec := tf.OpSpec{ 7593 Type: "OptionalHasValue", 7594 Input: []tf.Input{ 7595 optional, 7596 }, 7597 } 7598 op := scope.AddOperation(opspec) 7599 return op.Output(0) 7600 } 7601 7602 // Deserializes a proto into the tree handle 7603 // 7604 // Arguments: 7605 // tree_handle: Handle to the tree resource to be restored. 7606 // tree_config: Serialied proto string of the boosted_trees.Tree proto. 7607 // 7608 // Returns the created operation. 7609 func TensorForestTreeDeserialize(scope *Scope, tree_handle tf.Output, tree_config tf.Output) (o *tf.Operation) { 7610 if scope.Err() != nil { 7611 return 7612 } 7613 opspec := tf.OpSpec{ 7614 Type: "TensorForestTreeDeserialize", 7615 Input: []tf.Input{ 7616 tree_handle, tree_config, 7617 }, 7618 } 7619 return scope.AddOperation(opspec) 7620 } 7621 7622 // Constructs an Optional variant from a tuple of tensors. 7623 func OptionalFromValue(scope *Scope, components []tf.Output) (optional tf.Output) { 7624 if scope.Err() != nil { 7625 return 7626 } 7627 opspec := tf.OpSpec{ 7628 Type: "OptionalFromValue", 7629 Input: []tf.Input{ 7630 tf.OutputList(components), 7631 }, 7632 } 7633 op := scope.AddOperation(opspec) 7634 return op.Output(0) 7635 } 7636 7637 // Creates a dataset by applying optimizations to `input_dataset`. 7638 // 7639 // Creates a dataset by applying optimizations to `input_dataset`. 7640 // 7641 // Arguments: 7642 // input_dataset: A variant tensor representing the input dataset. 7643 // optimizations: A `tf.string` vector `tf.Tensor` identifying optimizations to use. 7644 // 7645 // 7646 func OptimizeDataset(scope *Scope, input_dataset tf.Output, optimizations tf.Output, output_types []tf.DataType, output_shapes []tf.Shape) (handle tf.Output) { 7647 if scope.Err() != nil { 7648 return 7649 } 7650 attrs := map[string]interface{}{"output_types": output_types, "output_shapes": output_shapes} 7651 opspec := tf.OpSpec{ 7652 Type: "OptimizeDataset", 7653 Input: []tf.Input{ 7654 input_dataset, optimizations, 7655 }, 7656 Attrs: attrs, 7657 } 7658 op := scope.AddOperation(opspec) 7659 return op.Output(0) 7660 } 7661 7662 // Converts the given variant tensor to an iterator and stores it in the given resource. 7663 // 7664 // Arguments: 7665 // resource_handle: A handle to an iterator resource. 7666 // serialized: A variant tensor storing the state of the iterator contained in the 7667 // resource. 7668 // 7669 // Returns the created operation. 7670 func DeserializeIterator(scope *Scope, resource_handle tf.Output, serialized tf.Output) (o *tf.Operation) { 7671 if scope.Err() != nil { 7672 return 7673 } 7674 opspec := tf.OpSpec{ 7675 Type: "DeserializeIterator", 7676 Input: []tf.Input{ 7677 resource_handle, serialized, 7678 }, 7679 } 7680 return scope.AddOperation(opspec) 7681 } 7682 7683 // Gather slices from `params` axis `axis` according to `indices`. 7684 // 7685 // `indices` must be an integer tensor of any dimension (usually 0-D or 1-D). 7686 // Produces an output tensor with shape `params.shape[:axis] + indices.shape + 7687 // params.shape[axis + 1:]` where: 7688 // 7689 // ```python 7690 // # Scalar indices (output is rank(params) - 1). 7691 // output[a_0, ..., a_n, b_0, ..., b_n] = 7692 // params[a_0, ..., a_n, indices, b_0, ..., b_n] 7693 // 7694 // # Vector indices (output is rank(params)). 7695 // output[a_0, ..., a_n, i, b_0, ..., b_n] = 7696 // params[a_0, ..., a_n, indices[i], b_0, ..., b_n] 7697 // 7698 // # Higher rank indices (output is rank(params) + rank(indices) - 1). 7699 // output[a_0, ..., a_n, i, ..., j, b_0, ... b_n] = 7700 // params[a_0, ..., a_n, indices[i, ..., j], b_0, ..., b_n] 7701 // ``` 7702 // 7703 // <div style="width:70%; margin:auto; margin-bottom:10px; margin-top:20px;"> 7704 // <img style="width:100%" src="https://www.tensorflow.org/images/Gather.png" alt> 7705 // </div> 7706 // 7707 // Note that on CPU, if an out of bound index is found, an error is returned. 7708 // On GPU, if an out of bound index is found, a 0 is stored in the 7709 // corresponding output value. 7710 // 7711 // See also `tf.batch_gather` and `tf.gather_nd`. 7712 // 7713 // Arguments: 7714 // params: The tensor from which to gather values. Must be at least rank 7715 // `axis + 1`. 7716 // indices: Index tensor. Must be in range `[0, params.shape[axis])`. 7717 // axis: The axis in `params` to gather `indices` from. Defaults to the first 7718 // dimension. Supports negative indexes. 7719 // 7720 // Returns Values from `params` gathered from indices given by `indices`, with 7721 // shape `params.shape[:axis] + indices.shape + params.shape[axis + 1:]`. 7722 func GatherV2(scope *Scope, params tf.Output, indices tf.Output, axis tf.Output) (output tf.Output) { 7723 if scope.Err() != nil { 7724 return 7725 } 7726 opspec := tf.OpSpec{ 7727 Type: "GatherV2", 7728 Input: []tf.Input{ 7729 params, indices, axis, 7730 }, 7731 } 7732 op := scope.AddOperation(opspec) 7733 return op.Output(0) 7734 } 7735 7736 // Converts the given `resource_handle` representing an iterator to a variant tensor. 7737 // 7738 // Arguments: 7739 // resource_handle: A handle to an iterator resource. 7740 // 7741 // Returns A variant tensor storing the state of the iterator contained in the 7742 // resource. 7743 func SerializeIterator(scope *Scope, resource_handle tf.Output) (serialized tf.Output) { 7744 if scope.Err() != nil { 7745 return 7746 } 7747 opspec := tf.OpSpec{ 7748 Type: "SerializeIterator", 7749 Input: []tf.Input{ 7750 resource_handle, 7751 }, 7752 } 7753 op := scope.AddOperation(opspec) 7754 return op.Output(0) 7755 } 7756 7757 // Outputs a tensor containing the reduction across all input tensors. 7758 // 7759 // Outputs a tensor containing the reduction across all input tensors passed to ops 7760 // within the same `shared_name. 7761 // 7762 // The graph should be constructed so if one op runs with shared_name value `c`, 7763 // then `num_devices` ops will run with shared_name value `c`. Failure to do so 7764 // will cause the graph execution to fail to complete. 7765 // 7766 // input: the input to the reduction 7767 // data: the value of the reduction across all `num_devices` devices. 7768 // reduction: the reduction operation to perform. 7769 // num_devices: The number of devices participating in this reduction. 7770 // shared_name: Identifier that shared between ops of the same reduction. 7771 func NcclAllReduce(scope *Scope, input tf.Output, reduction string, num_devices int64, shared_name string) (data tf.Output) { 7772 if scope.Err() != nil { 7773 return 7774 } 7775 attrs := map[string]interface{}{"reduction": reduction, "num_devices": num_devices, "shared_name": shared_name} 7776 opspec := tf.OpSpec{ 7777 Type: "NcclAllReduce", 7778 Input: []tf.Input{ 7779 input, 7780 }, 7781 Attrs: attrs, 7782 } 7783 op := scope.AddOperation(opspec) 7784 return op.Output(0) 7785 } 7786 7787 // RegexReplaceAttr is an optional argument to RegexReplace. 7788 type RegexReplaceAttr func(optionalAttr) 7789 7790 // RegexReplaceReplaceGlobal sets the optional replace_global attribute to value. 7791 // 7792 // value: If True, the replacement is global (that is, all matches of the `pattern` regular 7793 // expression in each input string are rewritten), otherwise the `rewrite` 7794 // substitution is only made for the first `pattern` match. 7795 // If not specified, defaults to true 7796 func RegexReplaceReplaceGlobal(value bool) RegexReplaceAttr { 7797 return func(m optionalAttr) { 7798 m["replace_global"] = value 7799 } 7800 } 7801 7802 // Replaces matches of the `pattern` regular expression in `input` with the 7803 // replacement string provided in `rewrite`. 7804 // 7805 // It follows the re2 syntax (https://github.com/google/re2/wiki/Syntax) 7806 // 7807 // Arguments: 7808 // input: The text to be processed. 7809 // pattern: The regular expression to be matched in the `input` strings. 7810 // rewrite: The rewrite string to be substituted for the `pattern` expression where it is 7811 // matched in the `input` strings. 7812 // 7813 // Returns The text after applying pattern match and rewrite substitution. 7814 func RegexReplace(scope *Scope, input tf.Output, pattern tf.Output, rewrite tf.Output, optional ...RegexReplaceAttr) (output tf.Output) { 7815 if scope.Err() != nil { 7816 return 7817 } 7818 attrs := map[string]interface{}{} 7819 for _, a := range optional { 7820 a(attrs) 7821 } 7822 opspec := tf.OpSpec{ 7823 Type: "RegexReplace", 7824 Input: []tf.Input{ 7825 input, pattern, rewrite, 7826 }, 7827 Attrs: attrs, 7828 } 7829 op := scope.AddOperation(opspec) 7830 return op.Output(0) 7831 } 7832 7833 // Quantized Batch normalization. 7834 // 7835 // This op is deprecated and will be removed in the future. Prefer 7836 // `tf.nn.batch_normalization`. 7837 // 7838 // Arguments: 7839 // t: A 4D input Tensor. 7840 // t_min: The value represented by the lowest quantized input. 7841 // t_max: The value represented by the highest quantized input. 7842 // m: A 1D mean Tensor with size matching the last dimension of t. 7843 // This is the first output from tf.nn.moments, 7844 // or a saved moving average thereof. 7845 // m_min: The value represented by the lowest quantized mean. 7846 // m_max: The value represented by the highest quantized mean. 7847 // v: A 1D variance Tensor with size matching the last dimension of t. 7848 // This is the second output from tf.nn.moments, 7849 // or a saved moving average thereof. 7850 // v_min: The value represented by the lowest quantized variance. 7851 // v_max: The value represented by the highest quantized variance. 7852 // beta: A 1D beta Tensor with size matching the last dimension of t. 7853 // An offset to be added to the normalized tensor. 7854 // beta_min: The value represented by the lowest quantized offset. 7855 // beta_max: The value represented by the highest quantized offset. 7856 // gamma: A 1D gamma Tensor with size matching the last dimension of t. 7857 // If "scale_after_normalization" is true, this tensor will be multiplied 7858 // with the normalized tensor. 7859 // gamma_min: The value represented by the lowest quantized gamma. 7860 // gamma_max: The value represented by the highest quantized gamma. 7861 // 7862 // variance_epsilon: A small float number to avoid dividing by 0. 7863 // scale_after_normalization: A bool indicating whether the resulted tensor 7864 // needs to be multiplied with gamma. 7865 func QuantizedBatchNormWithGlobalNormalization(scope *Scope, t tf.Output, t_min tf.Output, t_max tf.Output, m tf.Output, m_min tf.Output, m_max tf.Output, v tf.Output, v_min tf.Output, v_max tf.Output, beta tf.Output, beta_min tf.Output, beta_max tf.Output, gamma tf.Output, gamma_min tf.Output, gamma_max tf.Output, out_type tf.DataType, variance_epsilon float32, scale_after_normalization bool) (result tf.Output, result_min tf.Output, result_max tf.Output) { 7866 if scope.Err() != nil { 7867 return 7868 } 7869 attrs := map[string]interface{}{"out_type": out_type, "variance_epsilon": variance_epsilon, "scale_after_normalization": scale_after_normalization} 7870 opspec := tf.OpSpec{ 7871 Type: "QuantizedBatchNormWithGlobalNormalization", 7872 Input: []tf.Input{ 7873 t, t_min, t_max, m, m_min, m_max, v, v_min, v_max, beta, beta_min, beta_max, gamma, gamma_min, gamma_max, 7874 }, 7875 Attrs: attrs, 7876 } 7877 op := scope.AddOperation(opspec) 7878 return op.Output(0), op.Output(1), op.Output(2) 7879 } 7880 7881 // Adds Tensor 'bias' to Tensor 'input' for Quantized types. 7882 // 7883 // Broadcasts the values of bias on dimensions 0..N-2 of 'input'. 7884 // 7885 // Arguments: 7886 // 7887 // bias: A 1D bias Tensor with size matching the last dimension of 'input'. 7888 // min_input: The float value that the lowest quantized input value represents. 7889 // max_input: The float value that the highest quantized input value represents. 7890 // min_bias: The float value that the lowest quantized bias value represents. 7891 // max_bias: The float value that the highest quantized bias value represents. 7892 // 7893 // 7894 // Returns The float value that the lowest quantized output value represents.The float value that the highest quantized output value represents. 7895 func QuantizedBiasAdd(scope *Scope, input tf.Output, bias tf.Output, min_input tf.Output, max_input tf.Output, min_bias tf.Output, max_bias tf.Output, out_type tf.DataType) (output tf.Output, min_out tf.Output, max_out tf.Output) { 7896 if scope.Err() != nil { 7897 return 7898 } 7899 attrs := map[string]interface{}{"out_type": out_type} 7900 opspec := tf.OpSpec{ 7901 Type: "QuantizedBiasAdd", 7902 Input: []tf.Input{ 7903 input, bias, min_input, max_input, min_bias, max_bias, 7904 }, 7905 Attrs: attrs, 7906 } 7907 op := scope.AddOperation(opspec) 7908 return op.Output(0), op.Output(1), op.Output(2) 7909 } 7910 7911 // Produces the average pool of the input tensor for quantized types. 7912 // 7913 // Arguments: 7914 // input: 4-D with shape `[batch, height, width, channels]`. 7915 // min_input: The float value that the lowest quantized input value represents. 7916 // max_input: The float value that the highest quantized input value represents. 7917 // ksize: The size of the window for each dimension of the input tensor. 7918 // The length must be 4 to match the number of dimensions of the input. 7919 // strides: The stride of the sliding window for each dimension of the input 7920 // tensor. The length must be 4 to match the number of dimensions of the input. 7921 // padding: The type of padding algorithm to use. 7922 // 7923 // Returns The float value that the lowest quantized output value represents.The float value that the highest quantized output value represents. 7924 func QuantizedAvgPool(scope *Scope, input tf.Output, min_input tf.Output, max_input tf.Output, ksize []int64, strides []int64, padding string) (output tf.Output, min_output tf.Output, max_output tf.Output) { 7925 if scope.Err() != nil { 7926 return 7927 } 7928 attrs := map[string]interface{}{"ksize": ksize, "strides": strides, "padding": padding} 7929 opspec := tf.OpSpec{ 7930 Type: "QuantizedAvgPool", 7931 Input: []tf.Input{ 7932 input, min_input, max_input, 7933 }, 7934 Attrs: attrs, 7935 } 7936 op := scope.AddOperation(opspec) 7937 return op.Output(0), op.Output(1), op.Output(2) 7938 } 7939 7940 // Extract `patches` from `input` and put them in the "depth" output dimension. 3D extension of `extract_image_patches`. 7941 // 7942 // Arguments: 7943 // input: 5-D Tensor with shape `[batch, in_planes, in_rows, in_cols, depth]`. 7944 // ksizes: The size of the sliding window for each dimension of `input`. 7945 // strides: 1-D of length 5. How far the centers of two consecutive patches are in 7946 // `input`. Must be: `[1, stride_planes, stride_rows, stride_cols, 1]`. 7947 // padding: The type of padding algorithm to use. 7948 // 7949 // We specify the size-related attributes as: 7950 // 7951 // ```python 7952 // ksizes = [1, ksize_planes, ksize_rows, ksize_cols, 1] 7953 // strides = [1, stride_planes, strides_rows, strides_cols, 1] 7954 // ``` 7955 // 7956 // Returns 5-D Tensor with shape `[batch, out_planes, out_rows, out_cols, 7957 // ksize_planes * ksize_rows * ksize_cols * depth]` containing patches 7958 // with size `ksize_planes x ksize_rows x ksize_cols x depth` vectorized 7959 // in the "depth" dimension. Note `out_planes`, `out_rows` and `out_cols` 7960 // are the dimensions of the output patches. 7961 func ExtractVolumePatches(scope *Scope, input tf.Output, ksizes []int64, strides []int64, padding string) (patches tf.Output) { 7962 if scope.Err() != nil { 7963 return 7964 } 7965 attrs := map[string]interface{}{"ksizes": ksizes, "strides": strides, "padding": padding} 7966 opspec := tf.OpSpec{ 7967 Type: "ExtractVolumePatches", 7968 Input: []tf.Input{ 7969 input, 7970 }, 7971 Attrs: attrs, 7972 } 7973 op := scope.AddOperation(opspec) 7974 return op.Output(0) 7975 } 7976 7977 // FractionalAvgPoolAttr is an optional argument to FractionalAvgPool. 7978 type FractionalAvgPoolAttr func(optionalAttr) 7979 7980 // FractionalAvgPoolPseudoRandom sets the optional pseudo_random attribute to value. 7981 // 7982 // value: When set to True, generates the pooling sequence in a 7983 // pseudorandom fashion, otherwise, in a random fashion. Check paper [Benjamin 7984 // Graham, Fractional Max-Pooling](http://arxiv.org/abs/1412.6071) for 7985 // difference between pseudorandom and random. 7986 // If not specified, defaults to false 7987 func FractionalAvgPoolPseudoRandom(value bool) FractionalAvgPoolAttr { 7988 return func(m optionalAttr) { 7989 m["pseudo_random"] = value 7990 } 7991 } 7992 7993 // FractionalAvgPoolOverlapping sets the optional overlapping attribute to value. 7994 // 7995 // value: When set to True, it means when pooling, the values at the boundary 7996 // of adjacent pooling cells are used by both cells. For example: 7997 // 7998 // `index 0 1 2 3 4` 7999 // 8000 // `value 20 5 16 3 7` 8001 // 8002 // If the pooling sequence is [0, 2, 4], then 16, at index 2 will be used twice. 8003 // The result would be [41/3, 26/3] for fractional avg pooling. 8004 // If not specified, defaults to false 8005 func FractionalAvgPoolOverlapping(value bool) FractionalAvgPoolAttr { 8006 return func(m optionalAttr) { 8007 m["overlapping"] = value 8008 } 8009 } 8010 8011 // FractionalAvgPoolDeterministic sets the optional deterministic attribute to value. 8012 // 8013 // value: When set to True, a fixed pooling region will be used when 8014 // iterating over a FractionalAvgPool node in the computation graph. Mainly used 8015 // in unit test to make FractionalAvgPool deterministic. 8016 // If not specified, defaults to false 8017 func FractionalAvgPoolDeterministic(value bool) FractionalAvgPoolAttr { 8018 return func(m optionalAttr) { 8019 m["deterministic"] = value 8020 } 8021 } 8022 8023 // FractionalAvgPoolSeed sets the optional seed attribute to value. 8024 // 8025 // value: If either seed or seed2 are set to be non-zero, the random number 8026 // generator is seeded by the given seed. Otherwise, it is seeded by a 8027 // random seed. 8028 // If not specified, defaults to 0 8029 func FractionalAvgPoolSeed(value int64) FractionalAvgPoolAttr { 8030 return func(m optionalAttr) { 8031 m["seed"] = value 8032 } 8033 } 8034 8035 // FractionalAvgPoolSeed2 sets the optional seed2 attribute to value. 8036 // 8037 // value: An second seed to avoid seed collision. 8038 // If not specified, defaults to 0 8039 func FractionalAvgPoolSeed2(value int64) FractionalAvgPoolAttr { 8040 return func(m optionalAttr) { 8041 m["seed2"] = value 8042 } 8043 } 8044 8045 // Performs fractional average pooling on the input. 8046 // 8047 // Fractional average pooling is similar to Fractional max pooling in the pooling 8048 // region generation step. The only difference is that after pooling regions are 8049 // generated, a mean operation is performed instead of a max operation in each 8050 // pooling region. 8051 // 8052 // Arguments: 8053 // value: 4-D with shape `[batch, height, width, channels]`. 8054 // pooling_ratio: Pooling ratio for each dimension of `value`, currently only 8055 // supports row and col dimension and should be >= 1.0. For example, a valid 8056 // pooling ratio looks like [1.0, 1.44, 1.73, 1.0]. The first and last elements 8057 // must be 1.0 because we don't allow pooling on batch and channels 8058 // dimensions. 1.44 and 1.73 are pooling ratio on height and width dimensions 8059 // respectively. 8060 // 8061 // Returns output tensor after fractional avg pooling.row pooling sequence, needed to calculate gradient.column pooling sequence, needed to calculate gradient. 8062 func FractionalAvgPool(scope *Scope, value tf.Output, pooling_ratio []float32, optional ...FractionalAvgPoolAttr) (output tf.Output, row_pooling_sequence tf.Output, col_pooling_sequence tf.Output) { 8063 if scope.Err() != nil { 8064 return 8065 } 8066 attrs := map[string]interface{}{"pooling_ratio": pooling_ratio} 8067 for _, a := range optional { 8068 a(attrs) 8069 } 8070 opspec := tf.OpSpec{ 8071 Type: "FractionalAvgPool", 8072 Input: []tf.Input{ 8073 value, 8074 }, 8075 Attrs: attrs, 8076 } 8077 op := scope.AddOperation(opspec) 8078 return op.Output(0), op.Output(1), op.Output(2) 8079 } 8080 8081 // RandomCropAttr is an optional argument to RandomCrop. 8082 type RandomCropAttr func(optionalAttr) 8083 8084 // RandomCropSeed sets the optional seed attribute to value. 8085 // 8086 // value: If either seed or seed2 are set to be non-zero, the random number 8087 // generator is seeded by the given seed. Otherwise, it is seeded by a 8088 // random seed. 8089 // If not specified, defaults to 0 8090 func RandomCropSeed(value int64) RandomCropAttr { 8091 return func(m optionalAttr) { 8092 m["seed"] = value 8093 } 8094 } 8095 8096 // RandomCropSeed2 sets the optional seed2 attribute to value. 8097 // 8098 // value: An second seed to avoid seed collision. 8099 // If not specified, defaults to 0 8100 func RandomCropSeed2(value int64) RandomCropAttr { 8101 return func(m optionalAttr) { 8102 m["seed2"] = value 8103 } 8104 } 8105 8106 // Randomly crop `image`. 8107 // 8108 // DEPRECATED at GraphDef version 8: Random crop is now pure Python 8109 // 8110 // `size` is a 1-D int64 tensor with 2 elements representing the crop height and 8111 // width. The values must be non negative. 8112 // 8113 // This Op picks a random location in `image` and crops a `height` by `width` 8114 // rectangle from that location. The random location is picked so the cropped 8115 // area will fit inside the original image. 8116 // 8117 // Arguments: 8118 // image: 3-D of shape `[height, width, channels]`. 8119 // size: 1-D of length 2 containing: `crop_height`, `crop_width`.. 8120 // 8121 // Returns 3-D of shape `[crop_height, crop_width, channels].` 8122 func RandomCrop(scope *Scope, image tf.Output, size tf.Output, optional ...RandomCropAttr) (output tf.Output) { 8123 if scope.Err() != nil { 8124 return 8125 } 8126 attrs := map[string]interface{}{} 8127 for _, a := range optional { 8128 a(attrs) 8129 } 8130 opspec := tf.OpSpec{ 8131 Type: "RandomCrop", 8132 Input: []tf.Input{ 8133 image, size, 8134 }, 8135 Attrs: attrs, 8136 } 8137 op := scope.AddOperation(opspec) 8138 return op.Output(0) 8139 } 8140 8141 // TopKV2Attr is an optional argument to TopKV2. 8142 type TopKV2Attr func(optionalAttr) 8143 8144 // TopKV2Sorted sets the optional sorted attribute to value. 8145 // 8146 // value: If true the resulting `k` elements will be sorted by the values in 8147 // descending order. 8148 // If not specified, defaults to true 8149 func TopKV2Sorted(value bool) TopKV2Attr { 8150 return func(m optionalAttr) { 8151 m["sorted"] = value 8152 } 8153 } 8154 8155 // Finds values and indices of the `k` largest elements for the last dimension. 8156 // 8157 // If the input is a vector (rank-1), finds the `k` largest entries in the vector 8158 // and outputs their values and indices as vectors. Thus `values[j]` is the 8159 // `j`-th largest entry in `input`, and its index is `indices[j]`. 8160 // 8161 // For matrices (resp. higher rank input), computes the top `k` entries in each 8162 // row (resp. vector along the last dimension). Thus, 8163 // 8164 // values.shape = indices.shape = input.shape[:-1] + [k] 8165 // 8166 // If two elements are equal, the lower-index element appears first. 8167 // 8168 // Arguments: 8169 // input: 1-D or higher with last dimension at least `k`. 8170 // k: 0-D. Number of top elements to look for along the last dimension (along each 8171 // row for matrices). 8172 // 8173 // Returns The `k` largest elements along each last dimensional slice.The indices of `values` within the last dimension of `input`. 8174 func TopKV2(scope *Scope, input tf.Output, k tf.Output, optional ...TopKV2Attr) (values tf.Output, indices tf.Output) { 8175 if scope.Err() != nil { 8176 return 8177 } 8178 attrs := map[string]interface{}{} 8179 for _, a := range optional { 8180 a(attrs) 8181 } 8182 opspec := tf.OpSpec{ 8183 Type: "TopKV2", 8184 Input: []tf.Input{ 8185 input, k, 8186 }, 8187 Attrs: attrs, 8188 } 8189 op := scope.AddOperation(opspec) 8190 return op.Output(0), op.Output(1) 8191 } 8192 8193 // Returns x // y element-wise. 8194 // 8195 // *NOTE*: `FloorDiv` supports broadcasting. More about broadcasting 8196 // [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html) 8197 func FloorDiv(scope *Scope, x tf.Output, y tf.Output) (z tf.Output) { 8198 if scope.Err() != nil { 8199 return 8200 } 8201 opspec := tf.OpSpec{ 8202 Type: "FloorDiv", 8203 Input: []tf.Input{ 8204 x, y, 8205 }, 8206 } 8207 op := scope.AddOperation(opspec) 8208 return op.Output(0) 8209 } 8210 8211 // Computes the inverse permutation of a tensor. 8212 // 8213 // This operation computes the inverse of an index permutation. It takes a 1-D 8214 // integer tensor `x`, which represents the indices of a zero-based array, and 8215 // swaps each value with its index position. In other words, for an output tensor 8216 // `y` and an input tensor `x`, this operation computes the following: 8217 // 8218 // `y[x[i]] = i for i in [0, 1, ..., len(x) - 1]` 8219 // 8220 // The values must include 0. There can be no duplicate values or negative values. 8221 // 8222 // For example: 8223 // 8224 // ``` 8225 // # tensor `x` is [3, 4, 0, 2, 1] 8226 // invert_permutation(x) ==> [2, 4, 3, 0, 1] 8227 // ``` 8228 // 8229 // Arguments: 8230 // x: 1-D. 8231 // 8232 // Returns 1-D. 8233 func InvertPermutation(scope *Scope, x tf.Output) (y tf.Output) { 8234 if scope.Err() != nil { 8235 return 8236 } 8237 opspec := tf.OpSpec{ 8238 Type: "InvertPermutation", 8239 Input: []tf.Input{ 8240 x, 8241 }, 8242 } 8243 op := scope.AddOperation(opspec) 8244 return op.Output(0) 8245 } 8246 8247 // Computes log softmax activations. 8248 // 8249 // For each batch `i` and class `j` we have 8250 // 8251 // logsoftmax[i, j] = logits[i, j] - log(sum(exp(logits[i]))) 8252 // 8253 // Arguments: 8254 // logits: 2-D with shape `[batch_size, num_classes]`. 8255 // 8256 // Returns Same shape as `logits`. 8257 func LogSoftmax(scope *Scope, logits tf.Output) (logsoftmax tf.Output) { 8258 if scope.Err() != nil { 8259 return 8260 } 8261 opspec := tf.OpSpec{ 8262 Type: "LogSoftmax", 8263 Input: []tf.Input{ 8264 logits, 8265 }, 8266 } 8267 op := scope.AddOperation(opspec) 8268 return op.Output(0) 8269 } 8270 8271 // Computes softmax activations. 8272 // 8273 // For each batch `i` and class `j` we have 8274 // 8275 // $$softmax[i, j] = exp(logits[i, j]) / sum_j(exp(logits[i, j]))$$ 8276 // 8277 // Arguments: 8278 // logits: 2-D with shape `[batch_size, num_classes]`. 8279 // 8280 // Returns Same shape as `logits`. 8281 func Softmax(scope *Scope, logits tf.Output) (softmax tf.Output) { 8282 if scope.Err() != nil { 8283 return 8284 } 8285 opspec := tf.OpSpec{ 8286 Type: "Softmax", 8287 Input: []tf.Input{ 8288 logits, 8289 }, 8290 } 8291 op := scope.AddOperation(opspec) 8292 return op.Output(0) 8293 } 8294 8295 // DecodeBmpAttr is an optional argument to DecodeBmp. 8296 type DecodeBmpAttr func(optionalAttr) 8297 8298 // DecodeBmpChannels sets the optional channels attribute to value. 8299 // If not specified, defaults to 0 8300 func DecodeBmpChannels(value int64) DecodeBmpAttr { 8301 return func(m optionalAttr) { 8302 m["channels"] = value 8303 } 8304 } 8305 8306 // Decode the first frame of a BMP-encoded image to a uint8 tensor. 8307 // 8308 // The attr `channels` indicates the desired number of color channels for the 8309 // decoded image. 8310 // 8311 // Accepted values are: 8312 // 8313 // * 0: Use the number of channels in the BMP-encoded image. 8314 // * 3: output an RGB image. 8315 // * 4: output an RGBA image. 8316 // 8317 // Arguments: 8318 // contents: 0-D. The BMP-encoded image. 8319 // 8320 // Returns 3-D with shape `[height, width, channels]`. RGB order 8321 func DecodeBmp(scope *Scope, contents tf.Output, optional ...DecodeBmpAttr) (image tf.Output) { 8322 if scope.Err() != nil { 8323 return 8324 } 8325 attrs := map[string]interface{}{} 8326 for _, a := range optional { 8327 a(attrs) 8328 } 8329 opspec := tf.OpSpec{ 8330 Type: "DecodeBmp", 8331 Input: []tf.Input{ 8332 contents, 8333 }, 8334 Attrs: attrs, 8335 } 8336 op := scope.AddOperation(opspec) 8337 return op.Output(0) 8338 } 8339 8340 // Computes exponential linear: `exp(features) - 1` if < 0, `features` otherwise. 8341 // 8342 // See [Fast and Accurate Deep Network Learning by Exponential Linear Units (ELUs) 8343 // ](http://arxiv.org/abs/1511.07289) 8344 func Elu(scope *Scope, features tf.Output) (activations tf.Output) { 8345 if scope.Err() != nil { 8346 return 8347 } 8348 opspec := tf.OpSpec{ 8349 Type: "Elu", 8350 Input: []tf.Input{ 8351 features, 8352 }, 8353 } 8354 op := scope.AddOperation(opspec) 8355 return op.Output(0) 8356 } 8357 8358 // Computes square of x element-wise. 8359 // 8360 // I.e., \\(y = x * x = x^2\\). 8361 func Square(scope *Scope, x tf.Output) (y tf.Output) { 8362 if scope.Err() != nil { 8363 return 8364 } 8365 opspec := tf.OpSpec{ 8366 Type: "Square", 8367 Input: []tf.Input{ 8368 x, 8369 }, 8370 } 8371 op := scope.AddOperation(opspec) 8372 return op.Output(0) 8373 } 8374 8375 // LeakyReluGradAttr is an optional argument to LeakyReluGrad. 8376 type LeakyReluGradAttr func(optionalAttr) 8377 8378 // LeakyReluGradAlpha sets the optional alpha attribute to value. 8379 // If not specified, defaults to 0.2 8380 func LeakyReluGradAlpha(value float32) LeakyReluGradAttr { 8381 return func(m optionalAttr) { 8382 m["alpha"] = value 8383 } 8384 } 8385 8386 // Computes rectified linear gradients for a LeakyRelu operation. 8387 // 8388 // Arguments: 8389 // gradients: The backpropagated gradients to the corresponding LeakyRelu operation. 8390 // features: The features passed as input to the corresponding LeakyRelu operation, 8391 // OR the outputs of that operation (both work equivalently). 8392 // 8393 // Returns `gradients * (features > 0) + alpha * gradients * (featurs <= 0)`. 8394 func LeakyReluGrad(scope *Scope, gradients tf.Output, features tf.Output, optional ...LeakyReluGradAttr) (backprops tf.Output) { 8395 if scope.Err() != nil { 8396 return 8397 } 8398 attrs := map[string]interface{}{} 8399 for _, a := range optional { 8400 a(attrs) 8401 } 8402 opspec := tf.OpSpec{ 8403 Type: "LeakyReluGrad", 8404 Input: []tf.Input{ 8405 gradients, features, 8406 }, 8407 Attrs: attrs, 8408 } 8409 op := scope.AddOperation(opspec) 8410 return op.Output(0) 8411 } 8412 8413 // Computes rectified linear 6: `min(max(features, 0), 6)`. 8414 func Relu6(scope *Scope, features tf.Output) (activations tf.Output) { 8415 if scope.Err() != nil { 8416 return 8417 } 8418 opspec := tf.OpSpec{ 8419 Type: "Relu6", 8420 Input: []tf.Input{ 8421 features, 8422 }, 8423 } 8424 op := scope.AddOperation(opspec) 8425 return op.Output(0) 8426 } 8427 8428 // SdcaOptimizerV2Attr is an optional argument to SdcaOptimizerV2. 8429 type SdcaOptimizerV2Attr func(optionalAttr) 8430 8431 // SdcaOptimizerV2Adaptive sets the optional adaptive attribute to value. 8432 // 8433 // value: Whether to use Adaptive SDCA for the inner loop. 8434 // If not specified, defaults to true 8435 func SdcaOptimizerV2Adaptive(value bool) SdcaOptimizerV2Attr { 8436 return func(m optionalAttr) { 8437 m["adaptive"] = value 8438 } 8439 } 8440 8441 // Distributed version of Stochastic Dual Coordinate Ascent (SDCA) optimizer for 8442 // 8443 // linear models with L1 + L2 regularization. As global optimization objective is 8444 // strongly-convex, the optimizer optimizes the dual objective at each step. The 8445 // optimizer applies each update one example at a time. Examples are sampled 8446 // uniformly, and the optimizer is learning rate free and enjoys linear convergence 8447 // rate. 8448 // 8449 // [Proximal Stochastic Dual Coordinate Ascent](http://arxiv.org/pdf/1211.2717v1.pdf).<br> 8450 // Shai Shalev-Shwartz, Tong Zhang. 2012 8451 // 8452 // $$Loss Objective = \sum f_{i} (wx_{i}) + (l2 / 2) * |w|^2 + l1 * |w|$$ 8453 // 8454 // [Adding vs. Averaging in Distributed Primal-Dual Optimization](http://arxiv.org/abs/1502.03508).<br> 8455 // Chenxin Ma, Virginia Smith, Martin Jaggi, Michael I. Jordan, 8456 // Peter Richtarik, Martin Takac. 2015 8457 // 8458 // [Stochastic Dual Coordinate Ascent with Adaptive Probabilities](https://arxiv.org/abs/1502.08053).<br> 8459 // Dominik Csiba, Zheng Qu, Peter Richtarik. 2015 8460 // 8461 // Arguments: 8462 // sparse_example_indices: a list of vectors which contain example indices. 8463 // sparse_feature_indices: a list of vectors which contain feature indices. 8464 // sparse_feature_values: a list of vectors which contains feature value 8465 // associated with each feature group. 8466 // dense_features: a list of matrices which contains the dense feature values. 8467 // example_weights: a vector which contains the weight associated with each 8468 // example. 8469 // example_labels: a vector which contains the label/target associated with each 8470 // example. 8471 // sparse_indices: a list of vectors where each value is the indices which has 8472 // corresponding weights in sparse_weights. This field maybe omitted for the 8473 // dense approach. 8474 // sparse_weights: a list of vectors where each value is the weight associated with 8475 // a sparse feature group. 8476 // dense_weights: a list of vectors where the values are the weights associated 8477 // with a dense feature group. 8478 // example_state_data: a list of vectors containing the example state data. 8479 // loss_type: Type of the primal loss. Currently SdcaSolver supports logistic, 8480 // squared and hinge losses. 8481 // l1: Symmetric l1 regularization strength. 8482 // l2: Symmetric l2 regularization strength. 8483 // num_loss_partitions: Number of partitions of the global loss function. 8484 // num_inner_iterations: Number of iterations per mini-batch. 8485 // 8486 // Returns a list of vectors containing the updated example state 8487 // data.a list of vectors where each value is the delta 8488 // weights associated with a sparse feature group.a list of vectors where the values are the delta 8489 // weights associated with a dense feature group. 8490 func SdcaOptimizerV2(scope *Scope, sparse_example_indices []tf.Output, sparse_feature_indices []tf.Output, sparse_feature_values []tf.Output, dense_features []tf.Output, example_weights tf.Output, example_labels tf.Output, sparse_indices []tf.Output, sparse_weights []tf.Output, dense_weights []tf.Output, example_state_data tf.Output, loss_type string, l1 float32, l2 float32, num_loss_partitions int64, num_inner_iterations int64, optional ...SdcaOptimizerV2Attr) (out_example_state_data tf.Output, out_delta_sparse_weights []tf.Output, out_delta_dense_weights []tf.Output) { 8491 if scope.Err() != nil { 8492 return 8493 } 8494 attrs := map[string]interface{}{"loss_type": loss_type, "l1": l1, "l2": l2, "num_loss_partitions": num_loss_partitions, "num_inner_iterations": num_inner_iterations} 8495 for _, a := range optional { 8496 a(attrs) 8497 } 8498 opspec := tf.OpSpec{ 8499 Type: "SdcaOptimizerV2", 8500 Input: []tf.Input{ 8501 tf.OutputList(sparse_example_indices), tf.OutputList(sparse_feature_indices), tf.OutputList(sparse_feature_values), tf.OutputList(dense_features), example_weights, example_labels, tf.OutputList(sparse_indices), tf.OutputList(sparse_weights), tf.OutputList(dense_weights), example_state_data, 8502 }, 8503 Attrs: attrs, 8504 } 8505 op := scope.AddOperation(opspec) 8506 if scope.Err() != nil { 8507 return 8508 } 8509 var idx int 8510 var err error 8511 out_example_state_data = op.Output(idx) 8512 if out_delta_sparse_weights, idx, err = makeOutputList(op, idx, "out_delta_sparse_weights"); err != nil { 8513 scope.UpdateErr("SdcaOptimizerV2", err) 8514 return 8515 } 8516 if out_delta_dense_weights, idx, err = makeOutputList(op, idx, "out_delta_dense_weights"); err != nil { 8517 scope.UpdateErr("SdcaOptimizerV2", err) 8518 return 8519 } 8520 return out_example_state_data, out_delta_sparse_weights, out_delta_dense_weights 8521 } 8522 8523 // Computes the minimum along segments of a tensor. 8524 // 8525 // Read 8526 // [the section on segmentation](https://tensorflow.org/api_docs/python/tf/math#Segmentation) 8527 // for an explanation of segments. 8528 // 8529 // This operator is similar to the unsorted segment sum operator found 8530 // [(here)](../../../api_docs/python/math_ops.md#UnsortedSegmentSum). 8531 // Instead of computing the sum over segments, it computes the minimum such that: 8532 // 8533 // \\(output_i = \min_{j...} data_[j...]\\) where min is over tuples `j...` such 8534 // that `segment_ids[j...] == i`. 8535 // 8536 // If the minimum is empty for a given segment ID `i`, it outputs the largest 8537 // possible value for the specific numeric type, 8538 // `output[i] = numeric_limits<T>::max()`. 8539 // 8540 // For example: 8541 // 8542 // ``` python 8543 // c = tf.constant([[1,2,3,4], [5,6,7,8], [4,3,2,1]]) 8544 // tf.unsorted_segment_min(c, tf.constant([0, 1, 0]), num_segments=2) 8545 // # ==> [[ 1, 2, 2, 1], 8546 // # [5, 6, 7, 8]] 8547 // ``` 8548 // 8549 // If the given segment ID `i` is negative, then the corresponding value is 8550 // dropped, and will not be included in the result. 8551 // 8552 // Arguments: 8553 // 8554 // segment_ids: A tensor whose shape is a prefix of `data.shape`. 8555 // 8556 // 8557 // Returns Has same shape as data, except for the first `segment_ids.rank` 8558 // dimensions, which are replaced with a single dimension which has size 8559 // `num_segments`. 8560 func UnsortedSegmentMin(scope *Scope, data tf.Output, segment_ids tf.Output, num_segments tf.Output) (output tf.Output) { 8561 if scope.Err() != nil { 8562 return 8563 } 8564 opspec := tf.OpSpec{ 8565 Type: "UnsortedSegmentMin", 8566 Input: []tf.Input{ 8567 data, segment_ids, num_segments, 8568 }, 8569 } 8570 op := scope.AddOperation(opspec) 8571 return op.Output(0) 8572 } 8573 8574 // Computes rectified linear gradients for a Relu operation. 8575 // 8576 // Arguments: 8577 // gradients: The backpropagated gradients to the corresponding Relu operation. 8578 // features: The features passed as input to the corresponding Relu operation, OR 8579 // the outputs of that operation (both work equivalently). 8580 // 8581 // Returns `gradients * (features > 0)`. 8582 func ReluGrad(scope *Scope, gradients tf.Output, features tf.Output) (backprops tf.Output) { 8583 if scope.Err() != nil { 8584 return 8585 } 8586 opspec := tf.OpSpec{ 8587 Type: "ReluGrad", 8588 Input: []tf.Input{ 8589 gradients, features, 8590 }, 8591 } 8592 op := scope.AddOperation(opspec) 8593 return op.Output(0) 8594 } 8595 8596 // TensorArrayGatherV2Attr is an optional argument to TensorArrayGatherV2. 8597 type TensorArrayGatherV2Attr func(optionalAttr) 8598 8599 // TensorArrayGatherV2ElementShape sets the optional element_shape attribute to value. 8600 // If not specified, defaults to <unknown_rank:true > 8601 func TensorArrayGatherV2ElementShape(value tf.Shape) TensorArrayGatherV2Attr { 8602 return func(m optionalAttr) { 8603 m["element_shape"] = value 8604 } 8605 } 8606 8607 // Deprecated. Use TensorArrayGatherV3 8608 // 8609 // DEPRECATED at GraphDef version 26: Use TensorArrayGatherV3 8610 func TensorArrayGatherV2(scope *Scope, handle tf.Output, indices tf.Output, flow_in tf.Output, dtype tf.DataType, optional ...TensorArrayGatherV2Attr) (value tf.Output) { 8611 if scope.Err() != nil { 8612 return 8613 } 8614 attrs := map[string]interface{}{"dtype": dtype} 8615 for _, a := range optional { 8616 a(attrs) 8617 } 8618 opspec := tf.OpSpec{ 8619 Type: "TensorArrayGatherV2", 8620 Input: []tf.Input{ 8621 handle, indices, flow_in, 8622 }, 8623 Attrs: attrs, 8624 } 8625 op := scope.AddOperation(opspec) 8626 return op.Output(0) 8627 } 8628 8629 // Returns the truth value of (x == y) element-wise. 8630 // 8631 // *NOTE*: `Equal` supports broadcasting. More about broadcasting 8632 // [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html) 8633 func Equal(scope *Scope, x tf.Output, y tf.Output) (z tf.Output) { 8634 if scope.Err() != nil { 8635 return 8636 } 8637 opspec := tf.OpSpec{ 8638 Type: "Equal", 8639 Input: []tf.Input{ 8640 x, y, 8641 }, 8642 } 8643 op := scope.AddOperation(opspec) 8644 return op.Output(0) 8645 } 8646 8647 // Compute the polygamma function \\(\psi^{(n)}(x)\\). 8648 // 8649 // The polygamma function is defined as: 8650 // 8651 // 8652 // \\(\psi^{(a)}(x) = \frac{d^a}{dx^a} \psi(x)\\) 8653 // 8654 // where \\(\psi(x)\\) is the digamma function. 8655 // The polygamma function is defined only for non-negative integer orders \\a\\. 8656 func Polygamma(scope *Scope, a tf.Output, x tf.Output) (z tf.Output) { 8657 if scope.Err() != nil { 8658 return 8659 } 8660 opspec := tf.OpSpec{ 8661 Type: "Polygamma", 8662 Input: []tf.Input{ 8663 a, x, 8664 }, 8665 } 8666 op := scope.AddOperation(opspec) 8667 return op.Output(0) 8668 } 8669 8670 // MaxPoolGradGradV2Attr is an optional argument to MaxPoolGradGradV2. 8671 type MaxPoolGradGradV2Attr func(optionalAttr) 8672 8673 // MaxPoolGradGradV2DataFormat sets the optional data_format attribute to value. 8674 // 8675 // value: Specify the data format of the input and output data. With the 8676 // default format "NHWC", the data is stored in the order of: 8677 // [batch, in_height, in_width, in_channels]. 8678 // Alternatively, the format could be "NCHW", the data storage order of: 8679 // [batch, in_channels, in_height, in_width]. 8680 // If not specified, defaults to "NHWC" 8681 func MaxPoolGradGradV2DataFormat(value string) MaxPoolGradGradV2Attr { 8682 return func(m optionalAttr) { 8683 m["data_format"] = value 8684 } 8685 } 8686 8687 // Computes second-order gradients of the maxpooling function. 8688 // 8689 // Arguments: 8690 // orig_input: The original input tensor. 8691 // orig_output: The original output tensor. 8692 // grad: 4-D. Gradients of gradients w.r.t. the input of `max_pool`. 8693 // ksize: The size of the window for each dimension of the input tensor. 8694 // strides: The stride of the sliding window for each dimension of the 8695 // input tensor. 8696 // padding: The type of padding algorithm to use. 8697 // 8698 // Returns Gradients of gradients w.r.t. the input to `max_pool`. 8699 func MaxPoolGradGradV2(scope *Scope, orig_input tf.Output, orig_output tf.Output, grad tf.Output, ksize tf.Output, strides tf.Output, padding string, optional ...MaxPoolGradGradV2Attr) (output tf.Output) { 8700 if scope.Err() != nil { 8701 return 8702 } 8703 attrs := map[string]interface{}{"padding": padding} 8704 for _, a := range optional { 8705 a(attrs) 8706 } 8707 opspec := tf.OpSpec{ 8708 Type: "MaxPoolGradGradV2", 8709 Input: []tf.Input{ 8710 orig_input, orig_output, grad, ksize, strides, 8711 }, 8712 Attrs: attrs, 8713 } 8714 op := scope.AddOperation(opspec) 8715 return op.Output(0) 8716 } 8717 8718 // MaxPoolGradWithArgmaxAttr is an optional argument to MaxPoolGradWithArgmax. 8719 type MaxPoolGradWithArgmaxAttr func(optionalAttr) 8720 8721 // MaxPoolGradWithArgmaxIncludeBatchInIndex sets the optional include_batch_in_index attribute to value. 8722 // 8723 // value: Whether to include batch dimension in flattened index of `argmax`. 8724 // If not specified, defaults to false 8725 func MaxPoolGradWithArgmaxIncludeBatchInIndex(value bool) MaxPoolGradWithArgmaxAttr { 8726 return func(m optionalAttr) { 8727 m["include_batch_in_index"] = value 8728 } 8729 } 8730 8731 // Computes gradients of the maxpooling function. 8732 // 8733 // Arguments: 8734 // input: The original input. 8735 // grad: 4-D with shape `[batch, height, width, channels]`. Gradients w.r.t. the 8736 // output of `max_pool`. 8737 // argmax: The indices of the maximum values chosen for each output of `max_pool`. 8738 // ksize: The size of the window for each dimension of the input tensor. 8739 // strides: The stride of the sliding window for each dimension of the 8740 // input tensor. 8741 // padding: The type of padding algorithm to use. 8742 // 8743 // Returns Gradients w.r.t. the input of `max_pool`. 8744 func MaxPoolGradWithArgmax(scope *Scope, input tf.Output, grad tf.Output, argmax tf.Output, ksize []int64, strides []int64, padding string, optional ...MaxPoolGradWithArgmaxAttr) (output tf.Output) { 8745 if scope.Err() != nil { 8746 return 8747 } 8748 attrs := map[string]interface{}{"ksize": ksize, "strides": strides, "padding": padding} 8749 for _, a := range optional { 8750 a(attrs) 8751 } 8752 opspec := tf.OpSpec{ 8753 Type: "MaxPoolGradWithArgmax", 8754 Input: []tf.Input{ 8755 input, grad, argmax, 8756 }, 8757 Attrs: attrs, 8758 } 8759 op := scope.AddOperation(opspec) 8760 return op.Output(0) 8761 } 8762 8763 // MutexV2Attr is an optional argument to MutexV2. 8764 type MutexV2Attr func(optionalAttr) 8765 8766 // MutexV2Container sets the optional container attribute to value. 8767 // 8768 // value: If non-empty, this variable is placed in the given container. 8769 // Otherwise, a default container is used. 8770 // If not specified, defaults to "" 8771 func MutexV2Container(value string) MutexV2Attr { 8772 return func(m optionalAttr) { 8773 m["container"] = value 8774 } 8775 } 8776 8777 // MutexV2SharedName sets the optional shared_name attribute to value. 8778 // 8779 // value: If non-empty, this variable is named in the given bucket 8780 // with this shared_name. Otherwise, the node name is used instead. 8781 // If not specified, defaults to "" 8782 func MutexV2SharedName(value string) MutexV2Attr { 8783 return func(m optionalAttr) { 8784 m["shared_name"] = value 8785 } 8786 } 8787 8788 // Creates a Mutex resource that can be locked by `MutexLock`. 8789 // 8790 // Returns The mutex resource. 8791 func MutexV2(scope *Scope, optional ...MutexV2Attr) (resource tf.Output) { 8792 if scope.Err() != nil { 8793 return 8794 } 8795 attrs := map[string]interface{}{} 8796 for _, a := range optional { 8797 a(attrs) 8798 } 8799 opspec := tf.OpSpec{ 8800 Type: "MutexV2", 8801 8802 Attrs: attrs, 8803 } 8804 op := scope.AddOperation(opspec) 8805 return op.Output(0) 8806 } 8807 8808 // Connects N inputs to an N-way replicated TPU computation. 8809 func TPUReplicatedInput(scope *Scope, inputs []tf.Output) (output tf.Output) { 8810 if scope.Err() != nil { 8811 return 8812 } 8813 opspec := tf.OpSpec{ 8814 Type: "TPUReplicatedInput", 8815 Input: []tf.Input{ 8816 tf.OutputList(inputs), 8817 }, 8818 } 8819 op := scope.AddOperation(opspec) 8820 return op.Output(0) 8821 } 8822 8823 // AvgPool3DAttr is an optional argument to AvgPool3D. 8824 type AvgPool3DAttr func(optionalAttr) 8825 8826 // AvgPool3DDataFormat sets the optional data_format attribute to value. 8827 // 8828 // value: The data format of the input and output data. With the 8829 // default format "NDHWC", the data is stored in the order of: 8830 // [batch, in_depth, in_height, in_width, in_channels]. 8831 // Alternatively, the format could be "NCDHW", the data storage order is: 8832 // [batch, in_channels, in_depth, in_height, in_width]. 8833 // If not specified, defaults to "NDHWC" 8834 func AvgPool3DDataFormat(value string) AvgPool3DAttr { 8835 return func(m optionalAttr) { 8836 m["data_format"] = value 8837 } 8838 } 8839 8840 // Performs 3D average pooling on the input. 8841 // 8842 // Arguments: 8843 // input: Shape `[batch, depth, rows, cols, channels]` tensor to pool over. 8844 // ksize: 1-D tensor of length 5. The size of the window for each dimension of 8845 // the input tensor. Must have `ksize[0] = ksize[4] = 1`. 8846 // strides: 1-D tensor of length 5. The stride of the sliding window for each 8847 // dimension of `input`. Must have `strides[0] = strides[4] = 1`. 8848 // padding: The type of padding algorithm to use. 8849 // 8850 // Returns The average pooled output tensor. 8851 func AvgPool3D(scope *Scope, input tf.Output, ksize []int64, strides []int64, padding string, optional ...AvgPool3DAttr) (output tf.Output) { 8852 if scope.Err() != nil { 8853 return 8854 } 8855 attrs := map[string]interface{}{"ksize": ksize, "strides": strides, "padding": padding} 8856 for _, a := range optional { 8857 a(attrs) 8858 } 8859 opspec := tf.OpSpec{ 8860 Type: "AvgPool3D", 8861 Input: []tf.Input{ 8862 input, 8863 }, 8864 Attrs: attrs, 8865 } 8866 op := scope.AddOperation(opspec) 8867 return op.Output(0) 8868 } 8869 8870 // DepthToSpaceAttr is an optional argument to DepthToSpace. 8871 type DepthToSpaceAttr func(optionalAttr) 8872 8873 // DepthToSpaceDataFormat sets the optional data_format attribute to value. 8874 // If not specified, defaults to "NHWC" 8875 func DepthToSpaceDataFormat(value string) DepthToSpaceAttr { 8876 return func(m optionalAttr) { 8877 m["data_format"] = value 8878 } 8879 } 8880 8881 // DepthToSpace for tensors of type T. 8882 // 8883 // Rearranges data from depth into blocks of spatial data. 8884 // This is the reverse transformation of SpaceToDepth. More specifically, 8885 // this op outputs a copy of the input tensor where values from the `depth` 8886 // dimension are moved in spatial blocks to the `height` and `width` dimensions. 8887 // The attr `block_size` indicates the input block size and how the data is moved. 8888 // 8889 // * Chunks of data of size `block_size * block_size` from depth are rearranged 8890 // into non-overlapping blocks of size `block_size x block_size` 8891 // * The width the output tensor is `input_depth * block_size`, whereas the 8892 // height is `input_height * block_size`. 8893 // * The Y, X coordinates within each block of the output image are determined 8894 // by the high order component of the input channel index. 8895 // * The depth of the input tensor must be divisible by 8896 // `block_size * block_size`. 8897 // 8898 // The `data_format` attr specifies the layout of the input and output tensors 8899 // with the following options: 8900 // "NHWC": `[ batch, height, width, channels ]` 8901 // "NCHW": `[ batch, channels, height, width ]` 8902 // "NCHW_VECT_C": 8903 // `qint8 [ batch, channels / 4, height, width, 4 ]` 8904 // 8905 // It is useful to consider the operation as transforming a 6-D Tensor. 8906 // e.g. for data_format = NHWC, 8907 // Each element in the input tensor can be specified via 6 coordinates, 8908 // ordered by decreasing memory layout significance as: 8909 // n,iY,iX,bY,bX,oC (where n=batch index, iX, iY means X or Y coordinates 8910 // within the input image, bX, bY means coordinates 8911 // within the output block, oC means output channels). 8912 // The output would be the input transposed to the following layout: 8913 // n,iY,bY,iX,bX,oC 8914 // 8915 // This operation is useful for resizing the activations between convolutions 8916 // (but keeping all data), e.g. instead of pooling. It is also useful for training 8917 // purely convolutional models. 8918 // 8919 // For example, given an input of shape `[1, 1, 1, 4]`, data_format = "NHWC" and 8920 // block_size = 2: 8921 // 8922 // ``` 8923 // x = [[[[1, 2, 3, 4]]]] 8924 // 8925 // ``` 8926 // 8927 // This operation will output a tensor of shape `[1, 2, 2, 1]`: 8928 // 8929 // ``` 8930 // [[[[1], [2]], 8931 // [[3], [4]]]] 8932 // ``` 8933 // 8934 // Here, the input has a batch of 1 and each batch element has shape `[1, 1, 4]`, 8935 // the corresponding output will have 2x2 elements and will have a depth of 8936 // 1 channel (1 = `4 / (block_size * block_size)`). 8937 // The output element shape is `[2, 2, 1]`. 8938 // 8939 // For an input tensor with larger depth, here of shape `[1, 1, 1, 12]`, e.g. 8940 // 8941 // ``` 8942 // x = [[[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]]]] 8943 // ``` 8944 // 8945 // This operation, for block size of 2, will return the following tensor of shape 8946 // `[1, 2, 2, 3]` 8947 // 8948 // ``` 8949 // [[[[1, 2, 3], [4, 5, 6]], 8950 // [[7, 8, 9], [10, 11, 12]]]] 8951 // 8952 // ``` 8953 // 8954 // Similarly, for the following input of shape `[1 2 2 4]`, and a block size of 2: 8955 // 8956 // ``` 8957 // x = [[[[1, 2, 3, 4], 8958 // [5, 6, 7, 8]], 8959 // [[9, 10, 11, 12], 8960 // [13, 14, 15, 16]]]] 8961 // ``` 8962 // 8963 // the operator will return the following tensor of shape `[1 4 4 1]`: 8964 // 8965 // ``` 8966 // x = [[[ [1], [2], [5], [6]], 8967 // [ [3], [4], [7], [8]], 8968 // [ [9], [10], [13], [14]], 8969 // [ [11], [12], [15], [16]]]] 8970 // 8971 // ``` 8972 // 8973 // Arguments: 8974 // 8975 // block_size: The size of the spatial block, same as in Space2Depth. 8976 func DepthToSpace(scope *Scope, input tf.Output, block_size int64, optional ...DepthToSpaceAttr) (output tf.Output) { 8977 if scope.Err() != nil { 8978 return 8979 } 8980 attrs := map[string]interface{}{"block_size": block_size} 8981 for _, a := range optional { 8982 a(attrs) 8983 } 8984 opspec := tf.OpSpec{ 8985 Type: "DepthToSpace", 8986 Input: []tf.Input{ 8987 input, 8988 }, 8989 Attrs: attrs, 8990 } 8991 op := scope.AddOperation(opspec) 8992 return op.Output(0) 8993 } 8994 8995 // Conv3DBackpropInputV2Attr is an optional argument to Conv3DBackpropInputV2. 8996 type Conv3DBackpropInputV2Attr func(optionalAttr) 8997 8998 // Conv3DBackpropInputV2DataFormat sets the optional data_format attribute to value. 8999 // 9000 // value: The data format of the input and output data. With the 9001 // default format "NDHWC", the data is stored in the order of: 9002 // [batch, in_depth, in_height, in_width, in_channels]. 9003 // Alternatively, the format could be "NCDHW", the data storage order is: 9004 // [batch, in_channels, in_depth, in_height, in_width]. 9005 // If not specified, defaults to "NDHWC" 9006 func Conv3DBackpropInputV2DataFormat(value string) Conv3DBackpropInputV2Attr { 9007 return func(m optionalAttr) { 9008 m["data_format"] = value 9009 } 9010 } 9011 9012 // Conv3DBackpropInputV2Dilations sets the optional dilations attribute to value. 9013 // 9014 // value: 1-D tensor of length 5. The dilation factor for each dimension of 9015 // `input`. If set to k > 1, there will be k-1 skipped cells between each 9016 // filter element on that dimension. The dimension order is determined by the 9017 // value of `data_format`, see above for details. Dilations in the batch and 9018 // depth dimensions must be 1. 9019 // If not specified, defaults to <i:1 i:1 i:1 i:1 i:1 > 9020 func Conv3DBackpropInputV2Dilations(value []int64) Conv3DBackpropInputV2Attr { 9021 return func(m optionalAttr) { 9022 m["dilations"] = value 9023 } 9024 } 9025 9026 // Computes the gradients of 3-D convolution with respect to the input. 9027 // 9028 // Arguments: 9029 // input_sizes: An integer vector representing the tensor shape of `input`, 9030 // where `input` is a 5-D 9031 // `[batch, depth, rows, cols, in_channels]` tensor. 9032 // filter: Shape `[depth, rows, cols, in_channels, out_channels]`. 9033 // `in_channels` must match between `input` and `filter`. 9034 // out_backprop: Backprop signal of shape `[batch, out_depth, out_rows, out_cols, 9035 // out_channels]`. 9036 // strides: 1-D tensor of length 5. The stride of the sliding window for each 9037 // dimension of `input`. Must have `strides[0] = strides[4] = 1`. 9038 // padding: The type of padding algorithm to use. 9039 func Conv3DBackpropInputV2(scope *Scope, input_sizes tf.Output, filter tf.Output, out_backprop tf.Output, strides []int64, padding string, optional ...Conv3DBackpropInputV2Attr) (output tf.Output) { 9040 if scope.Err() != nil { 9041 return 9042 } 9043 attrs := map[string]interface{}{"strides": strides, "padding": padding} 9044 for _, a := range optional { 9045 a(attrs) 9046 } 9047 opspec := tf.OpSpec{ 9048 Type: "Conv3DBackpropInputV2", 9049 Input: []tf.Input{ 9050 input_sizes, filter, out_backprop, 9051 }, 9052 Attrs: attrs, 9053 } 9054 op := scope.AddOperation(opspec) 9055 return op.Output(0) 9056 } 9057 9058 // Conv3DBackpropInputAttr is an optional argument to Conv3DBackpropInput. 9059 type Conv3DBackpropInputAttr func(optionalAttr) 9060 9061 // Conv3DBackpropInputDilations sets the optional dilations attribute to value. 9062 // If not specified, defaults to <i:1 i:1 i:1 i:1 i:1 > 9063 func Conv3DBackpropInputDilations(value []int64) Conv3DBackpropInputAttr { 9064 return func(m optionalAttr) { 9065 m["dilations"] = value 9066 } 9067 } 9068 9069 // Computes the gradients of 3-D convolution with respect to the input. 9070 // 9071 // DEPRECATED at GraphDef version 10: Use Conv3DBackpropInputV2 9072 // 9073 // Arguments: 9074 // input: Shape `[batch, depth, rows, cols, in_channels]`. 9075 // filter: Shape `[depth, rows, cols, in_channels, out_channels]`. 9076 // `in_channels` must match between `input` and `filter`. 9077 // out_backprop: Backprop signal of shape `[batch, out_depth, out_rows, out_cols, 9078 // out_channels]`. 9079 // strides: 1-D tensor of length 5. The stride of the sliding window for each 9080 // dimension of `input`. Must have `strides[0] = strides[4] = 1`. 9081 // padding: The type of padding algorithm to use. 9082 func Conv3DBackpropInput(scope *Scope, input tf.Output, filter tf.Output, out_backprop tf.Output, strides []int64, padding string, optional ...Conv3DBackpropInputAttr) (output tf.Output) { 9083 if scope.Err() != nil { 9084 return 9085 } 9086 attrs := map[string]interface{}{"strides": strides, "padding": padding} 9087 for _, a := range optional { 9088 a(attrs) 9089 } 9090 opspec := tf.OpSpec{ 9091 Type: "Conv3DBackpropInput", 9092 Input: []tf.Input{ 9093 input, filter, out_backprop, 9094 }, 9095 Attrs: attrs, 9096 } 9097 op := scope.AddOperation(opspec) 9098 return op.Output(0) 9099 } 9100 9101 // DepthwiseConv2dNativeAttr is an optional argument to DepthwiseConv2dNative. 9102 type DepthwiseConv2dNativeAttr func(optionalAttr) 9103 9104 // DepthwiseConv2dNativeDataFormat sets the optional data_format attribute to value. 9105 // 9106 // value: Specify the data format of the input and output data. With the 9107 // default format "NHWC", the data is stored in the order of: 9108 // [batch, height, width, channels]. 9109 // Alternatively, the format could be "NCHW", the data storage order of: 9110 // [batch, channels, height, width]. 9111 // If not specified, defaults to "NHWC" 9112 func DepthwiseConv2dNativeDataFormat(value string) DepthwiseConv2dNativeAttr { 9113 return func(m optionalAttr) { 9114 m["data_format"] = value 9115 } 9116 } 9117 9118 // DepthwiseConv2dNativeDilations sets the optional dilations attribute to value. 9119 // 9120 // value: 1-D tensor of length 4. The dilation factor for each dimension of 9121 // `input`. If set to k > 1, there will be k-1 skipped cells between each filter 9122 // element on that dimension. The dimension order is determined by the value of 9123 // `data_format`, see above for details. Dilations in the batch and depth 9124 // dimensions must be 1. 9125 // If not specified, defaults to <i:1 i:1 i:1 i:1 > 9126 func DepthwiseConv2dNativeDilations(value []int64) DepthwiseConv2dNativeAttr { 9127 return func(m optionalAttr) { 9128 m["dilations"] = value 9129 } 9130 } 9131 9132 // Computes a 2-D depthwise convolution given 4-D `input` and `filter` tensors. 9133 // 9134 // Given an input tensor of shape `[batch, in_height, in_width, in_channels]` 9135 // and a filter / kernel tensor of shape 9136 // `[filter_height, filter_width, in_channels, channel_multiplier]`, containing 9137 // `in_channels` convolutional filters of depth 1, `depthwise_conv2d` applies 9138 // a different filter to each input channel (expanding from 1 channel to 9139 // `channel_multiplier` channels for each), then concatenates the results 9140 // together. Thus, the output has `in_channels * channel_multiplier` channels. 9141 // 9142 // ``` 9143 // for k in 0..in_channels-1 9144 // for q in 0..channel_multiplier-1 9145 // output[b, i, j, k * channel_multiplier + q] = 9146 // sum_{di, dj} input[b, strides[1] * i + di, strides[2] * j + dj, k] * 9147 // filter[di, dj, k, q] 9148 // ``` 9149 // 9150 // Must have `strides[0] = strides[3] = 1`. For the most common case of the same 9151 // horizontal and vertices strides, `strides = [1, stride, stride, 1]`. 9152 // 9153 // Arguments: 9154 // 9155 // 9156 // strides: 1-D of length 4. The stride of the sliding window for each dimension 9157 // of `input`. 9158 // padding: The type of padding algorithm to use. 9159 func DepthwiseConv2dNative(scope *Scope, input tf.Output, filter tf.Output, strides []int64, padding string, optional ...DepthwiseConv2dNativeAttr) (output tf.Output) { 9160 if scope.Err() != nil { 9161 return 9162 } 9163 attrs := map[string]interface{}{"strides": strides, "padding": padding} 9164 for _, a := range optional { 9165 a(attrs) 9166 } 9167 opspec := tf.OpSpec{ 9168 Type: "DepthwiseConv2dNative", 9169 Input: []tf.Input{ 9170 input, filter, 9171 }, 9172 Attrs: attrs, 9173 } 9174 op := scope.AddOperation(opspec) 9175 return op.Output(0) 9176 } 9177 9178 // MaxPoolGradAttr is an optional argument to MaxPoolGrad. 9179 type MaxPoolGradAttr func(optionalAttr) 9180 9181 // MaxPoolGradDataFormat sets the optional data_format attribute to value. 9182 // 9183 // value: Specify the data format of the input and output data. With the 9184 // default format "NHWC", the data is stored in the order of: 9185 // [batch, in_height, in_width, in_channels]. 9186 // Alternatively, the format could be "NCHW", the data storage order of: 9187 // [batch, in_channels, in_height, in_width]. 9188 // If not specified, defaults to "NHWC" 9189 func MaxPoolGradDataFormat(value string) MaxPoolGradAttr { 9190 return func(m optionalAttr) { 9191 m["data_format"] = value 9192 } 9193 } 9194 9195 // Computes gradients of the maxpooling function. 9196 // 9197 // Arguments: 9198 // orig_input: The original input tensor. 9199 // orig_output: The original output tensor. 9200 // grad: 4-D. Gradients w.r.t. the output of `max_pool`. 9201 // ksize: The size of the window for each dimension of the input tensor. 9202 // strides: The stride of the sliding window for each dimension of the 9203 // input tensor. 9204 // padding: The type of padding algorithm to use. 9205 // 9206 // Returns Gradients w.r.t. the input to `max_pool`. 9207 func MaxPoolGrad(scope *Scope, orig_input tf.Output, orig_output tf.Output, grad tf.Output, ksize []int64, strides []int64, padding string, optional ...MaxPoolGradAttr) (output tf.Output) { 9208 if scope.Err() != nil { 9209 return 9210 } 9211 attrs := map[string]interface{}{"ksize": ksize, "strides": strides, "padding": padding} 9212 for _, a := range optional { 9213 a(attrs) 9214 } 9215 opspec := tf.OpSpec{ 9216 Type: "MaxPoolGrad", 9217 Input: []tf.Input{ 9218 orig_input, orig_output, grad, 9219 }, 9220 Attrs: attrs, 9221 } 9222 op := scope.AddOperation(opspec) 9223 return op.Output(0) 9224 } 9225 9226 // CropAndResizeAttr is an optional argument to CropAndResize. 9227 type CropAndResizeAttr func(optionalAttr) 9228 9229 // CropAndResizeMethod sets the optional method attribute to value. 9230 // 9231 // value: A string specifying the sampling method for resizing. It can be either 9232 // `"bilinear"` or `"nearest"` and default to `"bilinear"`. Currently two sampling 9233 // methods are supported: Bilinear and Nearest Neighbor. 9234 // If not specified, defaults to "bilinear" 9235 func CropAndResizeMethod(value string) CropAndResizeAttr { 9236 return func(m optionalAttr) { 9237 m["method"] = value 9238 } 9239 } 9240 9241 // CropAndResizeExtrapolationValue sets the optional extrapolation_value attribute to value. 9242 // 9243 // value: Value used for extrapolation, when applicable. 9244 // If not specified, defaults to 0 9245 func CropAndResizeExtrapolationValue(value float32) CropAndResizeAttr { 9246 return func(m optionalAttr) { 9247 m["extrapolation_value"] = value 9248 } 9249 } 9250 9251 // Extracts crops from the input image tensor and resizes them. 9252 // 9253 // Extracts crops from the input image tensor and resizes them using bilinear 9254 // sampling or nearest neighbor sampling (possibly with aspect ratio change) to a 9255 // common output size specified by `crop_size`. This is more general than the 9256 // `crop_to_bounding_box` op which extracts a fixed size slice from the input image 9257 // and does not allow resizing or aspect ratio change. 9258 // 9259 // Returns a tensor with `crops` from the input `image` at positions defined at the 9260 // bounding box locations in `boxes`. The cropped boxes are all resized (with 9261 // bilinear or nearest neighbor interpolation) to a fixed 9262 // `size = [crop_height, crop_width]`. The result is a 4-D tensor 9263 // `[num_boxes, crop_height, crop_width, depth]`. The resizing is corner aligned. 9264 // In particular, if `boxes = [[0, 0, 1, 1]]`, the method will give identical 9265 // results to using `tf.image.resize_bilinear()` or 9266 // `tf.image.resize_nearest_neighbor()`(depends on the `method` argument) with 9267 // `align_corners=True`. 9268 // 9269 // Arguments: 9270 // image: A 4-D tensor of shape `[batch, image_height, image_width, depth]`. 9271 // Both `image_height` and `image_width` need to be positive. 9272 // boxes: A 2-D tensor of shape `[num_boxes, 4]`. The `i`-th row of the tensor 9273 // specifies the coordinates of a box in the `box_ind[i]` image and is specified 9274 // in normalized coordinates `[y1, x1, y2, x2]`. A normalized coordinate value of 9275 // `y` is mapped to the image coordinate at `y * (image_height - 1)`, so as the 9276 // `[0, 1]` interval of normalized image height is mapped to 9277 // `[0, image_height - 1]` in image height coordinates. We do allow `y1` > `y2`, in 9278 // which case the sampled crop is an up-down flipped version of the original 9279 // image. The width dimension is treated similarly. Normalized coordinates 9280 // outside the `[0, 1]` range are allowed, in which case we use 9281 // `extrapolation_value` to extrapolate the input image values. 9282 // box_ind: A 1-D tensor of shape `[num_boxes]` with int32 values in `[0, batch)`. 9283 // The value of `box_ind[i]` specifies the image that the `i`-th box refers to. 9284 // crop_size: A 1-D tensor of 2 elements, `size = [crop_height, crop_width]`. All 9285 // cropped image patches are resized to this size. The aspect ratio of the image 9286 // content is not preserved. Both `crop_height` and `crop_width` need to be 9287 // positive. 9288 // 9289 // Returns A 4-D tensor of shape `[num_boxes, crop_height, crop_width, depth]`. 9290 func CropAndResize(scope *Scope, image tf.Output, boxes tf.Output, box_ind tf.Output, crop_size tf.Output, optional ...CropAndResizeAttr) (crops tf.Output) { 9291 if scope.Err() != nil { 9292 return 9293 } 9294 attrs := map[string]interface{}{} 9295 for _, a := range optional { 9296 a(attrs) 9297 } 9298 opspec := tf.OpSpec{ 9299 Type: "CropAndResize", 9300 Input: []tf.Input{ 9301 image, boxes, box_ind, crop_size, 9302 }, 9303 Attrs: attrs, 9304 } 9305 op := scope.AddOperation(opspec) 9306 return op.Output(0) 9307 } 9308 9309 // Conv2DBackpropFilterAttr is an optional argument to Conv2DBackpropFilter. 9310 type Conv2DBackpropFilterAttr func(optionalAttr) 9311 9312 // Conv2DBackpropFilterUseCudnnOnGpu sets the optional use_cudnn_on_gpu attribute to value. 9313 // If not specified, defaults to true 9314 func Conv2DBackpropFilterUseCudnnOnGpu(value bool) Conv2DBackpropFilterAttr { 9315 return func(m optionalAttr) { 9316 m["use_cudnn_on_gpu"] = value 9317 } 9318 } 9319 9320 // Conv2DBackpropFilterExplicitPaddings sets the optional explicit_paddings attribute to value. 9321 // 9322 // value: If `padding` is `"EXPLICIT"`, the list of explicit padding amounts. For the ith 9323 // dimension, the amount of padding inserted before and after the dimension is 9324 // `explicit_paddings[2 * i]` and `explicit_paddings[2 * i + 1]`, respectively. If 9325 // `padding` is not `"EXPLICIT"`, `explicit_paddings` must be empty. 9326 // If not specified, defaults to <> 9327 func Conv2DBackpropFilterExplicitPaddings(value []int64) Conv2DBackpropFilterAttr { 9328 return func(m optionalAttr) { 9329 m["explicit_paddings"] = value 9330 } 9331 } 9332 9333 // Conv2DBackpropFilterDataFormat sets the optional data_format attribute to value. 9334 // 9335 // value: Specify the data format of the input and output data. With the 9336 // default format "NHWC", the data is stored in the order of: 9337 // [batch, in_height, in_width, in_channels]. 9338 // Alternatively, the format could be "NCHW", the data storage order of: 9339 // [batch, in_channels, in_height, in_width]. 9340 // If not specified, defaults to "NHWC" 9341 func Conv2DBackpropFilterDataFormat(value string) Conv2DBackpropFilterAttr { 9342 return func(m optionalAttr) { 9343 m["data_format"] = value 9344 } 9345 } 9346 9347 // Conv2DBackpropFilterDilations sets the optional dilations attribute to value. 9348 // 9349 // value: 1-D tensor of length 4. The dilation factor for each dimension of 9350 // `input`. If set to k > 1, there will be k-1 skipped cells between each filter 9351 // element on that dimension. The dimension order is determined by the value of 9352 // `data_format`, see above for details. Dilations in the batch and depth 9353 // dimensions must be 1. 9354 // If not specified, defaults to <i:1 i:1 i:1 i:1 > 9355 func Conv2DBackpropFilterDilations(value []int64) Conv2DBackpropFilterAttr { 9356 return func(m optionalAttr) { 9357 m["dilations"] = value 9358 } 9359 } 9360 9361 // Computes the gradients of convolution with respect to the filter. 9362 // 9363 // Arguments: 9364 // input: 4-D with shape `[batch, in_height, in_width, in_channels]`. 9365 // filter_sizes: An integer vector representing the tensor shape of `filter`, 9366 // where `filter` is a 4-D 9367 // `[filter_height, filter_width, in_channels, out_channels]` tensor. 9368 // out_backprop: 4-D with shape `[batch, out_height, out_width, out_channels]`. 9369 // Gradients w.r.t. the output of the convolution. 9370 // strides: The stride of the sliding window for each dimension of the input 9371 // of the convolution. Must be in the same order as the dimension specified with 9372 // format. 9373 // padding: The type of padding algorithm to use. 9374 // 9375 // Returns 4-D with shape 9376 // `[filter_height, filter_width, in_channels, out_channels]`. Gradient w.r.t. 9377 // the `filter` input of the convolution. 9378 func Conv2DBackpropFilter(scope *Scope, input tf.Output, filter_sizes tf.Output, out_backprop tf.Output, strides []int64, padding string, optional ...Conv2DBackpropFilterAttr) (output tf.Output) { 9379 if scope.Err() != nil { 9380 return 9381 } 9382 attrs := map[string]interface{}{"strides": strides, "padding": padding} 9383 for _, a := range optional { 9384 a(attrs) 9385 } 9386 opspec := tf.OpSpec{ 9387 Type: "Conv2DBackpropFilter", 9388 Input: []tf.Input{ 9389 input, filter_sizes, out_backprop, 9390 }, 9391 Attrs: attrs, 9392 } 9393 op := scope.AddOperation(opspec) 9394 return op.Output(0) 9395 } 9396 9397 // Computes Psi, the derivative of Lgamma (the log of the absolute value of 9398 // 9399 // `Gamma(x)`), element-wise. 9400 func Digamma(scope *Scope, x tf.Output) (y tf.Output) { 9401 if scope.Err() != nil { 9402 return 9403 } 9404 opspec := tf.OpSpec{ 9405 Type: "Digamma", 9406 Input: []tf.Input{ 9407 x, 9408 }, 9409 } 9410 op := scope.AddOperation(opspec) 9411 return op.Output(0) 9412 } 9413 9414 // Returns the number of work units this Reader has finished processing. 9415 // 9416 // Arguments: 9417 // reader_handle: Handle to a Reader. 9418 func ReaderNumWorkUnitsCompletedV2(scope *Scope, reader_handle tf.Output) (units_completed tf.Output) { 9419 if scope.Err() != nil { 9420 return 9421 } 9422 opspec := tf.OpSpec{ 9423 Type: "ReaderNumWorkUnitsCompletedV2", 9424 Input: []tf.Input{ 9425 reader_handle, 9426 }, 9427 } 9428 op := scope.AddOperation(opspec) 9429 return op.Output(0) 9430 } 9431 9432 // Conv2DAttr is an optional argument to Conv2D. 9433 type Conv2DAttr func(optionalAttr) 9434 9435 // Conv2DUseCudnnOnGpu sets the optional use_cudnn_on_gpu attribute to value. 9436 // If not specified, defaults to true 9437 func Conv2DUseCudnnOnGpu(value bool) Conv2DAttr { 9438 return func(m optionalAttr) { 9439 m["use_cudnn_on_gpu"] = value 9440 } 9441 } 9442 9443 // Conv2DExplicitPaddings sets the optional explicit_paddings attribute to value. 9444 // 9445 // value: If `padding` is `"EXPLICIT"`, the list of explicit padding amounts. For the ith 9446 // dimension, the amount of padding inserted before and after the dimension is 9447 // `explicit_paddings[2 * i]` and `explicit_paddings[2 * i + 1]`, respectively. If 9448 // `padding` is not `"EXPLICIT"`, `explicit_paddings` must be empty. 9449 // If not specified, defaults to <> 9450 func Conv2DExplicitPaddings(value []int64) Conv2DAttr { 9451 return func(m optionalAttr) { 9452 m["explicit_paddings"] = value 9453 } 9454 } 9455 9456 // Conv2DDataFormat sets the optional data_format attribute to value. 9457 // 9458 // value: Specify the data format of the input and output data. With the 9459 // default format "NHWC", the data is stored in the order of: 9460 // [batch, height, width, channels]. 9461 // Alternatively, the format could be "NCHW", the data storage order of: 9462 // [batch, channels, height, width]. 9463 // If not specified, defaults to "NHWC" 9464 func Conv2DDataFormat(value string) Conv2DAttr { 9465 return func(m optionalAttr) { 9466 m["data_format"] = value 9467 } 9468 } 9469 9470 // Conv2DDilations sets the optional dilations attribute to value. 9471 // 9472 // value: 1-D tensor of length 4. The dilation factor for each dimension of 9473 // `input`. If set to k > 1, there will be k-1 skipped cells between each 9474 // filter element on that dimension. The dimension order is determined by the 9475 // value of `data_format`, see above for details. Dilations in the batch and 9476 // depth dimensions must be 1. 9477 // If not specified, defaults to <i:1 i:1 i:1 i:1 > 9478 func Conv2DDilations(value []int64) Conv2DAttr { 9479 return func(m optionalAttr) { 9480 m["dilations"] = value 9481 } 9482 } 9483 9484 // Computes a 2-D convolution given 4-D `input` and `filter` tensors. 9485 // 9486 // Given an input tensor of shape `[batch, in_height, in_width, in_channels]` 9487 // and a filter / kernel tensor of shape 9488 // `[filter_height, filter_width, in_channels, out_channels]`, this op 9489 // performs the following: 9490 // 9491 // 1. Flattens the filter to a 2-D matrix with shape 9492 // `[filter_height * filter_width * in_channels, output_channels]`. 9493 // 2. Extracts image patches from the input tensor to form a *virtual* 9494 // tensor of shape `[batch, out_height, out_width, 9495 // filter_height * filter_width * in_channels]`. 9496 // 3. For each patch, right-multiplies the filter matrix and the image patch 9497 // vector. 9498 // 9499 // In detail, with the default NHWC format, 9500 // 9501 // output[b, i, j, k] = 9502 // sum_{di, dj, q} input[b, strides[1] * i + di, strides[2] * j + dj, q] * 9503 // filter[di, dj, q, k] 9504 // 9505 // Must have `strides[0] = strides[3] = 1`. For the most common case of the same 9506 // horizontal and vertices strides, `strides = [1, stride, stride, 1]`. 9507 // 9508 // Arguments: 9509 // input: A 4-D tensor. The dimension order is interpreted according to the value 9510 // of `data_format`, see below for details. 9511 // filter: A 4-D tensor of shape 9512 // `[filter_height, filter_width, in_channels, out_channels]` 9513 // strides: 1-D tensor of length 4. The stride of the sliding window for each 9514 // dimension of `input`. The dimension order is determined by the value of 9515 // `data_format`, see below for details. 9516 // padding: The type of padding algorithm to use. 9517 // 9518 // Returns A 4-D tensor. The dimension order is determined by the value of 9519 // `data_format`, see below for details. 9520 func Conv2D(scope *Scope, input tf.Output, filter tf.Output, strides []int64, padding string, optional ...Conv2DAttr) (output tf.Output) { 9521 if scope.Err() != nil { 9522 return 9523 } 9524 attrs := map[string]interface{}{"strides": strides, "padding": padding} 9525 for _, a := range optional { 9526 a(attrs) 9527 } 9528 opspec := tf.OpSpec{ 9529 Type: "Conv2D", 9530 Input: []tf.Input{ 9531 input, filter, 9532 }, 9533 Attrs: attrs, 9534 } 9535 op := scope.AddOperation(opspec) 9536 return op.Output(0) 9537 } 9538 9539 // Fills empty rows in the input 2-D `SparseTensor` with a default value. 9540 // 9541 // The input `SparseTensor` is represented via the tuple of inputs 9542 // (`indices`, `values`, `dense_shape`). The output `SparseTensor` has the 9543 // same `dense_shape` but with indices `output_indices` and values 9544 // `output_values`. 9545 // 9546 // This op inserts a single entry for every row that doesn't have any values. 9547 // The index is created as `[row, 0, ..., 0]` and the inserted value 9548 // is `default_value`. 9549 // 9550 // For example, suppose `sp_input` has shape `[5, 6]` and non-empty values: 9551 // 9552 // [0, 1]: a 9553 // [0, 3]: b 9554 // [2, 0]: c 9555 // [3, 1]: d 9556 // 9557 // Rows 1 and 4 are empty, so the output will be of shape `[5, 6]` with values: 9558 // 9559 // [0, 1]: a 9560 // [0, 3]: b 9561 // [1, 0]: default_value 9562 // [2, 0]: c 9563 // [3, 1]: d 9564 // [4, 0]: default_value 9565 // 9566 // The output `SparseTensor` will be in row-major order and will have the 9567 // same shape as the input. 9568 // 9569 // This op also returns an indicator vector shaped `[dense_shape[0]]` such that 9570 // 9571 // empty_row_indicator[i] = True iff row i was an empty row. 9572 // 9573 // And a reverse index map vector shaped `[indices.shape[0]]` that is used during 9574 // backpropagation, 9575 // 9576 // reverse_index_map[j] = out_j s.t. indices[j, :] == output_indices[out_j, :] 9577 // 9578 // Arguments: 9579 // indices: 2-D. the indices of the sparse tensor. 9580 // values: 1-D. the values of the sparse tensor. 9581 // dense_shape: 1-D. the shape of the sparse tensor. 9582 // default_value: 0-D. default value to insert into location `[row, 0, ..., 0]` 9583 // for rows missing from the input sparse tensor. 9584 // output indices: 2-D. the indices of the filled sparse tensor. 9585 // 9586 // Returns 1-D. the values of the filled sparse tensor.1-D. whether the dense row was missing in the 9587 // input sparse tensor.1-D. a map from the input indices to the output indices. 9588 func SparseFillEmptyRows(scope *Scope, indices tf.Output, values tf.Output, dense_shape tf.Output, default_value tf.Output) (output_indices tf.Output, output_values tf.Output, empty_row_indicator tf.Output, reverse_index_map tf.Output) { 9589 if scope.Err() != nil { 9590 return 9591 } 9592 opspec := tf.OpSpec{ 9593 Type: "SparseFillEmptyRows", 9594 Input: []tf.Input{ 9595 indices, values, dense_shape, default_value, 9596 }, 9597 } 9598 op := scope.AddOperation(opspec) 9599 return op.Output(0), op.Output(1), op.Output(2), op.Output(3) 9600 } 9601 9602 // LoadTPUEmbeddingADAMParametersGradAccumDebugAttr is an optional argument to LoadTPUEmbeddingADAMParametersGradAccumDebug. 9603 type LoadTPUEmbeddingADAMParametersGradAccumDebugAttr func(optionalAttr) 9604 9605 // LoadTPUEmbeddingADAMParametersGradAccumDebugTableId sets the optional table_id attribute to value. 9606 // If not specified, defaults to -1 9607 // 9608 // REQUIRES: value >= -1 9609 func LoadTPUEmbeddingADAMParametersGradAccumDebugTableId(value int64) LoadTPUEmbeddingADAMParametersGradAccumDebugAttr { 9610 return func(m optionalAttr) { 9611 m["table_id"] = value 9612 } 9613 } 9614 9615 // LoadTPUEmbeddingADAMParametersGradAccumDebugTableName sets the optional table_name attribute to value. 9616 // If not specified, defaults to "" 9617 func LoadTPUEmbeddingADAMParametersGradAccumDebugTableName(value string) LoadTPUEmbeddingADAMParametersGradAccumDebugAttr { 9618 return func(m optionalAttr) { 9619 m["table_name"] = value 9620 } 9621 } 9622 9623 // Load ADAM embedding parameters with debug support. 9624 // 9625 // An op that loads optimization parameters into HBM for embedding. Must be 9626 // preceded by a ConfigureTPUEmbeddingHost op that sets up the correct 9627 // embedding table configuration. For example, this op is used to install 9628 // parameters that are loaded from a checkpoint before a training loop is 9629 // executed. 9630 // 9631 // Arguments: 9632 // parameters: Value of parameters used in the ADAM optimization algorithm. 9633 // momenta: Value of momenta used in the ADAM optimization algorithm. 9634 // velocities: Value of velocities used in the ADAM optimization algorithm. 9635 // gradient_accumulators: Value of gradient_accumulators used in the ADAM optimization algorithm. 9636 // 9637 // 9638 // 9639 // Returns the created operation. 9640 func LoadTPUEmbeddingADAMParametersGradAccumDebug(scope *Scope, parameters tf.Output, momenta tf.Output, velocities tf.Output, gradient_accumulators tf.Output, num_shards int64, shard_id int64, optional ...LoadTPUEmbeddingADAMParametersGradAccumDebugAttr) (o *tf.Operation) { 9641 if scope.Err() != nil { 9642 return 9643 } 9644 attrs := map[string]interface{}{"num_shards": num_shards, "shard_id": shard_id} 9645 for _, a := range optional { 9646 a(attrs) 9647 } 9648 opspec := tf.OpSpec{ 9649 Type: "LoadTPUEmbeddingADAMParametersGradAccumDebug", 9650 Input: []tf.Input{ 9651 parameters, momenta, velocities, gradient_accumulators, 9652 }, 9653 Attrs: attrs, 9654 } 9655 return scope.AddOperation(opspec) 9656 } 9657 9658 // BiasAddAttr is an optional argument to BiasAdd. 9659 type BiasAddAttr func(optionalAttr) 9660 9661 // BiasAddDataFormat sets the optional data_format attribute to value. 9662 // 9663 // value: Specify the data format of the input and output data. With the 9664 // default format "NHWC", the bias tensor will be added to the last dimension 9665 // of the value tensor. 9666 // Alternatively, the format could be "NCHW", the data storage order of: 9667 // [batch, in_channels, in_height, in_width]. 9668 // The tensor will be added to "in_channels", the third-to-the-last 9669 // dimension. 9670 // If not specified, defaults to "NHWC" 9671 func BiasAddDataFormat(value string) BiasAddAttr { 9672 return func(m optionalAttr) { 9673 m["data_format"] = value 9674 } 9675 } 9676 9677 // Adds `bias` to `value`. 9678 // 9679 // This is a special case of `tf.add` where `bias` is restricted to be 1-D. 9680 // Broadcasting is supported, so `value` may have any number of dimensions. 9681 // 9682 // Arguments: 9683 // value: Any number of dimensions. 9684 // bias: 1-D with size the last dimension of `value`. 9685 // 9686 // Returns Broadcasted sum of `value` and `bias`. 9687 func BiasAdd(scope *Scope, value tf.Output, bias tf.Output, optional ...BiasAddAttr) (output tf.Output) { 9688 if scope.Err() != nil { 9689 return 9690 } 9691 attrs := map[string]interface{}{} 9692 for _, a := range optional { 9693 a(attrs) 9694 } 9695 opspec := tf.OpSpec{ 9696 Type: "BiasAdd", 9697 Input: []tf.Input{ 9698 value, bias, 9699 }, 9700 Attrs: attrs, 9701 } 9702 op := scope.AddOperation(opspec) 9703 return op.Output(0) 9704 } 9705 9706 // SparseReduceSumSparseAttr is an optional argument to SparseReduceSumSparse. 9707 type SparseReduceSumSparseAttr func(optionalAttr) 9708 9709 // SparseReduceSumSparseKeepDims sets the optional keep_dims attribute to value. 9710 // 9711 // value: If true, retain reduced dimensions with length 1. 9712 // If not specified, defaults to false 9713 func SparseReduceSumSparseKeepDims(value bool) SparseReduceSumSparseAttr { 9714 return func(m optionalAttr) { 9715 m["keep_dims"] = value 9716 } 9717 } 9718 9719 // Computes the sum of elements across dimensions of a SparseTensor. 9720 // 9721 // This Op takes a SparseTensor and is the sparse counterpart to 9722 // `tf.reduce_sum()`. In contrast to SparseReduceSum, this Op returns a 9723 // SparseTensor. 9724 // 9725 // Reduces `sp_input` along the dimensions given in `reduction_axes`. Unless 9726 // `keep_dims` is true, the rank of the tensor is reduced by 1 for each entry in 9727 // `reduction_axes`. If `keep_dims` is true, the reduced dimensions are retained 9728 // with length 1. 9729 // 9730 // If `reduction_axes` has no entries, all dimensions are reduced, and a tensor 9731 // with a single element is returned. Additionally, the axes can be negative, 9732 // which are interpreted according to the indexing rules in Python. 9733 // 9734 // Arguments: 9735 // input_indices: 2-D. `N x R` matrix with the indices of non-empty values in a 9736 // SparseTensor, possibly not in canonical ordering. 9737 // input_values: 1-D. `N` non-empty values corresponding to `input_indices`. 9738 // input_shape: 1-D. Shape of the input SparseTensor. 9739 // reduction_axes: 1-D. Length-`K` vector containing the reduction axes. 9740 func SparseReduceSumSparse(scope *Scope, input_indices tf.Output, input_values tf.Output, input_shape tf.Output, reduction_axes tf.Output, optional ...SparseReduceSumSparseAttr) (output_indices tf.Output, output_values tf.Output, output_shape tf.Output) { 9741 if scope.Err() != nil { 9742 return 9743 } 9744 attrs := map[string]interface{}{} 9745 for _, a := range optional { 9746 a(attrs) 9747 } 9748 opspec := tf.OpSpec{ 9749 Type: "SparseReduceSumSparse", 9750 Input: []tf.Input{ 9751 input_indices, input_values, input_shape, reduction_axes, 9752 }, 9753 Attrs: attrs, 9754 } 9755 op := scope.AddOperation(opspec) 9756 return op.Output(0), op.Output(1), op.Output(2) 9757 } 9758 9759 // LoadTPUEmbeddingStochasticGradientDescentParametersAttr is an optional argument to LoadTPUEmbeddingStochasticGradientDescentParameters. 9760 type LoadTPUEmbeddingStochasticGradientDescentParametersAttr func(optionalAttr) 9761 9762 // LoadTPUEmbeddingStochasticGradientDescentParametersTableId sets the optional table_id attribute to value. 9763 // If not specified, defaults to -1 9764 // 9765 // REQUIRES: value >= -1 9766 func LoadTPUEmbeddingStochasticGradientDescentParametersTableId(value int64) LoadTPUEmbeddingStochasticGradientDescentParametersAttr { 9767 return func(m optionalAttr) { 9768 m["table_id"] = value 9769 } 9770 } 9771 9772 // LoadTPUEmbeddingStochasticGradientDescentParametersTableName sets the optional table_name attribute to value. 9773 // If not specified, defaults to "" 9774 func LoadTPUEmbeddingStochasticGradientDescentParametersTableName(value string) LoadTPUEmbeddingStochasticGradientDescentParametersAttr { 9775 return func(m optionalAttr) { 9776 m["table_name"] = value 9777 } 9778 } 9779 9780 // Load SGD embedding parameters. 9781 // 9782 // An op that loads optimization parameters into HBM for embedding. Must be 9783 // preceded by a ConfigureTPUEmbeddingHost op that sets up the correct 9784 // embedding table configuration. For example, this op is used to install 9785 // parameters that are loaded from a checkpoint before a training loop is 9786 // executed. 9787 // 9788 // Arguments: 9789 // parameters: Value of parameters used in the stochastic gradient descent optimization algorithm. 9790 // 9791 // 9792 // 9793 // Returns the created operation. 9794 func LoadTPUEmbeddingStochasticGradientDescentParameters(scope *Scope, parameters tf.Output, num_shards int64, shard_id int64, optional ...LoadTPUEmbeddingStochasticGradientDescentParametersAttr) (o *tf.Operation) { 9795 if scope.Err() != nil { 9796 return 9797 } 9798 attrs := map[string]interface{}{"num_shards": num_shards, "shard_id": shard_id} 9799 for _, a := range optional { 9800 a(attrs) 9801 } 9802 opspec := tf.OpSpec{ 9803 Type: "LoadTPUEmbeddingStochasticGradientDescentParameters", 9804 Input: []tf.Input{ 9805 parameters, 9806 }, 9807 Attrs: attrs, 9808 } 9809 return scope.AddOperation(opspec) 9810 } 9811 9812 // Selects the k nearest centers for each point. 9813 // 9814 // Rows of points are assumed to be input points. Rows of centers are assumed to be 9815 // the list of candidate centers. For each point, the k centers that have least L2 9816 // distance to it are computed. 9817 // 9818 // Arguments: 9819 // points: Matrix of shape (n, d). Rows are assumed to be input points. 9820 // centers: Matrix of shape (m, d). Rows are assumed to be centers. 9821 // k: Number of nearest centers to return for each point. If k is larger than m, then 9822 // only m centers are returned. 9823 // 9824 // Returns Matrix of shape (n, min(m, k)). Each row contains the indices of the centers 9825 // closest to the corresponding point, ordered by increasing distance.Matrix of shape (n, min(m, k)). Each row contains the squared L2 distance to the 9826 // corresponding center in nearest_center_indices. 9827 func NearestNeighbors(scope *Scope, points tf.Output, centers tf.Output, k tf.Output) (nearest_center_indices tf.Output, nearest_center_distances tf.Output) { 9828 if scope.Err() != nil { 9829 return 9830 } 9831 opspec := tf.OpSpec{ 9832 Type: "NearestNeighbors", 9833 Input: []tf.Input{ 9834 points, centers, k, 9835 }, 9836 } 9837 op := scope.AddOperation(opspec) 9838 return op.Output(0), op.Output(1) 9839 } 9840 9841 // Returns x * y element-wise. 9842 // 9843 // *NOTE*: `Multiply` supports broadcasting. More about broadcasting 9844 // [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html) 9845 func Mul(scope *Scope, x tf.Output, y tf.Output) (z tf.Output) { 9846 if scope.Err() != nil { 9847 return 9848 } 9849 opspec := tf.OpSpec{ 9850 Type: "Mul", 9851 Input: []tf.Input{ 9852 x, y, 9853 }, 9854 } 9855 op := scope.AddOperation(opspec) 9856 return op.Output(0) 9857 } 9858 9859 // FusedBatchNormV2Attr is an optional argument to FusedBatchNormV2. 9860 type FusedBatchNormV2Attr func(optionalAttr) 9861 9862 // FusedBatchNormV2Epsilon sets the optional epsilon attribute to value. 9863 // 9864 // value: A small float number added to the variance of x. 9865 // If not specified, defaults to 0.0001 9866 func FusedBatchNormV2Epsilon(value float32) FusedBatchNormV2Attr { 9867 return func(m optionalAttr) { 9868 m["epsilon"] = value 9869 } 9870 } 9871 9872 // FusedBatchNormV2DataFormat sets the optional data_format attribute to value. 9873 // 9874 // value: The data format for x and y. Either "NHWC" (default) or "NCHW". 9875 // If not specified, defaults to "NHWC" 9876 func FusedBatchNormV2DataFormat(value string) FusedBatchNormV2Attr { 9877 return func(m optionalAttr) { 9878 m["data_format"] = value 9879 } 9880 } 9881 9882 // FusedBatchNormV2IsTraining sets the optional is_training attribute to value. 9883 // 9884 // value: A bool value to indicate the operation is for training (default) 9885 // or inference. 9886 // If not specified, defaults to true 9887 func FusedBatchNormV2IsTraining(value bool) FusedBatchNormV2Attr { 9888 return func(m optionalAttr) { 9889 m["is_training"] = value 9890 } 9891 } 9892 9893 // Batch normalization. 9894 // 9895 // Note that the size of 4D Tensors are defined by either "NHWC" or "NCHW". 9896 // The size of 1D Tensors matches the dimension C of the 4D Tensors. 9897 // 9898 // Arguments: 9899 // x: A 4D Tensor for input data. 9900 // scale: A 1D Tensor for scaling factor, to scale the normalized x. 9901 // offset: A 1D Tensor for offset, to shift to the normalized x. 9902 // mean: A 1D Tensor for population mean. Used for inference only; 9903 // must be empty for training. 9904 // variance: A 1D Tensor for population variance. Used for inference only; 9905 // must be empty for training. 9906 // 9907 // Returns A 4D Tensor for output data.A 1D Tensor for the computed batch mean, to be used by TensorFlow 9908 // to compute the running mean.A 1D Tensor for the computed batch variance, to be used by 9909 // TensorFlow to compute the running variance.A 1D Tensor for the computed batch mean, to be reused 9910 // in the gradient computation.A 1D Tensor for the computed batch variance (inverted variance 9911 // in the cuDNN case), to be reused in the gradient computation. 9912 func FusedBatchNormV2(scope *Scope, x tf.Output, scale tf.Output, offset tf.Output, mean tf.Output, variance tf.Output, optional ...FusedBatchNormV2Attr) (y tf.Output, batch_mean tf.Output, batch_variance tf.Output, reserve_space_1 tf.Output, reserve_space_2 tf.Output) { 9913 if scope.Err() != nil { 9914 return 9915 } 9916 attrs := map[string]interface{}{} 9917 for _, a := range optional { 9918 a(attrs) 9919 } 9920 opspec := tf.OpSpec{ 9921 Type: "FusedBatchNormV2", 9922 Input: []tf.Input{ 9923 x, scale, offset, mean, variance, 9924 }, 9925 Attrs: attrs, 9926 } 9927 op := scope.AddOperation(opspec) 9928 return op.Output(0), op.Output(1), op.Output(2), op.Output(3), op.Output(4) 9929 } 9930 9931 // Reverses specific dimensions of a tensor. 9932 // 9933 // NOTE `tf.reverse` has now changed behavior in preparation for 1.0. 9934 // `tf.reverse_v2` is currently an alias that will be deprecated before TF 1.0. 9935 // 9936 // Given a `tensor`, and a `int32` tensor `axis` representing the set of 9937 // dimensions of `tensor` to reverse. This operation reverses each dimension 9938 // `i` for which there exists `j` s.t. `axis[j] == i`. 9939 // 9940 // `tensor` can have up to 8 dimensions. The number of dimensions specified 9941 // in `axis` may be 0 or more entries. If an index is specified more than 9942 // once, a InvalidArgument error is raised. 9943 // 9944 // For example: 9945 // 9946 // ``` 9947 // # tensor 't' is [[[[ 0, 1, 2, 3], 9948 // # [ 4, 5, 6, 7], 9949 // # [ 8, 9, 10, 11]], 9950 // # [[12, 13, 14, 15], 9951 // # [16, 17, 18, 19], 9952 // # [20, 21, 22, 23]]]] 9953 // # tensor 't' shape is [1, 2, 3, 4] 9954 // 9955 // # 'dims' is [3] or 'dims' is [-1] 9956 // reverse(t, dims) ==> [[[[ 3, 2, 1, 0], 9957 // [ 7, 6, 5, 4], 9958 // [ 11, 10, 9, 8]], 9959 // [[15, 14, 13, 12], 9960 // [19, 18, 17, 16], 9961 // [23, 22, 21, 20]]]] 9962 // 9963 // # 'dims' is '[1]' (or 'dims' is '[-3]') 9964 // reverse(t, dims) ==> [[[[12, 13, 14, 15], 9965 // [16, 17, 18, 19], 9966 // [20, 21, 22, 23] 9967 // [[ 0, 1, 2, 3], 9968 // [ 4, 5, 6, 7], 9969 // [ 8, 9, 10, 11]]]] 9970 // 9971 // # 'dims' is '[2]' (or 'dims' is '[-2]') 9972 // reverse(t, dims) ==> [[[[8, 9, 10, 11], 9973 // [4, 5, 6, 7], 9974 // [0, 1, 2, 3]] 9975 // [[20, 21, 22, 23], 9976 // [16, 17, 18, 19], 9977 // [12, 13, 14, 15]]]] 9978 // ``` 9979 // 9980 // Arguments: 9981 // tensor: Up to 8-D. 9982 // axis: 1-D. The indices of the dimensions to reverse. Must be in the range 9983 // `[-rank(tensor), rank(tensor))`. 9984 // 9985 // Returns The same shape as `tensor`. 9986 func ReverseV2(scope *Scope, tensor tf.Output, axis tf.Output) (output tf.Output) { 9987 if scope.Err() != nil { 9988 return 9989 } 9990 opspec := tf.OpSpec{ 9991 Type: "ReverseV2", 9992 Input: []tf.Input{ 9993 tensor, axis, 9994 }, 9995 } 9996 op := scope.AddOperation(opspec) 9997 return op.Output(0) 9998 } 9999 10000 // Adds `bias` to `value`. 10001 // 10002 // This is a deprecated version of BiasAdd and will be soon removed. 10003 // 10004 // This is a special case of `tf.add` where `bias` is restricted to be 1-D. 10005 // Broadcasting is supported, so `value` may have any number of dimensions. 10006 // 10007 // Arguments: 10008 // value: Any number of dimensions. 10009 // bias: 1-D with size the last dimension of `value`. 10010 // 10011 // Returns Broadcasted sum of `value` and `bias`. 10012 func BiasAddV1(scope *Scope, value tf.Output, bias tf.Output) (output tf.Output) { 10013 if scope.Err() != nil { 10014 return 10015 } 10016 opspec := tf.OpSpec{ 10017 Type: "BiasAddV1", 10018 Input: []tf.Input{ 10019 value, bias, 10020 }, 10021 } 10022 op := scope.AddOperation(opspec) 10023 return op.Output(0) 10024 } 10025 10026 // Selects num_to_sample rows of input using the KMeans++ criterion. 10027 // 10028 // Rows of points are assumed to be input points. One row is selected at random. 10029 // Subsequent rows are sampled with probability proportional to the squared L2 10030 // distance from the nearest row selected thus far till num_to_sample rows have 10031 // been sampled. 10032 // 10033 // Arguments: 10034 // points: Matrix of shape (n, d). Rows are assumed to be input points. 10035 // num_to_sample: Scalar. The number of rows to sample. This value must not be larger than n. 10036 // seed: Scalar. Seed for initializing the random number generator. 10037 // num_retries_per_sample: Scalar. For each row that is sampled, this parameter 10038 // specifies the number of additional points to draw from the current 10039 // distribution before selecting the best. If a negative value is specified, a 10040 // heuristic is used to sample O(log(num_to_sample)) additional points. 10041 // 10042 // Returns Matrix of shape (num_to_sample, d). The sampled rows. 10043 func KmeansPlusPlusInitialization(scope *Scope, points tf.Output, num_to_sample tf.Output, seed tf.Output, num_retries_per_sample tf.Output) (samples tf.Output) { 10044 if scope.Err() != nil { 10045 return 10046 } 10047 opspec := tf.OpSpec{ 10048 Type: "KmeansPlusPlusInitialization", 10049 Input: []tf.Input{ 10050 points, num_to_sample, seed, num_retries_per_sample, 10051 }, 10052 } 10053 op := scope.AddOperation(opspec) 10054 return op.Output(0) 10055 } 10056 10057 // Transforms a Tensor into a serialized TensorProto proto. 10058 // 10059 // Arguments: 10060 // tensor: A Tensor of type `T`. 10061 // 10062 // Returns A serialized TensorProto proto of the input tensor. 10063 func SerializeTensor(scope *Scope, tensor tf.Output) (serialized tf.Output) { 10064 if scope.Err() != nil { 10065 return 10066 } 10067 opspec := tf.OpSpec{ 10068 Type: "SerializeTensor", 10069 Input: []tf.Input{ 10070 tensor, 10071 }, 10072 } 10073 op := scope.AddOperation(opspec) 10074 return op.Output(0) 10075 } 10076 10077 // UnbatchGradAttr is an optional argument to UnbatchGrad. 10078 type UnbatchGradAttr func(optionalAttr) 10079 10080 // UnbatchGradContainer sets the optional container attribute to value. 10081 // If not specified, defaults to "" 10082 func UnbatchGradContainer(value string) UnbatchGradAttr { 10083 return func(m optionalAttr) { 10084 m["container"] = value 10085 } 10086 } 10087 10088 // UnbatchGradSharedName sets the optional shared_name attribute to value. 10089 // If not specified, defaults to "" 10090 func UnbatchGradSharedName(value string) UnbatchGradAttr { 10091 return func(m optionalAttr) { 10092 m["shared_name"] = value 10093 } 10094 } 10095 10096 // Gradient of Unbatch. 10097 // 10098 // Acts like Batch but using the given batch_index index of batching things as they 10099 // become available. This ensures that the gradients are propagated back in the 10100 // same session which did the forward pass. 10101 // 10102 // original_input: The input to the Unbatch operation this is the gradient of. 10103 // batch_index: The batch_index given to the Unbatch operation this is the gradient 10104 // of. 10105 // grad: The downstream gradient. 10106 // id: The id scalar emitted by Batch. 10107 // batched_grad: The return value, either an empty tensor or the batched gradient. 10108 // container: Container to control resource sharing. 10109 // shared_name: Instances of UnbatchGrad with the same container and shared_name 10110 // are assumed to possibly belong to the same batch. If left empty, the op name 10111 // will be used as the shared name. 10112 func UnbatchGrad(scope *Scope, original_input tf.Output, batch_index tf.Output, grad tf.Output, id tf.Output, optional ...UnbatchGradAttr) (batched_grad tf.Output) { 10113 if scope.Err() != nil { 10114 return 10115 } 10116 attrs := map[string]interface{}{} 10117 for _, a := range optional { 10118 a(attrs) 10119 } 10120 opspec := tf.OpSpec{ 10121 Type: "UnbatchGrad", 10122 Input: []tf.Input{ 10123 original_input, batch_index, grad, id, 10124 }, 10125 Attrs: attrs, 10126 } 10127 op := scope.AddOperation(opspec) 10128 return op.Output(0) 10129 } 10130 10131 // AvgPool3DGradAttr is an optional argument to AvgPool3DGrad. 10132 type AvgPool3DGradAttr func(optionalAttr) 10133 10134 // AvgPool3DGradDataFormat sets the optional data_format attribute to value. 10135 // 10136 // value: The data format of the input and output data. With the 10137 // default format "NDHWC", the data is stored in the order of: 10138 // [batch, in_depth, in_height, in_width, in_channels]. 10139 // Alternatively, the format could be "NCDHW", the data storage order is: 10140 // [batch, in_channels, in_depth, in_height, in_width]. 10141 // If not specified, defaults to "NDHWC" 10142 func AvgPool3DGradDataFormat(value string) AvgPool3DGradAttr { 10143 return func(m optionalAttr) { 10144 m["data_format"] = value 10145 } 10146 } 10147 10148 // Computes gradients of average pooling function. 10149 // 10150 // Arguments: 10151 // orig_input_shape: The original input dimensions. 10152 // grad: Output backprop of shape `[batch, depth, rows, cols, channels]`. 10153 // ksize: 1-D tensor of length 5. The size of the window for each dimension of 10154 // the input tensor. Must have `ksize[0] = ksize[4] = 1`. 10155 // strides: 1-D tensor of length 5. The stride of the sliding window for each 10156 // dimension of `input`. Must have `strides[0] = strides[4] = 1`. 10157 // padding: The type of padding algorithm to use. 10158 // 10159 // Returns The backprop for input. 10160 func AvgPool3DGrad(scope *Scope, orig_input_shape tf.Output, grad tf.Output, ksize []int64, strides []int64, padding string, optional ...AvgPool3DGradAttr) (output tf.Output) { 10161 if scope.Err() != nil { 10162 return 10163 } 10164 attrs := map[string]interface{}{"ksize": ksize, "strides": strides, "padding": padding} 10165 for _, a := range optional { 10166 a(attrs) 10167 } 10168 opspec := tf.OpSpec{ 10169 Type: "AvgPool3DGrad", 10170 Input: []tf.Input{ 10171 orig_input_shape, grad, 10172 }, 10173 Attrs: attrs, 10174 } 10175 op := scope.AddOperation(opspec) 10176 return op.Output(0) 10177 } 10178 10179 // ParseSingleSequenceExampleAttr is an optional argument to ParseSingleSequenceExample. 10180 type ParseSingleSequenceExampleAttr func(optionalAttr) 10181 10182 // ParseSingleSequenceExampleContextSparseTypes sets the optional context_sparse_types attribute to value. 10183 // 10184 // value: A list of Ncontext_sparse types; the data types of data in 10185 // each context Feature given in context_sparse_keys. 10186 // Currently the ParseSingleSequenceExample supports DT_FLOAT (FloatList), 10187 // DT_INT64 (Int64List), and DT_STRING (BytesList). 10188 // If not specified, defaults to <> 10189 // 10190 // REQUIRES: len(value) >= 0 10191 func ParseSingleSequenceExampleContextSparseTypes(value []tf.DataType) ParseSingleSequenceExampleAttr { 10192 return func(m optionalAttr) { 10193 m["context_sparse_types"] = value 10194 } 10195 } 10196 10197 // ParseSingleSequenceExampleFeatureListDenseTypes sets the optional feature_list_dense_types attribute to value. 10198 // If not specified, defaults to <> 10199 // 10200 // REQUIRES: len(value) >= 0 10201 func ParseSingleSequenceExampleFeatureListDenseTypes(value []tf.DataType) ParseSingleSequenceExampleAttr { 10202 return func(m optionalAttr) { 10203 m["feature_list_dense_types"] = value 10204 } 10205 } 10206 10207 // ParseSingleSequenceExampleContextDenseShapes sets the optional context_dense_shapes attribute to value. 10208 // 10209 // value: A list of Ncontext_dense shapes; the shapes of data in 10210 // each context Feature given in context_dense_keys. 10211 // The number of elements in the Feature corresponding to context_dense_key[j] 10212 // must always equal context_dense_shapes[j].NumEntries(). 10213 // The shape of context_dense_values[j] will match context_dense_shapes[j]. 10214 // If not specified, defaults to <> 10215 // 10216 // REQUIRES: len(value) >= 0 10217 func ParseSingleSequenceExampleContextDenseShapes(value []tf.Shape) ParseSingleSequenceExampleAttr { 10218 return func(m optionalAttr) { 10219 m["context_dense_shapes"] = value 10220 } 10221 } 10222 10223 // ParseSingleSequenceExampleFeatureListSparseTypes sets the optional feature_list_sparse_types attribute to value. 10224 // 10225 // value: A list of Nfeature_list_sparse types; the data types 10226 // of data in each FeatureList given in feature_list_sparse_keys. 10227 // Currently the ParseSingleSequenceExample supports DT_FLOAT (FloatList), 10228 // DT_INT64 (Int64List), and DT_STRING (BytesList). 10229 // If not specified, defaults to <> 10230 // 10231 // REQUIRES: len(value) >= 0 10232 func ParseSingleSequenceExampleFeatureListSparseTypes(value []tf.DataType) ParseSingleSequenceExampleAttr { 10233 return func(m optionalAttr) { 10234 m["feature_list_sparse_types"] = value 10235 } 10236 } 10237 10238 // ParseSingleSequenceExampleFeatureListDenseShapes sets the optional feature_list_dense_shapes attribute to value. 10239 // 10240 // value: A list of Nfeature_list_dense shapes; the shapes of 10241 // data in each FeatureList given in feature_list_dense_keys. 10242 // The shape of each Feature in the FeatureList corresponding to 10243 // feature_list_dense_key[j] must always equal 10244 // feature_list_dense_shapes[j].NumEntries(). 10245 // If not specified, defaults to <> 10246 // 10247 // REQUIRES: len(value) >= 0 10248 func ParseSingleSequenceExampleFeatureListDenseShapes(value []tf.Shape) ParseSingleSequenceExampleAttr { 10249 return func(m optionalAttr) { 10250 m["feature_list_dense_shapes"] = value 10251 } 10252 } 10253 10254 // Transforms a scalar brain.SequenceExample proto (as strings) into typed tensors. 10255 // 10256 // Arguments: 10257 // serialized: A scalar containing a binary serialized SequenceExample proto. 10258 // feature_list_dense_missing_assumed_empty: A vector listing the 10259 // FeatureList keys which may be missing from the SequenceExample. If the 10260 // associated FeatureList is missing, it is treated as empty. By default, 10261 // any FeatureList not listed in this vector must exist in the SequenceExample. 10262 // context_sparse_keys: A list of Ncontext_sparse string Tensors (scalars). 10263 // The keys expected in the Examples' features associated with context_sparse 10264 // values. 10265 // context_dense_keys: A list of Ncontext_dense string Tensors (scalars). 10266 // The keys expected in the SequenceExamples' context features associated with 10267 // dense values. 10268 // feature_list_sparse_keys: A list of Nfeature_list_sparse string Tensors 10269 // (scalars). The keys expected in the FeatureLists associated with sparse 10270 // values. 10271 // feature_list_dense_keys: A list of Nfeature_list_dense string Tensors (scalars). 10272 // The keys expected in the SequenceExamples' feature_lists associated 10273 // with lists of dense values. 10274 // context_dense_defaults: A list of Ncontext_dense Tensors (some may be empty). 10275 // context_dense_defaults[j] provides default values 10276 // when the SequenceExample's context map lacks context_dense_key[j]. 10277 // If an empty Tensor is provided for context_dense_defaults[j], 10278 // then the Feature context_dense_keys[j] is required. 10279 // The input type is inferred from context_dense_defaults[j], even when it's 10280 // empty. If context_dense_defaults[j] is not empty, its shape must match 10281 // context_dense_shapes[j]. 10282 // debug_name: A scalar containing the name of the serialized proto. 10283 // May contain, for example, table key (descriptive) name for the 10284 // corresponding serialized proto. This is purely useful for debugging 10285 // purposes, and the presence of values here has no effect on the output. 10286 // May also be an empty scalar if no name is available. 10287 func ParseSingleSequenceExample(scope *Scope, serialized tf.Output, feature_list_dense_missing_assumed_empty tf.Output, context_sparse_keys []tf.Output, context_dense_keys []tf.Output, feature_list_sparse_keys []tf.Output, feature_list_dense_keys []tf.Output, context_dense_defaults []tf.Output, debug_name tf.Output, optional ...ParseSingleSequenceExampleAttr) (context_sparse_indices []tf.Output, context_sparse_values []tf.Output, context_sparse_shapes []tf.Output, context_dense_values []tf.Output, feature_list_sparse_indices []tf.Output, feature_list_sparse_values []tf.Output, feature_list_sparse_shapes []tf.Output, feature_list_dense_values []tf.Output) { 10288 if scope.Err() != nil { 10289 return 10290 } 10291 attrs := map[string]interface{}{} 10292 for _, a := range optional { 10293 a(attrs) 10294 } 10295 opspec := tf.OpSpec{ 10296 Type: "ParseSingleSequenceExample", 10297 Input: []tf.Input{ 10298 serialized, feature_list_dense_missing_assumed_empty, tf.OutputList(context_sparse_keys), tf.OutputList(context_dense_keys), tf.OutputList(feature_list_sparse_keys), tf.OutputList(feature_list_dense_keys), tf.OutputList(context_dense_defaults), debug_name, 10299 }, 10300 Attrs: attrs, 10301 } 10302 op := scope.AddOperation(opspec) 10303 if scope.Err() != nil { 10304 return 10305 } 10306 var idx int 10307 var err error 10308 if context_sparse_indices, idx, err = makeOutputList(op, idx, "context_sparse_indices"); err != nil { 10309 scope.UpdateErr("ParseSingleSequenceExample", err) 10310 return 10311 } 10312 if context_sparse_values, idx, err = makeOutputList(op, idx, "context_sparse_values"); err != nil { 10313 scope.UpdateErr("ParseSingleSequenceExample", err) 10314 return 10315 } 10316 if context_sparse_shapes, idx, err = makeOutputList(op, idx, "context_sparse_shapes"); err != nil { 10317 scope.UpdateErr("ParseSingleSequenceExample", err) 10318 return 10319 } 10320 if context_dense_values, idx, err = makeOutputList(op, idx, "context_dense_values"); err != nil { 10321 scope.UpdateErr("ParseSingleSequenceExample", err) 10322 return 10323 } 10324 if feature_list_sparse_indices, idx, err = makeOutputList(op, idx, "feature_list_sparse_indices"); err != nil { 10325 scope.UpdateErr("ParseSingleSequenceExample", err) 10326 return 10327 } 10328 if feature_list_sparse_values, idx, err = makeOutputList(op, idx, "feature_list_sparse_values"); err != nil { 10329 scope.UpdateErr("ParseSingleSequenceExample", err) 10330 return 10331 } 10332 if feature_list_sparse_shapes, idx, err = makeOutputList(op, idx, "feature_list_sparse_shapes"); err != nil { 10333 scope.UpdateErr("ParseSingleSequenceExample", err) 10334 return 10335 } 10336 if feature_list_dense_values, idx, err = makeOutputList(op, idx, "feature_list_dense_values"); err != nil { 10337 scope.UpdateErr("ParseSingleSequenceExample", err) 10338 return 10339 } 10340 return context_sparse_indices, context_sparse_values, context_sparse_shapes, context_dense_values, feature_list_sparse_indices, feature_list_sparse_values, feature_list_sparse_shapes, feature_list_dense_values 10341 } 10342 10343 // SparseToDenseAttr is an optional argument to SparseToDense. 10344 type SparseToDenseAttr func(optionalAttr) 10345 10346 // SparseToDenseValidateIndices sets the optional validate_indices attribute to value. 10347 // 10348 // value: If true, indices are checked to make sure they are sorted in 10349 // lexicographic order and that there are no repeats. 10350 // If not specified, defaults to true 10351 func SparseToDenseValidateIndices(value bool) SparseToDenseAttr { 10352 return func(m optionalAttr) { 10353 m["validate_indices"] = value 10354 } 10355 } 10356 10357 // Converts a sparse representation into a dense tensor. 10358 // 10359 // Builds an array `dense` with shape `output_shape` such that 10360 // 10361 // ``` 10362 // # If sparse_indices is scalar 10363 // dense[i] = (i == sparse_indices ? sparse_values : default_value) 10364 // 10365 // # If sparse_indices is a vector, then for each i 10366 // dense[sparse_indices[i]] = sparse_values[i] 10367 // 10368 // # If sparse_indices is an n by d matrix, then for each i in [0, n) 10369 // dense[sparse_indices[i][0], ..., sparse_indices[i][d-1]] = sparse_values[i] 10370 // ``` 10371 // 10372 // All other values in `dense` are set to `default_value`. If `sparse_values` is a 10373 // scalar, all sparse indices are set to this single value. 10374 // 10375 // Indices should be sorted in lexicographic order, and indices must not 10376 // contain any repeats. If `validate_indices` is true, these properties 10377 // are checked during execution. 10378 // 10379 // Arguments: 10380 // sparse_indices: 0-D, 1-D, or 2-D. `sparse_indices[i]` contains the complete 10381 // index where `sparse_values[i]` will be placed. 10382 // output_shape: 1-D. Shape of the dense output tensor. 10383 // sparse_values: 1-D. Values corresponding to each row of `sparse_indices`, 10384 // or a scalar value to be used for all sparse indices. 10385 // default_value: Scalar value to set for indices not specified in 10386 // `sparse_indices`. 10387 // 10388 // Returns Dense output tensor of shape `output_shape`. 10389 func SparseToDense(scope *Scope, sparse_indices tf.Output, output_shape tf.Output, sparse_values tf.Output, default_value tf.Output, optional ...SparseToDenseAttr) (dense tf.Output) { 10390 if scope.Err() != nil { 10391 return 10392 } 10393 attrs := map[string]interface{}{} 10394 for _, a := range optional { 10395 a(attrs) 10396 } 10397 opspec := tf.OpSpec{ 10398 Type: "SparseToDense", 10399 Input: []tf.Input{ 10400 sparse_indices, output_shape, sparse_values, default_value, 10401 }, 10402 Attrs: attrs, 10403 } 10404 op := scope.AddOperation(opspec) 10405 return op.Output(0) 10406 } 10407 10408 // PreventGradientAttr is an optional argument to PreventGradient. 10409 type PreventGradientAttr func(optionalAttr) 10410 10411 // PreventGradientMessage sets the optional message attribute to value. 10412 // 10413 // value: Will be printed in the error when anyone tries to differentiate 10414 // this operation. 10415 // If not specified, defaults to "" 10416 func PreventGradientMessage(value string) PreventGradientAttr { 10417 return func(m optionalAttr) { 10418 m["message"] = value 10419 } 10420 } 10421 10422 // An identity op that triggers an error if a gradient is requested. 10423 // 10424 // When executed in a graph, this op outputs its input tensor as-is. 10425 // 10426 // When building ops to compute gradients, the TensorFlow gradient system 10427 // will return an error when trying to lookup the gradient of this op, 10428 // because no gradient must ever be registered for this function. This 10429 // op exists to prevent subtle bugs from silently returning unimplemented 10430 // gradients in some corner cases. 10431 // 10432 // Arguments: 10433 // input: any tensor. 10434 // 10435 // Returns the same input tensor. 10436 func PreventGradient(scope *Scope, input tf.Output, optional ...PreventGradientAttr) (output tf.Output) { 10437 if scope.Err() != nil { 10438 return 10439 } 10440 attrs := map[string]interface{}{} 10441 for _, a := range optional { 10442 a(attrs) 10443 } 10444 opspec := tf.OpSpec{ 10445 Type: "PreventGradient", 10446 Input: []tf.Input{ 10447 input, 10448 }, 10449 Attrs: attrs, 10450 } 10451 op := scope.AddOperation(opspec) 10452 return op.Output(0) 10453 } 10454 10455 // Computes asin of x element-wise. 10456 func Asin(scope *Scope, x tf.Output) (y tf.Output) { 10457 if scope.Err() != nil { 10458 return 10459 } 10460 opspec := tf.OpSpec{ 10461 Type: "Asin", 10462 Input: []tf.Input{ 10463 x, 10464 }, 10465 } 10466 op := scope.AddOperation(opspec) 10467 return op.Output(0) 10468 } 10469 10470 // Computes the sum along sparse segments of a tensor. 10471 // 10472 // Like `SparseSegmentSum`, but allows missing ids in `segment_ids`. If an id is 10473 // misisng, the `output` tensor at that position will be zeroed. 10474 // 10475 // Read 10476 // [the section on segmentation](https://tensorflow.org/api_docs/python/tf/sparse#Segmentation) 10477 // for an explanation of segments. 10478 // 10479 // For example: 10480 // 10481 // ```python 10482 // c = tf.constant([[1,2,3,4], [-1,-2,-3,-4], [5,6,7,8]]) 10483 // 10484 // tf.sparse_segment_sum_with_num_segments( 10485 // c, tf.constant([0, 1]), tf.constant([0, 0]), num_segments=3) 10486 // # => [[0 0 0 0] 10487 // # [0 0 0 0] 10488 // # [0 0 0 0]] 10489 // 10490 // tf.sparse_segment_sum_with_num_segments(c, 10491 // tf.constant([0, 1]), 10492 // tf.constant([0, 2], 10493 // num_segments=4)) 10494 // # => [[ 1 2 3 4] 10495 // # [ 0 0 0 0] 10496 // # [-1 -2 -3 -4] 10497 // # [ 0 0 0 0]] 10498 // ``` 10499 // 10500 // Arguments: 10501 // 10502 // indices: A 1-D tensor. Has same rank as `segment_ids`. 10503 // segment_ids: A 1-D tensor. Values should be sorted and can be repeated. 10504 // num_segments: Should equal the number of distinct segment IDs. 10505 // 10506 // Returns Has same shape as data, except for dimension 0 which 10507 // has size `num_segments`. 10508 func SparseSegmentSumWithNumSegments(scope *Scope, data tf.Output, indices tf.Output, segment_ids tf.Output, num_segments tf.Output) (output tf.Output) { 10509 if scope.Err() != nil { 10510 return 10511 } 10512 opspec := tf.OpSpec{ 10513 Type: "SparseSegmentSumWithNumSegments", 10514 Input: []tf.Input{ 10515 data, indices, segment_ids, num_segments, 10516 }, 10517 } 10518 op := scope.AddOperation(opspec) 10519 return op.Output(0) 10520 } 10521 10522 // SparseReduceMaxAttr is an optional argument to SparseReduceMax. 10523 type SparseReduceMaxAttr func(optionalAttr) 10524 10525 // SparseReduceMaxKeepDims sets the optional keep_dims attribute to value. 10526 // 10527 // value: If true, retain reduced dimensions with length 1. 10528 // If not specified, defaults to false 10529 func SparseReduceMaxKeepDims(value bool) SparseReduceMaxAttr { 10530 return func(m optionalAttr) { 10531 m["keep_dims"] = value 10532 } 10533 } 10534 10535 // Computes the max of elements across dimensions of a SparseTensor. 10536 // 10537 // This Op takes a SparseTensor and is the sparse counterpart to 10538 // `tf.reduce_max()`. In particular, this Op also returns a dense `Tensor` 10539 // instead of a sparse one. 10540 // 10541 // Reduces `sp_input` along the dimensions given in `reduction_axes`. Unless 10542 // `keep_dims` is true, the rank of the tensor is reduced by 1 for each entry in 10543 // `reduction_axes`. If `keep_dims` is true, the reduced dimensions are retained 10544 // with length 1. 10545 // 10546 // If `reduction_axes` has no entries, all dimensions are reduced, and a tensor 10547 // with a single element is returned. Additionally, the axes can be negative, 10548 // which are interpreted according to the indexing rules in Python. 10549 // 10550 // Arguments: 10551 // input_indices: 2-D. `N x R` matrix with the indices of non-empty values in a 10552 // SparseTensor, possibly not in canonical ordering. 10553 // input_values: 1-D. `N` non-empty values corresponding to `input_indices`. 10554 // input_shape: 1-D. Shape of the input SparseTensor. 10555 // reduction_axes: 1-D. Length-`K` vector containing the reduction axes. 10556 // 10557 // Returns `R-K`-D. The reduced Tensor. 10558 func SparseReduceMax(scope *Scope, input_indices tf.Output, input_values tf.Output, input_shape tf.Output, reduction_axes tf.Output, optional ...SparseReduceMaxAttr) (output tf.Output) { 10559 if scope.Err() != nil { 10560 return 10561 } 10562 attrs := map[string]interface{}{} 10563 for _, a := range optional { 10564 a(attrs) 10565 } 10566 opspec := tf.OpSpec{ 10567 Type: "SparseReduceMax", 10568 Input: []tf.Input{ 10569 input_indices, input_values, input_shape, reduction_axes, 10570 }, 10571 Attrs: attrs, 10572 } 10573 op := scope.AddOperation(opspec) 10574 return op.Output(0) 10575 } 10576 10577 // DecodeRawAttr is an optional argument to DecodeRaw. 10578 type DecodeRawAttr func(optionalAttr) 10579 10580 // DecodeRawLittleEndian sets the optional little_endian attribute to value. 10581 // 10582 // value: Whether the input `bytes` are in little-endian order. 10583 // Ignored for `out_type` values that are stored in a single byte like 10584 // `uint8`. 10585 // If not specified, defaults to true 10586 func DecodeRawLittleEndian(value bool) DecodeRawAttr { 10587 return func(m optionalAttr) { 10588 m["little_endian"] = value 10589 } 10590 } 10591 10592 // Reinterpret the bytes of a string as a vector of numbers. 10593 // 10594 // Arguments: 10595 // bytes: All the elements must have the same length. 10596 // 10597 // 10598 // Returns A Tensor with one more dimension than the input `bytes`. The 10599 // added dimension will have size equal to the length of the elements 10600 // of `bytes` divided by the number of bytes to represent `out_type`. 10601 func DecodeRaw(scope *Scope, bytes tf.Output, out_type tf.DataType, optional ...DecodeRawAttr) (output tf.Output) { 10602 if scope.Err() != nil { 10603 return 10604 } 10605 attrs := map[string]interface{}{"out_type": out_type} 10606 for _, a := range optional { 10607 a(attrs) 10608 } 10609 opspec := tf.OpSpec{ 10610 Type: "DecodeRaw", 10611 Input: []tf.Input{ 10612 bytes, 10613 }, 10614 Attrs: attrs, 10615 } 10616 op := scope.AddOperation(opspec) 10617 return op.Output(0) 10618 } 10619 10620 // RetrieveTPUEmbeddingADAMParametersAttr is an optional argument to RetrieveTPUEmbeddingADAMParameters. 10621 type RetrieveTPUEmbeddingADAMParametersAttr func(optionalAttr) 10622 10623 // RetrieveTPUEmbeddingADAMParametersTableId sets the optional table_id attribute to value. 10624 // If not specified, defaults to -1 10625 // 10626 // REQUIRES: value >= -1 10627 func RetrieveTPUEmbeddingADAMParametersTableId(value int64) RetrieveTPUEmbeddingADAMParametersAttr { 10628 return func(m optionalAttr) { 10629 m["table_id"] = value 10630 } 10631 } 10632 10633 // RetrieveTPUEmbeddingADAMParametersTableName sets the optional table_name attribute to value. 10634 // If not specified, defaults to "" 10635 func RetrieveTPUEmbeddingADAMParametersTableName(value string) RetrieveTPUEmbeddingADAMParametersAttr { 10636 return func(m optionalAttr) { 10637 m["table_name"] = value 10638 } 10639 } 10640 10641 // Retrieve ADAM embedding parameters. 10642 // 10643 // An op that retrieves optimization parameters from embedding to host 10644 // memory. Must be preceded by a ConfigureTPUEmbeddingHost op that sets up 10645 // the correct embedding table configuration. For example, this op is 10646 // used to retrieve updated parameters before saving a checkpoint. 10647 // 10648 // Returns Parameter parameters updated by the ADAM optimization algorithm.Parameter momenta updated by the ADAM optimization algorithm.Parameter velocities updated by the ADAM optimization algorithm. 10649 func RetrieveTPUEmbeddingADAMParameters(scope *Scope, num_shards int64, shard_id int64, optional ...RetrieveTPUEmbeddingADAMParametersAttr) (parameters tf.Output, momenta tf.Output, velocities tf.Output) { 10650 if scope.Err() != nil { 10651 return 10652 } 10653 attrs := map[string]interface{}{"num_shards": num_shards, "shard_id": shard_id} 10654 for _, a := range optional { 10655 a(attrs) 10656 } 10657 opspec := tf.OpSpec{ 10658 Type: "RetrieveTPUEmbeddingADAMParameters", 10659 10660 Attrs: attrs, 10661 } 10662 op := scope.AddOperation(opspec) 10663 return op.Output(0), op.Output(1), op.Output(2) 10664 } 10665 10666 // FusedBatchNormAttr is an optional argument to FusedBatchNorm. 10667 type FusedBatchNormAttr func(optionalAttr) 10668 10669 // FusedBatchNormEpsilon sets the optional epsilon attribute to value. 10670 // 10671 // value: A small float number added to the variance of x. 10672 // If not specified, defaults to 0.0001 10673 func FusedBatchNormEpsilon(value float32) FusedBatchNormAttr { 10674 return func(m optionalAttr) { 10675 m["epsilon"] = value 10676 } 10677 } 10678 10679 // FusedBatchNormDataFormat sets the optional data_format attribute to value. 10680 // 10681 // value: The data format for x and y. Either "NHWC" (default) or "NCHW". 10682 // If not specified, defaults to "NHWC" 10683 func FusedBatchNormDataFormat(value string) FusedBatchNormAttr { 10684 return func(m optionalAttr) { 10685 m["data_format"] = value 10686 } 10687 } 10688 10689 // FusedBatchNormIsTraining sets the optional is_training attribute to value. 10690 // 10691 // value: A bool value to indicate the operation is for training (default) 10692 // or inference. 10693 // If not specified, defaults to true 10694 func FusedBatchNormIsTraining(value bool) FusedBatchNormAttr { 10695 return func(m optionalAttr) { 10696 m["is_training"] = value 10697 } 10698 } 10699 10700 // Batch normalization. 10701 // 10702 // Note that the size of 4D Tensors are defined by either "NHWC" or "NCHW". 10703 // The size of 1D Tensors matches the dimension C of the 4D Tensors. 10704 // 10705 // Arguments: 10706 // x: A 4D Tensor for input data. 10707 // scale: A 1D Tensor for scaling factor, to scale the normalized x. 10708 // offset: A 1D Tensor for offset, to shift to the normalized x. 10709 // mean: A 1D Tensor for population mean. Used for inference only; 10710 // must be empty for training. 10711 // variance: A 1D Tensor for population variance. Used for inference only; 10712 // must be empty for training. 10713 // 10714 // Returns A 4D Tensor for output data.A 1D Tensor for the computed batch mean, to be used by TensorFlow 10715 // to compute the running mean.A 1D Tensor for the computed batch variance, to be used by 10716 // TensorFlow to compute the running variance.A 1D Tensor for the computed batch mean, to be reused 10717 // in the gradient computation.A 1D Tensor for the computed batch variance (inverted variance 10718 // in the cuDNN case), to be reused in the gradient computation. 10719 func FusedBatchNorm(scope *Scope, x tf.Output, scale tf.Output, offset tf.Output, mean tf.Output, variance tf.Output, optional ...FusedBatchNormAttr) (y tf.Output, batch_mean tf.Output, batch_variance tf.Output, reserve_space_1 tf.Output, reserve_space_2 tf.Output) { 10720 if scope.Err() != nil { 10721 return 10722 } 10723 attrs := map[string]interface{}{} 10724 for _, a := range optional { 10725 a(attrs) 10726 } 10727 opspec := tf.OpSpec{ 10728 Type: "FusedBatchNorm", 10729 Input: []tf.Input{ 10730 x, scale, offset, mean, variance, 10731 }, 10732 Attrs: attrs, 10733 } 10734 op := scope.AddOperation(opspec) 10735 return op.Output(0), op.Output(1), op.Output(2), op.Output(3), op.Output(4) 10736 } 10737 10738 // Creates a dataset that shards the input dataset. 10739 // 10740 // Creates a dataset that shards the input dataset by num_workers, returning a 10741 // sharded dataset for the index-th worker. This attempts to automatically shard 10742 // a dataset by examining the Dataset graph and inserting a shard op before the 10743 // inputs to a reader Dataset (e.g. CSVDataset, TFRecordDataset). 10744 // 10745 // This dataset will throw a NotFound error if we cannot shard the dataset 10746 // automatically. 10747 // 10748 // Arguments: 10749 // input_dataset: A variant tensor representing the input dataset. 10750 // num_workers: A scalar representing the number of workers to distribute this dataset across. 10751 // index: A scalar representing the index of the current worker out of num_workers. 10752 // 10753 // 10754 func ExperimentalAutoShardDataset(scope *Scope, input_dataset tf.Output, num_workers tf.Output, index tf.Output, output_types []tf.DataType, output_shapes []tf.Shape) (handle tf.Output) { 10755 if scope.Err() != nil { 10756 return 10757 } 10758 attrs := map[string]interface{}{"output_types": output_types, "output_shapes": output_shapes} 10759 opspec := tf.OpSpec{ 10760 Type: "ExperimentalAutoShardDataset", 10761 Input: []tf.Input{ 10762 input_dataset, num_workers, index, 10763 }, 10764 Attrs: attrs, 10765 } 10766 op := scope.AddOperation(opspec) 10767 return op.Output(0) 10768 } 10769 10770 // RandomStandardNormalAttr is an optional argument to RandomStandardNormal. 10771 type RandomStandardNormalAttr func(optionalAttr) 10772 10773 // RandomStandardNormalSeed sets the optional seed attribute to value. 10774 // 10775 // value: If either `seed` or `seed2` are set to be non-zero, the random number 10776 // generator is seeded by the given seed. Otherwise, it is seeded by a 10777 // random seed. 10778 // If not specified, defaults to 0 10779 func RandomStandardNormalSeed(value int64) RandomStandardNormalAttr { 10780 return func(m optionalAttr) { 10781 m["seed"] = value 10782 } 10783 } 10784 10785 // RandomStandardNormalSeed2 sets the optional seed2 attribute to value. 10786 // 10787 // value: A second seed to avoid seed collision. 10788 // If not specified, defaults to 0 10789 func RandomStandardNormalSeed2(value int64) RandomStandardNormalAttr { 10790 return func(m optionalAttr) { 10791 m["seed2"] = value 10792 } 10793 } 10794 10795 // Outputs random values from a normal distribution. 10796 // 10797 // The generated values will have mean 0 and standard deviation 1. 10798 // 10799 // Arguments: 10800 // shape: The shape of the output tensor. 10801 // dtype: The type of the output. 10802 // 10803 // Returns A tensor of the specified shape filled with random normal values. 10804 func RandomStandardNormal(scope *Scope, shape tf.Output, dtype tf.DataType, optional ...RandomStandardNormalAttr) (output tf.Output) { 10805 if scope.Err() != nil { 10806 return 10807 } 10808 attrs := map[string]interface{}{"dtype": dtype} 10809 for _, a := range optional { 10810 a(attrs) 10811 } 10812 opspec := tf.OpSpec{ 10813 Type: "RandomStandardNormal", 10814 Input: []tf.Input{ 10815 shape, 10816 }, 10817 Attrs: attrs, 10818 } 10819 op := scope.AddOperation(opspec) 10820 return op.Output(0) 10821 } 10822 10823 // FusedResizeAndPadConv2DAttr is an optional argument to FusedResizeAndPadConv2D. 10824 type FusedResizeAndPadConv2DAttr func(optionalAttr) 10825 10826 // FusedResizeAndPadConv2DResizeAlignCorners sets the optional resize_align_corners attribute to value. 10827 // 10828 // value: If true, the centers of the 4 corner pixels of the input and output tensors are 10829 // aligned, preserving the values at the corner pixels. Defaults to false. 10830 // If not specified, defaults to false 10831 func FusedResizeAndPadConv2DResizeAlignCorners(value bool) FusedResizeAndPadConv2DAttr { 10832 return func(m optionalAttr) { 10833 m["resize_align_corners"] = value 10834 } 10835 } 10836 10837 // Performs a resize and padding as a preprocess during a convolution. 10838 // 10839 // It's often possible to do spatial transformations more efficiently as part of 10840 // the packing stage of a convolution, so this op allows for an optimized 10841 // implementation where these stages are fused together. This prevents the need to 10842 // write out the intermediate results as whole tensors, reducing memory pressure, 10843 // and we can get some latency gains by merging the transformation calculations. 10844 // The data_format attribute for Conv2D isn't supported by this op, and defaults to 10845 // 'NHWC' order. 10846 // Internally this op uses a single per-graph scratch buffer, which means that it 10847 // will block if multiple versions are being run in parallel. This is because this 10848 // operator is primarily an optimization to minimize memory usage. 10849 // 10850 // Arguments: 10851 // input: 4-D with shape `[batch, in_height, in_width, in_channels]`. 10852 // size: A 1-D int32 Tensor of 2 elements: `new_height, new_width`. The 10853 // new size for the images. 10854 // paddings: A two-column matrix specifying the padding sizes. The number of 10855 // rows must be the same as the rank of `input`. 10856 // filter: 4-D with shape 10857 // `[filter_height, filter_width, in_channels, out_channels]`. 10858 // 10859 // strides: 1-D of length 4. The stride of the sliding window for each dimension 10860 // of `input`. Must be in the same order as the dimension specified with format. 10861 // padding: The type of padding algorithm to use. 10862 func FusedResizeAndPadConv2D(scope *Scope, input tf.Output, size tf.Output, paddings tf.Output, filter tf.Output, mode string, strides []int64, padding string, optional ...FusedResizeAndPadConv2DAttr) (output tf.Output) { 10863 if scope.Err() != nil { 10864 return 10865 } 10866 attrs := map[string]interface{}{"mode": mode, "strides": strides, "padding": padding} 10867 for _, a := range optional { 10868 a(attrs) 10869 } 10870 opspec := tf.OpSpec{ 10871 Type: "FusedResizeAndPadConv2D", 10872 Input: []tf.Input{ 10873 input, size, paddings, filter, 10874 }, 10875 Attrs: attrs, 10876 } 10877 op := scope.AddOperation(opspec) 10878 return op.Output(0) 10879 } 10880 10881 // RandomUniformAttr is an optional argument to RandomUniform. 10882 type RandomUniformAttr func(optionalAttr) 10883 10884 // RandomUniformSeed sets the optional seed attribute to value. 10885 // 10886 // value: If either `seed` or `seed2` are set to be non-zero, the random number 10887 // generator is seeded by the given seed. Otherwise, it is seeded by a 10888 // random seed. 10889 // If not specified, defaults to 0 10890 func RandomUniformSeed(value int64) RandomUniformAttr { 10891 return func(m optionalAttr) { 10892 m["seed"] = value 10893 } 10894 } 10895 10896 // RandomUniformSeed2 sets the optional seed2 attribute to value. 10897 // 10898 // value: A second seed to avoid seed collision. 10899 // If not specified, defaults to 0 10900 func RandomUniformSeed2(value int64) RandomUniformAttr { 10901 return func(m optionalAttr) { 10902 m["seed2"] = value 10903 } 10904 } 10905 10906 // Outputs random values from a uniform distribution. 10907 // 10908 // The generated values follow a uniform distribution in the range `[0, 1)`. The 10909 // lower bound 0 is included in the range, while the upper bound 1 is excluded. 10910 // 10911 // Arguments: 10912 // shape: The shape of the output tensor. 10913 // dtype: The type of the output. 10914 // 10915 // Returns A tensor of the specified shape filled with uniform random values. 10916 func RandomUniform(scope *Scope, shape tf.Output, dtype tf.DataType, optional ...RandomUniformAttr) (output tf.Output) { 10917 if scope.Err() != nil { 10918 return 10919 } 10920 attrs := map[string]interface{}{"dtype": dtype} 10921 for _, a := range optional { 10922 a(attrs) 10923 } 10924 opspec := tf.OpSpec{ 10925 Type: "RandomUniform", 10926 Input: []tf.Input{ 10927 shape, 10928 }, 10929 Attrs: attrs, 10930 } 10931 op := scope.AddOperation(opspec) 10932 return op.Output(0) 10933 } 10934 10935 // ResourceApplyFtrlAttr is an optional argument to ResourceApplyFtrl. 10936 type ResourceApplyFtrlAttr func(optionalAttr) 10937 10938 // ResourceApplyFtrlUseLocking sets the optional use_locking attribute to value. 10939 // 10940 // value: If `True`, updating of the var and accum tensors will be protected 10941 // by a lock; otherwise the behavior is undefined, but may exhibit less 10942 // contention. 10943 // If not specified, defaults to false 10944 func ResourceApplyFtrlUseLocking(value bool) ResourceApplyFtrlAttr { 10945 return func(m optionalAttr) { 10946 m["use_locking"] = value 10947 } 10948 } 10949 10950 // Update '*var' according to the Ftrl-proximal scheme. 10951 // 10952 // accum_new = accum + grad * grad 10953 // linear += grad - (accum_new^(-lr_power) - accum^(-lr_power)) / lr * var 10954 // quadratic = 1.0 / (accum_new^(lr_power) * lr) + 2 * l2 10955 // var = (sign(linear) * l1 - linear) / quadratic if |linear| > l1 else 0.0 10956 // accum = accum_new 10957 // 10958 // Arguments: 10959 // var_: Should be from a Variable(). 10960 // accum: Should be from a Variable(). 10961 // linear: Should be from a Variable(). 10962 // grad: The gradient. 10963 // lr: Scaling factor. Must be a scalar. 10964 // l1: L1 regulariation. Must be a scalar. 10965 // l2: L2 regulariation. Must be a scalar. 10966 // lr_power: Scaling factor. Must be a scalar. 10967 // 10968 // Returns the created operation. 10969 func ResourceApplyFtrl(scope *Scope, var_ tf.Output, accum tf.Output, linear tf.Output, grad tf.Output, lr tf.Output, l1 tf.Output, l2 tf.Output, lr_power tf.Output, optional ...ResourceApplyFtrlAttr) (o *tf.Operation) { 10970 if scope.Err() != nil { 10971 return 10972 } 10973 attrs := map[string]interface{}{} 10974 for _, a := range optional { 10975 a(attrs) 10976 } 10977 opspec := tf.OpSpec{ 10978 Type: "ResourceApplyFtrl", 10979 Input: []tf.Input{ 10980 var_, accum, linear, grad, lr, l1, l2, lr_power, 10981 }, 10982 Attrs: attrs, 10983 } 10984 return scope.AddOperation(opspec) 10985 } 10986 10987 // Transforms a vector of brain.Example protos (as strings) into typed tensors. 10988 // 10989 // Arguments: 10990 // serialized: A vector containing a batch of binary serialized Example protos. 10991 // names: A vector containing the names of the serialized protos. 10992 // May contain, for example, table key (descriptive) names for the 10993 // corresponding serialized protos. These are purely useful for debugging 10994 // purposes, and the presence of values here has no effect on the output. 10995 // May also be an empty vector if no names are available. 10996 // If non-empty, this vector must be the same length as "serialized". 10997 // sparse_keys: A list of Nsparse string Tensors (scalars). 10998 // The keys expected in the Examples' features associated with sparse values. 10999 // dense_keys: A list of Ndense string Tensors (scalars). 11000 // The keys expected in the Examples' features associated with dense values. 11001 // dense_defaults: A list of Ndense Tensors (some may be empty). 11002 // dense_defaults[j] provides default values 11003 // when the example's feature_map lacks dense_key[j]. If an empty Tensor is 11004 // provided for dense_defaults[j], then the Feature dense_keys[j] is required. 11005 // The input type is inferred from dense_defaults[j], even when it's empty. 11006 // If dense_defaults[j] is not empty, and dense_shapes[j] is fully defined, 11007 // then the shape of dense_defaults[j] must match that of dense_shapes[j]. 11008 // If dense_shapes[j] has an undefined major dimension (variable strides dense 11009 // feature), dense_defaults[j] must contain a single element: 11010 // the padding element. 11011 // sparse_types: A list of Nsparse types; the data types of data in each Feature 11012 // given in sparse_keys. 11013 // Currently the ParseExample supports DT_FLOAT (FloatList), 11014 // DT_INT64 (Int64List), and DT_STRING (BytesList). 11015 // dense_shapes: A list of Ndense shapes; the shapes of data in each Feature 11016 // given in dense_keys. 11017 // The number of elements in the Feature corresponding to dense_key[j] 11018 // must always equal dense_shapes[j].NumEntries(). 11019 // If dense_shapes[j] == (D0, D1, ..., DN) then the shape of output 11020 // Tensor dense_values[j] will be (|serialized|, D0, D1, ..., DN): 11021 // The dense outputs are just the inputs row-stacked by batch. 11022 // This works for dense_shapes[j] = (-1, D1, ..., DN). In this case 11023 // the shape of the output Tensor dense_values[j] will be 11024 // (|serialized|, M, D1, .., DN), where M is the maximum number of blocks 11025 // of elements of length D1 * .... * DN, across all minibatch entries 11026 // in the input. Any minibatch entry with less than M blocks of elements of 11027 // length D1 * ... * DN will be padded with the corresponding default_value 11028 // scalar element along the second dimension. 11029 func ParseExample(scope *Scope, serialized tf.Output, names tf.Output, sparse_keys []tf.Output, dense_keys []tf.Output, dense_defaults []tf.Output, sparse_types []tf.DataType, dense_shapes []tf.Shape) (sparse_indices []tf.Output, sparse_values []tf.Output, sparse_shapes []tf.Output, dense_values []tf.Output) { 11030 if scope.Err() != nil { 11031 return 11032 } 11033 attrs := map[string]interface{}{"sparse_types": sparse_types, "dense_shapes": dense_shapes} 11034 opspec := tf.OpSpec{ 11035 Type: "ParseExample", 11036 Input: []tf.Input{ 11037 serialized, names, tf.OutputList(sparse_keys), tf.OutputList(dense_keys), tf.OutputList(dense_defaults), 11038 }, 11039 Attrs: attrs, 11040 } 11041 op := scope.AddOperation(opspec) 11042 if scope.Err() != nil { 11043 return 11044 } 11045 var idx int 11046 var err error 11047 if sparse_indices, idx, err = makeOutputList(op, idx, "sparse_indices"); err != nil { 11048 scope.UpdateErr("ParseExample", err) 11049 return 11050 } 11051 if sparse_values, idx, err = makeOutputList(op, idx, "sparse_values"); err != nil { 11052 scope.UpdateErr("ParseExample", err) 11053 return 11054 } 11055 if sparse_shapes, idx, err = makeOutputList(op, idx, "sparse_shapes"); err != nil { 11056 scope.UpdateErr("ParseExample", err) 11057 return 11058 } 11059 if dense_values, idx, err = makeOutputList(op, idx, "dense_values"); err != nil { 11060 scope.UpdateErr("ParseExample", err) 11061 return 11062 } 11063 return sparse_indices, sparse_values, sparse_shapes, dense_values 11064 } 11065 11066 // Compute the pairwise cross product. 11067 // 11068 // `a` and `b` must be the same shape; they can either be simple 3-element vectors, 11069 // or any shape where the innermost dimension is 3. In the latter case, each pair 11070 // of corresponding 3-element vectors is cross-multiplied independently. 11071 // 11072 // Arguments: 11073 // a: A tensor containing 3-element vectors. 11074 // b: Another tensor, of same type and shape as `a`. 11075 // 11076 // Returns Pairwise cross product of the vectors in `a` and `b`. 11077 func Cross(scope *Scope, a tf.Output, b tf.Output) (product tf.Output) { 11078 if scope.Err() != nil { 11079 return 11080 } 11081 opspec := tf.OpSpec{ 11082 Type: "Cross", 11083 Input: []tf.Input{ 11084 a, b, 11085 }, 11086 } 11087 op := scope.AddOperation(opspec) 11088 return op.Output(0) 11089 } 11090 11091 // LeakyReluAttr is an optional argument to LeakyRelu. 11092 type LeakyReluAttr func(optionalAttr) 11093 11094 // LeakyReluAlpha sets the optional alpha attribute to value. 11095 // If not specified, defaults to 0.2 11096 func LeakyReluAlpha(value float32) LeakyReluAttr { 11097 return func(m optionalAttr) { 11098 m["alpha"] = value 11099 } 11100 } 11101 11102 // Computes rectified linear: `max(features, features * alpha)`. 11103 func LeakyRelu(scope *Scope, features tf.Output, optional ...LeakyReluAttr) (activations tf.Output) { 11104 if scope.Err() != nil { 11105 return 11106 } 11107 attrs := map[string]interface{}{} 11108 for _, a := range optional { 11109 a(attrs) 11110 } 11111 opspec := tf.OpSpec{ 11112 Type: "LeakyRelu", 11113 Input: []tf.Input{ 11114 features, 11115 }, 11116 Attrs: attrs, 11117 } 11118 op := scope.AddOperation(opspec) 11119 return op.Output(0) 11120 } 11121 11122 // Outputs random integers from a uniform distribution. 11123 // 11124 // The generated values are uniform integers in the range `[minval, maxval)`. 11125 // The lower bound `minval` is included in the range, while the upper bound 11126 // `maxval` is excluded. 11127 // 11128 // The random integers are slightly biased unless `maxval - minval` is an exact 11129 // power of two. The bias is small for values of `maxval - minval` significantly 11130 // smaller than the range of the output (either `2^32` or `2^64`). 11131 // 11132 // Arguments: 11133 // resource: The handle of the resource variable that stores the state of the RNG. 11134 // algorithm: The RNG algorithm. 11135 // shape: The shape of the output tensor. 11136 // minval: Minimum value (inclusive, scalar). 11137 // maxval: Maximum value (exclusive, scalar). 11138 // 11139 // Returns Random values with specified shape. 11140 func StatefulUniformInt(scope *Scope, resource tf.Output, algorithm tf.Output, shape tf.Output, minval tf.Output, maxval tf.Output) (output tf.Output) { 11141 if scope.Err() != nil { 11142 return 11143 } 11144 opspec := tf.OpSpec{ 11145 Type: "StatefulUniformInt", 11146 Input: []tf.Input{ 11147 resource, algorithm, shape, minval, maxval, 11148 }, 11149 } 11150 op := scope.AddOperation(opspec) 11151 return op.Output(0) 11152 } 11153 11154 // DecodeAndCropJpegAttr is an optional argument to DecodeAndCropJpeg. 11155 type DecodeAndCropJpegAttr func(optionalAttr) 11156 11157 // DecodeAndCropJpegChannels sets the optional channels attribute to value. 11158 // 11159 // value: Number of color channels for the decoded image. 11160 // If not specified, defaults to 0 11161 func DecodeAndCropJpegChannels(value int64) DecodeAndCropJpegAttr { 11162 return func(m optionalAttr) { 11163 m["channels"] = value 11164 } 11165 } 11166 11167 // DecodeAndCropJpegRatio sets the optional ratio attribute to value. 11168 // 11169 // value: Downscaling ratio. 11170 // If not specified, defaults to 1 11171 func DecodeAndCropJpegRatio(value int64) DecodeAndCropJpegAttr { 11172 return func(m optionalAttr) { 11173 m["ratio"] = value 11174 } 11175 } 11176 11177 // DecodeAndCropJpegFancyUpscaling sets the optional fancy_upscaling attribute to value. 11178 // 11179 // value: If true use a slower but nicer upscaling of the 11180 // chroma planes (yuv420/422 only). 11181 // If not specified, defaults to true 11182 func DecodeAndCropJpegFancyUpscaling(value bool) DecodeAndCropJpegAttr { 11183 return func(m optionalAttr) { 11184 m["fancy_upscaling"] = value 11185 } 11186 } 11187 11188 // DecodeAndCropJpegTryRecoverTruncated sets the optional try_recover_truncated attribute to value. 11189 // 11190 // value: If true try to recover an image from truncated input. 11191 // If not specified, defaults to false 11192 func DecodeAndCropJpegTryRecoverTruncated(value bool) DecodeAndCropJpegAttr { 11193 return func(m optionalAttr) { 11194 m["try_recover_truncated"] = value 11195 } 11196 } 11197 11198 // DecodeAndCropJpegAcceptableFraction sets the optional acceptable_fraction attribute to value. 11199 // 11200 // value: The minimum required fraction of lines before a truncated 11201 // input is accepted. 11202 // If not specified, defaults to 1 11203 func DecodeAndCropJpegAcceptableFraction(value float32) DecodeAndCropJpegAttr { 11204 return func(m optionalAttr) { 11205 m["acceptable_fraction"] = value 11206 } 11207 } 11208 11209 // DecodeAndCropJpegDctMethod sets the optional dct_method attribute to value. 11210 // 11211 // value: string specifying a hint about the algorithm used for 11212 // decompression. Defaults to "" which maps to a system-specific 11213 // default. Currently valid values are ["INTEGER_FAST", 11214 // "INTEGER_ACCURATE"]. The hint may be ignored (e.g., the internal 11215 // jpeg library changes to a version that does not have that specific 11216 // option.) 11217 // If not specified, defaults to "" 11218 func DecodeAndCropJpegDctMethod(value string) DecodeAndCropJpegAttr { 11219 return func(m optionalAttr) { 11220 m["dct_method"] = value 11221 } 11222 } 11223 11224 // Decode and Crop a JPEG-encoded image to a uint8 tensor. 11225 // 11226 // The attr `channels` indicates the desired number of color channels for the 11227 // decoded image. 11228 // 11229 // Accepted values are: 11230 // 11231 // * 0: Use the number of channels in the JPEG-encoded image. 11232 // * 1: output a grayscale image. 11233 // * 3: output an RGB image. 11234 // 11235 // If needed, the JPEG-encoded image is transformed to match the requested number 11236 // of color channels. 11237 // 11238 // The attr `ratio` allows downscaling the image by an integer factor during 11239 // decoding. Allowed values are: 1, 2, 4, and 8. This is much faster than 11240 // downscaling the image later. 11241 // 11242 // 11243 // It is equivalent to a combination of decode and crop, but much faster by only 11244 // decoding partial jpeg image. 11245 // 11246 // Arguments: 11247 // contents: 0-D. The JPEG-encoded image. 11248 // crop_window: 1-D. The crop window: [crop_y, crop_x, crop_height, crop_width]. 11249 // 11250 // Returns 3-D with shape `[height, width, channels]`.. 11251 func DecodeAndCropJpeg(scope *Scope, contents tf.Output, crop_window tf.Output, optional ...DecodeAndCropJpegAttr) (image tf.Output) { 11252 if scope.Err() != nil { 11253 return 11254 } 11255 attrs := map[string]interface{}{} 11256 for _, a := range optional { 11257 a(attrs) 11258 } 11259 opspec := tf.OpSpec{ 11260 Type: "DecodeAndCropJpeg", 11261 Input: []tf.Input{ 11262 contents, crop_window, 11263 }, 11264 Attrs: attrs, 11265 } 11266 op := scope.AddOperation(opspec) 11267 return op.Output(0) 11268 } 11269 11270 // StatefulStandardNormalV2Attr is an optional argument to StatefulStandardNormalV2. 11271 type StatefulStandardNormalV2Attr func(optionalAttr) 11272 11273 // StatefulStandardNormalV2Dtype sets the optional dtype attribute to value. 11274 // 11275 // value: The type of the output. 11276 // If not specified, defaults to DT_FLOAT 11277 func StatefulStandardNormalV2Dtype(value tf.DataType) StatefulStandardNormalV2Attr { 11278 return func(m optionalAttr) { 11279 m["dtype"] = value 11280 } 11281 } 11282 11283 // Outputs random values from a normal distribution. 11284 // 11285 // The generated values will have mean 0 and standard deviation 1. 11286 // 11287 // Arguments: 11288 // resource: The handle of the resource variable that stores the state of the RNG. 11289 // algorithm: The RNG algorithm. 11290 // shape: The shape of the output tensor. 11291 // 11292 // Returns A tensor of the specified shape filled with random normal values. 11293 func StatefulStandardNormalV2(scope *Scope, resource tf.Output, algorithm tf.Output, shape tf.Output, optional ...StatefulStandardNormalV2Attr) (output tf.Output) { 11294 if scope.Err() != nil { 11295 return 11296 } 11297 attrs := map[string]interface{}{} 11298 for _, a := range optional { 11299 a(attrs) 11300 } 11301 opspec := tf.OpSpec{ 11302 Type: "StatefulStandardNormalV2", 11303 Input: []tf.Input{ 11304 resource, algorithm, shape, 11305 }, 11306 Attrs: attrs, 11307 } 11308 op := scope.AddOperation(opspec) 11309 return op.Output(0) 11310 } 11311 11312 // StatefulUniformFullIntAttr is an optional argument to StatefulUniformFullInt. 11313 type StatefulUniformFullIntAttr func(optionalAttr) 11314 11315 // StatefulUniformFullIntDtype sets the optional dtype attribute to value. 11316 // 11317 // value: The type of the output. 11318 // If not specified, defaults to DT_UINT64 11319 func StatefulUniformFullIntDtype(value tf.DataType) StatefulUniformFullIntAttr { 11320 return func(m optionalAttr) { 11321 m["dtype"] = value 11322 } 11323 } 11324 11325 // Outputs random integers from a uniform distribution. 11326 // 11327 // The generated values are uniform integers covering the whole range of `dtype`. 11328 // 11329 // Arguments: 11330 // resource: The handle of the resource variable that stores the state of the RNG. 11331 // algorithm: The RNG algorithm. 11332 // shape: The shape of the output tensor. 11333 // 11334 // Returns Random values with specified shape. 11335 func StatefulUniformFullInt(scope *Scope, resource tf.Output, algorithm tf.Output, shape tf.Output, optional ...StatefulUniformFullIntAttr) (output tf.Output) { 11336 if scope.Err() != nil { 11337 return 11338 } 11339 attrs := map[string]interface{}{} 11340 for _, a := range optional { 11341 a(attrs) 11342 } 11343 opspec := tf.OpSpec{ 11344 Type: "StatefulUniformFullInt", 11345 Input: []tf.Input{ 11346 resource, algorithm, shape, 11347 }, 11348 Attrs: attrs, 11349 } 11350 op := scope.AddOperation(opspec) 11351 return op.Output(0) 11352 } 11353 11354 // Locks a mutex resource. The output is the lock. So long as the lock tensor 11355 // 11356 // is alive, any other request to use `MutexLock` with this mutex will wait. 11357 // 11358 // This is particularly useful for creating a critical section when used in 11359 // conjunction with `MutexLockIdentity`: 11360 // 11361 // ```python 11362 // 11363 // mutex = mutex_v2( 11364 // shared_name=handle_name, container=container, name=name) 11365 // 11366 // def execute_in_critical_section(fn, *args, **kwargs): 11367 // lock = gen_resource_variable_ops.mutex_lock(mutex) 11368 // 11369 // with ops.control_dependencies([lock]): 11370 // r = fn(*args, **kwargs) 11371 // 11372 // with ops.control_dependencies(nest.flatten(r)): 11373 // with ops.colocate_with(mutex): 11374 // ensure_lock_exists = mutex_lock_identity(lock) 11375 // 11376 // # Make sure that if any element of r is accessed, all of 11377 // # them are executed together. 11378 // r = nest.map_structure(tf.identity, r) 11379 // 11380 // with ops.control_dependencies([ensure_lock_exists]): 11381 // return nest.map_structure(tf.identity, r) 11382 // ``` 11383 // 11384 // While `fn` is running in the critical section, no other functions which wish to 11385 // use this critical section may run. 11386 // 11387 // Often the use case is that two executions of the same graph, in parallel, 11388 // wish to run `fn`; and we wish to ensure that only one of them executes 11389 // at a time. This is especially important if `fn` modifies one or more 11390 // variables at a time. 11391 // 11392 // It is also useful if two separate functions must share a resource, but we 11393 // wish to ensure the usage is exclusive. 11394 // 11395 // Arguments: 11396 // mutex: The mutex resource to lock. 11397 // 11398 // Returns A tensor that keeps a shared pointer to a lock on the mutex; 11399 // when the Tensor is destroyed, the use count on the shared pointer is decreased 11400 // by 1. When it reaches 0, the lock is released. 11401 func MutexLock(scope *Scope, mutex tf.Output) (mutex_lock tf.Output) { 11402 if scope.Err() != nil { 11403 return 11404 } 11405 opspec := tf.OpSpec{ 11406 Type: "MutexLock", 11407 Input: []tf.Input{ 11408 mutex, 11409 }, 11410 } 11411 op := scope.AddOperation(opspec) 11412 return op.Output(0) 11413 } 11414 11415 // Transforms a serialized tensorflow.TensorProto proto into a Tensor. 11416 // 11417 // Arguments: 11418 // serialized: A scalar string containing a serialized TensorProto proto. 11419 // out_type: The type of the serialized tensor. The provided type must match the 11420 // type of the serialized tensor and no implicit conversion will take place. 11421 // 11422 // Returns A Tensor of type `out_type`. 11423 func ParseTensor(scope *Scope, serialized tf.Output, out_type tf.DataType) (output tf.Output) { 11424 if scope.Err() != nil { 11425 return 11426 } 11427 attrs := map[string]interface{}{"out_type": out_type} 11428 opspec := tf.OpSpec{ 11429 Type: "ParseTensor", 11430 Input: []tf.Input{ 11431 serialized, 11432 }, 11433 Attrs: attrs, 11434 } 11435 op := scope.AddOperation(opspec) 11436 return op.Output(0) 11437 } 11438 11439 // MaxPoolWithArgmaxAttr is an optional argument to MaxPoolWithArgmax. 11440 type MaxPoolWithArgmaxAttr func(optionalAttr) 11441 11442 // MaxPoolWithArgmaxTargmax sets the optional Targmax attribute to value. 11443 // If not specified, defaults to DT_INT64 11444 func MaxPoolWithArgmaxTargmax(value tf.DataType) MaxPoolWithArgmaxAttr { 11445 return func(m optionalAttr) { 11446 m["Targmax"] = value 11447 } 11448 } 11449 11450 // MaxPoolWithArgmaxIncludeBatchInIndex sets the optional include_batch_in_index attribute to value. 11451 // 11452 // value: Whether to include batch dimension in flattened index of `argmax`. 11453 // If not specified, defaults to false 11454 func MaxPoolWithArgmaxIncludeBatchInIndex(value bool) MaxPoolWithArgmaxAttr { 11455 return func(m optionalAttr) { 11456 m["include_batch_in_index"] = value 11457 } 11458 } 11459 11460 // Performs max pooling on the input and outputs both max values and indices. 11461 // 11462 // The indices in `argmax` are flattened, so that a maximum value at position 11463 // `[b, y, x, c]` becomes flattened index: 11464 // `(y * width + x) * channels + c` if `include_batch_in_index` is False; 11465 // `((b * height + y) * width + x) * channels + c` if `include_batch_in_index` is True. 11466 // 11467 // The indices returned are always in `[0, height) x [0, width)` before flattening, 11468 // even if padding is involved and the mathematically correct answer is outside 11469 // (either negative or too large). This is a bug, but fixing it is difficult to do 11470 // in a safe backwards compatible way, especially due to flattening. 11471 // 11472 // Arguments: 11473 // input: 4-D with shape `[batch, height, width, channels]`. Input to pool over. 11474 // ksize: The size of the window for each dimension of the input tensor. 11475 // strides: The stride of the sliding window for each dimension of the 11476 // input tensor. 11477 // padding: The type of padding algorithm to use. 11478 // 11479 // Returns The max pooled output tensor.4-D. The flattened indices of the max values chosen for each output. 11480 func MaxPoolWithArgmax(scope *Scope, input tf.Output, ksize []int64, strides []int64, padding string, optional ...MaxPoolWithArgmaxAttr) (output tf.Output, argmax tf.Output) { 11481 if scope.Err() != nil { 11482 return 11483 } 11484 attrs := map[string]interface{}{"ksize": ksize, "strides": strides, "padding": padding} 11485 for _, a := range optional { 11486 a(attrs) 11487 } 11488 opspec := tf.OpSpec{ 11489 Type: "MaxPoolWithArgmax", 11490 Input: []tf.Input{ 11491 input, 11492 }, 11493 Attrs: attrs, 11494 } 11495 op := scope.AddOperation(opspec) 11496 return op.Output(0), op.Output(1) 11497 } 11498 11499 // ModelDatasetAttr is an optional argument to ModelDataset. 11500 type ModelDatasetAttr func(optionalAttr) 11501 11502 // ModelDatasetCpuBudget sets the optional cpu_budget attribute to value. 11503 // If not specified, defaults to 0 11504 func ModelDatasetCpuBudget(value int64) ModelDatasetAttr { 11505 return func(m optionalAttr) { 11506 m["cpu_budget"] = value 11507 } 11508 } 11509 11510 // Identity transformation that models performance. 11511 // 11512 // Identity transformation that models performance. 11513 // 11514 // Arguments: 11515 // input_dataset: A variant tensor representing the input dataset. 11516 // 11517 // 11518 func ModelDataset(scope *Scope, input_dataset tf.Output, output_types []tf.DataType, output_shapes []tf.Shape, optional ...ModelDatasetAttr) (handle tf.Output) { 11519 if scope.Err() != nil { 11520 return 11521 } 11522 attrs := map[string]interface{}{"output_types": output_types, "output_shapes": output_shapes} 11523 for _, a := range optional { 11524 a(attrs) 11525 } 11526 opspec := tf.OpSpec{ 11527 Type: "ModelDataset", 11528 Input: []tf.Input{ 11529 input_dataset, 11530 }, 11531 Attrs: attrs, 11532 } 11533 op := scope.AddOperation(opspec) 11534 return op.Output(0) 11535 } 11536 11537 // Fast Fourier transform. 11538 // 11539 // Computes the 1-dimensional discrete Fourier transform over the inner-most 11540 // dimension of `input`. 11541 // 11542 // Arguments: 11543 // input: A complex tensor. 11544 // 11545 // Returns A complex tensor of the same shape as `input`. The inner-most 11546 // dimension of `input` is replaced with its 1D Fourier transform. 11547 // 11548 // @compatibility(numpy) 11549 // Equivalent to np.fft.fft 11550 // @end_compatibility 11551 func FFT(scope *Scope, input tf.Output) (output tf.Output) { 11552 if scope.Err() != nil { 11553 return 11554 } 11555 opspec := tf.OpSpec{ 11556 Type: "FFT", 11557 Input: []tf.Input{ 11558 input, 11559 }, 11560 } 11561 op := scope.AddOperation(opspec) 11562 return op.Output(0) 11563 } 11564 11565 // MaxPoolAttr is an optional argument to MaxPool. 11566 type MaxPoolAttr func(optionalAttr) 11567 11568 // MaxPoolDataFormat sets the optional data_format attribute to value. 11569 // 11570 // value: Specify the data format of the input and output data. With the 11571 // default format "NHWC", the data is stored in the order of: 11572 // [batch, in_height, in_width, in_channels]. 11573 // Alternatively, the format could be "NCHW", the data storage order of: 11574 // [batch, in_channels, in_height, in_width]. 11575 // If not specified, defaults to "NHWC" 11576 func MaxPoolDataFormat(value string) MaxPoolAttr { 11577 return func(m optionalAttr) { 11578 m["data_format"] = value 11579 } 11580 } 11581 11582 // Performs max pooling on the input. 11583 // 11584 // Arguments: 11585 // input: 4-D input to pool over. 11586 // ksize: The size of the window for each dimension of the input tensor. 11587 // strides: The stride of the sliding window for each dimension of the 11588 // input tensor. 11589 // padding: The type of padding algorithm to use. 11590 // 11591 // Returns The max pooled output tensor. 11592 func MaxPool(scope *Scope, input tf.Output, ksize []int64, strides []int64, padding string, optional ...MaxPoolAttr) (output tf.Output) { 11593 if scope.Err() != nil { 11594 return 11595 } 11596 attrs := map[string]interface{}{"ksize": ksize, "strides": strides, "padding": padding} 11597 for _, a := range optional { 11598 a(attrs) 11599 } 11600 opspec := tf.OpSpec{ 11601 Type: "MaxPool", 11602 Input: []tf.Input{ 11603 input, 11604 }, 11605 Attrs: attrs, 11606 } 11607 op := scope.AddOperation(opspec) 11608 return op.Output(0) 11609 } 11610 11611 // Multiplies sparse updates into the variable referenced by `resource`. 11612 // 11613 // This operation computes 11614 // 11615 // # Scalar indices 11616 // ref[indices, ...] *= updates[...] 11617 // 11618 // # Vector indices (for each i) 11619 // ref[indices[i], ...] *= updates[i, ...] 11620 // 11621 // # High rank indices (for each i, ..., j) 11622 // ref[indices[i, ..., j], ...] *= updates[i, ..., j, ...] 11623 // 11624 // Duplicate entries are handled correctly: if multiple `indices` reference 11625 // the same location, their contributions multiply. 11626 // 11627 // Requires `updates.shape = indices.shape + ref.shape[1:]` or `updates.shape = []`. 11628 // 11629 // <div style="width:70%; margin:auto; margin-bottom:10px; margin-top:20px;"> 11630 // <img style="width:100%" src='https://www.tensorflow.org/images/ScatterAdd.png' alt> 11631 // </div> 11632 // 11633 // Arguments: 11634 // resource: Should be from a `Variable` node. 11635 // indices: A tensor of indices into the first dimension of `ref`. 11636 // updates: A tensor of updated values to add to `ref`. 11637 // 11638 // Returns the created operation. 11639 func ResourceScatterMul(scope *Scope, resource tf.Output, indices tf.Output, updates tf.Output) (o *tf.Operation) { 11640 if scope.Err() != nil { 11641 return 11642 } 11643 opspec := tf.OpSpec{ 11644 Type: "ResourceScatterMul", 11645 Input: []tf.Input{ 11646 resource, indices, updates, 11647 }, 11648 } 11649 return scope.AddOperation(opspec) 11650 } 11651 11652 // Subtracts sparse updates from the variable referenced by `resource`. 11653 // 11654 // This operation computes 11655 // 11656 // # Scalar indices 11657 // ref[indices, ...] -= updates[...] 11658 // 11659 // # Vector indices (for each i) 11660 // ref[indices[i], ...] -= updates[i, ...] 11661 // 11662 // # High rank indices (for each i, ..., j) 11663 // ref[indices[i, ..., j], ...] -= updates[i, ..., j, ...] 11664 // 11665 // Duplicate entries are handled correctly: if multiple `indices` reference 11666 // the same location, their contributions add. 11667 // 11668 // Requires `updates.shape = indices.shape + ref.shape[1:]` or `updates.shape = []`. 11669 // 11670 // <div style="width:70%; margin:auto; margin-bottom:10px; margin-top:20px;"> 11671 // <img style="width:100%" src='https://www.tensorflow.org/images/ScatterAdd.png' alt> 11672 // </div> 11673 // 11674 // Arguments: 11675 // resource: Should be from a `Variable` node. 11676 // indices: A tensor of indices into the first dimension of `ref`. 11677 // updates: A tensor of updated values to add to `ref`. 11678 // 11679 // Returns the created operation. 11680 func ResourceScatterSub(scope *Scope, resource tf.Output, indices tf.Output, updates tf.Output) (o *tf.Operation) { 11681 if scope.Err() != nil { 11682 return 11683 } 11684 opspec := tf.OpSpec{ 11685 Type: "ResourceScatterSub", 11686 Input: []tf.Input{ 11687 resource, indices, updates, 11688 }, 11689 } 11690 return scope.AddOperation(opspec) 11691 } 11692 11693 // Adds sparse updates to the variable referenced by `resource`. 11694 // 11695 // This operation computes 11696 // 11697 // # Scalar indices 11698 // ref[indices, ...] += updates[...] 11699 // 11700 // # Vector indices (for each i) 11701 // ref[indices[i], ...] += updates[i, ...] 11702 // 11703 // # High rank indices (for each i, ..., j) 11704 // ref[indices[i, ..., j], ...] += updates[i, ..., j, ...] 11705 // 11706 // Duplicate entries are handled correctly: if multiple `indices` reference 11707 // the same location, their contributions add. 11708 // 11709 // Requires `updates.shape = indices.shape + ref.shape[1:]` or `updates.shape = []`. 11710 // 11711 // <div style="width:70%; margin:auto; margin-bottom:10px; margin-top:20px;"> 11712 // <img style="width:100%" src='https://www.tensorflow.org/images/ScatterAdd.png' alt> 11713 // </div> 11714 // 11715 // Arguments: 11716 // resource: Should be from a `Variable` node. 11717 // indices: A tensor of indices into the first dimension of `ref`. 11718 // updates: A tensor of updated values to add to `ref`. 11719 // 11720 // Returns the created operation. 11721 func ResourceScatterAdd(scope *Scope, resource tf.Output, indices tf.Output, updates tf.Output) (o *tf.Operation) { 11722 if scope.Err() != nil { 11723 return 11724 } 11725 opspec := tf.OpSpec{ 11726 Type: "ResourceScatterAdd", 11727 Input: []tf.Input{ 11728 resource, indices, updates, 11729 }, 11730 } 11731 return scope.AddOperation(opspec) 11732 } 11733 11734 // Reads the value of a variable. 11735 // 11736 // The tensor returned by this operation is immutable. 11737 // 11738 // The value returned by this operation is guaranteed to be influenced by all the 11739 // writes on which this operation depends directly or indirectly, and to not be 11740 // influenced by any of the writes which depend directly or indirectly on this 11741 // operation. 11742 // 11743 // Arguments: 11744 // resource: handle to the resource in which to store the variable. 11745 // dtype: the dtype of the value. 11746 func ReadVariableOp(scope *Scope, resource tf.Output, dtype tf.DataType) (value tf.Output) { 11747 if scope.Err() != nil { 11748 return 11749 } 11750 attrs := map[string]interface{}{"dtype": dtype} 11751 opspec := tf.OpSpec{ 11752 Type: "ReadVariableOp", 11753 Input: []tf.Input{ 11754 resource, 11755 }, 11756 Attrs: attrs, 11757 } 11758 op := scope.AddOperation(opspec) 11759 return op.Output(0) 11760 } 11761 11762 // ResourceSparseApplyProximalAdagradAttr is an optional argument to ResourceSparseApplyProximalAdagrad. 11763 type ResourceSparseApplyProximalAdagradAttr func(optionalAttr) 11764 11765 // ResourceSparseApplyProximalAdagradUseLocking sets the optional use_locking attribute to value. 11766 // 11767 // value: If True, updating of the var and accum tensors will be protected by 11768 // a lock; otherwise the behavior is undefined, but may exhibit less contention. 11769 // If not specified, defaults to false 11770 func ResourceSparseApplyProximalAdagradUseLocking(value bool) ResourceSparseApplyProximalAdagradAttr { 11771 return func(m optionalAttr) { 11772 m["use_locking"] = value 11773 } 11774 } 11775 11776 // Sparse update entries in '*var' and '*accum' according to FOBOS algorithm. 11777 // 11778 // That is for rows we have grad for, we update var and accum as follows: 11779 // accum += grad * grad 11780 // prox_v = var 11781 // prox_v -= lr * grad * (1 / sqrt(accum)) 11782 // var = sign(prox_v)/(1+lr*l2) * max{|prox_v|-lr*l1,0} 11783 // 11784 // Arguments: 11785 // var_: Should be from a Variable(). 11786 // accum: Should be from a Variable(). 11787 // lr: Learning rate. Must be a scalar. 11788 // l1: L1 regularization. Must be a scalar. 11789 // l2: L2 regularization. Must be a scalar. 11790 // grad: The gradient. 11791 // indices: A vector of indices into the first dimension of var and accum. 11792 // 11793 // Returns the created operation. 11794 func ResourceSparseApplyProximalAdagrad(scope *Scope, var_ tf.Output, accum tf.Output, lr tf.Output, l1 tf.Output, l2 tf.Output, grad tf.Output, indices tf.Output, optional ...ResourceSparseApplyProximalAdagradAttr) (o *tf.Operation) { 11795 if scope.Err() != nil { 11796 return 11797 } 11798 attrs := map[string]interface{}{} 11799 for _, a := range optional { 11800 a(attrs) 11801 } 11802 opspec := tf.OpSpec{ 11803 Type: "ResourceSparseApplyProximalAdagrad", 11804 Input: []tf.Input{ 11805 var_, accum, lr, l1, l2, grad, indices, 11806 }, 11807 Attrs: attrs, 11808 } 11809 return scope.AddOperation(opspec) 11810 } 11811 11812 // DecodeJpegAttr is an optional argument to DecodeJpeg. 11813 type DecodeJpegAttr func(optionalAttr) 11814 11815 // DecodeJpegChannels sets the optional channels attribute to value. 11816 // 11817 // value: Number of color channels for the decoded image. 11818 // If not specified, defaults to 0 11819 func DecodeJpegChannels(value int64) DecodeJpegAttr { 11820 return func(m optionalAttr) { 11821 m["channels"] = value 11822 } 11823 } 11824 11825 // DecodeJpegRatio sets the optional ratio attribute to value. 11826 // 11827 // value: Downscaling ratio. 11828 // If not specified, defaults to 1 11829 func DecodeJpegRatio(value int64) DecodeJpegAttr { 11830 return func(m optionalAttr) { 11831 m["ratio"] = value 11832 } 11833 } 11834 11835 // DecodeJpegFancyUpscaling sets the optional fancy_upscaling attribute to value. 11836 // 11837 // value: If true use a slower but nicer upscaling of the 11838 // chroma planes (yuv420/422 only). 11839 // If not specified, defaults to true 11840 func DecodeJpegFancyUpscaling(value bool) DecodeJpegAttr { 11841 return func(m optionalAttr) { 11842 m["fancy_upscaling"] = value 11843 } 11844 } 11845 11846 // DecodeJpegTryRecoverTruncated sets the optional try_recover_truncated attribute to value. 11847 // 11848 // value: If true try to recover an image from truncated input. 11849 // If not specified, defaults to false 11850 func DecodeJpegTryRecoverTruncated(value bool) DecodeJpegAttr { 11851 return func(m optionalAttr) { 11852 m["try_recover_truncated"] = value 11853 } 11854 } 11855 11856 // DecodeJpegAcceptableFraction sets the optional acceptable_fraction attribute to value. 11857 // 11858 // value: The minimum required fraction of lines before a truncated 11859 // input is accepted. 11860 // If not specified, defaults to 1 11861 func DecodeJpegAcceptableFraction(value float32) DecodeJpegAttr { 11862 return func(m optionalAttr) { 11863 m["acceptable_fraction"] = value 11864 } 11865 } 11866 11867 // DecodeJpegDctMethod sets the optional dct_method attribute to value. 11868 // 11869 // value: string specifying a hint about the algorithm used for 11870 // decompression. Defaults to "" which maps to a system-specific 11871 // default. Currently valid values are ["INTEGER_FAST", 11872 // "INTEGER_ACCURATE"]. The hint may be ignored (e.g., the internal 11873 // jpeg library changes to a version that does not have that specific 11874 // option.) 11875 // If not specified, defaults to "" 11876 func DecodeJpegDctMethod(value string) DecodeJpegAttr { 11877 return func(m optionalAttr) { 11878 m["dct_method"] = value 11879 } 11880 } 11881 11882 // Decode a JPEG-encoded image to a uint8 tensor. 11883 // 11884 // The attr `channels` indicates the desired number of color channels for the 11885 // decoded image. 11886 // 11887 // Accepted values are: 11888 // 11889 // * 0: Use the number of channels in the JPEG-encoded image. 11890 // * 1: output a grayscale image. 11891 // * 3: output an RGB image. 11892 // 11893 // If needed, the JPEG-encoded image is transformed to match the requested number 11894 // of color channels. 11895 // 11896 // The attr `ratio` allows downscaling the image by an integer factor during 11897 // decoding. Allowed values are: 1, 2, 4, and 8. This is much faster than 11898 // downscaling the image later. 11899 // 11900 // 11901 // This op also supports decoding PNGs and non-animated GIFs since the interface is 11902 // the same, though it is cleaner to use `tf.image.decode_image`. 11903 // 11904 // Arguments: 11905 // contents: 0-D. The JPEG-encoded image. 11906 // 11907 // Returns 3-D with shape `[height, width, channels]`.. 11908 func DecodeJpeg(scope *Scope, contents tf.Output, optional ...DecodeJpegAttr) (image tf.Output) { 11909 if scope.Err() != nil { 11910 return 11911 } 11912 attrs := map[string]interface{}{} 11913 for _, a := range optional { 11914 a(attrs) 11915 } 11916 opspec := tf.OpSpec{ 11917 Type: "DecodeJpeg", 11918 Input: []tf.Input{ 11919 contents, 11920 }, 11921 Attrs: attrs, 11922 } 11923 op := scope.AddOperation(opspec) 11924 return op.Output(0) 11925 } 11926 11927 // DepthwiseConv2dNativeBackpropInputAttr is an optional argument to DepthwiseConv2dNativeBackpropInput. 11928 type DepthwiseConv2dNativeBackpropInputAttr func(optionalAttr) 11929 11930 // DepthwiseConv2dNativeBackpropInputDataFormat sets the optional data_format attribute to value. 11931 // 11932 // value: Specify the data format of the input and output data. With the 11933 // default format "NHWC", the data is stored in the order of: 11934 // [batch, height, width, channels]. 11935 // Alternatively, the format could be "NCHW", the data storage order of: 11936 // [batch, channels, height, width]. 11937 // If not specified, defaults to "NHWC" 11938 func DepthwiseConv2dNativeBackpropInputDataFormat(value string) DepthwiseConv2dNativeBackpropInputAttr { 11939 return func(m optionalAttr) { 11940 m["data_format"] = value 11941 } 11942 } 11943 11944 // DepthwiseConv2dNativeBackpropInputDilations sets the optional dilations attribute to value. 11945 // 11946 // value: 1-D tensor of length 4. The dilation factor for each dimension of 11947 // `input`. If set to k > 1, there will be k-1 skipped cells between each filter 11948 // element on that dimension. The dimension order is determined by the value of 11949 // `data_format`, see above for details. Dilations in the batch and depth 11950 // dimensions must be 1. 11951 // If not specified, defaults to <i:1 i:1 i:1 i:1 > 11952 func DepthwiseConv2dNativeBackpropInputDilations(value []int64) DepthwiseConv2dNativeBackpropInputAttr { 11953 return func(m optionalAttr) { 11954 m["dilations"] = value 11955 } 11956 } 11957 11958 // Computes the gradients of depthwise convolution with respect to the input. 11959 // 11960 // Arguments: 11961 // input_sizes: An integer vector representing the shape of `input`, based 11962 // on `data_format`. For example, if `data_format` is 'NHWC' then 11963 // `input` is a 4-D `[batch, height, width, channels]` tensor. 11964 // filter: 4-D with shape 11965 // `[filter_height, filter_width, in_channels, depthwise_multiplier]`. 11966 // out_backprop: 4-D with shape based on `data_format`. 11967 // For example, if `data_format` is 'NHWC' then 11968 // out_backprop shape is `[batch, out_height, out_width, out_channels]`. 11969 // Gradients w.r.t. the output of the convolution. 11970 // strides: The stride of the sliding window for each dimension of the input 11971 // of the convolution. 11972 // padding: The type of padding algorithm to use. 11973 // 11974 // Returns 4-D with shape according to `data_format`. For example, if 11975 // `data_format` is 'NHWC', output shape is `[batch, in_height, 11976 // in_width, in_channels]`. Gradient w.r.t. the input of the 11977 // convolution. 11978 func DepthwiseConv2dNativeBackpropInput(scope *Scope, input_sizes tf.Output, filter tf.Output, out_backprop tf.Output, strides []int64, padding string, optional ...DepthwiseConv2dNativeBackpropInputAttr) (output tf.Output) { 11979 if scope.Err() != nil { 11980 return 11981 } 11982 attrs := map[string]interface{}{"strides": strides, "padding": padding} 11983 for _, a := range optional { 11984 a(attrs) 11985 } 11986 opspec := tf.OpSpec{ 11987 Type: "DepthwiseConv2dNativeBackpropInput", 11988 Input: []tf.Input{ 11989 input_sizes, filter, out_backprop, 11990 }, 11991 Attrs: attrs, 11992 } 11993 op := scope.AddOperation(opspec) 11994 return op.Output(0) 11995 } 11996 11997 // EditDistanceAttr is an optional argument to EditDistance. 11998 type EditDistanceAttr func(optionalAttr) 11999 12000 // EditDistanceNormalize sets the optional normalize attribute to value. 12001 // 12002 // value: boolean (if true, edit distances are normalized by length of truth). 12003 // 12004 // The output is: 12005 // If not specified, defaults to true 12006 func EditDistanceNormalize(value bool) EditDistanceAttr { 12007 return func(m optionalAttr) { 12008 m["normalize"] = value 12009 } 12010 } 12011 12012 // Computes the (possibly normalized) Levenshtein Edit Distance. 12013 // 12014 // The inputs are variable-length sequences provided by SparseTensors 12015 // (hypothesis_indices, hypothesis_values, hypothesis_shape) 12016 // and 12017 // (truth_indices, truth_values, truth_shape). 12018 // 12019 // The inputs are: 12020 // 12021 // Arguments: 12022 // hypothesis_indices: The indices of the hypothesis list SparseTensor. 12023 // This is an N x R int64 matrix. 12024 // hypothesis_values: The values of the hypothesis list SparseTensor. 12025 // This is an N-length vector. 12026 // hypothesis_shape: The shape of the hypothesis list SparseTensor. 12027 // This is an R-length vector. 12028 // truth_indices: The indices of the truth list SparseTensor. 12029 // This is an M x R int64 matrix. 12030 // truth_values: The values of the truth list SparseTensor. 12031 // This is an M-length vector. 12032 // truth_shape: truth indices, vector. 12033 // 12034 // Returns A dense float tensor with rank R - 1. 12035 // 12036 // For the example input: 12037 // 12038 // // hypothesis represents a 2x1 matrix with variable-length values: 12039 // // (0,0) = ["a"] 12040 // // (1,0) = ["b"] 12041 // hypothesis_indices = [[0, 0, 0], 12042 // [1, 0, 0]] 12043 // hypothesis_values = ["a", "b"] 12044 // hypothesis_shape = [2, 1, 1] 12045 // 12046 // // truth represents a 2x2 matrix with variable-length values: 12047 // // (0,0) = [] 12048 // // (0,1) = ["a"] 12049 // // (1,0) = ["b", "c"] 12050 // // (1,1) = ["a"] 12051 // truth_indices = [[0, 1, 0], 12052 // [1, 0, 0], 12053 // [1, 0, 1], 12054 // [1, 1, 0]] 12055 // truth_values = ["a", "b", "c", "a"] 12056 // truth_shape = [2, 2, 2] 12057 // normalize = true 12058 // 12059 // The output will be: 12060 // 12061 // // output is a 2x2 matrix with edit distances normalized by truth lengths. 12062 // output = [[inf, 1.0], // (0,0): no truth, (0,1): no hypothesis 12063 // [0.5, 1.0]] // (1,0): addition, (1,1): no hypothesis 12064 func EditDistance(scope *Scope, hypothesis_indices tf.Output, hypothesis_values tf.Output, hypothesis_shape tf.Output, truth_indices tf.Output, truth_values tf.Output, truth_shape tf.Output, optional ...EditDistanceAttr) (output tf.Output) { 12065 if scope.Err() != nil { 12066 return 12067 } 12068 attrs := map[string]interface{}{} 12069 for _, a := range optional { 12070 a(attrs) 12071 } 12072 opspec := tf.OpSpec{ 12073 Type: "EditDistance", 12074 Input: []tf.Input{ 12075 hypothesis_indices, hypothesis_values, hypothesis_shape, truth_indices, truth_values, truth_shape, 12076 }, 12077 Attrs: attrs, 12078 } 12079 op := scope.AddOperation(opspec) 12080 return op.Output(0) 12081 } 12082 12083 // Returns 0 if x == 0, and x * log(y) otherwise, elementwise. 12084 func Xlogy(scope *Scope, x tf.Output, y tf.Output) (z tf.Output) { 12085 if scope.Err() != nil { 12086 return 12087 } 12088 opspec := tf.OpSpec{ 12089 Type: "Xlogy", 12090 Input: []tf.Input{ 12091 x, y, 12092 }, 12093 } 12094 op := scope.AddOperation(opspec) 12095 return op.Output(0) 12096 } 12097 12098 // Stops gradient computation. 12099 // 12100 // When executed in a graph, this op outputs its input tensor as-is. 12101 // 12102 // When building ops to compute gradients, this op prevents the contribution of 12103 // its inputs to be taken into account. Normally, the gradient generator adds ops 12104 // to a graph to compute the derivatives of a specified 'loss' by recursively 12105 // finding out inputs that contributed to its computation. If you insert this op 12106 // in the graph it inputs are masked from the gradient generator. They are not 12107 // taken into account for computing gradients. 12108 // 12109 // This is useful any time you want to compute a value with TensorFlow but need 12110 // to pretend that the value was a constant. Some examples include: 12111 // 12112 // * The *EM* algorithm where the *M-step* should not involve backpropagation 12113 // through the output of the *E-step*. 12114 // * Contrastive divergence training of Boltzmann machines where, when 12115 // differentiating the energy function, the training must not backpropagate 12116 // through the graph that generated the samples from the model. 12117 // * Adversarial training, where no backprop should happen through the adversarial 12118 // example generation process. 12119 func StopGradient(scope *Scope, input tf.Output) (output tf.Output) { 12120 if scope.Err() != nil { 12121 return 12122 } 12123 opspec := tf.OpSpec{ 12124 Type: "StopGradient", 12125 Input: []tf.Input{ 12126 input, 12127 }, 12128 } 12129 op := scope.AddOperation(opspec) 12130 return op.Output(0) 12131 } 12132 12133 // Eagerly executes a python function to compute func(input)->output. The 12134 // 12135 // semantics of the input, output, and attributes are the same as those for 12136 // PyFunc. 12137 func EagerPyFunc(scope *Scope, input []tf.Output, token string, Tout []tf.DataType) (output []tf.Output) { 12138 if scope.Err() != nil { 12139 return 12140 } 12141 attrs := map[string]interface{}{"token": token, "Tout": Tout} 12142 opspec := tf.OpSpec{ 12143 Type: "EagerPyFunc", 12144 Input: []tf.Input{ 12145 tf.OutputList(input), 12146 }, 12147 Attrs: attrs, 12148 } 12149 op := scope.AddOperation(opspec) 12150 if scope.Err() != nil { 12151 return 12152 } 12153 var idx int 12154 var err error 12155 if output, idx, err = makeOutputList(op, idx, "output"); err != nil { 12156 scope.UpdateErr("EagerPyFunc", err) 12157 return 12158 } 12159 return output 12160 } 12161 12162 // Concats all tensors in the list along the 0th dimension. 12163 // 12164 // Requires that all tensors have the same shape except the first dimension. 12165 // 12166 // input_handle: The input list. 12167 // element_shape: The shape of the uninitialized elements in the list. If the first 12168 // dimension is not -1, it is assumed that all list elements have the same 12169 // leading dim. 12170 // leading_dims: The list of leading dims of uninitialized list elements. Used if 12171 // the leading dim of input_handle.element_shape or the element_shape input arg 12172 // is not already set. 12173 // tensor: The concated result. 12174 // lengths: Output tensor containing sizes of the 0th dimension of tensors in the list, used for computing the gradient. 12175 // 12176 func TensorListConcatV2(scope *Scope, input_handle tf.Output, element_shape tf.Output, leading_dims tf.Output, element_dtype tf.DataType) (tensor tf.Output, lengths tf.Output) { 12177 if scope.Err() != nil { 12178 return 12179 } 12180 attrs := map[string]interface{}{"element_dtype": element_dtype} 12181 opspec := tf.OpSpec{ 12182 Type: "TensorListConcatV2", 12183 Input: []tf.Input{ 12184 input_handle, element_shape, leading_dims, 12185 }, 12186 Attrs: attrs, 12187 } 12188 op := scope.AddOperation(opspec) 12189 return op.Output(0), op.Output(1) 12190 } 12191 12192 // MatrixTriangularSolveAttr is an optional argument to MatrixTriangularSolve. 12193 type MatrixTriangularSolveAttr func(optionalAttr) 12194 12195 // MatrixTriangularSolveLower sets the optional lower attribute to value. 12196 // 12197 // value: Boolean indicating whether the innermost matrices in `matrix` are 12198 // lower or upper triangular. 12199 // If not specified, defaults to true 12200 func MatrixTriangularSolveLower(value bool) MatrixTriangularSolveAttr { 12201 return func(m optionalAttr) { 12202 m["lower"] = value 12203 } 12204 } 12205 12206 // MatrixTriangularSolveAdjoint sets the optional adjoint attribute to value. 12207 // 12208 // value: Boolean indicating whether to solve with `matrix` or its (block-wise) 12209 // adjoint. 12210 // 12211 // @compatibility(numpy) 12212 // Equivalent to scipy.linalg.solve_triangular 12213 // @end_compatibility 12214 // If not specified, defaults to false 12215 func MatrixTriangularSolveAdjoint(value bool) MatrixTriangularSolveAttr { 12216 return func(m optionalAttr) { 12217 m["adjoint"] = value 12218 } 12219 } 12220 12221 // Solves systems of linear equations with upper or lower triangular matrices by 12222 // 12223 // backsubstitution. 12224 // 12225 // `matrix` is a tensor of shape `[..., M, M]` whose inner-most 2 dimensions form 12226 // square matrices. If `lower` is `True` then the strictly upper triangular part 12227 // of each inner-most matrix is assumed to be zero and not accessed. 12228 // If `lower` is False then the strictly lower triangular part of each inner-most 12229 // matrix is assumed to be zero and not accessed. 12230 // `rhs` is a tensor of shape `[..., M, K]`. 12231 // 12232 // The output is a tensor of shape `[..., M, K]`. If `adjoint` is 12233 // `True` then the innermost matrices in `output` satisfy matrix equations 12234 // `matrix[..., :, :] * output[..., :, :] = rhs[..., :, :]`. 12235 // If `adjoint` is `False` then the strictly then the innermost matrices in 12236 // `output` satisfy matrix equations 12237 // `adjoint(matrix[..., i, k]) * output[..., k, j] = rhs[..., i, j]`. 12238 // 12239 // Arguments: 12240 // matrix: Shape is `[..., M, M]`. 12241 // rhs: Shape is `[..., M, K]`. 12242 // 12243 // Returns Shape is `[..., M, K]`. 12244 func MatrixTriangularSolve(scope *Scope, matrix tf.Output, rhs tf.Output, optional ...MatrixTriangularSolveAttr) (output tf.Output) { 12245 if scope.Err() != nil { 12246 return 12247 } 12248 attrs := map[string]interface{}{} 12249 for _, a := range optional { 12250 a(attrs) 12251 } 12252 opspec := tf.OpSpec{ 12253 Type: "MatrixTriangularSolve", 12254 Input: []tf.Input{ 12255 matrix, rhs, 12256 }, 12257 Attrs: attrs, 12258 } 12259 op := scope.AddOperation(opspec) 12260 return op.Output(0) 12261 } 12262 12263 // Saves tensors in V2 checkpoint format. 12264 // 12265 // By default, saves the named tensors in full. If the caller wishes to save 12266 // specific slices of full tensors, "shape_and_slices" should be non-empty strings 12267 // and correspondingly well-formed. 12268 // 12269 // Arguments: 12270 // prefix: Must have a single element. The prefix of the V2 checkpoint to which we 12271 // write the tensors. 12272 // tensor_names: shape {N}. The names of the tensors to be saved. 12273 // shape_and_slices: shape {N}. The slice specs of the tensors to be saved. 12274 // Empty strings indicate that they are non-partitioned tensors. 12275 // tensors: `N` tensors to save. 12276 // 12277 // Returns the created operation. 12278 func SaveV2(scope *Scope, prefix tf.Output, tensor_names tf.Output, shape_and_slices tf.Output, tensors []tf.Output) (o *tf.Operation) { 12279 if scope.Err() != nil { 12280 return 12281 } 12282 opspec := tf.OpSpec{ 12283 Type: "SaveV2", 12284 Input: []tf.Input{ 12285 prefix, tensor_names, shape_and_slices, tf.OutputList(tensors), 12286 }, 12287 } 12288 return scope.AddOperation(opspec) 12289 } 12290 12291 // Concatenates quantized tensors along one dimension. 12292 // 12293 // Arguments: 12294 // concat_dim: 0-D. The dimension along which to concatenate. Must be in the 12295 // range [0, rank(values)). 12296 // values: The `N` Tensors to concatenate. Their ranks and types must match, 12297 // and their sizes must match in all dimensions except `concat_dim`. 12298 // input_mins: The minimum scalar values for each of the input tensors. 12299 // input_maxes: The maximum scalar values for each of the input tensors. 12300 // 12301 // Returns A `Tensor` with the concatenation of values stacked along the 12302 // `concat_dim` dimension. This tensor's shape matches that of `values` except 12303 // in `concat_dim` where it has the sum of the sizes.The float value that the minimum quantized output value represents.The float value that the maximum quantized output value represents. 12304 func QuantizedConcat(scope *Scope, concat_dim tf.Output, values []tf.Output, input_mins []tf.Output, input_maxes []tf.Output) (output tf.Output, output_min tf.Output, output_max tf.Output) { 12305 if scope.Err() != nil { 12306 return 12307 } 12308 opspec := tf.OpSpec{ 12309 Type: "QuantizedConcat", 12310 Input: []tf.Input{ 12311 concat_dim, tf.OutputList(values), tf.OutputList(input_mins), tf.OutputList(input_maxes), 12312 }, 12313 } 12314 op := scope.AddOperation(opspec) 12315 return op.Output(0), op.Output(1), op.Output(2) 12316 } 12317 12318 // Slice a `SparseTensor` based on the `start` and `size`. 12319 // 12320 // For example, if the input is 12321 // 12322 // input_tensor = shape = [2, 7] 12323 // [ a d e ] 12324 // [b c ] 12325 // 12326 // Graphically the output tensors are: 12327 // 12328 // sparse_slice([0, 0], [2, 4]) = shape = [2, 4] 12329 // [ a ] 12330 // [b c ] 12331 // 12332 // sparse_slice([0, 4], [2, 3]) = shape = [2, 3] 12333 // [ d e ] 12334 // [ ] 12335 // 12336 // Arguments: 12337 // indices: 2-D tensor represents the indices of the sparse tensor. 12338 // values: 1-D tensor represents the values of the sparse tensor. 12339 // shape: 1-D. tensor represents the shape of the sparse tensor. 12340 // start: 1-D. tensor represents the start of the slice. 12341 // size: 1-D. tensor represents the size of the slice. 12342 // output indices: A list of 1-D tensors represents the indices of the output 12343 // sparse tensors. 12344 // 12345 // Returns A list of 1-D tensors represents the values of the output sparse 12346 // tensors.A list of 1-D tensors represents the shape of the output sparse 12347 // tensors. 12348 func SparseSlice(scope *Scope, indices tf.Output, values tf.Output, shape tf.Output, start tf.Output, size tf.Output) (output_indices tf.Output, output_values tf.Output, output_shape tf.Output) { 12349 if scope.Err() != nil { 12350 return 12351 } 12352 opspec := tf.OpSpec{ 12353 Type: "SparseSlice", 12354 Input: []tf.Input{ 12355 indices, values, shape, start, size, 12356 }, 12357 } 12358 op := scope.AddOperation(opspec) 12359 return op.Output(0), op.Output(1), op.Output(2) 12360 } 12361 12362 // Runs multiple additive regression ensemble predictors on input instances and 12363 // 12364 // computes the logits. It is designed to be used during prediction. 12365 // It traverses all the trees and calculates the final score for each instance. 12366 // 12367 // Arguments: 12368 // 12369 // bucketized_features: A list of rank 1 Tensors containing bucket id for each 12370 // feature. 12371 // logits_dimension: scalar, dimension of the logits, to be used for partial logits 12372 // shape. 12373 // 12374 // Returns Output rank 2 Tensor containing logits for each example. 12375 func BoostedTreesPredict(scope *Scope, tree_ensemble_handle tf.Output, bucketized_features []tf.Output, logits_dimension int64) (logits tf.Output) { 12376 if scope.Err() != nil { 12377 return 12378 } 12379 attrs := map[string]interface{}{"logits_dimension": logits_dimension} 12380 opspec := tf.OpSpec{ 12381 Type: "BoostedTreesPredict", 12382 Input: []tf.Input{ 12383 tree_ensemble_handle, tf.OutputList(bucketized_features), 12384 }, 12385 Attrs: attrs, 12386 } 12387 op := scope.AddOperation(opspec) 12388 return op.Output(0) 12389 } 12390 12391 // Pads a tensor with zeros. 12392 // 12393 // This operation pads a `input` with zeros according to the `paddings` you 12394 // specify. `paddings` is an integer tensor with shape `[Dn, 2]`, where n is the 12395 // rank of `input`. For each dimension D of `input`, `paddings[D, 0]` indicates 12396 // how many zeros to add before the contents of `input` in that dimension, and 12397 // `paddings[D, 1]` indicates how many zeros to add after the contents of `input` 12398 // in that dimension. 12399 // 12400 // The padded size of each dimension D of the output is: 12401 // 12402 // `paddings(D, 0) + input.dim_size(D) + paddings(D, 1)` 12403 // 12404 // For example: 12405 // 12406 // ``` 12407 // # 't' is [[1, 1], [2, 2]] 12408 // # 'paddings' is [[1, 1], [2, 2]] 12409 // # rank of 't' is 2 12410 // pad(t, paddings) ==> [[0, 0, 0, 0, 0, 0] 12411 // [0, 0, 1, 1, 0, 0] 12412 // [0, 0, 2, 2, 0, 0] 12413 // [0, 0, 0, 0, 0, 0]] 12414 // ``` 12415 // 12416 func Pad(scope *Scope, input tf.Output, paddings tf.Output) (output tf.Output) { 12417 if scope.Err() != nil { 12418 return 12419 } 12420 opspec := tf.OpSpec{ 12421 Type: "Pad", 12422 Input: []tf.Input{ 12423 input, paddings, 12424 }, 12425 } 12426 op := scope.AddOperation(opspec) 12427 return op.Output(0) 12428 } 12429 12430 // Checks whether a resource handle-based variable has been initialized. 12431 // 12432 // Arguments: 12433 // resource: the input resource handle. 12434 // 12435 // Returns a scalar boolean which is true if the variable has been 12436 // initialized. 12437 func VarIsInitializedOp(scope *Scope, resource tf.Output) (is_initialized tf.Output) { 12438 if scope.Err() != nil { 12439 return 12440 } 12441 opspec := tf.OpSpec{ 12442 Type: "VarIsInitializedOp", 12443 Input: []tf.Input{ 12444 resource, 12445 }, 12446 } 12447 op := scope.AddOperation(opspec) 12448 return op.Output(0) 12449 } 12450 12451 // Returns the min of x and y (i.e. x < y ? x : y) element-wise. 12452 // 12453 // *NOTE*: `Minimum` supports broadcasting. More about broadcasting 12454 // [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html) 12455 func Minimum(scope *Scope, x tf.Output, y tf.Output) (z tf.Output) { 12456 if scope.Err() != nil { 12457 return 12458 } 12459 opspec := tf.OpSpec{ 12460 Type: "Minimum", 12461 Input: []tf.Input{ 12462 x, y, 12463 }, 12464 } 12465 op := scope.AddOperation(opspec) 12466 return op.Output(0) 12467 } 12468 12469 // Computes scaled exponential linear: `scale * alpha * (exp(features) - 1)` 12470 // 12471 // if < 0, `scale * features` otherwise. 12472 // 12473 // To be used together with 12474 // `initializer = tf.variance_scaling_initializer(factor=1.0, mode='FAN_IN')`. 12475 // For correct dropout, use `tf.contrib.nn.alpha_dropout`. 12476 // 12477 // See [Self-Normalizing Neural Networks](https://arxiv.org/abs/1706.02515) 12478 func Selu(scope *Scope, features tf.Output) (activations tf.Output) { 12479 if scope.Err() != nil { 12480 return 12481 } 12482 opspec := tf.OpSpec{ 12483 Type: "Selu", 12484 Input: []tf.Input{ 12485 features, 12486 }, 12487 } 12488 op := scope.AddOperation(opspec) 12489 return op.Output(0) 12490 } 12491 12492 // SetSizeAttr is an optional argument to SetSize. 12493 type SetSizeAttr func(optionalAttr) 12494 12495 // SetSizeValidateIndices sets the optional validate_indices attribute to value. 12496 // If not specified, defaults to true 12497 func SetSizeValidateIndices(value bool) SetSizeAttr { 12498 return func(m optionalAttr) { 12499 m["validate_indices"] = value 12500 } 12501 } 12502 12503 // Number of unique elements along last dimension of input `set`. 12504 // 12505 // Input `set` is a `SparseTensor` represented by `set_indices`, `set_values`, 12506 // and `set_shape`. The last dimension contains values in a set, duplicates are 12507 // allowed but ignored. 12508 // 12509 // If `validate_indices` is `True`, this op validates the order and range of `set` 12510 // indices. 12511 // 12512 // Arguments: 12513 // set_indices: 2D `Tensor`, indices of a `SparseTensor`. 12514 // set_values: 1D `Tensor`, values of a `SparseTensor`. 12515 // set_shape: 1D `Tensor`, shape of a `SparseTensor`. 12516 // 12517 // Returns For `set` ranked `n`, this is a `Tensor` with rank `n-1`, and the same 1st 12518 // `n-1` dimensions as `set`. Each value is the number of unique elements in 12519 // the corresponding `[0...n-1]` dimension of `set`. 12520 func SetSize(scope *Scope, set_indices tf.Output, set_values tf.Output, set_shape tf.Output, optional ...SetSizeAttr) (size tf.Output) { 12521 if scope.Err() != nil { 12522 return 12523 } 12524 attrs := map[string]interface{}{} 12525 for _, a := range optional { 12526 a(attrs) 12527 } 12528 opspec := tf.OpSpec{ 12529 Type: "SetSize", 12530 Input: []tf.Input{ 12531 set_indices, set_values, set_shape, 12532 }, 12533 Attrs: attrs, 12534 } 12535 op := scope.AddOperation(opspec) 12536 return op.Output(0) 12537 } 12538 12539 // Adds sparse `updates` to an existing tensor according to `indices`. 12540 // 12541 // This operation creates a new tensor by adding sparse `updates` to the passed 12542 // in `tensor`. 12543 // This operation is very similar to `tf.scatter_nd_add`, except that the updates 12544 // are added onto an existing tensor (as opposed to a variable). If the memory 12545 // for the existing tensor cannot be re-used, a copy is made and updated. 12546 // 12547 // `indices` is an integer tensor containing indices into a new tensor of shape 12548 // `shape`. The last dimension of `indices` can be at most the rank of `shape`: 12549 // 12550 // indices.shape[-1] <= shape.rank 12551 // 12552 // The last dimension of `indices` corresponds to indices into elements 12553 // (if `indices.shape[-1] = shape.rank`) or slices 12554 // (if `indices.shape[-1] < shape.rank`) along dimension `indices.shape[-1]` of 12555 // `shape`. `updates` is a tensor with shape 12556 // 12557 // indices.shape[:-1] + shape[indices.shape[-1]:] 12558 // 12559 // The simplest form of tensor_scatter_add is to add individual elements to a 12560 // tensor by index. For example, say we want to add 4 elements in a rank-1 12561 // tensor with 8 elements. 12562 // 12563 // In Python, this scatter add operation would look like this: 12564 // 12565 // ```python 12566 // indices = tf.constant([[4], [3], [1], [7]]) 12567 // updates = tf.constant([9, 10, 11, 12]) 12568 // tensor = tf.ones([8], dtype=tf.int32) 12569 // updated = tf.tensor_scatter_add(tensor, indices, updates) 12570 // with tf.Session() as sess: 12571 // print(sess.run(scatter)) 12572 // ``` 12573 // 12574 // The resulting tensor would look like this: 12575 // 12576 // [1, 12, 1, 11, 10, 1, 1, 13] 12577 // 12578 // We can also, insert entire slices of a higher rank tensor all at once. For 12579 // example, if we wanted to insert two slices in the first dimension of a 12580 // rank-3 tensor with two matrices of new values. 12581 // 12582 // In Python, this scatter add operation would look like this: 12583 // 12584 // ```python 12585 // indices = tf.constant([[0], [2]]) 12586 // updates = tf.constant([[[5, 5, 5, 5], [6, 6, 6, 6], 12587 // [7, 7, 7, 7], [8, 8, 8, 8]], 12588 // [[5, 5, 5, 5], [6, 6, 6, 6], 12589 // [7, 7, 7, 7], [8, 8, 8, 8]]]) 12590 // tensor = tf.ones([4, 4, 4]) 12591 // updated = tf.tensor_scatter_add(tensor, indices, updates) 12592 // with tf.Session() as sess: 12593 // print(sess.run(scatter)) 12594 // ``` 12595 // 12596 // The resulting tensor would look like this: 12597 // 12598 // [[[6, 6, 6, 6], [7, 7, 7, 7], [8, 8, 8, 8], [9, 9, 9, 9]], 12599 // [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]], 12600 // [[6, 6, 6, 6], [7, 7, 7, 7], [8, 8, 8, 8], [9, 9, 9, 9]], 12601 // [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]] 12602 // 12603 // Note that on CPU, if an out of bound index is found, an error is returned. 12604 // On GPU, if an out of bound index is found, the index is ignored. 12605 // 12606 // Arguments: 12607 // tensor: Tensor to copy/update. 12608 // indices: Index tensor. 12609 // updates: Updates to scatter into output. 12610 // 12611 // Returns A new tensor copied from tensor and updates added according to the indices. 12612 func TensorScatterAdd(scope *Scope, tensor tf.Output, indices tf.Output, updates tf.Output) (output tf.Output) { 12613 if scope.Err() != nil { 12614 return 12615 } 12616 opspec := tf.OpSpec{ 12617 Type: "TensorScatterAdd", 12618 Input: []tf.Input{ 12619 tensor, indices, updates, 12620 }, 12621 } 12622 op := scope.AddOperation(opspec) 12623 return op.Output(0) 12624 } 12625 12626 // Computes the sign and the log of the absolute value of the determinant of 12627 // 12628 // one or more square matrices. 12629 // 12630 // The input is a tensor of shape `[N, M, M]` whose inner-most 2 dimensions 12631 // form square matrices. The outputs are two tensors containing the signs and 12632 // absolute values of the log determinants for all N input submatrices 12633 // `[..., :, :]` such that the determinant = sign*exp(log_abs_determinant). 12634 // The log_abs_determinant is computed as det(P)*sum(log(diag(LU))) where LU 12635 // is the LU decomposition of the input and P is the corresponding 12636 // permutation matrix. 12637 // 12638 // Arguments: 12639 // input: Shape is `[N, M, M]`. 12640 // 12641 // Returns The signs of the log determinants of the inputs. Shape is `[N]`.The logs of the absolute values of the determinants 12642 // of the N input matrices. Shape is `[N]`. 12643 func LogMatrixDeterminant(scope *Scope, input tf.Output) (sign tf.Output, log_abs_determinant tf.Output) { 12644 if scope.Err() != nil { 12645 return 12646 } 12647 opspec := tf.OpSpec{ 12648 Type: "LogMatrixDeterminant", 12649 Input: []tf.Input{ 12650 input, 12651 }, 12652 } 12653 op := scope.AddOperation(opspec) 12654 return op.Output(0), op.Output(1) 12655 } 12656 12657 // Says whether the targets are in the top `K` predictions. 12658 // 12659 // This outputs a `batch_size` bool array, an entry `out[i]` is `true` if the 12660 // prediction for the target class is among the top `k` predictions among 12661 // all predictions for example `i`. Note that the behavior of `InTopK` differs 12662 // from the `TopK` op in its handling of ties; if multiple classes have the 12663 // same prediction value and straddle the top-`k` boundary, all of those 12664 // classes are considered to be in the top `k`. 12665 // 12666 // More formally, let 12667 // 12668 // \\(predictions_i\\) be the predictions for all classes for example `i`, 12669 // \\(targets_i\\) be the target class for example `i`, 12670 // \\(out_i\\) be the output for example `i`, 12671 // 12672 // $$out_i = predictions_{i, targets_i} \in TopKIncludingTies(predictions_i)$$ 12673 // 12674 // Arguments: 12675 // predictions: A `batch_size` x `classes` tensor. 12676 // targets: A `batch_size` vector of class ids. 12677 // k: Number of top elements to look at for computing precision. 12678 // 12679 // Returns Computed precision at `k` as a `bool Tensor`. 12680 func InTopKV2(scope *Scope, predictions tf.Output, targets tf.Output, k tf.Output) (precision tf.Output) { 12681 if scope.Err() != nil { 12682 return 12683 } 12684 opspec := tf.OpSpec{ 12685 Type: "InTopKV2", 12686 Input: []tf.Input{ 12687 predictions, targets, k, 12688 }, 12689 } 12690 op := scope.AddOperation(opspec) 12691 return op.Output(0) 12692 } 12693 12694 // Check if the input matches the regex pattern. 12695 // 12696 // The input is a string tensor of any shape. The pattern is a scalar 12697 // string tensor which is applied to every element of the input tensor. 12698 // The boolean values (True or False) of the output tensor indicate 12699 // if the input matches the regex pattern provided. 12700 // 12701 // The pattern follows the re2 syntax (https://github.com/google/re2/wiki/Syntax) 12702 // 12703 // Arguments: 12704 // input: A string tensor of the text to be processed. 12705 // pattern: A scalar string tensor containing the regular expression to match the input. 12706 // 12707 // Returns A bool tensor with the same shape as `input`. 12708 func RegexFullMatch(scope *Scope, input tf.Output, pattern tf.Output) (output tf.Output) { 12709 if scope.Err() != nil { 12710 return 12711 } 12712 opspec := tf.OpSpec{ 12713 Type: "RegexFullMatch", 12714 Input: []tf.Input{ 12715 input, pattern, 12716 }, 12717 } 12718 op := scope.AddOperation(opspec) 12719 return op.Output(0) 12720 } 12721 12722 // Converts a `RaggedTensor` into a `SparseTensor` with the same values. 12723 // 12724 // input=ragged.from_nested_row_splits(rt_dense_values, rt_nested_splits) 12725 // output=SparseTensor(indices=sparse_indices, values=sparse_values, 12726 // dense_shape=sparse_dense_shape) 12727 // 12728 // Arguments: 12729 // rt_nested_splits: The `row_splits` for the `RaggedTensor`. 12730 // rt_dense_values: The `flat_values` for the `RaggedTensor`. 12731 // 12732 // Returns The indices for the `SparseTensor`.The values of the `SparseTensor`.`sparse_dense_shape` is a tight bounding box of the input `RaggedTensor`. 12733 func RaggedTensorToSparse(scope *Scope, rt_nested_splits []tf.Output, rt_dense_values tf.Output) (sparse_indices tf.Output, sparse_values tf.Output, sparse_dense_shape tf.Output) { 12734 if scope.Err() != nil { 12735 return 12736 } 12737 opspec := tf.OpSpec{ 12738 Type: "RaggedTensorToSparse", 12739 Input: []tf.Input{ 12740 tf.OutputList(rt_nested_splits), rt_dense_values, 12741 }, 12742 } 12743 op := scope.AddOperation(opspec) 12744 return op.Output(0), op.Output(1), op.Output(2) 12745 } 12746 12747 // FusedBatchNormGradV2Attr is an optional argument to FusedBatchNormGradV2. 12748 type FusedBatchNormGradV2Attr func(optionalAttr) 12749 12750 // FusedBatchNormGradV2Epsilon sets the optional epsilon attribute to value. 12751 // 12752 // value: A small float number added to the variance of x. 12753 // If not specified, defaults to 0.0001 12754 func FusedBatchNormGradV2Epsilon(value float32) FusedBatchNormGradV2Attr { 12755 return func(m optionalAttr) { 12756 m["epsilon"] = value 12757 } 12758 } 12759 12760 // FusedBatchNormGradV2DataFormat sets the optional data_format attribute to value. 12761 // 12762 // value: The data format for y_backprop, x, x_backprop. 12763 // Either "NHWC" (default) or "NCHW". 12764 // If not specified, defaults to "NHWC" 12765 func FusedBatchNormGradV2DataFormat(value string) FusedBatchNormGradV2Attr { 12766 return func(m optionalAttr) { 12767 m["data_format"] = value 12768 } 12769 } 12770 12771 // FusedBatchNormGradV2IsTraining sets the optional is_training attribute to value. 12772 // 12773 // value: A bool value to indicate the operation is for training (default) 12774 // or inference. 12775 // If not specified, defaults to true 12776 func FusedBatchNormGradV2IsTraining(value bool) FusedBatchNormGradV2Attr { 12777 return func(m optionalAttr) { 12778 m["is_training"] = value 12779 } 12780 } 12781 12782 // Gradient for batch normalization. 12783 // 12784 // Note that the size of 4D Tensors are defined by either "NHWC" or "NCHW". 12785 // The size of 1D Tensors matches the dimension C of the 4D Tensors. 12786 // 12787 // Arguments: 12788 // y_backprop: A 4D Tensor for the gradient with respect to y. 12789 // x: A 4D Tensor for input data. 12790 // scale: A 1D Tensor for scaling factor, to scale the normalized x. 12791 // reserve_space_1: When is_training is True, a 1D Tensor for the computed batch 12792 // mean to be reused in gradient computation. When is_training is 12793 // False, a 1D Tensor for the population mean to be reused in both 12794 // 1st and 2nd order gradient computation. 12795 // reserve_space_2: When is_training is True, a 1D Tensor for the computed batch 12796 // variance (inverted variance in the cuDNN case) to be reused in 12797 // gradient computation. When is_training is False, a 1D Tensor 12798 // for the population variance to be reused in both 1st and 2nd 12799 // order gradient computation. 12800 // 12801 // Returns A 4D Tensor for the gradient with respect to x.A 1D Tensor for the gradient with respect to scale.A 1D Tensor for the gradient with respect to offset.Unused placeholder to match the mean input in FusedBatchNorm.Unused placeholder to match the variance input 12802 // in FusedBatchNorm. 12803 func FusedBatchNormGradV2(scope *Scope, y_backprop tf.Output, x tf.Output, scale tf.Output, reserve_space_1 tf.Output, reserve_space_2 tf.Output, optional ...FusedBatchNormGradV2Attr) (x_backprop tf.Output, scale_backprop tf.Output, offset_backprop tf.Output, reserve_space_3 tf.Output, reserve_space_4 tf.Output) { 12804 if scope.Err() != nil { 12805 return 12806 } 12807 attrs := map[string]interface{}{} 12808 for _, a := range optional { 12809 a(attrs) 12810 } 12811 opspec := tf.OpSpec{ 12812 Type: "FusedBatchNormGradV2", 12813 Input: []tf.Input{ 12814 y_backprop, x, scale, reserve_space_1, reserve_space_2, 12815 }, 12816 Attrs: attrs, 12817 } 12818 op := scope.AddOperation(opspec) 12819 return op.Output(0), op.Output(1), op.Output(2), op.Output(3), op.Output(4) 12820 } 12821 12822 // Component-wise multiplies a SparseTensor by a dense Tensor. 12823 // 12824 // The output locations corresponding to the implicitly zero elements in the sparse 12825 // tensor will be zero (i.e., will not take up storage space), regardless of the 12826 // contents of the dense tensor (even if it's +/-INF and that INF*0 == NaN). 12827 // 12828 // *Limitation*: this Op only broadcasts the dense side to the sparse side, but not 12829 // the other direction. 12830 // 12831 // Arguments: 12832 // sp_indices: 2-D. `N x R` matrix with the indices of non-empty values in a 12833 // SparseTensor, possibly not in canonical ordering. 12834 // sp_values: 1-D. `N` non-empty values corresponding to `sp_indices`. 12835 // sp_shape: 1-D. Shape of the input SparseTensor. 12836 // dense: `R`-D. The dense Tensor operand. 12837 // 12838 // Returns 1-D. The `N` values that are operated on. 12839 func SparseDenseCwiseMul(scope *Scope, sp_indices tf.Output, sp_values tf.Output, sp_shape tf.Output, dense tf.Output) (output tf.Output) { 12840 if scope.Err() != nil { 12841 return 12842 } 12843 opspec := tf.OpSpec{ 12844 Type: "SparseDenseCwiseMul", 12845 Input: []tf.Input{ 12846 sp_indices, sp_values, sp_shape, dense, 12847 }, 12848 } 12849 op := scope.AddOperation(opspec) 12850 return op.Output(0) 12851 } 12852 12853 // MaxPool3DGradAttr is an optional argument to MaxPool3DGrad. 12854 type MaxPool3DGradAttr func(optionalAttr) 12855 12856 // MaxPool3DGradDataFormat sets the optional data_format attribute to value. 12857 // 12858 // value: The data format of the input and output data. With the 12859 // default format "NDHWC", the data is stored in the order of: 12860 // [batch, in_depth, in_height, in_width, in_channels]. 12861 // Alternatively, the format could be "NCDHW", the data storage order is: 12862 // [batch, in_channels, in_depth, in_height, in_width]. 12863 // If not specified, defaults to "NDHWC" 12864 func MaxPool3DGradDataFormat(value string) MaxPool3DGradAttr { 12865 return func(m optionalAttr) { 12866 m["data_format"] = value 12867 } 12868 } 12869 12870 // Computes gradients of max pooling function. 12871 // 12872 // Arguments: 12873 // orig_input: The original input tensor. 12874 // orig_output: The original output tensor. 12875 // grad: Output backprop of shape `[batch, depth, rows, cols, channels]`. 12876 // ksize: 1-D tensor of length 5. The size of the window for each dimension of 12877 // the input tensor. Must have `ksize[0] = ksize[4] = 1`. 12878 // strides: 1-D tensor of length 5. The stride of the sliding window for each 12879 // dimension of `input`. Must have `strides[0] = strides[4] = 1`. 12880 // padding: The type of padding algorithm to use. 12881 func MaxPool3DGrad(scope *Scope, orig_input tf.Output, orig_output tf.Output, grad tf.Output, ksize []int64, strides []int64, padding string, optional ...MaxPool3DGradAttr) (output tf.Output) { 12882 if scope.Err() != nil { 12883 return 12884 } 12885 attrs := map[string]interface{}{"ksize": ksize, "strides": strides, "padding": padding} 12886 for _, a := range optional { 12887 a(attrs) 12888 } 12889 opspec := tf.OpSpec{ 12890 Type: "MaxPool3DGrad", 12891 Input: []tf.Input{ 12892 orig_input, orig_output, grad, 12893 }, 12894 Attrs: attrs, 12895 } 12896 op := scope.AddOperation(opspec) 12897 return op.Output(0) 12898 } 12899 12900 // Returns the name of the device on which `resource` has been placed. 12901 func ExperimentalIteratorGetDevice(scope *Scope, resource tf.Output) (device tf.Output) { 12902 if scope.Err() != nil { 12903 return 12904 } 12905 opspec := tf.OpSpec{ 12906 Type: "ExperimentalIteratorGetDevice", 12907 Input: []tf.Input{ 12908 resource, 12909 }, 12910 } 12911 op := scope.AddOperation(opspec) 12912 return op.Output(0) 12913 } 12914 12915 // SparseReduceSumAttr is an optional argument to SparseReduceSum. 12916 type SparseReduceSumAttr func(optionalAttr) 12917 12918 // SparseReduceSumKeepDims sets the optional keep_dims attribute to value. 12919 // 12920 // value: If true, retain reduced dimensions with length 1. 12921 // If not specified, defaults to false 12922 func SparseReduceSumKeepDims(value bool) SparseReduceSumAttr { 12923 return func(m optionalAttr) { 12924 m["keep_dims"] = value 12925 } 12926 } 12927 12928 // Computes the sum of elements across dimensions of a SparseTensor. 12929 // 12930 // This Op takes a SparseTensor and is the sparse counterpart to 12931 // `tf.reduce_sum()`. In particular, this Op also returns a dense `Tensor` 12932 // instead of a sparse one. 12933 // 12934 // Reduces `sp_input` along the dimensions given in `reduction_axes`. Unless 12935 // `keep_dims` is true, the rank of the tensor is reduced by 1 for each entry in 12936 // `reduction_axes`. If `keep_dims` is true, the reduced dimensions are retained 12937 // with length 1. 12938 // 12939 // If `reduction_axes` has no entries, all dimensions are reduced, and a tensor 12940 // with a single element is returned. Additionally, the axes can be negative, 12941 // which are interpreted according to the indexing rules in Python. 12942 // 12943 // Arguments: 12944 // input_indices: 2-D. `N x R` matrix with the indices of non-empty values in a 12945 // SparseTensor, possibly not in canonical ordering. 12946 // input_values: 1-D. `N` non-empty values corresponding to `input_indices`. 12947 // input_shape: 1-D. Shape of the input SparseTensor. 12948 // reduction_axes: 1-D. Length-`K` vector containing the reduction axes. 12949 // 12950 // Returns `R-K`-D. The reduced Tensor. 12951 func SparseReduceSum(scope *Scope, input_indices tf.Output, input_values tf.Output, input_shape tf.Output, reduction_axes tf.Output, optional ...SparseReduceSumAttr) (output tf.Output) { 12952 if scope.Err() != nil { 12953 return 12954 } 12955 attrs := map[string]interface{}{} 12956 for _, a := range optional { 12957 a(attrs) 12958 } 12959 opspec := tf.OpSpec{ 12960 Type: "SparseReduceSum", 12961 Input: []tf.Input{ 12962 input_indices, input_values, input_shape, reduction_axes, 12963 }, 12964 Attrs: attrs, 12965 } 12966 op := scope.AddOperation(opspec) 12967 return op.Output(0) 12968 } 12969 12970 // Records the latency of producing `input_dataset` elements in a StatsAggregator. 12971 func ExperimentalLatencyStatsDataset(scope *Scope, input_dataset tf.Output, tag tf.Output, output_types []tf.DataType, output_shapes []tf.Shape) (handle tf.Output) { 12972 if scope.Err() != nil { 12973 return 12974 } 12975 attrs := map[string]interface{}{"output_types": output_types, "output_shapes": output_shapes} 12976 opspec := tf.OpSpec{ 12977 Type: "ExperimentalLatencyStatsDataset", 12978 Input: []tf.Input{ 12979 input_dataset, tag, 12980 }, 12981 Attrs: attrs, 12982 } 12983 op := scope.AddOperation(opspec) 12984 return op.Output(0) 12985 } 12986 12987 // Adds up a `SparseTensor` and a dense `Tensor`, producing a dense `Tensor`. 12988 // 12989 // This Op does not require `a_indices` be sorted in standard lexicographic order. 12990 // 12991 // Arguments: 12992 // a_indices: 2-D. The `indices` of the `SparseTensor`, with shape `[nnz, ndims]`. 12993 // a_values: 1-D. The `values` of the `SparseTensor`, with shape `[nnz]`. 12994 // a_shape: 1-D. The `shape` of the `SparseTensor`, with shape `[ndims]`. 12995 // b: `ndims`-D Tensor. With shape `a_shape`. 12996 func SparseTensorDenseAdd(scope *Scope, a_indices tf.Output, a_values tf.Output, a_shape tf.Output, b tf.Output) (output tf.Output) { 12997 if scope.Err() != nil { 12998 return 12999 } 13000 opspec := tf.OpSpec{ 13001 Type: "SparseTensorDenseAdd", 13002 Input: []tf.Input{ 13003 a_indices, a_values, a_shape, b, 13004 }, 13005 } 13006 op := scope.AddOperation(opspec) 13007 return op.Output(0) 13008 } 13009 13010 // Split a `SparseTensor` into `num_split` tensors along one dimension. 13011 // 13012 // If the `shape[split_dim]` is not an integer multiple of `num_split`. Slices 13013 // `[0 : shape[split_dim] % num_split]` gets one extra dimension. 13014 // For example, if `split_dim = 1` and `num_split = 2` and the input is 13015 // 13016 // input_tensor = shape = [2, 7] 13017 // [ a d e ] 13018 // [b c ] 13019 // 13020 // Graphically the output tensors are: 13021 // 13022 // output_tensor[0] = shape = [2, 4] 13023 // [ a ] 13024 // [b c ] 13025 // 13026 // output_tensor[1] = shape = [2, 3] 13027 // [ d e ] 13028 // [ ] 13029 // 13030 // Arguments: 13031 // split_dim: 0-D. The dimension along which to split. Must be in the range 13032 // `[0, rank(shape))`. 13033 // indices: 2-D tensor represents the indices of the sparse tensor. 13034 // values: 1-D tensor represents the values of the sparse tensor. 13035 // shape: 1-D. tensor represents the shape of the sparse tensor. 13036 // output indices: A list of 1-D tensors represents the indices of the output 13037 // sparse tensors. 13038 // num_split: The number of ways to split. 13039 // 13040 // Returns A list of 1-D tensors represents the values of the output sparse 13041 // tensors.A list of 1-D tensors represents the shape of the output sparse 13042 // tensors. 13043 func SparseSplit(scope *Scope, split_dim tf.Output, indices tf.Output, values tf.Output, shape tf.Output, num_split int64) (output_indices []tf.Output, output_values []tf.Output, output_shape []tf.Output) { 13044 if scope.Err() != nil { 13045 return 13046 } 13047 attrs := map[string]interface{}{"num_split": num_split} 13048 opspec := tf.OpSpec{ 13049 Type: "SparseSplit", 13050 Input: []tf.Input{ 13051 split_dim, indices, values, shape, 13052 }, 13053 Attrs: attrs, 13054 } 13055 op := scope.AddOperation(opspec) 13056 if scope.Err() != nil { 13057 return 13058 } 13059 var idx int 13060 var err error 13061 if output_indices, idx, err = makeOutputList(op, idx, "output_indices"); err != nil { 13062 scope.UpdateErr("SparseSplit", err) 13063 return 13064 } 13065 if output_values, idx, err = makeOutputList(op, idx, "output_values"); err != nil { 13066 scope.UpdateErr("SparseSplit", err) 13067 return 13068 } 13069 if output_shape, idx, err = makeOutputList(op, idx, "output_shape"); err != nil { 13070 scope.UpdateErr("SparseSplit", err) 13071 return 13072 } 13073 return output_indices, output_values, output_shape 13074 } 13075 13076 // Applies sparse addition to `input` using individual values or slices 13077 // 13078 // from `updates` according to indices `indices`. The updates are non-aliasing: 13079 // `input` is only modified in-place if no other operations will use it. 13080 // Otherwise, a copy of `input` is made. This operation has a gradient with 13081 // respect to both `input` and `updates`. 13082 // 13083 // `input` is a `Tensor` with rank `P` and `indices` is a `Tensor` of rank `Q`. 13084 // 13085 // `indices` must be integer tensor, containing indices into `input`. 13086 // It must be shape \\([d_0, ..., d_{Q-2}, K]\\) where `0 < K <= P`. 13087 // 13088 // The innermost dimension of `indices` (with length `K`) corresponds to 13089 // indices into elements (if `K = P`) or `(P-K)`-dimensional slices 13090 // (if `K < P`) along the `K`th dimension of `input`. 13091 // 13092 // `updates` is `Tensor` of rank `Q-1+P-K` with shape: 13093 // 13094 // $$[d_0, ..., d_{Q-2}, input.shape[K], ..., input.shape[P-1]].$$ 13095 // 13096 // For example, say we want to add 4 scattered elements to a rank-1 tensor to 8 13097 // elements. In Python, that addition would look like this: 13098 // 13099 // input = tf.constant([1, 2, 3, 4, 5, 6, 7, 8]) 13100 // indices = tf.constant([[4], [3], [1], [7]]) 13101 // updates = tf.constant([9, 10, 11, 12]) 13102 // output = tf.scatter_nd_non_aliasing_add(input, indices, updates) 13103 // with tf.Session() as sess: 13104 // print(sess.run(output)) 13105 // 13106 // The resulting value `output` would look like this: 13107 // 13108 // [1, 13, 3, 14, 14, 6, 7, 20] 13109 // 13110 // See `tf.scatter_nd` for more details about how to make updates to slices. 13111 // 13112 // Arguments: 13113 // input: A Tensor. 13114 // indices: A Tensor. Must be one of the following types: `int32`, `int64`. 13115 // A tensor of indices into `input`. 13116 // updates: A Tensor. Must have the same type as ref. A tensor of updated values 13117 // to add to `input`. 13118 // 13119 // Returns A `Tensor` with the same shape as `input`, containing values of `input` 13120 // updated with `updates`. 13121 func ScatterNdNonAliasingAdd(scope *Scope, input tf.Output, indices tf.Output, updates tf.Output) (output tf.Output) { 13122 if scope.Err() != nil { 13123 return 13124 } 13125 opspec := tf.OpSpec{ 13126 Type: "ScatterNdNonAliasingAdd", 13127 Input: []tf.Input{ 13128 input, indices, updates, 13129 }, 13130 } 13131 op := scope.AddOperation(opspec) 13132 return op.Output(0) 13133 } 13134 13135 // Creates a MultiDeviceIterator resource. 13136 // 13137 // Arguments: 13138 // devices: A list of devices the iterator works across. 13139 // shared_name: If non-empty, this resource will be shared under the given name 13140 // across multiple sessions. 13141 // container: If non-empty, this resource is placed in the given container. 13142 // Otherwise, a default container is used. 13143 // output_types: The type list for the return values. 13144 // output_shapes: The list of shapes being produced. 13145 // 13146 // Returns Handle to the resource created. 13147 func MultiDeviceIterator(scope *Scope, devices []string, shared_name string, container string, output_types []tf.DataType, output_shapes []tf.Shape) (handle tf.Output) { 13148 if scope.Err() != nil { 13149 return 13150 } 13151 attrs := map[string]interface{}{"devices": devices, "shared_name": shared_name, "container": container, "output_types": output_types, "output_shapes": output_shapes} 13152 opspec := tf.OpSpec{ 13153 Type: "MultiDeviceIterator", 13154 13155 Attrs: attrs, 13156 } 13157 op := scope.AddOperation(opspec) 13158 return op.Output(0) 13159 } 13160 13161 // FractionalMaxPoolAttr is an optional argument to FractionalMaxPool. 13162 type FractionalMaxPoolAttr func(optionalAttr) 13163 13164 // FractionalMaxPoolPseudoRandom sets the optional pseudo_random attribute to value. 13165 // 13166 // value: When set to True, generates the pooling sequence in a 13167 // pseudorandom fashion, otherwise, in a random fashion. Check paper [Benjamin 13168 // Graham, Fractional Max-Pooling](http://arxiv.org/abs/1412.6071) for 13169 // difference between pseudorandom and random. 13170 // If not specified, defaults to false 13171 func FractionalMaxPoolPseudoRandom(value bool) FractionalMaxPoolAttr { 13172 return func(m optionalAttr) { 13173 m["pseudo_random"] = value 13174 } 13175 } 13176 13177 // FractionalMaxPoolOverlapping sets the optional overlapping attribute to value. 13178 // 13179 // value: When set to True, it means when pooling, the values at the boundary 13180 // of adjacent pooling cells are used by both cells. For example: 13181 // 13182 // `index 0 1 2 3 4` 13183 // 13184 // `value 20 5 16 3 7` 13185 // 13186 // If the pooling sequence is [0, 2, 4], then 16, at index 2 will be used twice. 13187 // The result would be [20, 16] for fractional max pooling. 13188 // If not specified, defaults to false 13189 func FractionalMaxPoolOverlapping(value bool) FractionalMaxPoolAttr { 13190 return func(m optionalAttr) { 13191 m["overlapping"] = value 13192 } 13193 } 13194 13195 // FractionalMaxPoolDeterministic sets the optional deterministic attribute to value. 13196 // 13197 // value: When set to True, a fixed pooling region will be used when 13198 // iterating over a FractionalMaxPool node in the computation graph. Mainly used 13199 // in unit test to make FractionalMaxPool deterministic. 13200 // If not specified, defaults to false 13201 func FractionalMaxPoolDeterministic(value bool) FractionalMaxPoolAttr { 13202 return func(m optionalAttr) { 13203 m["deterministic"] = value 13204 } 13205 } 13206 13207 // FractionalMaxPoolSeed sets the optional seed attribute to value. 13208 // 13209 // value: If either seed or seed2 are set to be non-zero, the random number 13210 // generator is seeded by the given seed. Otherwise, it is seeded by a 13211 // random seed. 13212 // If not specified, defaults to 0 13213 func FractionalMaxPoolSeed(value int64) FractionalMaxPoolAttr { 13214 return func(m optionalAttr) { 13215 m["seed"] = value 13216 } 13217 } 13218 13219 // FractionalMaxPoolSeed2 sets the optional seed2 attribute to value. 13220 // 13221 // value: An second seed to avoid seed collision. 13222 // If not specified, defaults to 0 13223 func FractionalMaxPoolSeed2(value int64) FractionalMaxPoolAttr { 13224 return func(m optionalAttr) { 13225 m["seed2"] = value 13226 } 13227 } 13228 13229 // Performs fractional max pooling on the input. 13230 // 13231 // Fractional max pooling is slightly different than regular max pooling. In 13232 // regular max pooling, you downsize an input set by taking the maximum value of 13233 // smaller N x N subsections of the set (often 2x2), and try to reduce the set by 13234 // a factor of N, where N is an integer. Fractional max pooling, as you might 13235 // expect from the word "fractional", means that the overall reduction ratio N 13236 // does not have to be an integer. 13237 // 13238 // The sizes of the pooling regions are generated randomly but are fairly uniform. 13239 // For example, let's look at the height dimension, and the constraints on the 13240 // list of rows that will be pool boundaries. 13241 // 13242 // First we define the following: 13243 // 13244 // 1. input_row_length : the number of rows from the input set 13245 // 2. output_row_length : which will be smaller than the input 13246 // 3. alpha = input_row_length / output_row_length : our reduction ratio 13247 // 4. K = floor(alpha) 13248 // 5. row_pooling_sequence : this is the result list of pool boundary rows 13249 // 13250 // Then, row_pooling_sequence should satisfy: 13251 // 13252 // 1. a[0] = 0 : the first value of the sequence is 0 13253 // 2. a[end] = input_row_length : the last value of the sequence is the size 13254 // 3. K <= (a[i+1] - a[i]) <= K+1 : all intervals are K or K+1 size 13255 // 4. length(row_pooling_sequence) = output_row_length+1 13256 // 13257 // For more details on fractional max pooling, see this paper: 13258 // [Benjamin Graham, Fractional Max-Pooling](http://arxiv.org/abs/1412.6071) 13259 // 13260 // Arguments: 13261 // value: 4-D with shape `[batch, height, width, channels]`. 13262 // pooling_ratio: Pooling ratio for each dimension of `value`, currently only 13263 // supports row and col dimension and should be >= 1.0. For example, a valid 13264 // pooling ratio looks like [1.0, 1.44, 1.73, 1.0]. The first and last elements 13265 // must be 1.0 because we don't allow pooling on batch and channels 13266 // dimensions. 1.44 and 1.73 are pooling ratio on height and width dimensions 13267 // respectively. 13268 // 13269 // Returns output tensor after fractional max pooling.row pooling sequence, needed to calculate gradient.column pooling sequence, needed to calculate gradient. 13270 func FractionalMaxPool(scope *Scope, value tf.Output, pooling_ratio []float32, optional ...FractionalMaxPoolAttr) (output tf.Output, row_pooling_sequence tf.Output, col_pooling_sequence tf.Output) { 13271 if scope.Err() != nil { 13272 return 13273 } 13274 attrs := map[string]interface{}{"pooling_ratio": pooling_ratio} 13275 for _, a := range optional { 13276 a(attrs) 13277 } 13278 opspec := tf.OpSpec{ 13279 Type: "FractionalMaxPool", 13280 Input: []tf.Input{ 13281 value, 13282 }, 13283 Attrs: attrs, 13284 } 13285 op := scope.AddOperation(opspec) 13286 return op.Output(0), op.Output(1), op.Output(2) 13287 } 13288 13289 // Generates sparse cross from a list of sparse and dense tensors. 13290 // 13291 // The op takes two lists, one of 2D `SparseTensor` and one of 2D `Tensor`, each 13292 // representing features of one feature column. It outputs a 2D `SparseTensor` with 13293 // the batchwise crosses of these features. 13294 // 13295 // For example, if the inputs are 13296 // 13297 // inputs[0]: SparseTensor with shape = [2, 2] 13298 // [0, 0]: "a" 13299 // [1, 0]: "b" 13300 // [1, 1]: "c" 13301 // 13302 // inputs[1]: SparseTensor with shape = [2, 1] 13303 // [0, 0]: "d" 13304 // [1, 0]: "e" 13305 // 13306 // inputs[2]: Tensor [["f"], ["g"]] 13307 // 13308 // then the output will be 13309 // 13310 // shape = [2, 2] 13311 // [0, 0]: "a_X_d_X_f" 13312 // [1, 0]: "b_X_e_X_g" 13313 // [1, 1]: "c_X_e_X_g" 13314 // 13315 // if hashed_output=true then the output will be 13316 // 13317 // shape = [2, 2] 13318 // [0, 0]: FingerprintCat64( 13319 // Fingerprint64("f"), FingerprintCat64( 13320 // Fingerprint64("d"), Fingerprint64("a"))) 13321 // [1, 0]: FingerprintCat64( 13322 // Fingerprint64("g"), FingerprintCat64( 13323 // Fingerprint64("e"), Fingerprint64("b"))) 13324 // [1, 1]: FingerprintCat64( 13325 // Fingerprint64("g"), FingerprintCat64( 13326 // Fingerprint64("e"), Fingerprint64("c"))) 13327 // 13328 // Arguments: 13329 // indices: 2-D. Indices of each input `SparseTensor`. 13330 // values: 1-D. values of each `SparseTensor`. 13331 // shapes: 1-D. Shapes of each `SparseTensor`. 13332 // dense_inputs: 2-D. Columns represented by dense `Tensor`. 13333 // hashed_output: If true, returns the hash of the cross instead of the string. 13334 // This will allow us avoiding string manipulations. 13335 // num_buckets: It is used if hashed_output is true. 13336 // output = hashed_value%num_buckets if num_buckets > 0 else hashed_value. 13337 // hash_key: Specify the hash_key that will be used by the `FingerprintCat64` 13338 // function to combine the crosses fingerprints. 13339 // 13340 // 13341 // 13342 // Returns 2-D. Indices of the concatenated `SparseTensor`.1-D. Non-empty values of the concatenated or hashed 13343 // `SparseTensor`.1-D. Shape of the concatenated `SparseTensor`. 13344 func SparseCross(scope *Scope, indices []tf.Output, values []tf.Output, shapes []tf.Output, dense_inputs []tf.Output, hashed_output bool, num_buckets int64, hash_key int64, out_type tf.DataType, internal_type tf.DataType) (output_indices tf.Output, output_values tf.Output, output_shape tf.Output) { 13345 if scope.Err() != nil { 13346 return 13347 } 13348 attrs := map[string]interface{}{"hashed_output": hashed_output, "num_buckets": num_buckets, "hash_key": hash_key, "out_type": out_type, "internal_type": internal_type} 13349 opspec := tf.OpSpec{ 13350 Type: "SparseCross", 13351 Input: []tf.Input{ 13352 tf.OutputList(indices), tf.OutputList(values), tf.OutputList(shapes), tf.OutputList(dense_inputs), 13353 }, 13354 Attrs: attrs, 13355 } 13356 op := scope.AddOperation(opspec) 13357 return op.Output(0), op.Output(1), op.Output(2) 13358 } 13359 13360 // Inverse real-valued fast Fourier transform. 13361 // 13362 // Computes the inverse 1-dimensional discrete Fourier transform of a real-valued 13363 // signal over the inner-most dimension of `input`. 13364 // 13365 // The inner-most dimension of `input` is assumed to be the result of `RFFT`: the 13366 // `fft_length / 2 + 1` unique components of the DFT of a real-valued signal. If 13367 // `fft_length` is not provided, it is computed from the size of the inner-most 13368 // dimension of `input` (`fft_length = 2 * (inner - 1)`). If the FFT length used to 13369 // compute `input` is odd, it should be provided since it cannot be inferred 13370 // properly. 13371 // 13372 // Along the axis `IRFFT` is computed on, if `fft_length / 2 + 1` is smaller 13373 // than the corresponding dimension of `input`, the dimension is cropped. If it is 13374 // larger, the dimension is padded with zeros. 13375 // 13376 // Arguments: 13377 // input: A complex64 tensor. 13378 // fft_length: An int32 tensor of shape [1]. The FFT length. 13379 // 13380 // Returns A float32 tensor of the same rank as `input`. The inner-most 13381 // dimension of `input` is replaced with the `fft_length` samples of its inverse 13382 // 1D Fourier transform. 13383 // 13384 // @compatibility(numpy) 13385 // Equivalent to np.fft.irfft 13386 // @end_compatibility 13387 func IRFFT(scope *Scope, input tf.Output, fft_length tf.Output) (output tf.Output) { 13388 if scope.Err() != nil { 13389 return 13390 } 13391 opspec := tf.OpSpec{ 13392 Type: "IRFFT", 13393 Input: []tf.Input{ 13394 input, fft_length, 13395 }, 13396 } 13397 op := scope.AddOperation(opspec) 13398 return op.Output(0) 13399 } 13400 13401 // Concatenates a list of `SparseTensor` along the specified dimension. 13402 // 13403 // Concatenation is with respect to the dense versions of these sparse tensors. 13404 // It is assumed that each input is a `SparseTensor` whose elements are ordered 13405 // along increasing dimension number. 13406 // 13407 // All inputs' shapes must match, except for the concat dimension. The 13408 // `indices`, `values`, and `shapes` lists must have the same length. 13409 // 13410 // The output shape is identical to the inputs', except along the concat 13411 // dimension, where it is the sum of the inputs' sizes along that dimension. 13412 // 13413 // The output elements will be resorted to preserve the sort order along 13414 // increasing dimension number. 13415 // 13416 // This op runs in `O(M log M)` time, where `M` is the total number of non-empty 13417 // values across all inputs. This is due to the need for an internal sort in 13418 // order to concatenate efficiently across an arbitrary dimension. 13419 // 13420 // For example, if `concat_dim = 1` and the inputs are 13421 // 13422 // sp_inputs[0]: shape = [2, 3] 13423 // [0, 2]: "a" 13424 // [1, 0]: "b" 13425 // [1, 1]: "c" 13426 // 13427 // sp_inputs[1]: shape = [2, 4] 13428 // [0, 1]: "d" 13429 // [0, 2]: "e" 13430 // 13431 // then the output will be 13432 // 13433 // shape = [2, 7] 13434 // [0, 2]: "a" 13435 // [0, 4]: "d" 13436 // [0, 5]: "e" 13437 // [1, 0]: "b" 13438 // [1, 1]: "c" 13439 // 13440 // Graphically this is equivalent to doing 13441 // 13442 // [ a] concat [ d e ] = [ a d e ] 13443 // [b c ] [ ] [b c ] 13444 // 13445 // Arguments: 13446 // indices: 2-D. Indices of each input `SparseTensor`. 13447 // values: 1-D. Non-empty values of each `SparseTensor`. 13448 // shapes: 1-D. Shapes of each `SparseTensor`. 13449 // concat_dim: Dimension to concatenate along. Must be in range [-rank, rank), 13450 // where rank is the number of dimensions in each input `SparseTensor`. 13451 // 13452 // Returns 2-D. Indices of the concatenated `SparseTensor`.1-D. Non-empty values of the concatenated `SparseTensor`.1-D. Shape of the concatenated `SparseTensor`. 13453 func SparseConcat(scope *Scope, indices []tf.Output, values []tf.Output, shapes []tf.Output, concat_dim int64) (output_indices tf.Output, output_values tf.Output, output_shape tf.Output) { 13454 if scope.Err() != nil { 13455 return 13456 } 13457 attrs := map[string]interface{}{"concat_dim": concat_dim} 13458 opspec := tf.OpSpec{ 13459 Type: "SparseConcat", 13460 Input: []tf.Input{ 13461 tf.OutputList(indices), tf.OutputList(values), tf.OutputList(shapes), 13462 }, 13463 Attrs: attrs, 13464 } 13465 op := scope.AddOperation(opspec) 13466 return op.Output(0), op.Output(1), op.Output(2) 13467 } 13468 13469 // Deserialize and concatenate `SparseTensors` from a serialized minibatch. 13470 // 13471 // The input `serialized_sparse` must be a string matrix of shape `[N x 3]` where 13472 // `N` is the minibatch size and the rows correspond to packed outputs of 13473 // `SerializeSparse`. The ranks of the original `SparseTensor` objects 13474 // must all match. When the final `SparseTensor` is created, it has rank one 13475 // higher than the ranks of the incoming `SparseTensor` objects 13476 // (they have been concatenated along a new row dimension). 13477 // 13478 // The output `SparseTensor` object's shape values for all dimensions but the 13479 // first are the max across the input `SparseTensor` objects' shape values 13480 // for the corresponding dimensions. Its first shape value is `N`, the minibatch 13481 // size. 13482 // 13483 // The input `SparseTensor` objects' indices are assumed ordered in 13484 // standard lexicographic order. If this is not the case, after this 13485 // step run `SparseReorder` to restore index ordering. 13486 // 13487 // For example, if the serialized input is a `[2 x 3]` matrix representing two 13488 // original `SparseTensor` objects: 13489 // 13490 // index = [ 0] 13491 // [10] 13492 // [20] 13493 // values = [1, 2, 3] 13494 // shape = [50] 13495 // 13496 // and 13497 // 13498 // index = [ 2] 13499 // [10] 13500 // values = [4, 5] 13501 // shape = [30] 13502 // 13503 // then the final deserialized `SparseTensor` will be: 13504 // 13505 // index = [0 0] 13506 // [0 10] 13507 // [0 20] 13508 // [1 2] 13509 // [1 10] 13510 // values = [1, 2, 3, 4, 5] 13511 // shape = [2 50] 13512 // 13513 // Arguments: 13514 // serialized_sparse: 2-D, The `N` serialized `SparseTensor` objects. 13515 // Must have 3 columns. 13516 // dtype: The `dtype` of the serialized `SparseTensor` objects. 13517 func DeserializeManySparse(scope *Scope, serialized_sparse tf.Output, dtype tf.DataType) (sparse_indices tf.Output, sparse_values tf.Output, sparse_shape tf.Output) { 13518 if scope.Err() != nil { 13519 return 13520 } 13521 attrs := map[string]interface{}{"dtype": dtype} 13522 opspec := tf.OpSpec{ 13523 Type: "DeserializeManySparse", 13524 Input: []tf.Input{ 13525 serialized_sparse, 13526 }, 13527 Attrs: attrs, 13528 } 13529 op := scope.AddOperation(opspec) 13530 return op.Output(0), op.Output(1), op.Output(2) 13531 } 13532 13533 // Deserialize `SparseTensor` objects. 13534 // 13535 // The input `serialized_sparse` must have the shape `[?, ?, ..., ?, 3]` where 13536 // the last dimension stores serialized `SparseTensor` objects and the other N 13537 // dimensions (N >= 0) correspond to a batch. The ranks of the original 13538 // `SparseTensor` objects must all match. When the final `SparseTensor` is 13539 // created, its rank is the rank of the incoming `SparseTensor` objects plus N; 13540 // the sparse tensors have been concatenated along new dimensions, one for each 13541 // batch. 13542 // 13543 // The output `SparseTensor` object's shape values for the original dimensions 13544 // are the max across the input `SparseTensor` objects' shape values for the 13545 // corresponding dimensions. The new dimensions match the size of the batch. 13546 // 13547 // The input `SparseTensor` objects' indices are assumed ordered in 13548 // standard lexicographic order. If this is not the case, after this 13549 // step run `SparseReorder` to restore index ordering. 13550 // 13551 // For example, if the serialized input is a `[2 x 3]` matrix representing two 13552 // original `SparseTensor` objects: 13553 // 13554 // index = [ 0] 13555 // [10] 13556 // [20] 13557 // values = [1, 2, 3] 13558 // shape = [50] 13559 // 13560 // and 13561 // 13562 // index = [ 2] 13563 // [10] 13564 // values = [4, 5] 13565 // shape = [30] 13566 // 13567 // then the final deserialized `SparseTensor` will be: 13568 // 13569 // index = [0 0] 13570 // [0 10] 13571 // [0 20] 13572 // [1 2] 13573 // [1 10] 13574 // values = [1, 2, 3, 4, 5] 13575 // shape = [2 50] 13576 // 13577 // Arguments: 13578 // serialized_sparse: The serialized `SparseTensor` objects. The last dimension 13579 // must have 3 columns. 13580 // dtype: The `dtype` of the serialized `SparseTensor` objects. 13581 func DeserializeSparse(scope *Scope, serialized_sparse tf.Output, dtype tf.DataType) (sparse_indices tf.Output, sparse_values tf.Output, sparse_shape tf.Output) { 13582 if scope.Err() != nil { 13583 return 13584 } 13585 attrs := map[string]interface{}{"dtype": dtype} 13586 opspec := tf.OpSpec{ 13587 Type: "DeserializeSparse", 13588 Input: []tf.Input{ 13589 serialized_sparse, 13590 }, 13591 Attrs: attrs, 13592 } 13593 op := scope.AddOperation(opspec) 13594 return op.Output(0), op.Output(1), op.Output(2) 13595 } 13596 13597 // MaxPool3DGradGradAttr is an optional argument to MaxPool3DGradGrad. 13598 type MaxPool3DGradGradAttr func(optionalAttr) 13599 13600 // MaxPool3DGradGradDataFormat sets the optional data_format attribute to value. 13601 // 13602 // value: The data format of the input and output data. With the 13603 // default format "NDHWC", the data is stored in the order of: 13604 // [batch, in_depth, in_height, in_width, in_channels]. 13605 // Alternatively, the format could be "NCDHW", the data storage order is: 13606 // [batch, in_channels, in_depth, in_height, in_width]. 13607 // If not specified, defaults to "NDHWC" 13608 func MaxPool3DGradGradDataFormat(value string) MaxPool3DGradGradAttr { 13609 return func(m optionalAttr) { 13610 m["data_format"] = value 13611 } 13612 } 13613 13614 // Computes second-order gradients of the maxpooling function. 13615 // 13616 // Arguments: 13617 // orig_input: The original input tensor. 13618 // orig_output: The original output tensor. 13619 // grad: Output backprop of shape `[batch, depth, rows, cols, channels]`. 13620 // ksize: 1-D tensor of length 5. The size of the window for each dimension of 13621 // the input tensor. Must have `ksize[0] = ksize[4] = 1`. 13622 // strides: 1-D tensor of length 5. The stride of the sliding window for each 13623 // dimension of `input`. Must have `strides[0] = strides[4] = 1`. 13624 // padding: The type of padding algorithm to use. 13625 // 13626 // Returns Gradients of gradients w.r.t. the input to `max_pool`. 13627 func MaxPool3DGradGrad(scope *Scope, orig_input tf.Output, orig_output tf.Output, grad tf.Output, ksize []int64, strides []int64, padding string, optional ...MaxPool3DGradGradAttr) (output tf.Output) { 13628 if scope.Err() != nil { 13629 return 13630 } 13631 attrs := map[string]interface{}{"ksize": ksize, "strides": strides, "padding": padding} 13632 for _, a := range optional { 13633 a(attrs) 13634 } 13635 opspec := tf.OpSpec{ 13636 Type: "MaxPool3DGradGrad", 13637 Input: []tf.Input{ 13638 orig_input, orig_output, grad, 13639 }, 13640 Attrs: attrs, 13641 } 13642 op := scope.AddOperation(opspec) 13643 return op.Output(0) 13644 } 13645 13646 // Conv3DBackpropFilterV2Attr is an optional argument to Conv3DBackpropFilterV2. 13647 type Conv3DBackpropFilterV2Attr func(optionalAttr) 13648 13649 // Conv3DBackpropFilterV2DataFormat sets the optional data_format attribute to value. 13650 // 13651 // value: The data format of the input and output data. With the 13652 // default format "NDHWC", the data is stored in the order of: 13653 // [batch, in_depth, in_height, in_width, in_channels]. 13654 // Alternatively, the format could be "NCDHW", the data storage order is: 13655 // [batch, in_channels, in_depth, in_height, in_width]. 13656 // If not specified, defaults to "NDHWC" 13657 func Conv3DBackpropFilterV2DataFormat(value string) Conv3DBackpropFilterV2Attr { 13658 return func(m optionalAttr) { 13659 m["data_format"] = value 13660 } 13661 } 13662 13663 // Conv3DBackpropFilterV2Dilations sets the optional dilations attribute to value. 13664 // 13665 // value: 1-D tensor of length 5. The dilation factor for each dimension of 13666 // `input`. If set to k > 1, there will be k-1 skipped cells between each 13667 // filter element on that dimension. The dimension order is determined by the 13668 // value of `data_format`, see above for details. Dilations in the batch and 13669 // depth dimensions must be 1. 13670 // If not specified, defaults to <i:1 i:1 i:1 i:1 i:1 > 13671 func Conv3DBackpropFilterV2Dilations(value []int64) Conv3DBackpropFilterV2Attr { 13672 return func(m optionalAttr) { 13673 m["dilations"] = value 13674 } 13675 } 13676 13677 // Computes the gradients of 3-D convolution with respect to the filter. 13678 // 13679 // Arguments: 13680 // input: Shape `[batch, depth, rows, cols, in_channels]`. 13681 // filter_sizes: An integer vector representing the tensor shape of `filter`, 13682 // where `filter` is a 5-D 13683 // `[filter_depth, filter_height, filter_width, in_channels, out_channels]` 13684 // tensor. 13685 // out_backprop: Backprop signal of shape `[batch, out_depth, out_rows, out_cols, 13686 // out_channels]`. 13687 // strides: 1-D tensor of length 5. The stride of the sliding window for each 13688 // dimension of `input`. Must have `strides[0] = strides[4] = 1`. 13689 // padding: The type of padding algorithm to use. 13690 func Conv3DBackpropFilterV2(scope *Scope, input tf.Output, filter_sizes tf.Output, out_backprop tf.Output, strides []int64, padding string, optional ...Conv3DBackpropFilterV2Attr) (output tf.Output) { 13691 if scope.Err() != nil { 13692 return 13693 } 13694 attrs := map[string]interface{}{"strides": strides, "padding": padding} 13695 for _, a := range optional { 13696 a(attrs) 13697 } 13698 opspec := tf.OpSpec{ 13699 Type: "Conv3DBackpropFilterV2", 13700 Input: []tf.Input{ 13701 input, filter_sizes, out_backprop, 13702 }, 13703 Attrs: attrs, 13704 } 13705 op := scope.AddOperation(opspec) 13706 return op.Output(0) 13707 } 13708 13709 // Execute a sub graph on a remote processor. 13710 // 13711 // The graph specifications(such as graph itself, input tensors and output names) 13712 // are stored as a serialized protocol buffer of RemoteFusedGraphExecuteInfo 13713 // as serialized_remote_fused_graph_execute_info. 13714 // The specifications will be passed to a dedicated registered 13715 // remote fused graph executor. The executor will send the graph specifications 13716 // to a remote processor and execute that graph. The execution results 13717 // will be passed to consumer nodes as outputs of this node. 13718 // 13719 // Arguments: 13720 // inputs: Arbitrary number of tensors with arbitrary data types 13721 // 13722 // serialized_remote_fused_graph_execute_info: Serialized protocol buffer 13723 // of RemoteFusedGraphExecuteInfo which contains graph specifications. 13724 // 13725 // Returns Arbitrary number of tensors with arbitrary data types 13726 func RemoteFusedGraphExecute(scope *Scope, inputs []tf.Output, Toutputs []tf.DataType, serialized_remote_fused_graph_execute_info string) (outputs []tf.Output) { 13727 if scope.Err() != nil { 13728 return 13729 } 13730 attrs := map[string]interface{}{"Toutputs": Toutputs, "serialized_remote_fused_graph_execute_info": serialized_remote_fused_graph_execute_info} 13731 opspec := tf.OpSpec{ 13732 Type: "RemoteFusedGraphExecute", 13733 Input: []tf.Input{ 13734 tf.OutputList(inputs), 13735 }, 13736 Attrs: attrs, 13737 } 13738 op := scope.AddOperation(opspec) 13739 if scope.Err() != nil { 13740 return 13741 } 13742 var idx int 13743 var err error 13744 if outputs, idx, err = makeOutputList(op, idx, "outputs"); err != nil { 13745 scope.UpdateErr("RemoteFusedGraphExecute", err) 13746 return 13747 } 13748 return outputs 13749 } 13750 13751 // SerializeManySparseAttr is an optional argument to SerializeManySparse. 13752 type SerializeManySparseAttr func(optionalAttr) 13753 13754 // SerializeManySparseOutType sets the optional out_type attribute to value. 13755 // 13756 // value: The `dtype` to use for serialization; the supported types are `string` 13757 // (default) and `variant`. 13758 // If not specified, defaults to DT_STRING 13759 func SerializeManySparseOutType(value tf.DataType) SerializeManySparseAttr { 13760 return func(m optionalAttr) { 13761 m["out_type"] = value 13762 } 13763 } 13764 13765 // Serialize an `N`-minibatch `SparseTensor` into an `[N, 3]` `Tensor` object. 13766 // 13767 // The `SparseTensor` must have rank `R` greater than 1, and the first dimension 13768 // is treated as the minibatch dimension. Elements of the `SparseTensor` 13769 // must be sorted in increasing order of this first dimension. The serialized 13770 // `SparseTensor` objects going into each row of `serialized_sparse` will have 13771 // rank `R-1`. 13772 // 13773 // The minibatch size `N` is extracted from `sparse_shape[0]`. 13774 // 13775 // Arguments: 13776 // sparse_indices: 2-D. The `indices` of the minibatch `SparseTensor`. 13777 // sparse_values: 1-D. The `values` of the minibatch `SparseTensor`. 13778 // sparse_shape: 1-D. The `shape` of the minibatch `SparseTensor`. 13779 func SerializeManySparse(scope *Scope, sparse_indices tf.Output, sparse_values tf.Output, sparse_shape tf.Output, optional ...SerializeManySparseAttr) (serialized_sparse tf.Output) { 13780 if scope.Err() != nil { 13781 return 13782 } 13783 attrs := map[string]interface{}{} 13784 for _, a := range optional { 13785 a(attrs) 13786 } 13787 opspec := tf.OpSpec{ 13788 Type: "SerializeManySparse", 13789 Input: []tf.Input{ 13790 sparse_indices, sparse_values, sparse_shape, 13791 }, 13792 Attrs: attrs, 13793 } 13794 op := scope.AddOperation(opspec) 13795 return op.Output(0) 13796 } 13797 13798 // Computes inverse hyperbolic cosine of x element-wise. 13799 func Acosh(scope *Scope, x tf.Output) (y tf.Output) { 13800 if scope.Err() != nil { 13801 return 13802 } 13803 opspec := tf.OpSpec{ 13804 Type: "Acosh", 13805 Input: []tf.Input{ 13806 x, 13807 }, 13808 } 13809 op := scope.AddOperation(opspec) 13810 return op.Output(0) 13811 } 13812 13813 // Computes rectified linear 6 gradients for a Relu6 operation. 13814 // 13815 // Arguments: 13816 // gradients: The backpropagated gradients to the corresponding Relu6 operation. 13817 // features: The features passed as input to the corresponding Relu6 operation, or 13818 // its output; using either one produces the same result. 13819 // 13820 // Returns The gradients: 13821 // `gradients * (features > 0) * (features < 6)`. 13822 func Relu6Grad(scope *Scope, gradients tf.Output, features tf.Output) (backprops tf.Output) { 13823 if scope.Err() != nil { 13824 return 13825 } 13826 opspec := tf.OpSpec{ 13827 Type: "Relu6Grad", 13828 Input: []tf.Input{ 13829 gradients, features, 13830 }, 13831 } 13832 op := scope.AddOperation(opspec) 13833 return op.Output(0) 13834 } 13835 13836 // Computes natural logarithm of (1 + x) element-wise. 13837 // 13838 // I.e., \\(y = \log_e (1 + x)\\). 13839 func Log1p(scope *Scope, x tf.Output) (y tf.Output) { 13840 if scope.Err() != nil { 13841 return 13842 } 13843 opspec := tf.OpSpec{ 13844 Type: "Log1p", 13845 Input: []tf.Input{ 13846 x, 13847 }, 13848 } 13849 op := scope.AddOperation(opspec) 13850 return op.Output(0) 13851 } 13852 13853 // ResizeBicubicAttr is an optional argument to ResizeBicubic. 13854 type ResizeBicubicAttr func(optionalAttr) 13855 13856 // ResizeBicubicAlignCorners sets the optional align_corners attribute to value. 13857 // 13858 // value: If true, the centers of the 4 corner pixels of the input and output tensors are 13859 // aligned, preserving the values at the corner pixels. Defaults to false. 13860 // If not specified, defaults to false 13861 func ResizeBicubicAlignCorners(value bool) ResizeBicubicAttr { 13862 return func(m optionalAttr) { 13863 m["align_corners"] = value 13864 } 13865 } 13866 13867 // ResizeBicubicHalfPixelCenters sets the optional half_pixel_centers attribute to value. 13868 // If not specified, defaults to false 13869 func ResizeBicubicHalfPixelCenters(value bool) ResizeBicubicAttr { 13870 return func(m optionalAttr) { 13871 m["half_pixel_centers"] = value 13872 } 13873 } 13874 13875 // Resize `images` to `size` using bicubic interpolation. 13876 // 13877 // Input images can be of different types but output images are always float. 13878 // 13879 // Arguments: 13880 // images: 4-D with shape `[batch, height, width, channels]`. 13881 // size: = A 1-D int32 Tensor of 2 elements: `new_height, new_width`. The 13882 // new size for the images. 13883 // 13884 // Returns 4-D with shape 13885 // `[batch, new_height, new_width, channels]`. 13886 func ResizeBicubic(scope *Scope, images tf.Output, size tf.Output, optional ...ResizeBicubicAttr) (resized_images tf.Output) { 13887 if scope.Err() != nil { 13888 return 13889 } 13890 attrs := map[string]interface{}{} 13891 for _, a := range optional { 13892 a(attrs) 13893 } 13894 opspec := tf.OpSpec{ 13895 Type: "ResizeBicubic", 13896 Input: []tf.Input{ 13897 images, size, 13898 }, 13899 Attrs: attrs, 13900 } 13901 op := scope.AddOperation(opspec) 13902 return op.Output(0) 13903 } 13904 13905 // SparseTensorDenseMatMulAttr is an optional argument to SparseTensorDenseMatMul. 13906 type SparseTensorDenseMatMulAttr func(optionalAttr) 13907 13908 // SparseTensorDenseMatMulAdjointA sets the optional adjoint_a attribute to value. 13909 // 13910 // value: Use the adjoint of A in the matrix multiply. If A is complex, this 13911 // is transpose(conj(A)). Otherwise it's transpose(A). 13912 // If not specified, defaults to false 13913 func SparseTensorDenseMatMulAdjointA(value bool) SparseTensorDenseMatMulAttr { 13914 return func(m optionalAttr) { 13915 m["adjoint_a"] = value 13916 } 13917 } 13918 13919 // SparseTensorDenseMatMulAdjointB sets the optional adjoint_b attribute to value. 13920 // 13921 // value: Use the adjoint of B in the matrix multiply. If B is complex, this 13922 // is transpose(conj(B)). Otherwise it's transpose(B). 13923 // If not specified, defaults to false 13924 func SparseTensorDenseMatMulAdjointB(value bool) SparseTensorDenseMatMulAttr { 13925 return func(m optionalAttr) { 13926 m["adjoint_b"] = value 13927 } 13928 } 13929 13930 // Multiply SparseTensor (of rank 2) "A" by dense matrix "B". 13931 // 13932 // No validity checking is performed on the indices of A. However, the following 13933 // input format is recommended for optimal behavior: 13934 // 13935 // if adjoint_a == false: 13936 // A should be sorted in lexicographically increasing order. Use SparseReorder 13937 // if you're not sure. 13938 // if adjoint_a == true: 13939 // A should be sorted in order of increasing dimension 1 (i.e., "column major" 13940 // order instead of "row major" order). 13941 // 13942 // Arguments: 13943 // a_indices: 2-D. The `indices` of the `SparseTensor`, size `[nnz, 2]` Matrix. 13944 // a_values: 1-D. The `values` of the `SparseTensor`, size `[nnz]` Vector. 13945 // a_shape: 1-D. The `shape` of the `SparseTensor`, size `[2]` Vector. 13946 // b: 2-D. A dense Matrix. 13947 func SparseTensorDenseMatMul(scope *Scope, a_indices tf.Output, a_values tf.Output, a_shape tf.Output, b tf.Output, optional ...SparseTensorDenseMatMulAttr) (product tf.Output) { 13948 if scope.Err() != nil { 13949 return 13950 } 13951 attrs := map[string]interface{}{} 13952 for _, a := range optional { 13953 a(attrs) 13954 } 13955 opspec := tf.OpSpec{ 13956 Type: "SparseTensorDenseMatMul", 13957 Input: []tf.Input{ 13958 a_indices, a_values, a_shape, b, 13959 }, 13960 Attrs: attrs, 13961 } 13962 op := scope.AddOperation(opspec) 13963 return op.Output(0) 13964 } 13965 13966 // Adds two `SparseTensor` objects to produce another `SparseTensor`. 13967 // 13968 // The input `SparseTensor` objects' indices are assumed ordered in standard 13969 // lexicographic order. If this is not the case, before this step run 13970 // `SparseReorder` to restore index ordering. 13971 // 13972 // By default, if two values sum to zero at some index, the output `SparseTensor` 13973 // would still include that particular location in its index, storing a zero in the 13974 // corresponding value slot. To override this, callers can specify `thresh`, 13975 // indicating that if the sum has a magnitude strictly smaller than `thresh`, its 13976 // corresponding value and index would then not be included. In particular, 13977 // `thresh == 0` (default) means everything is kept and actual thresholding happens 13978 // only for a positive value. 13979 // 13980 // In the following shapes, `nnz` is the count after taking `thresh` into account. 13981 // 13982 // Arguments: 13983 // a_indices: 2-D. The `indices` of the first `SparseTensor`, size `[nnz, ndims]` Matrix. 13984 // a_values: 1-D. The `values` of the first `SparseTensor`, size `[nnz]` Vector. 13985 // a_shape: 1-D. The `shape` of the first `SparseTensor`, size `[ndims]` Vector. 13986 // b_indices: 2-D. The `indices` of the second `SparseTensor`, size `[nnz, ndims]` Matrix. 13987 // b_values: 1-D. The `values` of the second `SparseTensor`, size `[nnz]` Vector. 13988 // b_shape: 1-D. The `shape` of the second `SparseTensor`, size `[ndims]` Vector. 13989 // thresh: 0-D. The magnitude threshold that determines if an output value/index 13990 // pair takes space. 13991 func SparseAdd(scope *Scope, a_indices tf.Output, a_values tf.Output, a_shape tf.Output, b_indices tf.Output, b_values tf.Output, b_shape tf.Output, thresh tf.Output) (sum_indices tf.Output, sum_values tf.Output, sum_shape tf.Output) { 13992 if scope.Err() != nil { 13993 return 13994 } 13995 opspec := tf.OpSpec{ 13996 Type: "SparseAdd", 13997 Input: []tf.Input{ 13998 a_indices, a_values, a_shape, b_indices, b_values, b_shape, thresh, 13999 }, 14000 } 14001 op := scope.AddOperation(opspec) 14002 return op.Output(0), op.Output(1), op.Output(2) 14003 } 14004 14005 // EnqueueTPUEmbeddingSparseTensorBatchAttr is an optional argument to EnqueueTPUEmbeddingSparseTensorBatch. 14006 type EnqueueTPUEmbeddingSparseTensorBatchAttr func(optionalAttr) 14007 14008 // EnqueueTPUEmbeddingSparseTensorBatchDeviceOrdinal sets the optional device_ordinal attribute to value. 14009 // 14010 // value: The TPU device to use. Should be >= 0 and less than the number 14011 // of TPU cores in the task on which the node is placed. 14012 // If not specified, defaults to -1 14013 func EnqueueTPUEmbeddingSparseTensorBatchDeviceOrdinal(value int64) EnqueueTPUEmbeddingSparseTensorBatchAttr { 14014 return func(m optionalAttr) { 14015 m["device_ordinal"] = value 14016 } 14017 } 14018 14019 // EnqueueTPUEmbeddingSparseTensorBatchCombiners sets the optional combiners attribute to value. 14020 // 14021 // value: A list of string scalars, one for each embedding table that specify 14022 // how to normalize the embedding activations after weighted summation. 14023 // Supported combiners are 'mean', 'sum', or 'sqrtn'. It is invalid to have 14024 // the sum of the weights be 0 for 'mean' or the sum of the squared weights be 14025 // 0 for 'sqrtn'. If combiners isn't passed, the default is to use 'sum' for 14026 // all tables. 14027 // If not specified, defaults to <> 14028 func EnqueueTPUEmbeddingSparseTensorBatchCombiners(value []string) EnqueueTPUEmbeddingSparseTensorBatchAttr { 14029 return func(m optionalAttr) { 14030 m["combiners"] = value 14031 } 14032 } 14033 14034 // Eases the porting of code that uses tf.nn.embedding_lookup_sparse(). 14035 // 14036 // sample_indices[i], embedding_indices[i] and aggregation_weights[i] correspond 14037 // to the ith feature. table_ids[i] indicates which embedding table to look up ith 14038 // feature. 14039 // 14040 // The tensors at corresponding positions in the three input lists (sample_indices, 14041 // embedding_indices and aggregation_weights) must have the same shape, i.e. rank 1 14042 // with dim_size() equal to the total number of lookups into the table described by 14043 // the corresponding feature. 14044 // 14045 // Arguments: 14046 // sample_indices: A list of rank 1 Tensors specifying the training example to 14047 // which the corresponding embedding_indices and aggregation_weights values 14048 // belong. It corresponds to sp_ids.indices[:,0] in embedding_lookup_sparse(). 14049 // embedding_indices: A list of rank 1 Tensors, indices into the embedding tables. 14050 // It corresponds to sp_ids.values in embedding_lookup_sparse(). 14051 // aggregation_weights: A list of rank 1 Tensors containing per training example 14052 // aggregation weights. It corresponds to sp_weights.values in 14053 // embedding_lookup_sparse(). 14054 // mode_override: A string input that overrides the mode specified in the 14055 // TPUEmbeddingConfiguration. Supported values are {'unspecified', 'inference', 14056 // 'training', 'backward_pass_only'}. When set to 'unspecified', the mode set 14057 // in TPUEmbeddingConfiguration is used, otherwise mode_override is used. 14058 // table_ids: A list of integers specifying the identifier of the embedding table 14059 // (offset of TableDescriptor in the TPUEmbeddingConfiguration) to lookup the 14060 // corresponding input. The ith input is looked up using table_ids[i]. The size 14061 // of the table_ids list must be equal to that of sample_indices, 14062 // embedding_indices and aggregation_weights. 14063 // 14064 // Returns the created operation. 14065 func EnqueueTPUEmbeddingSparseTensorBatch(scope *Scope, sample_indices []tf.Output, embedding_indices []tf.Output, aggregation_weights []tf.Output, mode_override tf.Output, table_ids []int64, optional ...EnqueueTPUEmbeddingSparseTensorBatchAttr) (o *tf.Operation) { 14066 if scope.Err() != nil { 14067 return 14068 } 14069 attrs := map[string]interface{}{"table_ids": table_ids} 14070 for _, a := range optional { 14071 a(attrs) 14072 } 14073 opspec := tf.OpSpec{ 14074 Type: "EnqueueTPUEmbeddingSparseTensorBatch", 14075 Input: []tf.Input{ 14076 tf.OutputList(sample_indices), tf.OutputList(embedding_indices), tf.OutputList(aggregation_weights), mode_override, 14077 }, 14078 Attrs: attrs, 14079 } 14080 return scope.AddOperation(opspec) 14081 } 14082 14083 // The gradient operator for the SparseAdd op. 14084 // 14085 // The SparseAdd op calculates A + B, where A, B, and the sum are all represented 14086 // as `SparseTensor` objects. This op takes in the upstream gradient w.r.t. 14087 // non-empty values of the sum, and outputs the gradients w.r.t. the non-empty 14088 // values of A and B. 14089 // 14090 // Arguments: 14091 // backprop_val_grad: 1-D with shape `[nnz(sum)]`. The gradient with respect to 14092 // the non-empty values of the sum. 14093 // a_indices: 2-D. The `indices` of the `SparseTensor` A, size `[nnz(A), ndims]`. 14094 // b_indices: 2-D. The `indices` of the `SparseTensor` B, size `[nnz(B), ndims]`. 14095 // sum_indices: 2-D. The `indices` of the sum `SparseTensor`, size 14096 // `[nnz(sum), ndims]`. 14097 // 14098 // Returns 1-D with shape `[nnz(A)]`. The gradient with respect to the 14099 // non-empty values of A.1-D with shape `[nnz(B)]`. The gradient with respect to the 14100 // non-empty values of B. 14101 func SparseAddGrad(scope *Scope, backprop_val_grad tf.Output, a_indices tf.Output, b_indices tf.Output, sum_indices tf.Output) (a_val_grad tf.Output, b_val_grad tf.Output) { 14102 if scope.Err() != nil { 14103 return 14104 } 14105 opspec := tf.OpSpec{ 14106 Type: "SparseAddGrad", 14107 Input: []tf.Input{ 14108 backprop_val_grad, a_indices, b_indices, sum_indices, 14109 }, 14110 } 14111 op := scope.AddOperation(opspec) 14112 return op.Output(0), op.Output(1) 14113 } 14114 14115 // DenseToSparseSetOperationAttr is an optional argument to DenseToSparseSetOperation. 14116 type DenseToSparseSetOperationAttr func(optionalAttr) 14117 14118 // DenseToSparseSetOperationValidateIndices sets the optional validate_indices attribute to value. 14119 // If not specified, defaults to true 14120 func DenseToSparseSetOperationValidateIndices(value bool) DenseToSparseSetOperationAttr { 14121 return func(m optionalAttr) { 14122 m["validate_indices"] = value 14123 } 14124 } 14125 14126 // Applies set operation along last dimension of `Tensor` and `SparseTensor`. 14127 // 14128 // See SetOperationOp::SetOperationFromContext for values of `set_operation`. 14129 // 14130 // Input `set2` is a `SparseTensor` represented by `set2_indices`, `set2_values`, 14131 // and `set2_shape`. For `set2` ranked `n`, 1st `n-1` dimensions must be the same 14132 // as `set1`. Dimension `n` contains values in a set, duplicates are allowed but 14133 // ignored. 14134 // 14135 // If `validate_indices` is `True`, this op validates the order and range of `set2` 14136 // indices. 14137 // 14138 // Output `result` is a `SparseTensor` represented by `result_indices`, 14139 // `result_values`, and `result_shape`. For `set1` and `set2` ranked `n`, this 14140 // has rank `n` and the same 1st `n-1` dimensions as `set1` and `set2`. The `nth` 14141 // dimension contains the result of `set_operation` applied to the corresponding 14142 // `[0...n-1]` dimension of `set`. 14143 // 14144 // Arguments: 14145 // set1: `Tensor` with rank `n`. 1st `n-1` dimensions must be the same as `set2`. 14146 // Dimension `n` contains values in a set, duplicates are allowed but ignored. 14147 // set2_indices: 2D `Tensor`, indices of a `SparseTensor`. Must be in row-major 14148 // order. 14149 // set2_values: 1D `Tensor`, values of a `SparseTensor`. Must be in row-major 14150 // order. 14151 // set2_shape: 1D `Tensor`, shape of a `SparseTensor`. `set2_shape[0...n-1]` must 14152 // be the same as the 1st `n-1` dimensions of `set1`, `result_shape[n]` is the 14153 // max set size across `n-1` dimensions. 14154 // 14155 // 14156 // Returns 2D indices of a `SparseTensor`.1D values of a `SparseTensor`.1D `Tensor` shape of a `SparseTensor`. `result_shape[0...n-1]` is 14157 // the same as the 1st `n-1` dimensions of `set1` and `set2`, `result_shape[n]` 14158 // is the max result set size across all `0...n-1` dimensions. 14159 func DenseToSparseSetOperation(scope *Scope, set1 tf.Output, set2_indices tf.Output, set2_values tf.Output, set2_shape tf.Output, set_operation string, optional ...DenseToSparseSetOperationAttr) (result_indices tf.Output, result_values tf.Output, result_shape tf.Output) { 14160 if scope.Err() != nil { 14161 return 14162 } 14163 attrs := map[string]interface{}{"set_operation": set_operation} 14164 for _, a := range optional { 14165 a(attrs) 14166 } 14167 opspec := tf.OpSpec{ 14168 Type: "DenseToSparseSetOperation", 14169 Input: []tf.Input{ 14170 set1, set2_indices, set2_values, set2_shape, 14171 }, 14172 Attrs: attrs, 14173 } 14174 op := scope.AddOperation(opspec) 14175 return op.Output(0), op.Output(1), op.Output(2) 14176 } 14177 14178 // L2 Loss. 14179 // 14180 // Computes half the L2 norm of a tensor without the `sqrt`: 14181 // 14182 // output = sum(t ** 2) / 2 14183 // 14184 // Arguments: 14185 // t: Typically 2-D, but may have any dimensions. 14186 // 14187 // Returns 0-D. 14188 func L2Loss(scope *Scope, t tf.Output) (output tf.Output) { 14189 if scope.Err() != nil { 14190 return 14191 } 14192 opspec := tf.OpSpec{ 14193 Type: "L2Loss", 14194 Input: []tf.Input{ 14195 t, 14196 }, 14197 } 14198 op := scope.AddOperation(opspec) 14199 return op.Output(0) 14200 } 14201 14202 // Conv3DAttr is an optional argument to Conv3D. 14203 type Conv3DAttr func(optionalAttr) 14204 14205 // Conv3DDataFormat sets the optional data_format attribute to value. 14206 // 14207 // value: The data format of the input and output data. With the 14208 // default format "NDHWC", the data is stored in the order of: 14209 // [batch, in_depth, in_height, in_width, in_channels]. 14210 // Alternatively, the format could be "NCDHW", the data storage order is: 14211 // [batch, in_channels, in_depth, in_height, in_width]. 14212 // If not specified, defaults to "NDHWC" 14213 func Conv3DDataFormat(value string) Conv3DAttr { 14214 return func(m optionalAttr) { 14215 m["data_format"] = value 14216 } 14217 } 14218 14219 // Conv3DDilations sets the optional dilations attribute to value. 14220 // 14221 // value: 1-D tensor of length 5. The dilation factor for each dimension of 14222 // `input`. If set to k > 1, there will be k-1 skipped cells between each 14223 // filter element on that dimension. The dimension order is determined by the 14224 // value of `data_format`, see above for details. Dilations in the batch and 14225 // depth dimensions must be 1. 14226 // If not specified, defaults to <i:1 i:1 i:1 i:1 i:1 > 14227 func Conv3DDilations(value []int64) Conv3DAttr { 14228 return func(m optionalAttr) { 14229 m["dilations"] = value 14230 } 14231 } 14232 14233 // Computes a 3-D convolution given 5-D `input` and `filter` tensors. 14234 // 14235 // In signal processing, cross-correlation is a measure of similarity of 14236 // two waveforms as a function of a time-lag applied to one of them. This 14237 // is also known as a sliding dot product or sliding inner-product. 14238 // 14239 // Our Conv3D implements a form of cross-correlation. 14240 // 14241 // Arguments: 14242 // input: Shape `[batch, in_depth, in_height, in_width, in_channels]`. 14243 // filter: Shape `[filter_depth, filter_height, filter_width, in_channels, 14244 // out_channels]`. `in_channels` must match between `input` and `filter`. 14245 // strides: 1-D tensor of length 5. The stride of the sliding window for each 14246 // dimension of `input`. Must have `strides[0] = strides[4] = 1`. 14247 // padding: The type of padding algorithm to use. 14248 func Conv3D(scope *Scope, input tf.Output, filter tf.Output, strides []int64, padding string, optional ...Conv3DAttr) (output tf.Output) { 14249 if scope.Err() != nil { 14250 return 14251 } 14252 attrs := map[string]interface{}{"strides": strides, "padding": padding} 14253 for _, a := range optional { 14254 a(attrs) 14255 } 14256 opspec := tf.OpSpec{ 14257 Type: "Conv3D", 14258 Input: []tf.Input{ 14259 input, filter, 14260 }, 14261 Attrs: attrs, 14262 } 14263 op := scope.AddOperation(opspec) 14264 return op.Output(0) 14265 } 14266 14267 // Adds up a SparseTensor and a dense Tensor, using these special rules: 14268 // 14269 // (1) Broadcasts the dense side to have the same shape as the sparse side, if 14270 // eligible; 14271 // (2) Then, only the dense values pointed to by the indices of the SparseTensor 14272 // participate in the cwise addition. 14273 // 14274 // By these rules, the result is a logical SparseTensor with exactly the same 14275 // indices and shape, but possibly with different non-zero values. The output of 14276 // this Op is the resultant non-zero values. 14277 // 14278 // Arguments: 14279 // sp_indices: 2-D. `N x R` matrix with the indices of non-empty values in a 14280 // SparseTensor, possibly not in canonical ordering. 14281 // sp_values: 1-D. `N` non-empty values corresponding to `sp_indices`. 14282 // sp_shape: 1-D. Shape of the input SparseTensor. 14283 // dense: `R`-D. The dense Tensor operand. 14284 // 14285 // Returns 1-D. The `N` values that are operated on. 14286 func SparseDenseCwiseAdd(scope *Scope, sp_indices tf.Output, sp_values tf.Output, sp_shape tf.Output, dense tf.Output) (output tf.Output) { 14287 if scope.Err() != nil { 14288 return 14289 } 14290 opspec := tf.OpSpec{ 14291 Type: "SparseDenseCwiseAdd", 14292 Input: []tf.Input{ 14293 sp_indices, sp_values, sp_shape, dense, 14294 }, 14295 } 14296 op := scope.AddOperation(opspec) 14297 return op.Output(0) 14298 } 14299 14300 // UnicodeDecodeAttr is an optional argument to UnicodeDecode. 14301 type UnicodeDecodeAttr func(optionalAttr) 14302 14303 // UnicodeDecodeErrors sets the optional errors attribute to value. 14304 // 14305 // value: Error handling policy when there is invalid formatting found in the input. 14306 // The value of 'strict' will cause the operation to produce a InvalidArgument 14307 // error on any invalid input formatting. A value of 'replace' (the default) will 14308 // cause the operation to replace any invalid formatting in the input with the 14309 // `replacement_char` codepoint. A value of 'ignore' will cause the operation to 14310 // skip any invalid formatting in the input and produce no corresponding output 14311 // character. 14312 // If not specified, defaults to "replace" 14313 func UnicodeDecodeErrors(value string) UnicodeDecodeAttr { 14314 return func(m optionalAttr) { 14315 m["errors"] = value 14316 } 14317 } 14318 14319 // UnicodeDecodeReplacementChar sets the optional replacement_char attribute to value. 14320 // 14321 // value: The replacement character codepoint to be used in place of any invalid 14322 // formatting in the input when `errors='replace'`. Any valid unicode codepoint may 14323 // be used. The default value is the default unicode replacement character is 14324 // 0xFFFD or U+65533.) 14325 // If not specified, defaults to 65533 14326 func UnicodeDecodeReplacementChar(value int64) UnicodeDecodeAttr { 14327 return func(m optionalAttr) { 14328 m["replacement_char"] = value 14329 } 14330 } 14331 14332 // UnicodeDecodeReplaceControlCharacters sets the optional replace_control_characters attribute to value. 14333 // 14334 // value: Whether to replace the C0 control characters (00-1F) with the 14335 // `replacement_char`. Default is false. 14336 // If not specified, defaults to false 14337 func UnicodeDecodeReplaceControlCharacters(value bool) UnicodeDecodeAttr { 14338 return func(m optionalAttr) { 14339 m["replace_control_characters"] = value 14340 } 14341 } 14342 14343 // Decodes each string in `input` into a sequence of Unicode code points. 14344 // 14345 // The character codepoints for all strings are returned using a single vector 14346 // `char_values`, with strings expanded to characters in row-major order. 14347 // 14348 // The `row_splits` tensor indicates where the codepoints for 14349 // each input string begin and end within the `char_values` tensor. 14350 // In particular, the values for the `i`th 14351 // string (in row-major order) are stored in the slice 14352 // `[row_splits[i]:row_splits[i+1]]`. Thus: 14353 // 14354 // * `char_values[row_splits[i]+j]` is the Unicode codepoint for the `j`th 14355 // character in the `i`th string (in row-major order). 14356 // * `row_splits[i+1] - row_splits[i]` is the number of characters in the `i`th 14357 // string (in row-major order). 14358 // 14359 // Arguments: 14360 // input: The text to be decoded. Can have any shape. Note that the output is flattened 14361 // to a vector of char values. 14362 // input_encoding: Text encoding of the input strings. This is any of the encodings supported 14363 // by ICU ucnv algorithmic converters. Examples: `"UTF-16", "US ASCII", "UTF-8"`. 14364 // 14365 // Returns A 1D int32 tensor containing the row splits.A 1D int32 Tensor containing the decoded codepoints. 14366 func UnicodeDecode(scope *Scope, input tf.Output, input_encoding string, optional ...UnicodeDecodeAttr) (row_splits tf.Output, char_values tf.Output) { 14367 if scope.Err() != nil { 14368 return 14369 } 14370 attrs := map[string]interface{}{"input_encoding": input_encoding} 14371 for _, a := range optional { 14372 a(attrs) 14373 } 14374 opspec := tf.OpSpec{ 14375 Type: "UnicodeDecode", 14376 Input: []tf.Input{ 14377 input, 14378 }, 14379 Attrs: attrs, 14380 } 14381 op := scope.AddOperation(opspec) 14382 return op.Output(0), op.Output(1) 14383 } 14384 14385 // QuantizeV2Attr is an optional argument to QuantizeV2. 14386 type QuantizeV2Attr func(optionalAttr) 14387 14388 // QuantizeV2Mode sets the optional mode attribute to value. 14389 // If not specified, defaults to "MIN_COMBINED" 14390 func QuantizeV2Mode(value string) QuantizeV2Attr { 14391 return func(m optionalAttr) { 14392 m["mode"] = value 14393 } 14394 } 14395 14396 // QuantizeV2RoundMode sets the optional round_mode attribute to value. 14397 // If not specified, defaults to "HALF_AWAY_FROM_ZERO" 14398 func QuantizeV2RoundMode(value string) QuantizeV2Attr { 14399 return func(m optionalAttr) { 14400 m["round_mode"] = value 14401 } 14402 } 14403 14404 // Quantize the 'input' tensor of type float to 'output' tensor of type 'T'. 14405 // 14406 // [min_range, max_range] are scalar floats that specify the range for 14407 // the 'input' data. The 'mode' attribute controls exactly which calculations are 14408 // used to convert the float values to their quantized equivalents. The 14409 // 'round_mode' attribute controls which rounding tie-breaking algorithm is used 14410 // when rounding float values to their quantized equivalents. 14411 // 14412 // In 'MIN_COMBINED' mode, each value of the tensor will undergo the following: 14413 // 14414 // ``` 14415 // out[i] = (in[i] - min_range) * range(T) / (max_range - min_range) 14416 // if T == qint8: out[i] -= (range(T) + 1) / 2.0 14417 // ``` 14418 // 14419 // here `range(T) = numeric_limits<T>::max() - numeric_limits<T>::min()` 14420 // 14421 // *MIN_COMBINED Mode Example* 14422 // 14423 // Assume the input is type float and has a possible range of [0.0, 6.0] and the 14424 // output type is quint8 ([0, 255]). The min_range and max_range values should be 14425 // specified as 0.0 and 6.0. Quantizing from float to quint8 will multiply each 14426 // value of the input by 255/6 and cast to quint8. 14427 // 14428 // If the output type was qint8 ([-128, 127]), the operation will additionally 14429 // subtract each value by 128 prior to casting, so that the range of values aligns 14430 // with the range of qint8. 14431 // 14432 // If the mode is 'MIN_FIRST', then this approach is used: 14433 // 14434 // ``` 14435 // num_discrete_values = 1 << (# of bits in T) 14436 // range_adjust = num_discrete_values / (num_discrete_values - 1) 14437 // range = (range_max - range_min) * range_adjust 14438 // range_scale = num_discrete_values / range 14439 // quantized = round(input * range_scale) - round(range_min * range_scale) + 14440 // numeric_limits<T>::min() 14441 // quantized = max(quantized, numeric_limits<T>::min()) 14442 // quantized = min(quantized, numeric_limits<T>::max()) 14443 // ``` 14444 // 14445 // The biggest difference between this and MIN_COMBINED is that the minimum range 14446 // is rounded first, before it's subtracted from the rounded value. With 14447 // MIN_COMBINED, a small bias is introduced where repeated iterations of quantizing 14448 // and dequantizing will introduce a larger and larger error. 14449 // 14450 // *SCALED mode Example* 14451 // 14452 // `SCALED` mode matches the quantization approach used in 14453 // `QuantizeAndDequantize{V2|V3}`. 14454 // 14455 // If the mode is `SCALED`, we do not use the full range of the output type, 14456 // choosing to elide the lowest possible value for symmetry (e.g., output range is 14457 // -127 to 127, not -128 to 127 for signed 8 bit quantization), so that 0.0 maps to 14458 // 0. 14459 // 14460 // We first find the range of values in our tensor. The 14461 // range we use is always centered on 0, so we find m such that 14462 // 14463 // ```c++ 14464 // m = max(abs(input_min), abs(input_max)) 14465 // ``` 14466 // 14467 // Our input tensor range is then `[-m, m]`. 14468 // 14469 // Next, we choose our fixed-point quantization buckets, `[min_fixed, max_fixed]`. 14470 // If T is signed, this is 14471 // 14472 // ``` 14473 // num_bits = sizeof(T) * 8 14474 // [min_fixed, max_fixed] = 14475 // [-(1 << (num_bits - 1) - 1), (1 << (num_bits - 1)) - 1] 14476 // ``` 14477 // 14478 // Otherwise, if T is unsigned, the fixed-point range is 14479 // 14480 // ``` 14481 // [min_fixed, max_fixed] = [0, (1 << num_bits) - 1] 14482 // ``` 14483 // 14484 // From this we compute our scaling factor, s: 14485 // 14486 // ```c++ 14487 // s = (max_fixed - min_fixed) / (2 * m) 14488 // ``` 14489 // 14490 // Now we can quantize the elements of our tensor: 14491 // 14492 // ```c++ 14493 // result = round(input * s) 14494 // ``` 14495 // 14496 // One thing to watch out for is that the operator may choose to adjust the 14497 // requested minimum and maximum values slightly during the quantization process, 14498 // so you should always use the output ports as the range for further calculations. 14499 // For example, if the requested minimum and maximum values are close to equal, 14500 // they will be separated by a small epsilon value to prevent ill-formed quantized 14501 // buffers from being created. Otherwise, you can end up with buffers where all the 14502 // quantized values map to the same float value, which causes problems for 14503 // operations that have to perform further calculations on them. 14504 // 14505 // Arguments: 14506 // 14507 // min_range: The minimum scalar value possibly produced for the input. 14508 // max_range: The maximum scalar value possibly produced for the input. 14509 // 14510 // 14511 // Returns The quantized data produced from the float input.The actual minimum scalar value used for the output.The actual maximum scalar value used for the output. 14512 func QuantizeV2(scope *Scope, input tf.Output, min_range tf.Output, max_range tf.Output, T tf.DataType, optional ...QuantizeV2Attr) (output tf.Output, output_min tf.Output, output_max tf.Output) { 14513 if scope.Err() != nil { 14514 return 14515 } 14516 attrs := map[string]interface{}{"T": T} 14517 for _, a := range optional { 14518 a(attrs) 14519 } 14520 opspec := tf.OpSpec{ 14521 Type: "QuantizeV2", 14522 Input: []tf.Input{ 14523 input, min_range, max_range, 14524 }, 14525 Attrs: attrs, 14526 } 14527 op := scope.AddOperation(opspec) 14528 return op.Output(0), op.Output(1), op.Output(2) 14529 } 14530 14531 // HistogramFixedWidthAttr is an optional argument to HistogramFixedWidth. 14532 type HistogramFixedWidthAttr func(optionalAttr) 14533 14534 // HistogramFixedWidthDtype sets the optional dtype attribute to value. 14535 // If not specified, defaults to DT_INT32 14536 func HistogramFixedWidthDtype(value tf.DataType) HistogramFixedWidthAttr { 14537 return func(m optionalAttr) { 14538 m["dtype"] = value 14539 } 14540 } 14541 14542 // Return histogram of values. 14543 // 14544 // Given the tensor `values`, this operation returns a rank 1 histogram counting 14545 // the number of entries in `values` that fall into every bin. The bins are 14546 // equal width and determined by the arguments `value_range` and `nbins`. 14547 // 14548 // ```python 14549 // # Bins will be: (-inf, 1), [1, 2), [2, 3), [3, 4), [4, inf) 14550 // nbins = 5 14551 // value_range = [0.0, 5.0] 14552 // new_values = [-1.0, 0.0, 1.5, 2.0, 5.0, 15] 14553 // 14554 // with tf.get_default_session() as sess: 14555 // hist = tf.histogram_fixed_width(new_values, value_range, nbins=5) 14556 // variables.global_variables_initializer().run() 14557 // sess.run(hist) => [2, 1, 1, 0, 2] 14558 // ``` 14559 // 14560 // Arguments: 14561 // values: Numeric `Tensor`. 14562 // value_range: Shape [2] `Tensor` of same `dtype` as `values`. 14563 // values <= value_range[0] will be mapped to hist[0], 14564 // values >= value_range[1] will be mapped to hist[-1]. 14565 // nbins: Scalar `int32 Tensor`. Number of histogram bins. 14566 // 14567 // Returns A 1-D `Tensor` holding histogram of values. 14568 func HistogramFixedWidth(scope *Scope, values tf.Output, value_range tf.Output, nbins tf.Output, optional ...HistogramFixedWidthAttr) (out tf.Output) { 14569 if scope.Err() != nil { 14570 return 14571 } 14572 attrs := map[string]interface{}{} 14573 for _, a := range optional { 14574 a(attrs) 14575 } 14576 opspec := tf.OpSpec{ 14577 Type: "HistogramFixedWidth", 14578 Input: []tf.Input{ 14579 values, value_range, nbins, 14580 }, 14581 Attrs: attrs, 14582 } 14583 op := scope.AddOperation(opspec) 14584 return op.Output(0) 14585 } 14586 14587 // Serializes the tree handle to a proto 14588 // 14589 // Arguments: 14590 // tree_handle: Handle to the tree resource to be serialized. 14591 // 14592 // Returns Serialied proto string of the tree resource. 14593 func TensorForestTreeSerialize(scope *Scope, tree_handle tf.Output) (tree_config tf.Output) { 14594 if scope.Err() != nil { 14595 return 14596 } 14597 opspec := tf.OpSpec{ 14598 Type: "TensorForestTreeSerialize", 14599 Input: []tf.Input{ 14600 tree_handle, 14601 }, 14602 } 14603 op := scope.AddOperation(opspec) 14604 return op.Output(0) 14605 } 14606 14607 // SparseMatMulAttr is an optional argument to SparseMatMul. 14608 type SparseMatMulAttr func(optionalAttr) 14609 14610 // SparseMatMulTransposeA sets the optional transpose_a attribute to value. 14611 // If not specified, defaults to false 14612 func SparseMatMulTransposeA(value bool) SparseMatMulAttr { 14613 return func(m optionalAttr) { 14614 m["transpose_a"] = value 14615 } 14616 } 14617 14618 // SparseMatMulTransposeB sets the optional transpose_b attribute to value. 14619 // If not specified, defaults to false 14620 func SparseMatMulTransposeB(value bool) SparseMatMulAttr { 14621 return func(m optionalAttr) { 14622 m["transpose_b"] = value 14623 } 14624 } 14625 14626 // SparseMatMulAIsSparse sets the optional a_is_sparse attribute to value. 14627 // If not specified, defaults to false 14628 func SparseMatMulAIsSparse(value bool) SparseMatMulAttr { 14629 return func(m optionalAttr) { 14630 m["a_is_sparse"] = value 14631 } 14632 } 14633 14634 // SparseMatMulBIsSparse sets the optional b_is_sparse attribute to value. 14635 // If not specified, defaults to false 14636 func SparseMatMulBIsSparse(value bool) SparseMatMulAttr { 14637 return func(m optionalAttr) { 14638 m["b_is_sparse"] = value 14639 } 14640 } 14641 14642 // Multiply matrix "a" by matrix "b". 14643 // 14644 // The inputs must be two-dimensional matrices and the inner dimension of "a" must 14645 // match the outer dimension of "b". Both "a" and "b" must be `Tensor`s not 14646 // `SparseTensor`s. This op is optimized for the case where at least one of "a" or 14647 // "b" is sparse, in the sense that they have a large proportion of zero values. 14648 // The breakeven for using this versus a dense matrix multiply on one platform was 14649 // 30% zero values in the sparse matrix. 14650 // 14651 // The gradient computation of this operation will only take advantage of sparsity 14652 // in the input gradient when that gradient comes from a Relu. 14653 func SparseMatMul(scope *Scope, a tf.Output, b tf.Output, optional ...SparseMatMulAttr) (product tf.Output) { 14654 if scope.Err() != nil { 14655 return 14656 } 14657 attrs := map[string]interface{}{} 14658 for _, a := range optional { 14659 a(attrs) 14660 } 14661 opspec := tf.OpSpec{ 14662 Type: "SparseMatMul", 14663 Input: []tf.Input{ 14664 a, b, 14665 }, 14666 Attrs: attrs, 14667 } 14668 op := scope.AddOperation(opspec) 14669 return op.Output(0) 14670 } 14671 14672 // ExperimentalThreadPoolHandleAttr is an optional argument to ExperimentalThreadPoolHandle. 14673 type ExperimentalThreadPoolHandleAttr func(optionalAttr) 14674 14675 // ExperimentalThreadPoolHandleMaxIntraOpParallelism sets the optional max_intra_op_parallelism attribute to value. 14676 // 14677 // value: The maximum degree of parallelism to use within operations that execute on this 14678 // threadpool. 14679 // If not specified, defaults to 1 14680 func ExperimentalThreadPoolHandleMaxIntraOpParallelism(value int64) ExperimentalThreadPoolHandleAttr { 14681 return func(m optionalAttr) { 14682 m["max_intra_op_parallelism"] = value 14683 } 14684 } 14685 14686 // ExperimentalThreadPoolHandleContainer sets the optional container attribute to value. 14687 // If not specified, defaults to "" 14688 func ExperimentalThreadPoolHandleContainer(value string) ExperimentalThreadPoolHandleAttr { 14689 return func(m optionalAttr) { 14690 m["container"] = value 14691 } 14692 } 14693 14694 // ExperimentalThreadPoolHandleSharedName sets the optional shared_name attribute to value. 14695 // If not specified, defaults to "" 14696 func ExperimentalThreadPoolHandleSharedName(value string) ExperimentalThreadPoolHandleAttr { 14697 return func(m optionalAttr) { 14698 m["shared_name"] = value 14699 } 14700 } 14701 14702 // Creates a dataset that uses a custom thread pool to compute `input_dataset`. 14703 // 14704 // Arguments: 14705 // num_threads: The number of threads in the thread pool. 14706 // display_name: A human-readable name for the threads that may be visible in some 14707 // visualizations. 14708 // threadpool. 14709 // 14710 // Returns A resource that can be consumed by one or more ExperimentalThreadPoolDataset 14711 // ops. 14712 func ExperimentalThreadPoolHandle(scope *Scope, num_threads int64, display_name string, optional ...ExperimentalThreadPoolHandleAttr) (handle tf.Output) { 14713 if scope.Err() != nil { 14714 return 14715 } 14716 attrs := map[string]interface{}{"num_threads": num_threads, "display_name": display_name} 14717 for _, a := range optional { 14718 a(attrs) 14719 } 14720 opspec := tf.OpSpec{ 14721 Type: "ExperimentalThreadPoolHandle", 14722 14723 Attrs: attrs, 14724 } 14725 op := scope.AddOperation(opspec) 14726 return op.Output(0) 14727 } 14728 14729 // LoadTPUEmbeddingProximalAdagradParametersGradAccumDebugAttr is an optional argument to LoadTPUEmbeddingProximalAdagradParametersGradAccumDebug. 14730 type LoadTPUEmbeddingProximalAdagradParametersGradAccumDebugAttr func(optionalAttr) 14731 14732 // LoadTPUEmbeddingProximalAdagradParametersGradAccumDebugTableId sets the optional table_id attribute to value. 14733 // If not specified, defaults to -1 14734 // 14735 // REQUIRES: value >= -1 14736 func LoadTPUEmbeddingProximalAdagradParametersGradAccumDebugTableId(value int64) LoadTPUEmbeddingProximalAdagradParametersGradAccumDebugAttr { 14737 return func(m optionalAttr) { 14738 m["table_id"] = value 14739 } 14740 } 14741 14742 // LoadTPUEmbeddingProximalAdagradParametersGradAccumDebugTableName sets the optional table_name attribute to value. 14743 // If not specified, defaults to "" 14744 func LoadTPUEmbeddingProximalAdagradParametersGradAccumDebugTableName(value string) LoadTPUEmbeddingProximalAdagradParametersGradAccumDebugAttr { 14745 return func(m optionalAttr) { 14746 m["table_name"] = value 14747 } 14748 } 14749 14750 // Load proximal Adagrad embedding parameters with debug support. 14751 // 14752 // An op that loads optimization parameters into HBM for embedding. Must be 14753 // preceded by a ConfigureTPUEmbeddingHost op that sets up the correct 14754 // embedding table configuration. For example, this op is used to install 14755 // parameters that are loaded from a checkpoint before a training loop is 14756 // executed. 14757 // 14758 // Arguments: 14759 // parameters: Value of parameters used in the proximal Adagrad optimization algorithm. 14760 // accumulators: Value of accumulators used in the proximal Adagrad optimization algorithm. 14761 // gradient_accumulators: Value of gradient_accumulators used in the proximal Adagrad optimization algorithm. 14762 // 14763 // 14764 // 14765 // Returns the created operation. 14766 func LoadTPUEmbeddingProximalAdagradParametersGradAccumDebug(scope *Scope, parameters tf.Output, accumulators tf.Output, gradient_accumulators tf.Output, num_shards int64, shard_id int64, optional ...LoadTPUEmbeddingProximalAdagradParametersGradAccumDebugAttr) (o *tf.Operation) { 14767 if scope.Err() != nil { 14768 return 14769 } 14770 attrs := map[string]interface{}{"num_shards": num_shards, "shard_id": shard_id} 14771 for _, a := range optional { 14772 a(attrs) 14773 } 14774 opspec := tf.OpSpec{ 14775 Type: "LoadTPUEmbeddingProximalAdagradParametersGradAccumDebug", 14776 Input: []tf.Input{ 14777 parameters, accumulators, gradient_accumulators, 14778 }, 14779 Attrs: attrs, 14780 } 14781 return scope.AddOperation(opspec) 14782 } 14783 14784 // LoadTPUEmbeddingProximalAdagradParametersAttr is an optional argument to LoadTPUEmbeddingProximalAdagradParameters. 14785 type LoadTPUEmbeddingProximalAdagradParametersAttr func(optionalAttr) 14786 14787 // LoadTPUEmbeddingProximalAdagradParametersTableId sets the optional table_id attribute to value. 14788 // If not specified, defaults to -1 14789 // 14790 // REQUIRES: value >= -1 14791 func LoadTPUEmbeddingProximalAdagradParametersTableId(value int64) LoadTPUEmbeddingProximalAdagradParametersAttr { 14792 return func(m optionalAttr) { 14793 m["table_id"] = value 14794 } 14795 } 14796 14797 // LoadTPUEmbeddingProximalAdagradParametersTableName sets the optional table_name attribute to value. 14798 // If not specified, defaults to "" 14799 func LoadTPUEmbeddingProximalAdagradParametersTableName(value string) LoadTPUEmbeddingProximalAdagradParametersAttr { 14800 return func(m optionalAttr) { 14801 m["table_name"] = value 14802 } 14803 } 14804 14805 // Load proximal Adagrad embedding parameters. 14806 // 14807 // An op that loads optimization parameters into HBM for embedding. Must be 14808 // preceded by a ConfigureTPUEmbeddingHost op that sets up the correct 14809 // embedding table configuration. For example, this op is used to install 14810 // parameters that are loaded from a checkpoint before a training loop is 14811 // executed. 14812 // 14813 // Arguments: 14814 // parameters: Value of parameters used in the proximal Adagrad optimization algorithm. 14815 // accumulators: Value of accumulators used in the proximal Adagrad optimization algorithm. 14816 // 14817 // 14818 // 14819 // Returns the created operation. 14820 func LoadTPUEmbeddingProximalAdagradParameters(scope *Scope, parameters tf.Output, accumulators tf.Output, num_shards int64, shard_id int64, optional ...LoadTPUEmbeddingProximalAdagradParametersAttr) (o *tf.Operation) { 14821 if scope.Err() != nil { 14822 return 14823 } 14824 attrs := map[string]interface{}{"num_shards": num_shards, "shard_id": shard_id} 14825 for _, a := range optional { 14826 a(attrs) 14827 } 14828 opspec := tf.OpSpec{ 14829 Type: "LoadTPUEmbeddingProximalAdagradParameters", 14830 Input: []tf.Input{ 14831 parameters, accumulators, 14832 }, 14833 Attrs: attrs, 14834 } 14835 return scope.AddOperation(opspec) 14836 } 14837 14838 // Get the current size of the TensorArray. 14839 // 14840 // Arguments: 14841 // handle: The handle to a TensorArray (output of TensorArray or TensorArrayGrad). 14842 // flow_in: A float scalar that enforces proper chaining of operations. 14843 // 14844 // Returns The current size of the TensorArray. 14845 func TensorArraySizeV3(scope *Scope, handle tf.Output, flow_in tf.Output) (size tf.Output) { 14846 if scope.Err() != nil { 14847 return 14848 } 14849 opspec := tf.OpSpec{ 14850 Type: "TensorArraySizeV3", 14851 Input: []tf.Input{ 14852 handle, flow_in, 14853 }, 14854 } 14855 op := scope.AddOperation(opspec) 14856 return op.Output(0) 14857 } 14858 14859 // Computes gradients for the scaled exponential linear (Selu) operation. 14860 // 14861 // Arguments: 14862 // gradients: The backpropagated gradients to the corresponding Selu operation. 14863 // outputs: The outputs of the corresponding Selu operation. 14864 // 14865 // Returns The gradients: `gradients * (outputs + scale * alpha)` 14866 // if outputs < 0, `scale * gradients` otherwise. 14867 func SeluGrad(scope *Scope, gradients tf.Output, outputs tf.Output) (backprops tf.Output) { 14868 if scope.Err() != nil { 14869 return 14870 } 14871 opspec := tf.OpSpec{ 14872 Type: "SeluGrad", 14873 Input: []tf.Input{ 14874 gradients, outputs, 14875 }, 14876 } 14877 op := scope.AddOperation(opspec) 14878 return op.Output(0) 14879 } 14880 14881 // ResourceSparseApplyFtrlV2Attr is an optional argument to ResourceSparseApplyFtrlV2. 14882 type ResourceSparseApplyFtrlV2Attr func(optionalAttr) 14883 14884 // ResourceSparseApplyFtrlV2UseLocking sets the optional use_locking attribute to value. 14885 // 14886 // value: If `True`, updating of the var and accum tensors will be protected 14887 // by a lock; otherwise the behavior is undefined, but may exhibit less 14888 // contention. 14889 // If not specified, defaults to false 14890 func ResourceSparseApplyFtrlV2UseLocking(value bool) ResourceSparseApplyFtrlV2Attr { 14891 return func(m optionalAttr) { 14892 m["use_locking"] = value 14893 } 14894 } 14895 14896 // Update relevant entries in '*var' according to the Ftrl-proximal scheme. 14897 // 14898 // That is for rows we have grad for, we update var, accum and linear as follows: 14899 // grad_with_shrinkage = grad + 2 * l2_shrinkage * var 14900 // accum_new = accum + grad_with_shrinkage * grad_with_shrinkage 14901 // linear += grad_with_shrinkage + 14902 // (accum_new^(-lr_power) - accum^(-lr_power)) / lr * var 14903 // quadratic = 1.0 / (accum_new^(lr_power) * lr) + 2 * l2 14904 // var = (sign(linear) * l1 - linear) / quadratic if |linear| > l1 else 0.0 14905 // accum = accum_new 14906 // 14907 // Arguments: 14908 // var_: Should be from a Variable(). 14909 // accum: Should be from a Variable(). 14910 // linear: Should be from a Variable(). 14911 // grad: The gradient. 14912 // indices: A vector of indices into the first dimension of var and accum. 14913 // lr: Scaling factor. Must be a scalar. 14914 // l1: L1 regularization. Must be a scalar. 14915 // l2: L2 shrinkage regulariation. Must be a scalar. 14916 // 14917 // lr_power: Scaling factor. Must be a scalar. 14918 // 14919 // Returns the created operation. 14920 func ResourceSparseApplyFtrlV2(scope *Scope, var_ tf.Output, accum tf.Output, linear tf.Output, grad tf.Output, indices tf.Output, lr tf.Output, l1 tf.Output, l2 tf.Output, l2_shrinkage tf.Output, lr_power tf.Output, optional ...ResourceSparseApplyFtrlV2Attr) (o *tf.Operation) { 14921 if scope.Err() != nil { 14922 return 14923 } 14924 attrs := map[string]interface{}{} 14925 for _, a := range optional { 14926 a(attrs) 14927 } 14928 opspec := tf.OpSpec{ 14929 Type: "ResourceSparseApplyFtrlV2", 14930 Input: []tf.Input{ 14931 var_, accum, linear, grad, indices, lr, l1, l2, l2_shrinkage, lr_power, 14932 }, 14933 Attrs: attrs, 14934 } 14935 return scope.AddOperation(opspec) 14936 } 14937 14938 // SumAttr is an optional argument to Sum. 14939 type SumAttr func(optionalAttr) 14940 14941 // SumKeepDims sets the optional keep_dims attribute to value. 14942 // 14943 // value: If true, retain reduced dimensions with length 1. 14944 // If not specified, defaults to false 14945 func SumKeepDims(value bool) SumAttr { 14946 return func(m optionalAttr) { 14947 m["keep_dims"] = value 14948 } 14949 } 14950 14951 // Computes the sum of elements across dimensions of a tensor. 14952 // 14953 // Reduces `input` along the dimensions given in `axis`. Unless 14954 // `keep_dims` is true, the rank of the tensor is reduced by 1 for each entry in 14955 // `axis`. If `keep_dims` is true, the reduced dimensions are 14956 // retained with length 1. 14957 // 14958 // Arguments: 14959 // input: The tensor to reduce. 14960 // axis: The dimensions to reduce. Must be in the range 14961 // `[-rank(input), rank(input))`. 14962 // 14963 // Returns The reduced tensor. 14964 func Sum(scope *Scope, input tf.Output, axis tf.Output, optional ...SumAttr) (output tf.Output) { 14965 if scope.Err() != nil { 14966 return 14967 } 14968 attrs := map[string]interface{}{} 14969 for _, a := range optional { 14970 a(attrs) 14971 } 14972 opspec := tf.OpSpec{ 14973 Type: "Sum", 14974 Input: []tf.Input{ 14975 input, axis, 14976 }, 14977 Attrs: attrs, 14978 } 14979 op := scope.AddOperation(opspec) 14980 return op.Output(0) 14981 } 14982 14983 // SparseToSparseSetOperationAttr is an optional argument to SparseToSparseSetOperation. 14984 type SparseToSparseSetOperationAttr func(optionalAttr) 14985 14986 // SparseToSparseSetOperationValidateIndices sets the optional validate_indices attribute to value. 14987 // If not specified, defaults to true 14988 func SparseToSparseSetOperationValidateIndices(value bool) SparseToSparseSetOperationAttr { 14989 return func(m optionalAttr) { 14990 m["validate_indices"] = value 14991 } 14992 } 14993 14994 // Applies set operation along last dimension of 2 `SparseTensor` inputs. 14995 // 14996 // See SetOperationOp::SetOperationFromContext for values of `set_operation`. 14997 // 14998 // If `validate_indices` is `True`, `SparseToSparseSetOperation` validates the 14999 // order and range of `set1` and `set2` indices. 15000 // 15001 // Input `set1` is a `SparseTensor` represented by `set1_indices`, `set1_values`, 15002 // and `set1_shape`. For `set1` ranked `n`, 1st `n-1` dimensions must be the same 15003 // as `set2`. Dimension `n` contains values in a set, duplicates are allowed but 15004 // ignored. 15005 // 15006 // Input `set2` is a `SparseTensor` represented by `set2_indices`, `set2_values`, 15007 // and `set2_shape`. For `set2` ranked `n`, 1st `n-1` dimensions must be the same 15008 // as `set1`. Dimension `n` contains values in a set, duplicates are allowed but 15009 // ignored. 15010 // 15011 // If `validate_indices` is `True`, this op validates the order and range of `set1` 15012 // and `set2` indices. 15013 // 15014 // Output `result` is a `SparseTensor` represented by `result_indices`, 15015 // `result_values`, and `result_shape`. For `set1` and `set2` ranked `n`, this 15016 // has rank `n` and the same 1st `n-1` dimensions as `set1` and `set2`. The `nth` 15017 // dimension contains the result of `set_operation` applied to the corresponding 15018 // `[0...n-1]` dimension of `set`. 15019 // 15020 // Arguments: 15021 // set1_indices: 2D `Tensor`, indices of a `SparseTensor`. Must be in row-major 15022 // order. 15023 // set1_values: 1D `Tensor`, values of a `SparseTensor`. Must be in row-major 15024 // order. 15025 // set1_shape: 1D `Tensor`, shape of a `SparseTensor`. `set1_shape[0...n-1]` must 15026 // be the same as `set2_shape[0...n-1]`, `set1_shape[n]` is the 15027 // max set size across `0...n-1` dimensions. 15028 // set2_indices: 2D `Tensor`, indices of a `SparseTensor`. Must be in row-major 15029 // order. 15030 // set2_values: 1D `Tensor`, values of a `SparseTensor`. Must be in row-major 15031 // order. 15032 // set2_shape: 1D `Tensor`, shape of a `SparseTensor`. `set2_shape[0...n-1]` must 15033 // be the same as `set1_shape[0...n-1]`, `set2_shape[n]` is the 15034 // max set size across `0...n-1` dimensions. 15035 // 15036 // 15037 // Returns 2D indices of a `SparseTensor`.1D values of a `SparseTensor`.1D `Tensor` shape of a `SparseTensor`. `result_shape[0...n-1]` is 15038 // the same as the 1st `n-1` dimensions of `set1` and `set2`, `result_shape[n]` 15039 // is the max result set size across all `0...n-1` dimensions. 15040 func SparseToSparseSetOperation(scope *Scope, set1_indices tf.Output, set1_values tf.Output, set1_shape tf.Output, set2_indices tf.Output, set2_values tf.Output, set2_shape tf.Output, set_operation string, optional ...SparseToSparseSetOperationAttr) (result_indices tf.Output, result_values tf.Output, result_shape tf.Output) { 15041 if scope.Err() != nil { 15042 return 15043 } 15044 attrs := map[string]interface{}{"set_operation": set_operation} 15045 for _, a := range optional { 15046 a(attrs) 15047 } 15048 opspec := tf.OpSpec{ 15049 Type: "SparseToSparseSetOperation", 15050 Input: []tf.Input{ 15051 set1_indices, set1_values, set1_shape, set2_indices, set2_values, set2_shape, 15052 }, 15053 Attrs: attrs, 15054 } 15055 op := scope.AddOperation(opspec) 15056 return op.Output(0), op.Output(1), op.Output(2) 15057 } 15058 15059 // Computes softmax cross entropy cost and gradients to backpropagate. 15060 // 15061 // Unlike `SoftmaxCrossEntropyWithLogits`, this operation does not accept 15062 // a matrix of label probabilities, but rather a single label per row 15063 // of features. This label is considered to have probability 1.0 for the 15064 // given row. 15065 // 15066 // Inputs are the logits, not probabilities. 15067 // 15068 // Arguments: 15069 // features: batch_size x num_classes matrix 15070 // labels: batch_size vector with values in [0, num_classes). 15071 // This is the label for the given minibatch entry. 15072 // 15073 // Returns Per example loss (batch_size vector).backpropagated gradients (batch_size x num_classes matrix). 15074 func SparseSoftmaxCrossEntropyWithLogits(scope *Scope, features tf.Output, labels tf.Output) (loss tf.Output, backprop tf.Output) { 15075 if scope.Err() != nil { 15076 return 15077 } 15078 opspec := tf.OpSpec{ 15079 Type: "SparseSoftmaxCrossEntropyWithLogits", 15080 Input: []tf.Input{ 15081 features, labels, 15082 }, 15083 } 15084 op := scope.AddOperation(opspec) 15085 return op.Output(0), op.Output(1) 15086 } 15087 15088 // StridedSliceGradAttr is an optional argument to StridedSliceGrad. 15089 type StridedSliceGradAttr func(optionalAttr) 15090 15091 // StridedSliceGradBeginMask sets the optional begin_mask attribute to value. 15092 // If not specified, defaults to 0 15093 func StridedSliceGradBeginMask(value int64) StridedSliceGradAttr { 15094 return func(m optionalAttr) { 15095 m["begin_mask"] = value 15096 } 15097 } 15098 15099 // StridedSliceGradEndMask sets the optional end_mask attribute to value. 15100 // If not specified, defaults to 0 15101 func StridedSliceGradEndMask(value int64) StridedSliceGradAttr { 15102 return func(m optionalAttr) { 15103 m["end_mask"] = value 15104 } 15105 } 15106 15107 // StridedSliceGradEllipsisMask sets the optional ellipsis_mask attribute to value. 15108 // If not specified, defaults to 0 15109 func StridedSliceGradEllipsisMask(value int64) StridedSliceGradAttr { 15110 return func(m optionalAttr) { 15111 m["ellipsis_mask"] = value 15112 } 15113 } 15114 15115 // StridedSliceGradNewAxisMask sets the optional new_axis_mask attribute to value. 15116 // If not specified, defaults to 0 15117 func StridedSliceGradNewAxisMask(value int64) StridedSliceGradAttr { 15118 return func(m optionalAttr) { 15119 m["new_axis_mask"] = value 15120 } 15121 } 15122 15123 // StridedSliceGradShrinkAxisMask sets the optional shrink_axis_mask attribute to value. 15124 // If not specified, defaults to 0 15125 func StridedSliceGradShrinkAxisMask(value int64) StridedSliceGradAttr { 15126 return func(m optionalAttr) { 15127 m["shrink_axis_mask"] = value 15128 } 15129 } 15130 15131 // Returns the gradient of `StridedSlice`. 15132 // 15133 // Since `StridedSlice` cuts out pieces of its `input` which is size 15134 // `shape`, its gradient will have the same shape (which is passed here 15135 // as `shape`). The gradient will be zero in any element that the slice 15136 // does not select. 15137 // 15138 // Arguments are the same as StridedSliceGrad with the exception that 15139 // `dy` is the input gradient to be propagated and `shape` is the 15140 // shape of `StridedSlice`'s `input`. 15141 func StridedSliceGrad(scope *Scope, shape tf.Output, begin tf.Output, end tf.Output, strides tf.Output, dy tf.Output, optional ...StridedSliceGradAttr) (output tf.Output) { 15142 if scope.Err() != nil { 15143 return 15144 } 15145 attrs := map[string]interface{}{} 15146 for _, a := range optional { 15147 a(attrs) 15148 } 15149 opspec := tf.OpSpec{ 15150 Type: "StridedSliceGrad", 15151 Input: []tf.Input{ 15152 shape, begin, end, strides, dy, 15153 }, 15154 Attrs: attrs, 15155 } 15156 op := scope.AddOperation(opspec) 15157 return op.Output(0) 15158 } 15159 15160 // LoadTPUEmbeddingRMSPropParametersAttr is an optional argument to LoadTPUEmbeddingRMSPropParameters. 15161 type LoadTPUEmbeddingRMSPropParametersAttr func(optionalAttr) 15162 15163 // LoadTPUEmbeddingRMSPropParametersTableId sets the optional table_id attribute to value. 15164 // If not specified, defaults to -1 15165 // 15166 // REQUIRES: value >= -1 15167 func LoadTPUEmbeddingRMSPropParametersTableId(value int64) LoadTPUEmbeddingRMSPropParametersAttr { 15168 return func(m optionalAttr) { 15169 m["table_id"] = value 15170 } 15171 } 15172 15173 // LoadTPUEmbeddingRMSPropParametersTableName sets the optional table_name attribute to value. 15174 // If not specified, defaults to "" 15175 func LoadTPUEmbeddingRMSPropParametersTableName(value string) LoadTPUEmbeddingRMSPropParametersAttr { 15176 return func(m optionalAttr) { 15177 m["table_name"] = value 15178 } 15179 } 15180 15181 // Load RMSProp embedding parameters. 15182 // 15183 // An op that loads optimization parameters into HBM for embedding. Must be 15184 // preceded by a ConfigureTPUEmbeddingHost op that sets up the correct 15185 // embedding table configuration. For example, this op is used to install 15186 // parameters that are loaded from a checkpoint before a training loop is 15187 // executed. 15188 // 15189 // Arguments: 15190 // parameters: Value of parameters used in the RMSProp optimization algorithm. 15191 // ms: Value of ms used in the RMSProp optimization algorithm. 15192 // mom: Value of mom used in the RMSProp optimization algorithm. 15193 // 15194 // 15195 // 15196 // Returns the created operation. 15197 func LoadTPUEmbeddingRMSPropParameters(scope *Scope, parameters tf.Output, ms tf.Output, mom tf.Output, num_shards int64, shard_id int64, optional ...LoadTPUEmbeddingRMSPropParametersAttr) (o *tf.Operation) { 15198 if scope.Err() != nil { 15199 return 15200 } 15201 attrs := map[string]interface{}{"num_shards": num_shards, "shard_id": shard_id} 15202 for _, a := range optional { 15203 a(attrs) 15204 } 15205 opspec := tf.OpSpec{ 15206 Type: "LoadTPUEmbeddingRMSPropParameters", 15207 Input: []tf.Input{ 15208 parameters, ms, mom, 15209 }, 15210 Attrs: attrs, 15211 } 15212 return scope.AddOperation(opspec) 15213 } 15214 15215 // Computes the gradient for the inverse of `x` wrt its input. 15216 // 15217 // Specifically, `grad = -dy * y*y`, where `y = 1/x`, and `dy` 15218 // is the corresponding input gradient. 15219 func ReciprocalGrad(scope *Scope, y tf.Output, dy tf.Output) (z tf.Output) { 15220 if scope.Err() != nil { 15221 return 15222 } 15223 opspec := tf.OpSpec{ 15224 Type: "ReciprocalGrad", 15225 Input: []tf.Input{ 15226 y, dy, 15227 }, 15228 } 15229 op := scope.AddOperation(opspec) 15230 return op.Output(0) 15231 } 15232 15233 // EuclideanNormAttr is an optional argument to EuclideanNorm. 15234 type EuclideanNormAttr func(optionalAttr) 15235 15236 // EuclideanNormKeepDims sets the optional keep_dims attribute to value. 15237 // 15238 // value: If true, retain reduced dimensions with length 1. 15239 // If not specified, defaults to false 15240 func EuclideanNormKeepDims(value bool) EuclideanNormAttr { 15241 return func(m optionalAttr) { 15242 m["keep_dims"] = value 15243 } 15244 } 15245 15246 // Computes the euclidean norm of elements across dimensions of a tensor. 15247 // 15248 // Reduces `input` along the dimensions given in `axis`. Unless 15249 // `keep_dims` is true, the rank of the tensor is reduced by 1 for each entry in 15250 // `axis`. If `keep_dims` is true, the reduced dimensions are 15251 // retained with length 1. 15252 // 15253 // Arguments: 15254 // input: The tensor to reduce. 15255 // axis: The dimensions to reduce. Must be in the range 15256 // `[-rank(input), rank(input))`. 15257 // 15258 // Returns The reduced tensor. 15259 func EuclideanNorm(scope *Scope, input tf.Output, axis tf.Output, optional ...EuclideanNormAttr) (output tf.Output) { 15260 if scope.Err() != nil { 15261 return 15262 } 15263 attrs := map[string]interface{}{} 15264 for _, a := range optional { 15265 a(attrs) 15266 } 15267 opspec := tf.OpSpec{ 15268 Type: "EuclideanNorm", 15269 Input: []tf.Input{ 15270 input, axis, 15271 }, 15272 Attrs: attrs, 15273 } 15274 op := scope.AddOperation(opspec) 15275 return op.Output(0) 15276 } 15277 15278 // Returns the element-wise min of two SparseTensors. 15279 // 15280 // Assumes the two SparseTensors have the same shape, i.e., no broadcasting. 15281 // 15282 // Arguments: 15283 // a_indices: 2-D. `N x R` matrix with the indices of non-empty values in a 15284 // SparseTensor, in the canonical lexicographic ordering. 15285 // a_values: 1-D. `N` non-empty values corresponding to `a_indices`. 15286 // a_shape: 1-D. Shape of the input SparseTensor. 15287 // b_indices: counterpart to `a_indices` for the other operand. 15288 // b_values: counterpart to `a_values` for the other operand; must be of the same dtype. 15289 // b_shape: counterpart to `a_shape` for the other operand; the two shapes must be equal. 15290 // 15291 // Returns 2-D. The indices of the output SparseTensor.1-D. The values of the output SparseTensor. 15292 func SparseSparseMinimum(scope *Scope, a_indices tf.Output, a_values tf.Output, a_shape tf.Output, b_indices tf.Output, b_values tf.Output, b_shape tf.Output) (output_indices tf.Output, output_values tf.Output) { 15293 if scope.Err() != nil { 15294 return 15295 } 15296 opspec := tf.OpSpec{ 15297 Type: "SparseSparseMinimum", 15298 Input: []tf.Input{ 15299 a_indices, a_values, a_shape, b_indices, b_values, b_shape, 15300 }, 15301 } 15302 op := scope.AddOperation(opspec) 15303 return op.Output(0), op.Output(1) 15304 } 15305 15306 // ResourceSparseApplyAdagradDAAttr is an optional argument to ResourceSparseApplyAdagradDA. 15307 type ResourceSparseApplyAdagradDAAttr func(optionalAttr) 15308 15309 // ResourceSparseApplyAdagradDAUseLocking sets the optional use_locking attribute to value. 15310 // 15311 // value: If True, updating of the var and accum tensors will be protected by 15312 // a lock; otherwise the behavior is undefined, but may exhibit less contention. 15313 // If not specified, defaults to false 15314 func ResourceSparseApplyAdagradDAUseLocking(value bool) ResourceSparseApplyAdagradDAAttr { 15315 return func(m optionalAttr) { 15316 m["use_locking"] = value 15317 } 15318 } 15319 15320 // Update entries in '*var' and '*accum' according to the proximal adagrad scheme. 15321 // 15322 // Arguments: 15323 // var_: Should be from a Variable(). 15324 // gradient_accumulator: Should be from a Variable(). 15325 // gradient_squared_accumulator: Should be from a Variable(). 15326 // grad: The gradient. 15327 // indices: A vector of indices into the first dimension of var and accum. 15328 // lr: Learning rate. Must be a scalar. 15329 // l1: L1 regularization. Must be a scalar. 15330 // l2: L2 regularization. Must be a scalar. 15331 // global_step: Training step number. Must be a scalar. 15332 // 15333 // Returns the created operation. 15334 func ResourceSparseApplyAdagradDA(scope *Scope, var_ tf.Output, gradient_accumulator tf.Output, gradient_squared_accumulator tf.Output, grad tf.Output, indices tf.Output, lr tf.Output, l1 tf.Output, l2 tf.Output, global_step tf.Output, optional ...ResourceSparseApplyAdagradDAAttr) (o *tf.Operation) { 15335 if scope.Err() != nil { 15336 return 15337 } 15338 attrs := map[string]interface{}{} 15339 for _, a := range optional { 15340 a(attrs) 15341 } 15342 opspec := tf.OpSpec{ 15343 Type: "ResourceSparseApplyAdagradDA", 15344 Input: []tf.Input{ 15345 var_, gradient_accumulator, gradient_squared_accumulator, grad, indices, lr, l1, l2, global_step, 15346 }, 15347 Attrs: attrs, 15348 } 15349 return scope.AddOperation(opspec) 15350 } 15351 15352 // EncodeJpegAttr is an optional argument to EncodeJpeg. 15353 type EncodeJpegAttr func(optionalAttr) 15354 15355 // EncodeJpegFormat sets the optional format attribute to value. 15356 // 15357 // value: Per pixel image format. 15358 // If not specified, defaults to "" 15359 func EncodeJpegFormat(value string) EncodeJpegAttr { 15360 return func(m optionalAttr) { 15361 m["format"] = value 15362 } 15363 } 15364 15365 // EncodeJpegQuality sets the optional quality attribute to value. 15366 // 15367 // value: Quality of the compression from 0 to 100 (higher is better and slower). 15368 // If not specified, defaults to 95 15369 func EncodeJpegQuality(value int64) EncodeJpegAttr { 15370 return func(m optionalAttr) { 15371 m["quality"] = value 15372 } 15373 } 15374 15375 // EncodeJpegProgressive sets the optional progressive attribute to value. 15376 // 15377 // value: If True, create a JPEG that loads progressively (coarse to fine). 15378 // If not specified, defaults to false 15379 func EncodeJpegProgressive(value bool) EncodeJpegAttr { 15380 return func(m optionalAttr) { 15381 m["progressive"] = value 15382 } 15383 } 15384 15385 // EncodeJpegOptimizeSize sets the optional optimize_size attribute to value. 15386 // 15387 // value: If True, spend CPU/RAM to reduce size with no quality change. 15388 // If not specified, defaults to false 15389 func EncodeJpegOptimizeSize(value bool) EncodeJpegAttr { 15390 return func(m optionalAttr) { 15391 m["optimize_size"] = value 15392 } 15393 } 15394 15395 // EncodeJpegChromaDownsampling sets the optional chroma_downsampling attribute to value. 15396 // 15397 // value: See http://en.wikipedia.org/wiki/Chroma_subsampling. 15398 // If not specified, defaults to true 15399 func EncodeJpegChromaDownsampling(value bool) EncodeJpegAttr { 15400 return func(m optionalAttr) { 15401 m["chroma_downsampling"] = value 15402 } 15403 } 15404 15405 // EncodeJpegDensityUnit sets the optional density_unit attribute to value. 15406 // 15407 // value: Unit used to specify `x_density` and `y_density`: 15408 // pixels per inch (`'in'`) or centimeter (`'cm'`). 15409 // If not specified, defaults to "in" 15410 func EncodeJpegDensityUnit(value string) EncodeJpegAttr { 15411 return func(m optionalAttr) { 15412 m["density_unit"] = value 15413 } 15414 } 15415 15416 // EncodeJpegXDensity sets the optional x_density attribute to value. 15417 // 15418 // value: Horizontal pixels per density unit. 15419 // If not specified, defaults to 300 15420 func EncodeJpegXDensity(value int64) EncodeJpegAttr { 15421 return func(m optionalAttr) { 15422 m["x_density"] = value 15423 } 15424 } 15425 15426 // EncodeJpegYDensity sets the optional y_density attribute to value. 15427 // 15428 // value: Vertical pixels per density unit. 15429 // If not specified, defaults to 300 15430 func EncodeJpegYDensity(value int64) EncodeJpegAttr { 15431 return func(m optionalAttr) { 15432 m["y_density"] = value 15433 } 15434 } 15435 15436 // EncodeJpegXmpMetadata sets the optional xmp_metadata attribute to value. 15437 // 15438 // value: If not empty, embed this XMP metadata in the image header. 15439 // If not specified, defaults to "" 15440 func EncodeJpegXmpMetadata(value string) EncodeJpegAttr { 15441 return func(m optionalAttr) { 15442 m["xmp_metadata"] = value 15443 } 15444 } 15445 15446 // JPEG-encode an image. 15447 // 15448 // `image` is a 3-D uint8 Tensor of shape `[height, width, channels]`. 15449 // 15450 // The attr `format` can be used to override the color format of the encoded 15451 // output. Values can be: 15452 // 15453 // * `''`: Use a default format based on the number of channels in the image. 15454 // * `grayscale`: Output a grayscale JPEG image. The `channels` dimension 15455 // of `image` must be 1. 15456 // * `rgb`: Output an RGB JPEG image. The `channels` dimension 15457 // of `image` must be 3. 15458 // 15459 // If `format` is not specified or is the empty string, a default format is picked 15460 // in function of the number of channels in `image`: 15461 // 15462 // * 1: Output a grayscale image. 15463 // * 3: Output an RGB image. 15464 // 15465 // Arguments: 15466 // image: 3-D with shape `[height, width, channels]`. 15467 // 15468 // Returns 0-D. JPEG-encoded image. 15469 func EncodeJpeg(scope *Scope, image tf.Output, optional ...EncodeJpegAttr) (contents tf.Output) { 15470 if scope.Err() != nil { 15471 return 15472 } 15473 attrs := map[string]interface{}{} 15474 for _, a := range optional { 15475 a(attrs) 15476 } 15477 opspec := tf.OpSpec{ 15478 Type: "EncodeJpeg", 15479 Input: []tf.Input{ 15480 image, 15481 }, 15482 Attrs: attrs, 15483 } 15484 op := scope.AddOperation(opspec) 15485 return op.Output(0) 15486 } 15487 15488 // MultinomialAttr is an optional argument to Multinomial. 15489 type MultinomialAttr func(optionalAttr) 15490 15491 // MultinomialSeed sets the optional seed attribute to value. 15492 // 15493 // value: If either seed or seed2 is set to be non-zero, the internal random number 15494 // generator is seeded by the given seed. Otherwise, a random seed is used. 15495 // If not specified, defaults to 0 15496 func MultinomialSeed(value int64) MultinomialAttr { 15497 return func(m optionalAttr) { 15498 m["seed"] = value 15499 } 15500 } 15501 15502 // MultinomialSeed2 sets the optional seed2 attribute to value. 15503 // 15504 // value: A second seed to avoid seed collision. 15505 // If not specified, defaults to 0 15506 func MultinomialSeed2(value int64) MultinomialAttr { 15507 return func(m optionalAttr) { 15508 m["seed2"] = value 15509 } 15510 } 15511 15512 // MultinomialOutputDtype sets the optional output_dtype attribute to value. 15513 // If not specified, defaults to DT_INT64 15514 func MultinomialOutputDtype(value tf.DataType) MultinomialAttr { 15515 return func(m optionalAttr) { 15516 m["output_dtype"] = value 15517 } 15518 } 15519 15520 // Draws samples from a multinomial distribution. 15521 // 15522 // Arguments: 15523 // logits: 2-D Tensor with shape `[batch_size, num_classes]`. Each slice `[i, :]` 15524 // represents the unnormalized log probabilities for all classes. 15525 // num_samples: 0-D. Number of independent samples to draw for each row slice. 15526 // 15527 // Returns 2-D Tensor with shape `[batch_size, num_samples]`. Each slice `[i, :]` 15528 // contains the drawn class labels with range `[0, num_classes)`. 15529 func Multinomial(scope *Scope, logits tf.Output, num_samples tf.Output, optional ...MultinomialAttr) (output tf.Output) { 15530 if scope.Err() != nil { 15531 return 15532 } 15533 attrs := map[string]interface{}{} 15534 for _, a := range optional { 15535 a(attrs) 15536 } 15537 opspec := tf.OpSpec{ 15538 Type: "Multinomial", 15539 Input: []tf.Input{ 15540 logits, num_samples, 15541 }, 15542 Attrs: attrs, 15543 } 15544 op := scope.AddOperation(opspec) 15545 return op.Output(0) 15546 } 15547 15548 // RetrieveTPUEmbeddingRMSPropParametersAttr is an optional argument to RetrieveTPUEmbeddingRMSPropParameters. 15549 type RetrieveTPUEmbeddingRMSPropParametersAttr func(optionalAttr) 15550 15551 // RetrieveTPUEmbeddingRMSPropParametersTableId sets the optional table_id attribute to value. 15552 // If not specified, defaults to -1 15553 // 15554 // REQUIRES: value >= -1 15555 func RetrieveTPUEmbeddingRMSPropParametersTableId(value int64) RetrieveTPUEmbeddingRMSPropParametersAttr { 15556 return func(m optionalAttr) { 15557 m["table_id"] = value 15558 } 15559 } 15560 15561 // RetrieveTPUEmbeddingRMSPropParametersTableName sets the optional table_name attribute to value. 15562 // If not specified, defaults to "" 15563 func RetrieveTPUEmbeddingRMSPropParametersTableName(value string) RetrieveTPUEmbeddingRMSPropParametersAttr { 15564 return func(m optionalAttr) { 15565 m["table_name"] = value 15566 } 15567 } 15568 15569 // Retrieve RMSProp embedding parameters. 15570 // 15571 // An op that retrieves optimization parameters from embedding to host 15572 // memory. Must be preceded by a ConfigureTPUEmbeddingHost op that sets up 15573 // the correct embedding table configuration. For example, this op is 15574 // used to retrieve updated parameters before saving a checkpoint. 15575 // 15576 // Returns Parameter parameters updated by the RMSProp optimization algorithm.Parameter ms updated by the RMSProp optimization algorithm.Parameter mom updated by the RMSProp optimization algorithm. 15577 func RetrieveTPUEmbeddingRMSPropParameters(scope *Scope, num_shards int64, shard_id int64, optional ...RetrieveTPUEmbeddingRMSPropParametersAttr) (parameters tf.Output, ms tf.Output, mom tf.Output) { 15578 if scope.Err() != nil { 15579 return 15580 } 15581 attrs := map[string]interface{}{"num_shards": num_shards, "shard_id": shard_id} 15582 for _, a := range optional { 15583 a(attrs) 15584 } 15585 opspec := tf.OpSpec{ 15586 Type: "RetrieveTPUEmbeddingRMSPropParameters", 15587 15588 Attrs: attrs, 15589 } 15590 op := scope.AddOperation(opspec) 15591 return op.Output(0), op.Output(1), op.Output(2) 15592 } 15593 15594 // QuantizedRelu6Attr is an optional argument to QuantizedRelu6. 15595 type QuantizedRelu6Attr func(optionalAttr) 15596 15597 // QuantizedRelu6OutType sets the optional out_type attribute to value. 15598 // If not specified, defaults to DT_QUINT8 15599 func QuantizedRelu6OutType(value tf.DataType) QuantizedRelu6Attr { 15600 return func(m optionalAttr) { 15601 m["out_type"] = value 15602 } 15603 } 15604 15605 // Computes Quantized Rectified Linear 6: `min(max(features, 0), 6)` 15606 // 15607 // Arguments: 15608 // 15609 // min_features: The float value that the lowest quantized value represents. 15610 // max_features: The float value that the highest quantized value represents. 15611 // 15612 // Returns Has the same output shape as "features".The float value that the lowest quantized value represents.The float value that the highest quantized value represents. 15613 func QuantizedRelu6(scope *Scope, features tf.Output, min_features tf.Output, max_features tf.Output, optional ...QuantizedRelu6Attr) (activations tf.Output, min_activations tf.Output, max_activations tf.Output) { 15614 if scope.Err() != nil { 15615 return 15616 } 15617 attrs := map[string]interface{}{} 15618 for _, a := range optional { 15619 a(attrs) 15620 } 15621 opspec := tf.OpSpec{ 15622 Type: "QuantizedRelu6", 15623 Input: []tf.Input{ 15624 features, min_features, max_features, 15625 }, 15626 Attrs: attrs, 15627 } 15628 op := scope.AddOperation(opspec) 15629 return op.Output(0), op.Output(1), op.Output(2) 15630 } 15631 15632 // BatchMatMulAttr is an optional argument to BatchMatMul. 15633 type BatchMatMulAttr func(optionalAttr) 15634 15635 // BatchMatMulAdjX sets the optional adj_x attribute to value. 15636 // 15637 // value: If `True`, adjoint the slices of `x`. Defaults to `False`. 15638 // If not specified, defaults to false 15639 func BatchMatMulAdjX(value bool) BatchMatMulAttr { 15640 return func(m optionalAttr) { 15641 m["adj_x"] = value 15642 } 15643 } 15644 15645 // BatchMatMulAdjY sets the optional adj_y attribute to value. 15646 // 15647 // value: If `True`, adjoint the slices of `y`. Defaults to `False`. 15648 // If not specified, defaults to false 15649 func BatchMatMulAdjY(value bool) BatchMatMulAttr { 15650 return func(m optionalAttr) { 15651 m["adj_y"] = value 15652 } 15653 } 15654 15655 // Multiplies slices of two tensors in batches. 15656 // 15657 // Multiplies all slices of `Tensor` `x` and `y` (each slice can be 15658 // viewed as an element of a batch), and arranges the individual results 15659 // in a single output tensor of the same batch size. Each of the 15660 // individual slices can optionally be adjointed (to adjoint a matrix 15661 // means to transpose and conjugate it) before multiplication by setting 15662 // the `adj_x` or `adj_y` flag to `True`, which are by default `False`. 15663 // 15664 // The input tensors `x` and `y` are 2-D or higher with shape `[..., r_x, c_x]` 15665 // and `[..., r_y, c_y]`. 15666 // 15667 // The output tensor is 2-D or higher with shape `[..., r_o, c_o]`, where: 15668 // 15669 // r_o = c_x if adj_x else r_x 15670 // c_o = r_y if adj_y else c_y 15671 // 15672 // It is computed as: 15673 // 15674 // output[..., :, :] = matrix(x[..., :, :]) * matrix(y[..., :, :]) 15675 // 15676 // Arguments: 15677 // x: 2-D or higher with shape `[..., r_x, c_x]`. 15678 // y: 2-D or higher with shape `[..., r_y, c_y]`. 15679 // 15680 // Returns 3-D or higher with shape `[..., r_o, c_o]` 15681 func BatchMatMul(scope *Scope, x tf.Output, y tf.Output, optional ...BatchMatMulAttr) (output tf.Output) { 15682 if scope.Err() != nil { 15683 return 15684 } 15685 attrs := map[string]interface{}{} 15686 for _, a := range optional { 15687 a(attrs) 15688 } 15689 opspec := tf.OpSpec{ 15690 Type: "BatchMatMul", 15691 Input: []tf.Input{ 15692 x, y, 15693 }, 15694 Attrs: attrs, 15695 } 15696 op := scope.AddOperation(opspec) 15697 return op.Output(0) 15698 } 15699 15700 // ParseSequenceExampleAttr is an optional argument to ParseSequenceExample. 15701 type ParseSequenceExampleAttr func(optionalAttr) 15702 15703 // ParseSequenceExampleNcontextSparse sets the optional Ncontext_sparse attribute to value. 15704 // If not specified, defaults to 0 15705 // 15706 // REQUIRES: value >= 0 15707 func ParseSequenceExampleNcontextSparse(value int64) ParseSequenceExampleAttr { 15708 return func(m optionalAttr) { 15709 m["Ncontext_sparse"] = value 15710 } 15711 } 15712 15713 // ParseSequenceExampleNcontextDense sets the optional Ncontext_dense attribute to value. 15714 // If not specified, defaults to 0 15715 // 15716 // REQUIRES: value >= 0 15717 func ParseSequenceExampleNcontextDense(value int64) ParseSequenceExampleAttr { 15718 return func(m optionalAttr) { 15719 m["Ncontext_dense"] = value 15720 } 15721 } 15722 15723 // ParseSequenceExampleNfeatureListSparse sets the optional Nfeature_list_sparse attribute to value. 15724 // If not specified, defaults to 0 15725 // 15726 // REQUIRES: value >= 0 15727 func ParseSequenceExampleNfeatureListSparse(value int64) ParseSequenceExampleAttr { 15728 return func(m optionalAttr) { 15729 m["Nfeature_list_sparse"] = value 15730 } 15731 } 15732 15733 // ParseSequenceExampleNfeatureListDense sets the optional Nfeature_list_dense attribute to value. 15734 // If not specified, defaults to 0 15735 // 15736 // REQUIRES: value >= 0 15737 func ParseSequenceExampleNfeatureListDense(value int64) ParseSequenceExampleAttr { 15738 return func(m optionalAttr) { 15739 m["Nfeature_list_dense"] = value 15740 } 15741 } 15742 15743 // ParseSequenceExampleContextSparseTypes sets the optional context_sparse_types attribute to value. 15744 // 15745 // value: A list of Ncontext_sparse types; the data types of data in 15746 // each context Feature given in context_sparse_keys. 15747 // Currently the ParseSingleSequenceExample supports DT_FLOAT (FloatList), 15748 // DT_INT64 (Int64List), and DT_STRING (BytesList). 15749 // If not specified, defaults to <> 15750 // 15751 // REQUIRES: len(value) >= 0 15752 func ParseSequenceExampleContextSparseTypes(value []tf.DataType) ParseSequenceExampleAttr { 15753 return func(m optionalAttr) { 15754 m["context_sparse_types"] = value 15755 } 15756 } 15757 15758 // ParseSequenceExampleFeatureListDenseTypes sets the optional feature_list_dense_types attribute to value. 15759 // If not specified, defaults to <> 15760 // 15761 // REQUIRES: len(value) >= 0 15762 func ParseSequenceExampleFeatureListDenseTypes(value []tf.DataType) ParseSequenceExampleAttr { 15763 return func(m optionalAttr) { 15764 m["feature_list_dense_types"] = value 15765 } 15766 } 15767 15768 // ParseSequenceExampleContextDenseShapes sets the optional context_dense_shapes attribute to value. 15769 // 15770 // value: A list of Ncontext_dense shapes; the shapes of data in 15771 // each context Feature given in context_dense_keys. 15772 // The number of elements in the Feature corresponding to context_dense_key[j] 15773 // must always equal context_dense_shapes[j].NumEntries(). 15774 // The shape of context_dense_values[j] will match context_dense_shapes[j]. 15775 // If not specified, defaults to <> 15776 // 15777 // REQUIRES: len(value) >= 0 15778 func ParseSequenceExampleContextDenseShapes(value []tf.Shape) ParseSequenceExampleAttr { 15779 return func(m optionalAttr) { 15780 m["context_dense_shapes"] = value 15781 } 15782 } 15783 15784 // ParseSequenceExampleFeatureListSparseTypes sets the optional feature_list_sparse_types attribute to value. 15785 // 15786 // value: A list of Nfeature_list_sparse types; the data types 15787 // of data in each FeatureList given in feature_list_sparse_keys. 15788 // Currently the ParseSingleSequenceExample supports DT_FLOAT (FloatList), 15789 // DT_INT64 (Int64List), and DT_STRING (BytesList). 15790 // If not specified, defaults to <> 15791 // 15792 // REQUIRES: len(value) >= 0 15793 func ParseSequenceExampleFeatureListSparseTypes(value []tf.DataType) ParseSequenceExampleAttr { 15794 return func(m optionalAttr) { 15795 m["feature_list_sparse_types"] = value 15796 } 15797 } 15798 15799 // ParseSequenceExampleFeatureListDenseShapes sets the optional feature_list_dense_shapes attribute to value. 15800 // 15801 // value: A list of Nfeature_list_dense shapes; the shapes of 15802 // data in each FeatureList given in feature_list_dense_keys. 15803 // The shape of each Feature in the FeatureList corresponding to 15804 // feature_list_dense_key[j] must always equal 15805 // feature_list_dense_shapes[j].NumEntries(). 15806 // If not specified, defaults to <> 15807 // 15808 // REQUIRES: len(value) >= 0 15809 func ParseSequenceExampleFeatureListDenseShapes(value []tf.Shape) ParseSequenceExampleAttr { 15810 return func(m optionalAttr) { 15811 m["feature_list_dense_shapes"] = value 15812 } 15813 } 15814 15815 // Transforms a vector of brain.SequenceExample protos (as strings) into typed tensors. 15816 // 15817 // Arguments: 15818 // serialized: A vector containing binary serialized SequenceExample protos. 15819 // debug_name: A vector containing the names of the serialized protos. 15820 // May contain, for example, table key (descriptive) name for the 15821 // corresponding serialized proto. This is purely useful for debugging 15822 // purposes, and the presence of values here has no effect on the output. 15823 // May also be an empty vector if no name is available. 15824 // context_dense_defaults: A list of Ncontext_dense Tensors (some may be empty). 15825 // context_dense_defaults[j] provides default values 15826 // when the SequenceExample's context map lacks context_dense_key[j]. 15827 // If an empty Tensor is provided for context_dense_defaults[j], 15828 // then the Feature context_dense_keys[j] is required. 15829 // The input type is inferred from context_dense_defaults[j], even when it's 15830 // empty. If context_dense_defaults[j] is not empty, its shape must match 15831 // context_dense_shapes[j]. 15832 // feature_list_dense_missing_assumed_empty: A vector listing the 15833 // FeatureList keys which may be missing from the SequenceExamples. If the 15834 // associated FeatureList is missing, it is treated as empty. By default, 15835 // any FeatureList not listed in this vector must exist in the SequenceExamples. 15836 // context_sparse_keys: A list of Ncontext_sparse string Tensors (scalars). 15837 // The keys expected in the Examples' features associated with context_sparse 15838 // values. 15839 // context_dense_keys: A list of Ncontext_dense string Tensors (scalars). 15840 // The keys expected in the SequenceExamples' context features associated with 15841 // dense values. 15842 // feature_list_sparse_keys: A list of Nfeature_list_sparse string Tensors 15843 // (scalars). The keys expected in the FeatureLists associated with sparse 15844 // values. 15845 // feature_list_dense_keys: A list of Nfeature_list_dense string Tensors (scalars). 15846 // The keys expected in the SequenceExamples' feature_lists associated 15847 // with lists of dense values. 15848 func ParseSequenceExample(scope *Scope, serialized tf.Output, debug_name tf.Output, context_dense_defaults []tf.Output, feature_list_dense_missing_assumed_empty []string, context_sparse_keys []string, context_dense_keys []string, feature_list_sparse_keys []string, feature_list_dense_keys []string, optional ...ParseSequenceExampleAttr) (context_sparse_indices []tf.Output, context_sparse_values []tf.Output, context_sparse_shapes []tf.Output, context_dense_values []tf.Output, feature_list_sparse_indices []tf.Output, feature_list_sparse_values []tf.Output, feature_list_sparse_shapes []tf.Output, feature_list_dense_values []tf.Output, feature_list_dense_lengths []tf.Output) { 15849 if scope.Err() != nil { 15850 return 15851 } 15852 attrs := map[string]interface{}{"feature_list_dense_missing_assumed_empty": feature_list_dense_missing_assumed_empty, "context_sparse_keys": context_sparse_keys, "context_dense_keys": context_dense_keys, "feature_list_sparse_keys": feature_list_sparse_keys, "feature_list_dense_keys": feature_list_dense_keys} 15853 for _, a := range optional { 15854 a(attrs) 15855 } 15856 opspec := tf.OpSpec{ 15857 Type: "ParseSequenceExample", 15858 Input: []tf.Input{ 15859 serialized, debug_name, tf.OutputList(context_dense_defaults), 15860 }, 15861 Attrs: attrs, 15862 } 15863 op := scope.AddOperation(opspec) 15864 if scope.Err() != nil { 15865 return 15866 } 15867 var idx int 15868 var err error 15869 if context_sparse_indices, idx, err = makeOutputList(op, idx, "context_sparse_indices"); err != nil { 15870 scope.UpdateErr("ParseSequenceExample", err) 15871 return 15872 } 15873 if context_sparse_values, idx, err = makeOutputList(op, idx, "context_sparse_values"); err != nil { 15874 scope.UpdateErr("ParseSequenceExample", err) 15875 return 15876 } 15877 if context_sparse_shapes, idx, err = makeOutputList(op, idx, "context_sparse_shapes"); err != nil { 15878 scope.UpdateErr("ParseSequenceExample", err) 15879 return 15880 } 15881 if context_dense_values, idx, err = makeOutputList(op, idx, "context_dense_values"); err != nil { 15882 scope.UpdateErr("ParseSequenceExample", err) 15883 return 15884 } 15885 if feature_list_sparse_indices, idx, err = makeOutputList(op, idx, "feature_list_sparse_indices"); err != nil { 15886 scope.UpdateErr("ParseSequenceExample", err) 15887 return 15888 } 15889 if feature_list_sparse_values, idx, err = makeOutputList(op, idx, "feature_list_sparse_values"); err != nil { 15890 scope.UpdateErr("ParseSequenceExample", err) 15891 return 15892 } 15893 if feature_list_sparse_shapes, idx, err = makeOutputList(op, idx, "feature_list_sparse_shapes"); err != nil { 15894 scope.UpdateErr("ParseSequenceExample", err) 15895 return 15896 } 15897 if feature_list_dense_values, idx, err = makeOutputList(op, idx, "feature_list_dense_values"); err != nil { 15898 scope.UpdateErr("ParseSequenceExample", err) 15899 return 15900 } 15901 if feature_list_dense_lengths, idx, err = makeOutputList(op, idx, "feature_list_dense_lengths"); err != nil { 15902 scope.UpdateErr("ParseSequenceExample", err) 15903 return 15904 } 15905 return context_sparse_indices, context_sparse_values, context_sparse_shapes, context_dense_values, feature_list_sparse_indices, feature_list_sparse_values, feature_list_sparse_shapes, feature_list_dense_values, feature_list_dense_lengths 15906 } 15907 15908 // QuantizedReluAttr is an optional argument to QuantizedRelu. 15909 type QuantizedReluAttr func(optionalAttr) 15910 15911 // QuantizedReluOutType sets the optional out_type attribute to value. 15912 // If not specified, defaults to DT_QUINT8 15913 func QuantizedReluOutType(value tf.DataType) QuantizedReluAttr { 15914 return func(m optionalAttr) { 15915 m["out_type"] = value 15916 } 15917 } 15918 15919 // Computes Quantized Rectified Linear: `max(features, 0)` 15920 // 15921 // Arguments: 15922 // 15923 // min_features: The float value that the lowest quantized value represents. 15924 // max_features: The float value that the highest quantized value represents. 15925 // 15926 // Returns Has the same output shape as "features".The float value that the lowest quantized value represents.The float value that the highest quantized value represents. 15927 func QuantizedRelu(scope *Scope, features tf.Output, min_features tf.Output, max_features tf.Output, optional ...QuantizedReluAttr) (activations tf.Output, min_activations tf.Output, max_activations tf.Output) { 15928 if scope.Err() != nil { 15929 return 15930 } 15931 attrs := map[string]interface{}{} 15932 for _, a := range optional { 15933 a(attrs) 15934 } 15935 opspec := tf.OpSpec{ 15936 Type: "QuantizedRelu", 15937 Input: []tf.Input{ 15938 features, min_features, max_features, 15939 }, 15940 Attrs: attrs, 15941 } 15942 op := scope.AddOperation(opspec) 15943 return op.Output(0), op.Output(1), op.Output(2) 15944 } 15945 15946 // Reorders a SparseTensor into the canonical, row-major ordering. 15947 // 15948 // Note that by convention, all sparse ops preserve the canonical ordering along 15949 // increasing dimension number. The only time ordering can be violated is during 15950 // manual manipulation of the indices and values vectors to add entries. 15951 // 15952 // Reordering does not affect the shape of the SparseTensor. 15953 // 15954 // If the tensor has rank `R` and `N` non-empty values, `input_indices` has 15955 // shape `[N, R]`, input_values has length `N`, and input_shape has length `R`. 15956 // 15957 // Arguments: 15958 // input_indices: 2-D. `N x R` matrix with the indices of non-empty values in a 15959 // SparseTensor, possibly not in canonical ordering. 15960 // input_values: 1-D. `N` non-empty values corresponding to `input_indices`. 15961 // input_shape: 1-D. Shape of the input SparseTensor. 15962 // 15963 // Returns 2-D. `N x R` matrix with the same indices as input_indices, but 15964 // in canonical row-major ordering.1-D. `N` non-empty values corresponding to `output_indices`. 15965 func SparseReorder(scope *Scope, input_indices tf.Output, input_values tf.Output, input_shape tf.Output) (output_indices tf.Output, output_values tf.Output) { 15966 if scope.Err() != nil { 15967 return 15968 } 15969 opspec := tf.OpSpec{ 15970 Type: "SparseReorder", 15971 Input: []tf.Input{ 15972 input_indices, input_values, input_shape, 15973 }, 15974 } 15975 op := scope.AddOperation(opspec) 15976 return op.Output(0), op.Output(1) 15977 } 15978 15979 // PrelinearizeTupleAttr is an optional argument to PrelinearizeTuple. 15980 type PrelinearizeTupleAttr func(optionalAttr) 15981 15982 // PrelinearizeTupleLayouts sets the optional layouts attribute to value. 15983 // 15984 // value: A vector holding the requested layout in minor-to-major sequence for all the 15985 // tuple shapes in the order the shapes appear in the "shapes" input. The layout 15986 // elements for a sub-shape can be set to -1 in which case the corresponding layout 15987 // will be computed by the infeed operation. 15988 // If not specified, defaults to <> 15989 func PrelinearizeTupleLayouts(value []int64) PrelinearizeTupleAttr { 15990 return func(m optionalAttr) { 15991 m["layouts"] = value 15992 } 15993 } 15994 15995 // An op which linearizes multiple Tensor values to an opaque variant tensor. 15996 // 15997 // Arguments: 15998 // inputs: A list of tensors that will be provided using the infeed mechanism. 15999 // shapes: The shapes of each tensor in `inputs`. 16000 func PrelinearizeTuple(scope *Scope, inputs []tf.Output, shapes []tf.Shape, optional ...PrelinearizeTupleAttr) (output tf.Output) { 16001 if scope.Err() != nil { 16002 return 16003 } 16004 attrs := map[string]interface{}{"shapes": shapes} 16005 for _, a := range optional { 16006 a(attrs) 16007 } 16008 opspec := tf.OpSpec{ 16009 Type: "PrelinearizeTuple", 16010 Input: []tf.Input{ 16011 tf.OutputList(inputs), 16012 }, 16013 Attrs: attrs, 16014 } 16015 op := scope.AddOperation(opspec) 16016 return op.Output(0) 16017 } 16018 16019 // ComplexAbsAttr is an optional argument to ComplexAbs. 16020 type ComplexAbsAttr func(optionalAttr) 16021 16022 // ComplexAbsTout sets the optional Tout attribute to value. 16023 // If not specified, defaults to DT_FLOAT 16024 func ComplexAbsTout(value tf.DataType) ComplexAbsAttr { 16025 return func(m optionalAttr) { 16026 m["Tout"] = value 16027 } 16028 } 16029 16030 // Computes the complex absolute value of a tensor. 16031 // 16032 // Given a tensor `x` of complex numbers, this operation returns a tensor of type 16033 // `float` or `double` that is the absolute value of each element in `x`. All 16034 // elements in `x` must be complex numbers of the form \\(a + bj\\). The absolute 16035 // value is computed as \\( \sqrt{a^2 + b^2}\\). 16036 func ComplexAbs(scope *Scope, x tf.Output, optional ...ComplexAbsAttr) (y tf.Output) { 16037 if scope.Err() != nil { 16038 return 16039 } 16040 attrs := map[string]interface{}{} 16041 for _, a := range optional { 16042 a(attrs) 16043 } 16044 opspec := tf.OpSpec{ 16045 Type: "ComplexAbs", 16046 Input: []tf.Input{ 16047 x, 16048 }, 16049 Attrs: attrs, 16050 } 16051 op := scope.AddOperation(opspec) 16052 return op.Output(0) 16053 } 16054 16055 // VariableShapeAttr is an optional argument to VariableShape. 16056 type VariableShapeAttr func(optionalAttr) 16057 16058 // VariableShapeOutType sets the optional out_type attribute to value. 16059 // If not specified, defaults to DT_INT32 16060 func VariableShapeOutType(value tf.DataType) VariableShapeAttr { 16061 return func(m optionalAttr) { 16062 m["out_type"] = value 16063 } 16064 } 16065 16066 // Returns the shape of the variable pointed to by `resource`. 16067 // 16068 // This operation returns a 1-D integer tensor representing the shape of `input`. 16069 // 16070 // For example: 16071 // 16072 // ``` 16073 // # 't' is [[[1, 1, 1], [2, 2, 2]], [[3, 3, 3], [4, 4, 4]]] 16074 // shape(t) ==> [2, 2, 3] 16075 // ``` 16076 func VariableShape(scope *Scope, input tf.Output, optional ...VariableShapeAttr) (output tf.Output) { 16077 if scope.Err() != nil { 16078 return 16079 } 16080 attrs := map[string]interface{}{} 16081 for _, a := range optional { 16082 a(attrs) 16083 } 16084 opspec := tf.OpSpec{ 16085 Type: "VariableShape", 16086 Input: []tf.Input{ 16087 input, 16088 }, 16089 Attrs: attrs, 16090 } 16091 op := scope.AddOperation(opspec) 16092 return op.Output(0) 16093 } 16094 16095 // CompilationResultProto indicating the status of the TPU compilation. 16096 func TPUCompilationResult(scope *Scope) (output tf.Output) { 16097 if scope.Err() != nil { 16098 return 16099 } 16100 opspec := tf.OpSpec{ 16101 Type: "TPUCompilationResult", 16102 } 16103 op := scope.AddOperation(opspec) 16104 return op.Output(0) 16105 } 16106 16107 // Retrieves the tree ensemble resource stamp token, number of trees and growing statistics. 16108 // 16109 // Arguments: 16110 // tree_ensemble_handle: Handle to the tree ensemble. 16111 // 16112 // Returns Stamp token of the tree ensemble resource.The number of trees in the tree ensemble resource.The number of trees that were finished successfully.The number of layers we attempted to build (but not necessarily succeeded).Rank size 2 tensor that contains start and end ids of the nodes in the latest 16113 // layer. 16114 func BoostedTreesGetEnsembleStates(scope *Scope, tree_ensemble_handle tf.Output) (stamp_token tf.Output, num_trees tf.Output, num_finalized_trees tf.Output, num_attempted_layers tf.Output, last_layer_nodes_range tf.Output) { 16115 if scope.Err() != nil { 16116 return 16117 } 16118 opspec := tf.OpSpec{ 16119 Type: "BoostedTreesGetEnsembleStates", 16120 Input: []tf.Input{ 16121 tree_ensemble_handle, 16122 }, 16123 } 16124 op := scope.AddOperation(opspec) 16125 return op.Output(0), op.Output(1), op.Output(2), op.Output(3), op.Output(4) 16126 } 16127 16128 // Store the input tensor in the state of the current session. 16129 // 16130 // Arguments: 16131 // value: The tensor to be stored. 16132 // 16133 // Returns The handle for the tensor stored in the session state, represented 16134 // as a ResourceHandle object. 16135 func GetSessionHandleV2(scope *Scope, value tf.Output) (handle tf.Output) { 16136 if scope.Err() != nil { 16137 return 16138 } 16139 opspec := tf.OpSpec{ 16140 Type: "GetSessionHandleV2", 16141 Input: []tf.Input{ 16142 value, 16143 }, 16144 } 16145 op := scope.AddOperation(opspec) 16146 return op.Output(0) 16147 } 16148 16149 // ResourceApplyAdamAttr is an optional argument to ResourceApplyAdam. 16150 type ResourceApplyAdamAttr func(optionalAttr) 16151 16152 // ResourceApplyAdamUseLocking sets the optional use_locking attribute to value. 16153 // 16154 // value: If `True`, updating of the var, m, and v tensors will be protected 16155 // by a lock; otherwise the behavior is undefined, but may exhibit less 16156 // contention. 16157 // If not specified, defaults to false 16158 func ResourceApplyAdamUseLocking(value bool) ResourceApplyAdamAttr { 16159 return func(m optionalAttr) { 16160 m["use_locking"] = value 16161 } 16162 } 16163 16164 // ResourceApplyAdamUseNesterov sets the optional use_nesterov attribute to value. 16165 // 16166 // value: If `True`, uses the nesterov update. 16167 // If not specified, defaults to false 16168 func ResourceApplyAdamUseNesterov(value bool) ResourceApplyAdamAttr { 16169 return func(m optionalAttr) { 16170 m["use_nesterov"] = value 16171 } 16172 } 16173 16174 // Update '*var' according to the Adam algorithm. 16175 // 16176 // $$lr_t := \text{learning\_rate} * \sqrt{1 - beta_2^t} / (1 - beta_1^t)$$ 16177 // $$m_t := beta_1 * m_{t-1} + (1 - beta_1) * g$$ 16178 // $$v_t := beta_2 * v_{t-1} + (1 - beta_2) * g * g$$ 16179 // $$variable := variable - lr_t * m_t / (\sqrt{v_t} + \epsilon)$$ 16180 // 16181 // Arguments: 16182 // var_: Should be from a Variable(). 16183 // m: Should be from a Variable(). 16184 // v: Should be from a Variable(). 16185 // beta1_power: Must be a scalar. 16186 // beta2_power: Must be a scalar. 16187 // lr: Scaling factor. Must be a scalar. 16188 // beta1: Momentum factor. Must be a scalar. 16189 // beta2: Momentum factor. Must be a scalar. 16190 // epsilon: Ridge term. Must be a scalar. 16191 // grad: The gradient. 16192 // 16193 // Returns the created operation. 16194 func ResourceApplyAdam(scope *Scope, var_ tf.Output, m tf.Output, v tf.Output, beta1_power tf.Output, beta2_power tf.Output, lr tf.Output, beta1 tf.Output, beta2 tf.Output, epsilon tf.Output, grad tf.Output, optional ...ResourceApplyAdamAttr) (o *tf.Operation) { 16195 if scope.Err() != nil { 16196 return 16197 } 16198 attrs := map[string]interface{}{} 16199 for _, a := range optional { 16200 a(attrs) 16201 } 16202 opspec := tf.OpSpec{ 16203 Type: "ResourceApplyAdam", 16204 Input: []tf.Input{ 16205 var_, m, v, beta1_power, beta2_power, lr, beta1, beta2, epsilon, grad, 16206 }, 16207 Attrs: attrs, 16208 } 16209 return scope.AddOperation(opspec) 16210 } 16211 16212 // SdcaOptimizerAttr is an optional argument to SdcaOptimizer. 16213 type SdcaOptimizerAttr func(optionalAttr) 16214 16215 // SdcaOptimizerAdaptative sets the optional adaptative attribute to value. 16216 // 16217 // value: Whether to use Adaptive SDCA for the inner loop. 16218 // If not specified, defaults to true 16219 func SdcaOptimizerAdaptative(value bool) SdcaOptimizerAttr { 16220 return func(m optionalAttr) { 16221 m["adaptative"] = value 16222 } 16223 } 16224 16225 // Distributed version of Stochastic Dual Coordinate Ascent (SDCA) optimizer for 16226 // 16227 // linear models with L1 + L2 regularization. As global optimization objective is 16228 // strongly-convex, the optimizer optimizes the dual objective at each step. The 16229 // optimizer applies each update one example at a time. Examples are sampled 16230 // uniformly, and the optimizer is learning rate free and enjoys linear convergence 16231 // rate. 16232 // 16233 // [Proximal Stochastic Dual Coordinate Ascent](http://arxiv.org/pdf/1211.2717v1.pdf).<br> 16234 // Shai Shalev-Shwartz, Tong Zhang. 2012 16235 // 16236 // $$Loss Objective = \sum f_{i} (wx_{i}) + (l2 / 2) * |w|^2 + l1 * |w|$$ 16237 // 16238 // [Adding vs. Averaging in Distributed Primal-Dual Optimization](http://arxiv.org/abs/1502.03508).<br> 16239 // Chenxin Ma, Virginia Smith, Martin Jaggi, Michael I. Jordan, 16240 // Peter Richtarik, Martin Takac. 2015 16241 // 16242 // [Stochastic Dual Coordinate Ascent with Adaptive Probabilities](https://arxiv.org/abs/1502.08053).<br> 16243 // Dominik Csiba, Zheng Qu, Peter Richtarik. 2015 16244 // 16245 // Arguments: 16246 // sparse_example_indices: a list of vectors which contain example indices. 16247 // sparse_feature_indices: a list of vectors which contain feature indices. 16248 // sparse_feature_values: a list of vectors which contains feature value 16249 // associated with each feature group. 16250 // dense_features: a list of matrices which contains the dense feature values. 16251 // example_weights: a vector which contains the weight associated with each 16252 // example. 16253 // example_labels: a vector which contains the label/target associated with each 16254 // example. 16255 // sparse_indices: a list of vectors where each value is the indices which has 16256 // corresponding weights in sparse_weights. This field maybe omitted for the 16257 // dense approach. 16258 // sparse_weights: a list of vectors where each value is the weight associated with 16259 // a sparse feature group. 16260 // dense_weights: a list of vectors where the values are the weights associated 16261 // with a dense feature group. 16262 // example_state_data: a list of vectors containing the example state data. 16263 // loss_type: Type of the primal loss. Currently SdcaSolver supports logistic, 16264 // squared and hinge losses. 16265 // l1: Symmetric l1 regularization strength. 16266 // l2: Symmetric l2 regularization strength. 16267 // num_loss_partitions: Number of partitions of the global loss function. 16268 // num_inner_iterations: Number of iterations per mini-batch. 16269 // 16270 // Returns a list of vectors containing the updated example state 16271 // data.a list of vectors where each value is the delta 16272 // weights associated with a sparse feature group.a list of vectors where the values are the delta 16273 // weights associated with a dense feature group. 16274 func SdcaOptimizer(scope *Scope, sparse_example_indices []tf.Output, sparse_feature_indices []tf.Output, sparse_feature_values []tf.Output, dense_features []tf.Output, example_weights tf.Output, example_labels tf.Output, sparse_indices []tf.Output, sparse_weights []tf.Output, dense_weights []tf.Output, example_state_data tf.Output, loss_type string, l1 float32, l2 float32, num_loss_partitions int64, num_inner_iterations int64, optional ...SdcaOptimizerAttr) (out_example_state_data tf.Output, out_delta_sparse_weights []tf.Output, out_delta_dense_weights []tf.Output) { 16275 if scope.Err() != nil { 16276 return 16277 } 16278 attrs := map[string]interface{}{"loss_type": loss_type, "l1": l1, "l2": l2, "num_loss_partitions": num_loss_partitions, "num_inner_iterations": num_inner_iterations} 16279 for _, a := range optional { 16280 a(attrs) 16281 } 16282 opspec := tf.OpSpec{ 16283 Type: "SdcaOptimizer", 16284 Input: []tf.Input{ 16285 tf.OutputList(sparse_example_indices), tf.OutputList(sparse_feature_indices), tf.OutputList(sparse_feature_values), tf.OutputList(dense_features), example_weights, example_labels, tf.OutputList(sparse_indices), tf.OutputList(sparse_weights), tf.OutputList(dense_weights), example_state_data, 16286 }, 16287 Attrs: attrs, 16288 } 16289 op := scope.AddOperation(opspec) 16290 if scope.Err() != nil { 16291 return 16292 } 16293 var idx int 16294 var err error 16295 out_example_state_data = op.Output(idx) 16296 if out_delta_sparse_weights, idx, err = makeOutputList(op, idx, "out_delta_sparse_weights"); err != nil { 16297 scope.UpdateErr("SdcaOptimizer", err) 16298 return 16299 } 16300 if out_delta_dense_weights, idx, err = makeOutputList(op, idx, "out_delta_dense_weights"); err != nil { 16301 scope.UpdateErr("SdcaOptimizer", err) 16302 return 16303 } 16304 return out_example_state_data, out_delta_sparse_weights, out_delta_dense_weights 16305 } 16306 16307 // ExperimentalParseExampleDatasetAttr is an optional argument to ExperimentalParseExampleDataset. 16308 type ExperimentalParseExampleDatasetAttr func(optionalAttr) 16309 16310 // ExperimentalParseExampleDatasetSloppy sets the optional sloppy attribute to value. 16311 // If not specified, defaults to false 16312 func ExperimentalParseExampleDatasetSloppy(value bool) ExperimentalParseExampleDatasetAttr { 16313 return func(m optionalAttr) { 16314 m["sloppy"] = value 16315 } 16316 } 16317 16318 // Transforms `input_dataset` containing `Example` protos as vectors of DT_STRING into a dataset of `Tensor` or `SparseTensor` objects representing the parsed features. 16319 // 16320 // Arguments: 16321 // 16322 // 16323 // dense_defaults: A dict mapping string keys to `Tensor`s. 16324 // The keys of the dict must match the dense_keys of the feature. 16325 // sparse_keys: A list of string keys in the examples features. 16326 // The results for these keys will be returned as `SparseTensor` objects. 16327 // dense_keys: A list of Ndense string Tensors (scalars). 16328 // The keys expected in the Examples features associated with dense values. 16329 // sparse_types: A list of `DTypes` of the same length as `sparse_keys`. 16330 // Only `tf.float32` (`FloatList`), `tf.int64` (`Int64List`), 16331 // and `tf.string` (`BytesList`) are supported. 16332 // dense_shapes: List of tuples with the same length as `dense_keys`. 16333 // The shape of the data for each dense feature referenced by `dense_keys`. 16334 // Required for any input tensors identified by `dense_keys`. Must be 16335 // either fully defined, or may contain an unknown first dimension. 16336 // An unknown first dimension means the feature is treated as having 16337 // a variable number of blocks, and the output shape along this dimension 16338 // is considered unknown at graph build time. Padding is applied for 16339 // minibatch elements smaller than the maximum number of blocks for the 16340 // given feature along this dimension. 16341 // output_types: The type list for the return values. 16342 // output_shapes: The list of shapes being produced. 16343 func ExperimentalParseExampleDataset(scope *Scope, input_dataset tf.Output, num_parallel_calls tf.Output, dense_defaults []tf.Output, sparse_keys []string, dense_keys []string, sparse_types []tf.DataType, dense_shapes []tf.Shape, output_types []tf.DataType, output_shapes []tf.Shape, optional ...ExperimentalParseExampleDatasetAttr) (handle tf.Output) { 16344 if scope.Err() != nil { 16345 return 16346 } 16347 attrs := map[string]interface{}{"sparse_keys": sparse_keys, "dense_keys": dense_keys, "sparse_types": sparse_types, "dense_shapes": dense_shapes, "output_types": output_types, "output_shapes": output_shapes} 16348 for _, a := range optional { 16349 a(attrs) 16350 } 16351 opspec := tf.OpSpec{ 16352 Type: "ExperimentalParseExampleDataset", 16353 Input: []tf.Input{ 16354 input_dataset, num_parallel_calls, tf.OutputList(dense_defaults), 16355 }, 16356 Attrs: attrs, 16357 } 16358 op := scope.AddOperation(opspec) 16359 return op.Output(0) 16360 } 16361 16362 // PrelinearizeAttr is an optional argument to Prelinearize. 16363 type PrelinearizeAttr func(optionalAttr) 16364 16365 // PrelinearizeShape sets the optional shape attribute to value. 16366 // 16367 // value: The shape of the tensor. 16368 // If not specified, defaults to <> 16369 func PrelinearizeShape(value tf.Shape) PrelinearizeAttr { 16370 return func(m optionalAttr) { 16371 m["shape"] = value 16372 } 16373 } 16374 16375 // PrelinearizeLayout sets the optional layout attribute to value. 16376 // 16377 // value: A vector holding the requested layout in minor-to-major sequence. If a layout 16378 // attribute is passed but its values are all -1 the layout will be computed by 16379 // the infeed operation. 16380 // If not specified, defaults to <> 16381 func PrelinearizeLayout(value []int64) PrelinearizeAttr { 16382 return func(m optionalAttr) { 16383 m["layout"] = value 16384 } 16385 } 16386 16387 // An op which linearizes one Tensor value to an opaque variant tensor. 16388 // 16389 // Arguments: 16390 // input: A tensor that will be linearized. 16391 func Prelinearize(scope *Scope, input tf.Output, optional ...PrelinearizeAttr) (output tf.Output) { 16392 if scope.Err() != nil { 16393 return 16394 } 16395 attrs := map[string]interface{}{} 16396 for _, a := range optional { 16397 a(attrs) 16398 } 16399 opspec := tf.OpSpec{ 16400 Type: "Prelinearize", 16401 Input: []tf.Input{ 16402 input, 16403 }, 16404 Attrs: attrs, 16405 } 16406 op := scope.AddOperation(opspec) 16407 return op.Output(0) 16408 } 16409 16410 // QuantizedMatMulAttr is an optional argument to QuantizedMatMul. 16411 type QuantizedMatMulAttr func(optionalAttr) 16412 16413 // QuantizedMatMulToutput sets the optional Toutput attribute to value. 16414 // If not specified, defaults to DT_QINT32 16415 func QuantizedMatMulToutput(value tf.DataType) QuantizedMatMulAttr { 16416 return func(m optionalAttr) { 16417 m["Toutput"] = value 16418 } 16419 } 16420 16421 // QuantizedMatMulTransposeA sets the optional transpose_a attribute to value. 16422 // 16423 // value: If true, `a` is transposed before multiplication. 16424 // If not specified, defaults to false 16425 func QuantizedMatMulTransposeA(value bool) QuantizedMatMulAttr { 16426 return func(m optionalAttr) { 16427 m["transpose_a"] = value 16428 } 16429 } 16430 16431 // QuantizedMatMulTransposeB sets the optional transpose_b attribute to value. 16432 // 16433 // value: If true, `b` is transposed before multiplication. 16434 // If not specified, defaults to false 16435 func QuantizedMatMulTransposeB(value bool) QuantizedMatMulAttr { 16436 return func(m optionalAttr) { 16437 m["transpose_b"] = value 16438 } 16439 } 16440 16441 // QuantizedMatMulTactivation sets the optional Tactivation attribute to value. 16442 // 16443 // value: The type of output produced by activation function 16444 // following this operation. 16445 // If not specified, defaults to DT_QUINT8 16446 func QuantizedMatMulTactivation(value tf.DataType) QuantizedMatMulAttr { 16447 return func(m optionalAttr) { 16448 m["Tactivation"] = value 16449 } 16450 } 16451 16452 // Perform a quantized matrix multiplication of `a` by the matrix `b`. 16453 // 16454 // The inputs must be two-dimensional matrices and the inner dimension of 16455 // `a` (after being transposed if `transpose_a` is non-zero) must match the 16456 // outer dimension of `b` (after being transposed if `transposed_b` is 16457 // non-zero). 16458 // 16459 // Arguments: 16460 // a: Must be a two-dimensional tensor. 16461 // b: Must be a two-dimensional tensor. 16462 // min_a: The float value that the lowest quantized `a` value represents. 16463 // max_a: The float value that the highest quantized `a` value represents. 16464 // min_b: The float value that the lowest quantized `b` value represents. 16465 // max_b: The float value that the highest quantized `b` value represents. 16466 // 16467 // Returns The float value that the lowest quantized output value represents.The float value that the highest quantized output value represents. 16468 func QuantizedMatMul(scope *Scope, a tf.Output, b tf.Output, min_a tf.Output, max_a tf.Output, min_b tf.Output, max_b tf.Output, optional ...QuantizedMatMulAttr) (out tf.Output, min_out tf.Output, max_out tf.Output) { 16469 if scope.Err() != nil { 16470 return 16471 } 16472 attrs := map[string]interface{}{} 16473 for _, a := range optional { 16474 a(attrs) 16475 } 16476 opspec := tf.OpSpec{ 16477 Type: "QuantizedMatMul", 16478 Input: []tf.Input{ 16479 a, b, min_a, max_a, min_b, max_b, 16480 }, 16481 Attrs: attrs, 16482 } 16483 op := scope.AddOperation(opspec) 16484 return op.Output(0), op.Output(1), op.Output(2) 16485 } 16486 16487 // Inverse 2D real-valued fast Fourier transform. 16488 // 16489 // Computes the inverse 2-dimensional discrete Fourier transform of a real-valued 16490 // signal over the inner-most 2 dimensions of `input`. 16491 // 16492 // The inner-most 2 dimensions of `input` are assumed to be the result of `RFFT2D`: 16493 // The inner-most dimension contains the `fft_length / 2 + 1` unique components of 16494 // the DFT of a real-valued signal. If `fft_length` is not provided, it is computed 16495 // from the size of the inner-most 2 dimensions of `input`. If the FFT length used 16496 // to compute `input` is odd, it should be provided since it cannot be inferred 16497 // properly. 16498 // 16499 // Along each axis `IRFFT2D` is computed on, if `fft_length` (or 16500 // `fft_length / 2 + 1` for the inner-most dimension) is smaller than the 16501 // corresponding dimension of `input`, the dimension is cropped. If it is larger, 16502 // the dimension is padded with zeros. 16503 // 16504 // Arguments: 16505 // input: A complex64 tensor. 16506 // fft_length: An int32 tensor of shape [2]. The FFT length for each dimension. 16507 // 16508 // Returns A float32 tensor of the same rank as `input`. The inner-most 2 16509 // dimensions of `input` are replaced with the `fft_length` samples of their 16510 // inverse 2D Fourier transform. 16511 // 16512 // @compatibility(numpy) 16513 // Equivalent to np.fft.irfft2 16514 // @end_compatibility 16515 func IRFFT2D(scope *Scope, input tf.Output, fft_length tf.Output) (output tf.Output) { 16516 if scope.Err() != nil { 16517 return 16518 } 16519 opspec := tf.OpSpec{ 16520 Type: "IRFFT2D", 16521 Input: []tf.Input{ 16522 input, fft_length, 16523 }, 16524 } 16525 op := scope.AddOperation(opspec) 16526 return op.Output(0) 16527 } 16528 16529 // InfeedEnqueueTupleAttr is an optional argument to InfeedEnqueueTuple. 16530 type InfeedEnqueueTupleAttr func(optionalAttr) 16531 16532 // InfeedEnqueueTupleLayouts sets the optional layouts attribute to value. 16533 // 16534 // value: A vector holding the requested layout in minor-to-major sequence for 16535 // all the tuple shapes, in the order the shapes appear in the "shapes" input. 16536 // The layout elements for a sub-shape can be set to -1, in which case the 16537 // corresponding layout will be computed by the infeed operation. 16538 // If not specified, defaults to <> 16539 func InfeedEnqueueTupleLayouts(value []int64) InfeedEnqueueTupleAttr { 16540 return func(m optionalAttr) { 16541 m["layouts"] = value 16542 } 16543 } 16544 16545 // InfeedEnqueueTupleDeviceOrdinal sets the optional device_ordinal attribute to value. 16546 // 16547 // value: The TPU device to use. This should be -1 when the Op 16548 // is running on a TPU device, and >= 0 when the Op is running on the CPU 16549 // device. 16550 // If not specified, defaults to -1 16551 func InfeedEnqueueTupleDeviceOrdinal(value int64) InfeedEnqueueTupleAttr { 16552 return func(m optionalAttr) { 16553 m["device_ordinal"] = value 16554 } 16555 } 16556 16557 // Feeds multiple Tensor values into the computation as an XLA tuple. 16558 // 16559 // Arguments: 16560 // inputs: A list of tensors that will be provided using the infeed mechanism. 16561 // shapes: The shapes of each tensor in `inputs`. 16562 // 16563 // Returns the created operation. 16564 func InfeedEnqueueTuple(scope *Scope, inputs []tf.Output, shapes []tf.Shape, optional ...InfeedEnqueueTupleAttr) (o *tf.Operation) { 16565 if scope.Err() != nil { 16566 return 16567 } 16568 attrs := map[string]interface{}{"shapes": shapes} 16569 for _, a := range optional { 16570 a(attrs) 16571 } 16572 opspec := tf.OpSpec{ 16573 Type: "InfeedEnqueueTuple", 16574 Input: []tf.Input{ 16575 tf.OutputList(inputs), 16576 }, 16577 Attrs: attrs, 16578 } 16579 return scope.AddOperation(opspec) 16580 } 16581 16582 // Returns which elements of x are finite. 16583 // 16584 // @compatibility(numpy) 16585 // Equivalent to np.isfinite 16586 // @end_compatibility 16587 func IsFinite(scope *Scope, x tf.Output) (y tf.Output) { 16588 if scope.Err() != nil { 16589 return 16590 } 16591 opspec := tf.OpSpec{ 16592 Type: "IsFinite", 16593 Input: []tf.Input{ 16594 x, 16595 }, 16596 } 16597 op := scope.AddOperation(opspec) 16598 return op.Output(0) 16599 } 16600 16601 // ResourceStridedSliceAssignAttr is an optional argument to ResourceStridedSliceAssign. 16602 type ResourceStridedSliceAssignAttr func(optionalAttr) 16603 16604 // ResourceStridedSliceAssignBeginMask sets the optional begin_mask attribute to value. 16605 // If not specified, defaults to 0 16606 func ResourceStridedSliceAssignBeginMask(value int64) ResourceStridedSliceAssignAttr { 16607 return func(m optionalAttr) { 16608 m["begin_mask"] = value 16609 } 16610 } 16611 16612 // ResourceStridedSliceAssignEndMask sets the optional end_mask attribute to value. 16613 // If not specified, defaults to 0 16614 func ResourceStridedSliceAssignEndMask(value int64) ResourceStridedSliceAssignAttr { 16615 return func(m optionalAttr) { 16616 m["end_mask"] = value 16617 } 16618 } 16619 16620 // ResourceStridedSliceAssignEllipsisMask sets the optional ellipsis_mask attribute to value. 16621 // If not specified, defaults to 0 16622 func ResourceStridedSliceAssignEllipsisMask(value int64) ResourceStridedSliceAssignAttr { 16623 return func(m optionalAttr) { 16624 m["ellipsis_mask"] = value 16625 } 16626 } 16627 16628 // ResourceStridedSliceAssignNewAxisMask sets the optional new_axis_mask attribute to value. 16629 // If not specified, defaults to 0 16630 func ResourceStridedSliceAssignNewAxisMask(value int64) ResourceStridedSliceAssignAttr { 16631 return func(m optionalAttr) { 16632 m["new_axis_mask"] = value 16633 } 16634 } 16635 16636 // ResourceStridedSliceAssignShrinkAxisMask sets the optional shrink_axis_mask attribute to value. 16637 // If not specified, defaults to 0 16638 func ResourceStridedSliceAssignShrinkAxisMask(value int64) ResourceStridedSliceAssignAttr { 16639 return func(m optionalAttr) { 16640 m["shrink_axis_mask"] = value 16641 } 16642 } 16643 16644 // Assign `value` to the sliced l-value reference of `ref`. 16645 // 16646 // The values of `value` are assigned to the positions in the variable 16647 // `ref` that are selected by the slice parameters. The slice parameters 16648 // `begin, `end`, `strides`, etc. work exactly as in `StridedSlice`. 16649 // 16650 // NOTE this op currently does not support broadcasting and so `value`'s 16651 // shape must be exactly the shape produced by the slice of `ref`. 16652 // 16653 // Returns the created operation. 16654 func ResourceStridedSliceAssign(scope *Scope, ref tf.Output, begin tf.Output, end tf.Output, strides tf.Output, value tf.Output, optional ...ResourceStridedSliceAssignAttr) (o *tf.Operation) { 16655 if scope.Err() != nil { 16656 return 16657 } 16658 attrs := map[string]interface{}{} 16659 for _, a := range optional { 16660 a(attrs) 16661 } 16662 opspec := tf.OpSpec{ 16663 Type: "ResourceStridedSliceAssign", 16664 Input: []tf.Input{ 16665 ref, begin, end, strides, value, 16666 }, 16667 Attrs: attrs, 16668 } 16669 return scope.AddOperation(opspec) 16670 } 16671 16672 // ArgMaxAttr is an optional argument to ArgMax. 16673 type ArgMaxAttr func(optionalAttr) 16674 16675 // ArgMaxOutputType sets the optional output_type attribute to value. 16676 // If not specified, defaults to DT_INT64 16677 func ArgMaxOutputType(value tf.DataType) ArgMaxAttr { 16678 return func(m optionalAttr) { 16679 m["output_type"] = value 16680 } 16681 } 16682 16683 // Returns the index with the largest value across dimensions of a tensor. 16684 // 16685 // Note that in case of ties the identity of the return value is not guaranteed. 16686 // 16687 // Arguments: 16688 // 16689 // dimension: int32 or int64, must be in the range `[-rank(input), rank(input))`. 16690 // Describes which dimension of the input Tensor to reduce across. For vectors, 16691 // use dimension = 0. 16692 func ArgMax(scope *Scope, input tf.Output, dimension tf.Output, optional ...ArgMaxAttr) (output tf.Output) { 16693 if scope.Err() != nil { 16694 return 16695 } 16696 attrs := map[string]interface{}{} 16697 for _, a := range optional { 16698 a(attrs) 16699 } 16700 opspec := tf.OpSpec{ 16701 Type: "ArgMax", 16702 Input: []tf.Input{ 16703 input, dimension, 16704 }, 16705 Attrs: attrs, 16706 } 16707 op := scope.AddOperation(opspec) 16708 return op.Output(0) 16709 } 16710 16711 // Extract `patches` from `images` and put them in the "depth" output dimension. 16712 // 16713 // Arguments: 16714 // images: 4-D Tensor with shape `[batch, in_rows, in_cols, depth]`. 16715 // ksizes: The size of the sliding window for each dimension of `images`. 16716 // strides: 1-D of length 4. How far the centers of two consecutive patches are in 16717 // the images. Must be: `[1, stride_rows, stride_cols, 1]`. 16718 // rates: 1-D of length 4. Must be: `[1, rate_rows, rate_cols, 1]`. This is the 16719 // input stride, specifying how far two consecutive patch samples are in the 16720 // input. Equivalent to extracting patches with 16721 // `patch_sizes_eff = patch_sizes + (patch_sizes - 1) * (rates - 1)`, followed by 16722 // subsampling them spatially by a factor of `rates`. This is equivalent to 16723 // `rate` in dilated (a.k.a. Atrous) convolutions. 16724 // padding: The type of padding algorithm to use. 16725 // 16726 // We specify the size-related attributes as: 16727 // 16728 // ```python 16729 // ksizes = [1, ksize_rows, ksize_cols, 1] 16730 // strides = [1, strides_rows, strides_cols, 1] 16731 // rates = [1, rates_rows, rates_cols, 1] 16732 // ``` 16733 // 16734 // Returns 4-D Tensor with shape `[batch, out_rows, out_cols, ksize_rows * 16735 // ksize_cols * depth]` containing image patches with size 16736 // `ksize_rows x ksize_cols x depth` vectorized in the "depth" dimension. Note 16737 // `out_rows` and `out_cols` are the dimensions of the output patches. 16738 func ExtractImagePatches(scope *Scope, images tf.Output, ksizes []int64, strides []int64, rates []int64, padding string) (patches tf.Output) { 16739 if scope.Err() != nil { 16740 return 16741 } 16742 attrs := map[string]interface{}{"ksizes": ksizes, "strides": strides, "rates": rates, "padding": padding} 16743 opspec := tf.OpSpec{ 16744 Type: "ExtractImagePatches", 16745 Input: []tf.Input{ 16746 images, 16747 }, 16748 Attrs: attrs, 16749 } 16750 op := scope.AddOperation(opspec) 16751 return op.Output(0) 16752 } 16753 16754 // Computes the mean along sparse segments of a tensor. 16755 // 16756 // See `tf.sparse.segment_sum` for usage examples. 16757 // 16758 // Like `SegmentMean`, but `segment_ids` can have rank less than `data`'s first 16759 // dimension, selecting a subset of dimension 0, specified by `indices`. 16760 // 16761 // Arguments: 16762 // 16763 // indices: A 1-D tensor. Has same rank as `segment_ids`. 16764 // segment_ids: A 1-D tensor. Values should be sorted and can be repeated. 16765 // 16766 // Returns Has same shape as data, except for dimension 0 which 16767 // has size `k`, the number of segments. 16768 func SparseSegmentMean(scope *Scope, data tf.Output, indices tf.Output, segment_ids tf.Output) (output tf.Output) { 16769 if scope.Err() != nil { 16770 return 16771 } 16772 opspec := tf.OpSpec{ 16773 Type: "SparseSegmentMean", 16774 Input: []tf.Input{ 16775 data, indices, segment_ids, 16776 }, 16777 } 16778 op := scope.AddOperation(opspec) 16779 return op.Output(0) 16780 } 16781 16782 // Deserializes a serialized tree ensemble config and replaces current tree 16783 // 16784 // ensemble. 16785 // 16786 // Arguments: 16787 // tree_ensemble_handle: Handle to the tree ensemble. 16788 // stamp_token: Token to use as the new value of the resource stamp. 16789 // tree_ensemble_serialized: Serialized proto of the ensemble. 16790 // 16791 // Returns the created operation. 16792 func BoostedTreesDeserializeEnsemble(scope *Scope, tree_ensemble_handle tf.Output, stamp_token tf.Output, tree_ensemble_serialized tf.Output) (o *tf.Operation) { 16793 if scope.Err() != nil { 16794 return 16795 } 16796 opspec := tf.OpSpec{ 16797 Type: "BoostedTreesDeserializeEnsemble", 16798 Input: []tf.Input{ 16799 tree_ensemble_handle, stamp_token, tree_ensemble_serialized, 16800 }, 16801 } 16802 return scope.AddOperation(opspec) 16803 } 16804 16805 // Transforms a tf.Example proto (as a string) into typed tensors. 16806 // 16807 // Arguments: 16808 // serialized: A vector containing a batch of binary serialized Example protos. 16809 // dense_defaults: A list of Tensors (some may be empty), whose length matches 16810 // the length of `dense_keys`. dense_defaults[j] provides default values 16811 // when the example's feature_map lacks dense_key[j]. If an empty Tensor is 16812 // provided for dense_defaults[j], then the Feature dense_keys[j] is required. 16813 // The input type is inferred from dense_defaults[j], even when it's empty. 16814 // If dense_defaults[j] is not empty, and dense_shapes[j] is fully defined, 16815 // then the shape of dense_defaults[j] must match that of dense_shapes[j]. 16816 // If dense_shapes[j] has an undefined major dimension (variable strides dense 16817 // feature), dense_defaults[j] must contain a single element: 16818 // the padding element. 16819 // num_sparse: The number of sparse features to be parsed from the example. This 16820 // must match the lengths of `sparse_keys` and `sparse_types`. 16821 // sparse_keys: A list of `num_sparse` strings. 16822 // The keys expected in the Examples' features associated with sparse values. 16823 // dense_keys: The keys expected in the Examples' features associated with dense 16824 // values. 16825 // sparse_types: A list of `num_sparse` types; the data types of data in each 16826 // Feature given in sparse_keys. 16827 // Currently the ParseSingleExample op supports DT_FLOAT (FloatList), 16828 // DT_INT64 (Int64List), and DT_STRING (BytesList). 16829 // dense_shapes: The shapes of data in each Feature given in dense_keys. 16830 // The length of this list must match the length of `dense_keys`. The 16831 // number of elements in the Feature corresponding to dense_key[j] must 16832 // always equal dense_shapes[j].NumEntries(). If dense_shapes[j] == 16833 // (D0, D1, ..., DN) then the shape of output Tensor dense_values[j] 16834 // will be (D0, D1, ..., DN): In the case dense_shapes[j] = (-1, D1, 16835 // ..., DN), the shape of the output Tensor dense_values[j] will be (M, 16836 // D1, .., DN), where M is the number of blocks of elements of length 16837 // D1 * .... * DN, in the input. 16838 func ParseSingleExample(scope *Scope, serialized tf.Output, dense_defaults []tf.Output, num_sparse int64, sparse_keys []string, dense_keys []string, sparse_types []tf.DataType, dense_shapes []tf.Shape) (sparse_indices []tf.Output, sparse_values []tf.Output, sparse_shapes []tf.Output, dense_values []tf.Output) { 16839 if scope.Err() != nil { 16840 return 16841 } 16842 attrs := map[string]interface{}{"num_sparse": num_sparse, "sparse_keys": sparse_keys, "dense_keys": dense_keys, "sparse_types": sparse_types, "dense_shapes": dense_shapes} 16843 opspec := tf.OpSpec{ 16844 Type: "ParseSingleExample", 16845 Input: []tf.Input{ 16846 serialized, tf.OutputList(dense_defaults), 16847 }, 16848 Attrs: attrs, 16849 } 16850 op := scope.AddOperation(opspec) 16851 if scope.Err() != nil { 16852 return 16853 } 16854 var idx int 16855 var err error 16856 if sparse_indices, idx, err = makeOutputList(op, idx, "sparse_indices"); err != nil { 16857 scope.UpdateErr("ParseSingleExample", err) 16858 return 16859 } 16860 if sparse_values, idx, err = makeOutputList(op, idx, "sparse_values"); err != nil { 16861 scope.UpdateErr("ParseSingleExample", err) 16862 return 16863 } 16864 if sparse_shapes, idx, err = makeOutputList(op, idx, "sparse_shapes"); err != nil { 16865 scope.UpdateErr("ParseSingleExample", err) 16866 return 16867 } 16868 if dense_values, idx, err = makeOutputList(op, idx, "dense_values"); err != nil { 16869 scope.UpdateErr("ParseSingleExample", err) 16870 return 16871 } 16872 return sparse_indices, sparse_values, sparse_shapes, dense_values 16873 } 16874 16875 // WholeFileReaderV2Attr is an optional argument to WholeFileReaderV2. 16876 type WholeFileReaderV2Attr func(optionalAttr) 16877 16878 // WholeFileReaderV2Container sets the optional container attribute to value. 16879 // 16880 // value: If non-empty, this reader is placed in the given container. 16881 // Otherwise, a default container is used. 16882 // If not specified, defaults to "" 16883 func WholeFileReaderV2Container(value string) WholeFileReaderV2Attr { 16884 return func(m optionalAttr) { 16885 m["container"] = value 16886 } 16887 } 16888 16889 // WholeFileReaderV2SharedName sets the optional shared_name attribute to value. 16890 // 16891 // value: If non-empty, this reader is named in the given bucket 16892 // with this shared_name. Otherwise, the node name is used instead. 16893 // If not specified, defaults to "" 16894 func WholeFileReaderV2SharedName(value string) WholeFileReaderV2Attr { 16895 return func(m optionalAttr) { 16896 m["shared_name"] = value 16897 } 16898 } 16899 16900 // A Reader that outputs the entire contents of a file as a value. 16901 // 16902 // To use, enqueue filenames in a Queue. The output of ReaderRead will 16903 // be a filename (key) and the contents of that file (value). 16904 // 16905 // Returns The handle to reference the Reader. 16906 func WholeFileReaderV2(scope *Scope, optional ...WholeFileReaderV2Attr) (reader_handle tf.Output) { 16907 if scope.Err() != nil { 16908 return 16909 } 16910 attrs := map[string]interface{}{} 16911 for _, a := range optional { 16912 a(attrs) 16913 } 16914 opspec := tf.OpSpec{ 16915 Type: "WholeFileReaderV2", 16916 16917 Attrs: attrs, 16918 } 16919 op := scope.AddOperation(opspec) 16920 return op.Output(0) 16921 } 16922 16923 // LoadTPUEmbeddingADAMParametersAttr is an optional argument to LoadTPUEmbeddingADAMParameters. 16924 type LoadTPUEmbeddingADAMParametersAttr func(optionalAttr) 16925 16926 // LoadTPUEmbeddingADAMParametersTableId sets the optional table_id attribute to value. 16927 // If not specified, defaults to -1 16928 // 16929 // REQUIRES: value >= -1 16930 func LoadTPUEmbeddingADAMParametersTableId(value int64) LoadTPUEmbeddingADAMParametersAttr { 16931 return func(m optionalAttr) { 16932 m["table_id"] = value 16933 } 16934 } 16935 16936 // LoadTPUEmbeddingADAMParametersTableName sets the optional table_name attribute to value. 16937 // If not specified, defaults to "" 16938 func LoadTPUEmbeddingADAMParametersTableName(value string) LoadTPUEmbeddingADAMParametersAttr { 16939 return func(m optionalAttr) { 16940 m["table_name"] = value 16941 } 16942 } 16943 16944 // Load ADAM embedding parameters. 16945 // 16946 // An op that loads optimization parameters into HBM for embedding. Must be 16947 // preceded by a ConfigureTPUEmbeddingHost op that sets up the correct 16948 // embedding table configuration. For example, this op is used to install 16949 // parameters that are loaded from a checkpoint before a training loop is 16950 // executed. 16951 // 16952 // Arguments: 16953 // parameters: Value of parameters used in the ADAM optimization algorithm. 16954 // momenta: Value of momenta used in the ADAM optimization algorithm. 16955 // velocities: Value of velocities used in the ADAM optimization algorithm. 16956 // 16957 // 16958 // 16959 // Returns the created operation. 16960 func LoadTPUEmbeddingADAMParameters(scope *Scope, parameters tf.Output, momenta tf.Output, velocities tf.Output, num_shards int64, shard_id int64, optional ...LoadTPUEmbeddingADAMParametersAttr) (o *tf.Operation) { 16961 if scope.Err() != nil { 16962 return 16963 } 16964 attrs := map[string]interface{}{"num_shards": num_shards, "shard_id": shard_id} 16965 for _, a := range optional { 16966 a(attrs) 16967 } 16968 opspec := tf.OpSpec{ 16969 Type: "LoadTPUEmbeddingADAMParameters", 16970 Input: []tf.Input{ 16971 parameters, momenta, velocities, 16972 }, 16973 Attrs: attrs, 16974 } 16975 return scope.AddOperation(opspec) 16976 } 16977 16978 // InfeedEnqueuePrelinearizedBufferAttr is an optional argument to InfeedEnqueuePrelinearizedBuffer. 16979 type InfeedEnqueuePrelinearizedBufferAttr func(optionalAttr) 16980 16981 // InfeedEnqueuePrelinearizedBufferDeviceOrdinal sets the optional device_ordinal attribute to value. 16982 // 16983 // value: The TPU device to use. This should be -1 when the Op is running on a TPU device 16984 // and = 0 when the Op is running on the CPU device. 16985 // If not specified, defaults to -1 16986 func InfeedEnqueuePrelinearizedBufferDeviceOrdinal(value int64) InfeedEnqueuePrelinearizedBufferAttr { 16987 return func(m optionalAttr) { 16988 m["device_ordinal"] = value 16989 } 16990 } 16991 16992 // An op which enqueues prelinearized buffer into TPU infeed. 16993 // 16994 // Arguments: 16995 // input: A variant tensor representing linearized output. 16996 // 16997 // Returns the created operation. 16998 func InfeedEnqueuePrelinearizedBuffer(scope *Scope, input tf.Output, optional ...InfeedEnqueuePrelinearizedBufferAttr) (o *tf.Operation) { 16999 if scope.Err() != nil { 17000 return 17001 } 17002 attrs := map[string]interface{}{} 17003 for _, a := range optional { 17004 a(attrs) 17005 } 17006 opspec := tf.OpSpec{ 17007 Type: "InfeedEnqueuePrelinearizedBuffer", 17008 Input: []tf.Input{ 17009 input, 17010 }, 17011 Attrs: attrs, 17012 } 17013 return scope.AddOperation(opspec) 17014 } 17015 17016 // Fetches multiple values from infeed as an XLA tuple. 17017 // 17018 // Arguments: 17019 // dtypes: The element types of each element in `outputs`. 17020 // shapes: The shapes of each tensor in `outputs`. 17021 // 17022 // Returns A list of tensors that will be provided using the infeed mechanism. 17023 func InfeedDequeueTuple(scope *Scope, dtypes []tf.DataType, shapes []tf.Shape) (outputs []tf.Output) { 17024 if scope.Err() != nil { 17025 return 17026 } 17027 attrs := map[string]interface{}{"dtypes": dtypes, "shapes": shapes} 17028 opspec := tf.OpSpec{ 17029 Type: "InfeedDequeueTuple", 17030 17031 Attrs: attrs, 17032 } 17033 op := scope.AddOperation(opspec) 17034 if scope.Err() != nil { 17035 return 17036 } 17037 var idx int 17038 var err error 17039 if outputs, idx, err = makeOutputList(op, idx, "outputs"); err != nil { 17040 scope.UpdateErr("InfeedDequeueTuple", err) 17041 return 17042 } 17043 return outputs 17044 } 17045 17046 // Enqueue multiple Tensor values on the computation outfeed. 17047 // 17048 // Arguments: 17049 // inputs: A list of tensors that will be inserted into the outfeed queue as an 17050 // XLA tuple. 17051 // 17052 // Returns the created operation. 17053 func OutfeedEnqueueTuple(scope *Scope, inputs []tf.Output) (o *tf.Operation) { 17054 if scope.Err() != nil { 17055 return 17056 } 17057 opspec := tf.OpSpec{ 17058 Type: "OutfeedEnqueueTuple", 17059 Input: []tf.Input{ 17060 tf.OutputList(inputs), 17061 }, 17062 } 17063 return scope.AddOperation(opspec) 17064 } 17065 17066 // ResourceApplyAdagradAttr is an optional argument to ResourceApplyAdagrad. 17067 type ResourceApplyAdagradAttr func(optionalAttr) 17068 17069 // ResourceApplyAdagradUseLocking sets the optional use_locking attribute to value. 17070 // 17071 // value: If `True`, updating of the var and accum tensors will be protected 17072 // by a lock; otherwise the behavior is undefined, but may exhibit less 17073 // contention. 17074 // If not specified, defaults to false 17075 func ResourceApplyAdagradUseLocking(value bool) ResourceApplyAdagradAttr { 17076 return func(m optionalAttr) { 17077 m["use_locking"] = value 17078 } 17079 } 17080 17081 // ResourceApplyAdagradUpdateSlots sets the optional update_slots attribute to value. 17082 // If not specified, defaults to true 17083 func ResourceApplyAdagradUpdateSlots(value bool) ResourceApplyAdagradAttr { 17084 return func(m optionalAttr) { 17085 m["update_slots"] = value 17086 } 17087 } 17088 17089 // Update '*var' according to the adagrad scheme. 17090 // 17091 // accum += grad * grad 17092 // var -= lr * grad * (1 / sqrt(accum)) 17093 // 17094 // Arguments: 17095 // var_: Should be from a Variable(). 17096 // accum: Should be from a Variable(). 17097 // lr: Scaling factor. Must be a scalar. 17098 // grad: The gradient. 17099 // 17100 // Returns the created operation. 17101 func ResourceApplyAdagrad(scope *Scope, var_ tf.Output, accum tf.Output, lr tf.Output, grad tf.Output, optional ...ResourceApplyAdagradAttr) (o *tf.Operation) { 17102 if scope.Err() != nil { 17103 return 17104 } 17105 attrs := map[string]interface{}{} 17106 for _, a := range optional { 17107 a(attrs) 17108 } 17109 opspec := tf.OpSpec{ 17110 Type: "ResourceApplyAdagrad", 17111 Input: []tf.Input{ 17112 var_, accum, lr, grad, 17113 }, 17114 Attrs: attrs, 17115 } 17116 return scope.AddOperation(opspec) 17117 } 17118 17119 // CudnnRNNV3Attr is an optional argument to CudnnRNNV3. 17120 type CudnnRNNV3Attr func(optionalAttr) 17121 17122 // CudnnRNNV3RnnMode sets the optional rnn_mode attribute to value. 17123 // If not specified, defaults to "lstm" 17124 func CudnnRNNV3RnnMode(value string) CudnnRNNV3Attr { 17125 return func(m optionalAttr) { 17126 m["rnn_mode"] = value 17127 } 17128 } 17129 17130 // CudnnRNNV3InputMode sets the optional input_mode attribute to value. 17131 // If not specified, defaults to "linear_input" 17132 func CudnnRNNV3InputMode(value string) CudnnRNNV3Attr { 17133 return func(m optionalAttr) { 17134 m["input_mode"] = value 17135 } 17136 } 17137 17138 // CudnnRNNV3Direction sets the optional direction attribute to value. 17139 // If not specified, defaults to "unidirectional" 17140 func CudnnRNNV3Direction(value string) CudnnRNNV3Attr { 17141 return func(m optionalAttr) { 17142 m["direction"] = value 17143 } 17144 } 17145 17146 // CudnnRNNV3Dropout sets the optional dropout attribute to value. 17147 // If not specified, defaults to 0 17148 func CudnnRNNV3Dropout(value float32) CudnnRNNV3Attr { 17149 return func(m optionalAttr) { 17150 m["dropout"] = value 17151 } 17152 } 17153 17154 // CudnnRNNV3Seed sets the optional seed attribute to value. 17155 // If not specified, defaults to 0 17156 func CudnnRNNV3Seed(value int64) CudnnRNNV3Attr { 17157 return func(m optionalAttr) { 17158 m["seed"] = value 17159 } 17160 } 17161 17162 // CudnnRNNV3Seed2 sets the optional seed2 attribute to value. 17163 // If not specified, defaults to 0 17164 func CudnnRNNV3Seed2(value int64) CudnnRNNV3Attr { 17165 return func(m optionalAttr) { 17166 m["seed2"] = value 17167 } 17168 } 17169 17170 // CudnnRNNV3IsTraining sets the optional is_training attribute to value. 17171 // If not specified, defaults to true 17172 func CudnnRNNV3IsTraining(value bool) CudnnRNNV3Attr { 17173 return func(m optionalAttr) { 17174 m["is_training"] = value 17175 } 17176 } 17177 17178 // CudnnRNNV3TimeMajor sets the optional time_major attribute to value. 17179 // If not specified, defaults to true 17180 func CudnnRNNV3TimeMajor(value bool) CudnnRNNV3Attr { 17181 return func(m optionalAttr) { 17182 m["time_major"] = value 17183 } 17184 } 17185 17186 // A RNN backed by cuDNN. 17187 // 17188 // Computes the RNN from the input and initial states, with respect to the params 17189 // buffer. Accepts one extra input "sequence_lengths" than CudnnRNN. 17190 // 17191 // rnn_mode: Indicates the type of the RNN model. 17192 // input_mode: Indicates whether there is a linear projection between the input and 17193 // the actual computation before the first layer. 'skip_input' is only allowed 17194 // when input_size == num_units; 'auto_select' implies 'skip_input' when 17195 // input_size == num_units; otherwise, it implies 'linear_input'. 17196 // direction: Indicates whether a bidirectional model will be used. Should be 17197 // "unidirectional" or "bidirectional". 17198 // dropout: Dropout probability. When set to 0., dropout is disabled. 17199 // seed: The 1st part of a seed to initialize dropout. 17200 // seed2: The 2nd part of a seed to initialize dropout. 17201 // input: If time_major is true, this is a 3-D tensor with the shape of 17202 // [seq_length, batch_size, input_size]. If time_major is false, the shape is 17203 // [batch_size, seq_length, input_size]. 17204 // input_h: If time_major is true, this is a 3-D tensor with the shape of 17205 // [num_layer * dir, batch_size, num_units]. If time_major is false, the shape 17206 // is [batch_size, num_layer * dir, num_units]. 17207 // input_c: For LSTM, a 3-D tensor with the shape of 17208 // [num_layer * dir, batch, num_units]. For other models, it is ignored. 17209 // params: A 1-D tensor that contains the weights and biases in an opaque layout. 17210 // The size must be created through CudnnRNNParamsSize, and initialized 17211 // separately. Note that they might not be compatible across different 17212 // generations. So it is a good idea to save and restore 17213 // sequence_lengths: a vector of lengths of each input sequence. 17214 // output: If time_major is true, this is a 3-D tensor with the shape of 17215 // [seq_length, batch_size, dir * num_units]. If time_major is false, the 17216 // shape is [batch_size, seq_length, dir * num_units]. 17217 // output_h: The same shape has input_h. 17218 // output_c: The same shape as input_c for LSTM. An empty tensor for other models. 17219 // is_training: Indicates whether this operation is used for inferenece or 17220 // training. 17221 // time_major: Indicates whether the input/output format is time major or batch 17222 // major. 17223 // reserve_space: An opaque tensor that can be used in backprop calculation. It 17224 // is only produced if is_training is true. 17225 func CudnnRNNV3(scope *Scope, input tf.Output, input_h tf.Output, input_c tf.Output, params tf.Output, sequence_lengths tf.Output, optional ...CudnnRNNV3Attr) (output tf.Output, output_h tf.Output, output_c tf.Output, reserve_space tf.Output, host_reserved tf.Output) { 17226 if scope.Err() != nil { 17227 return 17228 } 17229 attrs := map[string]interface{}{} 17230 for _, a := range optional { 17231 a(attrs) 17232 } 17233 opspec := tf.OpSpec{ 17234 Type: "CudnnRNNV3", 17235 Input: []tf.Input{ 17236 input, input_h, input_c, params, sequence_lengths, 17237 }, 17238 Attrs: attrs, 17239 } 17240 op := scope.AddOperation(opspec) 17241 return op.Output(0), op.Output(1), op.Output(2), op.Output(3), op.Output(4) 17242 } 17243 17244 // Applies softmax to a batched N-D `SparseTensor`. 17245 // 17246 // The inputs represent an N-D SparseTensor with logical shape `[..., B, C]` 17247 // (where `N >= 2`), and with indices sorted in the canonical lexicographic order. 17248 // 17249 // This op is equivalent to applying the normal `tf.nn.softmax()` to each innermost 17250 // logical submatrix with shape `[B, C]`, but with the catch that *the implicitly 17251 // zero elements do not participate*. Specifically, the algorithm is equivalent 17252 // to the following: 17253 // 17254 // (1) Applies `tf.nn.softmax()` to a densified view of each innermost submatrix 17255 // with shape `[B, C]`, along the size-C dimension; 17256 // (2) Masks out the original implicitly-zero locations; 17257 // (3) Renormalizes the remaining elements. 17258 // 17259 // Hence, the `SparseTensor` result has exactly the same non-zero indices and 17260 // shape. 17261 // 17262 // Arguments: 17263 // sp_indices: 2-D. `NNZ x R` matrix with the indices of non-empty values in a 17264 // SparseTensor, in canonical ordering. 17265 // sp_values: 1-D. `NNZ` non-empty values corresponding to `sp_indices`. 17266 // sp_shape: 1-D. Shape of the input SparseTensor. 17267 // 17268 // Returns 1-D. The `NNZ` values for the result `SparseTensor`. 17269 func SparseSoftmax(scope *Scope, sp_indices tf.Output, sp_values tf.Output, sp_shape tf.Output) (output tf.Output) { 17270 if scope.Err() != nil { 17271 return 17272 } 17273 opspec := tf.OpSpec{ 17274 Type: "SparseSoftmax", 17275 Input: []tf.Input{ 17276 sp_indices, sp_values, sp_shape, 17277 }, 17278 } 17279 op := scope.AddOperation(opspec) 17280 return op.Output(0) 17281 } 17282 17283 // Creates a Tensor by indexing into the TensorList. 17284 // 17285 // Each row in the produced Tensor corresponds to the element in the TensorList 17286 // specified by the given index (see `tf.gather`). 17287 // 17288 // input_handle: The input tensor list. 17289 // indices: The indices used to index into the list. 17290 // values: The tensor. 17291 func TensorListGather(scope *Scope, input_handle tf.Output, indices tf.Output, element_shape tf.Output, element_dtype tf.DataType) (values tf.Output) { 17292 if scope.Err() != nil { 17293 return 17294 } 17295 attrs := map[string]interface{}{"element_dtype": element_dtype} 17296 opspec := tf.OpSpec{ 17297 Type: "TensorListGather", 17298 Input: []tf.Input{ 17299 input_handle, indices, element_shape, 17300 }, 17301 Attrs: attrs, 17302 } 17303 op := scope.AddOperation(opspec) 17304 return op.Output(0) 17305 } 17306 17307 // FixedLengthRecordReaderV2Attr is an optional argument to FixedLengthRecordReaderV2. 17308 type FixedLengthRecordReaderV2Attr func(optionalAttr) 17309 17310 // FixedLengthRecordReaderV2HeaderBytes sets the optional header_bytes attribute to value. 17311 // 17312 // value: Number of bytes in the header, defaults to 0. 17313 // If not specified, defaults to 0 17314 func FixedLengthRecordReaderV2HeaderBytes(value int64) FixedLengthRecordReaderV2Attr { 17315 return func(m optionalAttr) { 17316 m["header_bytes"] = value 17317 } 17318 } 17319 17320 // FixedLengthRecordReaderV2FooterBytes sets the optional footer_bytes attribute to value. 17321 // 17322 // value: Number of bytes in the footer, defaults to 0. 17323 // If not specified, defaults to 0 17324 func FixedLengthRecordReaderV2FooterBytes(value int64) FixedLengthRecordReaderV2Attr { 17325 return func(m optionalAttr) { 17326 m["footer_bytes"] = value 17327 } 17328 } 17329 17330 // FixedLengthRecordReaderV2HopBytes sets the optional hop_bytes attribute to value. 17331 // 17332 // value: Number of bytes to hop before each read. Default of 0 means using 17333 // record_bytes. 17334 // If not specified, defaults to 0 17335 func FixedLengthRecordReaderV2HopBytes(value int64) FixedLengthRecordReaderV2Attr { 17336 return func(m optionalAttr) { 17337 m["hop_bytes"] = value 17338 } 17339 } 17340 17341 // FixedLengthRecordReaderV2Container sets the optional container attribute to value. 17342 // 17343 // value: If non-empty, this reader is placed in the given container. 17344 // Otherwise, a default container is used. 17345 // If not specified, defaults to "" 17346 func FixedLengthRecordReaderV2Container(value string) FixedLengthRecordReaderV2Attr { 17347 return func(m optionalAttr) { 17348 m["container"] = value 17349 } 17350 } 17351 17352 // FixedLengthRecordReaderV2SharedName sets the optional shared_name attribute to value. 17353 // 17354 // value: If non-empty, this reader is named in the given bucket 17355 // with this shared_name. Otherwise, the node name is used instead. 17356 // If not specified, defaults to "" 17357 func FixedLengthRecordReaderV2SharedName(value string) FixedLengthRecordReaderV2Attr { 17358 return func(m optionalAttr) { 17359 m["shared_name"] = value 17360 } 17361 } 17362 17363 // FixedLengthRecordReaderV2Encoding sets the optional encoding attribute to value. 17364 // 17365 // value: The type of encoding for the file. Currently ZLIB and GZIP 17366 // are supported. Defaults to none. 17367 // If not specified, defaults to "" 17368 func FixedLengthRecordReaderV2Encoding(value string) FixedLengthRecordReaderV2Attr { 17369 return func(m optionalAttr) { 17370 m["encoding"] = value 17371 } 17372 } 17373 17374 // A Reader that outputs fixed-length records from a file. 17375 // 17376 // Arguments: 17377 // record_bytes: Number of bytes in the record. 17378 // 17379 // Returns The handle to reference the Reader. 17380 func FixedLengthRecordReaderV2(scope *Scope, record_bytes int64, optional ...FixedLengthRecordReaderV2Attr) (reader_handle tf.Output) { 17381 if scope.Err() != nil { 17382 return 17383 } 17384 attrs := map[string]interface{}{"record_bytes": record_bytes} 17385 for _, a := range optional { 17386 a(attrs) 17387 } 17388 opspec := tf.OpSpec{ 17389 Type: "FixedLengthRecordReaderV2", 17390 17391 Attrs: attrs, 17392 } 17393 op := scope.AddOperation(opspec) 17394 return op.Output(0) 17395 } 17396 17397 // ResourceApplyPowerSignAttr is an optional argument to ResourceApplyPowerSign. 17398 type ResourceApplyPowerSignAttr func(optionalAttr) 17399 17400 // ResourceApplyPowerSignUseLocking sets the optional use_locking attribute to value. 17401 // 17402 // value: If `True`, updating of the var and m tensors is 17403 // protected by a lock; otherwise the behavior is undefined, but may exhibit less 17404 // contention. 17405 // If not specified, defaults to false 17406 func ResourceApplyPowerSignUseLocking(value bool) ResourceApplyPowerSignAttr { 17407 return func(m optionalAttr) { 17408 m["use_locking"] = value 17409 } 17410 } 17411 17412 // Update '*var' according to the AddSign update. 17413 // 17414 // m_t <- beta1 * m_{t-1} + (1 - beta1) * g 17415 // update <- exp(logbase * sign_decay * sign(g) * sign(m_t)) * g 17416 // variable <- variable - lr_t * update 17417 // 17418 // Arguments: 17419 // var_: Should be from a Variable(). 17420 // m: Should be from a Variable(). 17421 // lr: Scaling factor. Must be a scalar. 17422 // logbase: Must be a scalar. 17423 // sign_decay: Must be a scalar. 17424 // beta: Must be a scalar. 17425 // grad: The gradient. 17426 // 17427 // Returns the created operation. 17428 func ResourceApplyPowerSign(scope *Scope, var_ tf.Output, m tf.Output, lr tf.Output, logbase tf.Output, sign_decay tf.Output, beta tf.Output, grad tf.Output, optional ...ResourceApplyPowerSignAttr) (o *tf.Operation) { 17429 if scope.Err() != nil { 17430 return 17431 } 17432 attrs := map[string]interface{}{} 17433 for _, a := range optional { 17434 a(attrs) 17435 } 17436 opspec := tf.OpSpec{ 17437 Type: "ResourceApplyPowerSign", 17438 Input: []tf.Input{ 17439 var_, m, lr, logbase, sign_decay, beta, grad, 17440 }, 17441 Attrs: attrs, 17442 } 17443 return scope.AddOperation(opspec) 17444 } 17445 17446 // Connects outputs of an N-way replicated computation to N outputs. 17447 func TPUReplicatedOutput(scope *Scope, input tf.Output, num_replicas int64) (outputs []tf.Output) { 17448 if scope.Err() != nil { 17449 return 17450 } 17451 attrs := map[string]interface{}{"num_replicas": num_replicas} 17452 opspec := tf.OpSpec{ 17453 Type: "TPUReplicatedOutput", 17454 Input: []tf.Input{ 17455 input, 17456 }, 17457 Attrs: attrs, 17458 } 17459 op := scope.AddOperation(opspec) 17460 if scope.Err() != nil { 17461 return 17462 } 17463 var idx int 17464 var err error 17465 if outputs, idx, err = makeOutputList(op, idx, "outputs"); err != nil { 17466 scope.UpdateErr("TPUReplicatedOutput", err) 17467 return 17468 } 17469 return outputs 17470 } 17471 17472 // LoadTPUEmbeddingFTRLParametersAttr is an optional argument to LoadTPUEmbeddingFTRLParameters. 17473 type LoadTPUEmbeddingFTRLParametersAttr func(optionalAttr) 17474 17475 // LoadTPUEmbeddingFTRLParametersTableId sets the optional table_id attribute to value. 17476 // If not specified, defaults to -1 17477 // 17478 // REQUIRES: value >= -1 17479 func LoadTPUEmbeddingFTRLParametersTableId(value int64) LoadTPUEmbeddingFTRLParametersAttr { 17480 return func(m optionalAttr) { 17481 m["table_id"] = value 17482 } 17483 } 17484 17485 // LoadTPUEmbeddingFTRLParametersTableName sets the optional table_name attribute to value. 17486 // If not specified, defaults to "" 17487 func LoadTPUEmbeddingFTRLParametersTableName(value string) LoadTPUEmbeddingFTRLParametersAttr { 17488 return func(m optionalAttr) { 17489 m["table_name"] = value 17490 } 17491 } 17492 17493 // Load FTRL embedding parameters. 17494 // 17495 // An op that loads optimization parameters into HBM for embedding. Must be 17496 // preceded by a ConfigureTPUEmbeddingHost op that sets up the correct 17497 // embedding table configuration. For example, this op is used to install 17498 // parameters that are loaded from a checkpoint before a training loop is 17499 // executed. 17500 // 17501 // Arguments: 17502 // parameters: Value of parameters used in the FTRL optimization algorithm. 17503 // accumulators: Value of accumulators used in the FTRL optimization algorithm. 17504 // linears: Value of linears used in the FTRL optimization algorithm. 17505 // 17506 // 17507 // 17508 // Returns the created operation. 17509 func LoadTPUEmbeddingFTRLParameters(scope *Scope, parameters tf.Output, accumulators tf.Output, linears tf.Output, num_shards int64, shard_id int64, optional ...LoadTPUEmbeddingFTRLParametersAttr) (o *tf.Operation) { 17510 if scope.Err() != nil { 17511 return 17512 } 17513 attrs := map[string]interface{}{"num_shards": num_shards, "shard_id": shard_id} 17514 for _, a := range optional { 17515 a(attrs) 17516 } 17517 opspec := tf.OpSpec{ 17518 Type: "LoadTPUEmbeddingFTRLParameters", 17519 Input: []tf.Input{ 17520 parameters, accumulators, linears, 17521 }, 17522 Attrs: attrs, 17523 } 17524 return scope.AddOperation(opspec) 17525 } 17526 17527 // Returns (x - y)(x - y) element-wise. 17528 // 17529 // *NOTE*: `SquaredDifference` supports broadcasting. More about broadcasting 17530 // [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html) 17531 func SquaredDifference(scope *Scope, x tf.Output, y tf.Output) (z tf.Output) { 17532 if scope.Err() != nil { 17533 return 17534 } 17535 opspec := tf.OpSpec{ 17536 Type: "SquaredDifference", 17537 Input: []tf.Input{ 17538 x, y, 17539 }, 17540 } 17541 op := scope.AddOperation(opspec) 17542 return op.Output(0) 17543 } 17544 17545 // Push an element onto the tensor_array. 17546 // 17547 // Arguments: 17548 // handle: The handle to a TensorArray. 17549 // index: The position to write to inside the TensorArray. 17550 // value: The tensor to write to the TensorArray. 17551 // flow_in: A float scalar that enforces proper chaining of operations. 17552 // 17553 // Returns A float scalar that enforces proper chaining of operations. 17554 func TensorArrayWriteV3(scope *Scope, handle tf.Output, index tf.Output, value tf.Output, flow_in tf.Output) (flow_out tf.Output) { 17555 if scope.Err() != nil { 17556 return 17557 } 17558 opspec := tf.OpSpec{ 17559 Type: "TensorArrayWriteV3", 17560 Input: []tf.Input{ 17561 handle, index, value, flow_in, 17562 }, 17563 } 17564 op := scope.AddOperation(opspec) 17565 return op.Output(0) 17566 } 17567 17568 // RetrieveTPUEmbeddingAdagradParametersAttr is an optional argument to RetrieveTPUEmbeddingAdagradParameters. 17569 type RetrieveTPUEmbeddingAdagradParametersAttr func(optionalAttr) 17570 17571 // RetrieveTPUEmbeddingAdagradParametersTableId sets the optional table_id attribute to value. 17572 // If not specified, defaults to -1 17573 // 17574 // REQUIRES: value >= -1 17575 func RetrieveTPUEmbeddingAdagradParametersTableId(value int64) RetrieveTPUEmbeddingAdagradParametersAttr { 17576 return func(m optionalAttr) { 17577 m["table_id"] = value 17578 } 17579 } 17580 17581 // RetrieveTPUEmbeddingAdagradParametersTableName sets the optional table_name attribute to value. 17582 // If not specified, defaults to "" 17583 func RetrieveTPUEmbeddingAdagradParametersTableName(value string) RetrieveTPUEmbeddingAdagradParametersAttr { 17584 return func(m optionalAttr) { 17585 m["table_name"] = value 17586 } 17587 } 17588 17589 // Retrieve Adagrad embedding parameters. 17590 // 17591 // An op that retrieves optimization parameters from embedding to host 17592 // memory. Must be preceded by a ConfigureTPUEmbeddingHost op that sets up 17593 // the correct embedding table configuration. For example, this op is 17594 // used to retrieve updated parameters before saving a checkpoint. 17595 // 17596 // Returns Parameter parameters updated by the Adagrad optimization algorithm.Parameter accumulators updated by the Adagrad optimization algorithm. 17597 func RetrieveTPUEmbeddingAdagradParameters(scope *Scope, num_shards int64, shard_id int64, optional ...RetrieveTPUEmbeddingAdagradParametersAttr) (parameters tf.Output, accumulators tf.Output) { 17598 if scope.Err() != nil { 17599 return 17600 } 17601 attrs := map[string]interface{}{"num_shards": num_shards, "shard_id": shard_id} 17602 for _, a := range optional { 17603 a(attrs) 17604 } 17605 opspec := tf.OpSpec{ 17606 Type: "RetrieveTPUEmbeddingAdagradParameters", 17607 17608 Attrs: attrs, 17609 } 17610 op := scope.AddOperation(opspec) 17611 return op.Output(0), op.Output(1) 17612 } 17613 17614 // Compare values of `input` to `threshold` and pack resulting bits into a `uint8`. 17615 // 17616 // Each comparison returns a boolean `true` (if `input_value > threshold`) 17617 // or and `false` otherwise. 17618 // 17619 // This operation is useful for Locality-Sensitive-Hashing (LSH) and other 17620 // algorithms that use hashing approximations of cosine and `L2` distances; 17621 // codes can be generated from an input via: 17622 // 17623 // ```python 17624 // codebook_size = 50 17625 // codebook_bits = codebook_size * 32 17626 // codebook = tf.get_variable('codebook', [x.shape[-1].value, codebook_bits], 17627 // dtype=x.dtype, 17628 // initializer=tf.orthogonal_initializer()) 17629 // codes = compare_and_threshold(tf.matmul(x, codebook), threshold=0.) 17630 // codes = tf.bitcast(codes, tf.int32) # go from uint8 to int32 17631 // # now codes has shape x.shape[:-1] + [codebook_size] 17632 // ``` 17633 // 17634 // **NOTE**: Currently, the innermost dimension of the tensor must be divisible 17635 // by 8. 17636 // 17637 // Given an `input` shaped `[s0, s1, ..., s_n]`, the output is 17638 // a `uint8` tensor shaped `[s0, s1, ..., s_n / 8]`. 17639 // 17640 // Arguments: 17641 // input: Values to compare against `threshold` and bitpack. 17642 // threshold: Threshold to compare against. 17643 // 17644 // Returns The bitpacked comparisons. 17645 func CompareAndBitpack(scope *Scope, input tf.Output, threshold tf.Output) (output tf.Output) { 17646 if scope.Err() != nil { 17647 return 17648 } 17649 opspec := tf.OpSpec{ 17650 Type: "CompareAndBitpack", 17651 Input: []tf.Input{ 17652 input, threshold, 17653 }, 17654 } 17655 op := scope.AddOperation(opspec) 17656 return op.Output(0) 17657 } 17658 17659 // QuantizeAndDequantizeV2Attr is an optional argument to QuantizeAndDequantizeV2. 17660 type QuantizeAndDequantizeV2Attr func(optionalAttr) 17661 17662 // QuantizeAndDequantizeV2SignedInput sets the optional signed_input attribute to value. 17663 // 17664 // value: Whether the quantization is signed or unsigned. (actually this parameter should 17665 // have been called <b>`signed_output`</b>) 17666 // If not specified, defaults to true 17667 func QuantizeAndDequantizeV2SignedInput(value bool) QuantizeAndDequantizeV2Attr { 17668 return func(m optionalAttr) { 17669 m["signed_input"] = value 17670 } 17671 } 17672 17673 // QuantizeAndDequantizeV2NumBits sets the optional num_bits attribute to value. 17674 // 17675 // value: The bitwidth of the quantization. 17676 // If not specified, defaults to 8 17677 func QuantizeAndDequantizeV2NumBits(value int64) QuantizeAndDequantizeV2Attr { 17678 return func(m optionalAttr) { 17679 m["num_bits"] = value 17680 } 17681 } 17682 17683 // QuantizeAndDequantizeV2RangeGiven sets the optional range_given attribute to value. 17684 // 17685 // value: Whether the range is given or should be determined from the `input` tensor. 17686 // If not specified, defaults to false 17687 func QuantizeAndDequantizeV2RangeGiven(value bool) QuantizeAndDequantizeV2Attr { 17688 return func(m optionalAttr) { 17689 m["range_given"] = value 17690 } 17691 } 17692 17693 // QuantizeAndDequantizeV2RoundMode sets the optional round_mode attribute to value. 17694 // 17695 // value: The 'round_mode' attribute controls which rounding tie-breaking algorithm is 17696 // used when rounding float values to their quantized equivalents. The following 17697 // rounding modes are currently supported: 17698 // 17699 // * HALF_TO_EVEN: this is the default round_mode. 17700 // * HALF_UP: round towards positive. In this mode 7.5 rounds up to 8 and -7.5 17701 // rounds up to -7. 17702 // 17703 // If not specified, defaults to "HALF_TO_EVEN" 17704 func QuantizeAndDequantizeV2RoundMode(value string) QuantizeAndDequantizeV2Attr { 17705 return func(m optionalAttr) { 17706 m["round_mode"] = value 17707 } 17708 } 17709 17710 // Quantizes then dequantizes a tensor. 17711 // 17712 // This op simulates the precision loss from the quantized forward pass by: 17713 // 17714 // 1. Quantizing the tensor to fixed point numbers, which should match the target 17715 // quantization method when it is used in inference. 17716 // 2. Dequantizing it back to floating point numbers for the following ops, most 17717 // likely matmul. 17718 // 17719 // There are different ways to quantize. This version uses only scaling, so 0.0 17720 // maps to 0. 17721 // 17722 // From the specified 'num_bits' in the quantized output type, it determines 17723 // minimum and maximum representable quantized values. 17724 // 17725 // e.g. 17726 // 17727 // * [-128, 127] for signed, num_bits = 8, or 17728 // * [0, 255] for unsigned, num_bits = 8. 17729 // 17730 // If range_given == False, the initial input_min, input_max will be determined 17731 // automatically as the minimum and maximum values in the input tensor, otherwise 17732 // the specified values of input_min, input_max are used. 17733 // 17734 // Note: If the input_min, input_max are specified, they do not need to equal the 17735 // actual minimum and maximum values in the tensor. e.g. in some cases it may be 17736 // beneficial to specify these values such that the low probability extremes of the 17737 // input distribution are clipped. 17738 // 17739 // This op determines the maximum scale_factor that would map the initial 17740 // [input_min, input_max] range to a range that lies within the representable 17741 // quantized range. 17742 // 17743 // It determines the scale from one of input_min and input_max, then updates the 17744 // other one to maximize the respresentable range. 17745 // 17746 // e.g. 17747 // 17748 // * if the output is signed, num_bits = 8, [input_min, input_max] = [-10.0, 17749 // 5.0]: it would use a scale_factor of -128 / -10.0 = 12.8 In this case, it 17750 // would update input_max to be 127 / 12.8 = 9.921875 17751 // * if the output is signed, num_bits = 8, [input_min, input_max] = [-10.0, 17752 // 10.0]: it would use a scale_factor of 127 / 10.0 = 12.7 In this case, it 17753 // would update input_min to be 128.0 / 12.7 = -10.07874 17754 // * if the output is unsigned, input_min is forced to be 0, and only the 17755 // specified input_max is used. 17756 // 17757 // After determining the scale_factor and updating the input range, it applies the 17758 // following to each value in the 'input' tensor. 17759 // 17760 // output = round(clamp(value, input_min, input_max) * scale_factor) / scale_factor. 17761 // 17762 // The above round function rounds the value based on the given round_mode. 17763 // 17764 // 17765 // Arguments: 17766 // input: Tensor to quantize and then dequantize. 17767 // input_min: If `range_given == True`, this specifies the minimum input value that needs to 17768 // be represented, otherwise it is determined from the min value of the `input` 17769 // tensor. 17770 // input_max: If `range_given == True`, this specifies the maximum input value that needs to 17771 // be represented, otherwise it is determined from the max value of the `input` 17772 // tensor. 17773 func QuantizeAndDequantizeV2(scope *Scope, input tf.Output, input_min tf.Output, input_max tf.Output, optional ...QuantizeAndDequantizeV2Attr) (output tf.Output) { 17774 if scope.Err() != nil { 17775 return 17776 } 17777 attrs := map[string]interface{}{} 17778 for _, a := range optional { 17779 a(attrs) 17780 } 17781 opspec := tf.OpSpec{ 17782 Type: "QuantizeAndDequantizeV2", 17783 Input: []tf.Input{ 17784 input, input_min, input_max, 17785 }, 17786 Attrs: attrs, 17787 } 17788 op := scope.AddOperation(opspec) 17789 return op.Output(0) 17790 } 17791 17792 // A TPU core selector Op. 17793 // 17794 // This Op produces a set of TPU cores (for warm-up) or a single TPU core 17795 // (for regular inference) to execute the TPU program on. The output is 17796 // consumed by TPUPartitionedCall. 17797 // 17798 // Returns A vector 1 or more TPU cores. 17799 func TPUOrdinalSelector(scope *Scope) (device_ordinals tf.Output) { 17800 if scope.Err() != nil { 17801 return 17802 } 17803 opspec := tf.OpSpec{ 17804 Type: "TPUOrdinalSelector", 17805 } 17806 op := scope.AddOperation(opspec) 17807 return op.Output(0) 17808 } 17809 17810 // Looks up keys in a table, outputs the corresponding values. 17811 // 17812 // The tensor `keys` must of the same type as the keys of the table. 17813 // The output `values` is of the type of the table values. 17814 // 17815 // The scalar `default_value` is the value output for keys not present in the 17816 // table. It must also be of the same type as the table values. 17817 // 17818 // Arguments: 17819 // table_handle: Handle to the table. 17820 // keys: Any shape. Keys to look up. 17821 // 17822 // 17823 // Returns Same shape as `keys`. Values found in the table, or `default_values` 17824 // for missing keys. 17825 func LookupTableFindV2(scope *Scope, table_handle tf.Output, keys tf.Output, default_value tf.Output) (values tf.Output) { 17826 if scope.Err() != nil { 17827 return 17828 } 17829 opspec := tf.OpSpec{ 17830 Type: "LookupTableFindV2", 17831 Input: []tf.Input{ 17832 table_handle, keys, default_value, 17833 }, 17834 } 17835 op := scope.AddOperation(opspec) 17836 return op.Output(0) 17837 } 17838 17839 // ResourceSparseApplyRMSPropAttr is an optional argument to ResourceSparseApplyRMSProp. 17840 type ResourceSparseApplyRMSPropAttr func(optionalAttr) 17841 17842 // ResourceSparseApplyRMSPropUseLocking sets the optional use_locking attribute to value. 17843 // 17844 // value: If `True`, updating of the var, ms, and mom tensors is protected 17845 // by a lock; otherwise the behavior is undefined, but may exhibit less 17846 // contention. 17847 // If not specified, defaults to false 17848 func ResourceSparseApplyRMSPropUseLocking(value bool) ResourceSparseApplyRMSPropAttr { 17849 return func(m optionalAttr) { 17850 m["use_locking"] = value 17851 } 17852 } 17853 17854 // Update '*var' according to the RMSProp algorithm. 17855 // 17856 // Note that in dense implementation of this algorithm, ms and mom will 17857 // update even if the grad is zero, but in this sparse implementation, ms 17858 // and mom will not update in iterations during which the grad is zero. 17859 // 17860 // mean_square = decay * mean_square + (1-decay) * gradient ** 2 17861 // Delta = learning_rate * gradient / sqrt(mean_square + epsilon) 17862 // 17863 // ms <- rho * ms_{t-1} + (1-rho) * grad * grad 17864 // mom <- momentum * mom_{t-1} + lr * grad / sqrt(ms + epsilon) 17865 // var <- var - mom 17866 // 17867 // Arguments: 17868 // var_: Should be from a Variable(). 17869 // ms: Should be from a Variable(). 17870 // mom: Should be from a Variable(). 17871 // lr: Scaling factor. Must be a scalar. 17872 // rho: Decay rate. Must be a scalar. 17873 // 17874 // epsilon: Ridge term. Must be a scalar. 17875 // grad: The gradient. 17876 // indices: A vector of indices into the first dimension of var, ms and mom. 17877 // 17878 // Returns the created operation. 17879 func ResourceSparseApplyRMSProp(scope *Scope, var_ tf.Output, ms tf.Output, mom tf.Output, lr tf.Output, rho tf.Output, momentum tf.Output, epsilon tf.Output, grad tf.Output, indices tf.Output, optional ...ResourceSparseApplyRMSPropAttr) (o *tf.Operation) { 17880 if scope.Err() != nil { 17881 return 17882 } 17883 attrs := map[string]interface{}{} 17884 for _, a := range optional { 17885 a(attrs) 17886 } 17887 opspec := tf.OpSpec{ 17888 Type: "ResourceSparseApplyRMSProp", 17889 Input: []tf.Input{ 17890 var_, ms, mom, lr, rho, momentum, epsilon, grad, indices, 17891 }, 17892 Attrs: attrs, 17893 } 17894 return scope.AddOperation(opspec) 17895 } 17896 17897 // Returns the truth value of (x > y) element-wise. 17898 // 17899 // *NOTE*: `Greater` supports broadcasting. More about broadcasting 17900 // [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html) 17901 func Greater(scope *Scope, x tf.Output, y tf.Output) (z tf.Output) { 17902 if scope.Err() != nil { 17903 return 17904 } 17905 opspec := tf.OpSpec{ 17906 Type: "Greater", 17907 Input: []tf.Input{ 17908 x, y, 17909 }, 17910 } 17911 op := scope.AddOperation(opspec) 17912 return op.Output(0) 17913 } 17914 17915 // Creates a TensorList by indexing into a Tensor. 17916 // 17917 // Each member of the TensorList corresponds to one row of the input tensor, 17918 // specified by the given index (see `tf.gather`). 17919 // 17920 // tensor: The input tensor. 17921 // indices: The indices used to index into the list. 17922 // element_shape: The shape of the elements in the list (can be less specified than 17923 // the shape of the tensor). 17924 // num_elements: The size of the output list. Must be large enough to accommodate 17925 // the largest index in indices. If -1, the list is just large enough to include 17926 // the largest index in indices. 17927 // output_handle: The TensorList. 17928 func TensorListScatterV2(scope *Scope, tensor tf.Output, indices tf.Output, element_shape tf.Output, num_elements tf.Output) (output_handle tf.Output) { 17929 if scope.Err() != nil { 17930 return 17931 } 17932 opspec := tf.OpSpec{ 17933 Type: "TensorListScatterV2", 17934 Input: []tf.Input{ 17935 tensor, indices, element_shape, num_elements, 17936 }, 17937 } 17938 op := scope.AddOperation(opspec) 17939 return op.Output(0) 17940 } 17941 17942 // SampleDistortedBoundingBoxAttr is an optional argument to SampleDistortedBoundingBox. 17943 type SampleDistortedBoundingBoxAttr func(optionalAttr) 17944 17945 // SampleDistortedBoundingBoxSeed sets the optional seed attribute to value. 17946 // 17947 // value: If either `seed` or `seed2` are set to non-zero, the random number 17948 // generator is seeded by the given `seed`. Otherwise, it is seeded by a random 17949 // seed. 17950 // If not specified, defaults to 0 17951 func SampleDistortedBoundingBoxSeed(value int64) SampleDistortedBoundingBoxAttr { 17952 return func(m optionalAttr) { 17953 m["seed"] = value 17954 } 17955 } 17956 17957 // SampleDistortedBoundingBoxSeed2 sets the optional seed2 attribute to value. 17958 // 17959 // value: A second seed to avoid seed collision. 17960 // If not specified, defaults to 0 17961 func SampleDistortedBoundingBoxSeed2(value int64) SampleDistortedBoundingBoxAttr { 17962 return func(m optionalAttr) { 17963 m["seed2"] = value 17964 } 17965 } 17966 17967 // SampleDistortedBoundingBoxMinObjectCovered sets the optional min_object_covered attribute to value. 17968 // 17969 // value: The cropped area of the image must contain at least this 17970 // fraction of any bounding box supplied. The value of this parameter should be 17971 // non-negative. In the case of 0, the cropped area does not need to overlap 17972 // any of the bounding boxes supplied. 17973 // If not specified, defaults to 0.1 17974 func SampleDistortedBoundingBoxMinObjectCovered(value float32) SampleDistortedBoundingBoxAttr { 17975 return func(m optionalAttr) { 17976 m["min_object_covered"] = value 17977 } 17978 } 17979 17980 // SampleDistortedBoundingBoxAspectRatioRange sets the optional aspect_ratio_range attribute to value. 17981 // 17982 // value: The cropped area of the image must have an aspect ratio = 17983 // width / height within this range. 17984 // If not specified, defaults to <f:0.75 f:1.33 > 17985 func SampleDistortedBoundingBoxAspectRatioRange(value []float32) SampleDistortedBoundingBoxAttr { 17986 return func(m optionalAttr) { 17987 m["aspect_ratio_range"] = value 17988 } 17989 } 17990 17991 // SampleDistortedBoundingBoxAreaRange sets the optional area_range attribute to value. 17992 // 17993 // value: The cropped area of the image must contain a fraction of the 17994 // supplied image within this range. 17995 // If not specified, defaults to <f:0.05 f:1 > 17996 func SampleDistortedBoundingBoxAreaRange(value []float32) SampleDistortedBoundingBoxAttr { 17997 return func(m optionalAttr) { 17998 m["area_range"] = value 17999 } 18000 } 18001 18002 // SampleDistortedBoundingBoxMaxAttempts sets the optional max_attempts attribute to value. 18003 // 18004 // value: Number of attempts at generating a cropped region of the image 18005 // of the specified constraints. After `max_attempts` failures, return the entire 18006 // image. 18007 // If not specified, defaults to 100 18008 func SampleDistortedBoundingBoxMaxAttempts(value int64) SampleDistortedBoundingBoxAttr { 18009 return func(m optionalAttr) { 18010 m["max_attempts"] = value 18011 } 18012 } 18013 18014 // SampleDistortedBoundingBoxUseImageIfNoBoundingBoxes sets the optional use_image_if_no_bounding_boxes attribute to value. 18015 // 18016 // value: Controls behavior if no bounding boxes supplied. 18017 // If true, assume an implicit bounding box covering the whole input. If false, 18018 // raise an error. 18019 // If not specified, defaults to false 18020 func SampleDistortedBoundingBoxUseImageIfNoBoundingBoxes(value bool) SampleDistortedBoundingBoxAttr { 18021 return func(m optionalAttr) { 18022 m["use_image_if_no_bounding_boxes"] = value 18023 } 18024 } 18025 18026 // Generate a single randomly distorted bounding box for an image. 18027 // 18028 // Bounding box annotations are often supplied in addition to ground-truth labels 18029 // in image recognition or object localization tasks. A common technique for 18030 // training such a system is to randomly distort an image while preserving 18031 // its content, i.e. *data augmentation*. This Op outputs a randomly distorted 18032 // localization of an object, i.e. bounding box, given an `image_size`, 18033 // `bounding_boxes` and a series of constraints. 18034 // 18035 // The output of this Op is a single bounding box that may be used to crop the 18036 // original image. The output is returned as 3 tensors: `begin`, `size` and 18037 // `bboxes`. The first 2 tensors can be fed directly into `tf.slice` to crop the 18038 // image. The latter may be supplied to `tf.image.draw_bounding_boxes` to visualize 18039 // what the bounding box looks like. 18040 // 18041 // Bounding boxes are supplied and returned as `[y_min, x_min, y_max, x_max]`. The 18042 // bounding box coordinates are floats in `[0.0, 1.0]` relative to the width and 18043 // height of the underlying image. 18044 // 18045 // For example, 18046 // 18047 // ```python 18048 // # Generate a single distorted bounding box. 18049 // begin, size, bbox_for_draw = tf.image.sample_distorted_bounding_box( 18050 // tf.shape(image), 18051 // bounding_boxes=bounding_boxes) 18052 // 18053 // # Draw the bounding box in an image summary. 18054 // image_with_box = tf.image.draw_bounding_boxes(tf.expand_dims(image, 0), 18055 // bbox_for_draw) 18056 // tf.summary.image('images_with_box', image_with_box) 18057 // 18058 // # Employ the bounding box to distort the image. 18059 // distorted_image = tf.slice(image, begin, size) 18060 // ``` 18061 // 18062 // Note that if no bounding box information is available, setting 18063 // `use_image_if_no_bounding_boxes = true` will assume there is a single implicit 18064 // bounding box covering the whole image. If `use_image_if_no_bounding_boxes` is 18065 // false and no bounding boxes are supplied, an error is raised. 18066 // 18067 // Arguments: 18068 // image_size: 1-D, containing `[height, width, channels]`. 18069 // bounding_boxes: 3-D with shape `[batch, N, 4]` describing the N bounding boxes 18070 // associated with the image. 18071 // 18072 // Returns 1-D, containing `[offset_height, offset_width, 0]`. Provide as input to 18073 // `tf.slice`.1-D, containing `[target_height, target_width, -1]`. Provide as input to 18074 // `tf.slice`.3-D with shape `[1, 1, 4]` containing the distorted bounding box. 18075 // Provide as input to `tf.image.draw_bounding_boxes`. 18076 func SampleDistortedBoundingBox(scope *Scope, image_size tf.Output, bounding_boxes tf.Output, optional ...SampleDistortedBoundingBoxAttr) (begin tf.Output, size tf.Output, bboxes tf.Output) { 18077 if scope.Err() != nil { 18078 return 18079 } 18080 attrs := map[string]interface{}{} 18081 for _, a := range optional { 18082 a(attrs) 18083 } 18084 opspec := tf.OpSpec{ 18085 Type: "SampleDistortedBoundingBox", 18086 Input: []tf.Input{ 18087 image_size, bounding_boxes, 18088 }, 18089 Attrs: attrs, 18090 } 18091 op := scope.AddOperation(opspec) 18092 return op.Output(0), op.Output(1), op.Output(2) 18093 } 18094 18095 // ResourceScatterNdUpdateAttr is an optional argument to ResourceScatterNdUpdate. 18096 type ResourceScatterNdUpdateAttr func(optionalAttr) 18097 18098 // ResourceScatterNdUpdateUseLocking sets the optional use_locking attribute to value. 18099 // 18100 // value: An optional bool. Defaults to True. If True, the assignment will 18101 // be protected by a lock; otherwise the behavior is undefined, 18102 // but may exhibit less contention. 18103 // If not specified, defaults to true 18104 func ResourceScatterNdUpdateUseLocking(value bool) ResourceScatterNdUpdateAttr { 18105 return func(m optionalAttr) { 18106 m["use_locking"] = value 18107 } 18108 } 18109 18110 // Applies sparse `updates` to individual values or slices within a given 18111 // 18112 // variable according to `indices`. 18113 // 18114 // `ref` is a `Tensor` with rank `P` and `indices` is a `Tensor` of rank `Q`. 18115 // 18116 // `indices` must be integer tensor, containing indices into `ref`. 18117 // It must be shape `[d_0, ..., d_{Q-2}, K]` where `0 < K <= P`. 18118 // 18119 // The innermost dimension of `indices` (with length `K`) corresponds to 18120 // indices into elements (if `K = P`) or slices (if `K < P`) along the `K`th 18121 // dimension of `ref`. 18122 // 18123 // `updates` is `Tensor` of rank `Q-1+P-K` with shape: 18124 // 18125 // ``` 18126 // [d_0, ..., d_{Q-2}, ref.shape[K], ..., ref.shape[P-1]]. 18127 // ``` 18128 // 18129 // For example, say we want to update 4 scattered elements to a rank-1 tensor to 18130 // 8 elements. In Python, that update would look like this: 18131 // 18132 // ```python 18133 // ref = tf.Variable([1, 2, 3, 4, 5, 6, 7, 8]) 18134 // indices = tf.constant([[4], [3], [1] ,[7]]) 18135 // updates = tf.constant([9, 10, 11, 12]) 18136 // update = tf.scatter_nd_update(ref, indices, updates) 18137 // with tf.Session() as sess: 18138 // print sess.run(update) 18139 // ``` 18140 // 18141 // The resulting update to ref would look like this: 18142 // 18143 // [1, 11, 3, 10, 9, 6, 7, 12] 18144 // 18145 // See `tf.scatter_nd` for more details about how to make updates to 18146 // slices. 18147 // 18148 // Arguments: 18149 // ref: A resource handle. Must be from a VarHandleOp. 18150 // indices: A Tensor. Must be one of the following types: int32, int64. 18151 // A tensor of indices into ref. 18152 // updates: A Tensor. Must have the same type as ref. A tensor of updated 18153 // values to add to ref. 18154 // 18155 // Returns the created operation. 18156 func ResourceScatterNdUpdate(scope *Scope, ref tf.Output, indices tf.Output, updates tf.Output, optional ...ResourceScatterNdUpdateAttr) (o *tf.Operation) { 18157 if scope.Err() != nil { 18158 return 18159 } 18160 attrs := map[string]interface{}{} 18161 for _, a := range optional { 18162 a(attrs) 18163 } 18164 opspec := tf.OpSpec{ 18165 Type: "ResourceScatterNdUpdate", 18166 Input: []tf.Input{ 18167 ref, indices, updates, 18168 }, 18169 Attrs: attrs, 18170 } 18171 return scope.AddOperation(opspec) 18172 } 18173 18174 // UnicodeDecodeWithOffsetsAttr is an optional argument to UnicodeDecodeWithOffsets. 18175 type UnicodeDecodeWithOffsetsAttr func(optionalAttr) 18176 18177 // UnicodeDecodeWithOffsetsErrors sets the optional errors attribute to value. 18178 // 18179 // value: Error handling policy when there is invalid formatting found in the input. 18180 // The value of 'strict' will cause the operation to produce a InvalidArgument 18181 // error on any invalid input formatting. A value of 'replace' (the default) will 18182 // cause the operation to replace any invalid formatting in the input with the 18183 // `replacement_char` codepoint. A value of 'ignore' will cause the operation to 18184 // skip any invalid formatting in the input and produce no corresponding output 18185 // character. 18186 // If not specified, defaults to "replace" 18187 func UnicodeDecodeWithOffsetsErrors(value string) UnicodeDecodeWithOffsetsAttr { 18188 return func(m optionalAttr) { 18189 m["errors"] = value 18190 } 18191 } 18192 18193 // UnicodeDecodeWithOffsetsReplacementChar sets the optional replacement_char attribute to value. 18194 // 18195 // value: The replacement character codepoint to be used in place of any invalid 18196 // formatting in the input when `errors='replace'`. Any valid unicode codepoint may 18197 // be used. The default value is the default unicode replacement character is 18198 // 0xFFFD or U+65533.) 18199 // If not specified, defaults to 65533 18200 func UnicodeDecodeWithOffsetsReplacementChar(value int64) UnicodeDecodeWithOffsetsAttr { 18201 return func(m optionalAttr) { 18202 m["replacement_char"] = value 18203 } 18204 } 18205 18206 // UnicodeDecodeWithOffsetsReplaceControlCharacters sets the optional replace_control_characters attribute to value. 18207 // 18208 // value: Whether to replace the C0 control characters (00-1F) with the 18209 // `replacement_char`. Default is false. 18210 // If not specified, defaults to false 18211 func UnicodeDecodeWithOffsetsReplaceControlCharacters(value bool) UnicodeDecodeWithOffsetsAttr { 18212 return func(m optionalAttr) { 18213 m["replace_control_characters"] = value 18214 } 18215 } 18216 18217 // Decodes each string in `input` into a sequence of Unicode code points. 18218 // 18219 // The character codepoints for all strings are returned using a single vector 18220 // `char_values`, with strings expanded to characters in row-major order. 18221 // Similarly, the character start byte offsets are returned using a single vector 18222 // `char_to_byte_starts`, with strings expanded in row-major order. 18223 // 18224 // The `row_splits` tensor indicates where the codepoints and start offsets for 18225 // each input string begin and end within the `char_values` and 18226 // `char_to_byte_starts` tensors. In particular, the values for the `i`th 18227 // string (in row-major order) are stored in the slice 18228 // `[row_splits[i]:row_splits[i+1]]`. Thus: 18229 // 18230 // * `char_values[row_splits[i]+j]` is the Unicode codepoint for the `j`th 18231 // character in the `i`th string (in row-major order). 18232 // * `char_to_bytes_starts[row_splits[i]+j]` is the start byte offset for the `j`th 18233 // character in the `i`th string (in row-major order). 18234 // * `row_splits[i+1] - row_splits[i]` is the number of characters in the `i`th 18235 // string (in row-major order). 18236 // 18237 // Arguments: 18238 // input: The text to be decoded. Can have any shape. Note that the output is flattened 18239 // to a vector of char values. 18240 // input_encoding: Text encoding of the input strings. This is any of the encodings supported 18241 // by ICU ucnv algorithmic converters. Examples: `"UTF-16", "US ASCII", "UTF-8"`. 18242 // 18243 // Returns A 1D int32 tensor containing the row splits.A 1D int32 Tensor containing the decoded codepoints.A 1D int32 Tensor containing the byte index in the input string where each 18244 // character in `char_values` starts. 18245 func UnicodeDecodeWithOffsets(scope *Scope, input tf.Output, input_encoding string, optional ...UnicodeDecodeWithOffsetsAttr) (row_splits tf.Output, char_values tf.Output, char_to_byte_starts tf.Output) { 18246 if scope.Err() != nil { 18247 return 18248 } 18249 attrs := map[string]interface{}{"input_encoding": input_encoding} 18250 for _, a := range optional { 18251 a(attrs) 18252 } 18253 opspec := tf.OpSpec{ 18254 Type: "UnicodeDecodeWithOffsets", 18255 Input: []tf.Input{ 18256 input, 18257 }, 18258 Attrs: attrs, 18259 } 18260 op := scope.AddOperation(opspec) 18261 return op.Output(0), op.Output(1), op.Output(2) 18262 } 18263 18264 // Returns x - y element-wise. 18265 // 18266 // *NOTE*: `Subtract` supports broadcasting. More about broadcasting 18267 // [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html) 18268 func Sub(scope *Scope, x tf.Output, y tf.Output) (z tf.Output) { 18269 if scope.Err() != nil { 18270 return 18271 } 18272 opspec := tf.OpSpec{ 18273 Type: "Sub", 18274 Input: []tf.Input{ 18275 x, y, 18276 }, 18277 } 18278 op := scope.AddOperation(opspec) 18279 return op.Output(0) 18280 } 18281 18282 // LRNAttr is an optional argument to LRN. 18283 type LRNAttr func(optionalAttr) 18284 18285 // LRNDepthRadius sets the optional depth_radius attribute to value. 18286 // 18287 // value: 0-D. Half-width of the 1-D normalization window. 18288 // If not specified, defaults to 5 18289 func LRNDepthRadius(value int64) LRNAttr { 18290 return func(m optionalAttr) { 18291 m["depth_radius"] = value 18292 } 18293 } 18294 18295 // LRNBias sets the optional bias attribute to value. 18296 // 18297 // value: An offset (usually positive to avoid dividing by 0). 18298 // If not specified, defaults to 1 18299 func LRNBias(value float32) LRNAttr { 18300 return func(m optionalAttr) { 18301 m["bias"] = value 18302 } 18303 } 18304 18305 // LRNAlpha sets the optional alpha attribute to value. 18306 // 18307 // value: A scale factor, usually positive. 18308 // If not specified, defaults to 1 18309 func LRNAlpha(value float32) LRNAttr { 18310 return func(m optionalAttr) { 18311 m["alpha"] = value 18312 } 18313 } 18314 18315 // LRNBeta sets the optional beta attribute to value. 18316 // 18317 // value: An exponent. 18318 // If not specified, defaults to 0.5 18319 func LRNBeta(value float32) LRNAttr { 18320 return func(m optionalAttr) { 18321 m["beta"] = value 18322 } 18323 } 18324 18325 // Local Response Normalization. 18326 // 18327 // The 4-D `input` tensor is treated as a 3-D array of 1-D vectors (along the last 18328 // dimension), and each vector is normalized independently. Within a given vector, 18329 // each component is divided by the weighted, squared sum of inputs within 18330 // `depth_radius`. In detail, 18331 // 18332 // sqr_sum[a, b, c, d] = 18333 // sum(input[a, b, c, d - depth_radius : d + depth_radius + 1] ** 2) 18334 // output = input / (bias + alpha * sqr_sum) ** beta 18335 // 18336 // For details, see [Krizhevsky et al., ImageNet classification with deep 18337 // convolutional neural networks (NIPS 2012)](http://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks). 18338 // 18339 // Arguments: 18340 // input: 4-D. 18341 func LRN(scope *Scope, input tf.Output, optional ...LRNAttr) (output tf.Output) { 18342 if scope.Err() != nil { 18343 return 18344 } 18345 attrs := map[string]interface{}{} 18346 for _, a := range optional { 18347 a(attrs) 18348 } 18349 opspec := tf.OpSpec{ 18350 Type: "LRN", 18351 Input: []tf.Input{ 18352 input, 18353 }, 18354 Attrs: attrs, 18355 } 18356 op := scope.AddOperation(opspec) 18357 return op.Output(0) 18358 } 18359 18360 // RetrieveTPUEmbeddingProximalAdagradParametersGradAccumDebugAttr is an optional argument to RetrieveTPUEmbeddingProximalAdagradParametersGradAccumDebug. 18361 type RetrieveTPUEmbeddingProximalAdagradParametersGradAccumDebugAttr func(optionalAttr) 18362 18363 // RetrieveTPUEmbeddingProximalAdagradParametersGradAccumDebugTableId sets the optional table_id attribute to value. 18364 // If not specified, defaults to -1 18365 // 18366 // REQUIRES: value >= -1 18367 func RetrieveTPUEmbeddingProximalAdagradParametersGradAccumDebugTableId(value int64) RetrieveTPUEmbeddingProximalAdagradParametersGradAccumDebugAttr { 18368 return func(m optionalAttr) { 18369 m["table_id"] = value 18370 } 18371 } 18372 18373 // RetrieveTPUEmbeddingProximalAdagradParametersGradAccumDebugTableName sets the optional table_name attribute to value. 18374 // If not specified, defaults to "" 18375 func RetrieveTPUEmbeddingProximalAdagradParametersGradAccumDebugTableName(value string) RetrieveTPUEmbeddingProximalAdagradParametersGradAccumDebugAttr { 18376 return func(m optionalAttr) { 18377 m["table_name"] = value 18378 } 18379 } 18380 18381 // Retrieve proximal Adagrad embedding parameters with debug support. 18382 // 18383 // An op that retrieves optimization parameters from embedding to host 18384 // memory. Must be preceded by a ConfigureTPUEmbeddingHost op that sets up 18385 // the correct embedding table configuration. For example, this op is 18386 // used to retrieve updated parameters before saving a checkpoint. 18387 // 18388 // Returns Parameter parameters updated by the proximal Adagrad optimization algorithm.Parameter accumulators updated by the proximal Adagrad optimization algorithm.Parameter gradient_accumulators updated by the proximal Adagrad optimization algorithm. 18389 func RetrieveTPUEmbeddingProximalAdagradParametersGradAccumDebug(scope *Scope, num_shards int64, shard_id int64, optional ...RetrieveTPUEmbeddingProximalAdagradParametersGradAccumDebugAttr) (parameters tf.Output, accumulators tf.Output, gradient_accumulators tf.Output) { 18390 if scope.Err() != nil { 18391 return 18392 } 18393 attrs := map[string]interface{}{"num_shards": num_shards, "shard_id": shard_id} 18394 for _, a := range optional { 18395 a(attrs) 18396 } 18397 opspec := tf.OpSpec{ 18398 Type: "RetrieveTPUEmbeddingProximalAdagradParametersGradAccumDebug", 18399 18400 Attrs: attrs, 18401 } 18402 op := scope.AddOperation(opspec) 18403 return op.Output(0), op.Output(1), op.Output(2) 18404 } 18405 18406 // ResourceSparseApplyAdagradAttr is an optional argument to ResourceSparseApplyAdagrad. 18407 type ResourceSparseApplyAdagradAttr func(optionalAttr) 18408 18409 // ResourceSparseApplyAdagradUseLocking sets the optional use_locking attribute to value. 18410 // 18411 // value: If `True`, updating of the var and accum tensors will be protected 18412 // by a lock; otherwise the behavior is undefined, but may exhibit less 18413 // contention. 18414 // If not specified, defaults to false 18415 func ResourceSparseApplyAdagradUseLocking(value bool) ResourceSparseApplyAdagradAttr { 18416 return func(m optionalAttr) { 18417 m["use_locking"] = value 18418 } 18419 } 18420 18421 // ResourceSparseApplyAdagradUpdateSlots sets the optional update_slots attribute to value. 18422 // If not specified, defaults to true 18423 func ResourceSparseApplyAdagradUpdateSlots(value bool) ResourceSparseApplyAdagradAttr { 18424 return func(m optionalAttr) { 18425 m["update_slots"] = value 18426 } 18427 } 18428 18429 // Update relevant entries in '*var' and '*accum' according to the adagrad scheme. 18430 // 18431 // That is for rows we have grad for, we update var and accum as follows: 18432 // accum += grad * grad 18433 // var -= lr * grad * (1 / sqrt(accum)) 18434 // 18435 // Arguments: 18436 // var_: Should be from a Variable(). 18437 // accum: Should be from a Variable(). 18438 // lr: Learning rate. Must be a scalar. 18439 // grad: The gradient. 18440 // indices: A vector of indices into the first dimension of var and accum. 18441 // 18442 // Returns the created operation. 18443 func ResourceSparseApplyAdagrad(scope *Scope, var_ tf.Output, accum tf.Output, lr tf.Output, grad tf.Output, indices tf.Output, optional ...ResourceSparseApplyAdagradAttr) (o *tf.Operation) { 18444 if scope.Err() != nil { 18445 return 18446 } 18447 attrs := map[string]interface{}{} 18448 for _, a := range optional { 18449 a(attrs) 18450 } 18451 opspec := tf.OpSpec{ 18452 Type: "ResourceSparseApplyAdagrad", 18453 Input: []tf.Input{ 18454 var_, accum, lr, grad, indices, 18455 }, 18456 Attrs: attrs, 18457 } 18458 return scope.AddOperation(opspec) 18459 } 18460 18461 // LoadTPUEmbeddingMomentumParametersAttr is an optional argument to LoadTPUEmbeddingMomentumParameters. 18462 type LoadTPUEmbeddingMomentumParametersAttr func(optionalAttr) 18463 18464 // LoadTPUEmbeddingMomentumParametersTableId sets the optional table_id attribute to value. 18465 // If not specified, defaults to -1 18466 // 18467 // REQUIRES: value >= -1 18468 func LoadTPUEmbeddingMomentumParametersTableId(value int64) LoadTPUEmbeddingMomentumParametersAttr { 18469 return func(m optionalAttr) { 18470 m["table_id"] = value 18471 } 18472 } 18473 18474 // LoadTPUEmbeddingMomentumParametersTableName sets the optional table_name attribute to value. 18475 // If not specified, defaults to "" 18476 func LoadTPUEmbeddingMomentumParametersTableName(value string) LoadTPUEmbeddingMomentumParametersAttr { 18477 return func(m optionalAttr) { 18478 m["table_name"] = value 18479 } 18480 } 18481 18482 // Load Momentum embedding parameters. 18483 // 18484 // An op that loads optimization parameters into HBM for embedding. Must be 18485 // preceded by a ConfigureTPUEmbeddingHost op that sets up the correct 18486 // embedding table configuration. For example, this op is used to install 18487 // parameters that are loaded from a checkpoint before a training loop is 18488 // executed. 18489 // 18490 // Arguments: 18491 // parameters: Value of parameters used in the Momentum optimization algorithm. 18492 // momenta: Value of momenta used in the Momentum optimization algorithm. 18493 // 18494 // 18495 // 18496 // Returns the created operation. 18497 func LoadTPUEmbeddingMomentumParameters(scope *Scope, parameters tf.Output, momenta tf.Output, num_shards int64, shard_id int64, optional ...LoadTPUEmbeddingMomentumParametersAttr) (o *tf.Operation) { 18498 if scope.Err() != nil { 18499 return 18500 } 18501 attrs := map[string]interface{}{"num_shards": num_shards, "shard_id": shard_id} 18502 for _, a := range optional { 18503 a(attrs) 18504 } 18505 opspec := tf.OpSpec{ 18506 Type: "LoadTPUEmbeddingMomentumParameters", 18507 Input: []tf.Input{ 18508 parameters, momenta, 18509 }, 18510 Attrs: attrs, 18511 } 18512 return scope.AddOperation(opspec) 18513 } 18514 18515 // Assigns sparse updates to the variable referenced by `resource`. 18516 // 18517 // This operation computes 18518 // 18519 // # Scalar indices 18520 // ref[indices, ...] = updates[...] 18521 // 18522 // # Vector indices (for each i) 18523 // ref[indices[i], ...] = updates[i, ...] 18524 // 18525 // # High rank indices (for each i, ..., j) 18526 // ref[indices[i, ..., j], ...] = updates[i, ..., j, ...] 18527 // 18528 // Arguments: 18529 // resource: Should be from a `Variable` node. 18530 // indices: A tensor of indices into the first dimension of `ref`. 18531 // updates: A tensor of updated values to add to `ref`. 18532 // 18533 // Returns the created operation. 18534 func ResourceScatterUpdate(scope *Scope, resource tf.Output, indices tf.Output, updates tf.Output) (o *tf.Operation) { 18535 if scope.Err() != nil { 18536 return 18537 } 18538 opspec := tf.OpSpec{ 18539 Type: "ResourceScatterUpdate", 18540 Input: []tf.Input{ 18541 resource, indices, updates, 18542 }, 18543 } 18544 return scope.AddOperation(opspec) 18545 } 18546 18547 // Elementwise computes the bitwise right-shift of `x` and `y`. 18548 // 18549 // Performs a logical shift for unsigned integer types, and an arithmetic shift 18550 // for signed integer types. 18551 // 18552 // If `y` is negative, or greater than or equal to than the width of `x` in bits 18553 // the result is implementation defined. 18554 func RightShift(scope *Scope, x tf.Output, y tf.Output) (z tf.Output) { 18555 if scope.Err() != nil { 18556 return 18557 } 18558 opspec := tf.OpSpec{ 18559 Type: "RightShift", 18560 Input: []tf.Input{ 18561 x, y, 18562 }, 18563 } 18564 op := scope.AddOperation(opspec) 18565 return op.Output(0) 18566 } 18567 18568 // TensorListStackAttr is an optional argument to TensorListStack. 18569 type TensorListStackAttr func(optionalAttr) 18570 18571 // TensorListStackNumElements sets the optional num_elements attribute to value. 18572 // If not specified, defaults to -1 18573 func TensorListStackNumElements(value int64) TensorListStackAttr { 18574 return func(m optionalAttr) { 18575 m["num_elements"] = value 18576 } 18577 } 18578 18579 // Stacks all tensors in the list. 18580 // 18581 // Requires that all tensors have the same shape. 18582 // 18583 // input_handle: the input list 18584 // tensor: the gathered result 18585 // num_elements: optional. If not -1, the number of elements in the list. 18586 // 18587 func TensorListStack(scope *Scope, input_handle tf.Output, element_shape tf.Output, element_dtype tf.DataType, optional ...TensorListStackAttr) (tensor tf.Output) { 18588 if scope.Err() != nil { 18589 return 18590 } 18591 attrs := map[string]interface{}{"element_dtype": element_dtype} 18592 for _, a := range optional { 18593 a(attrs) 18594 } 18595 opspec := tf.OpSpec{ 18596 Type: "TensorListStack", 18597 Input: []tf.Input{ 18598 input_handle, element_shape, 18599 }, 18600 Attrs: attrs, 18601 } 18602 op := scope.AddOperation(opspec) 18603 return op.Output(0) 18604 } 18605 18606 // A placeholder op for a value that will be fed into the computation. 18607 // 18608 // Arguments: 18609 // dtype: The type of elements in the tensor. 18610 // shape: The shape of the tensor. 18611 // 18612 // Returns A tensor that will be provided using the infeed mechanism. 18613 func InfeedDequeue(scope *Scope, dtype tf.DataType, shape tf.Shape) (output tf.Output) { 18614 if scope.Err() != nil { 18615 return 18616 } 18617 attrs := map[string]interface{}{"dtype": dtype, "shape": shape} 18618 opspec := tf.OpSpec{ 18619 Type: "InfeedDequeue", 18620 18621 Attrs: attrs, 18622 } 18623 op := scope.AddOperation(opspec) 18624 return op.Output(0) 18625 } 18626 18627 // StatelessRandomUniformAttr is an optional argument to StatelessRandomUniform. 18628 type StatelessRandomUniformAttr func(optionalAttr) 18629 18630 // StatelessRandomUniformDtype sets the optional dtype attribute to value. 18631 // 18632 // value: The type of the output. 18633 // If not specified, defaults to DT_FLOAT 18634 func StatelessRandomUniformDtype(value tf.DataType) StatelessRandomUniformAttr { 18635 return func(m optionalAttr) { 18636 m["dtype"] = value 18637 } 18638 } 18639 18640 // Outputs deterministic pseudorandom random values from a uniform distribution. 18641 // 18642 // The generated values follow a uniform distribution in the range `[0, 1)`. The 18643 // lower bound 0 is included in the range, while the upper bound 1 is excluded. 18644 // 18645 // The outputs are a deterministic function of `shape` and `seed`. 18646 // 18647 // Arguments: 18648 // shape: The shape of the output tensor. 18649 // seed: 2 seeds (shape [2]). 18650 // 18651 // Returns Random values with specified shape. 18652 func StatelessRandomUniform(scope *Scope, shape tf.Output, seed tf.Output, optional ...StatelessRandomUniformAttr) (output tf.Output) { 18653 if scope.Err() != nil { 18654 return 18655 } 18656 attrs := map[string]interface{}{} 18657 for _, a := range optional { 18658 a(attrs) 18659 } 18660 opspec := tf.OpSpec{ 18661 Type: "StatelessRandomUniform", 18662 Input: []tf.Input{ 18663 shape, seed, 18664 }, 18665 Attrs: attrs, 18666 } 18667 op := scope.AddOperation(opspec) 18668 return op.Output(0) 18669 } 18670 18671 // Makes its input available to the next iteration. 18672 // 18673 // Arguments: 18674 // data: The tensor to be made available to the next iteration. 18675 // 18676 // Returns The same tensor as `data`. 18677 func NextIteration(scope *Scope, data tf.Output) (output tf.Output) { 18678 if scope.Err() != nil { 18679 return 18680 } 18681 opspec := tf.OpSpec{ 18682 Type: "NextIteration", 18683 Input: []tf.Input{ 18684 data, 18685 }, 18686 } 18687 op := scope.AddOperation(opspec) 18688 return op.Output(0) 18689 } 18690 18691 // Output a fact about factorials. 18692 func Fact(scope *Scope) (fact tf.Output) { 18693 if scope.Err() != nil { 18694 return 18695 } 18696 opspec := tf.OpSpec{ 18697 Type: "Fact", 18698 } 18699 op := scope.AddOperation(opspec) 18700 return op.Output(0) 18701 } 18702 18703 // Returns the truth value of x AND y element-wise. 18704 // 18705 // *NOTE*: `LogicalAnd` supports broadcasting. More about broadcasting 18706 // [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html) 18707 func LogicalAnd(scope *Scope, x tf.Output, y tf.Output) (z tf.Output) { 18708 if scope.Err() != nil { 18709 return 18710 } 18711 opspec := tf.OpSpec{ 18712 Type: "LogicalAnd", 18713 Input: []tf.Input{ 18714 x, y, 18715 }, 18716 } 18717 op := scope.AddOperation(opspec) 18718 return op.Output(0) 18719 } 18720 18721 // GenerateVocabRemappingAttr is an optional argument to GenerateVocabRemapping. 18722 type GenerateVocabRemappingAttr func(optionalAttr) 18723 18724 // GenerateVocabRemappingOldVocabSize sets the optional old_vocab_size attribute to value. 18725 // 18726 // value: Number of entries in the old vocab file to consider. If -1, 18727 // use the entire old vocabulary. 18728 // If not specified, defaults to -1 18729 // 18730 // REQUIRES: value >= -1 18731 func GenerateVocabRemappingOldVocabSize(value int64) GenerateVocabRemappingAttr { 18732 return func(m optionalAttr) { 18733 m["old_vocab_size"] = value 18734 } 18735 } 18736 18737 // Given a path to new and old vocabulary files, returns a remapping Tensor of 18738 // 18739 // length `num_new_vocab`, where `remapping[i]` contains the row number in the old 18740 // vocabulary that corresponds to row `i` in the new vocabulary (starting at line 18741 // `new_vocab_offset` and up to `num_new_vocab` entities), or `-1` if entry `i` 18742 // in the new vocabulary is not in the old vocabulary. The old vocabulary is 18743 // constrained to the first `old_vocab_size` entries if `old_vocab_size` is not the 18744 // default value of -1. 18745 // 18746 // `num_vocab_offset` enables 18747 // use in the partitioned variable case, and should generally be set through 18748 // examining partitioning info. The format of the files should be a text file, 18749 // with each line containing a single entity within the vocabulary. 18750 // 18751 // For example, with `new_vocab_file` a text file containing each of the following 18752 // elements on a single line: `[f0, f1, f2, f3]`, old_vocab_file = [f1, f0, f3], 18753 // `num_new_vocab = 3, new_vocab_offset = 1`, the returned remapping would be 18754 // `[0, -1, 2]`. 18755 // 18756 // The op also returns a count of how many entries in the new vocabulary 18757 // were present in the old vocabulary, which is used to calculate the number of 18758 // values to initialize in a weight matrix remapping 18759 // 18760 // This functionality can be used to remap both row vocabularies (typically, 18761 // features) and column vocabularies (typically, classes) from TensorFlow 18762 // checkpoints. Note that the partitioning logic relies on contiguous vocabularies 18763 // corresponding to div-partitioned variables. Moreover, the underlying remapping 18764 // uses an IndexTable (as opposed to an inexact CuckooTable), so client code should 18765 // use the corresponding index_table_from_file() as the FeatureColumn framework 18766 // does (as opposed to tf.feature_to_id(), which uses a CuckooTable). 18767 // 18768 // Arguments: 18769 // new_vocab_file: Path to the new vocab file. 18770 // old_vocab_file: Path to the old vocab file. 18771 // new_vocab_offset: How many entries into the new vocab file to start reading. 18772 // num_new_vocab: Number of entries in the new vocab file to remap. 18773 // 18774 // Returns A Tensor of length num_new_vocab where the element at index i 18775 // is equal to the old ID that maps to the new ID i. This element is -1 for any 18776 // new ID that is not found in the old vocabulary.Number of new vocab entries found in old vocab. 18777 func GenerateVocabRemapping(scope *Scope, new_vocab_file tf.Output, old_vocab_file tf.Output, new_vocab_offset int64, num_new_vocab int64, optional ...GenerateVocabRemappingAttr) (remapping tf.Output, num_present tf.Output) { 18778 if scope.Err() != nil { 18779 return 18780 } 18781 attrs := map[string]interface{}{"new_vocab_offset": new_vocab_offset, "num_new_vocab": num_new_vocab} 18782 for _, a := range optional { 18783 a(attrs) 18784 } 18785 opspec := tf.OpSpec{ 18786 Type: "GenerateVocabRemapping", 18787 Input: []tf.Input{ 18788 new_vocab_file, old_vocab_file, 18789 }, 18790 Attrs: attrs, 18791 } 18792 op := scope.AddOperation(opspec) 18793 return op.Output(0), op.Output(1) 18794 } 18795 18796 // Says whether the targets are in the top `K` predictions. 18797 // 18798 // This outputs a `batch_size` bool array, an entry `out[i]` is `true` if the 18799 // prediction for the target class is among the top `k` predictions among 18800 // all predictions for example `i`. Note that the behavior of `InTopK` differs 18801 // from the `TopK` op in its handling of ties; if multiple classes have the 18802 // same prediction value and straddle the top-`k` boundary, all of those 18803 // classes are considered to be in the top `k`. 18804 // 18805 // More formally, let 18806 // 18807 // \\(predictions_i\\) be the predictions for all classes for example `i`, 18808 // \\(targets_i\\) be the target class for example `i`, 18809 // \\(out_i\\) be the output for example `i`, 18810 // 18811 // $$out_i = predictions_{i, targets_i} \in TopKIncludingTies(predictions_i)$$ 18812 // 18813 // Arguments: 18814 // predictions: A `batch_size` x `classes` tensor. 18815 // targets: A `batch_size` vector of class ids. 18816 // k: Number of top elements to look at for computing precision. 18817 // 18818 // Returns Computed Precision at `k` as a `bool Tensor`. 18819 func InTopK(scope *Scope, predictions tf.Output, targets tf.Output, k int64) (precision tf.Output) { 18820 if scope.Err() != nil { 18821 return 18822 } 18823 attrs := map[string]interface{}{"k": k} 18824 opspec := tf.OpSpec{ 18825 Type: "InTopK", 18826 Input: []tf.Input{ 18827 predictions, targets, 18828 }, 18829 Attrs: attrs, 18830 } 18831 op := scope.AddOperation(opspec) 18832 return op.Output(0) 18833 } 18834 18835 // RetrieveTPUEmbeddingAdagradParametersGradAccumDebugAttr is an optional argument to RetrieveTPUEmbeddingAdagradParametersGradAccumDebug. 18836 type RetrieveTPUEmbeddingAdagradParametersGradAccumDebugAttr func(optionalAttr) 18837 18838 // RetrieveTPUEmbeddingAdagradParametersGradAccumDebugTableId sets the optional table_id attribute to value. 18839 // If not specified, defaults to -1 18840 // 18841 // REQUIRES: value >= -1 18842 func RetrieveTPUEmbeddingAdagradParametersGradAccumDebugTableId(value int64) RetrieveTPUEmbeddingAdagradParametersGradAccumDebugAttr { 18843 return func(m optionalAttr) { 18844 m["table_id"] = value 18845 } 18846 } 18847 18848 // RetrieveTPUEmbeddingAdagradParametersGradAccumDebugTableName sets the optional table_name attribute to value. 18849 // If not specified, defaults to "" 18850 func RetrieveTPUEmbeddingAdagradParametersGradAccumDebugTableName(value string) RetrieveTPUEmbeddingAdagradParametersGradAccumDebugAttr { 18851 return func(m optionalAttr) { 18852 m["table_name"] = value 18853 } 18854 } 18855 18856 // Retrieve Adagrad embedding parameters with debug support. 18857 // 18858 // An op that retrieves optimization parameters from embedding to host 18859 // memory. Must be preceded by a ConfigureTPUEmbeddingHost op that sets up 18860 // the correct embedding table configuration. For example, this op is 18861 // used to retrieve updated parameters before saving a checkpoint. 18862 // 18863 // Returns Parameter parameters updated by the Adagrad optimization algorithm.Parameter accumulators updated by the Adagrad optimization algorithm.Parameter gradient_accumulators updated by the Adagrad optimization algorithm. 18864 func RetrieveTPUEmbeddingAdagradParametersGradAccumDebug(scope *Scope, num_shards int64, shard_id int64, optional ...RetrieveTPUEmbeddingAdagradParametersGradAccumDebugAttr) (parameters tf.Output, accumulators tf.Output, gradient_accumulators tf.Output) { 18865 if scope.Err() != nil { 18866 return 18867 } 18868 attrs := map[string]interface{}{"num_shards": num_shards, "shard_id": shard_id} 18869 for _, a := range optional { 18870 a(attrs) 18871 } 18872 opspec := tf.OpSpec{ 18873 Type: "RetrieveTPUEmbeddingAdagradParametersGradAccumDebug", 18874 18875 Attrs: attrs, 18876 } 18877 op := scope.AddOperation(opspec) 18878 return op.Output(0), op.Output(1), op.Output(2) 18879 } 18880 18881 // This op consumes a lock created by `MutexLock`. 18882 // 18883 // This op exists to consume a tensor created by `MutexLock` (other than 18884 // direct control dependencies). It should be the only that consumes the tensor, 18885 // and will raise an error if it is not. Its only purpose is to keep the 18886 // mutex lock tensor alive until it is consumed by this op. 18887 // 18888 // **NOTE**: This operation must run on the same device as its input. This may 18889 // be enforced via the `colocate_with` mechanism. 18890 // 18891 // Arguments: 18892 // mutex_lock: A tensor returned by `MutexLock`. 18893 // 18894 // Returns the created operation. 18895 func ConsumeMutexLock(scope *Scope, mutex_lock tf.Output) (o *tf.Operation) { 18896 if scope.Err() != nil { 18897 return 18898 } 18899 opspec := tf.OpSpec{ 18900 Type: "ConsumeMutexLock", 18901 Input: []tf.Input{ 18902 mutex_lock, 18903 }, 18904 } 18905 return scope.AddOperation(opspec) 18906 } 18907 18908 // ResourceScatterNdAddAttr is an optional argument to ResourceScatterNdAdd. 18909 type ResourceScatterNdAddAttr func(optionalAttr) 18910 18911 // ResourceScatterNdAddUseLocking sets the optional use_locking attribute to value. 18912 // 18913 // value: An optional bool. Defaults to True. If True, the assignment will 18914 // be protected by a lock; otherwise the behavior is undefined, 18915 // but may exhibit less contention. 18916 // If not specified, defaults to true 18917 func ResourceScatterNdAddUseLocking(value bool) ResourceScatterNdAddAttr { 18918 return func(m optionalAttr) { 18919 m["use_locking"] = value 18920 } 18921 } 18922 18923 // Applies sparse addition to individual values or slices in a Variable. 18924 // 18925 // `ref` is a `Tensor` with rank `P` and `indices` is a `Tensor` of rank `Q`. 18926 // 18927 // `indices` must be integer tensor, containing indices into `ref`. 18928 // It must be shape `[d_0, ..., d_{Q-2}, K]` where `0 < K <= P`. 18929 // 18930 // The innermost dimension of `indices` (with length `K`) corresponds to 18931 // indices into elements (if `K = P`) or slices (if `K < P`) along the `K`th 18932 // dimension of `ref`. 18933 // 18934 // `updates` is `Tensor` of rank `Q-1+P-K` with shape: 18935 // 18936 // ``` 18937 // [d_0, ..., d_{Q-2}, ref.shape[K], ..., ref.shape[P-1]] 18938 // ``` 18939 // 18940 // For example, say we want to add 4 scattered elements to a rank-1 tensor to 18941 // 8 elements. In Python, that addition would look like this: 18942 // 18943 // ```python 18944 // ref = tf.Variable([1, 2, 3, 4, 5, 6, 7, 8], use_resource=True) 18945 // indices = tf.constant([[4], [3], [1], [7]]) 18946 // updates = tf.constant([9, 10, 11, 12]) 18947 // add = tf.scatter_nd_add(ref, indices, updates) 18948 // with tf.Session() as sess: 18949 // print sess.run(add) 18950 // ``` 18951 // 18952 // The resulting update to ref would look like this: 18953 // 18954 // [1, 13, 3, 14, 14, 6, 7, 20] 18955 // 18956 // See `tf.scatter_nd` for more details about how to make updates to 18957 // slices. 18958 // 18959 // Arguments: 18960 // ref: A resource handle. Must be from a VarHandleOp. 18961 // indices: A Tensor. Must be one of the following types: int32, int64. 18962 // A tensor of indices into ref. 18963 // updates: A Tensor. Must have the same type as ref. A tensor of 18964 // values to add to ref. 18965 // 18966 // Returns the created operation. 18967 func ResourceScatterNdAdd(scope *Scope, ref tf.Output, indices tf.Output, updates tf.Output, optional ...ResourceScatterNdAddAttr) (o *tf.Operation) { 18968 if scope.Err() != nil { 18969 return 18970 } 18971 attrs := map[string]interface{}{} 18972 for _, a := range optional { 18973 a(attrs) 18974 } 18975 opspec := tf.OpSpec{ 18976 Type: "ResourceScatterNdAdd", 18977 Input: []tf.Input{ 18978 ref, indices, updates, 18979 }, 18980 Attrs: attrs, 18981 } 18982 return scope.AddOperation(opspec) 18983 } 18984 18985 // Replaces the contents of the table with the specified keys and values. 18986 // 18987 // The tensor `keys` must be of the same type as the keys of the table. 18988 // The tensor `values` must be of the type of the table values. 18989 // 18990 // Arguments: 18991 // table_handle: Handle to the table. 18992 // keys: Any shape. Keys to look up. 18993 // values: Values to associate with keys. 18994 // 18995 // Returns the created operation. 18996 func LookupTableImportV2(scope *Scope, table_handle tf.Output, keys tf.Output, values tf.Output) (o *tf.Operation) { 18997 if scope.Err() != nil { 18998 return 18999 } 19000 opspec := tf.OpSpec{ 19001 Type: "LookupTableImportV2", 19002 Input: []tf.Input{ 19003 table_handle, keys, values, 19004 }, 19005 } 19006 return scope.AddOperation(opspec) 19007 } 19008 19009 // Worker heartbeat op. 19010 // 19011 // Heartbeats may be sent periodically to indicate the coordinator is still active, 19012 // to retrieve the current worker status and to expedite shutdown when necessary. 19013 // 19014 // Arguments: 19015 // request: A string tensor containing a serialized WorkerHeartbeatRequest 19016 // 19017 // Returns A string tensor containing a serialized WorkerHeartbeatResponse 19018 func WorkerHeartbeat(scope *Scope, request tf.Output) (response tf.Output) { 19019 if scope.Err() != nil { 19020 return 19021 } 19022 opspec := tf.OpSpec{ 19023 Type: "WorkerHeartbeat", 19024 Input: []tf.Input{ 19025 request, 19026 }, 19027 } 19028 op := scope.AddOperation(opspec) 19029 return op.Output(0) 19030 } 19031 19032 // Returns the truth value of (x <= y) element-wise. 19033 // 19034 // *NOTE*: `LessEqual` supports broadcasting. More about broadcasting 19035 // [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html) 19036 func LessEqual(scope *Scope, x tf.Output, y tf.Output) (z tf.Output) { 19037 if scope.Err() != nil { 19038 return 19039 } 19040 opspec := tf.OpSpec{ 19041 Type: "LessEqual", 19042 Input: []tf.Input{ 19043 x, y, 19044 }, 19045 } 19046 op := scope.AddOperation(opspec) 19047 return op.Output(0) 19048 } 19049 19050 // EnqueueTPUEmbeddingIntegerBatchAttr is an optional argument to EnqueueTPUEmbeddingIntegerBatch. 19051 type EnqueueTPUEmbeddingIntegerBatchAttr func(optionalAttr) 19052 19053 // EnqueueTPUEmbeddingIntegerBatchDeviceOrdinal sets the optional device_ordinal attribute to value. 19054 // 19055 // value: The TPU device to use. Should be >= 0 and less than the number 19056 // of TPU cores in the task on which the node is placed. 19057 // If not specified, defaults to -1 19058 func EnqueueTPUEmbeddingIntegerBatchDeviceOrdinal(value int64) EnqueueTPUEmbeddingIntegerBatchAttr { 19059 return func(m optionalAttr) { 19060 m["device_ordinal"] = value 19061 } 19062 } 19063 19064 // An op that enqueues a list of input batch tensors to TPUEmbedding. 19065 // 19066 // Arguments: 19067 // batch: A list of 1D tensors, one for each embedding table, containing the 19068 // indices into the tables. 19069 // mode_override: A string input that overrides the mode specified in the 19070 // TPUEmbeddingConfiguration. Supported values are {'unspecified', 'inference', 19071 // 'training', 'backward_pass_only'}. When set to 'unspecified', the mode set 19072 // in TPUEmbeddingConfiguration is used, otherwise mode_override is used. 19073 // 19074 // Returns the created operation. 19075 func EnqueueTPUEmbeddingIntegerBatch(scope *Scope, batch []tf.Output, mode_override tf.Output, optional ...EnqueueTPUEmbeddingIntegerBatchAttr) (o *tf.Operation) { 19076 if scope.Err() != nil { 19077 return 19078 } 19079 attrs := map[string]interface{}{} 19080 for _, a := range optional { 19081 a(attrs) 19082 } 19083 opspec := tf.OpSpec{ 19084 Type: "EnqueueTPUEmbeddingIntegerBatch", 19085 Input: []tf.Input{ 19086 tf.OutputList(batch), mode_override, 19087 }, 19088 Attrs: attrs, 19089 } 19090 return scope.AddOperation(opspec) 19091 } 19092 19093 // An op that receives embedding activations on the TPU. 19094 // 19095 // The TPU system performs the embedding lookups and aggregations specified by 19096 // the arguments to TPUEmbeddingEnqueue(Integer/Sparse/SparseTensor)Batch. The 19097 // results of these aggregations are visible to the Tensorflow Graph as the 19098 // outputs of a RecvTPUEmbeddingActivations op. This op returns a list containing 19099 // one Tensor of activations per table specified in the model. There can be at 19100 // most one RecvTPUEmbeddingActivations op in the TPU graph. 19101 // 19102 // Arguments: 19103 // num_outputs: The number of output activation tensors, equal to the number of 19104 // embedding tables in the model. 19105 // config: Serialized TPUEmbeddingConfiguration proto. 19106 // 19107 // Returns A TensorList of embedding activations containing one Tensor per 19108 // embedding table in the model. 19109 func RecvTPUEmbeddingActivations(scope *Scope, num_outputs int64, config string) (outputs []tf.Output) { 19110 if scope.Err() != nil { 19111 return 19112 } 19113 attrs := map[string]interface{}{"num_outputs": num_outputs, "config": config} 19114 opspec := tf.OpSpec{ 19115 Type: "RecvTPUEmbeddingActivations", 19116 19117 Attrs: attrs, 19118 } 19119 op := scope.AddOperation(opspec) 19120 if scope.Err() != nil { 19121 return 19122 } 19123 var idx int 19124 var err error 19125 if outputs, idx, err = makeOutputList(op, idx, "outputs"); err != nil { 19126 scope.UpdateErr("RecvTPUEmbeddingActivations", err) 19127 return 19128 } 19129 return outputs 19130 } 19131 19132 // Selects elements from `x` or `y`, depending on `condition`. 19133 // 19134 // The `x`, and `y` tensors must all have the same shape, and the 19135 // output will also have that shape. 19136 // 19137 // The `condition` tensor must be a scalar if `x` and `y` are scalars. 19138 // If `x` and `y` are vectors or higher rank, then `condition` must be either a 19139 // scalar, a vector with size matching the first dimension of `x`, or must have 19140 // the same shape as `x`. 19141 // 19142 // The `condition` tensor acts as a mask that chooses, based on the value at each 19143 // element, whether the corresponding element / row in the output should be 19144 // taken from `x` (if true) or `y` (if false). 19145 // 19146 // If `condition` is a vector and `x` and `y` are higher rank matrices, then 19147 // it chooses which row (outer dimension) to copy from `x` and `y`. 19148 // If `condition` has the same shape as `x` and `y`, then it chooses which 19149 // element to copy from `x` and `y`. 19150 // 19151 // For example: 19152 // 19153 // ```python 19154 // # 'condition' tensor is [[True, False] 19155 // # [False, True]] 19156 // # 't' is [[1, 2], 19157 // # [3, 4]] 19158 // # 'e' is [[5, 6], 19159 // # [7, 8]] 19160 // select(condition, t, e) # => [[1, 6], [7, 4]] 19161 // 19162 // 19163 // # 'condition' tensor is [True, False] 19164 // # 't' is [[1, 2], 19165 // # [3, 4]] 19166 // # 'e' is [[5, 6], 19167 // # [7, 8]] 19168 // select(condition, t, e) ==> [[1, 2], 19169 // [7, 8]] 19170 // 19171 // ``` 19172 // 19173 // Arguments: 19174 // 19175 // x: = A `Tensor` which may have the same shape as `condition`. 19176 // If `condition` is rank 1, `x` may have higher rank, 19177 // but its first dimension must match the size of `condition`. 19178 // y: = A `Tensor` with the same type and shape as `x`. 19179 // 19180 // Returns = A `Tensor` with the same type and shape as `x` and `y`. 19181 func Select(scope *Scope, condition tf.Output, x tf.Output, y tf.Output) (output tf.Output) { 19182 if scope.Err() != nil { 19183 return 19184 } 19185 opspec := tf.OpSpec{ 19186 Type: "Select", 19187 Input: []tf.Input{ 19188 condition, x, y, 19189 }, 19190 } 19191 op := scope.AddOperation(opspec) 19192 return op.Output(0) 19193 } 19194 19195 // Returns the set of files matching one or more glob patterns. 19196 // 19197 // Note that this routine only supports wildcard characters in the 19198 // basename portion of the pattern, not in the directory portion. 19199 // Note also that the order of filenames returned can be non-deterministic. 19200 // 19201 // Arguments: 19202 // pattern: Shell wildcard pattern(s). Scalar or vector of type string. 19203 // 19204 // Returns A vector of matching filenames. 19205 func MatchingFiles(scope *Scope, pattern tf.Output) (filenames tf.Output) { 19206 if scope.Err() != nil { 19207 return 19208 } 19209 opspec := tf.OpSpec{ 19210 Type: "MatchingFiles", 19211 Input: []tf.Input{ 19212 pattern, 19213 }, 19214 } 19215 op := scope.AddOperation(opspec) 19216 return op.Output(0) 19217 } 19218 19219 // SqueezeAttr is an optional argument to Squeeze. 19220 type SqueezeAttr func(optionalAttr) 19221 19222 // SqueezeAxis sets the optional axis attribute to value. 19223 // 19224 // value: If specified, only squeezes the dimensions listed. The dimension 19225 // index starts at 0. It is an error to squeeze a dimension that is not 1. Must 19226 // be in the range `[-rank(input), rank(input))`. 19227 // If not specified, defaults to <> 19228 // 19229 // REQUIRES: len(value) >= 0 19230 func SqueezeAxis(value []int64) SqueezeAttr { 19231 return func(m optionalAttr) { 19232 m["squeeze_dims"] = value 19233 } 19234 } 19235 19236 // Removes dimensions of size 1 from the shape of a tensor. 19237 // 19238 // Given a tensor `input`, this operation returns a tensor of the same type with 19239 // all dimensions of size 1 removed. If you don't want to remove all size 1 19240 // dimensions, you can remove specific size 1 dimensions by specifying 19241 // `axis`. 19242 // 19243 // For example: 19244 // 19245 // ``` 19246 // # 't' is a tensor of shape [1, 2, 1, 3, 1, 1] 19247 // shape(squeeze(t)) ==> [2, 3] 19248 // ``` 19249 // 19250 // Or, to remove specific size 1 dimensions: 19251 // 19252 // ``` 19253 // # 't' is a tensor of shape [1, 2, 1, 3, 1, 1] 19254 // shape(squeeze(t, [2, 4])) ==> [1, 2, 3, 1] 19255 // ``` 19256 // 19257 // Arguments: 19258 // input: The `input` to squeeze. 19259 // 19260 // Returns Contains the same data as `input`, but has one or more dimensions of 19261 // size 1 removed. 19262 func Squeeze(scope *Scope, input tf.Output, optional ...SqueezeAttr) (output tf.Output) { 19263 if scope.Err() != nil { 19264 return 19265 } 19266 attrs := map[string]interface{}{} 19267 for _, a := range optional { 19268 a(attrs) 19269 } 19270 opspec := tf.OpSpec{ 19271 Type: "Squeeze", 19272 Input: []tf.Input{ 19273 input, 19274 }, 19275 Attrs: attrs, 19276 } 19277 op := scope.AddOperation(opspec) 19278 return op.Output(0) 19279 } 19280 19281 // ResourceApplyAdadeltaAttr is an optional argument to ResourceApplyAdadelta. 19282 type ResourceApplyAdadeltaAttr func(optionalAttr) 19283 19284 // ResourceApplyAdadeltaUseLocking sets the optional use_locking attribute to value. 19285 // 19286 // value: If True, updating of the var, accum and update_accum tensors will be protected by 19287 // a lock; otherwise the behavior is undefined, but may exhibit less contention. 19288 // If not specified, defaults to false 19289 func ResourceApplyAdadeltaUseLocking(value bool) ResourceApplyAdadeltaAttr { 19290 return func(m optionalAttr) { 19291 m["use_locking"] = value 19292 } 19293 } 19294 19295 // Update '*var' according to the adadelta scheme. 19296 // 19297 // accum = rho() * accum + (1 - rho()) * grad.square(); 19298 // update = (update_accum + epsilon).sqrt() * (accum + epsilon()).rsqrt() * grad; 19299 // update_accum = rho() * update_accum + (1 - rho()) * update.square(); 19300 // var -= update; 19301 // 19302 // Arguments: 19303 // var_: Should be from a Variable(). 19304 // accum: Should be from a Variable(). 19305 // accum_update: Should be from a Variable(). 19306 // lr: Scaling factor. Must be a scalar. 19307 // rho: Decay factor. Must be a scalar. 19308 // epsilon: Constant factor. Must be a scalar. 19309 // grad: The gradient. 19310 // 19311 // Returns the created operation. 19312 func ResourceApplyAdadelta(scope *Scope, var_ tf.Output, accum tf.Output, accum_update tf.Output, lr tf.Output, rho tf.Output, epsilon tf.Output, grad tf.Output, optional ...ResourceApplyAdadeltaAttr) (o *tf.Operation) { 19313 if scope.Err() != nil { 19314 return 19315 } 19316 attrs := map[string]interface{}{} 19317 for _, a := range optional { 19318 a(attrs) 19319 } 19320 opspec := tf.OpSpec{ 19321 Type: "ResourceApplyAdadelta", 19322 Input: []tf.Input{ 19323 var_, accum, accum_update, lr, rho, epsilon, grad, 19324 }, 19325 Attrs: attrs, 19326 } 19327 return scope.AddOperation(opspec) 19328 } 19329 19330 // NonMaxSuppressionAttr is an optional argument to NonMaxSuppression. 19331 type NonMaxSuppressionAttr func(optionalAttr) 19332 19333 // NonMaxSuppressionIouThreshold sets the optional iou_threshold attribute to value. 19334 // 19335 // value: A float representing the threshold for deciding whether boxes 19336 // overlap too much with respect to IOU. 19337 // If not specified, defaults to 0.5 19338 func NonMaxSuppressionIouThreshold(value float32) NonMaxSuppressionAttr { 19339 return func(m optionalAttr) { 19340 m["iou_threshold"] = value 19341 } 19342 } 19343 19344 // Greedily selects a subset of bounding boxes in descending order of score, 19345 // 19346 // pruning away boxes that have high intersection-over-union (IOU) overlap 19347 // with previously selected boxes. Bounding boxes are supplied as 19348 // [y1, x1, y2, x2], where (y1, x1) and (y2, x2) are the coordinates of any 19349 // diagonal pair of box corners and the coordinates can be provided as normalized 19350 // (i.e., lying in the interval [0, 1]) or absolute. Note that this algorithm 19351 // is agnostic to where the origin is in the coordinate system. Note that this 19352 // algorithm is invariant to orthogonal transformations and translations 19353 // of the coordinate system; thus translating or reflections of the coordinate 19354 // system result in the same boxes being selected by the algorithm. 19355 // The output of this operation is a set of integers indexing into the input 19356 // collection of bounding boxes representing the selected boxes. The bounding 19357 // box coordinates corresponding to the selected indices can then be obtained 19358 // using the `tf.gather operation`. For example: 19359 // selected_indices = tf.image.non_max_suppression( 19360 // boxes, scores, max_output_size, iou_threshold) 19361 // selected_boxes = tf.gather(boxes, selected_indices) 19362 // 19363 // Arguments: 19364 // boxes: A 2-D float tensor of shape `[num_boxes, 4]`. 19365 // scores: A 1-D float tensor of shape `[num_boxes]` representing a single 19366 // score corresponding to each box (each row of boxes). 19367 // max_output_size: A scalar integer tensor representing the maximum number of 19368 // boxes to be selected by non max suppression. 19369 // 19370 // Returns A 1-D integer tensor of shape `[M]` representing the selected 19371 // indices from the boxes tensor, where `M <= max_output_size`. 19372 func NonMaxSuppression(scope *Scope, boxes tf.Output, scores tf.Output, max_output_size tf.Output, optional ...NonMaxSuppressionAttr) (selected_indices tf.Output) { 19373 if scope.Err() != nil { 19374 return 19375 } 19376 attrs := map[string]interface{}{} 19377 for _, a := range optional { 19378 a(attrs) 19379 } 19380 opspec := tf.OpSpec{ 19381 Type: "NonMaxSuppression", 19382 Input: []tf.Input{ 19383 boxes, scores, max_output_size, 19384 }, 19385 Attrs: attrs, 19386 } 19387 op := scope.AddOperation(opspec) 19388 return op.Output(0) 19389 } 19390 19391 // Creates a dataset that emits `components` as a tuple of tensors once. 19392 func TensorDataset(scope *Scope, components []tf.Output, output_shapes []tf.Shape) (handle tf.Output) { 19393 if scope.Err() != nil { 19394 return 19395 } 19396 attrs := map[string]interface{}{"output_shapes": output_shapes} 19397 opspec := tf.OpSpec{ 19398 Type: "TensorDataset", 19399 Input: []tf.Input{ 19400 tf.OutputList(components), 19401 }, 19402 Attrs: attrs, 19403 } 19404 op := scope.AddOperation(opspec) 19405 return op.Output(0) 19406 } 19407 19408 // 2D real-valued fast Fourier transform. 19409 // 19410 // Computes the 2-dimensional discrete Fourier transform of a real-valued signal 19411 // over the inner-most 2 dimensions of `input`. 19412 // 19413 // Since the DFT of a real signal is Hermitian-symmetric, `RFFT2D` only returns the 19414 // `fft_length / 2 + 1` unique components of the FFT for the inner-most dimension 19415 // of `output`: the zero-frequency term, followed by the `fft_length / 2` 19416 // positive-frequency terms. 19417 // 19418 // Along each axis `RFFT2D` is computed on, if `fft_length` is smaller than the 19419 // corresponding dimension of `input`, the dimension is cropped. If it is larger, 19420 // the dimension is padded with zeros. 19421 // 19422 // Arguments: 19423 // input: A float32 tensor. 19424 // fft_length: An int32 tensor of shape [2]. The FFT length for each dimension. 19425 // 19426 // Returns A complex64 tensor of the same rank as `input`. The inner-most 2 19427 // dimensions of `input` are replaced with their 2D Fourier transform. The 19428 // inner-most dimension contains `fft_length / 2 + 1` unique frequency 19429 // components. 19430 // 19431 // @compatibility(numpy) 19432 // Equivalent to np.fft.rfft2 19433 // @end_compatibility 19434 func RFFT2D(scope *Scope, input tf.Output, fft_length tf.Output) (output tf.Output) { 19435 if scope.Err() != nil { 19436 return 19437 } 19438 opspec := tf.OpSpec{ 19439 Type: "RFFT2D", 19440 Input: []tf.Input{ 19441 input, fft_length, 19442 }, 19443 } 19444 op := scope.AddOperation(opspec) 19445 return op.Output(0) 19446 } 19447 19448 // ResourceSparseApplyFtrlAttr is an optional argument to ResourceSparseApplyFtrl. 19449 type ResourceSparseApplyFtrlAttr func(optionalAttr) 19450 19451 // ResourceSparseApplyFtrlUseLocking sets the optional use_locking attribute to value. 19452 // 19453 // value: If `True`, updating of the var and accum tensors will be protected 19454 // by a lock; otherwise the behavior is undefined, but may exhibit less 19455 // contention. 19456 // If not specified, defaults to false 19457 func ResourceSparseApplyFtrlUseLocking(value bool) ResourceSparseApplyFtrlAttr { 19458 return func(m optionalAttr) { 19459 m["use_locking"] = value 19460 } 19461 } 19462 19463 // Update relevant entries in '*var' according to the Ftrl-proximal scheme. 19464 // 19465 // That is for rows we have grad for, we update var, accum and linear as follows: 19466 // accum_new = accum + grad * grad 19467 // linear += grad + (accum_new^(-lr_power) - accum^(-lr_power)) / lr * var 19468 // quadratic = 1.0 / (accum_new^(lr_power) * lr) + 2 * l2 19469 // var = (sign(linear) * l1 - linear) / quadratic if |linear| > l1 else 0.0 19470 // accum = accum_new 19471 // 19472 // Arguments: 19473 // var_: Should be from a Variable(). 19474 // accum: Should be from a Variable(). 19475 // linear: Should be from a Variable(). 19476 // grad: The gradient. 19477 // indices: A vector of indices into the first dimension of var and accum. 19478 // lr: Scaling factor. Must be a scalar. 19479 // l1: L1 regularization. Must be a scalar. 19480 // l2: L2 regularization. Must be a scalar. 19481 // lr_power: Scaling factor. Must be a scalar. 19482 // 19483 // Returns the created operation. 19484 func ResourceSparseApplyFtrl(scope *Scope, var_ tf.Output, accum tf.Output, linear tf.Output, grad tf.Output, indices tf.Output, lr tf.Output, l1 tf.Output, l2 tf.Output, lr_power tf.Output, optional ...ResourceSparseApplyFtrlAttr) (o *tf.Operation) { 19485 if scope.Err() != nil { 19486 return 19487 } 19488 attrs := map[string]interface{}{} 19489 for _, a := range optional { 19490 a(attrs) 19491 } 19492 opspec := tf.OpSpec{ 19493 Type: "ResourceSparseApplyFtrl", 19494 Input: []tf.Input{ 19495 var_, accum, linear, grad, indices, lr, l1, l2, lr_power, 19496 }, 19497 Attrs: attrs, 19498 } 19499 return scope.AddOperation(opspec) 19500 } 19501 19502 // Returns which elements of x are Inf. 19503 // 19504 // @compatibility(numpy) 19505 // Equivalent to np.isinf 19506 // @end_compatibility 19507 func IsInf(scope *Scope, x tf.Output) (y tf.Output) { 19508 if scope.Err() != nil { 19509 return 19510 } 19511 opspec := tf.OpSpec{ 19512 Type: "IsInf", 19513 Input: []tf.Input{ 19514 x, 19515 }, 19516 } 19517 op := scope.AddOperation(opspec) 19518 return op.Output(0) 19519 } 19520 19521 // Gather ragged slices from `params` axis `0` according to `indices`. 19522 // 19523 // Outputs a `RaggedTensor` output composed from `output_dense_values` and 19524 // `output_nested_splits`, such that: 19525 // 19526 // ```python 19527 // output.shape = indices.shape + params.shape[1:] 19528 // output.ragged_rank = indices.shape.ndims + params.ragged_rank 19529 // output[i...j, d0...dn] = params[indices[i...j], d0...dn] 19530 // ``` 19531 // 19532 // where 19533 // 19534 // * `params = 19535 // ragged.from_nested_row_splits(params_dense_values, params_nested_splits)` 19536 // provides the values that should be gathered. 19537 // * `indices` ia a dense tensor with dtype `int32` or `int64`, indicating which 19538 // values should be gathered. 19539 // * `output = 19540 // ragged.from_nested_row_splits(output_dense_values, output_nested_splits)` 19541 // is the output tensor. 19542 // 19543 // (Note: This c++ op is used to implement the higher-level python 19544 // `tf.ragged.gather` op, which also supports ragged indices.) 19545 // 19546 // 19547 // Arguments: 19548 // params_nested_splits: The `nested_row_splits` tensors that define the row-partitioning for the 19549 // `params` RaggedTensor input. 19550 // params_dense_values: The `flat_values` for the `params` RaggedTensor. There was a terminology change 19551 // at the python level from dense_values to flat_values, so dense_values is the 19552 // deprecated name. 19553 // indices: Indices in the outermost dimension of `params` of the values that should be 19554 // gathered. 19555 // OUTPUT_RAGGED_RANK: The ragged rank of the output RaggedTensor. `output_nested_splits` will contain 19556 // this number of `row_splits` tensors. This value should equal 19557 // `indices.shape.ndims + params.ragged_rank - 1`. 19558 // 19559 // Returns The `nested_row_splits` tensors that define the row-partitioning for the 19560 // returned RaggedTensor.The `flat_values` for the returned RaggedTensor. 19561 func RaggedGather(scope *Scope, params_nested_splits []tf.Output, params_dense_values tf.Output, indices tf.Output, OUTPUT_RAGGED_RANK int64) (output_nested_splits []tf.Output, output_dense_values tf.Output) { 19562 if scope.Err() != nil { 19563 return 19564 } 19565 attrs := map[string]interface{}{"OUTPUT_RAGGED_RANK": OUTPUT_RAGGED_RANK} 19566 opspec := tf.OpSpec{ 19567 Type: "RaggedGather", 19568 Input: []tf.Input{ 19569 tf.OutputList(params_nested_splits), params_dense_values, indices, 19570 }, 19571 Attrs: attrs, 19572 } 19573 op := scope.AddOperation(opspec) 19574 if scope.Err() != nil { 19575 return 19576 } 19577 var idx int 19578 var err error 19579 if output_nested_splits, idx, err = makeOutputList(op, idx, "output_nested_splits"); err != nil { 19580 scope.UpdateErr("RaggedGather", err) 19581 return 19582 } 19583 output_dense_values = op.Output(idx) 19584 return output_nested_splits, output_dense_values 19585 } 19586 19587 // Greedily selects a subset of bounding boxes in descending order of score, 19588 // 19589 // pruning away boxes that have high intersection-over-union (IOU) overlap 19590 // with previously selected boxes. Bounding boxes are supplied as 19591 // [y1, x1, y2, x2], where (y1, x1) and (y2, x2) are the coordinates of any 19592 // diagonal pair of box corners and the coordinates can be provided as normalized 19593 // (i.e., lying in the interval [0, 1]) or absolute. Note that this algorithm 19594 // is agnostic to where the origin is in the coordinate system. Note that this 19595 // algorithm is invariant to orthogonal transformations and translations 19596 // of the coordinate system; thus translating or reflections of the coordinate 19597 // system result in the same boxes being selected by the algorithm. 19598 // 19599 // The output of this operation is a set of integers indexing into the input 19600 // collection of bounding boxes representing the selected boxes. The bounding 19601 // box coordinates corresponding to the selected indices can then be obtained 19602 // using the `tf.gather operation`. For example: 19603 // 19604 // selected_indices = tf.image.non_max_suppression_v2( 19605 // boxes, scores, max_output_size, iou_threshold) 19606 // selected_boxes = tf.gather(boxes, selected_indices) 19607 // 19608 // Arguments: 19609 // boxes: A 2-D float tensor of shape `[num_boxes, 4]`. 19610 // scores: A 1-D float tensor of shape `[num_boxes]` representing a single 19611 // score corresponding to each box (each row of boxes). 19612 // max_output_size: A scalar integer tensor representing the maximum number of 19613 // boxes to be selected by non max suppression. 19614 // iou_threshold: A 0-D float tensor representing the threshold for deciding whether 19615 // boxes overlap too much with respect to IOU. 19616 // 19617 // Returns A 1-D integer tensor of shape `[M]` representing the selected 19618 // indices from the boxes tensor, where `M <= max_output_size`. 19619 func NonMaxSuppressionV2(scope *Scope, boxes tf.Output, scores tf.Output, max_output_size tf.Output, iou_threshold tf.Output) (selected_indices tf.Output) { 19620 if scope.Err() != nil { 19621 return 19622 } 19623 opspec := tf.OpSpec{ 19624 Type: "NonMaxSuppressionV2", 19625 Input: []tf.Input{ 19626 boxes, scores, max_output_size, iou_threshold, 19627 }, 19628 } 19629 op := scope.AddOperation(opspec) 19630 return op.Output(0) 19631 } 19632 19633 // TruncatedNormalAttr is an optional argument to TruncatedNormal. 19634 type TruncatedNormalAttr func(optionalAttr) 19635 19636 // TruncatedNormalSeed sets the optional seed attribute to value. 19637 // 19638 // value: If either `seed` or `seed2` are set to be non-zero, the random number 19639 // generator is seeded by the given seed. Otherwise, it is seeded by a 19640 // random seed. 19641 // If not specified, defaults to 0 19642 func TruncatedNormalSeed(value int64) TruncatedNormalAttr { 19643 return func(m optionalAttr) { 19644 m["seed"] = value 19645 } 19646 } 19647 19648 // TruncatedNormalSeed2 sets the optional seed2 attribute to value. 19649 // 19650 // value: A second seed to avoid seed collision. 19651 // If not specified, defaults to 0 19652 func TruncatedNormalSeed2(value int64) TruncatedNormalAttr { 19653 return func(m optionalAttr) { 19654 m["seed2"] = value 19655 } 19656 } 19657 19658 // Outputs random values from a truncated normal distribution. 19659 // 19660 // The generated values follow a normal distribution with mean 0 and standard 19661 // deviation 1, except that values whose magnitude is more than 2 standard 19662 // deviations from the mean are dropped and re-picked. 19663 // 19664 // Arguments: 19665 // shape: The shape of the output tensor. 19666 // dtype: The type of the output. 19667 // 19668 // Returns A tensor of the specified shape filled with random truncated normal 19669 // values. 19670 func TruncatedNormal(scope *Scope, shape tf.Output, dtype tf.DataType, optional ...TruncatedNormalAttr) (output tf.Output) { 19671 if scope.Err() != nil { 19672 return 19673 } 19674 attrs := map[string]interface{}{"dtype": dtype} 19675 for _, a := range optional { 19676 a(attrs) 19677 } 19678 opspec := tf.OpSpec{ 19679 Type: "TruncatedNormal", 19680 Input: []tf.Input{ 19681 shape, 19682 }, 19683 Attrs: attrs, 19684 } 19685 op := scope.AddOperation(opspec) 19686 return op.Output(0) 19687 } 19688 19689 // StringToNumberAttr is an optional argument to StringToNumber. 19690 type StringToNumberAttr func(optionalAttr) 19691 19692 // StringToNumberOutType sets the optional out_type attribute to value. 19693 // 19694 // value: The numeric type to interpret each string in `string_tensor` as. 19695 // If not specified, defaults to DT_FLOAT 19696 func StringToNumberOutType(value tf.DataType) StringToNumberAttr { 19697 return func(m optionalAttr) { 19698 m["out_type"] = value 19699 } 19700 } 19701 19702 // Converts each string in the input Tensor to the specified numeric type. 19703 // 19704 // (Note that int32 overflow results in an error while float overflow 19705 // results in a rounded value.) 19706 // 19707 // Returns A Tensor of the same shape as the input `string_tensor`. 19708 func StringToNumber(scope *Scope, string_tensor tf.Output, optional ...StringToNumberAttr) (output tf.Output) { 19709 if scope.Err() != nil { 19710 return 19711 } 19712 attrs := map[string]interface{}{} 19713 for _, a := range optional { 19714 a(attrs) 19715 } 19716 opspec := tf.OpSpec{ 19717 Type: "StringToNumber", 19718 Input: []tf.Input{ 19719 string_tensor, 19720 }, 19721 Attrs: attrs, 19722 } 19723 op := scope.AddOperation(opspec) 19724 return op.Output(0) 19725 } 19726 19727 // ResourceApplyFtrlV2Attr is an optional argument to ResourceApplyFtrlV2. 19728 type ResourceApplyFtrlV2Attr func(optionalAttr) 19729 19730 // ResourceApplyFtrlV2UseLocking sets the optional use_locking attribute to value. 19731 // 19732 // value: If `True`, updating of the var and accum tensors will be protected 19733 // by a lock; otherwise the behavior is undefined, but may exhibit less 19734 // contention. 19735 // If not specified, defaults to false 19736 func ResourceApplyFtrlV2UseLocking(value bool) ResourceApplyFtrlV2Attr { 19737 return func(m optionalAttr) { 19738 m["use_locking"] = value 19739 } 19740 } 19741 19742 // Update '*var' according to the Ftrl-proximal scheme. 19743 // 19744 // grad_with_shrinkage = grad + 2 * l2_shrinkage * var 19745 // accum_new = accum + grad_with_shrinkage * grad_with_shrinkage 19746 // linear += grad_with_shrinkage + 19747 // (accum_new^(-lr_power) - accum^(-lr_power)) / lr * var 19748 // quadratic = 1.0 / (accum_new^(lr_power) * lr) + 2 * l2 19749 // var = (sign(linear) * l1 - linear) / quadratic if |linear| > l1 else 0.0 19750 // accum = accum_new 19751 // 19752 // Arguments: 19753 // var_: Should be from a Variable(). 19754 // accum: Should be from a Variable(). 19755 // linear: Should be from a Variable(). 19756 // grad: The gradient. 19757 // lr: Scaling factor. Must be a scalar. 19758 // l1: L1 regulariation. Must be a scalar. 19759 // l2: L2 shrinkage regulariation. Must be a scalar. 19760 // 19761 // lr_power: Scaling factor. Must be a scalar. 19762 // 19763 // Returns the created operation. 19764 func ResourceApplyFtrlV2(scope *Scope, var_ tf.Output, accum tf.Output, linear tf.Output, grad tf.Output, lr tf.Output, l1 tf.Output, l2 tf.Output, l2_shrinkage tf.Output, lr_power tf.Output, optional ...ResourceApplyFtrlV2Attr) (o *tf.Operation) { 19765 if scope.Err() != nil { 19766 return 19767 } 19768 attrs := map[string]interface{}{} 19769 for _, a := range optional { 19770 a(attrs) 19771 } 19772 opspec := tf.OpSpec{ 19773 Type: "ResourceApplyFtrlV2", 19774 Input: []tf.Input{ 19775 var_, accum, linear, grad, lr, l1, l2, l2_shrinkage, lr_power, 19776 }, 19777 Attrs: attrs, 19778 } 19779 return scope.AddOperation(opspec) 19780 } 19781 19782 // SkipgramAttr is an optional argument to Skipgram. 19783 type SkipgramAttr func(optionalAttr) 19784 19785 // SkipgramWindowSize sets the optional window_size attribute to value. 19786 // 19787 // value: The number of words to predict to the left and right of the target. 19788 // If not specified, defaults to 5 19789 func SkipgramWindowSize(value int64) SkipgramAttr { 19790 return func(m optionalAttr) { 19791 m["window_size"] = value 19792 } 19793 } 19794 19795 // SkipgramMinCount sets the optional min_count attribute to value. 19796 // 19797 // value: The minimum number of word occurrences for it to be included in the 19798 // vocabulary. 19799 // If not specified, defaults to 5 19800 func SkipgramMinCount(value int64) SkipgramAttr { 19801 return func(m optionalAttr) { 19802 m["min_count"] = value 19803 } 19804 } 19805 19806 // SkipgramSubsample sets the optional subsample attribute to value. 19807 // 19808 // value: Threshold for word occurrence. Words that appear with higher 19809 // frequency will be randomly down-sampled. Set to 0 to disable. 19810 // If not specified, defaults to 0.001 19811 func SkipgramSubsample(value float32) SkipgramAttr { 19812 return func(m optionalAttr) { 19813 m["subsample"] = value 19814 } 19815 } 19816 19817 // Parses a text file and creates a batch of examples. 19818 // 19819 // DEPRECATED at GraphDef version 19: Moving word2vec into tensorflow_models/tutorials and deprecating its ops here as a result 19820 // 19821 // Arguments: 19822 // filename: The corpus's text file name. 19823 // batch_size: The size of produced batch. 19824 // 19825 // Returns A vector of words in the corpus.Frequencies of words. Sorted in the non-ascending order.Number of words per epoch in the data file.The current epoch number.The total number of words processed so far.A vector of word ids.A vector of word ids. 19826 func Skipgram(scope *Scope, filename string, batch_size int64, optional ...SkipgramAttr) (vocab_word tf.Output, vocab_freq tf.Output, words_per_epoch tf.Output, current_epoch tf.Output, total_words_processed tf.Output, examples tf.Output, labels tf.Output) { 19827 if scope.Err() != nil { 19828 return 19829 } 19830 attrs := map[string]interface{}{"filename": filename, "batch_size": batch_size} 19831 for _, a := range optional { 19832 a(attrs) 19833 } 19834 opspec := tf.OpSpec{ 19835 Type: "Skipgram", 19836 19837 Attrs: attrs, 19838 } 19839 op := scope.AddOperation(opspec) 19840 return op.Output(0), op.Output(1), op.Output(2), op.Output(3), op.Output(4), op.Output(5), op.Output(6) 19841 } 19842 19843 // ThreadUnsafeUnigramCandidateSamplerAttr is an optional argument to ThreadUnsafeUnigramCandidateSampler. 19844 type ThreadUnsafeUnigramCandidateSamplerAttr func(optionalAttr) 19845 19846 // ThreadUnsafeUnigramCandidateSamplerSeed sets the optional seed attribute to value. 19847 // 19848 // value: If either seed or seed2 are set to be non-zero, the random number 19849 // generator is seeded by the given seed. Otherwise, it is seeded by a 19850 // random seed. 19851 // If not specified, defaults to 0 19852 func ThreadUnsafeUnigramCandidateSamplerSeed(value int64) ThreadUnsafeUnigramCandidateSamplerAttr { 19853 return func(m optionalAttr) { 19854 m["seed"] = value 19855 } 19856 } 19857 19858 // ThreadUnsafeUnigramCandidateSamplerSeed2 sets the optional seed2 attribute to value. 19859 // 19860 // value: An second seed to avoid seed collision. 19861 // If not specified, defaults to 0 19862 func ThreadUnsafeUnigramCandidateSamplerSeed2(value int64) ThreadUnsafeUnigramCandidateSamplerAttr { 19863 return func(m optionalAttr) { 19864 m["seed2"] = value 19865 } 19866 } 19867 19868 // Generates labels for candidate sampling with a learned unigram distribution. 19869 // 19870 // See explanations of candidate sampling and the data formats at 19871 // go/candidate-sampling. 19872 // 19873 // For each batch, this op picks a single set of sampled candidate labels. 19874 // 19875 // The advantages of sampling candidates per-batch are simplicity and the 19876 // possibility of efficient dense matrix multiplication. The disadvantage is that 19877 // the sampled candidates must be chosen independently of the context and of the 19878 // true labels. 19879 // 19880 // Arguments: 19881 // true_classes: A batch_size * num_true matrix, in which each row contains the 19882 // IDs of the num_true target_classes in the corresponding original label. 19883 // num_true: Number of true labels per context. 19884 // num_sampled: Number of candidates to randomly sample. 19885 // unique: If unique is true, we sample with rejection, so that all sampled 19886 // candidates in a batch are unique. This requires some approximation to 19887 // estimate the post-rejection sampling probabilities. 19888 // range_max: The sampler will sample integers from the interval [0, range_max). 19889 // 19890 // Returns A vector of length num_sampled, in which each element is 19891 // the ID of a sampled candidate.A batch_size * num_true matrix, representing 19892 // the number of times each candidate is expected to occur in a batch 19893 // of sampled candidates. If unique=true, then this is a probability.A vector of length num_sampled, for each sampled 19894 // candidate representing the number of times the candidate is expected 19895 // to occur in a batch of sampled candidates. If unique=true, then this is a 19896 // probability. 19897 func ThreadUnsafeUnigramCandidateSampler(scope *Scope, true_classes tf.Output, num_true int64, num_sampled int64, unique bool, range_max int64, optional ...ThreadUnsafeUnigramCandidateSamplerAttr) (sampled_candidates tf.Output, true_expected_count tf.Output, sampled_expected_count tf.Output) { 19898 if scope.Err() != nil { 19899 return 19900 } 19901 attrs := map[string]interface{}{"num_true": num_true, "num_sampled": num_sampled, "unique": unique, "range_max": range_max} 19902 for _, a := range optional { 19903 a(attrs) 19904 } 19905 opspec := tf.OpSpec{ 19906 Type: "ThreadUnsafeUnigramCandidateSampler", 19907 Input: []tf.Input{ 19908 true_classes, 19909 }, 19910 Attrs: attrs, 19911 } 19912 op := scope.AddOperation(opspec) 19913 return op.Output(0), op.Output(1), op.Output(2) 19914 } 19915 19916 // MaxPoolV2Attr is an optional argument to MaxPoolV2. 19917 type MaxPoolV2Attr func(optionalAttr) 19918 19919 // MaxPoolV2DataFormat sets the optional data_format attribute to value. 19920 // 19921 // value: Specify the data format of the input and output data. With the 19922 // default format "NHWC", the data is stored in the order of: 19923 // [batch, in_height, in_width, in_channels]. 19924 // Alternatively, the format could be "NCHW", the data storage order of: 19925 // [batch, in_channels, in_height, in_width]. 19926 // If not specified, defaults to "NHWC" 19927 func MaxPoolV2DataFormat(value string) MaxPoolV2Attr { 19928 return func(m optionalAttr) { 19929 m["data_format"] = value 19930 } 19931 } 19932 19933 // Performs max pooling on the input. 19934 // 19935 // Arguments: 19936 // input: 4-D input to pool over. 19937 // ksize: The size of the window for each dimension of the input tensor. 19938 // strides: The stride of the sliding window for each dimension of the 19939 // input tensor. 19940 // padding: The type of padding algorithm to use. 19941 // 19942 // Returns The max pooled output tensor. 19943 func MaxPoolV2(scope *Scope, input tf.Output, ksize tf.Output, strides tf.Output, padding string, optional ...MaxPoolV2Attr) (output tf.Output) { 19944 if scope.Err() != nil { 19945 return 19946 } 19947 attrs := map[string]interface{}{"padding": padding} 19948 for _, a := range optional { 19949 a(attrs) 19950 } 19951 opspec := tf.OpSpec{ 19952 Type: "MaxPoolV2", 19953 Input: []tf.Input{ 19954 input, ksize, strides, 19955 }, 19956 Attrs: attrs, 19957 } 19958 op := scope.AddOperation(opspec) 19959 return op.Output(0) 19960 } 19961 19962 // Does nothing. Serves as a control trigger for scheduling. 19963 // 19964 // Only useful as a placeholder for control edges. 19965 // 19966 // Returns the created operation. 19967 func ControlTrigger(scope *Scope) (o *tf.Operation) { 19968 if scope.Err() != nil { 19969 return 19970 } 19971 opspec := tf.OpSpec{ 19972 Type: "ControlTrigger", 19973 } 19974 return scope.AddOperation(opspec) 19975 } 19976 19977 // Deprecated. Use TensorArrayReadV3 19978 // 19979 // DEPRECATED at GraphDef version 26: Use TensorArrayReadV3 19980 func TensorArrayReadV2(scope *Scope, handle tf.Output, index tf.Output, flow_in tf.Output, dtype tf.DataType) (value tf.Output) { 19981 if scope.Err() != nil { 19982 return 19983 } 19984 attrs := map[string]interface{}{"dtype": dtype} 19985 opspec := tf.OpSpec{ 19986 Type: "TensorArrayReadV2", 19987 Input: []tf.Input{ 19988 handle, index, flow_in, 19989 }, 19990 Attrs: attrs, 19991 } 19992 op := scope.AddOperation(opspec) 19993 return op.Output(0) 19994 } 19995 19996 // Batch normalization. 19997 // 19998 // DEPRECATED at GraphDef version 9: Use tf.nn.batch_normalization() 19999 // 20000 // This op is deprecated. Prefer `tf.nn.batch_normalization`. 20001 // 20002 // Arguments: 20003 // t: A 4D input Tensor. 20004 // m: A 1D mean Tensor with size matching the last dimension of t. 20005 // This is the first output from tf.nn.moments, 20006 // or a saved moving average thereof. 20007 // v: A 1D variance Tensor with size matching the last dimension of t. 20008 // This is the second output from tf.nn.moments, 20009 // or a saved moving average thereof. 20010 // beta: A 1D beta Tensor with size matching the last dimension of t. 20011 // An offset to be added to the normalized tensor. 20012 // gamma: A 1D gamma Tensor with size matching the last dimension of t. 20013 // If "scale_after_normalization" is true, this tensor will be multiplied 20014 // with the normalized tensor. 20015 // variance_epsilon: A small float number to avoid dividing by 0. 20016 // scale_after_normalization: A bool indicating whether the resulted tensor 20017 // needs to be multiplied with gamma. 20018 func BatchNormWithGlobalNormalization(scope *Scope, t tf.Output, m tf.Output, v tf.Output, beta tf.Output, gamma tf.Output, variance_epsilon float32, scale_after_normalization bool) (result tf.Output) { 20019 if scope.Err() != nil { 20020 return 20021 } 20022 attrs := map[string]interface{}{"variance_epsilon": variance_epsilon, "scale_after_normalization": scale_after_normalization} 20023 opspec := tf.OpSpec{ 20024 Type: "BatchNormWithGlobalNormalization", 20025 Input: []tf.Input{ 20026 t, m, v, beta, gamma, 20027 }, 20028 Attrs: attrs, 20029 } 20030 op := scope.AddOperation(opspec) 20031 return op.Output(0) 20032 } 20033 20034 // AddManySparseToTensorsMapAttr is an optional argument to AddManySparseToTensorsMap. 20035 type AddManySparseToTensorsMapAttr func(optionalAttr) 20036 20037 // AddManySparseToTensorsMapContainer sets the optional container attribute to value. 20038 // 20039 // value: The container name for the `SparseTensorsMap` created by this op. 20040 // If not specified, defaults to "" 20041 func AddManySparseToTensorsMapContainer(value string) AddManySparseToTensorsMapAttr { 20042 return func(m optionalAttr) { 20043 m["container"] = value 20044 } 20045 } 20046 20047 // AddManySparseToTensorsMapSharedName sets the optional shared_name attribute to value. 20048 // 20049 // value: The shared name for the `SparseTensorsMap` created by this op. 20050 // If blank, the new Operation's unique name is used. 20051 // If not specified, defaults to "" 20052 func AddManySparseToTensorsMapSharedName(value string) AddManySparseToTensorsMapAttr { 20053 return func(m optionalAttr) { 20054 m["shared_name"] = value 20055 } 20056 } 20057 20058 // Add an `N`-minibatch `SparseTensor` to a `SparseTensorsMap`, return `N` handles. 20059 // 20060 // A `SparseTensor` of rank `R` is represented by three tensors: `sparse_indices`, 20061 // `sparse_values`, and `sparse_shape`, where 20062 // 20063 // ```sparse_indices.shape[1] == sparse_shape.shape[0] == R``` 20064 // 20065 // An `N`-minibatch of `SparseTensor` objects is represented as a `SparseTensor` 20066 // having a first `sparse_indices` column taking values between `[0, N)`, where 20067 // the minibatch size `N == sparse_shape[0]`. 20068 // 20069 // The input `SparseTensor` must have rank `R` greater than 1, and the first 20070 // dimension is treated as the minibatch dimension. Elements of the `SparseTensor` 20071 // must be sorted in increasing order of this first dimension. The stored 20072 // `SparseTensor` objects pointed to by each row of the output `sparse_handles` 20073 // will have rank `R-1`. 20074 // 20075 // The `SparseTensor` values can then be read out as part of a minibatch by passing 20076 // the given keys as vector elements to `TakeManySparseFromTensorsMap`. To ensure 20077 // the correct `SparseTensorsMap` is accessed, ensure that the same 20078 // `container` and `shared_name` are passed to that Op. If no `shared_name` 20079 // is provided here, instead use the *name* of the Operation created by calling 20080 // `AddManySparseToTensorsMap` as the `shared_name` passed to 20081 // `TakeManySparseFromTensorsMap`. Ensure the Operations are colocated. 20082 // 20083 // Arguments: 20084 // sparse_indices: 2-D. The `indices` of the minibatch `SparseTensor`. 20085 // `sparse_indices[:, 0]` must be ordered values in `[0, N)`. 20086 // sparse_values: 1-D. The `values` of the minibatch `SparseTensor`. 20087 // sparse_shape: 1-D. The `shape` of the minibatch `SparseTensor`. 20088 // The minibatch size `N == sparse_shape[0]`. 20089 // 20090 // Returns 1-D. The handles of the `SparseTensor` now stored in the 20091 // `SparseTensorsMap`. Shape: `[N]`. 20092 func AddManySparseToTensorsMap(scope *Scope, sparse_indices tf.Output, sparse_values tf.Output, sparse_shape tf.Output, optional ...AddManySparseToTensorsMapAttr) (sparse_handles tf.Output) { 20093 if scope.Err() != nil { 20094 return 20095 } 20096 attrs := map[string]interface{}{} 20097 for _, a := range optional { 20098 a(attrs) 20099 } 20100 opspec := tf.OpSpec{ 20101 Type: "AddManySparseToTensorsMap", 20102 Input: []tf.Input{ 20103 sparse_indices, sparse_values, sparse_shape, 20104 }, 20105 Attrs: attrs, 20106 } 20107 op := scope.AddOperation(opspec) 20108 return op.Output(0) 20109 } 20110 20111 // TPUReplicateMetadataAttr is an optional argument to TPUReplicateMetadata. 20112 type TPUReplicateMetadataAttr func(optionalAttr) 20113 20114 // TPUReplicateMetadataNumCoresPerReplica sets the optional num_cores_per_replica attribute to value. 20115 // 20116 // value: Number of cores per replica. Used for model parallelism. 20117 // If not specified, defaults to 1 20118 func TPUReplicateMetadataNumCoresPerReplica(value int64) TPUReplicateMetadataAttr { 20119 return func(m optionalAttr) { 20120 m["num_cores_per_replica"] = value 20121 } 20122 } 20123 20124 // TPUReplicateMetadataTopology sets the optional topology attribute to value. 20125 // 20126 // value: TopologyProto indicating the topology of the TPU pod slice. 20127 // If not specified, defaults to "" 20128 func TPUReplicateMetadataTopology(value string) TPUReplicateMetadataAttr { 20129 return func(m optionalAttr) { 20130 m["topology"] = value 20131 } 20132 } 20133 20134 // TPUReplicateMetadataUseTpu sets the optional use_tpu attribute to value. 20135 // 20136 // value: Whether to place the computation on the TPU. 20137 // If not specified, defaults to true 20138 func TPUReplicateMetadataUseTpu(value bool) TPUReplicateMetadataAttr { 20139 return func(m optionalAttr) { 20140 m["use_tpu"] = value 20141 } 20142 } 20143 20144 // TPUReplicateMetadataDeviceAssignment sets the optional device_assignment attribute to value. 20145 // 20146 // value: The assignment of devices for the computation. 20147 // If not specified, defaults to <> 20148 func TPUReplicateMetadataDeviceAssignment(value []int64) TPUReplicateMetadataAttr { 20149 return func(m optionalAttr) { 20150 m["device_assignment"] = value 20151 } 20152 } 20153 20154 // TPUReplicateMetadataComputationShape sets the optional computation_shape attribute to value. 20155 // 20156 // value: DEPRECATED. Use num_cores_per_replica instead. 20157 // If not specified, defaults to <> 20158 func TPUReplicateMetadataComputationShape(value []int64) TPUReplicateMetadataAttr { 20159 return func(m optionalAttr) { 20160 m["computation_shape"] = value 20161 } 20162 } 20163 20164 // TPUReplicateMetadataHostComputeCore sets the optional host_compute_core attribute to value. 20165 // If not specified, defaults to <> 20166 func TPUReplicateMetadataHostComputeCore(value []string) TPUReplicateMetadataAttr { 20167 return func(m optionalAttr) { 20168 m["host_compute_core"] = value 20169 } 20170 } 20171 20172 // TPUReplicateMetadataPaddingMap sets the optional padding_map attribute to value. 20173 // If not specified, defaults to <> 20174 func TPUReplicateMetadataPaddingMap(value []string) TPUReplicateMetadataAttr { 20175 return func(m optionalAttr) { 20176 m["padding_map"] = value 20177 } 20178 } 20179 20180 // TPUReplicateMetadataStepMarkerLocation sets the optional step_marker_location attribute to value. 20181 // If not specified, defaults to "STEP_MARK_AT_ENTRY" 20182 func TPUReplicateMetadataStepMarkerLocation(value string) TPUReplicateMetadataAttr { 20183 return func(m optionalAttr) { 20184 m["step_marker_location"] = value 20185 } 20186 } 20187 20188 // Metadata indicaitng how the TPU computation should be replicated. 20189 // 20190 // Arguments: 20191 // num_replicas: Number of replicas of the computation 20192 // 20193 // Returns the created operation. 20194 func TPUReplicateMetadata(scope *Scope, num_replicas int64, optional ...TPUReplicateMetadataAttr) (o *tf.Operation) { 20195 if scope.Err() != nil { 20196 return 20197 } 20198 attrs := map[string]interface{}{"num_replicas": num_replicas} 20199 for _, a := range optional { 20200 a(attrs) 20201 } 20202 opspec := tf.OpSpec{ 20203 Type: "TPUReplicateMetadata", 20204 20205 Attrs: attrs, 20206 } 20207 return scope.AddOperation(opspec) 20208 } 20209 20210 // LoadTPUEmbeddingFTRLParametersGradAccumDebugAttr is an optional argument to LoadTPUEmbeddingFTRLParametersGradAccumDebug. 20211 type LoadTPUEmbeddingFTRLParametersGradAccumDebugAttr func(optionalAttr) 20212 20213 // LoadTPUEmbeddingFTRLParametersGradAccumDebugTableId sets the optional table_id attribute to value. 20214 // If not specified, defaults to -1 20215 // 20216 // REQUIRES: value >= -1 20217 func LoadTPUEmbeddingFTRLParametersGradAccumDebugTableId(value int64) LoadTPUEmbeddingFTRLParametersGradAccumDebugAttr { 20218 return func(m optionalAttr) { 20219 m["table_id"] = value 20220 } 20221 } 20222 20223 // LoadTPUEmbeddingFTRLParametersGradAccumDebugTableName sets the optional table_name attribute to value. 20224 // If not specified, defaults to "" 20225 func LoadTPUEmbeddingFTRLParametersGradAccumDebugTableName(value string) LoadTPUEmbeddingFTRLParametersGradAccumDebugAttr { 20226 return func(m optionalAttr) { 20227 m["table_name"] = value 20228 } 20229 } 20230 20231 // Load FTRL embedding parameters with debug support. 20232 // 20233 // An op that loads optimization parameters into HBM for embedding. Must be 20234 // preceded by a ConfigureTPUEmbeddingHost op that sets up the correct 20235 // embedding table configuration. For example, this op is used to install 20236 // parameters that are loaded from a checkpoint before a training loop is 20237 // executed. 20238 // 20239 // Arguments: 20240 // parameters: Value of parameters used in the FTRL optimization algorithm. 20241 // accumulators: Value of accumulators used in the FTRL optimization algorithm. 20242 // linears: Value of linears used in the FTRL optimization algorithm. 20243 // gradient_accumulators: Value of gradient_accumulators used in the FTRL optimization algorithm. 20244 // 20245 // 20246 // 20247 // Returns the created operation. 20248 func LoadTPUEmbeddingFTRLParametersGradAccumDebug(scope *Scope, parameters tf.Output, accumulators tf.Output, linears tf.Output, gradient_accumulators tf.Output, num_shards int64, shard_id int64, optional ...LoadTPUEmbeddingFTRLParametersGradAccumDebugAttr) (o *tf.Operation) { 20249 if scope.Err() != nil { 20250 return 20251 } 20252 attrs := map[string]interface{}{"num_shards": num_shards, "shard_id": shard_id} 20253 for _, a := range optional { 20254 a(attrs) 20255 } 20256 opspec := tf.OpSpec{ 20257 Type: "LoadTPUEmbeddingFTRLParametersGradAccumDebug", 20258 Input: []tf.Input{ 20259 parameters, accumulators, linears, gradient_accumulators, 20260 }, 20261 Attrs: attrs, 20262 } 20263 return scope.AddOperation(opspec) 20264 } 20265 20266 // Concatenates tensors along one dimension. 20267 // 20268 // Arguments: 20269 // values: List of `N` Tensors to concatenate. Their ranks and types must match, 20270 // and their sizes must match in all dimensions except `concat_dim`. 20271 // axis: 0-D. The dimension along which to concatenate. Must be in the 20272 // range [-rank(values), rank(values)). 20273 // 20274 // Returns A `Tensor` with the concatenation of values stacked along the 20275 // `concat_dim` dimension. This tensor's shape matches that of `values` except 20276 // in `concat_dim` where it has the sum of the sizes. 20277 func ConcatV2(scope *Scope, values []tf.Output, axis tf.Output) (output tf.Output) { 20278 if scope.Err() != nil { 20279 return 20280 } 20281 opspec := tf.OpSpec{ 20282 Type: "ConcatV2", 20283 Input: []tf.Input{ 20284 tf.OutputList(values), axis, 20285 }, 20286 } 20287 op := scope.AddOperation(opspec) 20288 return op.Output(0) 20289 } 20290 20291 // Reads and outputs the entire contents of the input filename. 20292 func ReadFile(scope *Scope, filename tf.Output) (contents tf.Output) { 20293 if scope.Err() != nil { 20294 return 20295 } 20296 opspec := tf.OpSpec{ 20297 Type: "ReadFile", 20298 Input: []tf.Input{ 20299 filename, 20300 }, 20301 } 20302 op := scope.AddOperation(opspec) 20303 return op.Output(0) 20304 } 20305 20306 // AvgPoolGradAttr is an optional argument to AvgPoolGrad. 20307 type AvgPoolGradAttr func(optionalAttr) 20308 20309 // AvgPoolGradDataFormat sets the optional data_format attribute to value. 20310 // 20311 // value: Specify the data format of the input and output data. With the 20312 // default format "NHWC", the data is stored in the order of: 20313 // [batch, in_height, in_width, in_channels]. 20314 // Alternatively, the format could be "NCHW", the data storage order of: 20315 // [batch, in_channels, in_height, in_width]. 20316 // If not specified, defaults to "NHWC" 20317 func AvgPoolGradDataFormat(value string) AvgPoolGradAttr { 20318 return func(m optionalAttr) { 20319 m["data_format"] = value 20320 } 20321 } 20322 20323 // Computes gradients of the average pooling function. 20324 // 20325 // Arguments: 20326 // orig_input_shape: 1-D. Shape of the original input to `avg_pool`. 20327 // grad: 4-D with shape `[batch, height, width, channels]`. Gradients w.r.t. 20328 // the output of `avg_pool`. 20329 // ksize: The size of the sliding window for each dimension of the input. 20330 // strides: The stride of the sliding window for each dimension of the input. 20331 // padding: The type of padding algorithm to use. 20332 // 20333 // Returns 4-D. Gradients w.r.t. the input of `avg_pool`. 20334 func AvgPoolGrad(scope *Scope, orig_input_shape tf.Output, grad tf.Output, ksize []int64, strides []int64, padding string, optional ...AvgPoolGradAttr) (output tf.Output) { 20335 if scope.Err() != nil { 20336 return 20337 } 20338 attrs := map[string]interface{}{"ksize": ksize, "strides": strides, "padding": padding} 20339 for _, a := range optional { 20340 a(attrs) 20341 } 20342 opspec := tf.OpSpec{ 20343 Type: "AvgPoolGrad", 20344 Input: []tf.Input{ 20345 orig_input_shape, grad, 20346 }, 20347 Attrs: attrs, 20348 } 20349 op := scope.AddOperation(opspec) 20350 return op.Output(0) 20351 } 20352 20353 // Greedily selects a subset of bounding boxes in descending order of score, 20354 // 20355 // pruning away boxes that have high overlaps 20356 // with previously selected boxes. Bounding boxes with score less than 20357 // `score_threshold` are removed. N-by-n overlap values are supplied as square matrix, 20358 // which allows for defining a custom overlap criterium (eg. intersection over union, 20359 // intersection over area, etc.). 20360 // 20361 // The output of this operation is a set of integers indexing into the input 20362 // collection of bounding boxes representing the selected boxes. The bounding 20363 // box coordinates corresponding to the selected indices can then be obtained 20364 // using the `tf.gather operation`. For example: 20365 // 20366 // selected_indices = tf.image.non_max_suppression_with_overlaps( 20367 // overlaps, scores, max_output_size, overlap_threshold, score_threshold) 20368 // selected_boxes = tf.gather(boxes, selected_indices) 20369 // 20370 // Arguments: 20371 // overlaps: A 2-D float tensor of shape `[num_boxes, num_boxes]` representing 20372 // the n-by-n box overlap values. 20373 // scores: A 1-D float tensor of shape `[num_boxes]` representing a single 20374 // score corresponding to each box (each row of boxes). 20375 // max_output_size: A scalar integer tensor representing the maximum number of 20376 // boxes to be selected by non max suppression. 20377 // overlap_threshold: A 0-D float tensor representing the threshold for deciding whether 20378 // boxes overlap too. 20379 // score_threshold: A 0-D float tensor representing the threshold for deciding when to remove 20380 // boxes based on score. 20381 // 20382 // Returns A 1-D integer tensor of shape `[M]` representing the selected 20383 // indices from the boxes tensor, where `M <= max_output_size`. 20384 func NonMaxSuppressionWithOverlaps(scope *Scope, overlaps tf.Output, scores tf.Output, max_output_size tf.Output, overlap_threshold tf.Output, score_threshold tf.Output) (selected_indices tf.Output) { 20385 if scope.Err() != nil { 20386 return 20387 } 20388 opspec := tf.OpSpec{ 20389 Type: "NonMaxSuppressionWithOverlaps", 20390 Input: []tf.Input{ 20391 overlaps, scores, max_output_size, overlap_threshold, score_threshold, 20392 }, 20393 } 20394 op := scope.AddOperation(opspec) 20395 return op.Output(0) 20396 } 20397 20398 // FractionalAvgPoolGradAttr is an optional argument to FractionalAvgPoolGrad. 20399 type FractionalAvgPoolGradAttr func(optionalAttr) 20400 20401 // FractionalAvgPoolGradOverlapping sets the optional overlapping attribute to value. 20402 // 20403 // value: When set to True, it means when pooling, the values at the boundary 20404 // of adjacent pooling cells are used by both cells. For example: 20405 // 20406 // `index 0 1 2 3 4` 20407 // 20408 // `value 20 5 16 3 7` 20409 // 20410 // If the pooling sequence is [0, 2, 4], then 16, at index 2 will be used twice. 20411 // The result would be [41/3, 26/3] for fractional avg pooling. 20412 // If not specified, defaults to false 20413 func FractionalAvgPoolGradOverlapping(value bool) FractionalAvgPoolGradAttr { 20414 return func(m optionalAttr) { 20415 m["overlapping"] = value 20416 } 20417 } 20418 20419 // Computes gradient of the FractionalAvgPool function. 20420 // 20421 // Unlike FractionalMaxPoolGrad, we don't need to find arg_max for 20422 // FractionalAvgPoolGrad, we just need to evenly back-propagate each element of 20423 // out_backprop to those indices that form the same pooling cell. Therefore, we 20424 // just need to know the shape of original input tensor, instead of the whole 20425 // tensor. 20426 // 20427 // Arguments: 20428 // orig_input_tensor_shape: Original input tensor shape for `fractional_avg_pool` 20429 // out_backprop: 4-D with shape `[batch, height, width, channels]`. Gradients 20430 // w.r.t. the output of `fractional_avg_pool`. 20431 // row_pooling_sequence: row pooling sequence, form pooling region with 20432 // col_pooling_sequence. 20433 // col_pooling_sequence: column pooling sequence, form pooling region with 20434 // row_pooling sequence. 20435 // 20436 // Returns 4-D. Gradients w.r.t. the input of `fractional_avg_pool`. 20437 func FractionalAvgPoolGrad(scope *Scope, orig_input_tensor_shape tf.Output, out_backprop tf.Output, row_pooling_sequence tf.Output, col_pooling_sequence tf.Output, optional ...FractionalAvgPoolGradAttr) (output tf.Output) { 20438 if scope.Err() != nil { 20439 return 20440 } 20441 attrs := map[string]interface{}{} 20442 for _, a := range optional { 20443 a(attrs) 20444 } 20445 opspec := tf.OpSpec{ 20446 Type: "FractionalAvgPoolGrad", 20447 Input: []tf.Input{ 20448 orig_input_tensor_shape, out_backprop, row_pooling_sequence, col_pooling_sequence, 20449 }, 20450 Attrs: attrs, 20451 } 20452 op := scope.AddOperation(opspec) 20453 return op.Output(0) 20454 } 20455 20456 // StaticRegexReplaceAttr is an optional argument to StaticRegexReplace. 20457 type StaticRegexReplaceAttr func(optionalAttr) 20458 20459 // StaticRegexReplaceReplaceGlobal sets the optional replace_global attribute to value. 20460 // 20461 // value: If True, the replacement is global, otherwise the replacement 20462 // is done only on the first match. 20463 // If not specified, defaults to true 20464 func StaticRegexReplaceReplaceGlobal(value bool) StaticRegexReplaceAttr { 20465 return func(m optionalAttr) { 20466 m["replace_global"] = value 20467 } 20468 } 20469 20470 // Replaces the match of pattern in input with rewrite. 20471 // 20472 // It follows the re2 syntax (https://github.com/google/re2/wiki/Syntax) 20473 // 20474 // Arguments: 20475 // input: The text to be processed. 20476 // pattern: The regular expression to match the input. 20477 // rewrite: The rewrite to be applied to the matched expression. 20478 // 20479 // Returns The text after applying pattern and rewrite. 20480 func StaticRegexReplace(scope *Scope, input tf.Output, pattern string, rewrite string, optional ...StaticRegexReplaceAttr) (output tf.Output) { 20481 if scope.Err() != nil { 20482 return 20483 } 20484 attrs := map[string]interface{}{"pattern": pattern, "rewrite": rewrite} 20485 for _, a := range optional { 20486 a(attrs) 20487 } 20488 opspec := tf.OpSpec{ 20489 Type: "StaticRegexReplace", 20490 Input: []tf.Input{ 20491 input, 20492 }, 20493 Attrs: attrs, 20494 } 20495 op := scope.AddOperation(opspec) 20496 return op.Output(0) 20497 } 20498 20499 // Computes gradients for the exponential linear (Elu) operation. 20500 // 20501 // Arguments: 20502 // gradients: The backpropagated gradients to the corresponding Elu operation. 20503 // outputs: The outputs of the corresponding Elu operation. 20504 // 20505 // Returns The gradients: `gradients * (outputs + 1)` if outputs < 0, 20506 // `gradients` otherwise. 20507 func EluGrad(scope *Scope, gradients tf.Output, outputs tf.Output) (backprops tf.Output) { 20508 if scope.Err() != nil { 20509 return 20510 } 20511 opspec := tf.OpSpec{ 20512 Type: "EluGrad", 20513 Input: []tf.Input{ 20514 gradients, outputs, 20515 }, 20516 } 20517 op := scope.AddOperation(opspec) 20518 return op.Output(0) 20519 } 20520 20521 // Converts each string in the input Tensor to its hash mod by a number of buckets. 20522 // 20523 // The hash function is deterministic on the content of the string within the 20524 // process. 20525 // 20526 // Note that the hash function may change from time to time. 20527 // This functionality will be deprecated and it's recommended to use 20528 // `tf.string_to_hash_bucket_fast()` or `tf.string_to_hash_bucket_strong()`. 20529 // 20530 // Arguments: 20531 // 20532 // num_buckets: The number of buckets. 20533 // 20534 // Returns A Tensor of the same shape as the input `string_tensor`. 20535 func StringToHashBucket(scope *Scope, string_tensor tf.Output, num_buckets int64) (output tf.Output) { 20536 if scope.Err() != nil { 20537 return 20538 } 20539 attrs := map[string]interface{}{"num_buckets": num_buckets} 20540 opspec := tf.OpSpec{ 20541 Type: "StringToHashBucket", 20542 Input: []tf.Input{ 20543 string_tensor, 20544 }, 20545 Attrs: attrs, 20546 } 20547 op := scope.AddOperation(opspec) 20548 return op.Output(0) 20549 } 20550 20551 // Creates a dataset that batches `batch_size` elements from `input_dataset`. 20552 // 20553 // Arguments: 20554 // 20555 // batch_size: A scalar representing the number of elements to accumulate in a batch. 20556 // drop_remainder: A scalar representing whether the last batch should be dropped in case its size 20557 // is smaller than desired. 20558 // 20559 // 20560 func BatchDatasetV2(scope *Scope, input_dataset tf.Output, batch_size tf.Output, drop_remainder tf.Output, output_types []tf.DataType, output_shapes []tf.Shape) (handle tf.Output) { 20561 if scope.Err() != nil { 20562 return 20563 } 20564 attrs := map[string]interface{}{"output_types": output_types, "output_shapes": output_shapes} 20565 opspec := tf.OpSpec{ 20566 Type: "BatchDatasetV2", 20567 Input: []tf.Input{ 20568 input_dataset, batch_size, drop_remainder, 20569 }, 20570 Attrs: attrs, 20571 } 20572 op := scope.AddOperation(opspec) 20573 return op.Output(0) 20574 } 20575 20576 // Computes the gradient of `igamma(a, x)` wrt `a`. 20577 func IgammaGradA(scope *Scope, a tf.Output, x tf.Output) (z tf.Output) { 20578 if scope.Err() != nil { 20579 return 20580 } 20581 opspec := tf.OpSpec{ 20582 Type: "IgammaGradA", 20583 Input: []tf.Input{ 20584 a, x, 20585 }, 20586 } 20587 op := scope.AddOperation(opspec) 20588 return op.Output(0) 20589 } 20590 20591 // Creates a dataset that contains `count` elements from the `input_dataset`. 20592 // 20593 // Arguments: 20594 // 20595 // count: A scalar representing the number of elements from the `input_dataset` 20596 // that should be taken. A value of `-1` indicates that all of `input_dataset` 20597 // is taken. 20598 // 20599 // 20600 func TakeDataset(scope *Scope, input_dataset tf.Output, count tf.Output, output_types []tf.DataType, output_shapes []tf.Shape) (handle tf.Output) { 20601 if scope.Err() != nil { 20602 return 20603 } 20604 attrs := map[string]interface{}{"output_types": output_types, "output_shapes": output_shapes} 20605 opspec := tf.OpSpec{ 20606 Type: "TakeDataset", 20607 Input: []tf.Input{ 20608 input_dataset, count, 20609 }, 20610 Attrs: attrs, 20611 } 20612 op := scope.AddOperation(opspec) 20613 return op.Output(0) 20614 } 20615 20616 // FakeQuantWithMinMaxVarsAttr is an optional argument to FakeQuantWithMinMaxVars. 20617 type FakeQuantWithMinMaxVarsAttr func(optionalAttr) 20618 20619 // FakeQuantWithMinMaxVarsNumBits sets the optional num_bits attribute to value. 20620 // If not specified, defaults to 8 20621 func FakeQuantWithMinMaxVarsNumBits(value int64) FakeQuantWithMinMaxVarsAttr { 20622 return func(m optionalAttr) { 20623 m["num_bits"] = value 20624 } 20625 } 20626 20627 // FakeQuantWithMinMaxVarsNarrowRange sets the optional narrow_range attribute to value. 20628 // If not specified, defaults to false 20629 func FakeQuantWithMinMaxVarsNarrowRange(value bool) FakeQuantWithMinMaxVarsAttr { 20630 return func(m optionalAttr) { 20631 m["narrow_range"] = value 20632 } 20633 } 20634 20635 // Fake-quantize the 'inputs' tensor of type float via global float scalars `min` 20636 // 20637 // and `max` to 'outputs' tensor of same shape as `inputs`. 20638 // 20639 // `[min; max]` define the clamping range for the `inputs` data. 20640 // `inputs` values are quantized into the quantization range (`[0; 2^num_bits - 1]` 20641 // when `narrow_range` is false and `[1; 2^num_bits - 1]` when it is true) and 20642 // then de-quantized and output as floats in `[min; max]` interval. 20643 // `num_bits` is the bitwidth of the quantization; between 2 and 16, inclusive. 20644 // 20645 // This operation has a gradient and thus allows for training `min` and `max` 20646 // values. 20647 func FakeQuantWithMinMaxVars(scope *Scope, inputs tf.Output, min tf.Output, max tf.Output, optional ...FakeQuantWithMinMaxVarsAttr) (outputs tf.Output) { 20648 if scope.Err() != nil { 20649 return 20650 } 20651 attrs := map[string]interface{}{} 20652 for _, a := range optional { 20653 a(attrs) 20654 } 20655 opspec := tf.OpSpec{ 20656 Type: "FakeQuantWithMinMaxVars", 20657 Input: []tf.Input{ 20658 inputs, min, max, 20659 }, 20660 Attrs: attrs, 20661 } 20662 op := scope.AddOperation(opspec) 20663 return op.Output(0) 20664 } 20665 20666 // RetrieveTPUEmbeddingMomentumParametersAttr is an optional argument to RetrieveTPUEmbeddingMomentumParameters. 20667 type RetrieveTPUEmbeddingMomentumParametersAttr func(optionalAttr) 20668 20669 // RetrieveTPUEmbeddingMomentumParametersTableId sets the optional table_id attribute to value. 20670 // If not specified, defaults to -1 20671 // 20672 // REQUIRES: value >= -1 20673 func RetrieveTPUEmbeddingMomentumParametersTableId(value int64) RetrieveTPUEmbeddingMomentumParametersAttr { 20674 return func(m optionalAttr) { 20675 m["table_id"] = value 20676 } 20677 } 20678 20679 // RetrieveTPUEmbeddingMomentumParametersTableName sets the optional table_name attribute to value. 20680 // If not specified, defaults to "" 20681 func RetrieveTPUEmbeddingMomentumParametersTableName(value string) RetrieveTPUEmbeddingMomentumParametersAttr { 20682 return func(m optionalAttr) { 20683 m["table_name"] = value 20684 } 20685 } 20686 20687 // Retrieve Momentum embedding parameters. 20688 // 20689 // An op that retrieves optimization parameters from embedding to host 20690 // memory. Must be preceded by a ConfigureTPUEmbeddingHost op that sets up 20691 // the correct embedding table configuration. For example, this op is 20692 // used to retrieve updated parameters before saving a checkpoint. 20693 // 20694 // Returns Parameter parameters updated by the Momentum optimization algorithm.Parameter momenta updated by the Momentum optimization algorithm. 20695 func RetrieveTPUEmbeddingMomentumParameters(scope *Scope, num_shards int64, shard_id int64, optional ...RetrieveTPUEmbeddingMomentumParametersAttr) (parameters tf.Output, momenta tf.Output) { 20696 if scope.Err() != nil { 20697 return 20698 } 20699 attrs := map[string]interface{}{"num_shards": num_shards, "shard_id": shard_id} 20700 for _, a := range optional { 20701 a(attrs) 20702 } 20703 opspec := tf.OpSpec{ 20704 Type: "RetrieveTPUEmbeddingMomentumParameters", 20705 20706 Attrs: attrs, 20707 } 20708 op := scope.AddOperation(opspec) 20709 return op.Output(0), op.Output(1) 20710 } 20711 20712 // Forwards the value of an available tensor from `inputs` to `output`. 20713 // 20714 // `Merge` waits for at least one of the tensors in `inputs` to become available. 20715 // It is usually combined with `Switch` to implement branching. 20716 // 20717 // `Merge` forwards the first tensor to become available to `output`, and sets 20718 // `value_index` to its index in `inputs`. 20719 // 20720 // Arguments: 20721 // inputs: The input tensors, exactly one of which will become available. 20722 // 20723 // Returns Will be set to the available input tensor.The index of the chosen input tensor in `inputs`. 20724 func Merge(scope *Scope, inputs []tf.Output) (output tf.Output, value_index tf.Output) { 20725 if scope.Err() != nil { 20726 return 20727 } 20728 opspec := tf.OpSpec{ 20729 Type: "Merge", 20730 Input: []tf.Input{ 20731 tf.OutputList(inputs), 20732 }, 20733 } 20734 op := scope.AddOperation(opspec) 20735 return op.Output(0), op.Output(1) 20736 } 20737 20738 // QueueCloseV2Attr is an optional argument to QueueCloseV2. 20739 type QueueCloseV2Attr func(optionalAttr) 20740 20741 // QueueCloseV2CancelPendingEnqueues sets the optional cancel_pending_enqueues attribute to value. 20742 // 20743 // value: If true, all pending enqueue requests that are 20744 // blocked on the given queue will be canceled. 20745 // If not specified, defaults to false 20746 func QueueCloseV2CancelPendingEnqueues(value bool) QueueCloseV2Attr { 20747 return func(m optionalAttr) { 20748 m["cancel_pending_enqueues"] = value 20749 } 20750 } 20751 20752 // Closes the given queue. 20753 // 20754 // This operation signals that no more elements will be enqueued in the 20755 // given queue. Subsequent Enqueue(Many) operations will fail. 20756 // Subsequent Dequeue(Many) operations will continue to succeed if 20757 // sufficient elements remain in the queue. Subsequent Dequeue(Many) 20758 // operations that would block will fail immediately. 20759 // 20760 // Arguments: 20761 // handle: The handle to a queue. 20762 // 20763 // Returns the created operation. 20764 func QueueCloseV2(scope *Scope, handle tf.Output, optional ...QueueCloseV2Attr) (o *tf.Operation) { 20765 if scope.Err() != nil { 20766 return 20767 } 20768 attrs := map[string]interface{}{} 20769 for _, a := range optional { 20770 a(attrs) 20771 } 20772 opspec := tf.OpSpec{ 20773 Type: "QueueCloseV2", 20774 Input: []tf.Input{ 20775 handle, 20776 }, 20777 Attrs: attrs, 20778 } 20779 return scope.AddOperation(opspec) 20780 } 20781 20782 // Writes the given dataset to the given file using the TFRecord format. 20783 // 20784 // Arguments: 20785 // input_dataset: A variant tensor representing the dataset to write. 20786 // filename: A scalar string tensor representing the filename to use. 20787 // compression_type: A scalar string tensor containing either (i) the empty string (no 20788 // compression), (ii) "ZLIB", or (iii) "GZIP". 20789 // 20790 // Returns the created operation. 20791 func ExperimentalDatasetToTFRecord(scope *Scope, input_dataset tf.Output, filename tf.Output, compression_type tf.Output) (o *tf.Operation) { 20792 if scope.Err() != nil { 20793 return 20794 } 20795 opspec := tf.OpSpec{ 20796 Type: "ExperimentalDatasetToTFRecord", 20797 Input: []tf.Input{ 20798 input_dataset, filename, compression_type, 20799 }, 20800 } 20801 return scope.AddOperation(opspec) 20802 } 20803 20804 // BiasAddGradAttr is an optional argument to BiasAddGrad. 20805 type BiasAddGradAttr func(optionalAttr) 20806 20807 // BiasAddGradDataFormat sets the optional data_format attribute to value. 20808 // 20809 // value: Specify the data format of the input and output data. With the 20810 // default format "NHWC", the bias tensor will be added to the last dimension 20811 // of the value tensor. 20812 // Alternatively, the format could be "NCHW", the data storage order of: 20813 // [batch, in_channels, in_height, in_width]. 20814 // The tensor will be added to "in_channels", the third-to-the-last 20815 // dimension. 20816 // If not specified, defaults to "NHWC" 20817 func BiasAddGradDataFormat(value string) BiasAddGradAttr { 20818 return func(m optionalAttr) { 20819 m["data_format"] = value 20820 } 20821 } 20822 20823 // The backward operation for "BiasAdd" on the "bias" tensor. 20824 // 20825 // It accumulates all the values from out_backprop into the feature dimension. 20826 // For NHWC data format, the feature dimension is the last. For NCHW data format, 20827 // the feature dimension is the third-to-last. 20828 // 20829 // Arguments: 20830 // out_backprop: Any number of dimensions. 20831 // 20832 // Returns 1-D with size the feature dimension of `out_backprop`. 20833 func BiasAddGrad(scope *Scope, out_backprop tf.Output, optional ...BiasAddGradAttr) (output tf.Output) { 20834 if scope.Err() != nil { 20835 return 20836 } 20837 attrs := map[string]interface{}{} 20838 for _, a := range optional { 20839 a(attrs) 20840 } 20841 opspec := tf.OpSpec{ 20842 Type: "BiasAddGrad", 20843 Input: []tf.Input{ 20844 out_backprop, 20845 }, 20846 Attrs: attrs, 20847 } 20848 op := scope.AddOperation(opspec) 20849 return op.Output(0) 20850 } 20851 20852 // Reduces `input` from `num_devices` using `reduction` to a single device. 20853 // 20854 // Reduces `input` from `num_devices` using `reduction` to a single device. 20855 // 20856 // The graph should be constructed so that all inputs have a valid device 20857 // assignment, and the op itself is assigned one of these devices. 20858 // 20859 // input: The input to the reduction. 20860 // data: the value of the reduction across all `num_devices` devices. 20861 // reduction: the reduction operation to perform. 20862 func NcclReduce(scope *Scope, input []tf.Output, reduction string) (data tf.Output) { 20863 if scope.Err() != nil { 20864 return 20865 } 20866 attrs := map[string]interface{}{"reduction": reduction} 20867 opspec := tf.OpSpec{ 20868 Type: "NcclReduce", 20869 Input: []tf.Input{ 20870 tf.OutputList(input), 20871 }, 20872 Attrs: attrs, 20873 } 20874 op := scope.AddOperation(opspec) 20875 return op.Output(0) 20876 } 20877 20878 // Computes the gradient of morphological 2-D dilation with respect to the input. 20879 // 20880 // Arguments: 20881 // input: 4-D with shape `[batch, in_height, in_width, depth]`. 20882 // filter: 3-D with shape `[filter_height, filter_width, depth]`. 20883 // out_backprop: 4-D with shape `[batch, out_height, out_width, depth]`. 20884 // strides: 1-D of length 4. The stride of the sliding window for each dimension of 20885 // the input tensor. Must be: `[1, stride_height, stride_width, 1]`. 20886 // rates: 1-D of length 4. The input stride for atrous morphological dilation. 20887 // Must be: `[1, rate_height, rate_width, 1]`. 20888 // padding: The type of padding algorithm to use. 20889 // 20890 // Returns 4-D with shape `[batch, in_height, in_width, depth]`. 20891 func Dilation2DBackpropInput(scope *Scope, input tf.Output, filter tf.Output, out_backprop tf.Output, strides []int64, rates []int64, padding string) (in_backprop tf.Output) { 20892 if scope.Err() != nil { 20893 return 20894 } 20895 attrs := map[string]interface{}{"strides": strides, "rates": rates, "padding": padding} 20896 opspec := tf.OpSpec{ 20897 Type: "Dilation2DBackpropInput", 20898 Input: []tf.Input{ 20899 input, filter, out_backprop, 20900 }, 20901 Attrs: attrs, 20902 } 20903 op := scope.AddOperation(opspec) 20904 return op.Output(0) 20905 } 20906 20907 // An Op to sum inputs across replicated TPU instances. 20908 // 20909 // Each instance supplies its own input. 20910 // 20911 // For example, suppose there are 8 TPU instances: `[A, B, C, D, E, F, G, H]`. 20912 // Passing group_assignment=`[[0,2,4,6],[1,3,5,7]]` sets `A, C, E, G` as group 0, 20913 // and `B, D, F, H` as group 1. Thus we get the outputs: 20914 // `[A+C+E+G, B+D+F+H, A+C+E+G, B+D+F+H, A+C+E+G, B+D+F+H, A+C+E+G, B+D+F+H]`. 20915 // 20916 // Arguments: 20917 // input: The local input to the sum. 20918 // group_assignment: An int32 tensor with shape 20919 // [num_groups, num_replicas_per_group]. `group_assignment[i]` represents the 20920 // replica ids in the ith subgroup. 20921 // 20922 // Returns The sum of all the distributed inputs. 20923 func CrossReplicaSum(scope *Scope, input tf.Output, group_assignment tf.Output) (output tf.Output) { 20924 if scope.Err() != nil { 20925 return 20926 } 20927 opspec := tf.OpSpec{ 20928 Type: "CrossReplicaSum", 20929 Input: []tf.Input{ 20930 input, group_assignment, 20931 }, 20932 } 20933 op := scope.AddOperation(opspec) 20934 return op.Output(0) 20935 } 20936 20937 // ResourceSparseApplyMomentumAttr is an optional argument to ResourceSparseApplyMomentum. 20938 type ResourceSparseApplyMomentumAttr func(optionalAttr) 20939 20940 // ResourceSparseApplyMomentumUseLocking sets the optional use_locking attribute to value. 20941 // 20942 // value: If `True`, updating of the var and accum tensors will be protected 20943 // by a lock; otherwise the behavior is undefined, but may exhibit less 20944 // contention. 20945 // If not specified, defaults to false 20946 func ResourceSparseApplyMomentumUseLocking(value bool) ResourceSparseApplyMomentumAttr { 20947 return func(m optionalAttr) { 20948 m["use_locking"] = value 20949 } 20950 } 20951 20952 // ResourceSparseApplyMomentumUseNesterov sets the optional use_nesterov attribute to value. 20953 // 20954 // value: If `True`, the tensor passed to compute grad will be 20955 // var - lr * momentum * accum, so in the end, the var you get is actually 20956 // var - lr * momentum * accum. 20957 // If not specified, defaults to false 20958 func ResourceSparseApplyMomentumUseNesterov(value bool) ResourceSparseApplyMomentumAttr { 20959 return func(m optionalAttr) { 20960 m["use_nesterov"] = value 20961 } 20962 } 20963 20964 // Update relevant entries in '*var' and '*accum' according to the momentum scheme. 20965 // 20966 // Set use_nesterov = True if you want to use Nesterov momentum. 20967 // 20968 // That is for rows we have grad for, we update var and accum as follows: 20969 // 20970 // accum = accum * momentum + grad 20971 // var -= lr * accum 20972 // 20973 // Arguments: 20974 // var_: Should be from a Variable(). 20975 // accum: Should be from a Variable(). 20976 // lr: Learning rate. Must be a scalar. 20977 // grad: The gradient. 20978 // indices: A vector of indices into the first dimension of var and accum. 20979 // momentum: Momentum. Must be a scalar. 20980 // 20981 // Returns the created operation. 20982 func ResourceSparseApplyMomentum(scope *Scope, var_ tf.Output, accum tf.Output, lr tf.Output, grad tf.Output, indices tf.Output, momentum tf.Output, optional ...ResourceSparseApplyMomentumAttr) (o *tf.Operation) { 20983 if scope.Err() != nil { 20984 return 20985 } 20986 attrs := map[string]interface{}{} 20987 for _, a := range optional { 20988 a(attrs) 20989 } 20990 opspec := tf.OpSpec{ 20991 Type: "ResourceSparseApplyMomentum", 20992 Input: []tf.Input{ 20993 var_, accum, lr, grad, indices, momentum, 20994 }, 20995 Attrs: attrs, 20996 } 20997 return scope.AddOperation(opspec) 20998 } 20999 21000 // An Op to permute tensors across replicated TPU instances. 21001 // 21002 // Each instance supplies its own input. 21003 // 21004 // For example, suppose there are 4 TPU instances: `[A, B, C, D]`. Passing 21005 // source_target_pairs=`[[0,1],[1,2],[2,3],[3,0]]` gets the outputs: 21006 // `[D, A, B, C]`. 21007 // 21008 // Arguments: 21009 // input: The local input to be permuted. Currently only supports float and 21010 // bfloat16. 21011 // source_target_pairs: A tensor with shape [num_pairs, 2]. 21012 // 21013 // Returns The permuted input. 21014 func CollectivePermute(scope *Scope, input tf.Output, source_target_pairs tf.Output) (output tf.Output) { 21015 if scope.Err() != nil { 21016 return 21017 } 21018 opspec := tf.OpSpec{ 21019 Type: "CollectivePermute", 21020 Input: []tf.Input{ 21021 input, source_target_pairs, 21022 }, 21023 } 21024 op := scope.AddOperation(opspec) 21025 return op.Output(0) 21026 } 21027 21028 // Returns the complex conjugate of a complex number. 21029 // 21030 // Given a tensor `input` of complex numbers, this operation returns a tensor of 21031 // complex numbers that are the complex conjugate of each element in `input`. The 21032 // complex numbers in `input` must be of the form \\(a + bj\\), where *a* is the 21033 // real part and *b* is the imaginary part. 21034 // 21035 // The complex conjugate returned by this operation is of the form \\(a - bj\\). 21036 // 21037 // For example: 21038 // 21039 // ``` 21040 // # tensor 'input' is [-2.25 + 4.75j, 3.25 + 5.75j] 21041 // tf.conj(input) ==> [-2.25 - 4.75j, 3.25 - 5.75j] 21042 // ``` 21043 func Conj(scope *Scope, input tf.Output) (output tf.Output) { 21044 if scope.Err() != nil { 21045 return 21046 } 21047 opspec := tf.OpSpec{ 21048 Type: "Conj", 21049 Input: []tf.Input{ 21050 input, 21051 }, 21052 } 21053 op := scope.AddOperation(opspec) 21054 return op.Output(0) 21055 } 21056 21057 // RetrieveTPUEmbeddingCenteredRMSPropParametersAttr is an optional argument to RetrieveTPUEmbeddingCenteredRMSPropParameters. 21058 type RetrieveTPUEmbeddingCenteredRMSPropParametersAttr func(optionalAttr) 21059 21060 // RetrieveTPUEmbeddingCenteredRMSPropParametersTableId sets the optional table_id attribute to value. 21061 // If not specified, defaults to -1 21062 // 21063 // REQUIRES: value >= -1 21064 func RetrieveTPUEmbeddingCenteredRMSPropParametersTableId(value int64) RetrieveTPUEmbeddingCenteredRMSPropParametersAttr { 21065 return func(m optionalAttr) { 21066 m["table_id"] = value 21067 } 21068 } 21069 21070 // RetrieveTPUEmbeddingCenteredRMSPropParametersTableName sets the optional table_name attribute to value. 21071 // If not specified, defaults to "" 21072 func RetrieveTPUEmbeddingCenteredRMSPropParametersTableName(value string) RetrieveTPUEmbeddingCenteredRMSPropParametersAttr { 21073 return func(m optionalAttr) { 21074 m["table_name"] = value 21075 } 21076 } 21077 21078 // Retrieve centered RMSProp embedding parameters. 21079 // 21080 // An op that retrieves optimization parameters from embedding to host 21081 // memory. Must be preceded by a ConfigureTPUEmbeddingHost op that sets up 21082 // the correct embedding table configuration. For example, this op is 21083 // used to retrieve updated parameters before saving a checkpoint. 21084 // 21085 // Returns Parameter parameters updated by the centered RMSProp optimization algorithm.Parameter ms updated by the centered RMSProp optimization algorithm.Parameter mom updated by the centered RMSProp optimization algorithm.Parameter mg updated by the centered RMSProp optimization algorithm. 21086 func RetrieveTPUEmbeddingCenteredRMSPropParameters(scope *Scope, num_shards int64, shard_id int64, optional ...RetrieveTPUEmbeddingCenteredRMSPropParametersAttr) (parameters tf.Output, ms tf.Output, mom tf.Output, mg tf.Output) { 21087 if scope.Err() != nil { 21088 return 21089 } 21090 attrs := map[string]interface{}{"num_shards": num_shards, "shard_id": shard_id} 21091 for _, a := range optional { 21092 a(attrs) 21093 } 21094 opspec := tf.OpSpec{ 21095 Type: "RetrieveTPUEmbeddingCenteredRMSPropParameters", 21096 21097 Attrs: attrs, 21098 } 21099 op := scope.AddOperation(opspec) 21100 return op.Output(0), op.Output(1), op.Output(2), op.Output(3) 21101 } 21102 21103 // StringSplitAttr is an optional argument to StringSplit. 21104 type StringSplitAttr func(optionalAttr) 21105 21106 // StringSplitSkipEmpty sets the optional skip_empty attribute to value. 21107 // 21108 // value: A `bool`. If `True`, skip the empty strings from the result. 21109 // If not specified, defaults to true 21110 func StringSplitSkipEmpty(value bool) StringSplitAttr { 21111 return func(m optionalAttr) { 21112 m["skip_empty"] = value 21113 } 21114 } 21115 21116 // Split elements of `input` based on `delimiter` into a `SparseTensor`. 21117 // 21118 // Let N be the size of source (typically N will be the batch size). Split each 21119 // element of `input` based on `delimiter` and return a `SparseTensor` 21120 // containing the splitted tokens. Empty tokens are ignored. 21121 // 21122 // `delimiter` can be empty, or a string of split characters. If `delimiter` is an 21123 // empty string, each element of `input` is split into individual single-byte 21124 // character strings, including splitting of UTF-8 multibyte sequences. Otherwise 21125 // every character of `delimiter` is a potential split point. 21126 // 21127 // For example: 21128 // N = 2, input[0] is 'hello world' and input[1] is 'a b c', then the output 21129 // will be 21130 // 21131 // indices = [0, 0; 21132 // 0, 1; 21133 // 1, 0; 21134 // 1, 1; 21135 // 1, 2] 21136 // shape = [2, 3] 21137 // values = ['hello', 'world', 'a', 'b', 'c'] 21138 // 21139 // Arguments: 21140 // input: 1-D. Strings to split. 21141 // delimiter: 0-D. Delimiter characters (bytes), or empty string. 21142 // 21143 // Returns A dense matrix of int64 representing the indices of the sparse tensor.A vector of strings corresponding to the splited values.a length-2 vector of int64 representing the shape of the sparse 21144 // tensor, where the first value is N and the second value is the maximum number 21145 // of tokens in a single input entry. 21146 func StringSplit(scope *Scope, input tf.Output, delimiter tf.Output, optional ...StringSplitAttr) (indices tf.Output, values tf.Output, shape tf.Output) { 21147 if scope.Err() != nil { 21148 return 21149 } 21150 attrs := map[string]interface{}{} 21151 for _, a := range optional { 21152 a(attrs) 21153 } 21154 opspec := tf.OpSpec{ 21155 Type: "StringSplit", 21156 Input: []tf.Input{ 21157 input, delimiter, 21158 }, 21159 Attrs: attrs, 21160 } 21161 op := scope.AddOperation(opspec) 21162 return op.Output(0), op.Output(1), op.Output(2) 21163 } 21164 21165 // RetrieveTPUEmbeddingFTRLParametersAttr is an optional argument to RetrieveTPUEmbeddingFTRLParameters. 21166 type RetrieveTPUEmbeddingFTRLParametersAttr func(optionalAttr) 21167 21168 // RetrieveTPUEmbeddingFTRLParametersTableId sets the optional table_id attribute to value. 21169 // If not specified, defaults to -1 21170 // 21171 // REQUIRES: value >= -1 21172 func RetrieveTPUEmbeddingFTRLParametersTableId(value int64) RetrieveTPUEmbeddingFTRLParametersAttr { 21173 return func(m optionalAttr) { 21174 m["table_id"] = value 21175 } 21176 } 21177 21178 // RetrieveTPUEmbeddingFTRLParametersTableName sets the optional table_name attribute to value. 21179 // If not specified, defaults to "" 21180 func RetrieveTPUEmbeddingFTRLParametersTableName(value string) RetrieveTPUEmbeddingFTRLParametersAttr { 21181 return func(m optionalAttr) { 21182 m["table_name"] = value 21183 } 21184 } 21185 21186 // Retrieve FTRL embedding parameters. 21187 // 21188 // An op that retrieves optimization parameters from embedding to host 21189 // memory. Must be preceded by a ConfigureTPUEmbeddingHost op that sets up 21190 // the correct embedding table configuration. For example, this op is 21191 // used to retrieve updated parameters before saving a checkpoint. 21192 // 21193 // Returns Parameter parameters updated by the FTRL optimization algorithm.Parameter accumulators updated by the FTRL optimization algorithm.Parameter linears updated by the FTRL optimization algorithm. 21194 func RetrieveTPUEmbeddingFTRLParameters(scope *Scope, num_shards int64, shard_id int64, optional ...RetrieveTPUEmbeddingFTRLParametersAttr) (parameters tf.Output, accumulators tf.Output, linears tf.Output) { 21195 if scope.Err() != nil { 21196 return 21197 } 21198 attrs := map[string]interface{}{"num_shards": num_shards, "shard_id": shard_id} 21199 for _, a := range optional { 21200 a(attrs) 21201 } 21202 opspec := tf.OpSpec{ 21203 Type: "RetrieveTPUEmbeddingFTRLParameters", 21204 21205 Attrs: attrs, 21206 } 21207 op := scope.AddOperation(opspec) 21208 return op.Output(0), op.Output(1), op.Output(2) 21209 } 21210 21211 // MaxPool3DAttr is an optional argument to MaxPool3D. 21212 type MaxPool3DAttr func(optionalAttr) 21213 21214 // MaxPool3DDataFormat sets the optional data_format attribute to value. 21215 // 21216 // value: The data format of the input and output data. With the 21217 // default format "NDHWC", the data is stored in the order of: 21218 // [batch, in_depth, in_height, in_width, in_channels]. 21219 // Alternatively, the format could be "NCDHW", the data storage order is: 21220 // [batch, in_channels, in_depth, in_height, in_width]. 21221 // If not specified, defaults to "NDHWC" 21222 func MaxPool3DDataFormat(value string) MaxPool3DAttr { 21223 return func(m optionalAttr) { 21224 m["data_format"] = value 21225 } 21226 } 21227 21228 // Performs 3D max pooling on the input. 21229 // 21230 // Arguments: 21231 // input: Shape `[batch, depth, rows, cols, channels]` tensor to pool over. 21232 // ksize: 1-D tensor of length 5. The size of the window for each dimension of 21233 // the input tensor. Must have `ksize[0] = ksize[4] = 1`. 21234 // strides: 1-D tensor of length 5. The stride of the sliding window for each 21235 // dimension of `input`. Must have `strides[0] = strides[4] = 1`. 21236 // padding: The type of padding algorithm to use. 21237 // 21238 // Returns The max pooled output tensor. 21239 func MaxPool3D(scope *Scope, input tf.Output, ksize []int64, strides []int64, padding string, optional ...MaxPool3DAttr) (output tf.Output) { 21240 if scope.Err() != nil { 21241 return 21242 } 21243 attrs := map[string]interface{}{"ksize": ksize, "strides": strides, "padding": padding} 21244 for _, a := range optional { 21245 a(attrs) 21246 } 21247 opspec := tf.OpSpec{ 21248 Type: "MaxPool3D", 21249 Input: []tf.Input{ 21250 input, 21251 }, 21252 Attrs: attrs, 21253 } 21254 op := scope.AddOperation(opspec) 21255 return op.Output(0) 21256 } 21257 21258 // Convert JSON-encoded Example records to binary protocol buffer strings. 21259 // 21260 // This op translates a tensor containing Example records, encoded using 21261 // the [standard JSON 21262 // mapping](https://developers.google.com/protocol-buffers/docs/proto3#json), 21263 // into a tensor containing the same records encoded as binary protocol 21264 // buffers. The resulting tensor can then be fed to any of the other 21265 // Example-parsing ops. 21266 // 21267 // Arguments: 21268 // json_examples: Each string is a JSON object serialized according to the JSON 21269 // mapping of the Example proto. 21270 // 21271 // Returns Each string is a binary Example protocol buffer corresponding 21272 // to the respective element of `json_examples`. 21273 func DecodeJSONExample(scope *Scope, json_examples tf.Output) (binary_examples tf.Output) { 21274 if scope.Err() != nil { 21275 return 21276 } 21277 opspec := tf.OpSpec{ 21278 Type: "DecodeJSONExample", 21279 Input: []tf.Input{ 21280 json_examples, 21281 }, 21282 } 21283 op := scope.AddOperation(opspec) 21284 return op.Output(0) 21285 } 21286 21287 // QueueEnqueueManyV2Attr is an optional argument to QueueEnqueueManyV2. 21288 type QueueEnqueueManyV2Attr func(optionalAttr) 21289 21290 // QueueEnqueueManyV2TimeoutMs sets the optional timeout_ms attribute to value. 21291 // 21292 // value: If the queue is too full, this operation will block for up 21293 // to timeout_ms milliseconds. 21294 // Note: This option is not supported yet. 21295 // If not specified, defaults to -1 21296 func QueueEnqueueManyV2TimeoutMs(value int64) QueueEnqueueManyV2Attr { 21297 return func(m optionalAttr) { 21298 m["timeout_ms"] = value 21299 } 21300 } 21301 21302 // Enqueues zero or more tuples of one or more tensors in the given queue. 21303 // 21304 // This operation slices each component tensor along the 0th dimension to 21305 // make multiple queue elements. All of the tuple components must have the 21306 // same size in the 0th dimension. 21307 // 21308 // The components input has k elements, which correspond to the components of 21309 // tuples stored in the given queue. 21310 // 21311 // N.B. If the queue is full, this operation will block until the given 21312 // elements have been enqueued (or 'timeout_ms' elapses, if specified). 21313 // 21314 // Arguments: 21315 // handle: The handle to a queue. 21316 // components: One or more tensors from which the enqueued tensors should 21317 // be taken. 21318 // 21319 // Returns the created operation. 21320 func QueueEnqueueManyV2(scope *Scope, handle tf.Output, components []tf.Output, optional ...QueueEnqueueManyV2Attr) (o *tf.Operation) { 21321 if scope.Err() != nil { 21322 return 21323 } 21324 attrs := map[string]interface{}{} 21325 for _, a := range optional { 21326 a(attrs) 21327 } 21328 opspec := tf.OpSpec{ 21329 Type: "QueueEnqueueManyV2", 21330 Input: []tf.Input{ 21331 handle, tf.OutputList(components), 21332 }, 21333 Attrs: attrs, 21334 } 21335 return scope.AddOperation(opspec) 21336 } 21337 21338 // PrintV2Attr is an optional argument to PrintV2. 21339 type PrintV2Attr func(optionalAttr) 21340 21341 // PrintV2OutputStream sets the optional output_stream attribute to value. 21342 // 21343 // value: A string specifying the output stream or logging level to print to. 21344 // If not specified, defaults to "stderr" 21345 func PrintV2OutputStream(value string) PrintV2Attr { 21346 return func(m optionalAttr) { 21347 m["output_stream"] = value 21348 } 21349 } 21350 21351 // Prints a string scalar. 21352 // 21353 // Prints a string scalar to the desired output_stream. 21354 // 21355 // Arguments: 21356 // input: The string scalar to print. 21357 // 21358 // Returns the created operation. 21359 func PrintV2(scope *Scope, input tf.Output, optional ...PrintV2Attr) (o *tf.Operation) { 21360 if scope.Err() != nil { 21361 return 21362 } 21363 attrs := map[string]interface{}{} 21364 for _, a := range optional { 21365 a(attrs) 21366 } 21367 opspec := tf.OpSpec{ 21368 Type: "PrintV2", 21369 Input: []tf.Input{ 21370 input, 21371 }, 21372 Attrs: attrs, 21373 } 21374 return scope.AddOperation(opspec) 21375 } 21376 21377 // The gradient operator for the SparseSlice op. 21378 // 21379 // This op takes in the upstream gradient w.r.t. non-empty values of 21380 // the sliced `SparseTensor`, and outputs the gradients w.r.t. 21381 // the non-empty values of input `SparseTensor`. 21382 // 21383 // Arguments: 21384 // backprop_val_grad: 1-D. The gradient with respect to 21385 // the non-empty values of the sliced `SparseTensor`. 21386 // input_indices: 2-D. The `indices` of the input `SparseTensor`. 21387 // input_start: 1-D. tensor represents the start of the slice. 21388 // output_indices: 2-D. The `indices` of the sliced `SparseTensor`. 21389 // 21390 // Returns 1-D. The gradient with respect to the non-empty values of input `SparseTensor`. 21391 func SparseSliceGrad(scope *Scope, backprop_val_grad tf.Output, input_indices tf.Output, input_start tf.Output, output_indices tf.Output) (val_grad tf.Output) { 21392 if scope.Err() != nil { 21393 return 21394 } 21395 opspec := tf.OpSpec{ 21396 Type: "SparseSliceGrad", 21397 Input: []tf.Input{ 21398 backprop_val_grad, input_indices, input_start, output_indices, 21399 }, 21400 } 21401 op := scope.AddOperation(opspec) 21402 return op.Output(0) 21403 } 21404 21405 // ResourceApplyProximalAdagradAttr is an optional argument to ResourceApplyProximalAdagrad. 21406 type ResourceApplyProximalAdagradAttr func(optionalAttr) 21407 21408 // ResourceApplyProximalAdagradUseLocking sets the optional use_locking attribute to value. 21409 // 21410 // value: If True, updating of the var and accum tensors will be protected by 21411 // a lock; otherwise the behavior is undefined, but may exhibit less contention. 21412 // If not specified, defaults to false 21413 func ResourceApplyProximalAdagradUseLocking(value bool) ResourceApplyProximalAdagradAttr { 21414 return func(m optionalAttr) { 21415 m["use_locking"] = value 21416 } 21417 } 21418 21419 // Update '*var' and '*accum' according to FOBOS with Adagrad learning rate. 21420 // 21421 // accum += grad * grad 21422 // prox_v = var - lr * grad * (1 / sqrt(accum)) 21423 // var = sign(prox_v)/(1+lr*l2) * max{|prox_v|-lr*l1,0} 21424 // 21425 // Arguments: 21426 // var_: Should be from a Variable(). 21427 // accum: Should be from a Variable(). 21428 // lr: Scaling factor. Must be a scalar. 21429 // l1: L1 regularization. Must be a scalar. 21430 // l2: L2 regularization. Must be a scalar. 21431 // grad: The gradient. 21432 // 21433 // Returns the created operation. 21434 func ResourceApplyProximalAdagrad(scope *Scope, var_ tf.Output, accum tf.Output, lr tf.Output, l1 tf.Output, l2 tf.Output, grad tf.Output, optional ...ResourceApplyProximalAdagradAttr) (o *tf.Operation) { 21435 if scope.Err() != nil { 21436 return 21437 } 21438 attrs := map[string]interface{}{} 21439 for _, a := range optional { 21440 a(attrs) 21441 } 21442 opspec := tf.OpSpec{ 21443 Type: "ResourceApplyProximalAdagrad", 21444 Input: []tf.Input{ 21445 var_, accum, lr, l1, l2, grad, 21446 }, 21447 Attrs: attrs, 21448 } 21449 return scope.AddOperation(opspec) 21450 } 21451 21452 // MutableHashTableOfTensorsV2Attr is an optional argument to MutableHashTableOfTensorsV2. 21453 type MutableHashTableOfTensorsV2Attr func(optionalAttr) 21454 21455 // MutableHashTableOfTensorsV2Container sets the optional container attribute to value. 21456 // 21457 // value: If non-empty, this table is placed in the given container. 21458 // Otherwise, a default container is used. 21459 // If not specified, defaults to "" 21460 func MutableHashTableOfTensorsV2Container(value string) MutableHashTableOfTensorsV2Attr { 21461 return func(m optionalAttr) { 21462 m["container"] = value 21463 } 21464 } 21465 21466 // MutableHashTableOfTensorsV2SharedName sets the optional shared_name attribute to value. 21467 // 21468 // value: If non-empty, this table is shared under the given name across 21469 // multiple sessions. 21470 // If not specified, defaults to "" 21471 func MutableHashTableOfTensorsV2SharedName(value string) MutableHashTableOfTensorsV2Attr { 21472 return func(m optionalAttr) { 21473 m["shared_name"] = value 21474 } 21475 } 21476 21477 // MutableHashTableOfTensorsV2UseNodeNameSharing sets the optional use_node_name_sharing attribute to value. 21478 // If not specified, defaults to false 21479 func MutableHashTableOfTensorsV2UseNodeNameSharing(value bool) MutableHashTableOfTensorsV2Attr { 21480 return func(m optionalAttr) { 21481 m["use_node_name_sharing"] = value 21482 } 21483 } 21484 21485 // MutableHashTableOfTensorsV2ValueShape sets the optional value_shape attribute to value. 21486 // If not specified, defaults to <> 21487 func MutableHashTableOfTensorsV2ValueShape(value tf.Shape) MutableHashTableOfTensorsV2Attr { 21488 return func(m optionalAttr) { 21489 m["value_shape"] = value 21490 } 21491 } 21492 21493 // Creates an empty hash table. 21494 // 21495 // This op creates a mutable hash table, specifying the type of its keys and 21496 // values. Each value must be a vector. Data can be inserted into the table using 21497 // the insert operations. It does not support the initialization operation. 21498 // 21499 // Arguments: 21500 // key_dtype: Type of the table keys. 21501 // value_dtype: Type of the table values. 21502 // 21503 // Returns Handle to a table. 21504 func MutableHashTableOfTensorsV2(scope *Scope, key_dtype tf.DataType, value_dtype tf.DataType, optional ...MutableHashTableOfTensorsV2Attr) (table_handle tf.Output) { 21505 if scope.Err() != nil { 21506 return 21507 } 21508 attrs := map[string]interface{}{"key_dtype": key_dtype, "value_dtype": value_dtype} 21509 for _, a := range optional { 21510 a(attrs) 21511 } 21512 opspec := tf.OpSpec{ 21513 Type: "MutableHashTableOfTensorsV2", 21514 21515 Attrs: attrs, 21516 } 21517 op := scope.AddOperation(opspec) 21518 return op.Output(0) 21519 } 21520 21521 // ResourceApplyProximalGradientDescentAttr is an optional argument to ResourceApplyProximalGradientDescent. 21522 type ResourceApplyProximalGradientDescentAttr func(optionalAttr) 21523 21524 // ResourceApplyProximalGradientDescentUseLocking sets the optional use_locking attribute to value. 21525 // 21526 // value: If True, the subtraction will be protected by a lock; 21527 // otherwise the behavior is undefined, but may exhibit less contention. 21528 // If not specified, defaults to false 21529 func ResourceApplyProximalGradientDescentUseLocking(value bool) ResourceApplyProximalGradientDescentAttr { 21530 return func(m optionalAttr) { 21531 m["use_locking"] = value 21532 } 21533 } 21534 21535 // Update '*var' as FOBOS algorithm with fixed learning rate. 21536 // 21537 // prox_v = var - alpha * delta 21538 // var = sign(prox_v)/(1+alpha*l2) * max{|prox_v|-alpha*l1,0} 21539 // 21540 // Arguments: 21541 // var_: Should be from a Variable(). 21542 // alpha: Scaling factor. Must be a scalar. 21543 // l1: L1 regularization. Must be a scalar. 21544 // l2: L2 regularization. Must be a scalar. 21545 // delta: The change. 21546 // 21547 // Returns the created operation. 21548 func ResourceApplyProximalGradientDescent(scope *Scope, var_ tf.Output, alpha tf.Output, l1 tf.Output, l2 tf.Output, delta tf.Output, optional ...ResourceApplyProximalGradientDescentAttr) (o *tf.Operation) { 21549 if scope.Err() != nil { 21550 return 21551 } 21552 attrs := map[string]interface{}{} 21553 for _, a := range optional { 21554 a(attrs) 21555 } 21556 opspec := tf.OpSpec{ 21557 Type: "ResourceApplyProximalGradientDescent", 21558 Input: []tf.Input{ 21559 var_, alpha, l1, l2, delta, 21560 }, 21561 Attrs: attrs, 21562 } 21563 return scope.AddOperation(opspec) 21564 } 21565 21566 // Returns 0 if the denominator is zero. 21567 // 21568 // 21569 // *NOTE*: `DivNoNan` supports broadcasting. More about broadcasting 21570 // [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html) 21571 func DivNoNan(scope *Scope, x tf.Output, y tf.Output) (z tf.Output) { 21572 if scope.Err() != nil { 21573 return 21574 } 21575 opspec := tf.OpSpec{ 21576 Type: "DivNoNan", 21577 Input: []tf.Input{ 21578 x, y, 21579 }, 21580 } 21581 op := scope.AddOperation(opspec) 21582 return op.Output(0) 21583 } 21584 21585 // Subtracts a value from the current value of a variable. 21586 // 21587 // Any ReadVariableOp with a control dependency on this op is guaranteed to 21588 // see the decremented value or a subsequent newer one. 21589 // 21590 // Arguments: 21591 // resource: handle to the resource in which to store the variable. 21592 // value: the value by which the variable will be incremented. 21593 // 21594 // Returns the created operation. 21595 func AssignSubVariableOp(scope *Scope, resource tf.Output, value tf.Output) (o *tf.Operation) { 21596 if scope.Err() != nil { 21597 return 21598 } 21599 opspec := tf.OpSpec{ 21600 Type: "AssignSubVariableOp", 21601 Input: []tf.Input{ 21602 resource, value, 21603 }, 21604 } 21605 return scope.AddOperation(opspec) 21606 } 21607 21608 // RestoreAttr is an optional argument to Restore. 21609 type RestoreAttr func(optionalAttr) 21610 21611 // RestorePreferredShard sets the optional preferred_shard attribute to value. 21612 // 21613 // value: Index of file to open first if multiple files match 21614 // `file_pattern`. 21615 // If not specified, defaults to -1 21616 func RestorePreferredShard(value int64) RestoreAttr { 21617 return func(m optionalAttr) { 21618 m["preferred_shard"] = value 21619 } 21620 } 21621 21622 // Restores a tensor from checkpoint files. 21623 // 21624 // Reads a tensor stored in one or several files. If there are several files (for 21625 // instance because a tensor was saved as slices), `file_pattern` may contain 21626 // wildcard symbols (`*` and `?`) in the filename portion only, not in the 21627 // directory portion. 21628 // 21629 // If a `file_pattern` matches several files, `preferred_shard` can be used to hint 21630 // in which file the requested tensor is likely to be found. This op will first 21631 // open the file at index `preferred_shard` in the list of matching files and try 21632 // to restore tensors from that file. Only if some tensors or tensor slices are 21633 // not found in that first file, then the Op opens all the files. Setting 21634 // `preferred_shard` to match the value passed as the `shard` input 21635 // of a matching `Save` Op may speed up Restore. This attribute only affects 21636 // performance, not correctness. The default value -1 means files are processed in 21637 // order. 21638 // 21639 // See also `RestoreSlice`. 21640 // 21641 // Arguments: 21642 // file_pattern: Must have a single element. The pattern of the files from 21643 // which we read the tensor. 21644 // tensor_name: Must have a single element. The name of the tensor to be 21645 // restored. 21646 // dt: The type of the tensor to be restored. 21647 // 21648 // Returns The restored tensor. 21649 func Restore(scope *Scope, file_pattern tf.Output, tensor_name tf.Output, dt tf.DataType, optional ...RestoreAttr) (tensor tf.Output) { 21650 if scope.Err() != nil { 21651 return 21652 } 21653 attrs := map[string]interface{}{"dt": dt} 21654 for _, a := range optional { 21655 a(attrs) 21656 } 21657 opspec := tf.OpSpec{ 21658 Type: "Restore", 21659 Input: []tf.Input{ 21660 file_pattern, tensor_name, 21661 }, 21662 Attrs: attrs, 21663 } 21664 op := scope.AddOperation(opspec) 21665 return op.Output(0) 21666 } 21667 21668 // QuantizedResizeBilinearAttr is an optional argument to QuantizedResizeBilinear. 21669 type QuantizedResizeBilinearAttr func(optionalAttr) 21670 21671 // QuantizedResizeBilinearAlignCorners sets the optional align_corners attribute to value. 21672 // 21673 // value: If true, the centers of the 4 corner pixels of the input and output tensors are 21674 // aligned, preserving the values at the corner pixels. Defaults to false. 21675 // If not specified, defaults to false 21676 func QuantizedResizeBilinearAlignCorners(value bool) QuantizedResizeBilinearAttr { 21677 return func(m optionalAttr) { 21678 m["align_corners"] = value 21679 } 21680 } 21681 21682 // QuantizedResizeBilinearHalfPixelCenters sets the optional half_pixel_centers attribute to value. 21683 // If not specified, defaults to false 21684 func QuantizedResizeBilinearHalfPixelCenters(value bool) QuantizedResizeBilinearAttr { 21685 return func(m optionalAttr) { 21686 m["half_pixel_centers"] = value 21687 } 21688 } 21689 21690 // Resize quantized `images` to `size` using quantized bilinear interpolation. 21691 // 21692 // Input images and output images must be quantized types. 21693 // 21694 // Arguments: 21695 // images: 4-D with shape `[batch, height, width, channels]`. 21696 // size: = A 1-D int32 Tensor of 2 elements: `new_height, new_width`. The 21697 // new size for the images. 21698 // 21699 // 21700 // 21701 // Returns 4-D with shape 21702 // `[batch, new_height, new_width, channels]`. 21703 func QuantizedResizeBilinear(scope *Scope, images tf.Output, size tf.Output, min tf.Output, max tf.Output, optional ...QuantizedResizeBilinearAttr) (resized_images tf.Output, out_min tf.Output, out_max tf.Output) { 21704 if scope.Err() != nil { 21705 return 21706 } 21707 attrs := map[string]interface{}{} 21708 for _, a := range optional { 21709 a(attrs) 21710 } 21711 opspec := tf.OpSpec{ 21712 Type: "QuantizedResizeBilinear", 21713 Input: []tf.Input{ 21714 images, size, min, max, 21715 }, 21716 Attrs: attrs, 21717 } 21718 op := scope.AddOperation(opspec) 21719 return op.Output(0), op.Output(1), op.Output(2) 21720 } 21721 21722 // Creates a dataset that uses a custom thread pool to compute `input_dataset`. 21723 // 21724 // Arguments: 21725 // 21726 // num_threads: Identifies the number of threads to use for the private threadpool. 21727 // 21728 // 21729 func ExperimentalPrivateThreadPoolDataset(scope *Scope, input_dataset tf.Output, num_threads tf.Output, output_types []tf.DataType, output_shapes []tf.Shape) (handle tf.Output) { 21730 if scope.Err() != nil { 21731 return 21732 } 21733 attrs := map[string]interface{}{"output_types": output_types, "output_shapes": output_shapes} 21734 opspec := tf.OpSpec{ 21735 Type: "ExperimentalPrivateThreadPoolDataset", 21736 Input: []tf.Input{ 21737 input_dataset, num_threads, 21738 }, 21739 Attrs: attrs, 21740 } 21741 op := scope.AddOperation(opspec) 21742 return op.Output(0) 21743 } 21744 21745 // StackV2Attr is an optional argument to StackV2. 21746 type StackV2Attr func(optionalAttr) 21747 21748 // StackV2StackName sets the optional stack_name attribute to value. 21749 // 21750 // value: Overrides the name used for the temporary stack resource. Default 21751 // value is the name of the 'Stack' op (which is guaranteed unique). 21752 // If not specified, defaults to "" 21753 func StackV2StackName(value string) StackV2Attr { 21754 return func(m optionalAttr) { 21755 m["stack_name"] = value 21756 } 21757 } 21758 21759 // A stack that produces elements in first-in last-out order. 21760 // 21761 // Arguments: 21762 // max_size: The maximum size of the stack if non-negative. If negative, the stack 21763 // size is unlimited. 21764 // elem_type: The type of the elements on the stack. 21765 // 21766 // Returns The handle to the stack. 21767 func StackV2(scope *Scope, max_size tf.Output, elem_type tf.DataType, optional ...StackV2Attr) (handle tf.Output) { 21768 if scope.Err() != nil { 21769 return 21770 } 21771 attrs := map[string]interface{}{"elem_type": elem_type} 21772 for _, a := range optional { 21773 a(attrs) 21774 } 21775 opspec := tf.OpSpec{ 21776 Type: "StackV2", 21777 Input: []tf.Input{ 21778 max_size, 21779 }, 21780 Attrs: attrs, 21781 } 21782 op := scope.AddOperation(opspec) 21783 return op.Output(0) 21784 } 21785 21786 // CudnnRNNBackpropAttr is an optional argument to CudnnRNNBackprop. 21787 type CudnnRNNBackpropAttr func(optionalAttr) 21788 21789 // CudnnRNNBackpropRnnMode sets the optional rnn_mode attribute to value. 21790 // If not specified, defaults to "lstm" 21791 func CudnnRNNBackpropRnnMode(value string) CudnnRNNBackpropAttr { 21792 return func(m optionalAttr) { 21793 m["rnn_mode"] = value 21794 } 21795 } 21796 21797 // CudnnRNNBackpropInputMode sets the optional input_mode attribute to value. 21798 // If not specified, defaults to "linear_input" 21799 func CudnnRNNBackpropInputMode(value string) CudnnRNNBackpropAttr { 21800 return func(m optionalAttr) { 21801 m["input_mode"] = value 21802 } 21803 } 21804 21805 // CudnnRNNBackpropDirection sets the optional direction attribute to value. 21806 // If not specified, defaults to "unidirectional" 21807 func CudnnRNNBackpropDirection(value string) CudnnRNNBackpropAttr { 21808 return func(m optionalAttr) { 21809 m["direction"] = value 21810 } 21811 } 21812 21813 // CudnnRNNBackpropDropout sets the optional dropout attribute to value. 21814 // If not specified, defaults to 0 21815 func CudnnRNNBackpropDropout(value float32) CudnnRNNBackpropAttr { 21816 return func(m optionalAttr) { 21817 m["dropout"] = value 21818 } 21819 } 21820 21821 // CudnnRNNBackpropSeed sets the optional seed attribute to value. 21822 // If not specified, defaults to 0 21823 func CudnnRNNBackpropSeed(value int64) CudnnRNNBackpropAttr { 21824 return func(m optionalAttr) { 21825 m["seed"] = value 21826 } 21827 } 21828 21829 // CudnnRNNBackpropSeed2 sets the optional seed2 attribute to value. 21830 // If not specified, defaults to 0 21831 func CudnnRNNBackpropSeed2(value int64) CudnnRNNBackpropAttr { 21832 return func(m optionalAttr) { 21833 m["seed2"] = value 21834 } 21835 } 21836 21837 // Backprop step of CudnnRNN. 21838 // 21839 // Compute the backprop of both data and weights in a RNN. 21840 // 21841 // rnn_mode: Indicates the type of the RNN model. 21842 // input_mode: Indicate whether there is a linear projection between the input and 21843 // the actual computation before the first layer. 'skip_input' is only allowed 21844 // when input_size == num_units; 'auto_select' implies 'skip_input' when 21845 // input_size == num_units; otherwise, it implies 'linear_input'. 21846 // direction: Indicates whether a bidirectional model will be used. Should be 21847 // "unidirectional" or "bidirectional". 21848 // dropout: Dropout probability. When set to 0., dropout is disabled. 21849 // seed: The 1st part of a seed to initialize dropout. 21850 // seed2: The 2nd part of a seed to initialize dropout. 21851 // input: A 3-D tensor with the shape of [seq_length, batch_size, input_size]. 21852 // input_h: A 3-D tensor with the shape of [num_layer * dir, batch_size, 21853 // num_units]. 21854 // input_c: For LSTM, a 3-D tensor with the shape of 21855 // [num_layer * dir, batch, num_units]. For other models, it is ignored. 21856 // params: A 1-D tensor that contains the weights and biases in an opaque layout. 21857 // The size must be created through CudnnRNNParamsSize, and initialized 21858 // separately. Note that they might not be compatible across different 21859 // generations. So it is a good idea to save and restore 21860 // output: A 3-D tensor with the shape of [seq_length, batch_size, 21861 // dir * num_units]. 21862 // output_h: The same shape has input_h. 21863 // output_c: The same shape as input_c for LSTM. An empty tensor for other models. 21864 // output_backprop: A 3-D tensor with the same shape as output in the forward pass. 21865 // output_h_backprop: A 3-D tensor with the same shape as output_h in the forward 21866 // pass. 21867 // output_c_backprop: A 3-D tensor with the same shape as output_c in the forward 21868 // pass. 21869 // reserve_space: The same reserve_space produced in for forward operation. 21870 // input_backprop: The backprop to input in the forward pass. Has the same shape 21871 // as input. 21872 // input_h_backprop: The backprop to input_h in the forward pass. Has the same 21873 // shape as input_h. 21874 // input_c_backprop: The backprop to input_c in the forward pass. Has the same 21875 // shape as input_c. 21876 // params_backprop: The backprop to the params buffer in the forward pass. Has the 21877 // same shape as params. 21878 func CudnnRNNBackprop(scope *Scope, input tf.Output, input_h tf.Output, input_c tf.Output, params tf.Output, output tf.Output, output_h tf.Output, output_c tf.Output, output_backprop tf.Output, output_h_backprop tf.Output, output_c_backprop tf.Output, reserve_space tf.Output, optional ...CudnnRNNBackpropAttr) (input_backprop tf.Output, input_h_backprop tf.Output, input_c_backprop tf.Output, params_backprop tf.Output) { 21879 if scope.Err() != nil { 21880 return 21881 } 21882 attrs := map[string]interface{}{} 21883 for _, a := range optional { 21884 a(attrs) 21885 } 21886 opspec := tf.OpSpec{ 21887 Type: "CudnnRNNBackprop", 21888 Input: []tf.Input{ 21889 input, input_h, input_c, params, output, output_h, output_c, output_backprop, output_h_backprop, output_c_backprop, reserve_space, 21890 }, 21891 Attrs: attrs, 21892 } 21893 op := scope.AddOperation(opspec) 21894 return op.Output(0), op.Output(1), op.Output(2), op.Output(3) 21895 } 21896 21897 // InfeedEnqueueAttr is an optional argument to InfeedEnqueue. 21898 type InfeedEnqueueAttr func(optionalAttr) 21899 21900 // InfeedEnqueueShape sets the optional shape attribute to value. 21901 // 21902 // value: The shape of the tensor. 21903 // If not specified, defaults to <> 21904 func InfeedEnqueueShape(value tf.Shape) InfeedEnqueueAttr { 21905 return func(m optionalAttr) { 21906 m["shape"] = value 21907 } 21908 } 21909 21910 // InfeedEnqueueLayout sets the optional layout attribute to value. 21911 // 21912 // value: A vector holding the requested layout in minor-to-major sequence. 21913 // If a layout attribute is passed, but its values are all -1, the layout will 21914 // be computed by the infeed operation. 21915 // If not specified, defaults to <> 21916 func InfeedEnqueueLayout(value []int64) InfeedEnqueueAttr { 21917 return func(m optionalAttr) { 21918 m["layout"] = value 21919 } 21920 } 21921 21922 // InfeedEnqueueDeviceOrdinal sets the optional device_ordinal attribute to value. 21923 // 21924 // value: The TPU device to use. This should be -1 when the Op 21925 // is running on a TPU device, and >= 0 when the Op is running on the CPU 21926 // device. 21927 // If not specified, defaults to -1 21928 func InfeedEnqueueDeviceOrdinal(value int64) InfeedEnqueueAttr { 21929 return func(m optionalAttr) { 21930 m["device_ordinal"] = value 21931 } 21932 } 21933 21934 // An op which feeds a single Tensor value into the computation. 21935 // 21936 // Arguments: 21937 // input: A tensor that will be provided using the infeed mechanism. 21938 // 21939 // Returns the created operation. 21940 func InfeedEnqueue(scope *Scope, input tf.Output, optional ...InfeedEnqueueAttr) (o *tf.Operation) { 21941 if scope.Err() != nil { 21942 return 21943 } 21944 attrs := map[string]interface{}{} 21945 for _, a := range optional { 21946 a(attrs) 21947 } 21948 opspec := tf.OpSpec{ 21949 Type: "InfeedEnqueue", 21950 Input: []tf.Input{ 21951 input, 21952 }, 21953 Attrs: attrs, 21954 } 21955 return scope.AddOperation(opspec) 21956 } 21957 21958 // Computes softmax cross entropy cost and gradients to backpropagate. 21959 // 21960 // Inputs are the logits, not probabilities. 21961 // 21962 // Arguments: 21963 // features: batch_size x num_classes matrix 21964 // labels: batch_size x num_classes matrix 21965 // The caller must ensure that each batch of labels represents a valid 21966 // probability distribution. 21967 // 21968 // Returns Per example loss (batch_size vector).backpropagated gradients (batch_size x num_classes matrix). 21969 func SoftmaxCrossEntropyWithLogits(scope *Scope, features tf.Output, labels tf.Output) (loss tf.Output, backprop tf.Output) { 21970 if scope.Err() != nil { 21971 return 21972 } 21973 opspec := tf.OpSpec{ 21974 Type: "SoftmaxCrossEntropyWithLogits", 21975 Input: []tf.Input{ 21976 features, labels, 21977 }, 21978 } 21979 op := scope.AddOperation(opspec) 21980 return op.Output(0), op.Output(1) 21981 } 21982 21983 // ReduceJoinAttr is an optional argument to ReduceJoin. 21984 type ReduceJoinAttr func(optionalAttr) 21985 21986 // ReduceJoinKeepDims sets the optional keep_dims attribute to value. 21987 // 21988 // value: If `True`, retain reduced dimensions with length `1`. 21989 // If not specified, defaults to false 21990 func ReduceJoinKeepDims(value bool) ReduceJoinAttr { 21991 return func(m optionalAttr) { 21992 m["keep_dims"] = value 21993 } 21994 } 21995 21996 // ReduceJoinSeparator sets the optional separator attribute to value. 21997 // 21998 // value: The separator to use when joining. 21999 // If not specified, defaults to "" 22000 func ReduceJoinSeparator(value string) ReduceJoinAttr { 22001 return func(m optionalAttr) { 22002 m["separator"] = value 22003 } 22004 } 22005 22006 // Joins a string Tensor across the given dimensions. 22007 // 22008 // Computes the string join across dimensions in the given string Tensor of shape 22009 // `[\\(d_0, d_1, ..., d_{n-1}\\)]`. Returns a new Tensor created by joining the input 22010 // strings with the given separator (default: empty string). Negative indices are 22011 // counted backwards from the end, with `-1` being equivalent to `n - 1`. If 22012 // indices are not specified, joins across all dimensions beginning from `n - 1` 22013 // through `0`. 22014 // 22015 // For example: 22016 // 22017 // ```python 22018 // # tensor `a` is [["a", "b"], ["c", "d"]] 22019 // tf.reduce_join(a, 0) ==> ["ac", "bd"] 22020 // tf.reduce_join(a, 1) ==> ["ab", "cd"] 22021 // tf.reduce_join(a, -2) = tf.reduce_join(a, 0) ==> ["ac", "bd"] 22022 // tf.reduce_join(a, -1) = tf.reduce_join(a, 1) ==> ["ab", "cd"] 22023 // tf.reduce_join(a, 0, keep_dims=True) ==> [["ac", "bd"]] 22024 // tf.reduce_join(a, 1, keep_dims=True) ==> [["ab"], ["cd"]] 22025 // tf.reduce_join(a, 0, separator=".") ==> ["a.c", "b.d"] 22026 // tf.reduce_join(a, [0, 1]) ==> "acbd" 22027 // tf.reduce_join(a, [1, 0]) ==> "abcd" 22028 // tf.reduce_join(a, []) ==> [["a", "b"], ["c", "d"]] 22029 // tf.reduce_join(a) = tf.reduce_join(a, [1, 0]) ==> "abcd" 22030 // ``` 22031 // 22032 // Arguments: 22033 // inputs: The input to be joined. All reduced indices must have non-zero size. 22034 // reduction_indices: The dimensions to reduce over. Dimensions are reduced in the 22035 // order specified. Omitting `reduction_indices` is equivalent to passing 22036 // `[n-1, n-2, ..., 0]`. Negative indices from `-n` to `-1` are supported. 22037 // 22038 // Returns Has shape equal to that of the input with reduced dimensions removed or 22039 // set to `1` depending on `keep_dims`. 22040 func ReduceJoin(scope *Scope, inputs tf.Output, reduction_indices tf.Output, optional ...ReduceJoinAttr) (output tf.Output) { 22041 if scope.Err() != nil { 22042 return 22043 } 22044 attrs := map[string]interface{}{} 22045 for _, a := range optional { 22046 a(attrs) 22047 } 22048 opspec := tf.OpSpec{ 22049 Type: "ReduceJoin", 22050 Input: []tf.Input{ 22051 inputs, reduction_indices, 22052 }, 22053 Attrs: attrs, 22054 } 22055 op := scope.AddOperation(opspec) 22056 return op.Output(0) 22057 } 22058 22059 // TopKAttr is an optional argument to TopK. 22060 type TopKAttr func(optionalAttr) 22061 22062 // TopKSorted sets the optional sorted attribute to value. 22063 // 22064 // value: If true the resulting `k` elements will be sorted by the values in 22065 // descending order. 22066 // If not specified, defaults to true 22067 func TopKSorted(value bool) TopKAttr { 22068 return func(m optionalAttr) { 22069 m["sorted"] = value 22070 } 22071 } 22072 22073 // Finds values and indices of the `k` largest elements for the last dimension. 22074 // 22075 // DEPRECATED at GraphDef version 7: Use TopKV2 instead 22076 // 22077 // If the input is a vector (rank-1), finds the `k` largest entries in the vector 22078 // and outputs their values and indices as vectors. Thus `values[j]` is the 22079 // `j`-th largest entry in `input`, and its index is `indices[j]`. 22080 // 22081 // For matrices (resp. higher rank input), computes the top `k` entries in each 22082 // row (resp. vector along the last dimension). Thus, 22083 // 22084 // values.shape = indices.shape = input.shape[:-1] + [k] 22085 // 22086 // If two elements are equal, the lower-index element appears first. 22087 // 22088 // If `k` varies dynamically, use `TopKV2` below. 22089 // 22090 // Arguments: 22091 // input: 1-D or higher with last dimension at least `k`. 22092 // k: Number of top elements to look for along the last dimension (along each 22093 // row for matrices). 22094 // 22095 // Returns The `k` largest elements along each last dimensional slice.The indices of `values` within the last dimension of `input`. 22096 func TopK(scope *Scope, input tf.Output, k int64, optional ...TopKAttr) (values tf.Output, indices tf.Output) { 22097 if scope.Err() != nil { 22098 return 22099 } 22100 attrs := map[string]interface{}{"k": k} 22101 for _, a := range optional { 22102 a(attrs) 22103 } 22104 opspec := tf.OpSpec{ 22105 Type: "TopK", 22106 Input: []tf.Input{ 22107 input, 22108 }, 22109 Attrs: attrs, 22110 } 22111 op := scope.AddOperation(opspec) 22112 return op.Output(0), op.Output(1) 22113 } 22114 22115 // BatchToSpace for N-D tensors of type T. 22116 // 22117 // This operation reshapes the "batch" dimension 0 into `M + 1` dimensions of shape 22118 // `block_shape + [batch]`, interleaves these blocks back into the grid defined by 22119 // the spatial dimensions `[1, ..., M]`, to obtain a result with the same rank as 22120 // the input. The spatial dimensions of this intermediate result are then 22121 // optionally cropped according to `crops` to produce the output. This is the 22122 // reverse of SpaceToBatch. See below for a precise description. 22123 // 22124 // Arguments: 22125 // input: N-D with shape `input_shape = [batch] + spatial_shape + remaining_shape`, 22126 // where spatial_shape has M dimensions. 22127 // block_shape: 1-D with shape `[M]`, all values must be >= 1. 22128 // crops: 2-D with shape `[M, 2]`, all values must be >= 0. 22129 // `crops[i] = [crop_start, crop_end]` specifies the amount to crop from input 22130 // dimension `i + 1`, which corresponds to spatial dimension `i`. It is 22131 // required that 22132 // `crop_start[i] + crop_end[i] <= block_shape[i] * input_shape[i + 1]`. 22133 // 22134 // This operation is equivalent to the following steps: 22135 // 22136 // 1. Reshape `input` to `reshaped` of shape: 22137 // [block_shape[0], ..., block_shape[M-1], 22138 // batch / prod(block_shape), 22139 // input_shape[1], ..., input_shape[N-1]] 22140 // 22141 // 2. Permute dimensions of `reshaped` to produce `permuted` of shape 22142 // [batch / prod(block_shape), 22143 // 22144 // input_shape[1], block_shape[0], 22145 // ..., 22146 // input_shape[M], block_shape[M-1], 22147 // 22148 // input_shape[M+1], ..., input_shape[N-1]] 22149 // 22150 // 3. Reshape `permuted` to produce `reshaped_permuted` of shape 22151 // [batch / prod(block_shape), 22152 // 22153 // input_shape[1] * block_shape[0], 22154 // ..., 22155 // input_shape[M] * block_shape[M-1], 22156 // 22157 // input_shape[M+1], 22158 // ..., 22159 // input_shape[N-1]] 22160 // 22161 // 4. Crop the start and end of dimensions `[1, ..., M]` of 22162 // `reshaped_permuted` according to `crops` to produce the output of shape: 22163 // [batch / prod(block_shape), 22164 // 22165 // input_shape[1] * block_shape[0] - crops[0,0] - crops[0,1], 22166 // ..., 22167 // input_shape[M] * block_shape[M-1] - crops[M-1,0] - crops[M-1,1], 22168 // 22169 // input_shape[M+1], ..., input_shape[N-1]] 22170 // 22171 // Some examples: 22172 // 22173 // (1) For the following input of shape `[4, 1, 1, 1]`, `block_shape = [2, 2]`, and 22174 // `crops = [[0, 0], [0, 0]]`: 22175 // 22176 // ``` 22177 // [[[[1]]], [[[2]]], [[[3]]], [[[4]]]] 22178 // ``` 22179 // 22180 // The output tensor has shape `[1, 2, 2, 1]` and value: 22181 // 22182 // ``` 22183 // x = [[[[1], [2]], [[3], [4]]]] 22184 // ``` 22185 // 22186 // (2) For the following input of shape `[4, 1, 1, 3]`, `block_shape = [2, 2]`, and 22187 // `crops = [[0, 0], [0, 0]]`: 22188 // 22189 // ``` 22190 // [[[1, 2, 3]], [[4, 5, 6]], [[7, 8, 9]], [[10, 11, 12]]] 22191 // ``` 22192 // 22193 // The output tensor has shape `[1, 2, 2, 3]` and value: 22194 // 22195 // ``` 22196 // x = [[[[1, 2, 3], [4, 5, 6]], 22197 // [[7, 8, 9], [10, 11, 12]]]] 22198 // ``` 22199 // 22200 // (3) For the following input of shape `[4, 2, 2, 1]`, `block_shape = [2, 2]`, and 22201 // `crops = [[0, 0], [0, 0]]`: 22202 // 22203 // ``` 22204 // x = [[[[1], [3]], [[9], [11]]], 22205 // [[[2], [4]], [[10], [12]]], 22206 // [[[5], [7]], [[13], [15]]], 22207 // [[[6], [8]], [[14], [16]]]] 22208 // ``` 22209 // 22210 // The output tensor has shape `[1, 4, 4, 1]` and value: 22211 // 22212 // ``` 22213 // x = [[[1], [2], [3], [4]], 22214 // [[5], [6], [7], [8]], 22215 // [[9], [10], [11], [12]], 22216 // [[13], [14], [15], [16]]] 22217 // ``` 22218 // 22219 // (4) For the following input of shape `[8, 1, 3, 1]`, `block_shape = [2, 2]`, and 22220 // `crops = [[0, 0], [2, 0]]`: 22221 // 22222 // ``` 22223 // x = [[[[0], [1], [3]]], [[[0], [9], [11]]], 22224 // [[[0], [2], [4]]], [[[0], [10], [12]]], 22225 // [[[0], [5], [7]]], [[[0], [13], [15]]], 22226 // [[[0], [6], [8]]], [[[0], [14], [16]]]] 22227 // ``` 22228 // 22229 // The output tensor has shape `[2, 2, 4, 1]` and value: 22230 // 22231 // ``` 22232 // x = [[[[1], [2], [3], [4]], 22233 // [[5], [6], [7], [8]]], 22234 // [[[9], [10], [11], [12]], 22235 // [[13], [14], [15], [16]]]] 22236 // ``` 22237 func BatchToSpaceND(scope *Scope, input tf.Output, block_shape tf.Output, crops tf.Output) (output tf.Output) { 22238 if scope.Err() != nil { 22239 return 22240 } 22241 opspec := tf.OpSpec{ 22242 Type: "BatchToSpaceND", 22243 Input: []tf.Input{ 22244 input, block_shape, crops, 22245 }, 22246 } 22247 op := scope.AddOperation(opspec) 22248 return op.Output(0) 22249 } 22250 22251 // UnpackAttr is an optional argument to Unpack. 22252 type UnpackAttr func(optionalAttr) 22253 22254 // UnpackAxis sets the optional axis attribute to value. 22255 // 22256 // value: Dimension along which to unpack. Negative values wrap around, so the 22257 // valid range is `[-R, R)`. 22258 // If not specified, defaults to 0 22259 func UnpackAxis(value int64) UnpackAttr { 22260 return func(m optionalAttr) { 22261 m["axis"] = value 22262 } 22263 } 22264 22265 // Unpacks a given dimension of a rank-`R` tensor into `num` rank-`(R-1)` tensors. 22266 // 22267 // Unpacks `num` tensors from `value` by chipping it along the `axis` dimension. 22268 // For example, given a tensor of shape `(A, B, C, D)`; 22269 // 22270 // If `axis == 0` then the i'th tensor in `output` is the slice `value[i, :, :, :]` 22271 // and each tensor in `output` will have shape `(B, C, D)`. (Note that the 22272 // dimension unpacked along is gone, unlike `split`). 22273 // 22274 // If `axis == 1` then the i'th tensor in `output` is the slice `value[:, i, :, :]` 22275 // and each tensor in `output` will have shape `(A, C, D)`. 22276 // Etc. 22277 // 22278 // This is the opposite of `pack`. 22279 // 22280 // Arguments: 22281 // value: 1-D or higher, with `axis` dimension size equal to `num`. 22282 // 22283 // 22284 // Returns The list of tensors unpacked from `value`. 22285 func Unpack(scope *Scope, value tf.Output, num int64, optional ...UnpackAttr) (output []tf.Output) { 22286 if scope.Err() != nil { 22287 return 22288 } 22289 attrs := map[string]interface{}{"num": num} 22290 for _, a := range optional { 22291 a(attrs) 22292 } 22293 opspec := tf.OpSpec{ 22294 Type: "Unpack", 22295 Input: []tf.Input{ 22296 value, 22297 }, 22298 Attrs: attrs, 22299 } 22300 op := scope.AddOperation(opspec) 22301 if scope.Err() != nil { 22302 return 22303 } 22304 var idx int 22305 var err error 22306 if output, idx, err = makeOutputList(op, idx, "output"); err != nil { 22307 scope.UpdateErr("Unpack", err) 22308 return 22309 } 22310 return output 22311 } 22312 22313 // Delete the stack from its resource container. 22314 // 22315 // Arguments: 22316 // handle: The handle to a stack. 22317 // 22318 // Returns the created operation. 22319 func StackCloseV2(scope *Scope, handle tf.Output) (o *tf.Operation) { 22320 if scope.Err() != nil { 22321 return 22322 } 22323 opspec := tf.OpSpec{ 22324 Type: "StackCloseV2", 22325 Input: []tf.Input{ 22326 handle, 22327 }, 22328 } 22329 return scope.AddOperation(opspec) 22330 } 22331 22332 // Increments variable pointed to by 'resource' until it reaches 'limit'. 22333 // 22334 // Arguments: 22335 // resource: Should be from a scalar `Variable` node. 22336 // limit: If incrementing ref would bring it above limit, instead generates an 22337 // 'OutOfRange' error. 22338 // 22339 // 22340 // Returns A copy of the input before increment. If nothing else modifies the 22341 // input, the values produced will all be distinct. 22342 func ResourceCountUpTo(scope *Scope, resource tf.Output, limit int64, T tf.DataType) (output tf.Output) { 22343 if scope.Err() != nil { 22344 return 22345 } 22346 attrs := map[string]interface{}{"limit": limit, "T": T} 22347 opspec := tf.OpSpec{ 22348 Type: "ResourceCountUpTo", 22349 Input: []tf.Input{ 22350 resource, 22351 }, 22352 Attrs: attrs, 22353 } 22354 op := scope.AddOperation(opspec) 22355 return op.Output(0) 22356 } 22357 22358 // Computes softsign gradients for a softsign operation. 22359 // 22360 // Arguments: 22361 // gradients: The backpropagated gradients to the corresponding softsign operation. 22362 // features: The features passed as input to the corresponding softsign operation. 22363 // 22364 // Returns The gradients: `gradients / (1 + abs(features)) ** 2`. 22365 func SoftsignGrad(scope *Scope, gradients tf.Output, features tf.Output) (backprops tf.Output) { 22366 if scope.Err() != nil { 22367 return 22368 } 22369 opspec := tf.OpSpec{ 22370 Type: "SoftsignGrad", 22371 Input: []tf.Input{ 22372 gradients, features, 22373 }, 22374 } 22375 op := scope.AddOperation(opspec) 22376 return op.Output(0) 22377 } 22378 22379 // Provides the time since epoch in seconds. 22380 // 22381 // Returns the timestamp as a `float64` for seconds since the Unix epoch. 22382 // 22383 // Note: the timestamp is computed when the op is executed, not when it is added 22384 // to the graph. 22385 func Timestamp(scope *Scope) (ts tf.Output) { 22386 if scope.Err() != nil { 22387 return 22388 } 22389 opspec := tf.OpSpec{ 22390 Type: "Timestamp", 22391 } 22392 op := scope.AddOperation(opspec) 22393 return op.Output(0) 22394 } 22395 22396 // Returns immutable tensor from memory region. 22397 // 22398 // The current implementation memmaps the tensor from a file. 22399 // 22400 // Arguments: 22401 // dtype: Type of the returned tensor. 22402 // shape: Shape of the returned tensor. 22403 // memory_region_name: Name of readonly memory region used by the tensor, see 22404 // NewReadOnlyMemoryRegionFromFile in tensorflow::Env. 22405 func ImmutableConst(scope *Scope, dtype tf.DataType, shape tf.Shape, memory_region_name string) (tensor tf.Output) { 22406 if scope.Err() != nil { 22407 return 22408 } 22409 attrs := map[string]interface{}{"dtype": dtype, "shape": shape, "memory_region_name": memory_region_name} 22410 opspec := tf.OpSpec{ 22411 Type: "ImmutableConst", 22412 22413 Attrs: attrs, 22414 } 22415 op := scope.AddOperation(opspec) 22416 return op.Output(0) 22417 } 22418 22419 // StringJoinAttr is an optional argument to StringJoin. 22420 type StringJoinAttr func(optionalAttr) 22421 22422 // StringJoinSeparator sets the optional separator attribute to value. 22423 // 22424 // value: string, an optional join separator. 22425 // If not specified, defaults to "" 22426 func StringJoinSeparator(value string) StringJoinAttr { 22427 return func(m optionalAttr) { 22428 m["separator"] = value 22429 } 22430 } 22431 22432 // Joins the strings in the given list of string tensors into one tensor; 22433 // 22434 // with the given separator (default is an empty separator). 22435 // 22436 // Arguments: 22437 // inputs: A list of string tensors. The tensors must all have the same shape, 22438 // or be scalars. Scalars may be mixed in; these will be broadcast to the shape 22439 // of non-scalar inputs. 22440 func StringJoin(scope *Scope, inputs []tf.Output, optional ...StringJoinAttr) (output tf.Output) { 22441 if scope.Err() != nil { 22442 return 22443 } 22444 attrs := map[string]interface{}{} 22445 for _, a := range optional { 22446 a(attrs) 22447 } 22448 opspec := tf.OpSpec{ 22449 Type: "StringJoin", 22450 Input: []tf.Input{ 22451 tf.OutputList(inputs), 22452 }, 22453 Attrs: attrs, 22454 } 22455 op := scope.AddOperation(opspec) 22456 return op.Output(0) 22457 } 22458 22459 // Creates and returns an empty tensor list. 22460 // 22461 // All list elements must be tensors of dtype element_dtype and shape compatible 22462 // with element_shape. 22463 // 22464 // handle: an empty tensor list. 22465 // element_dtype: the type of elements in the list. 22466 // element_shape: a shape compatible with that of elements in the list. 22467 func EmptyTensorList(scope *Scope, element_shape tf.Output, max_num_elements tf.Output, element_dtype tf.DataType) (handle tf.Output) { 22468 if scope.Err() != nil { 22469 return 22470 } 22471 attrs := map[string]interface{}{"element_dtype": element_dtype} 22472 opspec := tf.OpSpec{ 22473 Type: "EmptyTensorList", 22474 Input: []tf.Input{ 22475 element_shape, max_num_elements, 22476 }, 22477 Attrs: attrs, 22478 } 22479 op := scope.AddOperation(opspec) 22480 return op.Output(0) 22481 } 22482 22483 // Returns a list of tensors with the same shapes and contents as the input 22484 // 22485 // tensors. 22486 // 22487 // This op can be used to override the gradient for complicated functions. For 22488 // example, suppose y = f(x) and we wish to apply a custom function g for backprop 22489 // such that dx = g(dy). In Python, 22490 // 22491 // ```python 22492 // with tf.get_default_graph().gradient_override_map( 22493 // {'IdentityN': 'OverrideGradientWithG'}): 22494 // y, _ = identity_n([f(x), x]) 22495 // 22496 // @tf.RegisterGradient('OverrideGradientWithG') 22497 // def ApplyG(op, dy, _): 22498 // return [None, g(dy)] # Do not backprop to f(x). 22499 // ``` 22500 func IdentityN(scope *Scope, input []tf.Output) (output []tf.Output) { 22501 if scope.Err() != nil { 22502 return 22503 } 22504 opspec := tf.OpSpec{ 22505 Type: "IdentityN", 22506 Input: []tf.Input{ 22507 tf.OutputList(input), 22508 }, 22509 } 22510 op := scope.AddOperation(opspec) 22511 if scope.Err() != nil { 22512 return 22513 } 22514 var idx int 22515 var err error 22516 if output, idx, err = makeOutputList(op, idx, "output"); err != nil { 22517 scope.UpdateErr("IdentityN", err) 22518 return 22519 } 22520 return output 22521 } 22522 22523 // ResourceApplyCenteredRMSPropAttr is an optional argument to ResourceApplyCenteredRMSProp. 22524 type ResourceApplyCenteredRMSPropAttr func(optionalAttr) 22525 22526 // ResourceApplyCenteredRMSPropUseLocking sets the optional use_locking attribute to value. 22527 // 22528 // value: If `True`, updating of the var, mg, ms, and mom tensors is 22529 // protected by a lock; otherwise the behavior is undefined, but may exhibit less 22530 // contention. 22531 // If not specified, defaults to false 22532 func ResourceApplyCenteredRMSPropUseLocking(value bool) ResourceApplyCenteredRMSPropAttr { 22533 return func(m optionalAttr) { 22534 m["use_locking"] = value 22535 } 22536 } 22537 22538 // Update '*var' according to the centered RMSProp algorithm. 22539 // 22540 // The centered RMSProp algorithm uses an estimate of the centered second moment 22541 // (i.e., the variance) for normalization, as opposed to regular RMSProp, which 22542 // uses the (uncentered) second moment. This often helps with training, but is 22543 // slightly more expensive in terms of computation and memory. 22544 // 22545 // Note that in dense implementation of this algorithm, mg, ms, and mom will 22546 // update even if the grad is zero, but in this sparse implementation, mg, ms, 22547 // and mom will not update in iterations during which the grad is zero. 22548 // 22549 // mean_square = decay * mean_square + (1-decay) * gradient ** 2 22550 // mean_grad = decay * mean_grad + (1-decay) * gradient 22551 // 22552 // Delta = learning_rate * gradient / sqrt(mean_square + epsilon - mean_grad ** 2) 22553 // 22554 // mg <- rho * mg_{t-1} + (1-rho) * grad 22555 // ms <- rho * ms_{t-1} + (1-rho) * grad * grad 22556 // mom <- momentum * mom_{t-1} + lr * grad / sqrt(ms - mg * mg + epsilon) 22557 // var <- var - mom 22558 // 22559 // Arguments: 22560 // var_: Should be from a Variable(). 22561 // mg: Should be from a Variable(). 22562 // ms: Should be from a Variable(). 22563 // mom: Should be from a Variable(). 22564 // lr: Scaling factor. Must be a scalar. 22565 // rho: Decay rate. Must be a scalar. 22566 // 22567 // epsilon: Ridge term. Must be a scalar. 22568 // grad: The gradient. 22569 // 22570 // Returns the created operation. 22571 func ResourceApplyCenteredRMSProp(scope *Scope, var_ tf.Output, mg tf.Output, ms tf.Output, mom tf.Output, lr tf.Output, rho tf.Output, momentum tf.Output, epsilon tf.Output, grad tf.Output, optional ...ResourceApplyCenteredRMSPropAttr) (o *tf.Operation) { 22572 if scope.Err() != nil { 22573 return 22574 } 22575 attrs := map[string]interface{}{} 22576 for _, a := range optional { 22577 a(attrs) 22578 } 22579 opspec := tf.OpSpec{ 22580 Type: "ResourceApplyCenteredRMSProp", 22581 Input: []tf.Input{ 22582 var_, mg, ms, mom, lr, rho, momentum, epsilon, grad, 22583 }, 22584 Attrs: attrs, 22585 } 22586 return scope.AddOperation(opspec) 22587 } 22588 22589 // ResourceSparseApplyCenteredRMSPropAttr is an optional argument to ResourceSparseApplyCenteredRMSProp. 22590 type ResourceSparseApplyCenteredRMSPropAttr func(optionalAttr) 22591 22592 // ResourceSparseApplyCenteredRMSPropUseLocking sets the optional use_locking attribute to value. 22593 // 22594 // value: If `True`, updating of the var, mg, ms, and mom tensors is 22595 // protected by a lock; otherwise the behavior is undefined, but may exhibit less 22596 // contention. 22597 // If not specified, defaults to false 22598 func ResourceSparseApplyCenteredRMSPropUseLocking(value bool) ResourceSparseApplyCenteredRMSPropAttr { 22599 return func(m optionalAttr) { 22600 m["use_locking"] = value 22601 } 22602 } 22603 22604 // Update '*var' according to the centered RMSProp algorithm. 22605 // 22606 // The centered RMSProp algorithm uses an estimate of the centered second moment 22607 // (i.e., the variance) for normalization, as opposed to regular RMSProp, which 22608 // uses the (uncentered) second moment. This often helps with training, but is 22609 // slightly more expensive in terms of computation and memory. 22610 // 22611 // Note that in dense implementation of this algorithm, mg, ms, and mom will 22612 // update even if the grad is zero, but in this sparse implementation, mg, ms, 22613 // and mom will not update in iterations during which the grad is zero. 22614 // 22615 // mean_square = decay * mean_square + (1-decay) * gradient ** 2 22616 // mean_grad = decay * mean_grad + (1-decay) * gradient 22617 // Delta = learning_rate * gradient / sqrt(mean_square + epsilon - mean_grad ** 2) 22618 // 22619 // ms <- rho * ms_{t-1} + (1-rho) * grad * grad 22620 // mom <- momentum * mom_{t-1} + lr * grad / sqrt(ms + epsilon) 22621 // var <- var - mom 22622 // 22623 // Arguments: 22624 // var_: Should be from a Variable(). 22625 // mg: Should be from a Variable(). 22626 // ms: Should be from a Variable(). 22627 // mom: Should be from a Variable(). 22628 // lr: Scaling factor. Must be a scalar. 22629 // rho: Decay rate. Must be a scalar. 22630 // 22631 // epsilon: Ridge term. Must be a scalar. 22632 // grad: The gradient. 22633 // indices: A vector of indices into the first dimension of var, ms and mom. 22634 // 22635 // Returns the created operation. 22636 func ResourceSparseApplyCenteredRMSProp(scope *Scope, var_ tf.Output, mg tf.Output, ms tf.Output, mom tf.Output, lr tf.Output, rho tf.Output, momentum tf.Output, epsilon tf.Output, grad tf.Output, indices tf.Output, optional ...ResourceSparseApplyCenteredRMSPropAttr) (o *tf.Operation) { 22637 if scope.Err() != nil { 22638 return 22639 } 22640 attrs := map[string]interface{}{} 22641 for _, a := range optional { 22642 a(attrs) 22643 } 22644 opspec := tf.OpSpec{ 22645 Type: "ResourceSparseApplyCenteredRMSProp", 22646 Input: []tf.Input{ 22647 var_, mg, ms, mom, lr, rho, momentum, epsilon, grad, indices, 22648 }, 22649 Attrs: attrs, 22650 } 22651 return scope.AddOperation(opspec) 22652 } 22653 22654 // Creates a dataset that batches `batch_size` elements from `input_dataset`. 22655 // 22656 // Arguments: 22657 // 22658 // batch_size: A scalar representing the number of elements to accumulate in a 22659 // batch. 22660 // 22661 // 22662 func BatchDataset(scope *Scope, input_dataset tf.Output, batch_size tf.Output, output_types []tf.DataType, output_shapes []tf.Shape) (handle tf.Output) { 22663 if scope.Err() != nil { 22664 return 22665 } 22666 attrs := map[string]interface{}{"output_types": output_types, "output_shapes": output_shapes} 22667 opspec := tf.OpSpec{ 22668 Type: "BatchDataset", 22669 Input: []tf.Input{ 22670 input_dataset, batch_size, 22671 }, 22672 Attrs: attrs, 22673 } 22674 op := scope.AddOperation(opspec) 22675 return op.Output(0) 22676 } 22677 22678 // LoadTPUEmbeddingAdadeltaParametersAttr is an optional argument to LoadTPUEmbeddingAdadeltaParameters. 22679 type LoadTPUEmbeddingAdadeltaParametersAttr func(optionalAttr) 22680 22681 // LoadTPUEmbeddingAdadeltaParametersTableId sets the optional table_id attribute to value. 22682 // If not specified, defaults to -1 22683 // 22684 // REQUIRES: value >= -1 22685 func LoadTPUEmbeddingAdadeltaParametersTableId(value int64) LoadTPUEmbeddingAdadeltaParametersAttr { 22686 return func(m optionalAttr) { 22687 m["table_id"] = value 22688 } 22689 } 22690 22691 // LoadTPUEmbeddingAdadeltaParametersTableName sets the optional table_name attribute to value. 22692 // If not specified, defaults to "" 22693 func LoadTPUEmbeddingAdadeltaParametersTableName(value string) LoadTPUEmbeddingAdadeltaParametersAttr { 22694 return func(m optionalAttr) { 22695 m["table_name"] = value 22696 } 22697 } 22698 22699 // Load Adadelta embedding parameters. 22700 // 22701 // An op that loads optimization parameters into HBM for embedding. Must be 22702 // preceded by a ConfigureTPUEmbeddingHost op that sets up the correct 22703 // embedding table configuration. For example, this op is used to install 22704 // parameters that are loaded from a checkpoint before a training loop is 22705 // executed. 22706 // 22707 // Arguments: 22708 // parameters: Value of parameters used in the Adadelta optimization algorithm. 22709 // accumulators: Value of accumulators used in the Adadelta optimization algorithm. 22710 // updates: Value of updates used in the Adadelta optimization algorithm. 22711 // 22712 // 22713 // 22714 // Returns the created operation. 22715 func LoadTPUEmbeddingAdadeltaParameters(scope *Scope, parameters tf.Output, accumulators tf.Output, updates tf.Output, num_shards int64, shard_id int64, optional ...LoadTPUEmbeddingAdadeltaParametersAttr) (o *tf.Operation) { 22716 if scope.Err() != nil { 22717 return 22718 } 22719 attrs := map[string]interface{}{"num_shards": num_shards, "shard_id": shard_id} 22720 for _, a := range optional { 22721 a(attrs) 22722 } 22723 opspec := tf.OpSpec{ 22724 Type: "LoadTPUEmbeddingAdadeltaParameters", 22725 Input: []tf.Input{ 22726 parameters, accumulators, updates, 22727 }, 22728 Attrs: attrs, 22729 } 22730 return scope.AddOperation(opspec) 22731 } 22732 22733 // Converts each string in the input Tensor to its hash mod by a number of buckets. 22734 // 22735 // The hash function is deterministic on the content of the string within the 22736 // process and will never change. However, it is not suitable for cryptography. 22737 // This function may be used when CPU time is scarce and inputs are trusted or 22738 // unimportant. There is a risk of adversaries constructing inputs that all hash 22739 // to the same bucket. To prevent this problem, use a strong hash function with 22740 // `tf.string_to_hash_bucket_strong`. 22741 // 22742 // Arguments: 22743 // input: The strings to assign a hash bucket. 22744 // num_buckets: The number of buckets. 22745 // 22746 // Returns A Tensor of the same shape as the input `string_tensor`. 22747 func StringToHashBucketFast(scope *Scope, input tf.Output, num_buckets int64) (output tf.Output) { 22748 if scope.Err() != nil { 22749 return 22750 } 22751 attrs := map[string]interface{}{"num_buckets": num_buckets} 22752 opspec := tf.OpSpec{ 22753 Type: "StringToHashBucketFast", 22754 Input: []tf.Input{ 22755 input, 22756 }, 22757 Attrs: attrs, 22758 } 22759 op := scope.AddOperation(opspec) 22760 return op.Output(0) 22761 } 22762 22763 // RealAttr is an optional argument to Real. 22764 type RealAttr func(optionalAttr) 22765 22766 // RealTout sets the optional Tout attribute to value. 22767 // If not specified, defaults to DT_FLOAT 22768 func RealTout(value tf.DataType) RealAttr { 22769 return func(m optionalAttr) { 22770 m["Tout"] = value 22771 } 22772 } 22773 22774 // Returns the real part of a complex number. 22775 // 22776 // Given a tensor `input` of complex numbers, this operation returns a tensor of 22777 // type `float` that is the real part of each element in `input`. All elements in 22778 // `input` must be complex numbers of the form \\(a + bj\\), where *a* is the real 22779 // part returned by this operation and *b* is the imaginary part. 22780 // 22781 // For example: 22782 // 22783 // ``` 22784 // # tensor 'input' is [-2.25 + 4.75j, 3.25 + 5.75j] 22785 // tf.real(input) ==> [-2.25, 3.25] 22786 // ``` 22787 func Real(scope *Scope, input tf.Output, optional ...RealAttr) (output tf.Output) { 22788 if scope.Err() != nil { 22789 return 22790 } 22791 attrs := map[string]interface{}{} 22792 for _, a := range optional { 22793 a(attrs) 22794 } 22795 opspec := tf.OpSpec{ 22796 Type: "Real", 22797 Input: []tf.Input{ 22798 input, 22799 }, 22800 Attrs: attrs, 22801 } 22802 op := scope.AddOperation(opspec) 22803 return op.Output(0) 22804 } 22805 22806 // AudioSummaryAttr is an optional argument to AudioSummary. 22807 type AudioSummaryAttr func(optionalAttr) 22808 22809 // AudioSummaryMaxOutputs sets the optional max_outputs attribute to value. 22810 // 22811 // value: Max number of batch elements to generate audio for. 22812 // If not specified, defaults to 3 22813 // 22814 // REQUIRES: value >= 1 22815 func AudioSummaryMaxOutputs(value int64) AudioSummaryAttr { 22816 return func(m optionalAttr) { 22817 m["max_outputs"] = value 22818 } 22819 } 22820 22821 // Outputs a `Summary` protocol buffer with audio. 22822 // 22823 // DEPRECATED at GraphDef version 15: Use AudioSummaryV2. 22824 // 22825 // The summary has up to `max_outputs` summary values containing audio. The 22826 // audio is built from `tensor` which must be 3-D with shape `[batch_size, 22827 // frames, channels]` or 2-D with shape `[batch_size, frames]`. The values are 22828 // assumed to be in the range of `[-1.0, 1.0]` with a sample rate of `sample_rate`. 22829 // 22830 // The `tag` argument is a scalar `Tensor` of type `string`. It is used to 22831 // build the `tag` of the summary values: 22832 // 22833 // * If `max_outputs` is 1, the summary value tag is '*tag*/audio'. 22834 // * If `max_outputs` is greater than 1, the summary value tags are 22835 // generated sequentially as '*tag*/audio/0', '*tag*/audio/1', etc. 22836 // 22837 // Arguments: 22838 // tag: Scalar. Used to build the `tag` attribute of the summary values. 22839 // tensor: 2-D of shape `[batch_size, frames]`. 22840 // sample_rate: The sample rate of the signal in hertz. 22841 // 22842 // Returns Scalar. Serialized `Summary` protocol buffer. 22843 func AudioSummary(scope *Scope, tag tf.Output, tensor tf.Output, sample_rate float32, optional ...AudioSummaryAttr) (summary tf.Output) { 22844 if scope.Err() != nil { 22845 return 22846 } 22847 attrs := map[string]interface{}{"sample_rate": sample_rate} 22848 for _, a := range optional { 22849 a(attrs) 22850 } 22851 opspec := tf.OpSpec{ 22852 Type: "AudioSummary", 22853 Input: []tf.Input{ 22854 tag, tensor, 22855 }, 22856 Attrs: attrs, 22857 } 22858 op := scope.AddOperation(opspec) 22859 return op.Output(0) 22860 } 22861 22862 // QrAttr is an optional argument to Qr. 22863 type QrAttr func(optionalAttr) 22864 22865 // QrFullMatrices sets the optional full_matrices attribute to value. 22866 // 22867 // value: If true, compute full-sized `q` and `r`. If false 22868 // (the default), compute only the leading `P` columns of `q`. 22869 // If not specified, defaults to false 22870 func QrFullMatrices(value bool) QrAttr { 22871 return func(m optionalAttr) { 22872 m["full_matrices"] = value 22873 } 22874 } 22875 22876 // Computes the QR decompositions of one or more matrices. 22877 // 22878 // Computes the QR decomposition of each inner matrix in `tensor` such that 22879 // `tensor[..., :, :] = q[..., :, :] * r[..., :,:])` 22880 // 22881 // ```python 22882 // # a is a tensor. 22883 // # q is a tensor of orthonormal matrices. 22884 // # r is a tensor of upper triangular matrices. 22885 // q, r = qr(a) 22886 // q_full, r_full = qr(a, full_matrices=True) 22887 // ``` 22888 // 22889 // Arguments: 22890 // input: A tensor of shape `[..., M, N]` whose inner-most 2 dimensions 22891 // form matrices of size `[M, N]`. Let `P` be the minimum of `M` and `N`. 22892 // 22893 // Returns Orthonormal basis for range of `a`. If `full_matrices` is `False` then 22894 // shape is `[..., M, P]`; if `full_matrices` is `True` then shape is 22895 // `[..., M, M]`.Triangular factor. If `full_matrices` is `False` then shape is 22896 // `[..., P, N]`. If `full_matrices` is `True` then shape is `[..., M, N]`. 22897 func Qr(scope *Scope, input tf.Output, optional ...QrAttr) (q tf.Output, r tf.Output) { 22898 if scope.Err() != nil { 22899 return 22900 } 22901 attrs := map[string]interface{}{} 22902 for _, a := range optional { 22903 a(attrs) 22904 } 22905 opspec := tf.OpSpec{ 22906 Type: "Qr", 22907 Input: []tf.Input{ 22908 input, 22909 }, 22910 Attrs: attrs, 22911 } 22912 op := scope.AddOperation(opspec) 22913 return op.Output(0), op.Output(1) 22914 } 22915 22916 // TensorArrayV3Attr is an optional argument to TensorArrayV3. 22917 type TensorArrayV3Attr func(optionalAttr) 22918 22919 // TensorArrayV3ElementShape sets the optional element_shape attribute to value. 22920 // 22921 // value: The expected shape of an element, if known. Used to 22922 // validate the shapes of TensorArray elements. If this shape is not 22923 // fully specified, gathering zero-size TensorArrays is an error. 22924 // If not specified, defaults to <unknown_rank:true > 22925 func TensorArrayV3ElementShape(value tf.Shape) TensorArrayV3Attr { 22926 return func(m optionalAttr) { 22927 m["element_shape"] = value 22928 } 22929 } 22930 22931 // TensorArrayV3DynamicSize sets the optional dynamic_size attribute to value. 22932 // 22933 // value: A boolean that determines whether writes to the TensorArray 22934 // are allowed to grow the size. By default, this is not allowed. 22935 // If not specified, defaults to false 22936 func TensorArrayV3DynamicSize(value bool) TensorArrayV3Attr { 22937 return func(m optionalAttr) { 22938 m["dynamic_size"] = value 22939 } 22940 } 22941 22942 // TensorArrayV3ClearAfterRead sets the optional clear_after_read attribute to value. 22943 // 22944 // value: If true (default), Tensors in the TensorArray are cleared 22945 // after being read. This disables multiple read semantics but allows early 22946 // release of memory. 22947 // If not specified, defaults to true 22948 func TensorArrayV3ClearAfterRead(value bool) TensorArrayV3Attr { 22949 return func(m optionalAttr) { 22950 m["clear_after_read"] = value 22951 } 22952 } 22953 22954 // TensorArrayV3IdenticalElementShapes sets the optional identical_element_shapes attribute to value. 22955 // 22956 // value: If true (default is false), then all 22957 // elements in the TensorArray will be expected to have have identical shapes. 22958 // This allows certain behaviors, like dynamically checking for 22959 // consistent shapes on write, and being able to fill in properly 22960 // shaped zero tensors on stack -- even if the element_shape attribute 22961 // is not fully defined. 22962 // If not specified, defaults to false 22963 func TensorArrayV3IdenticalElementShapes(value bool) TensorArrayV3Attr { 22964 return func(m optionalAttr) { 22965 m["identical_element_shapes"] = value 22966 } 22967 } 22968 22969 // TensorArrayV3TensorArrayName sets the optional tensor_array_name attribute to value. 22970 // 22971 // value: Overrides the name used for the temporary tensor_array 22972 // resource. Default value is the name of the 'TensorArray' op (which 22973 // is guaranteed unique). 22974 // If not specified, defaults to "" 22975 func TensorArrayV3TensorArrayName(value string) TensorArrayV3Attr { 22976 return func(m optionalAttr) { 22977 m["tensor_array_name"] = value 22978 } 22979 } 22980 22981 // An array of Tensors of given size. 22982 // 22983 // Write data via Write and read via Read or Pack. 22984 // 22985 // Arguments: 22986 // size: The size of the array. 22987 // dtype: The type of the elements on the tensor_array. 22988 // 22989 // Returns The handle to the TensorArray.A scalar used to control gradient flow. 22990 func TensorArrayV3(scope *Scope, size tf.Output, dtype tf.DataType, optional ...TensorArrayV3Attr) (handle tf.Output, flow tf.Output) { 22991 if scope.Err() != nil { 22992 return 22993 } 22994 attrs := map[string]interface{}{"dtype": dtype} 22995 for _, a := range optional { 22996 a(attrs) 22997 } 22998 opspec := tf.OpSpec{ 22999 Type: "TensorArrayV3", 23000 Input: []tf.Input{ 23001 size, 23002 }, 23003 Attrs: attrs, 23004 } 23005 op := scope.AddOperation(opspec) 23006 return op.Output(0), op.Output(1) 23007 } 23008 23009 // Returns the truth value of NOT x element-wise. 23010 func LogicalNot(scope *Scope, x tf.Output) (y tf.Output) { 23011 if scope.Err() != nil { 23012 return 23013 } 23014 opspec := tf.OpSpec{ 23015 Type: "LogicalNot", 23016 Input: []tf.Input{ 23017 x, 23018 }, 23019 } 23020 op := scope.AddOperation(opspec) 23021 return op.Output(0) 23022 } 23023 23024 // 3D real-valued fast Fourier transform. 23025 // 23026 // Computes the 3-dimensional discrete Fourier transform of a real-valued signal 23027 // over the inner-most 3 dimensions of `input`. 23028 // 23029 // Since the DFT of a real signal is Hermitian-symmetric, `RFFT3D` only returns the 23030 // `fft_length / 2 + 1` unique components of the FFT for the inner-most dimension 23031 // of `output`: the zero-frequency term, followed by the `fft_length / 2` 23032 // positive-frequency terms. 23033 // 23034 // Along each axis `RFFT3D` is computed on, if `fft_length` is smaller than the 23035 // corresponding dimension of `input`, the dimension is cropped. If it is larger, 23036 // the dimension is padded with zeros. 23037 // 23038 // Arguments: 23039 // input: A float32 tensor. 23040 // fft_length: An int32 tensor of shape [3]. The FFT length for each dimension. 23041 // 23042 // Returns A complex64 tensor of the same rank as `input`. The inner-most 3 23043 // dimensions of `input` are replaced with the their 3D Fourier transform. The 23044 // inner-most dimension contains `fft_length / 2 + 1` unique frequency 23045 // components. 23046 // 23047 // @compatibility(numpy) 23048 // Equivalent to np.fft.rfftn with 3 dimensions. 23049 // @end_compatibility 23050 func RFFT3D(scope *Scope, input tf.Output, fft_length tf.Output) (output tf.Output) { 23051 if scope.Err() != nil { 23052 return 23053 } 23054 opspec := tf.OpSpec{ 23055 Type: "RFFT3D", 23056 Input: []tf.Input{ 23057 input, fft_length, 23058 }, 23059 } 23060 op := scope.AddOperation(opspec) 23061 return op.Output(0) 23062 } 23063 23064 // Computes rectified linear: `max(features, 0)`. 23065 func Relu(scope *Scope, features tf.Output) (activations tf.Output) { 23066 if scope.Err() != nil { 23067 return 23068 } 23069 opspec := tf.OpSpec{ 23070 Type: "Relu", 23071 Input: []tf.Input{ 23072 features, 23073 }, 23074 } 23075 op := scope.AddOperation(opspec) 23076 return op.Output(0) 23077 } 23078 23079 // ResourceApplyAddSignAttr is an optional argument to ResourceApplyAddSign. 23080 type ResourceApplyAddSignAttr func(optionalAttr) 23081 23082 // ResourceApplyAddSignUseLocking sets the optional use_locking attribute to value. 23083 // 23084 // value: If `True`, updating of the var and m tensors is 23085 // protected by a lock; otherwise the behavior is undefined, but may exhibit less 23086 // contention. 23087 // If not specified, defaults to false 23088 func ResourceApplyAddSignUseLocking(value bool) ResourceApplyAddSignAttr { 23089 return func(m optionalAttr) { 23090 m["use_locking"] = value 23091 } 23092 } 23093 23094 // Update '*var' according to the AddSign update. 23095 // 23096 // m_t <- beta1 * m_{t-1} + (1 - beta1) * g 23097 // update <- (alpha + sign_decay * sign(g) *sign(m)) * g 23098 // variable <- variable - lr_t * update 23099 // 23100 // Arguments: 23101 // var_: Should be from a Variable(). 23102 // m: Should be from a Variable(). 23103 // lr: Scaling factor. Must be a scalar. 23104 // alpha: Must be a scalar. 23105 // sign_decay: Must be a scalar. 23106 // beta: Must be a scalar. 23107 // grad: The gradient. 23108 // 23109 // Returns the created operation. 23110 func ResourceApplyAddSign(scope *Scope, var_ tf.Output, m tf.Output, lr tf.Output, alpha tf.Output, sign_decay tf.Output, beta tf.Output, grad tf.Output, optional ...ResourceApplyAddSignAttr) (o *tf.Operation) { 23111 if scope.Err() != nil { 23112 return 23113 } 23114 attrs := map[string]interface{}{} 23115 for _, a := range optional { 23116 a(attrs) 23117 } 23118 opspec := tf.OpSpec{ 23119 Type: "ResourceApplyAddSign", 23120 Input: []tf.Input{ 23121 var_, m, lr, alpha, sign_decay, beta, grad, 23122 }, 23123 Attrs: attrs, 23124 } 23125 return scope.AddOperation(opspec) 23126 } 23127 23128 // Divides sparse updates into the variable referenced by `resource`. 23129 // 23130 // This operation computes 23131 // 23132 // # Scalar indices 23133 // ref[indices, ...] /= updates[...] 23134 // 23135 // # Vector indices (for each i) 23136 // ref[indices[i], ...] /= updates[i, ...] 23137 // 23138 // # High rank indices (for each i, ..., j) 23139 // ref[indices[i, ..., j], ...] /= updates[i, ..., j, ...] 23140 // 23141 // Duplicate entries are handled correctly: if multiple `indices` reference 23142 // the same location, their contributions multiply. 23143 // 23144 // Requires `updates.shape = indices.shape + ref.shape[1:]` or `updates.shape = []`. 23145 // 23146 // <div style="width:70%; margin:auto; margin-bottom:10px; margin-top:20px;"> 23147 // <img style="width:100%" src='https://www.tensorflow.org/images/ScatterAdd.png' alt> 23148 // </div> 23149 // 23150 // Arguments: 23151 // resource: Should be from a `Variable` node. 23152 // indices: A tensor of indices into the first dimension of `ref`. 23153 // updates: A tensor of updated values to add to `ref`. 23154 // 23155 // Returns the created operation. 23156 func ResourceScatterDiv(scope *Scope, resource tf.Output, indices tf.Output, updates tf.Output) (o *tf.Operation) { 23157 if scope.Err() != nil { 23158 return 23159 } 23160 opspec := tf.OpSpec{ 23161 Type: "ResourceScatterDiv", 23162 Input: []tf.Input{ 23163 resource, indices, updates, 23164 }, 23165 } 23166 return scope.AddOperation(opspec) 23167 } 23168 23169 // ListDiffAttr is an optional argument to ListDiff. 23170 type ListDiffAttr func(optionalAttr) 23171 23172 // ListDiffOutIdx sets the optional out_idx attribute to value. 23173 // If not specified, defaults to DT_INT32 23174 func ListDiffOutIdx(value tf.DataType) ListDiffAttr { 23175 return func(m optionalAttr) { 23176 m["out_idx"] = value 23177 } 23178 } 23179 23180 // Computes the difference between two lists of numbers or strings. 23181 // 23182 // Given a list `x` and a list `y`, this operation returns a list `out` that 23183 // represents all values that are in `x` but not in `y`. The returned list `out` 23184 // is sorted in the same order that the numbers appear in `x` (duplicates are 23185 // preserved). This operation also returns a list `idx` that represents the 23186 // position of each `out` element in `x`. In other words: 23187 // 23188 // `out[i] = x[idx[i]] for i in [0, 1, ..., len(out) - 1]` 23189 // 23190 // For example, given this input: 23191 // 23192 // ``` 23193 // x = [1, 2, 3, 4, 5, 6] 23194 // y = [1, 3, 5] 23195 // ``` 23196 // 23197 // This operation would return: 23198 // 23199 // ``` 23200 // out ==> [2, 4, 6] 23201 // idx ==> [1, 3, 5] 23202 // ``` 23203 // 23204 // Arguments: 23205 // x: 1-D. Values to keep. 23206 // y: 1-D. Values to remove. 23207 // 23208 // Returns 1-D. Values present in `x` but not in `y`.1-D. Positions of `x` values preserved in `out`. 23209 func ListDiff(scope *Scope, x tf.Output, y tf.Output, optional ...ListDiffAttr) (out tf.Output, idx tf.Output) { 23210 if scope.Err() != nil { 23211 return 23212 } 23213 attrs := map[string]interface{}{} 23214 for _, a := range optional { 23215 a(attrs) 23216 } 23217 opspec := tf.OpSpec{ 23218 Type: "ListDiff", 23219 Input: []tf.Input{ 23220 x, y, 23221 }, 23222 Attrs: attrs, 23223 } 23224 op := scope.AddOperation(opspec) 23225 return op.Output(0), op.Output(1) 23226 } 23227 23228 // LoadTPUEmbeddingAdadeltaParametersGradAccumDebugAttr is an optional argument to LoadTPUEmbeddingAdadeltaParametersGradAccumDebug. 23229 type LoadTPUEmbeddingAdadeltaParametersGradAccumDebugAttr func(optionalAttr) 23230 23231 // LoadTPUEmbeddingAdadeltaParametersGradAccumDebugTableId sets the optional table_id attribute to value. 23232 // If not specified, defaults to -1 23233 // 23234 // REQUIRES: value >= -1 23235 func LoadTPUEmbeddingAdadeltaParametersGradAccumDebugTableId(value int64) LoadTPUEmbeddingAdadeltaParametersGradAccumDebugAttr { 23236 return func(m optionalAttr) { 23237 m["table_id"] = value 23238 } 23239 } 23240 23241 // LoadTPUEmbeddingAdadeltaParametersGradAccumDebugTableName sets the optional table_name attribute to value. 23242 // If not specified, defaults to "" 23243 func LoadTPUEmbeddingAdadeltaParametersGradAccumDebugTableName(value string) LoadTPUEmbeddingAdadeltaParametersGradAccumDebugAttr { 23244 return func(m optionalAttr) { 23245 m["table_name"] = value 23246 } 23247 } 23248 23249 // Load Adadelta parameters with debug support. 23250 // 23251 // An op that loads optimization parameters into HBM for embedding. Must be 23252 // preceded by a ConfigureTPUEmbeddingHost op that sets up the correct 23253 // embedding table configuration. For example, this op is used to install 23254 // parameters that are loaded from a checkpoint before a training loop is 23255 // executed. 23256 // 23257 // Arguments: 23258 // parameters: Value of parameters used in the Adadelta optimization algorithm. 23259 // accumulators: Value of accumulators used in the Adadelta optimization algorithm. 23260 // updates: Value of updates used in the Adadelta optimization algorithm. 23261 // gradient_accumulators: Value of gradient_accumulators used in the Adadelta optimization algorithm. 23262 // 23263 // 23264 // 23265 // Returns the created operation. 23266 func LoadTPUEmbeddingAdadeltaParametersGradAccumDebug(scope *Scope, parameters tf.Output, accumulators tf.Output, updates tf.Output, gradient_accumulators tf.Output, num_shards int64, shard_id int64, optional ...LoadTPUEmbeddingAdadeltaParametersGradAccumDebugAttr) (o *tf.Operation) { 23267 if scope.Err() != nil { 23268 return 23269 } 23270 attrs := map[string]interface{}{"num_shards": num_shards, "shard_id": shard_id} 23271 for _, a := range optional { 23272 a(attrs) 23273 } 23274 opspec := tf.OpSpec{ 23275 Type: "LoadTPUEmbeddingAdadeltaParametersGradAccumDebug", 23276 Input: []tf.Input{ 23277 parameters, accumulators, updates, gradient_accumulators, 23278 }, 23279 Attrs: attrs, 23280 } 23281 return scope.AddOperation(opspec) 23282 } 23283 23284 // Returns a serialized GraphDef representing `input_dataset`. 23285 // 23286 // Returns a graph representation for `input_dataset`. 23287 // 23288 // Arguments: 23289 // input_dataset: A variant tensor representing the dataset to return the graph representation for. 23290 // 23291 // Returns The graph representation of the dataset (as serialized GraphDef). 23292 func DatasetToGraph(scope *Scope, input_dataset tf.Output) (graph tf.Output) { 23293 if scope.Err() != nil { 23294 return 23295 } 23296 opspec := tf.OpSpec{ 23297 Type: "DatasetToGraph", 23298 Input: []tf.Input{ 23299 input_dataset, 23300 }, 23301 } 23302 op := scope.AddOperation(opspec) 23303 return op.Output(0) 23304 } 23305 23306 // MatrixSolveAttr is an optional argument to MatrixSolve. 23307 type MatrixSolveAttr func(optionalAttr) 23308 23309 // MatrixSolveAdjoint sets the optional adjoint attribute to value. 23310 // 23311 // value: Boolean indicating whether to solve with `matrix` or its (block-wise) 23312 // adjoint. 23313 // If not specified, defaults to false 23314 func MatrixSolveAdjoint(value bool) MatrixSolveAttr { 23315 return func(m optionalAttr) { 23316 m["adjoint"] = value 23317 } 23318 } 23319 23320 // Solves systems of linear equations. 23321 // 23322 // `Matrix` is a tensor of shape `[..., M, M]` whose inner-most 2 dimensions 23323 // form square matrices. `Rhs` is a tensor of shape `[..., M, K]`. The `output` is 23324 // a tensor shape `[..., M, K]`. If `adjoint` is `False` then each output matrix 23325 // satisfies `matrix[..., :, :] * output[..., :, :] = rhs[..., :, :]`. 23326 // If `adjoint` is `True` then each output matrix satisfies 23327 // `adjoint(matrix[..., :, :]) * output[..., :, :] = rhs[..., :, :]`. 23328 // 23329 // Arguments: 23330 // matrix: Shape is `[..., M, M]`. 23331 // rhs: Shape is `[..., M, K]`. 23332 // 23333 // Returns Shape is `[..., M, K]`. 23334 func MatrixSolve(scope *Scope, matrix tf.Output, rhs tf.Output, optional ...MatrixSolveAttr) (output tf.Output) { 23335 if scope.Err() != nil { 23336 return 23337 } 23338 attrs := map[string]interface{}{} 23339 for _, a := range optional { 23340 a(attrs) 23341 } 23342 opspec := tf.OpSpec{ 23343 Type: "MatrixSolve", 23344 Input: []tf.Input{ 23345 matrix, rhs, 23346 }, 23347 Attrs: attrs, 23348 } 23349 op := scope.AddOperation(opspec) 23350 return op.Output(0) 23351 } 23352 23353 // ResourceApplyKerasMomentumAttr is an optional argument to ResourceApplyKerasMomentum. 23354 type ResourceApplyKerasMomentumAttr func(optionalAttr) 23355 23356 // ResourceApplyKerasMomentumUseLocking sets the optional use_locking attribute to value. 23357 // 23358 // value: If `True`, updating of the var and accum tensors will be protected 23359 // by a lock; otherwise the behavior is undefined, but may exhibit less 23360 // contention. 23361 // If not specified, defaults to false 23362 func ResourceApplyKerasMomentumUseLocking(value bool) ResourceApplyKerasMomentumAttr { 23363 return func(m optionalAttr) { 23364 m["use_locking"] = value 23365 } 23366 } 23367 23368 // ResourceApplyKerasMomentumUseNesterov sets the optional use_nesterov attribute to value. 23369 // 23370 // value: If `True`, the tensor passed to compute grad will be 23371 // var + momentum * accum, so in the end, the var you get is actually 23372 // var + momentum * accum. 23373 // If not specified, defaults to false 23374 func ResourceApplyKerasMomentumUseNesterov(value bool) ResourceApplyKerasMomentumAttr { 23375 return func(m optionalAttr) { 23376 m["use_nesterov"] = value 23377 } 23378 } 23379 23380 // Update '*var' according to the momentum scheme. Set use_nesterov = True if you 23381 // 23382 // want to use Nesterov momentum. 23383 // 23384 // accum = accum * momentum - lr * grad 23385 // var += accum 23386 // 23387 // Arguments: 23388 // var_: Should be from a Variable(). 23389 // accum: Should be from a Variable(). 23390 // lr: Scaling factor. Must be a scalar. 23391 // grad: The gradient. 23392 // momentum: Momentum. Must be a scalar. 23393 // 23394 // Returns the created operation. 23395 func ResourceApplyKerasMomentum(scope *Scope, var_ tf.Output, accum tf.Output, lr tf.Output, grad tf.Output, momentum tf.Output, optional ...ResourceApplyKerasMomentumAttr) (o *tf.Operation) { 23396 if scope.Err() != nil { 23397 return 23398 } 23399 attrs := map[string]interface{}{} 23400 for _, a := range optional { 23401 a(attrs) 23402 } 23403 opspec := tf.OpSpec{ 23404 Type: "ResourceApplyKerasMomentum", 23405 Input: []tf.Input{ 23406 var_, accum, lr, grad, momentum, 23407 }, 23408 Attrs: attrs, 23409 } 23410 return scope.AddOperation(opspec) 23411 } 23412 23413 // Return a tensor with the same shape and contents as the input tensor or value. 23414 func Identity(scope *Scope, input tf.Output) (output tf.Output) { 23415 if scope.Err() != nil { 23416 return 23417 } 23418 opspec := tf.OpSpec{ 23419 Type: "Identity", 23420 Input: []tf.Input{ 23421 input, 23422 }, 23423 } 23424 op := scope.AddOperation(opspec) 23425 return op.Output(0) 23426 } 23427 23428 // Computes arctangent of `y/x` element-wise, respecting signs of the arguments. 23429 // 23430 // This is the angle \( \theta \in [-\pi, \pi] \) such that 23431 // \[ x = r \cos(\theta) \] 23432 // and 23433 // \[ y = r \sin(\theta) \] 23434 // where \(r = \sqrt(x^2 + y^2) \). 23435 func Atan2(scope *Scope, y tf.Output, x tf.Output) (z tf.Output) { 23436 if scope.Err() != nil { 23437 return 23438 } 23439 opspec := tf.OpSpec{ 23440 Type: "Atan2", 23441 Input: []tf.Input{ 23442 y, x, 23443 }, 23444 } 23445 op := scope.AddOperation(opspec) 23446 return op.Output(0) 23447 } 23448 23449 // Updates specified rows with values in `v`. 23450 // 23451 // Computes `x[i, :] = v; return x`. 23452 // 23453 // Arguments: 23454 // x: A tensor of type `T`. 23455 // i: A vector. Indices into the left-most dimension of `x`. 23456 // v: A `Tensor` of type T. Same dimension sizes as x except the first dimension, which must be the same as i's size. 23457 // 23458 // Returns A `Tensor` of type T. An alias of `x`. The content of `y` is undefined if there are duplicates in `i`. 23459 func InplaceUpdate(scope *Scope, x tf.Output, i tf.Output, v tf.Output) (y tf.Output) { 23460 if scope.Err() != nil { 23461 return 23462 } 23463 opspec := tf.OpSpec{ 23464 Type: "InplaceUpdate", 23465 Input: []tf.Input{ 23466 x, i, v, 23467 }, 23468 } 23469 op := scope.AddOperation(opspec) 23470 return op.Output(0) 23471 } 23472 23473 // OutfeedDequeueTupleAttr is an optional argument to OutfeedDequeueTuple. 23474 type OutfeedDequeueTupleAttr func(optionalAttr) 23475 23476 // OutfeedDequeueTupleDeviceOrdinal sets the optional device_ordinal attribute to value. 23477 // 23478 // value: The TPU device to use. This should be -1 when the Op 23479 // is running on a TPU device, and >= 0 when the Op is running on the CPU 23480 // device. 23481 // If not specified, defaults to -1 23482 func OutfeedDequeueTupleDeviceOrdinal(value int64) OutfeedDequeueTupleAttr { 23483 return func(m optionalAttr) { 23484 m["device_ordinal"] = value 23485 } 23486 } 23487 23488 // Retrieve multiple values from the computation outfeed. 23489 // 23490 // This operation will block indefinitely until data is available. Output `i` 23491 // corresponds to XLA tuple element `i`. 23492 // 23493 // Arguments: 23494 // dtypes: The element types of each element in `outputs`. 23495 // shapes: The shapes of each tensor in `outputs`. 23496 // 23497 // Returns A list of tensors that will be read from the outfeed. 23498 func OutfeedDequeueTuple(scope *Scope, dtypes []tf.DataType, shapes []tf.Shape, optional ...OutfeedDequeueTupleAttr) (outputs []tf.Output) { 23499 if scope.Err() != nil { 23500 return 23501 } 23502 attrs := map[string]interface{}{"dtypes": dtypes, "shapes": shapes} 23503 for _, a := range optional { 23504 a(attrs) 23505 } 23506 opspec := tf.OpSpec{ 23507 Type: "OutfeedDequeueTuple", 23508 23509 Attrs: attrs, 23510 } 23511 op := scope.AddOperation(opspec) 23512 if scope.Err() != nil { 23513 return 23514 } 23515 var idx int 23516 var err error 23517 if outputs, idx, err = makeOutputList(op, idx, "outputs"); err != nil { 23518 scope.UpdateErr("OutfeedDequeueTuple", err) 23519 return 23520 } 23521 return outputs 23522 } 23523 23524 // Identity op for gradient debugging. 23525 // 23526 // This op is hidden from public in Python. It is used by TensorFlow Debugger to 23527 // register gradient tensors for gradient debugging. 23528 // This op operates on non-reference-type tensors. 23529 func DebugGradientIdentity(scope *Scope, input tf.Output) (output tf.Output) { 23530 if scope.Err() != nil { 23531 return 23532 } 23533 opspec := tf.OpSpec{ 23534 Type: "DebugGradientIdentity", 23535 Input: []tf.Input{ 23536 input, 23537 }, 23538 } 23539 op := scope.AddOperation(opspec) 23540 return op.Output(0) 23541 } 23542 23543 // ResourceSparseApplyAdadeltaAttr is an optional argument to ResourceSparseApplyAdadelta. 23544 type ResourceSparseApplyAdadeltaAttr func(optionalAttr) 23545 23546 // ResourceSparseApplyAdadeltaUseLocking sets the optional use_locking attribute to value. 23547 // 23548 // value: If True, updating of the var and accum tensors will be protected by 23549 // a lock; otherwise the behavior is undefined, but may exhibit less contention. 23550 // If not specified, defaults to false 23551 func ResourceSparseApplyAdadeltaUseLocking(value bool) ResourceSparseApplyAdadeltaAttr { 23552 return func(m optionalAttr) { 23553 m["use_locking"] = value 23554 } 23555 } 23556 23557 // var: Should be from a Variable(). 23558 // 23559 // Arguments: 23560 // 23561 // accum: Should be from a Variable(). 23562 // accum_update: : Should be from a Variable(). 23563 // lr: Learning rate. Must be a scalar. 23564 // rho: Decay factor. Must be a scalar. 23565 // epsilon: Constant factor. Must be a scalar. 23566 // grad: The gradient. 23567 // indices: A vector of indices into the first dimension of var and accum. 23568 // 23569 // Returns the created operation. 23570 func ResourceSparseApplyAdadelta(scope *Scope, var_ tf.Output, accum tf.Output, accum_update tf.Output, lr tf.Output, rho tf.Output, epsilon tf.Output, grad tf.Output, indices tf.Output, optional ...ResourceSparseApplyAdadeltaAttr) (o *tf.Operation) { 23571 if scope.Err() != nil { 23572 return 23573 } 23574 attrs := map[string]interface{}{} 23575 for _, a := range optional { 23576 a(attrs) 23577 } 23578 opspec := tf.OpSpec{ 23579 Type: "ResourceSparseApplyAdadelta", 23580 Input: []tf.Input{ 23581 var_, accum, accum_update, lr, rho, epsilon, grad, indices, 23582 }, 23583 Attrs: attrs, 23584 } 23585 return scope.AddOperation(opspec) 23586 } 23587 23588 // Returns which elements of x are NaN. 23589 // 23590 // @compatibility(numpy) 23591 // Equivalent to np.isnan 23592 // @end_compatibility 23593 func IsNan(scope *Scope, x tf.Output) (y tf.Output) { 23594 if scope.Err() != nil { 23595 return 23596 } 23597 opspec := tf.OpSpec{ 23598 Type: "IsNan", 23599 Input: []tf.Input{ 23600 x, 23601 }, 23602 } 23603 op := scope.AddOperation(opspec) 23604 return op.Output(0) 23605 } 23606 23607 // DepthwiseConv2dNativeBackpropFilterAttr is an optional argument to DepthwiseConv2dNativeBackpropFilter. 23608 type DepthwiseConv2dNativeBackpropFilterAttr func(optionalAttr) 23609 23610 // DepthwiseConv2dNativeBackpropFilterDataFormat sets the optional data_format attribute to value. 23611 // 23612 // value: Specify the data format of the input and output data. With the 23613 // default format "NHWC", the data is stored in the order of: 23614 // [batch, height, width, channels]. 23615 // Alternatively, the format could be "NCHW", the data storage order of: 23616 // [batch, channels, height, width]. 23617 // If not specified, defaults to "NHWC" 23618 func DepthwiseConv2dNativeBackpropFilterDataFormat(value string) DepthwiseConv2dNativeBackpropFilterAttr { 23619 return func(m optionalAttr) { 23620 m["data_format"] = value 23621 } 23622 } 23623 23624 // DepthwiseConv2dNativeBackpropFilterDilations sets the optional dilations attribute to value. 23625 // 23626 // value: 1-D tensor of length 4. The dilation factor for each dimension of 23627 // `input`. If set to k > 1, there will be k-1 skipped cells between each filter 23628 // element on that dimension. The dimension order is determined by the value of 23629 // `data_format`, see above for details. Dilations in the batch and depth 23630 // dimensions must be 1. 23631 // If not specified, defaults to <i:1 i:1 i:1 i:1 > 23632 func DepthwiseConv2dNativeBackpropFilterDilations(value []int64) DepthwiseConv2dNativeBackpropFilterAttr { 23633 return func(m optionalAttr) { 23634 m["dilations"] = value 23635 } 23636 } 23637 23638 // Computes the gradients of depthwise convolution with respect to the filter. 23639 // 23640 // Arguments: 23641 // input: 4-D with shape based on `data_format`. For example, if 23642 // `data_format` is 'NHWC' then `input` is a 4-D `[batch, in_height, 23643 // in_width, in_channels]` tensor. 23644 // filter_sizes: An integer vector representing the tensor shape of `filter`, 23645 // where `filter` is a 4-D 23646 // `[filter_height, filter_width, in_channels, depthwise_multiplier]` tensor. 23647 // out_backprop: 4-D with shape based on `data_format`. 23648 // For example, if `data_format` is 'NHWC' then 23649 // out_backprop shape is `[batch, out_height, out_width, out_channels]`. 23650 // Gradients w.r.t. the output of the convolution. 23651 // strides: The stride of the sliding window for each dimension of the input 23652 // of the convolution. 23653 // padding: The type of padding algorithm to use. 23654 // 23655 // Returns 4-D with shape 23656 // `[filter_height, filter_width, in_channels, out_channels]`. Gradient w.r.t. 23657 // the `filter` input of the convolution. 23658 func DepthwiseConv2dNativeBackpropFilter(scope *Scope, input tf.Output, filter_sizes tf.Output, out_backprop tf.Output, strides []int64, padding string, optional ...DepthwiseConv2dNativeBackpropFilterAttr) (output tf.Output) { 23659 if scope.Err() != nil { 23660 return 23661 } 23662 attrs := map[string]interface{}{"strides": strides, "padding": padding} 23663 for _, a := range optional { 23664 a(attrs) 23665 } 23666 opspec := tf.OpSpec{ 23667 Type: "DepthwiseConv2dNativeBackpropFilter", 23668 Input: []tf.Input{ 23669 input, filter_sizes, out_backprop, 23670 }, 23671 Attrs: attrs, 23672 } 23673 op := scope.AddOperation(opspec) 23674 return op.Output(0) 23675 } 23676 23677 // MapUnstageAttr is an optional argument to MapUnstage. 23678 type MapUnstageAttr func(optionalAttr) 23679 23680 // MapUnstageCapacity sets the optional capacity attribute to value. 23681 // If not specified, defaults to 0 23682 // 23683 // REQUIRES: value >= 0 23684 func MapUnstageCapacity(value int64) MapUnstageAttr { 23685 return func(m optionalAttr) { 23686 m["capacity"] = value 23687 } 23688 } 23689 23690 // MapUnstageMemoryLimit sets the optional memory_limit attribute to value. 23691 // If not specified, defaults to 0 23692 // 23693 // REQUIRES: value >= 0 23694 func MapUnstageMemoryLimit(value int64) MapUnstageAttr { 23695 return func(m optionalAttr) { 23696 m["memory_limit"] = value 23697 } 23698 } 23699 23700 // MapUnstageContainer sets the optional container attribute to value. 23701 // If not specified, defaults to "" 23702 func MapUnstageContainer(value string) MapUnstageAttr { 23703 return func(m optionalAttr) { 23704 m["container"] = value 23705 } 23706 } 23707 23708 // MapUnstageSharedName sets the optional shared_name attribute to value. 23709 // If not specified, defaults to "" 23710 func MapUnstageSharedName(value string) MapUnstageAttr { 23711 return func(m optionalAttr) { 23712 m["shared_name"] = value 23713 } 23714 } 23715 23716 // Op removes and returns the values associated with the key 23717 // 23718 // from the underlying container. If the underlying container 23719 // does not contain this key, the op will block until it does. 23720 func MapUnstage(scope *Scope, key tf.Output, indices tf.Output, dtypes []tf.DataType, optional ...MapUnstageAttr) (values []tf.Output) { 23721 if scope.Err() != nil { 23722 return 23723 } 23724 attrs := map[string]interface{}{"dtypes": dtypes} 23725 for _, a := range optional { 23726 a(attrs) 23727 } 23728 opspec := tf.OpSpec{ 23729 Type: "MapUnstage", 23730 Input: []tf.Input{ 23731 key, indices, 23732 }, 23733 Attrs: attrs, 23734 } 23735 op := scope.AddOperation(opspec) 23736 if scope.Err() != nil { 23737 return 23738 } 23739 var idx int 23740 var err error 23741 if values, idx, err = makeOutputList(op, idx, "values"); err != nil { 23742 scope.UpdateErr("MapUnstage", err) 23743 return 23744 } 23745 return values 23746 } 23747 23748 // An op enabling differentiation of TPU Embeddings. 23749 // 23750 // This op simply returns its first input, which is assumed to have been sliced 23751 // from the Tensors returned by TPUEmbeddingDequeueActivations. The presence of 23752 // this op, and its first argument being a trainable Variable, enables automatic 23753 // differentiation of graphs containing embeddings via the TPU Embedding Python 23754 // libraries. 23755 // 23756 // Arguments: 23757 // embedding_variable: A trainable variable, enabling optimizers to find this op. 23758 // sliced_activations: The embedding activations Tensor to return. 23759 // table_id: The id of the table in the embedding layer configuration from which 23760 // these activations were computed. 23761 // lookup_id: Identifier of the set of embedding indices which produced these 23762 // activations. 23763 func TPUEmbeddingActivations(scope *Scope, embedding_variable tf.Output, sliced_activations tf.Output, table_id int64, lookup_id int64) (output tf.Output) { 23764 if scope.Err() != nil { 23765 return 23766 } 23767 attrs := map[string]interface{}{"table_id": table_id, "lookup_id": lookup_id} 23768 opspec := tf.OpSpec{ 23769 Type: "TPUEmbeddingActivations", 23770 Input: []tf.Input{ 23771 embedding_variable, sliced_activations, 23772 }, 23773 Attrs: attrs, 23774 } 23775 op := scope.AddOperation(opspec) 23776 return op.Output(0) 23777 } 23778 23779 // BatchToSpace for 4-D tensors of type T. 23780 // 23781 // This is a legacy version of the more general BatchToSpaceND. 23782 // 23783 // Rearranges (permutes) data from batch into blocks of spatial data, followed by 23784 // cropping. This is the reverse transformation of SpaceToBatch. More specifically, 23785 // this op outputs a copy of the input tensor where values from the `batch` 23786 // dimension are moved in spatial blocks to the `height` and `width` dimensions, 23787 // followed by cropping along the `height` and `width` dimensions. 23788 // 23789 // Arguments: 23790 // input: 4-D tensor with shape 23791 // `[batch*block_size*block_size, height_pad/block_size, width_pad/block_size, 23792 // depth]`. Note that the batch size of the input tensor must be divisible by 23793 // `block_size * block_size`. 23794 // crops: 2-D tensor of non-negative integers with shape `[2, 2]`. It specifies 23795 // how many elements to crop from the intermediate result across the spatial 23796 // dimensions as follows: 23797 // 23798 // crops = [[crop_top, crop_bottom], [crop_left, crop_right]] 23799 // 23800 // 23801 // Returns 4-D with shape `[batch, height, width, depth]`, where: 23802 // 23803 // height = height_pad - crop_top - crop_bottom 23804 // width = width_pad - crop_left - crop_right 23805 // 23806 // The attr `block_size` must be greater than one. It indicates the block size. 23807 // 23808 // Some examples: 23809 // 23810 // (1) For the following input of shape `[4, 1, 1, 1]` and block_size of 2: 23811 // 23812 // ``` 23813 // [[[[1]]], [[[2]]], [[[3]]], [[[4]]]] 23814 // ``` 23815 // 23816 // The output tensor has shape `[1, 2, 2, 1]` and value: 23817 // 23818 // ``` 23819 // x = [[[[1], [2]], [[3], [4]]]] 23820 // ``` 23821 // 23822 // (2) For the following input of shape `[4, 1, 1, 3]` and block_size of 2: 23823 // 23824 // ``` 23825 // [[[1, 2, 3]], [[4, 5, 6]], [[7, 8, 9]], [[10, 11, 12]]] 23826 // ``` 23827 // 23828 // The output tensor has shape `[1, 2, 2, 3]` and value: 23829 // 23830 // ``` 23831 // x = [[[[1, 2, 3], [4, 5, 6]], 23832 // [[7, 8, 9], [10, 11, 12]]]] 23833 // ``` 23834 // 23835 // (3) For the following input of shape `[4, 2, 2, 1]` and block_size of 2: 23836 // 23837 // ``` 23838 // x = [[[[1], [3]], [[9], [11]]], 23839 // [[[2], [4]], [[10], [12]]], 23840 // [[[5], [7]], [[13], [15]]], 23841 // [[[6], [8]], [[14], [16]]]] 23842 // ``` 23843 // 23844 // The output tensor has shape `[1, 4, 4, 1]` and value: 23845 // 23846 // ``` 23847 // x = [[[1], [2], [3], [4]], 23848 // [[5], [6], [7], [8]], 23849 // [[9], [10], [11], [12]], 23850 // [[13], [14], [15], [16]]] 23851 // ``` 23852 // 23853 // (4) For the following input of shape `[8, 1, 2, 1]` and block_size of 2: 23854 // 23855 // ``` 23856 // x = [[[[1], [3]]], [[[9], [11]]], [[[2], [4]]], [[[10], [12]]], 23857 // [[[5], [7]]], [[[13], [15]]], [[[6], [8]]], [[[14], [16]]]] 23858 // ``` 23859 // 23860 // The output tensor has shape `[2, 2, 4, 1]` and value: 23861 // 23862 // ``` 23863 // x = [[[[1], [3]], [[5], [7]]], 23864 // [[[2], [4]], [[10], [12]]], 23865 // [[[5], [7]], [[13], [15]]], 23866 // [[[6], [8]], [[14], [16]]]] 23867 // ``` 23868 func BatchToSpace(scope *Scope, input tf.Output, crops tf.Output, block_size int64) (output tf.Output) { 23869 if scope.Err() != nil { 23870 return 23871 } 23872 attrs := map[string]interface{}{"block_size": block_size} 23873 opspec := tf.OpSpec{ 23874 Type: "BatchToSpace", 23875 Input: []tf.Input{ 23876 input, crops, 23877 }, 23878 Attrs: attrs, 23879 } 23880 op := scope.AddOperation(opspec) 23881 return op.Output(0) 23882 } 23883 23884 // Produces a summary of any statistics recorded by the given statistics manager. 23885 func ExperimentalStatsAggregatorSummary(scope *Scope, iterator tf.Output) (summary tf.Output) { 23886 if scope.Err() != nil { 23887 return 23888 } 23889 opspec := tf.OpSpec{ 23890 Type: "ExperimentalStatsAggregatorSummary", 23891 Input: []tf.Input{ 23892 iterator, 23893 }, 23894 } 23895 op := scope.AddOperation(opspec) 23896 return op.Output(0) 23897 } 23898 23899 // Makes a new iterator from the given `dataset` and stores it in `iterator`. 23900 // 23901 // This operation may be executed multiple times. Each execution will reset the 23902 // iterator in `iterator` to the first element of `dataset`. 23903 // 23904 // Returns the created operation. 23905 func MakeIterator(scope *Scope, dataset tf.Output, iterator tf.Output) (o *tf.Operation) { 23906 if scope.Err() != nil { 23907 return 23908 } 23909 opspec := tf.OpSpec{ 23910 Type: "MakeIterator", 23911 Input: []tf.Input{ 23912 dataset, iterator, 23913 }, 23914 } 23915 return scope.AddOperation(opspec) 23916 } 23917 23918 // Component-wise divides a SparseTensor by a dense Tensor. 23919 // 23920 // *Limitation*: this Op only broadcasts the dense side to the sparse side, but not 23921 // the other direction. 23922 // 23923 // Arguments: 23924 // sp_indices: 2-D. `N x R` matrix with the indices of non-empty values in a 23925 // SparseTensor, possibly not in canonical ordering. 23926 // sp_values: 1-D. `N` non-empty values corresponding to `sp_indices`. 23927 // sp_shape: 1-D. Shape of the input SparseTensor. 23928 // dense: `R`-D. The dense Tensor operand. 23929 // 23930 // Returns 1-D. The `N` values that are operated on. 23931 func SparseDenseCwiseDiv(scope *Scope, sp_indices tf.Output, sp_values tf.Output, sp_shape tf.Output, dense tf.Output) (output tf.Output) { 23932 if scope.Err() != nil { 23933 return 23934 } 23935 opspec := tf.OpSpec{ 23936 Type: "SparseDenseCwiseDiv", 23937 Input: []tf.Input{ 23938 sp_indices, sp_values, sp_shape, dense, 23939 }, 23940 } 23941 op := scope.AddOperation(opspec) 23942 return op.Output(0) 23943 } 23944 23945 // Creates a dataset that batches and pads `batch_size` elements from the input. 23946 // 23947 // Arguments: 23948 // 23949 // batch_size: A scalar representing the number of elements to accumulate in a 23950 // batch. 23951 // padded_shapes: A list of int64 tensors representing the desired padded shapes 23952 // of the corresponding output components. These shapes may be partially 23953 // specified, using `-1` to indicate that a particular dimension should be 23954 // padded to the maximum size of all batch elements. 23955 // padding_values: A list of scalars containing the padding value to use for 23956 // each of the outputs. 23957 // 23958 func PaddedBatchDataset(scope *Scope, input_dataset tf.Output, batch_size tf.Output, padded_shapes []tf.Output, padding_values []tf.Output, output_shapes []tf.Shape) (handle tf.Output) { 23959 if scope.Err() != nil { 23960 return 23961 } 23962 attrs := map[string]interface{}{"output_shapes": output_shapes} 23963 opspec := tf.OpSpec{ 23964 Type: "PaddedBatchDataset", 23965 Input: []tf.Input{ 23966 input_dataset, batch_size, tf.OutputList(padded_shapes), tf.OutputList(padding_values), 23967 }, 23968 Attrs: attrs, 23969 } 23970 op := scope.AddOperation(opspec) 23971 return op.Output(0) 23972 } 23973 23974 // ResourceApplyMomentumAttr is an optional argument to ResourceApplyMomentum. 23975 type ResourceApplyMomentumAttr func(optionalAttr) 23976 23977 // ResourceApplyMomentumUseLocking sets the optional use_locking attribute to value. 23978 // 23979 // value: If `True`, updating of the var and accum tensors will be protected 23980 // by a lock; otherwise the behavior is undefined, but may exhibit less 23981 // contention. 23982 // If not specified, defaults to false 23983 func ResourceApplyMomentumUseLocking(value bool) ResourceApplyMomentumAttr { 23984 return func(m optionalAttr) { 23985 m["use_locking"] = value 23986 } 23987 } 23988 23989 // ResourceApplyMomentumUseNesterov sets the optional use_nesterov attribute to value. 23990 // 23991 // value: If `True`, the tensor passed to compute grad will be 23992 // var - lr * momentum * accum, so in the end, the var you get is actually 23993 // var - lr * momentum * accum. 23994 // If not specified, defaults to false 23995 func ResourceApplyMomentumUseNesterov(value bool) ResourceApplyMomentumAttr { 23996 return func(m optionalAttr) { 23997 m["use_nesterov"] = value 23998 } 23999 } 24000 24001 // Update '*var' according to the momentum scheme. Set use_nesterov = True if you 24002 // 24003 // want to use Nesterov momentum. 24004 // 24005 // accum = accum * momentum + grad 24006 // var -= lr * accum 24007 // 24008 // Arguments: 24009 // var_: Should be from a Variable(). 24010 // accum: Should be from a Variable(). 24011 // lr: Scaling factor. Must be a scalar. 24012 // grad: The gradient. 24013 // momentum: Momentum. Must be a scalar. 24014 // 24015 // Returns the created operation. 24016 func ResourceApplyMomentum(scope *Scope, var_ tf.Output, accum tf.Output, lr tf.Output, grad tf.Output, momentum tf.Output, optional ...ResourceApplyMomentumAttr) (o *tf.Operation) { 24017 if scope.Err() != nil { 24018 return 24019 } 24020 attrs := map[string]interface{}{} 24021 for _, a := range optional { 24022 a(attrs) 24023 } 24024 opspec := tf.OpSpec{ 24025 Type: "ResourceApplyMomentum", 24026 Input: []tf.Input{ 24027 var_, accum, lr, grad, momentum, 24028 }, 24029 Attrs: attrs, 24030 } 24031 return scope.AddOperation(opspec) 24032 } 24033 24034 // MaxPoolGradGradAttr is an optional argument to MaxPoolGradGrad. 24035 type MaxPoolGradGradAttr func(optionalAttr) 24036 24037 // MaxPoolGradGradDataFormat sets the optional data_format attribute to value. 24038 // 24039 // value: Specify the data format of the input and output data. With the 24040 // default format "NHWC", the data is stored in the order of: 24041 // [batch, in_height, in_width, in_channels]. 24042 // Alternatively, the format could be "NCHW", the data storage order of: 24043 // [batch, in_channels, in_height, in_width]. 24044 // If not specified, defaults to "NHWC" 24045 func MaxPoolGradGradDataFormat(value string) MaxPoolGradGradAttr { 24046 return func(m optionalAttr) { 24047 m["data_format"] = value 24048 } 24049 } 24050 24051 // Computes second-order gradients of the maxpooling function. 24052 // 24053 // Arguments: 24054 // orig_input: The original input tensor. 24055 // orig_output: The original output tensor. 24056 // grad: 4-D. Gradients of gradients w.r.t. the input of `max_pool`. 24057 // ksize: The size of the window for each dimension of the input tensor. 24058 // strides: The stride of the sliding window for each dimension of the 24059 // input tensor. 24060 // padding: The type of padding algorithm to use. 24061 // 24062 // Returns Gradients of gradients w.r.t. the input to `max_pool`. 24063 func MaxPoolGradGrad(scope *Scope, orig_input tf.Output, orig_output tf.Output, grad tf.Output, ksize []int64, strides []int64, padding string, optional ...MaxPoolGradGradAttr) (output tf.Output) { 24064 if scope.Err() != nil { 24065 return 24066 } 24067 attrs := map[string]interface{}{"ksize": ksize, "strides": strides, "padding": padding} 24068 for _, a := range optional { 24069 a(attrs) 24070 } 24071 opspec := tf.OpSpec{ 24072 Type: "MaxPoolGradGrad", 24073 Input: []tf.Input{ 24074 orig_input, orig_output, grad, 24075 }, 24076 Attrs: attrs, 24077 } 24078 op := scope.AddOperation(opspec) 24079 return op.Output(0) 24080 } 24081 24082 // Returns the last element of the input list as well as a list with all but that element. 24083 // 24084 // Fails if the list is empty. 24085 // 24086 // input_handle: the input list 24087 // tensor: the withdrawn last element of the list 24088 // element_dtype: the type of elements in the list 24089 // element_shape: the shape of the output tensor 24090 func TensorListPopBack(scope *Scope, input_handle tf.Output, element_shape tf.Output, element_dtype tf.DataType) (output_handle tf.Output, tensor tf.Output) { 24091 if scope.Err() != nil { 24092 return 24093 } 24094 attrs := map[string]interface{}{"element_dtype": element_dtype} 24095 opspec := tf.OpSpec{ 24096 Type: "TensorListPopBack", 24097 Input: []tf.Input{ 24098 input_handle, element_shape, 24099 }, 24100 Attrs: attrs, 24101 } 24102 op := scope.AddOperation(opspec) 24103 return op.Output(0), op.Output(1) 24104 } 24105 24106 // Determine the script codes of a given tensor of Unicode integer code points. 24107 // 24108 // This operation converts Unicode code points to script codes corresponding to 24109 // each code point. Script codes correspond to International Components for 24110 // Unicode (ICU) UScriptCode values. See http://icu-project.org/apiref/icu4c/uscript_8h.html. 24111 // Returns -1 (USCRIPT_INVALID_CODE) for invalid codepoints. Output shape will 24112 // match input shape. 24113 // 24114 // Arguments: 24115 // input: A Tensor of int32 Unicode code points. 24116 // 24117 // Returns A Tensor of int32 script codes corresponding to each input code point. 24118 func UnicodeScript(scope *Scope, input tf.Output) (output tf.Output) { 24119 if scope.Err() != nil { 24120 return 24121 } 24122 opspec := tf.OpSpec{ 24123 Type: "UnicodeScript", 24124 Input: []tf.Input{ 24125 input, 24126 }, 24127 } 24128 op := scope.AddOperation(opspec) 24129 return op.Output(0) 24130 } 24131 24132 // Creates a sequence of numbers. 24133 // 24134 // This operation creates a sequence of numbers that begins at `start` and 24135 // extends by increments of `delta` up to but not including `limit`. 24136 // 24137 // For example: 24138 // 24139 // ``` 24140 // # 'start' is 3 24141 // # 'limit' is 18 24142 // # 'delta' is 3 24143 // tf.range(start, limit, delta) ==> [3, 6, 9, 12, 15] 24144 // ``` 24145 // 24146 // Arguments: 24147 // start: 0-D (scalar). First entry in the sequence. 24148 // limit: 0-D (scalar). Upper limit of sequence, exclusive. 24149 // delta: 0-D (scalar). Optional. Default is 1. Number that increments `start`. 24150 // 24151 // Returns 1-D. 24152 func Range(scope *Scope, start tf.Output, limit tf.Output, delta tf.Output) (output tf.Output) { 24153 if scope.Err() != nil { 24154 return 24155 } 24156 opspec := tf.OpSpec{ 24157 Type: "Range", 24158 Input: []tf.Input{ 24159 start, limit, delta, 24160 }, 24161 } 24162 op := scope.AddOperation(opspec) 24163 return op.Output(0) 24164 } 24165 24166 // MaxPoolGradGradWithArgmaxAttr is an optional argument to MaxPoolGradGradWithArgmax. 24167 type MaxPoolGradGradWithArgmaxAttr func(optionalAttr) 24168 24169 // MaxPoolGradGradWithArgmaxIncludeBatchInIndex sets the optional include_batch_in_index attribute to value. 24170 // 24171 // value: Whether to include batch dimension in flattened index of `argmax`. 24172 // If not specified, defaults to false 24173 func MaxPoolGradGradWithArgmaxIncludeBatchInIndex(value bool) MaxPoolGradGradWithArgmaxAttr { 24174 return func(m optionalAttr) { 24175 m["include_batch_in_index"] = value 24176 } 24177 } 24178 24179 // Computes second-order gradients of the maxpooling function. 24180 // 24181 // Arguments: 24182 // input: The original input. 24183 // grad: 4-D with shape `[batch, height, width, channels]`. Gradients w.r.t. the 24184 // input of `max_pool`. 24185 // argmax: The indices of the maximum values chosen for each output of `max_pool`. 24186 // ksize: The size of the window for each dimension of the input tensor. 24187 // strides: The stride of the sliding window for each dimension of the 24188 // input tensor. 24189 // padding: The type of padding algorithm to use. 24190 // 24191 // Returns Gradients of gradients w.r.t. the input of `max_pool`. 24192 func MaxPoolGradGradWithArgmax(scope *Scope, input tf.Output, grad tf.Output, argmax tf.Output, ksize []int64, strides []int64, padding string, optional ...MaxPoolGradGradWithArgmaxAttr) (output tf.Output) { 24193 if scope.Err() != nil { 24194 return 24195 } 24196 attrs := map[string]interface{}{"ksize": ksize, "strides": strides, "padding": padding} 24197 for _, a := range optional { 24198 a(attrs) 24199 } 24200 opspec := tf.OpSpec{ 24201 Type: "MaxPoolGradGradWithArgmax", 24202 Input: []tf.Input{ 24203 input, grad, argmax, 24204 }, 24205 Attrs: attrs, 24206 } 24207 op := scope.AddOperation(opspec) 24208 return op.Output(0) 24209 } 24210 24211 // Return a slice from 'input'. 24212 // 24213 // The output tensor is a tensor with dimensions described by 'size' 24214 // whose values are extracted from 'input' starting at the offsets in 24215 // 'begin'. 24216 // 24217 // *Requirements*: 24218 // 0 <= begin[i] <= begin[i] + size[i] <= Di for i in [0, n) 24219 // 24220 // Arguments: 24221 // 24222 // begin: begin[i] specifies the offset into the 'i'th dimension of 24223 // 'input' to slice from. 24224 // size: size[i] specifies the number of elements of the 'i'th dimension 24225 // of 'input' to slice. If size[i] is -1, all remaining elements in dimension 24226 // i are included in the slice (i.e. this is equivalent to setting 24227 // size[i] = input.dim_size(i) - begin[i]). 24228 func Slice(scope *Scope, input tf.Output, begin tf.Output, size tf.Output) (output tf.Output) { 24229 if scope.Err() != nil { 24230 return 24231 } 24232 opspec := tf.OpSpec{ 24233 Type: "Slice", 24234 Input: []tf.Input{ 24235 input, begin, size, 24236 }, 24237 } 24238 op := scope.AddOperation(opspec) 24239 return op.Output(0) 24240 } 24241 24242 // Compute the Hurwitz zeta function \\(\zeta(x, q)\\). 24243 // 24244 // The Hurwitz zeta function is defined as: 24245 // 24246 // 24247 // \\(\zeta(x, q) = \sum_{n=0}^{\infty} (q + n)^{-x}\\) 24248 func Zeta(scope *Scope, x tf.Output, q tf.Output) (z tf.Output) { 24249 if scope.Err() != nil { 24250 return 24251 } 24252 opspec := tf.OpSpec{ 24253 Type: "Zeta", 24254 Input: []tf.Input{ 24255 x, q, 24256 }, 24257 } 24258 op := scope.AddOperation(opspec) 24259 return op.Output(0) 24260 } 24261 24262 // Returns the cardinality of `input_dataset`. 24263 // 24264 // Returns the cardinality of `input_dataset`. 24265 // 24266 // Arguments: 24267 // input_dataset: A variant tensor representing the dataset to return cardinality for. 24268 // 24269 // Returns The cardinality of `input_dataset`. Named constants are used to represent 24270 // infinite and unknown cardinality. 24271 func ExperimentalDatasetCardinality(scope *Scope, input_dataset tf.Output) (cardinality tf.Output) { 24272 if scope.Err() != nil { 24273 return 24274 } 24275 opspec := tf.OpSpec{ 24276 Type: "ExperimentalDatasetCardinality", 24277 Input: []tf.Input{ 24278 input_dataset, 24279 }, 24280 } 24281 op := scope.AddOperation(opspec) 24282 return op.Output(0) 24283 } 24284 24285 // TakeManySparseFromTensorsMapAttr is an optional argument to TakeManySparseFromTensorsMap. 24286 type TakeManySparseFromTensorsMapAttr func(optionalAttr) 24287 24288 // TakeManySparseFromTensorsMapContainer sets the optional container attribute to value. 24289 // 24290 // value: The container name for the `SparseTensorsMap` read by this op. 24291 // If not specified, defaults to "" 24292 func TakeManySparseFromTensorsMapContainer(value string) TakeManySparseFromTensorsMapAttr { 24293 return func(m optionalAttr) { 24294 m["container"] = value 24295 } 24296 } 24297 24298 // TakeManySparseFromTensorsMapSharedName sets the optional shared_name attribute to value. 24299 // 24300 // value: The shared name for the `SparseTensorsMap` read by this op. 24301 // It should not be blank; rather the `shared_name` or unique Operation name 24302 // of the Op that created the original `SparseTensorsMap` should be used. 24303 // If not specified, defaults to "" 24304 func TakeManySparseFromTensorsMapSharedName(value string) TakeManySparseFromTensorsMapAttr { 24305 return func(m optionalAttr) { 24306 m["shared_name"] = value 24307 } 24308 } 24309 24310 // Read `SparseTensors` from a `SparseTensorsMap` and concatenate them. 24311 // 24312 // The input `sparse_handles` must be an `int64` matrix of shape `[N, 1]` where 24313 // `N` is the minibatch size and the rows correspond to the output handles of 24314 // `AddSparseToTensorsMap` or `AddManySparseToTensorsMap`. The ranks of the 24315 // original `SparseTensor` objects that went into the given input ops must all 24316 // match. When the final `SparseTensor` is created, it has rank one 24317 // higher than the ranks of the incoming `SparseTensor` objects 24318 // (they have been concatenated along a new row dimension on the left). 24319 // 24320 // The output `SparseTensor` object's shape values for all dimensions but the 24321 // first are the max across the input `SparseTensor` objects' shape values 24322 // for the corresponding dimensions. Its first shape value is `N`, the minibatch 24323 // size. 24324 // 24325 // The input `SparseTensor` objects' indices are assumed ordered in 24326 // standard lexicographic order. If this is not the case, after this 24327 // step run `SparseReorder` to restore index ordering. 24328 // 24329 // For example, if the handles represent an input, which is a `[2, 3]` matrix 24330 // representing two original `SparseTensor` objects: 24331 // 24332 // ``` 24333 // index = [ 0] 24334 // [10] 24335 // [20] 24336 // values = [1, 2, 3] 24337 // shape = [50] 24338 // ``` 24339 // 24340 // and 24341 // 24342 // ``` 24343 // index = [ 2] 24344 // [10] 24345 // values = [4, 5] 24346 // shape = [30] 24347 // ``` 24348 // 24349 // then the final `SparseTensor` will be: 24350 // 24351 // ``` 24352 // index = [0 0] 24353 // [0 10] 24354 // [0 20] 24355 // [1 2] 24356 // [1 10] 24357 // values = [1, 2, 3, 4, 5] 24358 // shape = [2 50] 24359 // ``` 24360 // 24361 // Arguments: 24362 // sparse_handles: 1-D, The `N` serialized `SparseTensor` objects. 24363 // Shape: `[N]`. 24364 // dtype: The `dtype` of the `SparseTensor` objects stored in the 24365 // `SparseTensorsMap`. 24366 // 24367 // Returns 2-D. The `indices` of the minibatch `SparseTensor`.1-D. The `values` of the minibatch `SparseTensor`.1-D. The `shape` of the minibatch `SparseTensor`. 24368 func TakeManySparseFromTensorsMap(scope *Scope, sparse_handles tf.Output, dtype tf.DataType, optional ...TakeManySparseFromTensorsMapAttr) (sparse_indices tf.Output, sparse_values tf.Output, sparse_shape tf.Output) { 24369 if scope.Err() != nil { 24370 return 24371 } 24372 attrs := map[string]interface{}{"dtype": dtype} 24373 for _, a := range optional { 24374 a(attrs) 24375 } 24376 opspec := tf.OpSpec{ 24377 Type: "TakeManySparseFromTensorsMap", 24378 Input: []tf.Input{ 24379 sparse_handles, 24380 }, 24381 Attrs: attrs, 24382 } 24383 op := scope.AddOperation(opspec) 24384 return op.Output(0), op.Output(1), op.Output(2) 24385 } 24386 24387 // NonDeterministicIntsAttr is an optional argument to NonDeterministicInts. 24388 type NonDeterministicIntsAttr func(optionalAttr) 24389 24390 // NonDeterministicIntsDtype sets the optional dtype attribute to value. 24391 // 24392 // value: The type of the output. 24393 // If not specified, defaults to DT_INT64 24394 func NonDeterministicIntsDtype(value tf.DataType) NonDeterministicIntsAttr { 24395 return func(m optionalAttr) { 24396 m["dtype"] = value 24397 } 24398 } 24399 24400 // Non-deterministically generates some integers. 24401 // 24402 // This op may use some OS-provided source of non-determinism (e.g. an RNG), so each execution will give different results. 24403 // 24404 // Arguments: 24405 // shape: The shape of the output tensor. 24406 // 24407 // Returns Non-deterministic integer values with specified shape. 24408 func NonDeterministicInts(scope *Scope, shape tf.Output, optional ...NonDeterministicIntsAttr) (output tf.Output) { 24409 if scope.Err() != nil { 24410 return 24411 } 24412 attrs := map[string]interface{}{} 24413 for _, a := range optional { 24414 a(attrs) 24415 } 24416 opspec := tf.OpSpec{ 24417 Type: "NonDeterministicInts", 24418 Input: []tf.Input{ 24419 shape, 24420 }, 24421 Attrs: attrs, 24422 } 24423 op := scope.AddOperation(opspec) 24424 return op.Output(0) 24425 } 24426 24427 // ResourceSparseApplyKerasMomentumAttr is an optional argument to ResourceSparseApplyKerasMomentum. 24428 type ResourceSparseApplyKerasMomentumAttr func(optionalAttr) 24429 24430 // ResourceSparseApplyKerasMomentumUseLocking sets the optional use_locking attribute to value. 24431 // 24432 // value: If `True`, updating of the var and accum tensors will be protected 24433 // by a lock; otherwise the behavior is undefined, but may exhibit less 24434 // contention. 24435 // If not specified, defaults to false 24436 func ResourceSparseApplyKerasMomentumUseLocking(value bool) ResourceSparseApplyKerasMomentumAttr { 24437 return func(m optionalAttr) { 24438 m["use_locking"] = value 24439 } 24440 } 24441 24442 // ResourceSparseApplyKerasMomentumUseNesterov sets the optional use_nesterov attribute to value. 24443 // 24444 // value: If `True`, the tensor passed to compute grad will be 24445 // var + momentum * accum, so in the end, the var you get is actually 24446 // var + momentum * accum. 24447 // If not specified, defaults to false 24448 func ResourceSparseApplyKerasMomentumUseNesterov(value bool) ResourceSparseApplyKerasMomentumAttr { 24449 return func(m optionalAttr) { 24450 m["use_nesterov"] = value 24451 } 24452 } 24453 24454 // Update relevant entries in '*var' and '*accum' according to the momentum scheme. 24455 // 24456 // Set use_nesterov = True if you want to use Nesterov momentum. 24457 // 24458 // That is for rows we have grad for, we update var and accum as follows: 24459 // 24460 // accum = accum * momentum - lr * grad 24461 // var += accum 24462 // 24463 // Arguments: 24464 // var_: Should be from a Variable(). 24465 // accum: Should be from a Variable(). 24466 // lr: Learning rate. Must be a scalar. 24467 // grad: The gradient. 24468 // indices: A vector of indices into the first dimension of var and accum. 24469 // momentum: Momentum. Must be a scalar. 24470 // 24471 // Returns the created operation. 24472 func ResourceSparseApplyKerasMomentum(scope *Scope, var_ tf.Output, accum tf.Output, lr tf.Output, grad tf.Output, indices tf.Output, momentum tf.Output, optional ...ResourceSparseApplyKerasMomentumAttr) (o *tf.Operation) { 24473 if scope.Err() != nil { 24474 return 24475 } 24476 attrs := map[string]interface{}{} 24477 for _, a := range optional { 24478 a(attrs) 24479 } 24480 opspec := tf.OpSpec{ 24481 Type: "ResourceSparseApplyKerasMomentum", 24482 Input: []tf.Input{ 24483 var_, accum, lr, grad, indices, momentum, 24484 }, 24485 Attrs: attrs, 24486 } 24487 return scope.AddOperation(opspec) 24488 } 24489 24490 // ResourceApplyAdamWithAmsgradAttr is an optional argument to ResourceApplyAdamWithAmsgrad. 24491 type ResourceApplyAdamWithAmsgradAttr func(optionalAttr) 24492 24493 // ResourceApplyAdamWithAmsgradUseLocking sets the optional use_locking attribute to value. 24494 // 24495 // value: If `True`, updating of the var, m, and v tensors will be protected 24496 // by a lock; otherwise the behavior is undefined, but may exhibit less 24497 // contention. 24498 // If not specified, defaults to false 24499 func ResourceApplyAdamWithAmsgradUseLocking(value bool) ResourceApplyAdamWithAmsgradAttr { 24500 return func(m optionalAttr) { 24501 m["use_locking"] = value 24502 } 24503 } 24504 24505 // Update '*var' according to the Adam algorithm. 24506 // 24507 // $$lr_t := \text{learning\_rate} * \sqrt{1 - beta_2^t} / (1 - beta_1^t)$$ 24508 // $$m_t := beta_1 * m_{t-1} + (1 - beta_1) * g$$ 24509 // $$v_t := beta_2 * v_{t-1} + (1 - beta_2) * g * g$$ 24510 // $$vhat_t := max{vhat_{t-1}, v_t}$$ 24511 // $$variable := variable - lr_t * m_t / (\sqrt{vhat_t} + \epsilon)$$ 24512 // 24513 // Arguments: 24514 // var_: Should be from a Variable(). 24515 // m: Should be from a Variable(). 24516 // v: Should be from a Variable(). 24517 // vhat: Should be from a Variable(). 24518 // beta1_power: Must be a scalar. 24519 // beta2_power: Must be a scalar. 24520 // lr: Scaling factor. Must be a scalar. 24521 // beta1: Momentum factor. Must be a scalar. 24522 // beta2: Momentum factor. Must be a scalar. 24523 // epsilon: Ridge term. Must be a scalar. 24524 // grad: The gradient. 24525 // 24526 // Returns the created operation. 24527 func ResourceApplyAdamWithAmsgrad(scope *Scope, var_ tf.Output, m tf.Output, v tf.Output, vhat tf.Output, beta1_power tf.Output, beta2_power tf.Output, lr tf.Output, beta1 tf.Output, beta2 tf.Output, epsilon tf.Output, grad tf.Output, optional ...ResourceApplyAdamWithAmsgradAttr) (o *tf.Operation) { 24528 if scope.Err() != nil { 24529 return 24530 } 24531 attrs := map[string]interface{}{} 24532 for _, a := range optional { 24533 a(attrs) 24534 } 24535 opspec := tf.OpSpec{ 24536 Type: "ResourceApplyAdamWithAmsgrad", 24537 Input: []tf.Input{ 24538 var_, m, v, vhat, beta1_power, beta2_power, lr, beta1, beta2, epsilon, grad, 24539 }, 24540 Attrs: attrs, 24541 } 24542 return scope.AddOperation(opspec) 24543 } 24544 24545 // MapUnstageNoKeyAttr is an optional argument to MapUnstageNoKey. 24546 type MapUnstageNoKeyAttr func(optionalAttr) 24547 24548 // MapUnstageNoKeyCapacity sets the optional capacity attribute to value. 24549 // If not specified, defaults to 0 24550 // 24551 // REQUIRES: value >= 0 24552 func MapUnstageNoKeyCapacity(value int64) MapUnstageNoKeyAttr { 24553 return func(m optionalAttr) { 24554 m["capacity"] = value 24555 } 24556 } 24557 24558 // MapUnstageNoKeyMemoryLimit sets the optional memory_limit attribute to value. 24559 // If not specified, defaults to 0 24560 // 24561 // REQUIRES: value >= 0 24562 func MapUnstageNoKeyMemoryLimit(value int64) MapUnstageNoKeyAttr { 24563 return func(m optionalAttr) { 24564 m["memory_limit"] = value 24565 } 24566 } 24567 24568 // MapUnstageNoKeyContainer sets the optional container attribute to value. 24569 // If not specified, defaults to "" 24570 func MapUnstageNoKeyContainer(value string) MapUnstageNoKeyAttr { 24571 return func(m optionalAttr) { 24572 m["container"] = value 24573 } 24574 } 24575 24576 // MapUnstageNoKeySharedName sets the optional shared_name attribute to value. 24577 // If not specified, defaults to "" 24578 func MapUnstageNoKeySharedName(value string) MapUnstageNoKeyAttr { 24579 return func(m optionalAttr) { 24580 m["shared_name"] = value 24581 } 24582 } 24583 24584 // Op removes and returns a random (key, value) 24585 // 24586 // from the underlying container. If the underlying container 24587 // does not contain elements, the op will block until it does. 24588 func MapUnstageNoKey(scope *Scope, indices tf.Output, dtypes []tf.DataType, optional ...MapUnstageNoKeyAttr) (key tf.Output, values []tf.Output) { 24589 if scope.Err() != nil { 24590 return 24591 } 24592 attrs := map[string]interface{}{"dtypes": dtypes} 24593 for _, a := range optional { 24594 a(attrs) 24595 } 24596 opspec := tf.OpSpec{ 24597 Type: "MapUnstageNoKey", 24598 Input: []tf.Input{ 24599 indices, 24600 }, 24601 Attrs: attrs, 24602 } 24603 op := scope.AddOperation(opspec) 24604 if scope.Err() != nil { 24605 return 24606 } 24607 var idx int 24608 var err error 24609 key = op.Output(idx) 24610 if values, idx, err = makeOutputList(op, idx, "values"); err != nil { 24611 scope.UpdateErr("MapUnstageNoKey", err) 24612 return 24613 } 24614 return key, values 24615 } 24616 24617 // HashTableV2Attr is an optional argument to HashTableV2. 24618 type HashTableV2Attr func(optionalAttr) 24619 24620 // HashTableV2Container sets the optional container attribute to value. 24621 // 24622 // value: If non-empty, this table is placed in the given container. 24623 // Otherwise, a default container is used. 24624 // If not specified, defaults to "" 24625 func HashTableV2Container(value string) HashTableV2Attr { 24626 return func(m optionalAttr) { 24627 m["container"] = value 24628 } 24629 } 24630 24631 // HashTableV2SharedName sets the optional shared_name attribute to value. 24632 // 24633 // value: If non-empty, this table is shared under the given name across 24634 // multiple sessions. 24635 // If not specified, defaults to "" 24636 func HashTableV2SharedName(value string) HashTableV2Attr { 24637 return func(m optionalAttr) { 24638 m["shared_name"] = value 24639 } 24640 } 24641 24642 // HashTableV2UseNodeNameSharing sets the optional use_node_name_sharing attribute to value. 24643 // 24644 // value: If true and shared_name is empty, the table is shared 24645 // using the node name. 24646 // If not specified, defaults to false 24647 func HashTableV2UseNodeNameSharing(value bool) HashTableV2Attr { 24648 return func(m optionalAttr) { 24649 m["use_node_name_sharing"] = value 24650 } 24651 } 24652 24653 // Creates a non-initialized hash table. 24654 // 24655 // This op creates a hash table, specifying the type of its keys and values. 24656 // Before using the table you will have to initialize it. After initialization the 24657 // table will be immutable. 24658 // 24659 // Arguments: 24660 // key_dtype: Type of the table keys. 24661 // value_dtype: Type of the table values. 24662 // 24663 // Returns Handle to a table. 24664 func HashTableV2(scope *Scope, key_dtype tf.DataType, value_dtype tf.DataType, optional ...HashTableV2Attr) (table_handle tf.Output) { 24665 if scope.Err() != nil { 24666 return 24667 } 24668 attrs := map[string]interface{}{"key_dtype": key_dtype, "value_dtype": value_dtype} 24669 for _, a := range optional { 24670 a(attrs) 24671 } 24672 opspec := tf.OpSpec{ 24673 Type: "HashTableV2", 24674 24675 Attrs: attrs, 24676 } 24677 op := scope.AddOperation(opspec) 24678 return op.Output(0) 24679 } 24680 24681 // RetrieveTPUEmbeddingMomentumParametersGradAccumDebugAttr is an optional argument to RetrieveTPUEmbeddingMomentumParametersGradAccumDebug. 24682 type RetrieveTPUEmbeddingMomentumParametersGradAccumDebugAttr func(optionalAttr) 24683 24684 // RetrieveTPUEmbeddingMomentumParametersGradAccumDebugTableId sets the optional table_id attribute to value. 24685 // If not specified, defaults to -1 24686 // 24687 // REQUIRES: value >= -1 24688 func RetrieveTPUEmbeddingMomentumParametersGradAccumDebugTableId(value int64) RetrieveTPUEmbeddingMomentumParametersGradAccumDebugAttr { 24689 return func(m optionalAttr) { 24690 m["table_id"] = value 24691 } 24692 } 24693 24694 // RetrieveTPUEmbeddingMomentumParametersGradAccumDebugTableName sets the optional table_name attribute to value. 24695 // If not specified, defaults to "" 24696 func RetrieveTPUEmbeddingMomentumParametersGradAccumDebugTableName(value string) RetrieveTPUEmbeddingMomentumParametersGradAccumDebugAttr { 24697 return func(m optionalAttr) { 24698 m["table_name"] = value 24699 } 24700 } 24701 24702 // Retrieve Momentum embedding parameters with debug support. 24703 // 24704 // An op that retrieves optimization parameters from embedding to host 24705 // memory. Must be preceded by a ConfigureTPUEmbeddingHost op that sets up 24706 // the correct embedding table configuration. For example, this op is 24707 // used to retrieve updated parameters before saving a checkpoint. 24708 // 24709 // Returns Parameter parameters updated by the Momentum optimization algorithm.Parameter momenta updated by the Momentum optimization algorithm.Parameter gradient_accumulators updated by the Momentum optimization algorithm. 24710 func RetrieveTPUEmbeddingMomentumParametersGradAccumDebug(scope *Scope, num_shards int64, shard_id int64, optional ...RetrieveTPUEmbeddingMomentumParametersGradAccumDebugAttr) (parameters tf.Output, momenta tf.Output, gradient_accumulators tf.Output) { 24711 if scope.Err() != nil { 24712 return 24713 } 24714 attrs := map[string]interface{}{"num_shards": num_shards, "shard_id": shard_id} 24715 for _, a := range optional { 24716 a(attrs) 24717 } 24718 opspec := tf.OpSpec{ 24719 Type: "RetrieveTPUEmbeddingMomentumParametersGradAccumDebug", 24720 24721 Attrs: attrs, 24722 } 24723 op := scope.AddOperation(opspec) 24724 return op.Output(0), op.Output(1), op.Output(2) 24725 } 24726 24727 // Enqueue a Tensor on the computation outfeed. 24728 // 24729 // Arguments: 24730 // input: A tensor that will be inserted into the outfeed queue. 24731 // 24732 // Returns the created operation. 24733 func OutfeedEnqueue(scope *Scope, input tf.Output) (o *tf.Operation) { 24734 if scope.Err() != nil { 24735 return 24736 } 24737 opspec := tf.OpSpec{ 24738 Type: "OutfeedEnqueue", 24739 Input: []tf.Input{ 24740 input, 24741 }, 24742 } 24743 return scope.AddOperation(opspec) 24744 } 24745 24746 // Outputs a `Summary` protocol buffer with a histogram. 24747 // 24748 // The generated 24749 // [`Summary`](https://www.tensorflow.org/code/tensorflow/core/framework/summary.proto) 24750 // has one summary value containing a histogram for `values`. 24751 // 24752 // This op reports an `InvalidArgument` error if any value is not finite. 24753 // 24754 // Arguments: 24755 // tag: Scalar. Tag to use for the `Summary.Value`. 24756 // values: Any shape. Values to use to build the histogram. 24757 // 24758 // Returns Scalar. Serialized `Summary` protocol buffer. 24759 func HistogramSummary(scope *Scope, tag tf.Output, values tf.Output) (summary tf.Output) { 24760 if scope.Err() != nil { 24761 return 24762 } 24763 opspec := tf.OpSpec{ 24764 Type: "HistogramSummary", 24765 Input: []tf.Input{ 24766 tag, values, 24767 }, 24768 } 24769 op := scope.AddOperation(opspec) 24770 return op.Output(0) 24771 } 24772 24773 // MutableDenseHashTableV2Attr is an optional argument to MutableDenseHashTableV2. 24774 type MutableDenseHashTableV2Attr func(optionalAttr) 24775 24776 // MutableDenseHashTableV2Container sets the optional container attribute to value. 24777 // 24778 // value: If non-empty, this table is placed in the given container. 24779 // Otherwise, a default container is used. 24780 // If not specified, defaults to "" 24781 func MutableDenseHashTableV2Container(value string) MutableDenseHashTableV2Attr { 24782 return func(m optionalAttr) { 24783 m["container"] = value 24784 } 24785 } 24786 24787 // MutableDenseHashTableV2SharedName sets the optional shared_name attribute to value. 24788 // 24789 // value: If non-empty, this table is shared under the given name across 24790 // multiple sessions. 24791 // If not specified, defaults to "" 24792 func MutableDenseHashTableV2SharedName(value string) MutableDenseHashTableV2Attr { 24793 return func(m optionalAttr) { 24794 m["shared_name"] = value 24795 } 24796 } 24797 24798 // MutableDenseHashTableV2UseNodeNameSharing sets the optional use_node_name_sharing attribute to value. 24799 // If not specified, defaults to false 24800 func MutableDenseHashTableV2UseNodeNameSharing(value bool) MutableDenseHashTableV2Attr { 24801 return func(m optionalAttr) { 24802 m["use_node_name_sharing"] = value 24803 } 24804 } 24805 24806 // MutableDenseHashTableV2ValueShape sets the optional value_shape attribute to value. 24807 // 24808 // value: The shape of each value. 24809 // If not specified, defaults to <> 24810 func MutableDenseHashTableV2ValueShape(value tf.Shape) MutableDenseHashTableV2Attr { 24811 return func(m optionalAttr) { 24812 m["value_shape"] = value 24813 } 24814 } 24815 24816 // MutableDenseHashTableV2InitialNumBuckets sets the optional initial_num_buckets attribute to value. 24817 // 24818 // value: The initial number of hash table buckets. Must be a power 24819 // to 2. 24820 // If not specified, defaults to 131072 24821 func MutableDenseHashTableV2InitialNumBuckets(value int64) MutableDenseHashTableV2Attr { 24822 return func(m optionalAttr) { 24823 m["initial_num_buckets"] = value 24824 } 24825 } 24826 24827 // MutableDenseHashTableV2MaxLoadFactor sets the optional max_load_factor attribute to value. 24828 // 24829 // value: The maximum ratio between number of entries and number of 24830 // buckets before growing the table. Must be between 0 and 1. 24831 // If not specified, defaults to 0.8 24832 func MutableDenseHashTableV2MaxLoadFactor(value float32) MutableDenseHashTableV2Attr { 24833 return func(m optionalAttr) { 24834 m["max_load_factor"] = value 24835 } 24836 } 24837 24838 // Creates an empty hash table that uses tensors as the backing store. 24839 // 24840 // It uses "open addressing" with quadratic reprobing to resolve 24841 // collisions. 24842 // 24843 // This op creates a mutable hash table, specifying the type of its keys and 24844 // values. Each value must be a scalar. Data can be inserted into the table using 24845 // the insert operations. It does not support the initialization operation. 24846 // 24847 // Arguments: 24848 // empty_key: The key used to represent empty key buckets internally. Must not 24849 // be used in insert or lookup operations. 24850 // 24851 // value_dtype: Type of the table values. 24852 // 24853 // Returns Handle to a table. 24854 func MutableDenseHashTableV2(scope *Scope, empty_key tf.Output, deleted_key tf.Output, value_dtype tf.DataType, optional ...MutableDenseHashTableV2Attr) (table_handle tf.Output) { 24855 if scope.Err() != nil { 24856 return 24857 } 24858 attrs := map[string]interface{}{"value_dtype": value_dtype} 24859 for _, a := range optional { 24860 a(attrs) 24861 } 24862 opspec := tf.OpSpec{ 24863 Type: "MutableDenseHashTableV2", 24864 Input: []tf.Input{ 24865 empty_key, deleted_key, 24866 }, 24867 Attrs: attrs, 24868 } 24869 op := scope.AddOperation(opspec) 24870 return op.Output(0) 24871 } 24872 24873 // Deprecated. Use TensorArraySplitV3 24874 // 24875 // DEPRECATED at GraphDef version 26: Use TensorArraySplitV3 24876 func TensorArraySplitV2(scope *Scope, handle tf.Output, value tf.Output, lengths tf.Output, flow_in tf.Output) (flow_out tf.Output) { 24877 if scope.Err() != nil { 24878 return 24879 } 24880 opspec := tf.OpSpec{ 24881 Type: "TensorArraySplitV2", 24882 Input: []tf.Input{ 24883 handle, value, lengths, flow_in, 24884 }, 24885 } 24886 op := scope.AddOperation(opspec) 24887 return op.Output(0) 24888 } 24889 24890 // Reshapes a SparseTensor to represent values in a new dense shape. 24891 // 24892 // This operation has the same semantics as reshape on the represented dense 24893 // tensor. The `input_indices` are recomputed based on the requested `new_shape`. 24894 // 24895 // If one component of `new_shape` is the special value -1, the size of that 24896 // dimension is computed so that the total dense size remains constant. At 24897 // most one component of `new_shape` can be -1. The number of dense elements 24898 // implied by `new_shape` must be the same as the number of dense elements 24899 // originally implied by `input_shape`. 24900 // 24901 // Reshaping does not affect the order of values in the SparseTensor. 24902 // 24903 // If the input tensor has rank `R_in` and `N` non-empty values, and `new_shape` 24904 // has length `R_out`, then `input_indices` has shape `[N, R_in]`, 24905 // `input_shape` has length `R_in`, `output_indices` has shape `[N, R_out]`, and 24906 // `output_shape` has length `R_out`. 24907 // 24908 // Arguments: 24909 // input_indices: 2-D. `N x R_in` matrix with the indices of non-empty values in a 24910 // SparseTensor. 24911 // input_shape: 1-D. `R_in` vector with the input SparseTensor's dense shape. 24912 // new_shape: 1-D. `R_out` vector with the requested new dense shape. 24913 // 24914 // Returns 2-D. `N x R_out` matrix with the updated indices of non-empty 24915 // values in the output SparseTensor.1-D. `R_out` vector with the full dense shape of the output 24916 // SparseTensor. This is the same as `new_shape` but with any -1 dimensions 24917 // filled in. 24918 func SparseReshape(scope *Scope, input_indices tf.Output, input_shape tf.Output, new_shape tf.Output) (output_indices tf.Output, output_shape tf.Output) { 24919 if scope.Err() != nil { 24920 return 24921 } 24922 opspec := tf.OpSpec{ 24923 Type: "SparseReshape", 24924 Input: []tf.Input{ 24925 input_indices, input_shape, new_shape, 24926 }, 24927 } 24928 op := scope.AddOperation(opspec) 24929 return op.Output(0), op.Output(1) 24930 } 24931 24932 // Computes the product along segments of a tensor. 24933 // 24934 // Read 24935 // [the section on segmentation](https://tensorflow.org/api_docs/python/tf/math#Segmentation) 24936 // for an explanation of segments. 24937 // 24938 // Computes a tensor such that 24939 // \\(output_i = \prod_j data_j\\) where the product is over `j` such 24940 // that `segment_ids[j] == i`. 24941 // 24942 // If the product is empty for a given segment ID `i`, `output[i] = 1`. 24943 // 24944 // <div style="width:70%; margin:auto; margin-bottom:10px; margin-top:20px;"> 24945 // <img style="width:100%" src="https://www.tensorflow.org/images/SegmentProd.png" alt> 24946 // </div> 24947 // 24948 // For example: 24949 // 24950 // ``` 24951 // c = tf.constant([[1,2,3,4], [4, 3, 2, 1], [5,6,7,8]]) 24952 // tf.segment_prod(c, tf.constant([0, 0, 1])) 24953 // # ==> [[4, 6, 6, 4], 24954 // # [5, 6, 7, 8]] 24955 // ``` 24956 // 24957 // 24958 // Arguments: 24959 // 24960 // segment_ids: A 1-D tensor whose size is equal to the size of `data`'s 24961 // first dimension. Values should be sorted and can be repeated. 24962 // 24963 // Returns Has same shape as data, except for dimension 0 which 24964 // has size `k`, the number of segments. 24965 func SegmentProd(scope *Scope, data tf.Output, segment_ids tf.Output) (output tf.Output) { 24966 if scope.Err() != nil { 24967 return 24968 } 24969 opspec := tf.OpSpec{ 24970 Type: "SegmentProd", 24971 Input: []tf.Input{ 24972 data, segment_ids, 24973 }, 24974 } 24975 op := scope.AddOperation(opspec) 24976 return op.Output(0) 24977 } 24978 24979 // RetrieveTPUEmbeddingADAMParametersGradAccumDebugAttr is an optional argument to RetrieveTPUEmbeddingADAMParametersGradAccumDebug. 24980 type RetrieveTPUEmbeddingADAMParametersGradAccumDebugAttr func(optionalAttr) 24981 24982 // RetrieveTPUEmbeddingADAMParametersGradAccumDebugTableId sets the optional table_id attribute to value. 24983 // If not specified, defaults to -1 24984 // 24985 // REQUIRES: value >= -1 24986 func RetrieveTPUEmbeddingADAMParametersGradAccumDebugTableId(value int64) RetrieveTPUEmbeddingADAMParametersGradAccumDebugAttr { 24987 return func(m optionalAttr) { 24988 m["table_id"] = value 24989 } 24990 } 24991 24992 // RetrieveTPUEmbeddingADAMParametersGradAccumDebugTableName sets the optional table_name attribute to value. 24993 // If not specified, defaults to "" 24994 func RetrieveTPUEmbeddingADAMParametersGradAccumDebugTableName(value string) RetrieveTPUEmbeddingADAMParametersGradAccumDebugAttr { 24995 return func(m optionalAttr) { 24996 m["table_name"] = value 24997 } 24998 } 24999 25000 // Retrieve ADAM embedding parameters with debug support. 25001 // 25002 // An op that retrieves optimization parameters from embedding to host 25003 // memory. Must be preceded by a ConfigureTPUEmbeddingHost op that sets up 25004 // the correct embedding table configuration. For example, this op is 25005 // used to retrieve updated parameters before saving a checkpoint. 25006 // 25007 // Returns Parameter parameters updated by the ADAM optimization algorithm.Parameter momenta updated by the ADAM optimization algorithm.Parameter velocities updated by the ADAM optimization algorithm.Parameter gradient_accumulators updated by the ADAM optimization algorithm. 25008 func RetrieveTPUEmbeddingADAMParametersGradAccumDebug(scope *Scope, num_shards int64, shard_id int64, optional ...RetrieveTPUEmbeddingADAMParametersGradAccumDebugAttr) (parameters tf.Output, momenta tf.Output, velocities tf.Output, gradient_accumulators tf.Output) { 25009 if scope.Err() != nil { 25010 return 25011 } 25012 attrs := map[string]interface{}{"num_shards": num_shards, "shard_id": shard_id} 25013 for _, a := range optional { 25014 a(attrs) 25015 } 25016 opspec := tf.OpSpec{ 25017 Type: "RetrieveTPUEmbeddingADAMParametersGradAccumDebug", 25018 25019 Attrs: attrs, 25020 } 25021 op := scope.AddOperation(opspec) 25022 return op.Output(0), op.Output(1), op.Output(2), op.Output(3) 25023 } 25024 25025 // CudnnRNNAttr is an optional argument to CudnnRNN. 25026 type CudnnRNNAttr func(optionalAttr) 25027 25028 // CudnnRNNRnnMode sets the optional rnn_mode attribute to value. 25029 // If not specified, defaults to "lstm" 25030 func CudnnRNNRnnMode(value string) CudnnRNNAttr { 25031 return func(m optionalAttr) { 25032 m["rnn_mode"] = value 25033 } 25034 } 25035 25036 // CudnnRNNInputMode sets the optional input_mode attribute to value. 25037 // If not specified, defaults to "linear_input" 25038 func CudnnRNNInputMode(value string) CudnnRNNAttr { 25039 return func(m optionalAttr) { 25040 m["input_mode"] = value 25041 } 25042 } 25043 25044 // CudnnRNNDirection sets the optional direction attribute to value. 25045 // If not specified, defaults to "unidirectional" 25046 func CudnnRNNDirection(value string) CudnnRNNAttr { 25047 return func(m optionalAttr) { 25048 m["direction"] = value 25049 } 25050 } 25051 25052 // CudnnRNNDropout sets the optional dropout attribute to value. 25053 // If not specified, defaults to 0 25054 func CudnnRNNDropout(value float32) CudnnRNNAttr { 25055 return func(m optionalAttr) { 25056 m["dropout"] = value 25057 } 25058 } 25059 25060 // CudnnRNNSeed sets the optional seed attribute to value. 25061 // If not specified, defaults to 0 25062 func CudnnRNNSeed(value int64) CudnnRNNAttr { 25063 return func(m optionalAttr) { 25064 m["seed"] = value 25065 } 25066 } 25067 25068 // CudnnRNNSeed2 sets the optional seed2 attribute to value. 25069 // If not specified, defaults to 0 25070 func CudnnRNNSeed2(value int64) CudnnRNNAttr { 25071 return func(m optionalAttr) { 25072 m["seed2"] = value 25073 } 25074 } 25075 25076 // CudnnRNNIsTraining sets the optional is_training attribute to value. 25077 // If not specified, defaults to true 25078 func CudnnRNNIsTraining(value bool) CudnnRNNAttr { 25079 return func(m optionalAttr) { 25080 m["is_training"] = value 25081 } 25082 } 25083 25084 // A RNN backed by cuDNN. 25085 // 25086 // Computes the RNN from the input and initial states, with respect to the params 25087 // buffer. 25088 // 25089 // rnn_mode: Indicates the type of the RNN model. 25090 // input_mode: Indicate whether there is a linear projection between the input and 25091 // the actual computation before the first layer. 'skip_input' is only allowed 25092 // when input_size == num_units; 'auto_select' implies 'skip_input' when 25093 // input_size == num_units; otherwise, it implies 'linear_input'. 25094 // direction: Indicates whether a bidirectional model will be used. Should be 25095 // "unidirectional" or "bidirectional". 25096 // dropout: Dropout probability. When set to 0., dropout is disabled. 25097 // seed: The 1st part of a seed to initialize dropout. 25098 // seed2: The 2nd part of a seed to initialize dropout. 25099 // input: A 3-D tensor with the shape of [seq_length, batch_size, input_size]. 25100 // input_h: A 3-D tensor with the shape of [num_layer * dir, batch_size, 25101 // num_units]. 25102 // input_c: For LSTM, a 3-D tensor with the shape of 25103 // [num_layer * dir, batch, num_units]. For other models, it is ignored. 25104 // params: A 1-D tensor that contains the weights and biases in an opaque layout. 25105 // The size must be created through CudnnRNNParamsSize, and initialized 25106 // separately. Note that they might not be compatible across different 25107 // generations. So it is a good idea to save and restore 25108 // output: A 3-D tensor with the shape of [seq_length, batch_size, 25109 // dir * num_units]. 25110 // output_h: The same shape has input_h. 25111 // output_c: The same shape as input_c for LSTM. An empty tensor for other models. 25112 // is_training: Indicates whether this operation is used for inferenece or 25113 // training. 25114 // reserve_space: An opaque tensor that can be used in backprop calculation. It 25115 // is only produced if is_training is false. 25116 func CudnnRNN(scope *Scope, input tf.Output, input_h tf.Output, input_c tf.Output, params tf.Output, optional ...CudnnRNNAttr) (output tf.Output, output_h tf.Output, output_c tf.Output, reserve_space tf.Output) { 25117 if scope.Err() != nil { 25118 return 25119 } 25120 attrs := map[string]interface{}{} 25121 for _, a := range optional { 25122 a(attrs) 25123 } 25124 opspec := tf.OpSpec{ 25125 Type: "CudnnRNN", 25126 Input: []tf.Input{ 25127 input, input_h, input_c, params, 25128 }, 25129 Attrs: attrs, 25130 } 25131 op := scope.AddOperation(opspec) 25132 return op.Output(0), op.Output(1), op.Output(2), op.Output(3) 25133 } 25134 25135 // DecodeCompressedAttr is an optional argument to DecodeCompressed. 25136 type DecodeCompressedAttr func(optionalAttr) 25137 25138 // DecodeCompressedCompressionType sets the optional compression_type attribute to value. 25139 // 25140 // value: A scalar containing either (i) the empty string (no 25141 // compression), (ii) "ZLIB", or (iii) "GZIP". 25142 // If not specified, defaults to "" 25143 func DecodeCompressedCompressionType(value string) DecodeCompressedAttr { 25144 return func(m optionalAttr) { 25145 m["compression_type"] = value 25146 } 25147 } 25148 25149 // Decompress strings. 25150 // 25151 // This op decompresses each element of the `bytes` input `Tensor`, which 25152 // is assumed to be compressed using the given `compression_type`. 25153 // 25154 // The `output` is a string `Tensor` of the same shape as `bytes`, 25155 // each element containing the decompressed data from the corresponding 25156 // element in `bytes`. 25157 // 25158 // Arguments: 25159 // bytes: A Tensor of string which is compressed. 25160 // 25161 // Returns A Tensor with the same shape as input `bytes`, uncompressed 25162 // from bytes. 25163 func DecodeCompressed(scope *Scope, bytes tf.Output, optional ...DecodeCompressedAttr) (output tf.Output) { 25164 if scope.Err() != nil { 25165 return 25166 } 25167 attrs := map[string]interface{}{} 25168 for _, a := range optional { 25169 a(attrs) 25170 } 25171 opspec := tf.OpSpec{ 25172 Type: "DecodeCompressed", 25173 Input: []tf.Input{ 25174 bytes, 25175 }, 25176 Attrs: attrs, 25177 } 25178 op := scope.AddOperation(opspec) 25179 return op.Output(0) 25180 } 25181 25182 // RetrieveTPUEmbeddingMDLAdagradLightParametersAttr is an optional argument to RetrieveTPUEmbeddingMDLAdagradLightParameters. 25183 type RetrieveTPUEmbeddingMDLAdagradLightParametersAttr func(optionalAttr) 25184 25185 // RetrieveTPUEmbeddingMDLAdagradLightParametersTableId sets the optional table_id attribute to value. 25186 // If not specified, defaults to -1 25187 // 25188 // REQUIRES: value >= -1 25189 func RetrieveTPUEmbeddingMDLAdagradLightParametersTableId(value int64) RetrieveTPUEmbeddingMDLAdagradLightParametersAttr { 25190 return func(m optionalAttr) { 25191 m["table_id"] = value 25192 } 25193 } 25194 25195 // RetrieveTPUEmbeddingMDLAdagradLightParametersTableName sets the optional table_name attribute to value. 25196 // If not specified, defaults to "" 25197 func RetrieveTPUEmbeddingMDLAdagradLightParametersTableName(value string) RetrieveTPUEmbeddingMDLAdagradLightParametersAttr { 25198 return func(m optionalAttr) { 25199 m["table_name"] = value 25200 } 25201 } 25202 25203 // Retrieve MDL Adagrad Light embedding parameters. 25204 // 25205 // An op that retrieves optimization parameters from embedding to host 25206 // memory. Must be preceded by a ConfigureTPUEmbeddingHost op that sets up 25207 // the correct embedding table configuration. For example, this op is 25208 // used to retrieve updated parameters before saving a checkpoint. 25209 // 25210 // Returns Parameter parameters updated by the MDL Adagrad Light optimization algorithm.Parameter accumulators updated by the MDL Adagrad Light optimization algorithm.Parameter weights updated by the MDL Adagrad Light optimization algorithm.Parameter benefits updated by the MDL Adagrad Light optimization algorithm. 25211 func RetrieveTPUEmbeddingMDLAdagradLightParameters(scope *Scope, num_shards int64, shard_id int64, optional ...RetrieveTPUEmbeddingMDLAdagradLightParametersAttr) (parameters tf.Output, accumulators tf.Output, weights tf.Output, benefits tf.Output) { 25212 if scope.Err() != nil { 25213 return 25214 } 25215 attrs := map[string]interface{}{"num_shards": num_shards, "shard_id": shard_id} 25216 for _, a := range optional { 25217 a(attrs) 25218 } 25219 opspec := tf.OpSpec{ 25220 Type: "RetrieveTPUEmbeddingMDLAdagradLightParameters", 25221 25222 Attrs: attrs, 25223 } 25224 op := scope.AddOperation(opspec) 25225 return op.Output(0), op.Output(1), op.Output(2), op.Output(3) 25226 } 25227 25228 // RetrieveTPUEmbeddingAdadeltaParametersGradAccumDebugAttr is an optional argument to RetrieveTPUEmbeddingAdadeltaParametersGradAccumDebug. 25229 type RetrieveTPUEmbeddingAdadeltaParametersGradAccumDebugAttr func(optionalAttr) 25230 25231 // RetrieveTPUEmbeddingAdadeltaParametersGradAccumDebugTableId sets the optional table_id attribute to value. 25232 // If not specified, defaults to -1 25233 // 25234 // REQUIRES: value >= -1 25235 func RetrieveTPUEmbeddingAdadeltaParametersGradAccumDebugTableId(value int64) RetrieveTPUEmbeddingAdadeltaParametersGradAccumDebugAttr { 25236 return func(m optionalAttr) { 25237 m["table_id"] = value 25238 } 25239 } 25240 25241 // RetrieveTPUEmbeddingAdadeltaParametersGradAccumDebugTableName sets the optional table_name attribute to value. 25242 // If not specified, defaults to "" 25243 func RetrieveTPUEmbeddingAdadeltaParametersGradAccumDebugTableName(value string) RetrieveTPUEmbeddingAdadeltaParametersGradAccumDebugAttr { 25244 return func(m optionalAttr) { 25245 m["table_name"] = value 25246 } 25247 } 25248 25249 // Retrieve Adadelta embedding parameters with debug support. 25250 // 25251 // An op that retrieves optimization parameters from embedding to host 25252 // memory. Must be preceded by a ConfigureTPUEmbeddingHost op that sets up 25253 // the correct embedding table configuration. For example, this op is 25254 // used to retrieve updated parameters before saving a checkpoint. 25255 // 25256 // Returns Parameter parameters updated by the Adadelta optimization algorithm.Parameter accumulators updated by the Adadelta optimization algorithm.Parameter updates updated by the Adadelta optimization algorithm.Parameter gradient_accumulators updated by the Adadelta optimization algorithm. 25257 func RetrieveTPUEmbeddingAdadeltaParametersGradAccumDebug(scope *Scope, num_shards int64, shard_id int64, optional ...RetrieveTPUEmbeddingAdadeltaParametersGradAccumDebugAttr) (parameters tf.Output, accumulators tf.Output, updates tf.Output, gradient_accumulators tf.Output) { 25258 if scope.Err() != nil { 25259 return 25260 } 25261 attrs := map[string]interface{}{"num_shards": num_shards, "shard_id": shard_id} 25262 for _, a := range optional { 25263 a(attrs) 25264 } 25265 opspec := tf.OpSpec{ 25266 Type: "RetrieveTPUEmbeddingAdadeltaParametersGradAccumDebug", 25267 25268 Attrs: attrs, 25269 } 25270 op := scope.AddOperation(opspec) 25271 return op.Output(0), op.Output(1), op.Output(2), op.Output(3) 25272 } 25273 25274 // MapClearAttr is an optional argument to MapClear. 25275 type MapClearAttr func(optionalAttr) 25276 25277 // MapClearCapacity sets the optional capacity attribute to value. 25278 // If not specified, defaults to 0 25279 // 25280 // REQUIRES: value >= 0 25281 func MapClearCapacity(value int64) MapClearAttr { 25282 return func(m optionalAttr) { 25283 m["capacity"] = value 25284 } 25285 } 25286 25287 // MapClearMemoryLimit sets the optional memory_limit attribute to value. 25288 // If not specified, defaults to 0 25289 // 25290 // REQUIRES: value >= 0 25291 func MapClearMemoryLimit(value int64) MapClearAttr { 25292 return func(m optionalAttr) { 25293 m["memory_limit"] = value 25294 } 25295 } 25296 25297 // MapClearContainer sets the optional container attribute to value. 25298 // If not specified, defaults to "" 25299 func MapClearContainer(value string) MapClearAttr { 25300 return func(m optionalAttr) { 25301 m["container"] = value 25302 } 25303 } 25304 25305 // MapClearSharedName sets the optional shared_name attribute to value. 25306 // If not specified, defaults to "" 25307 func MapClearSharedName(value string) MapClearAttr { 25308 return func(m optionalAttr) { 25309 m["shared_name"] = value 25310 } 25311 } 25312 25313 // Op removes all elements in the underlying container. 25314 // 25315 // Returns the created operation. 25316 func MapClear(scope *Scope, dtypes []tf.DataType, optional ...MapClearAttr) (o *tf.Operation) { 25317 if scope.Err() != nil { 25318 return 25319 } 25320 attrs := map[string]interface{}{"dtypes": dtypes} 25321 for _, a := range optional { 25322 a(attrs) 25323 } 25324 opspec := tf.OpSpec{ 25325 Type: "MapClear", 25326 25327 Attrs: attrs, 25328 } 25329 return scope.AddOperation(opspec) 25330 } 25331 25332 // DecodeCSVAttr is an optional argument to DecodeCSV. 25333 type DecodeCSVAttr func(optionalAttr) 25334 25335 // DecodeCSVFieldDelim sets the optional field_delim attribute to value. 25336 // 25337 // value: char delimiter to separate fields in a record. 25338 // If not specified, defaults to "," 25339 func DecodeCSVFieldDelim(value string) DecodeCSVAttr { 25340 return func(m optionalAttr) { 25341 m["field_delim"] = value 25342 } 25343 } 25344 25345 // DecodeCSVUseQuoteDelim sets the optional use_quote_delim attribute to value. 25346 // 25347 // value: If false, treats double quotation marks as regular 25348 // characters inside of the string fields (ignoring RFC 4180, Section 2, 25349 // Bullet 5). 25350 // If not specified, defaults to true 25351 func DecodeCSVUseQuoteDelim(value bool) DecodeCSVAttr { 25352 return func(m optionalAttr) { 25353 m["use_quote_delim"] = value 25354 } 25355 } 25356 25357 // DecodeCSVNaValue sets the optional na_value attribute to value. 25358 // 25359 // value: Additional string to recognize as NA/NaN. 25360 // If not specified, defaults to "" 25361 func DecodeCSVNaValue(value string) DecodeCSVAttr { 25362 return func(m optionalAttr) { 25363 m["na_value"] = value 25364 } 25365 } 25366 25367 // DecodeCSVSelectCols sets the optional select_cols attribute to value. 25368 // If not specified, defaults to <> 25369 func DecodeCSVSelectCols(value []int64) DecodeCSVAttr { 25370 return func(m optionalAttr) { 25371 m["select_cols"] = value 25372 } 25373 } 25374 25375 // Convert CSV records to tensors. Each column maps to one tensor. 25376 // 25377 // RFC 4180 format is expected for the CSV records. 25378 // (https://tools.ietf.org/html/rfc4180) 25379 // Note that we allow leading and trailing spaces with int or float field. 25380 // 25381 // Arguments: 25382 // records: Each string is a record/row in the csv and all records should have 25383 // the same format. 25384 // record_defaults: One tensor per column of the input record, with either a 25385 // scalar default value for that column or an empty vector if the column is 25386 // required. 25387 // 25388 // Returns Each tensor will have the same shape as records. 25389 func DecodeCSV(scope *Scope, records tf.Output, record_defaults []tf.Output, optional ...DecodeCSVAttr) (output []tf.Output) { 25390 if scope.Err() != nil { 25391 return 25392 } 25393 attrs := map[string]interface{}{} 25394 for _, a := range optional { 25395 a(attrs) 25396 } 25397 opspec := tf.OpSpec{ 25398 Type: "DecodeCSV", 25399 Input: []tf.Input{ 25400 records, tf.OutputList(record_defaults), 25401 }, 25402 Attrs: attrs, 25403 } 25404 op := scope.AddOperation(opspec) 25405 if scope.Err() != nil { 25406 return 25407 } 25408 var idx int 25409 var err error 25410 if output, idx, err = makeOutputList(op, idx, "output"); err != nil { 25411 scope.UpdateErr("DecodeCSV", err) 25412 return 25413 } 25414 return output 25415 } 25416 25417 // Produces the max pool of the input tensor for quantized types. 25418 // 25419 // Arguments: 25420 // input: The 4D (batch x rows x cols x depth) Tensor to MaxReduce over. 25421 // min_input: The float value that the lowest quantized input value represents. 25422 // max_input: The float value that the highest quantized input value represents. 25423 // ksize: The size of the window for each dimension of the input tensor. 25424 // The length must be 4 to match the number of dimensions of the input. 25425 // strides: The stride of the sliding window for each dimension of the input 25426 // tensor. The length must be 4 to match the number of dimensions of the input. 25427 // padding: The type of padding algorithm to use. 25428 // 25429 // Returns The float value that the lowest quantized output value represents.The float value that the highest quantized output value represents. 25430 func QuantizedMaxPool(scope *Scope, input tf.Output, min_input tf.Output, max_input tf.Output, ksize []int64, strides []int64, padding string) (output tf.Output, min_output tf.Output, max_output tf.Output) { 25431 if scope.Err() != nil { 25432 return 25433 } 25434 attrs := map[string]interface{}{"ksize": ksize, "strides": strides, "padding": padding} 25435 opspec := tf.OpSpec{ 25436 Type: "QuantizedMaxPool", 25437 Input: []tf.Input{ 25438 input, min_input, max_input, 25439 }, 25440 Attrs: attrs, 25441 } 25442 op := scope.AddOperation(opspec) 25443 return op.Output(0), op.Output(1), op.Output(2) 25444 } 25445 25446 // RandomShuffleAttr is an optional argument to RandomShuffle. 25447 type RandomShuffleAttr func(optionalAttr) 25448 25449 // RandomShuffleSeed sets the optional seed attribute to value. 25450 // 25451 // value: If either `seed` or `seed2` are set to be non-zero, the random number 25452 // generator is seeded by the given seed. Otherwise, it is seeded by a 25453 // random seed. 25454 // If not specified, defaults to 0 25455 func RandomShuffleSeed(value int64) RandomShuffleAttr { 25456 return func(m optionalAttr) { 25457 m["seed"] = value 25458 } 25459 } 25460 25461 // RandomShuffleSeed2 sets the optional seed2 attribute to value. 25462 // 25463 // value: A second seed to avoid seed collision. 25464 // If not specified, defaults to 0 25465 func RandomShuffleSeed2(value int64) RandomShuffleAttr { 25466 return func(m optionalAttr) { 25467 m["seed2"] = value 25468 } 25469 } 25470 25471 // Randomly shuffles a tensor along its first dimension. 25472 // 25473 // The tensor is shuffled along dimension 0, such that each `value[j]` is mapped 25474 // to one and only one `output[i]`. For example, a mapping that might occur for a 25475 // 3x2 tensor is: 25476 // 25477 // ``` 25478 // [[1, 2], [[5, 6], 25479 // [3, 4], ==> [1, 2], 25480 // [5, 6]] [3, 4]] 25481 // ``` 25482 // 25483 // Arguments: 25484 // value: The tensor to be shuffled. 25485 // 25486 // Returns A tensor of same shape and type as `value`, shuffled along its first 25487 // dimension. 25488 func RandomShuffle(scope *Scope, value tf.Output, optional ...RandomShuffleAttr) (output tf.Output) { 25489 if scope.Err() != nil { 25490 return 25491 } 25492 attrs := map[string]interface{}{} 25493 for _, a := range optional { 25494 a(attrs) 25495 } 25496 opspec := tf.OpSpec{ 25497 Type: "RandomShuffle", 25498 Input: []tf.Input{ 25499 value, 25500 }, 25501 Attrs: attrs, 25502 } 25503 op := scope.AddOperation(opspec) 25504 return op.Output(0) 25505 } 25506 25507 // EnqueueTPUEmbeddingSparseBatchAttr is an optional argument to EnqueueTPUEmbeddingSparseBatch. 25508 type EnqueueTPUEmbeddingSparseBatchAttr func(optionalAttr) 25509 25510 // EnqueueTPUEmbeddingSparseBatchDeviceOrdinal sets the optional device_ordinal attribute to value. 25511 // 25512 // value: The TPU device to use. Should be >= 0 and less than the number 25513 // of TPU cores in the task on which the node is placed. 25514 // If not specified, defaults to -1 25515 func EnqueueTPUEmbeddingSparseBatchDeviceOrdinal(value int64) EnqueueTPUEmbeddingSparseBatchAttr { 25516 return func(m optionalAttr) { 25517 m["device_ordinal"] = value 25518 } 25519 } 25520 25521 // EnqueueTPUEmbeddingSparseBatchCombiners sets the optional combiners attribute to value. 25522 // 25523 // value: A list of string scalars, one for each embedding table that specify 25524 // how to normalize the embedding activations after weighted summation. 25525 // Supported combiners are 'mean', 'sum', or 'sqrtn'. It is invalid to have 25526 // the sum of the weights be 0 for 'mean' or the sum of the squared weights be 25527 // 0 for 'sqrtn'. If combiners isn't passed, the default is to use 'sum' for 25528 // all tables. 25529 // If not specified, defaults to <> 25530 func EnqueueTPUEmbeddingSparseBatchCombiners(value []string) EnqueueTPUEmbeddingSparseBatchAttr { 25531 return func(m optionalAttr) { 25532 m["combiners"] = value 25533 } 25534 } 25535 25536 // An op that enqueues TPUEmbedding input indices from a SparseTensor. 25537 // 25538 // This Op eases the porting of code that uses embedding_lookup_sparse(), 25539 // although some Python preprocessing of the SparseTensor arguments to 25540 // embedding_lookup_sparse() is required to produce the arguments to this Op, 25541 // since only a single EnqueueTPUEmbeddingSparseBatch Op is allowed per training 25542 // step. 25543 // 25544 // The tensors at corresponding positions in the three input lists 25545 // must have the same shape, i.e. rank 1 with dim_size() equal to the total 25546 // number of lookups into the table described by the corresponding table_id. 25547 // 25548 // Arguments: 25549 // sample_indices: A list of rank 1 Tensors specifying the training example and 25550 // feature to which the corresponding embedding_indices and aggregation_weights 25551 // values belong. sample_indices[i] must equal b * nf + f, where nf is the 25552 // number of features from the corresponding table, f is in [0, nf), and 25553 // b is in [0, batch size). 25554 // embedding_indices: A list of rank 1 Tensors, indices into the embedding tables. 25555 // aggregation_weights: A list of rank 1 Tensors containing per sample -- i.e. per 25556 // (training example, feature) -- aggregation weights. 25557 // mode_override: A string input that overrides the mode specified in the 25558 // TPUEmbeddingConfiguration. Supported values are {'unspecified', 'inference', 25559 // 'training', 'backward_pass_only'}. When set to 'unspecified', the mode set 25560 // in TPUEmbeddingConfiguration is used, otherwise mode_override is used. 25561 // 25562 // Returns the created operation. 25563 func EnqueueTPUEmbeddingSparseBatch(scope *Scope, sample_indices []tf.Output, embedding_indices []tf.Output, aggregation_weights []tf.Output, mode_override tf.Output, optional ...EnqueueTPUEmbeddingSparseBatchAttr) (o *tf.Operation) { 25564 if scope.Err() != nil { 25565 return 25566 } 25567 attrs := map[string]interface{}{} 25568 for _, a := range optional { 25569 a(attrs) 25570 } 25571 opspec := tf.OpSpec{ 25572 Type: "EnqueueTPUEmbeddingSparseBatch", 25573 Input: []tf.Input{ 25574 tf.OutputList(sample_indices), tf.OutputList(embedding_indices), tf.OutputList(aggregation_weights), mode_override, 25575 }, 25576 Attrs: attrs, 25577 } 25578 return scope.AddOperation(opspec) 25579 } 25580 25581 // StatelessRandomNormalAttr is an optional argument to StatelessRandomNormal. 25582 type StatelessRandomNormalAttr func(optionalAttr) 25583 25584 // StatelessRandomNormalDtype sets the optional dtype attribute to value. 25585 // 25586 // value: The type of the output. 25587 // If not specified, defaults to DT_FLOAT 25588 func StatelessRandomNormalDtype(value tf.DataType) StatelessRandomNormalAttr { 25589 return func(m optionalAttr) { 25590 m["dtype"] = value 25591 } 25592 } 25593 25594 // Outputs deterministic pseudorandom values from a normal distribution. 25595 // 25596 // The generated values will have mean 0 and standard deviation 1. 25597 // 25598 // The outputs are a deterministic function of `shape` and `seed`. 25599 // 25600 // Arguments: 25601 // shape: The shape of the output tensor. 25602 // seed: 2 seeds (shape [2]). 25603 // 25604 // Returns Random values with specified shape. 25605 func StatelessRandomNormal(scope *Scope, shape tf.Output, seed tf.Output, optional ...StatelessRandomNormalAttr) (output tf.Output) { 25606 if scope.Err() != nil { 25607 return 25608 } 25609 attrs := map[string]interface{}{} 25610 for _, a := range optional { 25611 a(attrs) 25612 } 25613 opspec := tf.OpSpec{ 25614 Type: "StatelessRandomNormal", 25615 Input: []tf.Input{ 25616 shape, seed, 25617 }, 25618 Attrs: attrs, 25619 } 25620 op := scope.AddOperation(opspec) 25621 return op.Output(0) 25622 } 25623 25624 // An Op to exchange data across TPU replicas. 25625 // 25626 // On each replica, the input is split into `split_count` blocks along 25627 // `split_dimension` and send to the other replicas given group_assignment. After 25628 // receiving `split_count` - 1 blocks from other replicas, we concatenate the 25629 // blocks along `concat_dimension` as the output. 25630 // 25631 // For example, suppose there are 2 TPU replicas: 25632 // replica 0 receives input: `[[A, B]]` 25633 // replica 1 receives input: `[[C, D]]` 25634 // 25635 // group_assignment=`[[0, 1]]` 25636 // concat_dimension=0 25637 // split_dimension=1 25638 // split_count=2 25639 // 25640 // replica 0's output: `[[A], [C]]` 25641 // replica 1's output: `[[B], [D]]` 25642 // 25643 // Arguments: 25644 // input: The local input to the sum. 25645 // group_assignment: An int32 tensor with shape 25646 // [num_groups, num_replicas_per_group]. `group_assignment[i]` represents the 25647 // replica ids in the ith subgroup. 25648 // concat_dimension: The dimension number to concatenate. 25649 // split_dimension: The dimension number to split. 25650 // split_count: The number of splits, this number must equal to the sub-group 25651 // size(group_assignment.get_shape()[1]) 25652 // 25653 // Returns The exchanged result. 25654 func AllToAll(scope *Scope, input tf.Output, group_assignment tf.Output, concat_dimension int64, split_dimension int64, split_count int64) (output tf.Output) { 25655 if scope.Err() != nil { 25656 return 25657 } 25658 attrs := map[string]interface{}{"concat_dimension": concat_dimension, "split_dimension": split_dimension, "split_count": split_count} 25659 opspec := tf.OpSpec{ 25660 Type: "AllToAll", 25661 Input: []tf.Input{ 25662 input, group_assignment, 25663 }, 25664 Attrs: attrs, 25665 } 25666 op := scope.AddOperation(opspec) 25667 return op.Output(0) 25668 } 25669 25670 // Adds a value to the current value of a variable. 25671 // 25672 // Any ReadVariableOp with a control dependency on this op is guaranteed to 25673 // see the incremented value or a subsequent newer one. 25674 // 25675 // Arguments: 25676 // resource: handle to the resource in which to store the variable. 25677 // value: the value by which the variable will be incremented. 25678 // 25679 // Returns the created operation. 25680 func AssignAddVariableOp(scope *Scope, resource tf.Output, value tf.Output) (o *tf.Operation) { 25681 if scope.Err() != nil { 25682 return 25683 } 25684 opspec := tf.OpSpec{ 25685 Type: "AssignAddVariableOp", 25686 Input: []tf.Input{ 25687 resource, value, 25688 }, 25689 } 25690 return scope.AddOperation(opspec) 25691 } 25692 25693 // Real-valued fast Fourier transform. 25694 // 25695 // Computes the 1-dimensional discrete Fourier transform of a real-valued signal 25696 // over the inner-most dimension of `input`. 25697 // 25698 // Since the DFT of a real signal is Hermitian-symmetric, `RFFT` only returns the 25699 // `fft_length / 2 + 1` unique components of the FFT: the zero-frequency term, 25700 // followed by the `fft_length / 2` positive-frequency terms. 25701 // 25702 // Along the axis `RFFT` is computed on, if `fft_length` is smaller than the 25703 // corresponding dimension of `input`, the dimension is cropped. If it is larger, 25704 // the dimension is padded with zeros. 25705 // 25706 // Arguments: 25707 // input: A float32 tensor. 25708 // fft_length: An int32 tensor of shape [1]. The FFT length. 25709 // 25710 // Returns A complex64 tensor of the same rank as `input`. The inner-most 25711 // dimension of `input` is replaced with the `fft_length / 2 + 1` unique 25712 // frequency components of its 1D Fourier transform. 25713 // 25714 // @compatibility(numpy) 25715 // Equivalent to np.fft.rfft 25716 // @end_compatibility 25717 func RFFT(scope *Scope, input tf.Output, fft_length tf.Output) (output tf.Output) { 25718 if scope.Err() != nil { 25719 return 25720 } 25721 opspec := tf.OpSpec{ 25722 Type: "RFFT", 25723 Input: []tf.Input{ 25724 input, fft_length, 25725 }, 25726 } 25727 op := scope.AddOperation(opspec) 25728 return op.Output(0) 25729 } 25730 25731 // RetrieveTPUEmbeddingAdadeltaParametersAttr is an optional argument to RetrieveTPUEmbeddingAdadeltaParameters. 25732 type RetrieveTPUEmbeddingAdadeltaParametersAttr func(optionalAttr) 25733 25734 // RetrieveTPUEmbeddingAdadeltaParametersTableId sets the optional table_id attribute to value. 25735 // If not specified, defaults to -1 25736 // 25737 // REQUIRES: value >= -1 25738 func RetrieveTPUEmbeddingAdadeltaParametersTableId(value int64) RetrieveTPUEmbeddingAdadeltaParametersAttr { 25739 return func(m optionalAttr) { 25740 m["table_id"] = value 25741 } 25742 } 25743 25744 // RetrieveTPUEmbeddingAdadeltaParametersTableName sets the optional table_name attribute to value. 25745 // If not specified, defaults to "" 25746 func RetrieveTPUEmbeddingAdadeltaParametersTableName(value string) RetrieveTPUEmbeddingAdadeltaParametersAttr { 25747 return func(m optionalAttr) { 25748 m["table_name"] = value 25749 } 25750 } 25751 25752 // Retrieve Adadelta embedding parameters. 25753 // 25754 // An op that retrieves optimization parameters from embedding to host 25755 // memory. Must be preceded by a ConfigureTPUEmbeddingHost op that sets up 25756 // the correct embedding table configuration. For example, this op is 25757 // used to retrieve updated parameters before saving a checkpoint. 25758 // 25759 // Returns Parameter parameters updated by the Adadelta optimization algorithm.Parameter accumulators updated by the Adadelta optimization algorithm.Parameter updates updated by the Adadelta optimization algorithm. 25760 func RetrieveTPUEmbeddingAdadeltaParameters(scope *Scope, num_shards int64, shard_id int64, optional ...RetrieveTPUEmbeddingAdadeltaParametersAttr) (parameters tf.Output, accumulators tf.Output, updates tf.Output) { 25761 if scope.Err() != nil { 25762 return 25763 } 25764 attrs := map[string]interface{}{"num_shards": num_shards, "shard_id": shard_id} 25765 for _, a := range optional { 25766 a(attrs) 25767 } 25768 opspec := tf.OpSpec{ 25769 Type: "RetrieveTPUEmbeddingAdadeltaParameters", 25770 25771 Attrs: attrs, 25772 } 25773 op := scope.AddOperation(opspec) 25774 return op.Output(0), op.Output(1), op.Output(2) 25775 } 25776 25777 // UpperBoundAttr is an optional argument to UpperBound. 25778 type UpperBoundAttr func(optionalAttr) 25779 25780 // UpperBoundOutType sets the optional out_type attribute to value. 25781 // If not specified, defaults to DT_INT32 25782 func UpperBoundOutType(value tf.DataType) UpperBoundAttr { 25783 return func(m optionalAttr) { 25784 m["out_type"] = value 25785 } 25786 } 25787 25788 // Applies upper_bound(sorted_search_values, values) along each row. 25789 // 25790 // Each set of rows with the same index in (sorted_inputs, values) is treated 25791 // independently. The resulting row is the equivalent of calling 25792 // `np.searchsorted(sorted_inputs, values, side='right')`. 25793 // 25794 // The result is not a global index to the entire 25795 // `Tensor`, but rather just the index in the last dimension. 25796 // 25797 // A 2-D example: 25798 // sorted_sequence = [[0, 3, 9, 9, 10], 25799 // [1, 2, 3, 4, 5]] 25800 // values = [[2, 4, 9], 25801 // [0, 2, 6]] 25802 // 25803 // result = UpperBound(sorted_sequence, values) 25804 // 25805 // result == [[1, 2, 4], 25806 // [0, 2, 5]] 25807 // 25808 // Arguments: 25809 // sorted_inputs: 2-D Tensor where each row is ordered. 25810 // values: 2-D Tensor with the same numbers of rows as `sorted_search_values`. Contains 25811 // the values that will be searched for in `sorted_search_values`. 25812 // 25813 // Returns A `Tensor` with the same shape as `values`. It contains the last scalar index 25814 // into the last dimension where values can be inserted without changing the 25815 // ordered property. 25816 func UpperBound(scope *Scope, sorted_inputs tf.Output, values tf.Output, optional ...UpperBoundAttr) (output tf.Output) { 25817 if scope.Err() != nil { 25818 return 25819 } 25820 attrs := map[string]interface{}{} 25821 for _, a := range optional { 25822 a(attrs) 25823 } 25824 opspec := tf.OpSpec{ 25825 Type: "UpperBound", 25826 Input: []tf.Input{ 25827 sorted_inputs, values, 25828 }, 25829 Attrs: attrs, 25830 } 25831 op := scope.AddOperation(opspec) 25832 return op.Output(0) 25833 } 25834 25835 // FractionalMaxPoolGradAttr is an optional argument to FractionalMaxPoolGrad. 25836 type FractionalMaxPoolGradAttr func(optionalAttr) 25837 25838 // FractionalMaxPoolGradOverlapping sets the optional overlapping attribute to value. 25839 // 25840 // value: When set to True, it means when pooling, the values at the boundary 25841 // of adjacent pooling cells are used by both cells. For example: 25842 // 25843 // `index 0 1 2 3 4` 25844 // 25845 // `value 20 5 16 3 7` 25846 // 25847 // If the pooling sequence is [0, 2, 4], then 16, at index 2 will be used twice. 25848 // The result would be [20, 16] for fractional max pooling. 25849 // If not specified, defaults to false 25850 func FractionalMaxPoolGradOverlapping(value bool) FractionalMaxPoolGradAttr { 25851 return func(m optionalAttr) { 25852 m["overlapping"] = value 25853 } 25854 } 25855 25856 // Computes gradient of the FractionalMaxPool function. 25857 // 25858 // Arguments: 25859 // orig_input: Original input for `fractional_max_pool` 25860 // orig_output: Original output for `fractional_max_pool` 25861 // out_backprop: 4-D with shape `[batch, height, width, channels]`. Gradients 25862 // w.r.t. the output of `fractional_max_pool`. 25863 // row_pooling_sequence: row pooling sequence, form pooling region with 25864 // col_pooling_sequence. 25865 // col_pooling_sequence: column pooling sequence, form pooling region with 25866 // row_pooling sequence. 25867 // 25868 // Returns 4-D. Gradients w.r.t. the input of `fractional_max_pool`. 25869 func FractionalMaxPoolGrad(scope *Scope, orig_input tf.Output, orig_output tf.Output, out_backprop tf.Output, row_pooling_sequence tf.Output, col_pooling_sequence tf.Output, optional ...FractionalMaxPoolGradAttr) (output tf.Output) { 25870 if scope.Err() != nil { 25871 return 25872 } 25873 attrs := map[string]interface{}{} 25874 for _, a := range optional { 25875 a(attrs) 25876 } 25877 opspec := tf.OpSpec{ 25878 Type: "FractionalMaxPoolGrad", 25879 Input: []tf.Input{ 25880 orig_input, orig_output, out_backprop, row_pooling_sequence, col_pooling_sequence, 25881 }, 25882 Attrs: attrs, 25883 } 25884 op := scope.AddOperation(opspec) 25885 return op.Output(0) 25886 } 25887 25888 // SparseReduceMaxSparseAttr is an optional argument to SparseReduceMaxSparse. 25889 type SparseReduceMaxSparseAttr func(optionalAttr) 25890 25891 // SparseReduceMaxSparseKeepDims sets the optional keep_dims attribute to value. 25892 // 25893 // value: If true, retain reduced dimensions with length 1. 25894 // If not specified, defaults to false 25895 func SparseReduceMaxSparseKeepDims(value bool) SparseReduceMaxSparseAttr { 25896 return func(m optionalAttr) { 25897 m["keep_dims"] = value 25898 } 25899 } 25900 25901 // Computes the max of elements across dimensions of a SparseTensor. 25902 // 25903 // This Op takes a SparseTensor and is the sparse counterpart to 25904 // `tf.reduce_max()`. In contrast to SparseReduceMax, this Op returns a 25905 // SparseTensor. 25906 // 25907 // Reduces `sp_input` along the dimensions given in `reduction_axes`. Unless 25908 // `keep_dims` is true, the rank of the tensor is reduced by 1 for each entry in 25909 // `reduction_axes`. If `keep_dims` is true, the reduced dimensions are retained 25910 // with length 1. 25911 // 25912 // If `reduction_axes` has no entries, all dimensions are reduced, and a tensor 25913 // with a single element is returned. Additionally, the axes can be negative, 25914 // which are interpreted according to the indexing rules in Python. 25915 // 25916 // Arguments: 25917 // input_indices: 2-D. `N x R` matrix with the indices of non-empty values in a 25918 // SparseTensor, possibly not in canonical ordering. 25919 // input_values: 1-D. `N` non-empty values corresponding to `input_indices`. 25920 // input_shape: 1-D. Shape of the input SparseTensor. 25921 // reduction_axes: 1-D. Length-`K` vector containing the reduction axes. 25922 func SparseReduceMaxSparse(scope *Scope, input_indices tf.Output, input_values tf.Output, input_shape tf.Output, reduction_axes tf.Output, optional ...SparseReduceMaxSparseAttr) (output_indices tf.Output, output_values tf.Output, output_shape tf.Output) { 25923 if scope.Err() != nil { 25924 return 25925 } 25926 attrs := map[string]interface{}{} 25927 for _, a := range optional { 25928 a(attrs) 25929 } 25930 opspec := tf.OpSpec{ 25931 Type: "SparseReduceMaxSparse", 25932 Input: []tf.Input{ 25933 input_indices, input_values, input_shape, reduction_axes, 25934 }, 25935 Attrs: attrs, 25936 } 25937 op := scope.AddOperation(opspec) 25938 return op.Output(0), op.Output(1), op.Output(2) 25939 } 25940 25941 // Convert one or more images from HSV to RGB. 25942 // 25943 // Outputs a tensor of the same shape as the `images` tensor, containing the RGB 25944 // value of the pixels. The output is only well defined if the value in `images` 25945 // are in `[0,1]`. 25946 // 25947 // See `rgb_to_hsv` for a description of the HSV encoding. 25948 // 25949 // Arguments: 25950 // images: 1-D or higher rank. HSV data to convert. Last dimension must be size 3. 25951 // 25952 // Returns `images` converted to RGB. 25953 func HSVToRGB(scope *Scope, images tf.Output) (output tf.Output) { 25954 if scope.Err() != nil { 25955 return 25956 } 25957 opspec := tf.OpSpec{ 25958 Type: "HSVToRGB", 25959 Input: []tf.Input{ 25960 images, 25961 }, 25962 } 25963 op := scope.AddOperation(opspec) 25964 return op.Output(0) 25965 } 25966 25967 // Computes the gradient of the sigmoid of `x` wrt its input. 25968 // 25969 // Specifically, `grad = dy * y * (1 - y)`, where `y = sigmoid(x)`, and 25970 // `dy` is the corresponding input gradient. 25971 func SigmoidGrad(scope *Scope, y tf.Output, dy tf.Output) (z tf.Output) { 25972 if scope.Err() != nil { 25973 return 25974 } 25975 opspec := tf.OpSpec{ 25976 Type: "SigmoidGrad", 25977 Input: []tf.Input{ 25978 y, dy, 25979 }, 25980 } 25981 op := scope.AddOperation(opspec) 25982 return op.Output(0) 25983 } 25984 25985 // Creates a dataset that changes the batch size. 25986 // 25987 // Creates a dataset that changes the batch size of the dataset to current batch 25988 // size // num_workers. 25989 // 25990 // Arguments: 25991 // input_dataset: A variant tensor representing the input dataset. 25992 // num_workers: A scalar representing the number of workers to distribute this batch across. As 25993 // a result of this transformation the current batch size would end up being 25994 // divided by this parameter. 25995 // 25996 // 25997 func ExperimentalRebatchDataset(scope *Scope, input_dataset tf.Output, num_workers tf.Output, output_types []tf.DataType, output_shapes []tf.Shape) (handle tf.Output) { 25998 if scope.Err() != nil { 25999 return 26000 } 26001 attrs := map[string]interface{}{"output_types": output_types, "output_shapes": output_shapes} 26002 opspec := tf.OpSpec{ 26003 Type: "ExperimentalRebatchDataset", 26004 Input: []tf.Input{ 26005 input_dataset, num_workers, 26006 }, 26007 Attrs: attrs, 26008 } 26009 op := scope.AddOperation(opspec) 26010 return op.Output(0) 26011 } 26012 26013 // Creates a dataset that emits the outputs of `input_dataset` `count` times. 26014 // 26015 // Arguments: 26016 // 26017 // count: A scalar representing the number of times that `input_dataset` should 26018 // be repeated. A value of `-1` indicates that it should be repeated infinitely. 26019 // 26020 // 26021 func RepeatDataset(scope *Scope, input_dataset tf.Output, count tf.Output, output_types []tf.DataType, output_shapes []tf.Shape) (handle tf.Output) { 26022 if scope.Err() != nil { 26023 return 26024 } 26025 attrs := map[string]interface{}{"output_types": output_types, "output_shapes": output_shapes} 26026 opspec := tf.OpSpec{ 26027 Type: "RepeatDataset", 26028 Input: []tf.Input{ 26029 input_dataset, count, 26030 }, 26031 Attrs: attrs, 26032 } 26033 op := scope.AddOperation(opspec) 26034 return op.Output(0) 26035 } 26036 26037 // ResourceApplyAdagradDAAttr is an optional argument to ResourceApplyAdagradDA. 26038 type ResourceApplyAdagradDAAttr func(optionalAttr) 26039 26040 // ResourceApplyAdagradDAUseLocking sets the optional use_locking attribute to value. 26041 // 26042 // value: If True, updating of the var and accum tensors will be protected by 26043 // a lock; otherwise the behavior is undefined, but may exhibit less contention. 26044 // If not specified, defaults to false 26045 func ResourceApplyAdagradDAUseLocking(value bool) ResourceApplyAdagradDAAttr { 26046 return func(m optionalAttr) { 26047 m["use_locking"] = value 26048 } 26049 } 26050 26051 // Update '*var' according to the proximal adagrad scheme. 26052 // 26053 // Arguments: 26054 // var_: Should be from a Variable(). 26055 // gradient_accumulator: Should be from a Variable(). 26056 // gradient_squared_accumulator: Should be from a Variable(). 26057 // grad: The gradient. 26058 // lr: Scaling factor. Must be a scalar. 26059 // l1: L1 regularization. Must be a scalar. 26060 // l2: L2 regularization. Must be a scalar. 26061 // global_step: Training step number. Must be a scalar. 26062 // 26063 // Returns the created operation. 26064 func ResourceApplyAdagradDA(scope *Scope, var_ tf.Output, gradient_accumulator tf.Output, gradient_squared_accumulator tf.Output, grad tf.Output, lr tf.Output, l1 tf.Output, l2 tf.Output, global_step tf.Output, optional ...ResourceApplyAdagradDAAttr) (o *tf.Operation) { 26065 if scope.Err() != nil { 26066 return 26067 } 26068 attrs := map[string]interface{}{} 26069 for _, a := range optional { 26070 a(attrs) 26071 } 26072 opspec := tf.OpSpec{ 26073 Type: "ResourceApplyAdagradDA", 26074 Input: []tf.Input{ 26075 var_, gradient_accumulator, gradient_squared_accumulator, grad, lr, l1, l2, global_step, 26076 }, 26077 Attrs: attrs, 26078 } 26079 return scope.AddOperation(opspec) 26080 } 26081 26082 // Creates a TensorList which, when stacked, has the value of `tensor`. 26083 // 26084 // Each tensor in the result list corresponds to one row of the input tensor. 26085 // 26086 // tensor: The input tensor. 26087 // output_handle: The list. 26088 func TensorListFromTensor(scope *Scope, tensor tf.Output, element_shape tf.Output) (output_handle tf.Output) { 26089 if scope.Err() != nil { 26090 return 26091 } 26092 opspec := tf.OpSpec{ 26093 Type: "TensorListFromTensor", 26094 Input: []tf.Input{ 26095 tensor, element_shape, 26096 }, 26097 } 26098 op := scope.AddOperation(opspec) 26099 return op.Output(0) 26100 } 26101 26102 // ConfigureDistributedTPUAttr is an optional argument to ConfigureDistributedTPU. 26103 type ConfigureDistributedTPUAttr func(optionalAttr) 26104 26105 // ConfigureDistributedTPUEmbeddingConfig sets the optional embedding_config attribute to value. 26106 // 26107 // value: Reserved. Do not use. 26108 // If not specified, defaults to "" 26109 func ConfigureDistributedTPUEmbeddingConfig(value string) ConfigureDistributedTPUAttr { 26110 return func(m optionalAttr) { 26111 m["embedding_config"] = value 26112 } 26113 } 26114 26115 // ConfigureDistributedTPUTpuEmbeddingConfig sets the optional tpu_embedding_config attribute to value. 26116 // 26117 // value: Serialized tensorflow.tpu.TPUEmbeddingConfiguration that 26118 // describes the embedding lookups of the program. 26119 // If not specified, defaults to "" 26120 func ConfigureDistributedTPUTpuEmbeddingConfig(value string) ConfigureDistributedTPUAttr { 26121 return func(m optionalAttr) { 26122 m["tpu_embedding_config"] = value 26123 } 26124 } 26125 26126 // ConfigureDistributedTPUIsGlobalInit sets the optional is_global_init attribute to value. 26127 // 26128 // value: Reserved. Do not use. 26129 // If not specified, defaults to false 26130 func ConfigureDistributedTPUIsGlobalInit(value bool) ConfigureDistributedTPUAttr { 26131 return func(m optionalAttr) { 26132 m["is_global_init"] = value 26133 } 26134 } 26135 26136 // Sets up the centralized structures for a distributed TPU system. 26137 // 26138 // Returns A serialized tensorflow.tpu.TopologyProto that describes the TPU 26139 // topology. 26140 func ConfigureDistributedTPU(scope *Scope, optional ...ConfigureDistributedTPUAttr) (topology tf.Output) { 26141 if scope.Err() != nil { 26142 return 26143 } 26144 attrs := map[string]interface{}{} 26145 for _, a := range optional { 26146 a(attrs) 26147 } 26148 opspec := tf.OpSpec{ 26149 Type: "ConfigureDistributedTPU", 26150 26151 Attrs: attrs, 26152 } 26153 op := scope.AddOperation(opspec) 26154 return op.Output(0) 26155 } 26156 26157 // Reshapes a quantized tensor as per the Reshape op. 26158 // 26159 // ``` 26160 // 26161 // Arguments: 26162 // 26163 // shape: Defines the shape of the output tensor. 26164 // input_min: The minimum value of the input. 26165 // input_max: The maximum value of the input. 26166 // 26167 // Returns This value is copied from input_min.This value is copied from input_max. 26168 func QuantizedReshape(scope *Scope, tensor tf.Output, shape tf.Output, input_min tf.Output, input_max tf.Output) (output tf.Output, output_min tf.Output, output_max tf.Output) { 26169 if scope.Err() != nil { 26170 return 26171 } 26172 opspec := tf.OpSpec{ 26173 Type: "QuantizedReshape", 26174 Input: []tf.Input{ 26175 tensor, shape, input_min, input_max, 26176 }, 26177 } 26178 op := scope.AddOperation(opspec) 26179 return op.Output(0), op.Output(1), op.Output(2) 26180 } 26181 26182 // PriorityQueueV2Attr is an optional argument to PriorityQueueV2. 26183 type PriorityQueueV2Attr func(optionalAttr) 26184 26185 // PriorityQueueV2ComponentTypes sets the optional component_types attribute to value. 26186 // 26187 // value: The type of each component in a value. 26188 // If not specified, defaults to <> 26189 // 26190 // REQUIRES: len(value) >= 0 26191 func PriorityQueueV2ComponentTypes(value []tf.DataType) PriorityQueueV2Attr { 26192 return func(m optionalAttr) { 26193 m["component_types"] = value 26194 } 26195 } 26196 26197 // PriorityQueueV2Capacity sets the optional capacity attribute to value. 26198 // 26199 // value: The upper bound on the number of elements in this queue. 26200 // Negative numbers mean no limit. 26201 // If not specified, defaults to -1 26202 func PriorityQueueV2Capacity(value int64) PriorityQueueV2Attr { 26203 return func(m optionalAttr) { 26204 m["capacity"] = value 26205 } 26206 } 26207 26208 // PriorityQueueV2Container sets the optional container attribute to value. 26209 // 26210 // value: If non-empty, this queue is placed in the given container. 26211 // Otherwise, a default container is used. 26212 // If not specified, defaults to "" 26213 func PriorityQueueV2Container(value string) PriorityQueueV2Attr { 26214 return func(m optionalAttr) { 26215 m["container"] = value 26216 } 26217 } 26218 26219 // PriorityQueueV2SharedName sets the optional shared_name attribute to value. 26220 // 26221 // value: If non-empty, this queue will be shared under the given name 26222 // across multiple sessions. 26223 // If not specified, defaults to "" 26224 func PriorityQueueV2SharedName(value string) PriorityQueueV2Attr { 26225 return func(m optionalAttr) { 26226 m["shared_name"] = value 26227 } 26228 } 26229 26230 // A queue that produces elements sorted by the first component value. 26231 // 26232 // Note that the PriorityQueue requires the first component of any element 26233 // to be a scalar int64, in addition to the other elements declared by 26234 // component_types. Therefore calls to Enqueue and EnqueueMany (resp. Dequeue 26235 // and DequeueMany) on a PriorityQueue will all require (resp. output) one extra 26236 // entry in their input (resp. output) lists. 26237 // 26238 // Arguments: 26239 // shapes: The shape of each component in a value. The length of this attr must 26240 // be either 0 or the same as the length of component_types. If the length of 26241 // this attr is 0, the shapes of queue elements are not constrained, and 26242 // only one element may be dequeued at a time. 26243 // 26244 // Returns The handle to the queue. 26245 func PriorityQueueV2(scope *Scope, shapes []tf.Shape, optional ...PriorityQueueV2Attr) (handle tf.Output) { 26246 if scope.Err() != nil { 26247 return 26248 } 26249 attrs := map[string]interface{}{"shapes": shapes} 26250 for _, a := range optional { 26251 a(attrs) 26252 } 26253 opspec := tf.OpSpec{ 26254 Type: "PriorityQueueV2", 26255 26256 Attrs: attrs, 26257 } 26258 op := scope.AddOperation(opspec) 26259 return op.Output(0) 26260 } 26261 26262 // ResourceSparseApplyProximalGradientDescentAttr is an optional argument to ResourceSparseApplyProximalGradientDescent. 26263 type ResourceSparseApplyProximalGradientDescentAttr func(optionalAttr) 26264 26265 // ResourceSparseApplyProximalGradientDescentUseLocking sets the optional use_locking attribute to value. 26266 // 26267 // value: If True, the subtraction will be protected by a lock; 26268 // otherwise the behavior is undefined, but may exhibit less contention. 26269 // If not specified, defaults to false 26270 func ResourceSparseApplyProximalGradientDescentUseLocking(value bool) ResourceSparseApplyProximalGradientDescentAttr { 26271 return func(m optionalAttr) { 26272 m["use_locking"] = value 26273 } 26274 } 26275 26276 // Sparse update '*var' as FOBOS algorithm with fixed learning rate. 26277 // 26278 // That is for rows we have grad for, we update var as follows: 26279 // prox_v = var - alpha * grad 26280 // var = sign(prox_v)/(1+alpha*l2) * max{|prox_v|-alpha*l1,0} 26281 // 26282 // Arguments: 26283 // var_: Should be from a Variable(). 26284 // alpha: Scaling factor. Must be a scalar. 26285 // l1: L1 regularization. Must be a scalar. 26286 // l2: L2 regularization. Must be a scalar. 26287 // grad: The gradient. 26288 // indices: A vector of indices into the first dimension of var and accum. 26289 // 26290 // Returns the created operation. 26291 func ResourceSparseApplyProximalGradientDescent(scope *Scope, var_ tf.Output, alpha tf.Output, l1 tf.Output, l2 tf.Output, grad tf.Output, indices tf.Output, optional ...ResourceSparseApplyProximalGradientDescentAttr) (o *tf.Operation) { 26292 if scope.Err() != nil { 26293 return 26294 } 26295 attrs := map[string]interface{}{} 26296 for _, a := range optional { 26297 a(attrs) 26298 } 26299 opspec := tf.OpSpec{ 26300 Type: "ResourceSparseApplyProximalGradientDescent", 26301 Input: []tf.Input{ 26302 var_, alpha, l1, l2, grad, indices, 26303 }, 26304 Attrs: attrs, 26305 } 26306 return scope.AddOperation(opspec) 26307 } 26308 26309 // Check if the input matches the regex pattern. 26310 // 26311 // The input is a string tensor of any shape. The pattern is the 26312 // regular expression to be matched with every element of the input tensor. 26313 // The boolean values (True or False) of the output tensor indicate 26314 // if the input matches the regex pattern provided. 26315 // 26316 // The pattern follows the re2 syntax (https://github.com/google/re2/wiki/Syntax) 26317 // 26318 // Arguments: 26319 // input: A string tensor of the text to be processed. 26320 // pattern: The regular expression to match the input. 26321 // 26322 // Returns A bool tensor with the same shape as `input`. 26323 func StaticRegexFullMatch(scope *Scope, input tf.Output, pattern string) (output tf.Output) { 26324 if scope.Err() != nil { 26325 return 26326 } 26327 attrs := map[string]interface{}{"pattern": pattern} 26328 opspec := tf.OpSpec{ 26329 Type: "StaticRegexFullMatch", 26330 Input: []tf.Input{ 26331 input, 26332 }, 26333 Attrs: attrs, 26334 } 26335 op := scope.AddOperation(opspec) 26336 return op.Output(0) 26337 } 26338 26339 // OutfeedDequeueAttr is an optional argument to OutfeedDequeue. 26340 type OutfeedDequeueAttr func(optionalAttr) 26341 26342 // OutfeedDequeueDeviceOrdinal sets the optional device_ordinal attribute to value. 26343 // 26344 // value: The TPU device to use. This should be -1 when the Op 26345 // is running on a TPU device, and >= 0 when the Op is running on the CPU 26346 // device. 26347 // If not specified, defaults to -1 26348 func OutfeedDequeueDeviceOrdinal(value int64) OutfeedDequeueAttr { 26349 return func(m optionalAttr) { 26350 m["device_ordinal"] = value 26351 } 26352 } 26353 26354 // Retrieves a single tensor from the computation outfeed. 26355 // 26356 // This operation will block indefinitely until data is available. 26357 // 26358 // Arguments: 26359 // dtype: The type of elements in the tensor. 26360 // shape: The shape of the tensor. 26361 // 26362 // Returns A tensor that will be read from the device outfeed. 26363 func OutfeedDequeue(scope *Scope, dtype tf.DataType, shape tf.Shape, optional ...OutfeedDequeueAttr) (output tf.Output) { 26364 if scope.Err() != nil { 26365 return 26366 } 26367 attrs := map[string]interface{}{"dtype": dtype, "shape": shape} 26368 for _, a := range optional { 26369 a(attrs) 26370 } 26371 opspec := tf.OpSpec{ 26372 Type: "OutfeedDequeue", 26373 26374 Attrs: attrs, 26375 } 26376 op := scope.AddOperation(opspec) 26377 return op.Output(0) 26378 } 26379 26380 // RandomPoissonV2Attr is an optional argument to RandomPoissonV2. 26381 type RandomPoissonV2Attr func(optionalAttr) 26382 26383 // RandomPoissonV2Seed sets the optional seed attribute to value. 26384 // 26385 // value: If either `seed` or `seed2` are set to be non-zero, the random number 26386 // generator is seeded by the given seed. Otherwise, it is seeded by a 26387 // random seed. 26388 // If not specified, defaults to 0 26389 func RandomPoissonV2Seed(value int64) RandomPoissonV2Attr { 26390 return func(m optionalAttr) { 26391 m["seed"] = value 26392 } 26393 } 26394 26395 // RandomPoissonV2Seed2 sets the optional seed2 attribute to value. 26396 // 26397 // value: A second seed to avoid seed collision. 26398 // If not specified, defaults to 0 26399 func RandomPoissonV2Seed2(value int64) RandomPoissonV2Attr { 26400 return func(m optionalAttr) { 26401 m["seed2"] = value 26402 } 26403 } 26404 26405 // RandomPoissonV2Dtype sets the optional dtype attribute to value. 26406 // If not specified, defaults to DT_INT64 26407 func RandomPoissonV2Dtype(value tf.DataType) RandomPoissonV2Attr { 26408 return func(m optionalAttr) { 26409 m["dtype"] = value 26410 } 26411 } 26412 26413 // Outputs random values from the Poisson distribution(s) described by rate. 26414 // 26415 // This op uses two algorithms, depending on rate. If rate >= 10, then 26416 // the algorithm by Hormann is used to acquire samples via 26417 // transformation-rejection. 26418 // See http://www.sciencedirect.com/science/article/pii/0167668793909974. 26419 // 26420 // Otherwise, Knuth's algorithm is used to acquire samples via multiplying uniform 26421 // random variables. 26422 // See Donald E. Knuth (1969). Seminumerical Algorithms. The Art of Computer 26423 // Programming, Volume 2. Addison Wesley 26424 // 26425 // Arguments: 26426 // shape: 1-D integer tensor. Shape of independent samples to draw from each 26427 // distribution described by the shape parameters given in rate. 26428 // rate: A tensor in which each scalar is a "rate" parameter describing the 26429 // associated poisson distribution. 26430 // 26431 // Returns A tensor with shape `shape + shape(rate)`. Each slice 26432 // `[:, ..., :, i0, i1, ...iN]` contains the samples drawn for 26433 // `rate[i0, i1, ...iN]`. 26434 func RandomPoissonV2(scope *Scope, shape tf.Output, rate tf.Output, optional ...RandomPoissonV2Attr) (output tf.Output) { 26435 if scope.Err() != nil { 26436 return 26437 } 26438 attrs := map[string]interface{}{} 26439 for _, a := range optional { 26440 a(attrs) 26441 } 26442 opspec := tf.OpSpec{ 26443 Type: "RandomPoissonV2", 26444 Input: []tf.Input{ 26445 shape, rate, 26446 }, 26447 Attrs: attrs, 26448 } 26449 op := scope.AddOperation(opspec) 26450 return op.Output(0) 26451 } 26452 26453 // RetrieveTPUEmbeddingRMSPropParametersGradAccumDebugAttr is an optional argument to RetrieveTPUEmbeddingRMSPropParametersGradAccumDebug. 26454 type RetrieveTPUEmbeddingRMSPropParametersGradAccumDebugAttr func(optionalAttr) 26455 26456 // RetrieveTPUEmbeddingRMSPropParametersGradAccumDebugTableId sets the optional table_id attribute to value. 26457 // If not specified, defaults to -1 26458 // 26459 // REQUIRES: value >= -1 26460 func RetrieveTPUEmbeddingRMSPropParametersGradAccumDebugTableId(value int64) RetrieveTPUEmbeddingRMSPropParametersGradAccumDebugAttr { 26461 return func(m optionalAttr) { 26462 m["table_id"] = value 26463 } 26464 } 26465 26466 // RetrieveTPUEmbeddingRMSPropParametersGradAccumDebugTableName sets the optional table_name attribute to value. 26467 // If not specified, defaults to "" 26468 func RetrieveTPUEmbeddingRMSPropParametersGradAccumDebugTableName(value string) RetrieveTPUEmbeddingRMSPropParametersGradAccumDebugAttr { 26469 return func(m optionalAttr) { 26470 m["table_name"] = value 26471 } 26472 } 26473 26474 // Retrieve RMSProp embedding parameters with debug support. 26475 // 26476 // An op that retrieves optimization parameters from embedding to host 26477 // memory. Must be preceded by a ConfigureTPUEmbeddingHost op that sets up 26478 // the correct embedding table configuration. For example, this op is 26479 // used to retrieve updated parameters before saving a checkpoint. 26480 // 26481 // Returns Parameter parameters updated by the RMSProp optimization algorithm.Parameter ms updated by the RMSProp optimization algorithm.Parameter mom updated by the RMSProp optimization algorithm.Parameter gradient_accumulators updated by the RMSProp optimization algorithm. 26482 func RetrieveTPUEmbeddingRMSPropParametersGradAccumDebug(scope *Scope, num_shards int64, shard_id int64, optional ...RetrieveTPUEmbeddingRMSPropParametersGradAccumDebugAttr) (parameters tf.Output, ms tf.Output, mom tf.Output, gradient_accumulators tf.Output) { 26483 if scope.Err() != nil { 26484 return 26485 } 26486 attrs := map[string]interface{}{"num_shards": num_shards, "shard_id": shard_id} 26487 for _, a := range optional { 26488 a(attrs) 26489 } 26490 opspec := tf.OpSpec{ 26491 Type: "RetrieveTPUEmbeddingRMSPropParametersGradAccumDebug", 26492 26493 Attrs: attrs, 26494 } 26495 op := scope.AddOperation(opspec) 26496 return op.Output(0), op.Output(1), op.Output(2), op.Output(3) 26497 } 26498 26499 // Computes the gradient for the rsqrt of `x` wrt its input. 26500 // 26501 // Specifically, `grad = dy * -0.5 * y^3`, where `y = rsqrt(x)`, and `dy` 26502 // is the corresponding input gradient. 26503 func RsqrtGrad(scope *Scope, y tf.Output, dy tf.Output) (z tf.Output) { 26504 if scope.Err() != nil { 26505 return 26506 } 26507 opspec := tf.OpSpec{ 26508 Type: "RsqrtGrad", 26509 Input: []tf.Input{ 26510 y, dy, 26511 }, 26512 } 26513 op := scope.AddOperation(opspec) 26514 return op.Output(0) 26515 } 26516 26517 // Encode audio data using the WAV file format. 26518 // 26519 // This operation will generate a string suitable to be saved out to create a .wav 26520 // audio file. It will be encoded in the 16-bit PCM format. It takes in float 26521 // values in the range -1.0f to 1.0f, and any outside that value will be clamped to 26522 // that range. 26523 // 26524 // `audio` is a 2-D float Tensor of shape `[length, channels]`. 26525 // `sample_rate` is a scalar Tensor holding the rate to use (e.g. 44100). 26526 // 26527 // Arguments: 26528 // audio: 2-D with shape `[length, channels]`. 26529 // sample_rate: Scalar containing the sample frequency. 26530 // 26531 // Returns 0-D. WAV-encoded file contents. 26532 func EncodeWav(scope *Scope, audio tf.Output, sample_rate tf.Output) (contents tf.Output) { 26533 if scope.Err() != nil { 26534 return 26535 } 26536 opspec := tf.OpSpec{ 26537 Type: "EncodeWav", 26538 Input: []tf.Input{ 26539 audio, sample_rate, 26540 }, 26541 } 26542 op := scope.AddOperation(opspec) 26543 return op.Output(0) 26544 } 26545 26546 // ResourceApplyAdaMaxAttr is an optional argument to ResourceApplyAdaMax. 26547 type ResourceApplyAdaMaxAttr func(optionalAttr) 26548 26549 // ResourceApplyAdaMaxUseLocking sets the optional use_locking attribute to value. 26550 // 26551 // value: If `True`, updating of the var, m, and v tensors will be protected 26552 // by a lock; otherwise the behavior is undefined, but may exhibit less 26553 // contention. 26554 // If not specified, defaults to false 26555 func ResourceApplyAdaMaxUseLocking(value bool) ResourceApplyAdaMaxAttr { 26556 return func(m optionalAttr) { 26557 m["use_locking"] = value 26558 } 26559 } 26560 26561 // Update '*var' according to the AdaMax algorithm. 26562 // 26563 // m_t <- beta1 * m_{t-1} + (1 - beta1) * g 26564 // v_t <- max(beta2 * v_{t-1}, abs(g)) 26565 // variable <- variable - learning_rate / (1 - beta1^t) * m_t / (v_t + epsilon) 26566 // 26567 // Arguments: 26568 // var_: Should be from a Variable(). 26569 // m: Should be from a Variable(). 26570 // v: Should be from a Variable(). 26571 // beta1_power: Must be a scalar. 26572 // lr: Scaling factor. Must be a scalar. 26573 // beta1: Momentum factor. Must be a scalar. 26574 // beta2: Momentum factor. Must be a scalar. 26575 // epsilon: Ridge term. Must be a scalar. 26576 // grad: The gradient. 26577 // 26578 // Returns the created operation. 26579 func ResourceApplyAdaMax(scope *Scope, var_ tf.Output, m tf.Output, v tf.Output, beta1_power tf.Output, lr tf.Output, beta1 tf.Output, beta2 tf.Output, epsilon tf.Output, grad tf.Output, optional ...ResourceApplyAdaMaxAttr) (o *tf.Operation) { 26580 if scope.Err() != nil { 26581 return 26582 } 26583 attrs := map[string]interface{}{} 26584 for _, a := range optional { 26585 a(attrs) 26586 } 26587 opspec := tf.OpSpec{ 26588 Type: "ResourceApplyAdaMax", 26589 Input: []tf.Input{ 26590 var_, m, v, beta1_power, lr, beta1, beta2, epsilon, grad, 26591 }, 26592 Attrs: attrs, 26593 } 26594 return scope.AddOperation(opspec) 26595 } 26596 26597 // Computes atan of x element-wise. 26598 func Atan(scope *Scope, x tf.Output) (y tf.Output) { 26599 if scope.Err() != nil { 26600 return 26601 } 26602 opspec := tf.OpSpec{ 26603 Type: "Atan", 26604 Input: []tf.Input{ 26605 x, 26606 }, 26607 } 26608 op := scope.AddOperation(opspec) 26609 return op.Output(0) 26610 } 26611 26612 // AssertAttr is an optional argument to Assert. 26613 type AssertAttr func(optionalAttr) 26614 26615 // AssertSummarize sets the optional summarize attribute to value. 26616 // 26617 // value: Print this many entries of each tensor. 26618 // If not specified, defaults to 3 26619 func AssertSummarize(value int64) AssertAttr { 26620 return func(m optionalAttr) { 26621 m["summarize"] = value 26622 } 26623 } 26624 26625 // Asserts that the given condition is true. 26626 // 26627 // If `condition` evaluates to false, print the list of tensors in `data`. 26628 // `summarize` determines how many entries of the tensors to print. 26629 // 26630 // Arguments: 26631 // condition: The condition to evaluate. 26632 // data: The tensors to print out when condition is false. 26633 // 26634 // Returns the created operation. 26635 func Assert(scope *Scope, condition tf.Output, data []tf.Output, optional ...AssertAttr) (o *tf.Operation) { 26636 if scope.Err() != nil { 26637 return 26638 } 26639 attrs := map[string]interface{}{} 26640 for _, a := range optional { 26641 a(attrs) 26642 } 26643 opspec := tf.OpSpec{ 26644 Type: "Assert", 26645 Input: []tf.Input{ 26646 condition, tf.OutputList(data), 26647 }, 26648 Attrs: attrs, 26649 } 26650 return scope.AddOperation(opspec) 26651 } 26652 26653 // LoadTPUEmbeddingAdagradParametersGradAccumDebugAttr is an optional argument to LoadTPUEmbeddingAdagradParametersGradAccumDebug. 26654 type LoadTPUEmbeddingAdagradParametersGradAccumDebugAttr func(optionalAttr) 26655 26656 // LoadTPUEmbeddingAdagradParametersGradAccumDebugTableId sets the optional table_id attribute to value. 26657 // If not specified, defaults to -1 26658 // 26659 // REQUIRES: value >= -1 26660 func LoadTPUEmbeddingAdagradParametersGradAccumDebugTableId(value int64) LoadTPUEmbeddingAdagradParametersGradAccumDebugAttr { 26661 return func(m optionalAttr) { 26662 m["table_id"] = value 26663 } 26664 } 26665 26666 // LoadTPUEmbeddingAdagradParametersGradAccumDebugTableName sets the optional table_name attribute to value. 26667 // If not specified, defaults to "" 26668 func LoadTPUEmbeddingAdagradParametersGradAccumDebugTableName(value string) LoadTPUEmbeddingAdagradParametersGradAccumDebugAttr { 26669 return func(m optionalAttr) { 26670 m["table_name"] = value 26671 } 26672 } 26673 26674 // Load Adagrad embedding parameters with debug support. 26675 // 26676 // An op that loads optimization parameters into HBM for embedding. Must be 26677 // preceded by a ConfigureTPUEmbeddingHost op that sets up the correct 26678 // embedding table configuration. For example, this op is used to install 26679 // parameters that are loaded from a checkpoint before a training loop is 26680 // executed. 26681 // 26682 // Arguments: 26683 // parameters: Value of parameters used in the Adagrad optimization algorithm. 26684 // accumulators: Value of accumulators used in the Adagrad optimization algorithm. 26685 // gradient_accumulators: Value of gradient_accumulators used in the Adagrad optimization algorithm. 26686 // 26687 // 26688 // 26689 // Returns the created operation. 26690 func LoadTPUEmbeddingAdagradParametersGradAccumDebug(scope *Scope, parameters tf.Output, accumulators tf.Output, gradient_accumulators tf.Output, num_shards int64, shard_id int64, optional ...LoadTPUEmbeddingAdagradParametersGradAccumDebugAttr) (o *tf.Operation) { 26691 if scope.Err() != nil { 26692 return 26693 } 26694 attrs := map[string]interface{}{"num_shards": num_shards, "shard_id": shard_id} 26695 for _, a := range optional { 26696 a(attrs) 26697 } 26698 opspec := tf.OpSpec{ 26699 Type: "LoadTPUEmbeddingAdagradParametersGradAccumDebug", 26700 Input: []tf.Input{ 26701 parameters, accumulators, gradient_accumulators, 26702 }, 26703 Attrs: attrs, 26704 } 26705 return scope.AddOperation(opspec) 26706 } 26707 26708 // RetrieveTPUEmbeddingFTRLParametersGradAccumDebugAttr is an optional argument to RetrieveTPUEmbeddingFTRLParametersGradAccumDebug. 26709 type RetrieveTPUEmbeddingFTRLParametersGradAccumDebugAttr func(optionalAttr) 26710 26711 // RetrieveTPUEmbeddingFTRLParametersGradAccumDebugTableId sets the optional table_id attribute to value. 26712 // If not specified, defaults to -1 26713 // 26714 // REQUIRES: value >= -1 26715 func RetrieveTPUEmbeddingFTRLParametersGradAccumDebugTableId(value int64) RetrieveTPUEmbeddingFTRLParametersGradAccumDebugAttr { 26716 return func(m optionalAttr) { 26717 m["table_id"] = value 26718 } 26719 } 26720 26721 // RetrieveTPUEmbeddingFTRLParametersGradAccumDebugTableName sets the optional table_name attribute to value. 26722 // If not specified, defaults to "" 26723 func RetrieveTPUEmbeddingFTRLParametersGradAccumDebugTableName(value string) RetrieveTPUEmbeddingFTRLParametersGradAccumDebugAttr { 26724 return func(m optionalAttr) { 26725 m["table_name"] = value 26726 } 26727 } 26728 26729 // Retrieve FTRL embedding parameters with debug support. 26730 // 26731 // An op that retrieves optimization parameters from embedding to host 26732 // memory. Must be preceded by a ConfigureTPUEmbeddingHost op that sets up 26733 // the correct embedding table configuration. For example, this op is 26734 // used to retrieve updated parameters before saving a checkpoint. 26735 // 26736 // Returns Parameter parameters updated by the FTRL optimization algorithm.Parameter accumulators updated by the FTRL optimization algorithm.Parameter linears updated by the FTRL optimization algorithm.Parameter gradient_accumulators updated by the FTRL optimization algorithm. 26737 func RetrieveTPUEmbeddingFTRLParametersGradAccumDebug(scope *Scope, num_shards int64, shard_id int64, optional ...RetrieveTPUEmbeddingFTRLParametersGradAccumDebugAttr) (parameters tf.Output, accumulators tf.Output, linears tf.Output, gradient_accumulators tf.Output) { 26738 if scope.Err() != nil { 26739 return 26740 } 26741 attrs := map[string]interface{}{"num_shards": num_shards, "shard_id": shard_id} 26742 for _, a := range optional { 26743 a(attrs) 26744 } 26745 opspec := tf.OpSpec{ 26746 Type: "RetrieveTPUEmbeddingFTRLParametersGradAccumDebug", 26747 26748 Attrs: attrs, 26749 } 26750 op := scope.AddOperation(opspec) 26751 return op.Output(0), op.Output(1), op.Output(2), op.Output(3) 26752 } 26753 26754 // A dataset that splits the elements of its input into multiple elements. 26755 func ExperimentalUnbatchDataset(scope *Scope, input_dataset tf.Output, output_types []tf.DataType, output_shapes []tf.Shape) (handle tf.Output) { 26756 if scope.Err() != nil { 26757 return 26758 } 26759 attrs := map[string]interface{}{"output_types": output_types, "output_shapes": output_shapes} 26760 opspec := tf.OpSpec{ 26761 Type: "ExperimentalUnbatchDataset", 26762 Input: []tf.Input{ 26763 input_dataset, 26764 }, 26765 Attrs: attrs, 26766 } 26767 op := scope.AddOperation(opspec) 26768 return op.Output(0) 26769 } 26770 26771 // StringFormatAttr is an optional argument to StringFormat. 26772 type StringFormatAttr func(optionalAttr) 26773 26774 // StringFormatTemplate sets the optional template attribute to value. 26775 // 26776 // value: A string, the template to format tensor summaries into. 26777 // If not specified, defaults to "%s" 26778 func StringFormatTemplate(value string) StringFormatAttr { 26779 return func(m optionalAttr) { 26780 m["template"] = value 26781 } 26782 } 26783 26784 // StringFormatPlaceholder sets the optional placeholder attribute to value. 26785 // 26786 // value: A string, at each placeholder in the template a subsequent tensor summary will be inserted. 26787 // If not specified, defaults to "%s" 26788 func StringFormatPlaceholder(value string) StringFormatAttr { 26789 return func(m optionalAttr) { 26790 m["placeholder"] = value 26791 } 26792 } 26793 26794 // StringFormatSummarize sets the optional summarize attribute to value. 26795 // 26796 // value: When formatting the tensor summaries print the first and last summarize entries of each tensor dimension. 26797 // If not specified, defaults to 3 26798 func StringFormatSummarize(value int64) StringFormatAttr { 26799 return func(m optionalAttr) { 26800 m["summarize"] = value 26801 } 26802 } 26803 26804 // Formats a string template using a list of tensors. 26805 // 26806 // Formats a string template using a list of tensors, pretty-printing tensor summaries. 26807 // 26808 // Arguments: 26809 // inputs: The list of tensors to format into the placeholder string. 26810 // 26811 // Returns = The resulting string scalar. 26812 func StringFormat(scope *Scope, inputs []tf.Output, optional ...StringFormatAttr) (output tf.Output) { 26813 if scope.Err() != nil { 26814 return 26815 } 26816 attrs := map[string]interface{}{} 26817 for _, a := range optional { 26818 a(attrs) 26819 } 26820 opspec := tf.OpSpec{ 26821 Type: "StringFormat", 26822 Input: []tf.Input{ 26823 tf.OutputList(inputs), 26824 }, 26825 Attrs: attrs, 26826 } 26827 op := scope.AddOperation(opspec) 26828 return op.Output(0) 26829 } 26830 26831 // Returns true if queue is closed. 26832 // 26833 // This operation returns true if the queue is closed and false if the queue 26834 // is open. 26835 // 26836 // Arguments: 26837 // handle: The handle to a queue. 26838 func QueueIsClosedV2(scope *Scope, handle tf.Output) (is_closed tf.Output) { 26839 if scope.Err() != nil { 26840 return 26841 } 26842 opspec := tf.OpSpec{ 26843 Type: "QueueIsClosedV2", 26844 Input: []tf.Input{ 26845 handle, 26846 }, 26847 } 26848 op := scope.AddOperation(opspec) 26849 return op.Output(0) 26850 } 26851 26852 // Computes inverse hyperbolic tangent of x element-wise. 26853 func Atanh(scope *Scope, x tf.Output) (y tf.Output) { 26854 if scope.Err() != nil { 26855 return 26856 } 26857 opspec := tf.OpSpec{ 26858 Type: "Atanh", 26859 Input: []tf.Input{ 26860 x, 26861 }, 26862 } 26863 op := scope.AddOperation(opspec) 26864 return op.Output(0) 26865 } 26866 26867 // Computes the reverse mode backpropagated gradient of the Cholesky algorithm. 26868 // 26869 // For an explanation see "Differentiation of the Cholesky algorithm" by 26870 // Iain Murray http://arxiv.org/abs/1602.07527. 26871 // 26872 // Arguments: 26873 // l: Output of batch Cholesky algorithm l = cholesky(A). Shape is `[..., M, M]`. 26874 // Algorithm depends only on lower triangular part of the innermost matrices of 26875 // this tensor. 26876 // grad: df/dl where f is some scalar function. Shape is `[..., M, M]`. 26877 // Algorithm depends only on lower triangular part of the innermost matrices of 26878 // this tensor. 26879 // 26880 // Returns Symmetrized version of df/dA . Shape is `[..., M, M]` 26881 func CholeskyGrad(scope *Scope, l tf.Output, grad tf.Output) (output tf.Output) { 26882 if scope.Err() != nil { 26883 return 26884 } 26885 opspec := tf.OpSpec{ 26886 Type: "CholeskyGrad", 26887 Input: []tf.Input{ 26888 l, grad, 26889 }, 26890 } 26891 op := scope.AddOperation(opspec) 26892 return op.Output(0) 26893 } 26894 26895 // Assigns a new value to a variable. 26896 // 26897 // Any ReadVariableOp with a control dependency on this op is guaranteed to return 26898 // this value or a subsequent newer value of the variable. 26899 // 26900 // Arguments: 26901 // resource: handle to the resource in which to store the variable. 26902 // value: the value to set the new tensor to use. 26903 // 26904 // Returns the created operation. 26905 func AssignVariableOp(scope *Scope, resource tf.Output, value tf.Output) (o *tf.Operation) { 26906 if scope.Err() != nil { 26907 return 26908 } 26909 opspec := tf.OpSpec{ 26910 Type: "AssignVariableOp", 26911 Input: []tf.Input{ 26912 resource, value, 26913 }, 26914 } 26915 return scope.AddOperation(opspec) 26916 } 26917 26918 // Returns a tensor of ones with the same shape and type as x. 26919 // 26920 // Arguments: 26921 // x: a tensor of type T. 26922 // 26923 // Returns a tensor of the same shape and type as x but filled with ones. 26924 func OnesLike(scope *Scope, x tf.Output) (y tf.Output) { 26925 if scope.Err() != nil { 26926 return 26927 } 26928 opspec := tf.OpSpec{ 26929 Type: "OnesLike", 26930 Input: []tf.Input{ 26931 x, 26932 }, 26933 } 26934 op := scope.AddOperation(opspec) 26935 return op.Output(0) 26936 } 26937 26938 // The gradient of SparseFillEmptyRows. 26939 // 26940 // Takes vectors reverse_index_map, shaped `[N]`, and grad_values, 26941 // shaped `[N_full]`, where `N_full >= N` and copies data into either 26942 // `d_values` or `d_default_value`. Here `d_values` is shaped `[N]` and 26943 // `d_default_value` is a scalar. 26944 // 26945 // d_values[j] = grad_values[reverse_index_map[j]] 26946 // d_default_value = sum_{k : 0 .. N_full - 1} ( 26947 // grad_values[k] * 1{k not in reverse_index_map}) 26948 // 26949 // Arguments: 26950 // reverse_index_map: 1-D. The reverse index map from SparseFillEmptyRows. 26951 // grad_values: 1-D. The gradients from backprop. 26952 // 26953 // Returns 1-D. The backprop into values.0-D. The backprop into default_value. 26954 func SparseFillEmptyRowsGrad(scope *Scope, reverse_index_map tf.Output, grad_values tf.Output) (d_values tf.Output, d_default_value tf.Output) { 26955 if scope.Err() != nil { 26956 return 26957 } 26958 opspec := tf.OpSpec{ 26959 Type: "SparseFillEmptyRowsGrad", 26960 Input: []tf.Input{ 26961 reverse_index_map, grad_values, 26962 }, 26963 } 26964 op := scope.AddOperation(opspec) 26965 return op.Output(0), op.Output(1) 26966 } 26967 26968 // Creates a dataset that zips together `input_datasets`. 26969 func ZipDataset(scope *Scope, input_datasets []tf.Output, output_types []tf.DataType, output_shapes []tf.Shape) (handle tf.Output) { 26970 if scope.Err() != nil { 26971 return 26972 } 26973 attrs := map[string]interface{}{"output_types": output_types, "output_shapes": output_shapes} 26974 opspec := tf.OpSpec{ 26975 Type: "ZipDataset", 26976 Input: []tf.Input{ 26977 tf.OutputList(input_datasets), 26978 }, 26979 Attrs: attrs, 26980 } 26981 op := scope.AddOperation(opspec) 26982 return op.Output(0) 26983 } 26984 26985 // LoadTPUEmbeddingAdagradParametersAttr is an optional argument to LoadTPUEmbeddingAdagradParameters. 26986 type LoadTPUEmbeddingAdagradParametersAttr func(optionalAttr) 26987 26988 // LoadTPUEmbeddingAdagradParametersTableId sets the optional table_id attribute to value. 26989 // If not specified, defaults to -1 26990 // 26991 // REQUIRES: value >= -1 26992 func LoadTPUEmbeddingAdagradParametersTableId(value int64) LoadTPUEmbeddingAdagradParametersAttr { 26993 return func(m optionalAttr) { 26994 m["table_id"] = value 26995 } 26996 } 26997 26998 // LoadTPUEmbeddingAdagradParametersTableName sets the optional table_name attribute to value. 26999 // If not specified, defaults to "" 27000 func LoadTPUEmbeddingAdagradParametersTableName(value string) LoadTPUEmbeddingAdagradParametersAttr { 27001 return func(m optionalAttr) { 27002 m["table_name"] = value 27003 } 27004 } 27005 27006 // Load Adagrad embedding parameters. 27007 // 27008 // An op that loads optimization parameters into HBM for embedding. Must be 27009 // preceded by a ConfigureTPUEmbeddingHost op that sets up the correct 27010 // embedding table configuration. For example, this op is used to install 27011 // parameters that are loaded from a checkpoint before a training loop is 27012 // executed. 27013 // 27014 // Arguments: 27015 // parameters: Value of parameters used in the Adagrad optimization algorithm. 27016 // accumulators: Value of accumulators used in the Adagrad optimization algorithm. 27017 // 27018 // 27019 // 27020 // Returns the created operation. 27021 func LoadTPUEmbeddingAdagradParameters(scope *Scope, parameters tf.Output, accumulators tf.Output, num_shards int64, shard_id int64, optional ...LoadTPUEmbeddingAdagradParametersAttr) (o *tf.Operation) { 27022 if scope.Err() != nil { 27023 return 27024 } 27025 attrs := map[string]interface{}{"num_shards": num_shards, "shard_id": shard_id} 27026 for _, a := range optional { 27027 a(attrs) 27028 } 27029 opspec := tf.OpSpec{ 27030 Type: "LoadTPUEmbeddingAdagradParameters", 27031 Input: []tf.Input{ 27032 parameters, accumulators, 27033 }, 27034 Attrs: attrs, 27035 } 27036 return scope.AddOperation(opspec) 27037 } 27038 27039 // Strip leading and trailing whitespaces from the Tensor. 27040 // 27041 // Arguments: 27042 // input: A string `Tensor` of any shape. 27043 // 27044 // Returns A string `Tensor` of the same shape as the input. 27045 func StringStrip(scope *Scope, input tf.Output) (output tf.Output) { 27046 if scope.Err() != nil { 27047 return 27048 } 27049 opspec := tf.OpSpec{ 27050 Type: "StringStrip", 27051 Input: []tf.Input{ 27052 input, 27053 }, 27054 } 27055 op := scope.AddOperation(opspec) 27056 return op.Output(0) 27057 } 27058 27059 // Converts each string in the input Tensor to its hash mod by a number of buckets. 27060 // 27061 // The hash function is deterministic on the content of the string within the 27062 // process. The hash function is a keyed hash function, where attribute `key` 27063 // defines the key of the hash function. `key` is an array of 2 elements. 27064 // 27065 // A strong hash is important when inputs may be malicious, e.g. URLs with 27066 // additional components. Adversaries could try to make their inputs hash to the 27067 // same bucket for a denial-of-service attack or to skew the results. A strong 27068 // hash prevents this by making it difficult, if not infeasible, to compute inputs 27069 // that hash to the same bucket. This comes at a cost of roughly 4x higher compute 27070 // time than `tf.string_to_hash_bucket_fast`. 27071 // 27072 // Arguments: 27073 // input: The strings to assign a hash bucket. 27074 // num_buckets: The number of buckets. 27075 // key: The key for the keyed hash function passed as a list of two uint64 27076 // elements. 27077 // 27078 // Returns A Tensor of the same shape as the input `string_tensor`. 27079 func StringToHashBucketStrong(scope *Scope, input tf.Output, num_buckets int64, key []int64) (output tf.Output) { 27080 if scope.Err() != nil { 27081 return 27082 } 27083 attrs := map[string]interface{}{"num_buckets": num_buckets, "key": key} 27084 opspec := tf.OpSpec{ 27085 Type: "StringToHashBucketStrong", 27086 Input: []tf.Input{ 27087 input, 27088 }, 27089 Attrs: attrs, 27090 } 27091 op := scope.AddOperation(opspec) 27092 return op.Output(0) 27093 } 27094 27095 // StringLengthAttr is an optional argument to StringLength. 27096 type StringLengthAttr func(optionalAttr) 27097 27098 // StringLengthUnit sets the optional unit attribute to value. 27099 // 27100 // value: The unit that is counted to compute string length. One of: `"BYTE"` (for 27101 // the number of bytes in each string) or `"UTF8_CHAR"` (for the number of UTF-8 27102 // encoded Unicode code points in each string). Results are undefined 27103 // if `unit=UTF8_CHAR` and the `input` strings do not contain structurally 27104 // valid UTF-8. 27105 // If not specified, defaults to "BYTE" 27106 func StringLengthUnit(value string) StringLengthAttr { 27107 return func(m optionalAttr) { 27108 m["unit"] = value 27109 } 27110 } 27111 27112 // String lengths of `input`. 27113 // 27114 // Computes the length of each string given in the input tensor. 27115 // 27116 // Arguments: 27117 // input: The string for which to compute the length. 27118 // 27119 // Returns Integer tensor that has the same shape as `input`. The output contains the 27120 // element-wise string lengths of `input`. 27121 func StringLength(scope *Scope, input tf.Output, optional ...StringLengthAttr) (output tf.Output) { 27122 if scope.Err() != nil { 27123 return 27124 } 27125 attrs := map[string]interface{}{} 27126 for _, a := range optional { 27127 a(attrs) 27128 } 27129 opspec := tf.OpSpec{ 27130 Type: "StringLength", 27131 Input: []tf.Input{ 27132 input, 27133 }, 27134 Attrs: attrs, 27135 } 27136 op := scope.AddOperation(opspec) 27137 return op.Output(0) 27138 } 27139 27140 // Performs gradient updates of embedding tables. 27141 // 27142 // Arguments: 27143 // inputs: A TensorList of gradients with which to update embedding tables. 27144 // This argument has the same length and shapes as the return value of 27145 // RecvTPUEmbeddingActivations, but contains gradients of the model's loss 27146 // with respect to the embedding activations. The embedding tables are updated 27147 // from these gradients via the optimizer specified in the TPU embedding 27148 // configuration given to tpu.initialize_system. 27149 // learning_rates: A TensorList of float32 scalars, one for each dynamic learning 27150 // rate tag: see the comments in 27151 // //third_party/tensorflow/core/protobuf/tpu/optimization_parameters.proto. 27152 // Multiple tables can share the same dynamic learning rate tag as specified 27153 // in the configuration. If the learning rates for all tables are constant, 27154 // this list should be empty. 27155 // config: Serialized TPUEmbeddingConfiguration proto. 27156 // 27157 // Returns the created operation. 27158 func SendTPUEmbeddingGradients(scope *Scope, inputs []tf.Output, learning_rates []tf.Output, config string) (o *tf.Operation) { 27159 if scope.Err() != nil { 27160 return 27161 } 27162 attrs := map[string]interface{}{"config": config} 27163 opspec := tf.OpSpec{ 27164 Type: "SendTPUEmbeddingGradients", 27165 Input: []tf.Input{ 27166 tf.OutputList(inputs), tf.OutputList(learning_rates), 27167 }, 27168 Attrs: attrs, 27169 } 27170 return scope.AddOperation(opspec) 27171 } 27172 27173 // Computes numerical negative value element-wise. 27174 // 27175 // I.e., \\(y = -x\\). 27176 func Neg(scope *Scope, x tf.Output) (y tf.Output) { 27177 if scope.Err() != nil { 27178 return 27179 } 27180 opspec := tf.OpSpec{ 27181 Type: "Neg", 27182 Input: []tf.Input{ 27183 x, 27184 }, 27185 } 27186 op := scope.AddOperation(opspec) 27187 return op.Output(0) 27188 } 27189 27190 // Receives a tensor value broadcast from another device. 27191 func CollectiveBcastRecv(scope *Scope, T tf.DataType, group_size int64, group_key int64, instance_key int64, shape tf.Shape) (data tf.Output) { 27192 if scope.Err() != nil { 27193 return 27194 } 27195 attrs := map[string]interface{}{"T": T, "group_size": group_size, "group_key": group_key, "instance_key": instance_key, "shape": shape} 27196 opspec := tf.OpSpec{ 27197 Type: "CollectiveBcastRecv", 27198 27199 Attrs: attrs, 27200 } 27201 op := scope.AddOperation(opspec) 27202 return op.Output(0) 27203 } 27204 27205 // Decode web-safe base64-encoded strings. 27206 // 27207 // Input may or may not have padding at the end. See EncodeBase64 for padding. 27208 // Web-safe means that input must use - and _ instead of + and /. 27209 // 27210 // Arguments: 27211 // input: Base64 strings to decode. 27212 // 27213 // Returns Decoded strings. 27214 func DecodeBase64(scope *Scope, input tf.Output) (output tf.Output) { 27215 if scope.Err() != nil { 27216 return 27217 } 27218 opspec := tf.OpSpec{ 27219 Type: "DecodeBase64", 27220 Input: []tf.Input{ 27221 input, 27222 }, 27223 } 27224 op := scope.AddOperation(opspec) 27225 return op.Output(0) 27226 } 27227 27228 // SubstrAttr is an optional argument to Substr. 27229 type SubstrAttr func(optionalAttr) 27230 27231 // SubstrUnit sets the optional unit attribute to value. 27232 // 27233 // value: The unit that is used to create the substring. One of: `"BYTE"` (for 27234 // defining position and length by bytes) or `"UTF8_CHAR"` (for the UTF-8 27235 // encoded Unicode code points). The default is `"BYTE"`. Results are undefined if 27236 // `unit=UTF8_CHAR` and the `input` strings do not contain structurally valid 27237 // UTF-8. 27238 // If not specified, defaults to "BYTE" 27239 func SubstrUnit(value string) SubstrAttr { 27240 return func(m optionalAttr) { 27241 m["unit"] = value 27242 } 27243 } 27244 27245 // Return substrings from `Tensor` of strings. 27246 // 27247 // For each string in the input `Tensor`, creates a substring starting at index 27248 // `pos` with a total length of `len`. 27249 // 27250 // If `len` defines a substring that would extend beyond the length of the input 27251 // string, then as many characters as possible are used. 27252 // 27253 // A negative `pos` indicates distance within the string backwards from the end. 27254 // 27255 // If `pos` specifies an index which is out of range for any of the input strings, 27256 // then an `InvalidArgumentError` is thrown. 27257 // 27258 // `pos` and `len` must have the same shape, otherwise a `ValueError` is thrown on 27259 // Op creation. 27260 // 27261 // *NOTE*: `Substr` supports broadcasting up to two dimensions. More about 27262 // broadcasting 27263 // [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html) 27264 // 27265 // --- 27266 // 27267 // Examples 27268 // 27269 // Using scalar `pos` and `len`: 27270 // 27271 // ```python 27272 // input = [b'Hello', b'World'] 27273 // position = 1 27274 // length = 3 27275 // 27276 // output = [b'ell', b'orl'] 27277 // ``` 27278 // 27279 // Using `pos` and `len` with same shape as `input`: 27280 // 27281 // ```python 27282 // input = [[b'ten', b'eleven', b'twelve'], 27283 // [b'thirteen', b'fourteen', b'fifteen'], 27284 // [b'sixteen', b'seventeen', b'eighteen']] 27285 // position = [[1, 2, 3], 27286 // [1, 2, 3], 27287 // [1, 2, 3]] 27288 // length = [[2, 3, 4], 27289 // [4, 3, 2], 27290 // [5, 5, 5]] 27291 // 27292 // output = [[b'en', b'eve', b'lve'], 27293 // [b'hirt', b'urt', b'te'], 27294 // [b'ixtee', b'vente', b'hteen']] 27295 // ``` 27296 // 27297 // Broadcasting `pos` and `len` onto `input`: 27298 // 27299 // ``` 27300 // input = [[b'ten', b'eleven', b'twelve'], 27301 // [b'thirteen', b'fourteen', b'fifteen'], 27302 // [b'sixteen', b'seventeen', b'eighteen'], 27303 // [b'nineteen', b'twenty', b'twentyone']] 27304 // position = [1, 2, 3] 27305 // length = [1, 2, 3] 27306 // 27307 // output = [[b'e', b'ev', b'lve'], 27308 // [b'h', b'ur', b'tee'], 27309 // [b'i', b've', b'hte'], 27310 // [b'i', b'en', b'nty']] 27311 // ``` 27312 // 27313 // Broadcasting `input` onto `pos` and `len`: 27314 // 27315 // ``` 27316 // input = b'thirteen' 27317 // position = [1, 5, 7] 27318 // length = [3, 2, 1] 27319 // 27320 // output = [b'hir', b'ee', b'n'] 27321 // ``` 27322 // 27323 // Arguments: 27324 // input: Tensor of strings 27325 // pos: Scalar defining the position of first character in each substring 27326 // len: Scalar defining the number of characters to include in each substring 27327 // 27328 // Returns Tensor of substrings 27329 func Substr(scope *Scope, input tf.Output, pos tf.Output, len tf.Output, optional ...SubstrAttr) (output tf.Output) { 27330 if scope.Err() != nil { 27331 return 27332 } 27333 attrs := map[string]interface{}{} 27334 for _, a := range optional { 27335 a(attrs) 27336 } 27337 opspec := tf.OpSpec{ 27338 Type: "Substr", 27339 Input: []tf.Input{ 27340 input, pos, len, 27341 }, 27342 Attrs: attrs, 27343 } 27344 op := scope.AddOperation(opspec) 27345 return op.Output(0) 27346 } 27347 27348 // Exits the current frame to its parent frame. 27349 // 27350 // Exit makes its input `data` available to the parent frame. 27351 // 27352 // Arguments: 27353 // data: The tensor to be made available to the parent frame. 27354 // 27355 // Returns The same tensor as `data`. 27356 func Exit(scope *Scope, data tf.Output) (output tf.Output) { 27357 if scope.Err() != nil { 27358 return 27359 } 27360 opspec := tf.OpSpec{ 27361 Type: "Exit", 27362 Input: []tf.Input{ 27363 data, 27364 }, 27365 } 27366 op := scope.AddOperation(opspec) 27367 return op.Output(0) 27368 } 27369 27370 // RetrieveTPUEmbeddingProximalAdagradParametersAttr is an optional argument to RetrieveTPUEmbeddingProximalAdagradParameters. 27371 type RetrieveTPUEmbeddingProximalAdagradParametersAttr func(optionalAttr) 27372 27373 // RetrieveTPUEmbeddingProximalAdagradParametersTableId sets the optional table_id attribute to value. 27374 // If not specified, defaults to -1 27375 // 27376 // REQUIRES: value >= -1 27377 func RetrieveTPUEmbeddingProximalAdagradParametersTableId(value int64) RetrieveTPUEmbeddingProximalAdagradParametersAttr { 27378 return func(m optionalAttr) { 27379 m["table_id"] = value 27380 } 27381 } 27382 27383 // RetrieveTPUEmbeddingProximalAdagradParametersTableName sets the optional table_name attribute to value. 27384 // If not specified, defaults to "" 27385 func RetrieveTPUEmbeddingProximalAdagradParametersTableName(value string) RetrieveTPUEmbeddingProximalAdagradParametersAttr { 27386 return func(m optionalAttr) { 27387 m["table_name"] = value 27388 } 27389 } 27390 27391 // Retrieve proximal Adagrad embedding parameters. 27392 // 27393 // An op that retrieves optimization parameters from embedding to host 27394 // memory. Must be preceded by a ConfigureTPUEmbeddingHost op that sets up 27395 // the correct embedding table configuration. For example, this op is 27396 // used to retrieve updated parameters before saving a checkpoint. 27397 // 27398 // Returns Parameter parameters updated by the proximal Adagrad optimization algorithm.Parameter accumulators updated by the proximal Adagrad optimization algorithm. 27399 func RetrieveTPUEmbeddingProximalAdagradParameters(scope *Scope, num_shards int64, shard_id int64, optional ...RetrieveTPUEmbeddingProximalAdagradParametersAttr) (parameters tf.Output, accumulators tf.Output) { 27400 if scope.Err() != nil { 27401 return 27402 } 27403 attrs := map[string]interface{}{"num_shards": num_shards, "shard_id": shard_id} 27404 for _, a := range optional { 27405 a(attrs) 27406 } 27407 opspec := tf.OpSpec{ 27408 Type: "RetrieveTPUEmbeddingProximalAdagradParameters", 27409 27410 Attrs: attrs, 27411 } 27412 op := scope.AddOperation(opspec) 27413 return op.Output(0), op.Output(1) 27414 } 27415 27416 // Produce a string tensor that encodes the state of a Reader. 27417 // 27418 // Not all Readers support being serialized, so this can produce an 27419 // Unimplemented error. 27420 // 27421 // Arguments: 27422 // reader_handle: Handle to a Reader. 27423 func ReaderSerializeStateV2(scope *Scope, reader_handle tf.Output) (state tf.Output) { 27424 if scope.Err() != nil { 27425 return 27426 } 27427 opspec := tf.OpSpec{ 27428 Type: "ReaderSerializeStateV2", 27429 Input: []tf.Input{ 27430 reader_handle, 27431 }, 27432 } 27433 op := scope.AddOperation(opspec) 27434 return op.Output(0) 27435 } 27436 27437 // Returns the number of tensors in the input tensor list. 27438 // 27439 // input_handle: the input list 27440 // length: the number of tensors in the list 27441 func TensorListLength(scope *Scope, input_handle tf.Output) (length tf.Output) { 27442 if scope.Err() != nil { 27443 return 27444 } 27445 opspec := tf.OpSpec{ 27446 Type: "TensorListLength", 27447 Input: []tf.Input{ 27448 input_handle, 27449 }, 27450 } 27451 op := scope.AddOperation(opspec) 27452 return op.Output(0) 27453 } 27454 27455 // Creates a dataset with a range of values. Corresponds to python's xrange. 27456 // 27457 // Arguments: 27458 // start: corresponds to start in python's xrange(). 27459 // stop: corresponds to stop in python's xrange(). 27460 // step: corresponds to step in python's xrange(). 27461 // 27462 // 27463 func RangeDataset(scope *Scope, start tf.Output, stop tf.Output, step tf.Output, output_types []tf.DataType, output_shapes []tf.Shape) (handle tf.Output) { 27464 if scope.Err() != nil { 27465 return 27466 } 27467 attrs := map[string]interface{}{"output_types": output_types, "output_shapes": output_shapes} 27468 opspec := tf.OpSpec{ 27469 Type: "RangeDataset", 27470 Input: []tf.Input{ 27471 start, stop, step, 27472 }, 27473 Attrs: attrs, 27474 } 27475 op := scope.AddOperation(opspec) 27476 return op.Output(0) 27477 } 27478 27479 // Computes inverse hyperbolic sine of x element-wise. 27480 func Asinh(scope *Scope, x tf.Output) (y tf.Output) { 27481 if scope.Err() != nil { 27482 return 27483 } 27484 opspec := tf.OpSpec{ 27485 Type: "Asinh", 27486 Input: []tf.Input{ 27487 x, 27488 }, 27489 } 27490 op := scope.AddOperation(opspec) 27491 return op.Output(0) 27492 } 27493 27494 // UnicodeTranscodeAttr is an optional argument to UnicodeTranscode. 27495 type UnicodeTranscodeAttr func(optionalAttr) 27496 27497 // UnicodeTranscodeErrors sets the optional errors attribute to value. 27498 // 27499 // value: Error handling policy when there is invalid formatting found in the input. 27500 // The value of 'strict' will cause the operation to produce a InvalidArgument 27501 // error on any invalid input formatting. A value of 'replace' (the default) will 27502 // cause the operation to replace any invalid formatting in the input with the 27503 // `replacement_char` codepoint. A value of 'ignore' will cause the operation to 27504 // skip any invalid formatting in the input and produce no corresponding output 27505 // character. 27506 // If not specified, defaults to "replace" 27507 func UnicodeTranscodeErrors(value string) UnicodeTranscodeAttr { 27508 return func(m optionalAttr) { 27509 m["errors"] = value 27510 } 27511 } 27512 27513 // UnicodeTranscodeReplacementChar sets the optional replacement_char attribute to value. 27514 // 27515 // value: The replacement character codepoint to be used in place of any invalid 27516 // formatting in the input when `errors='replace'`. Any valid unicode codepoint may 27517 // be used. The default value is the default unicode replacement character is 27518 // 0xFFFD or U+65533.) 27519 // 27520 // Note that for UTF-8, passing a replacement character expressible in 1 byte, such 27521 // as ' ', will preserve string alignment to the source since invalid bytes will be 27522 // replaced with a 1-byte replacement. For UTF-16-BE and UTF-16-LE, any 1 or 2 byte 27523 // replacement character will preserve byte alignment to the source. 27524 // If not specified, defaults to 65533 27525 func UnicodeTranscodeReplacementChar(value int64) UnicodeTranscodeAttr { 27526 return func(m optionalAttr) { 27527 m["replacement_char"] = value 27528 } 27529 } 27530 27531 // UnicodeTranscodeReplaceControlCharacters sets the optional replace_control_characters attribute to value. 27532 // 27533 // value: Whether to replace the C0 control characters (00-1F) with the 27534 // `replacement_char`. Default is false. 27535 // If not specified, defaults to false 27536 func UnicodeTranscodeReplaceControlCharacters(value bool) UnicodeTranscodeAttr { 27537 return func(m optionalAttr) { 27538 m["replace_control_characters"] = value 27539 } 27540 } 27541 27542 // Transcode the input text from a source encoding to a destination encoding. 27543 // 27544 // The input is a string tensor of any shape. The output is a string tensor of 27545 // the same shape containing the transcoded strings. Output strings are always 27546 // valid unicode. If the input contains invalid encoding positions, the 27547 // `errors` attribute sets the policy for how to deal with them. If the default 27548 // error-handling policy is used, invalid formatting will be substituted in the 27549 // output by the `replacement_char`. If the errors policy is to `ignore`, any 27550 // invalid encoding positions in the input are skipped and not included in the 27551 // output. If it set to `strict` then any invalid formatting will result in an 27552 // InvalidArgument error. 27553 // 27554 // This operation can be used with `output_encoding = input_encoding` to enforce 27555 // correct formatting for inputs even if they are already in the desired encoding. 27556 // 27557 // If the input is prefixed by a Byte Order Mark needed to determine encoding 27558 // (e.g. if the encoding is UTF-16 and the BOM indicates big-endian), then that 27559 // BOM will be consumed and not emitted into the output. If the input encoding 27560 // is marked with an explicit endianness (e.g. UTF-16-BE), then the BOM is 27561 // interpreted as a non-breaking-space and is preserved in the output (including 27562 // always for UTF-8). 27563 // 27564 // The end result is that if the input is marked as an explicit endianness the 27565 // transcoding is faithful to all codepoints in the source. If it is not marked 27566 // with an explicit endianness, the BOM is not considered part of the string itself 27567 // but as metadata, and so is not preserved in the output. 27568 // 27569 // Arguments: 27570 // input: The text to be processed. Can have any shape. 27571 // input_encoding: Text encoding of the input strings. This is any of the encodings supported 27572 // by ICU ucnv algorithmic converters. Examples: `"UTF-16", "US ASCII", "UTF-8"`. 27573 // output_encoding: The unicode encoding to use in the output. Must be one of 27574 // `"UTF-8", "UTF-16-BE", "UTF-32-BE"`. Multi-byte encodings will be big-endian. 27575 // 27576 // Returns A string tensor containing unicode text encoded using `output_encoding`. 27577 func UnicodeTranscode(scope *Scope, input tf.Output, input_encoding string, output_encoding string, optional ...UnicodeTranscodeAttr) (output tf.Output) { 27578 if scope.Err() != nil { 27579 return 27580 } 27581 attrs := map[string]interface{}{"input_encoding": input_encoding, "output_encoding": output_encoding} 27582 for _, a := range optional { 27583 a(attrs) 27584 } 27585 opspec := tf.OpSpec{ 27586 Type: "UnicodeTranscode", 27587 Input: []tf.Input{ 27588 input, 27589 }, 27590 Attrs: attrs, 27591 } 27592 op := scope.AddOperation(opspec) 27593 return op.Output(0) 27594 } 27595 27596 // ResourceApplyRMSPropAttr is an optional argument to ResourceApplyRMSProp. 27597 type ResourceApplyRMSPropAttr func(optionalAttr) 27598 27599 // ResourceApplyRMSPropUseLocking sets the optional use_locking attribute to value. 27600 // 27601 // value: If `True`, updating of the var, ms, and mom tensors is protected 27602 // by a lock; otherwise the behavior is undefined, but may exhibit less 27603 // contention. 27604 // If not specified, defaults to false 27605 func ResourceApplyRMSPropUseLocking(value bool) ResourceApplyRMSPropAttr { 27606 return func(m optionalAttr) { 27607 m["use_locking"] = value 27608 } 27609 } 27610 27611 // Update '*var' according to the RMSProp algorithm. 27612 // 27613 // Note that in dense implementation of this algorithm, ms and mom will 27614 // update even if the grad is zero, but in this sparse implementation, ms 27615 // and mom will not update in iterations during which the grad is zero. 27616 // 27617 // mean_square = decay * mean_square + (1-decay) * gradient ** 2 27618 // Delta = learning_rate * gradient / sqrt(mean_square + epsilon) 27619 // 27620 // ms <- rho * ms_{t-1} + (1-rho) * grad * grad 27621 // mom <- momentum * mom_{t-1} + lr * grad / sqrt(ms + epsilon) 27622 // var <- var - mom 27623 // 27624 // Arguments: 27625 // var_: Should be from a Variable(). 27626 // ms: Should be from a Variable(). 27627 // mom: Should be from a Variable(). 27628 // lr: Scaling factor. Must be a scalar. 27629 // rho: Decay rate. Must be a scalar. 27630 // 27631 // epsilon: Ridge term. Must be a scalar. 27632 // grad: The gradient. 27633 // 27634 // Returns the created operation. 27635 func ResourceApplyRMSProp(scope *Scope, var_ tf.Output, ms tf.Output, mom tf.Output, lr tf.Output, rho tf.Output, momentum tf.Output, epsilon tf.Output, grad tf.Output, optional ...ResourceApplyRMSPropAttr) (o *tf.Operation) { 27636 if scope.Err() != nil { 27637 return 27638 } 27639 attrs := map[string]interface{}{} 27640 for _, a := range optional { 27641 a(attrs) 27642 } 27643 opspec := tf.OpSpec{ 27644 Type: "ResourceApplyRMSProp", 27645 Input: []tf.Input{ 27646 var_, ms, mom, lr, rho, momentum, epsilon, grad, 27647 }, 27648 Attrs: attrs, 27649 } 27650 return scope.AddOperation(opspec) 27651 } 27652 27653 // StatelessTruncatedNormalAttr is an optional argument to StatelessTruncatedNormal. 27654 type StatelessTruncatedNormalAttr func(optionalAttr) 27655 27656 // StatelessTruncatedNormalDtype sets the optional dtype attribute to value. 27657 // 27658 // value: The type of the output. 27659 // If not specified, defaults to DT_FLOAT 27660 func StatelessTruncatedNormalDtype(value tf.DataType) StatelessTruncatedNormalAttr { 27661 return func(m optionalAttr) { 27662 m["dtype"] = value 27663 } 27664 } 27665 27666 // Outputs deterministic pseudorandom values from a truncated normal distribution. 27667 // 27668 // The generated values follow a normal distribution with mean 0 and standard 27669 // deviation 1, except that values whose magnitude is more than 2 standard 27670 // deviations from the mean are dropped and re-picked. 27671 // 27672 // The outputs are a deterministic function of `shape` and `seed`. 27673 // 27674 // Arguments: 27675 // shape: The shape of the output tensor. 27676 // seed: 2 seeds (shape [2]). 27677 // 27678 // Returns Random values with specified shape. 27679 func StatelessTruncatedNormal(scope *Scope, shape tf.Output, seed tf.Output, optional ...StatelessTruncatedNormalAttr) (output tf.Output) { 27680 if scope.Err() != nil { 27681 return 27682 } 27683 attrs := map[string]interface{}{} 27684 for _, a := range optional { 27685 a(attrs) 27686 } 27687 opspec := tf.OpSpec{ 27688 Type: "StatelessTruncatedNormal", 27689 Input: []tf.Input{ 27690 shape, seed, 27691 }, 27692 Attrs: attrs, 27693 } 27694 op := scope.AddOperation(opspec) 27695 return op.Output(0) 27696 } 27697 27698 // RestoreSliceAttr is an optional argument to RestoreSlice. 27699 type RestoreSliceAttr func(optionalAttr) 27700 27701 // RestoreSlicePreferredShard sets the optional preferred_shard attribute to value. 27702 // 27703 // value: Index of file to open first if multiple files match 27704 // `file_pattern`. See the documentation for `Restore`. 27705 // If not specified, defaults to -1 27706 func RestoreSlicePreferredShard(value int64) RestoreSliceAttr { 27707 return func(m optionalAttr) { 27708 m["preferred_shard"] = value 27709 } 27710 } 27711 27712 // Restores a tensor from checkpoint files. 27713 // 27714 // This is like `Restore` except that restored tensor can be listed as filling 27715 // only a slice of a larger tensor. `shape_and_slice` specifies the shape of the 27716 // larger tensor and the slice that the restored tensor covers. 27717 // 27718 // The `shape_and_slice` input has the same format as the 27719 // elements of the `shapes_and_slices` input of the `SaveSlices` op. 27720 // 27721 // Arguments: 27722 // file_pattern: Must have a single element. The pattern of the files from 27723 // which we read the tensor. 27724 // tensor_name: Must have a single element. The name of the tensor to be 27725 // restored. 27726 // shape_and_slice: Scalar. The shapes and slice specifications to use when 27727 // restoring a tensors. 27728 // dt: The type of the tensor to be restored. 27729 // 27730 // Returns The restored tensor. 27731 func RestoreSlice(scope *Scope, file_pattern tf.Output, tensor_name tf.Output, shape_and_slice tf.Output, dt tf.DataType, optional ...RestoreSliceAttr) (tensor tf.Output) { 27732 if scope.Err() != nil { 27733 return 27734 } 27735 attrs := map[string]interface{}{"dt": dt} 27736 for _, a := range optional { 27737 a(attrs) 27738 } 27739 opspec := tf.OpSpec{ 27740 Type: "RestoreSlice", 27741 Input: []tf.Input{ 27742 file_pattern, tensor_name, shape_and_slice, 27743 }, 27744 Attrs: attrs, 27745 } 27746 op := scope.AddOperation(opspec) 27747 return op.Output(0) 27748 } 27749 27750 // Convert the quantized 'input' tensor into a lower-precision 'output', using the 27751 // 27752 // actual distribution of the values to maximize the usage of the lower bit depth 27753 // and adjusting the output min and max ranges accordingly. 27754 // 27755 // [input_min, input_max] are scalar floats that specify the range for the float 27756 // interpretation of the 'input' data. For example, if input_min is -1.0f and 27757 // input_max is 1.0f, and we are dealing with quint16 quantized data, then a 0 27758 // value in the 16-bit data should be interpreted as -1.0f, and a 65535 means 1.0f. 27759 // 27760 // This operator tries to squeeze as much precision as possible into an output with 27761 // a lower bit depth by calculating the actual min and max values found in the 27762 // data. For example, maybe that quint16 input has no values lower than 16,384 and 27763 // none higher than 49,152. That means only half the range is actually needed, all 27764 // the float interpretations are between -0.5f and 0.5f, so if we want to compress 27765 // the data into a quint8 output, we can use that range rather than the theoretical 27766 // -1.0f to 1.0f that is suggested by the input min and max. 27767 // 27768 // In practice, this is most useful for taking output from operations like 27769 // QuantizedMatMul that can produce higher bit-depth outputs than their inputs and 27770 // may have large potential output ranges, but in practice have a distribution of 27771 // input values that only uses a small fraction of the possible range. By feeding 27772 // that output into this operator, we can reduce it from 32 bits down to 8 with 27773 // minimal loss of accuracy. 27774 // 27775 // Arguments: 27776 // 27777 // input_min: The float value that the minimum quantized input value represents. 27778 // input_max: The float value that the maximum quantized input value represents. 27779 // out_type: The type of the output. Should be a lower bit depth than Tinput. 27780 // 27781 // Returns The float value that the minimum quantized output value represents.The float value that the maximum quantized output value represents. 27782 func QuantizeDownAndShrinkRange(scope *Scope, input tf.Output, input_min tf.Output, input_max tf.Output, out_type tf.DataType) (output tf.Output, output_min tf.Output, output_max tf.Output) { 27783 if scope.Err() != nil { 27784 return 27785 } 27786 attrs := map[string]interface{}{"out_type": out_type} 27787 opspec := tf.OpSpec{ 27788 Type: "QuantizeDownAndShrinkRange", 27789 Input: []tf.Input{ 27790 input, input_min, input_max, 27791 }, 27792 Attrs: attrs, 27793 } 27794 op := scope.AddOperation(opspec) 27795 return op.Output(0), op.Output(1), op.Output(2) 27796 } 27797 27798 // RandomGammaAttr is an optional argument to RandomGamma. 27799 type RandomGammaAttr func(optionalAttr) 27800 27801 // RandomGammaSeed sets the optional seed attribute to value. 27802 // 27803 // value: If either `seed` or `seed2` are set to be non-zero, the random number 27804 // generator is seeded by the given seed. Otherwise, it is seeded by a 27805 // random seed. 27806 // If not specified, defaults to 0 27807 func RandomGammaSeed(value int64) RandomGammaAttr { 27808 return func(m optionalAttr) { 27809 m["seed"] = value 27810 } 27811 } 27812 27813 // RandomGammaSeed2 sets the optional seed2 attribute to value. 27814 // 27815 // value: A second seed to avoid seed collision. 27816 // If not specified, defaults to 0 27817 func RandomGammaSeed2(value int64) RandomGammaAttr { 27818 return func(m optionalAttr) { 27819 m["seed2"] = value 27820 } 27821 } 27822 27823 // Outputs random values from the Gamma distribution(s) described by alpha. 27824 // 27825 // This op uses the algorithm by Marsaglia et al. to acquire samples via 27826 // transformation-rejection from pairs of uniform and normal random variables. 27827 // See http://dl.acm.org/citation.cfm?id=358414 27828 // 27829 // Arguments: 27830 // shape: 1-D integer tensor. Shape of independent samples to draw from each 27831 // distribution described by the shape parameters given in alpha. 27832 // alpha: A tensor in which each scalar is a "shape" parameter describing the 27833 // associated gamma distribution. 27834 // 27835 // Returns A tensor with shape `shape + shape(alpha)`. Each slice 27836 // `[:, ..., :, i0, i1, ...iN]` contains the samples drawn for 27837 // `alpha[i0, i1, ...iN]`. The dtype of the output matches the dtype of alpha. 27838 func RandomGamma(scope *Scope, shape tf.Output, alpha tf.Output, optional ...RandomGammaAttr) (output tf.Output) { 27839 if scope.Err() != nil { 27840 return 27841 } 27842 attrs := map[string]interface{}{} 27843 for _, a := range optional { 27844 a(attrs) 27845 } 27846 opspec := tf.OpSpec{ 27847 Type: "RandomGamma", 27848 Input: []tf.Input{ 27849 shape, alpha, 27850 }, 27851 Attrs: attrs, 27852 } 27853 op := scope.AddOperation(opspec) 27854 return op.Output(0) 27855 } 27856 27857 // ResourceScatterNdSubAttr is an optional argument to ResourceScatterNdSub. 27858 type ResourceScatterNdSubAttr func(optionalAttr) 27859 27860 // ResourceScatterNdSubUseLocking sets the optional use_locking attribute to value. 27861 // 27862 // value: An optional bool. Defaults to True. If True, the assignment will 27863 // be protected by a lock; otherwise the behavior is undefined, 27864 // but may exhibit less contention. 27865 // If not specified, defaults to true 27866 func ResourceScatterNdSubUseLocking(value bool) ResourceScatterNdSubAttr { 27867 return func(m optionalAttr) { 27868 m["use_locking"] = value 27869 } 27870 } 27871 27872 // Applies sparse subtraction to individual values or slices in a Variable. 27873 // 27874 // `ref` is a `Tensor` with rank `P` and `indices` is a `Tensor` of rank `Q`. 27875 // 27876 // `indices` must be integer tensor, containing indices into `ref`. 27877 // It must be shape `[d_0, ..., d_{Q-2}, K]` where `0 < K <= P`. 27878 // 27879 // The innermost dimension of `indices` (with length `K`) corresponds to 27880 // indices into elements (if `K = P`) or slices (if `K < P`) along the `K`th 27881 // dimension of `ref`. 27882 // 27883 // `updates` is `Tensor` of rank `Q-1+P-K` with shape: 27884 // 27885 // ``` 27886 // [d_0, ..., d_{Q-2}, ref.shape[K], ..., ref.shape[P-1]] 27887 // ``` 27888 // 27889 // For example, say we want to subtract 4 scattered elements from a rank-1 tensor 27890 // with 8 elements. In Python, that subtraction would look like this: 27891 // 27892 // ```python 27893 // ref = tf.Variable([1, 2, 3, 4, 5, 6, 7, 8], use_resource=True) 27894 // indices = tf.constant([[4], [3], [1], [7]]) 27895 // updates = tf.constant([9, 10, 11, 12]) 27896 // sub = tf.scatter_nd_sub(ref, indices, updates) 27897 // with tf.Session() as sess: 27898 // print sess.run(sub) 27899 // ``` 27900 // 27901 // The resulting update to ref would look like this: 27902 // 27903 // [1, -9, 3, -6, -4, 6, 7, -4] 27904 // 27905 // See `tf.scatter_nd` for more details about how to make updates to 27906 // slices. 27907 // 27908 // Arguments: 27909 // ref: A resource handle. Must be from a VarHandleOp. 27910 // indices: A Tensor. Must be one of the following types: int32, int64. 27911 // A tensor of indices into ref. 27912 // updates: A Tensor. Must have the same type as ref. A tensor of 27913 // values to add to ref. 27914 // 27915 // Returns the created operation. 27916 func ResourceScatterNdSub(scope *Scope, ref tf.Output, indices tf.Output, updates tf.Output, optional ...ResourceScatterNdSubAttr) (o *tf.Operation) { 27917 if scope.Err() != nil { 27918 return 27919 } 27920 attrs := map[string]interface{}{} 27921 for _, a := range optional { 27922 a(attrs) 27923 } 27924 opspec := tf.OpSpec{ 27925 Type: "ResourceScatterNdSub", 27926 Input: []tf.Input{ 27927 ref, indices, updates, 27928 }, 27929 Attrs: attrs, 27930 } 27931 return scope.AddOperation(opspec) 27932 } 27933 27934 // Outputs deterministic pseudorandom random integers from a uniform distribution. 27935 // 27936 // The generated values follow a uniform distribution in the range `[minval, maxval)`. 27937 // 27938 // The outputs are a deterministic function of `shape`, `seed`, `minval`, and `maxval`. 27939 // 27940 // Arguments: 27941 // shape: The shape of the output tensor. 27942 // seed: 2 seeds (shape [2]). 27943 // minval: Minimum value (inclusive, scalar). 27944 // maxval: Maximum value (exclusive, scalar). 27945 // 27946 // Returns Random values with specified shape. 27947 func StatelessRandomUniformInt(scope *Scope, shape tf.Output, seed tf.Output, minval tf.Output, maxval tf.Output) (output tf.Output) { 27948 if scope.Err() != nil { 27949 return 27950 } 27951 opspec := tf.OpSpec{ 27952 Type: "StatelessRandomUniformInt", 27953 Input: []tf.Input{ 27954 shape, seed, minval, maxval, 27955 }, 27956 } 27957 op := scope.AddOperation(opspec) 27958 return op.Output(0) 27959 } 27960 27961 // QuantizedConv2DAttr is an optional argument to QuantizedConv2D. 27962 type QuantizedConv2DAttr func(optionalAttr) 27963 27964 // QuantizedConv2DOutType sets the optional out_type attribute to value. 27965 // If not specified, defaults to DT_QINT32 27966 func QuantizedConv2DOutType(value tf.DataType) QuantizedConv2DAttr { 27967 return func(m optionalAttr) { 27968 m["out_type"] = value 27969 } 27970 } 27971 27972 // QuantizedConv2DDilations sets the optional dilations attribute to value. 27973 // 27974 // value: 1-D tensor of length 4. The dilation factor for each dimension of 27975 // `input`. If set to k > 1, there will be k-1 skipped cells between each 27976 // filter element on that dimension. The dimension order is determined by the 27977 // value of `data_format`, see above for details. Dilations in the batch and 27978 // depth dimensions must be 1. 27979 // If not specified, defaults to <i:1 i:1 i:1 i:1 > 27980 func QuantizedConv2DDilations(value []int64) QuantizedConv2DAttr { 27981 return func(m optionalAttr) { 27982 m["dilations"] = value 27983 } 27984 } 27985 27986 // Computes a 2D convolution given quantized 4D input and filter tensors. 27987 // 27988 // The inputs are quantized tensors where the lowest value represents the real 27989 // number of the associated minimum, and the highest represents the maximum. 27990 // This means that you can only interpret the quantized output in the same way, by 27991 // taking the returned minimum and maximum values into account. 27992 // 27993 // Arguments: 27994 // 27995 // filter: filter's input_depth dimension must match input's depth dimensions. 27996 // min_input: The float value that the lowest quantized input value represents. 27997 // max_input: The float value that the highest quantized input value represents. 27998 // min_filter: The float value that the lowest quantized filter value represents. 27999 // max_filter: The float value that the highest quantized filter value represents. 28000 // strides: The stride of the sliding window for each dimension of the input 28001 // tensor. 28002 // padding: The type of padding algorithm to use. 28003 // 28004 // Returns The float value that the lowest quantized output value represents.The float value that the highest quantized output value represents. 28005 func QuantizedConv2D(scope *Scope, input tf.Output, filter tf.Output, min_input tf.Output, max_input tf.Output, min_filter tf.Output, max_filter tf.Output, strides []int64, padding string, optional ...QuantizedConv2DAttr) (output tf.Output, min_output tf.Output, max_output tf.Output) { 28006 if scope.Err() != nil { 28007 return 28008 } 28009 attrs := map[string]interface{}{"strides": strides, "padding": padding} 28010 for _, a := range optional { 28011 a(attrs) 28012 } 28013 opspec := tf.OpSpec{ 28014 Type: "QuantizedConv2D", 28015 Input: []tf.Input{ 28016 input, filter, min_input, max_input, min_filter, max_filter, 28017 }, 28018 Attrs: attrs, 28019 } 28020 op := scope.AddOperation(opspec) 28021 return op.Output(0), op.Output(1), op.Output(2) 28022 } 28023 28024 // ResourceGatherAttr is an optional argument to ResourceGather. 28025 type ResourceGatherAttr func(optionalAttr) 28026 28027 // ResourceGatherBatchDims sets the optional batch_dims attribute to value. 28028 // If not specified, defaults to 0 28029 func ResourceGatherBatchDims(value int64) ResourceGatherAttr { 28030 return func(m optionalAttr) { 28031 m["batch_dims"] = value 28032 } 28033 } 28034 28035 // ResourceGatherValidateIndices sets the optional validate_indices attribute to value. 28036 // If not specified, defaults to true 28037 func ResourceGatherValidateIndices(value bool) ResourceGatherAttr { 28038 return func(m optionalAttr) { 28039 m["validate_indices"] = value 28040 } 28041 } 28042 28043 // Gather slices from the variable pointed to by `resource` according to `indices`. 28044 // 28045 // `indices` must be an integer tensor of any dimension (usually 0-D or 1-D). 28046 // Produces an output tensor with shape `indices.shape + params.shape[1:]` where: 28047 // 28048 // ```python 28049 // # Scalar indices 28050 // output[:, ..., :] = params[indices, :, ... :] 28051 // 28052 // # Vector indices 28053 // output[i, :, ..., :] = params[indices[i], :, ... :] 28054 // 28055 // # Higher rank indices 28056 // output[i, ..., j, :, ... :] = params[indices[i, ..., j], :, ..., :] 28057 // ``` 28058 func ResourceGather(scope *Scope, resource tf.Output, indices tf.Output, dtype tf.DataType, optional ...ResourceGatherAttr) (output tf.Output) { 28059 if scope.Err() != nil { 28060 return 28061 } 28062 attrs := map[string]interface{}{"dtype": dtype} 28063 for _, a := range optional { 28064 a(attrs) 28065 } 28066 opspec := tf.OpSpec{ 28067 Type: "ResourceGather", 28068 Input: []tf.Input{ 28069 resource, indices, 28070 }, 28071 Attrs: attrs, 28072 } 28073 op := scope.AddOperation(opspec) 28074 return op.Output(0) 28075 } 28076 28077 // StatelessMultinomialAttr is an optional argument to StatelessMultinomial. 28078 type StatelessMultinomialAttr func(optionalAttr) 28079 28080 // StatelessMultinomialOutputDtype sets the optional output_dtype attribute to value. 28081 // If not specified, defaults to DT_INT64 28082 func StatelessMultinomialOutputDtype(value tf.DataType) StatelessMultinomialAttr { 28083 return func(m optionalAttr) { 28084 m["output_dtype"] = value 28085 } 28086 } 28087 28088 // Draws samples from a multinomial distribution. 28089 // 28090 // Arguments: 28091 // logits: 2-D Tensor with shape `[batch_size, num_classes]`. Each slice `[i, :]` 28092 // represents the unnormalized log probabilities for all classes. 28093 // num_samples: 0-D. Number of independent samples to draw for each row slice. 28094 // seed: 2 seeds (shape [2]). 28095 // 28096 // Returns 2-D Tensor with shape `[batch_size, num_samples]`. Each slice `[i, :]` 28097 // contains the drawn class labels with range `[0, num_classes)`. 28098 func StatelessMultinomial(scope *Scope, logits tf.Output, num_samples tf.Output, seed tf.Output, optional ...StatelessMultinomialAttr) (output tf.Output) { 28099 if scope.Err() != nil { 28100 return 28101 } 28102 attrs := map[string]interface{}{} 28103 for _, a := range optional { 28104 a(attrs) 28105 } 28106 opspec := tf.OpSpec{ 28107 Type: "StatelessMultinomial", 28108 Input: []tf.Input{ 28109 logits, num_samples, seed, 28110 }, 28111 Attrs: attrs, 28112 } 28113 op := scope.AddOperation(opspec) 28114 return op.Output(0) 28115 } 28116 28117 // Returns a batched matrix tensor with new batched diagonal values. 28118 // 28119 // Given `input` and `diagonal`, this operation returns a tensor with the 28120 // same shape and values as `input`, except for the main diagonal of the 28121 // innermost matrices. These will be overwritten by the values in `diagonal`. 28122 // 28123 // The output is computed as follows: 28124 // 28125 // Assume `input` has `k+1` dimensions `[I, J, K, ..., M, N]` and `diagonal` has 28126 // `k` dimensions `[I, J, K, ..., min(M, N)]`. Then the output is a 28127 // tensor of rank `k+1` with dimensions `[I, J, K, ..., M, N]` where: 28128 // 28129 // * `output[i, j, k, ..., m, n] = diagonal[i, j, k, ..., n]` for `m == n`. 28130 // * `output[i, j, k, ..., m, n] = input[i, j, k, ..., m, n]` for `m != n`. 28131 // 28132 // Arguments: 28133 // input: Rank `k+1`, where `k >= 1`. 28134 // diagonal: Rank `k`, where `k >= 1`. 28135 // 28136 // Returns Rank `k+1`, with `output.shape = input.shape`. 28137 func MatrixSetDiag(scope *Scope, input tf.Output, diagonal tf.Output) (output tf.Output) { 28138 if scope.Err() != nil { 28139 return 28140 } 28141 opspec := tf.OpSpec{ 28142 Type: "MatrixSetDiag", 28143 Input: []tf.Input{ 28144 input, diagonal, 28145 }, 28146 } 28147 op := scope.AddOperation(opspec) 28148 return op.Output(0) 28149 } 28150 28151 // Returns the element-wise max of two SparseTensors. 28152 // 28153 // Assumes the two SparseTensors have the same shape, i.e., no broadcasting. 28154 // 28155 // Arguments: 28156 // a_indices: 2-D. `N x R` matrix with the indices of non-empty values in a 28157 // SparseTensor, in the canonical lexicographic ordering. 28158 // a_values: 1-D. `N` non-empty values corresponding to `a_indices`. 28159 // a_shape: 1-D. Shape of the input SparseTensor. 28160 // b_indices: counterpart to `a_indices` for the other operand. 28161 // b_values: counterpart to `a_values` for the other operand; must be of the same dtype. 28162 // b_shape: counterpart to `a_shape` for the other operand; the two shapes must be equal. 28163 // 28164 // Returns 2-D. The indices of the output SparseTensor.1-D. The values of the output SparseTensor. 28165 func SparseSparseMaximum(scope *Scope, a_indices tf.Output, a_values tf.Output, a_shape tf.Output, b_indices tf.Output, b_values tf.Output, b_shape tf.Output) (output_indices tf.Output, output_values tf.Output) { 28166 if scope.Err() != nil { 28167 return 28168 } 28169 opspec := tf.OpSpec{ 28170 Type: "SparseSparseMaximum", 28171 Input: []tf.Input{ 28172 a_indices, a_values, a_shape, b_indices, b_values, b_shape, 28173 }, 28174 } 28175 op := scope.AddOperation(opspec) 28176 return op.Output(0), op.Output(1) 28177 } 28178 28179 // LoadTPUEmbeddingMDLAdagradLightParametersAttr is an optional argument to LoadTPUEmbeddingMDLAdagradLightParameters. 28180 type LoadTPUEmbeddingMDLAdagradLightParametersAttr func(optionalAttr) 28181 28182 // LoadTPUEmbeddingMDLAdagradLightParametersTableId sets the optional table_id attribute to value. 28183 // If not specified, defaults to -1 28184 // 28185 // REQUIRES: value >= -1 28186 func LoadTPUEmbeddingMDLAdagradLightParametersTableId(value int64) LoadTPUEmbeddingMDLAdagradLightParametersAttr { 28187 return func(m optionalAttr) { 28188 m["table_id"] = value 28189 } 28190 } 28191 28192 // LoadTPUEmbeddingMDLAdagradLightParametersTableName sets the optional table_name attribute to value. 28193 // If not specified, defaults to "" 28194 func LoadTPUEmbeddingMDLAdagradLightParametersTableName(value string) LoadTPUEmbeddingMDLAdagradLightParametersAttr { 28195 return func(m optionalAttr) { 28196 m["table_name"] = value 28197 } 28198 } 28199 28200 // Load MDL Adagrad Light embedding parameters. 28201 // 28202 // An op that loads optimization parameters into HBM for embedding. Must be 28203 // preceded by a ConfigureTPUEmbeddingHost op that sets up the correct 28204 // embedding table configuration. For example, this op is used to install 28205 // parameters that are loaded from a checkpoint before a training loop is 28206 // executed. 28207 // 28208 // Arguments: 28209 // parameters: Value of parameters used in the MDL Adagrad Light optimization algorithm. 28210 // accumulators: Value of accumulators used in the MDL Adagrad Light optimization algorithm. 28211 // weights: Value of weights used in the MDL Adagrad Light optimization algorithm. 28212 // benefits: Value of benefits used in the MDL Adagrad Light optimization algorithm. 28213 // 28214 // 28215 // 28216 // Returns the created operation. 28217 func LoadTPUEmbeddingMDLAdagradLightParameters(scope *Scope, parameters tf.Output, accumulators tf.Output, weights tf.Output, benefits tf.Output, num_shards int64, shard_id int64, optional ...LoadTPUEmbeddingMDLAdagradLightParametersAttr) (o *tf.Operation) { 28218 if scope.Err() != nil { 28219 return 28220 } 28221 attrs := map[string]interface{}{"num_shards": num_shards, "shard_id": shard_id} 28222 for _, a := range optional { 28223 a(attrs) 28224 } 28225 opspec := tf.OpSpec{ 28226 Type: "LoadTPUEmbeddingMDLAdagradLightParameters", 28227 Input: []tf.Input{ 28228 parameters, accumulators, weights, benefits, 28229 }, 28230 Attrs: attrs, 28231 } 28232 return scope.AddOperation(opspec) 28233 } 28234 28235 // List of the given size with empty elements. 28236 // 28237 // element_shape: the shape of the future elements of the list 28238 // num_elements: the number of elements to reserve 28239 // handle: the output list 28240 // element_dtype: the desired type of elements in the list. 28241 func TensorListReserve(scope *Scope, element_shape tf.Output, num_elements tf.Output, element_dtype tf.DataType) (handle tf.Output) { 28242 if scope.Err() != nil { 28243 return 28244 } 28245 attrs := map[string]interface{}{"element_dtype": element_dtype} 28246 opspec := tf.OpSpec{ 28247 Type: "TensorListReserve", 28248 Input: []tf.Input{ 28249 element_shape, num_elements, 28250 }, 28251 Attrs: attrs, 28252 } 28253 op := scope.AddOperation(opspec) 28254 return op.Output(0) 28255 } 28256 28257 // Computes the gradient for the inverse of `x` wrt its input. 28258 // 28259 // Specifically, `grad = -dy * y*y`, where `y = 1/x`, and `dy` 28260 // is the corresponding input gradient. 28261 func InvGrad(scope *Scope, y tf.Output, dy tf.Output) (z tf.Output) { 28262 if scope.Err() != nil { 28263 return 28264 } 28265 opspec := tf.OpSpec{ 28266 Type: "InvGrad", 28267 Input: []tf.Input{ 28268 y, dy, 28269 }, 28270 } 28271 op := scope.AddOperation(opspec) 28272 return op.Output(0) 28273 } 28274 28275 // Reduces sparse updates into the variable referenced by `resource` using the `min` operation. 28276 // 28277 // This operation computes 28278 // 28279 // # Scalar indices 28280 // ref[indices, ...] = min(ref[indices, ...], updates[...]) 28281 // 28282 // # Vector indices (for each i) 28283 // ref[indices[i], ...] = min(ref[indices[i], ...], updates[i, ...]) 28284 // 28285 // # High rank indices (for each i, ..., j) 28286 // ref[indices[i, ..., j], ...] = min(ref[indices[i, ..., j], ...], updates[i, ..., j, ...]) 28287 // 28288 // Duplicate entries are handled correctly: if multiple `indices` reference 28289 // the same location, their contributions are combined. 28290 // 28291 // Requires `updates.shape = indices.shape + ref.shape[1:]` or `updates.shape = []`. 28292 // 28293 // <div style="width:70%; margin:auto; margin-bottom:10px; margin-top:20px;"> 28294 // <img style="width:100%" src='https://www.tensorflow.org/images/ScatterAdd.png' alt> 28295 // </div> 28296 // 28297 // Arguments: 28298 // resource: Should be from a `Variable` node. 28299 // indices: A tensor of indices into the first dimension of `ref`. 28300 // updates: A tensor of updated values to add to `ref`. 28301 // 28302 // Returns the created operation. 28303 func ResourceScatterMin(scope *Scope, resource tf.Output, indices tf.Output, updates tf.Output) (o *tf.Operation) { 28304 if scope.Err() != nil { 28305 return 28306 } 28307 opspec := tf.OpSpec{ 28308 Type: "ResourceScatterMin", 28309 Input: []tf.Input{ 28310 resource, indices, updates, 28311 }, 28312 } 28313 return scope.AddOperation(opspec) 28314 } 28315 28316 // Elementwise computes the bitwise OR of `x` and `y`. 28317 // 28318 // The result will have those bits set, that are set in `x`, `y` or both. The 28319 // computation is performed on the underlying representations of `x` and `y`. 28320 func BitwiseOr(scope *Scope, x tf.Output, y tf.Output) (z tf.Output) { 28321 if scope.Err() != nil { 28322 return 28323 } 28324 opspec := tf.OpSpec{ 28325 Type: "BitwiseOr", 28326 Input: []tf.Input{ 28327 x, y, 28328 }, 28329 } 28330 op := scope.AddOperation(opspec) 28331 return op.Output(0) 28332 } 28333 28334 // MatrixSolveLsAttr is an optional argument to MatrixSolveLs. 28335 type MatrixSolveLsAttr func(optionalAttr) 28336 28337 // MatrixSolveLsFast sets the optional fast attribute to value. 28338 // If not specified, defaults to true 28339 func MatrixSolveLsFast(value bool) MatrixSolveLsAttr { 28340 return func(m optionalAttr) { 28341 m["fast"] = value 28342 } 28343 } 28344 28345 // Solves one or more linear least-squares problems. 28346 // 28347 // `matrix` is a tensor of shape `[..., M, N]` whose inner-most 2 dimensions 28348 // form real or complex matrices of size `[M, N]`. `Rhs` is a tensor of the same 28349 // type as `matrix` and shape `[..., M, K]`. 28350 // The output is a tensor shape `[..., N, K]` where each output matrix solves 28351 // each of the equations 28352 // `matrix[..., :, :]` * `output[..., :, :]` = `rhs[..., :, :]` 28353 // in the least squares sense. 28354 // 28355 // We use the following notation for (complex) matrix and right-hand sides 28356 // in the batch: 28357 // 28358 // `matrix`=\\(A \in \mathbb{C}^{m \times n}\\), 28359 // `rhs`=\\(B \in \mathbb{C}^{m \times k}\\), 28360 // `output`=\\(X \in \mathbb{C}^{n \times k}\\), 28361 // `l2_regularizer`=\\(\lambda \in \mathbb{R}\\). 28362 // 28363 // If `fast` is `True`, then the solution is computed by solving the normal 28364 // equations using Cholesky decomposition. Specifically, if \\(m \ge n\\) then 28365 // \\(X = (A^H A + \lambda I)^{-1} A^H B\\), which solves the least-squares 28366 // problem \\(X = \mathrm{argmin}_{Z \in \Re^{n \times k} } ||A Z - B||_F^2 + \lambda ||Z||_F^2\\). 28367 // If \\(m \lt n\\) then `output` is computed as 28368 // \\(X = A^H (A A^H + \lambda I)^{-1} B\\), which (for \\(\lambda = 0\\)) is the 28369 // minimum-norm solution to the under-determined linear system, i.e. 28370 // \\(X = \mathrm{argmin}_{Z \in \mathbb{C}^{n \times k} } ||Z||_F^2 \\), 28371 // subject to \\(A Z = B\\). Notice that the fast path is only numerically stable 28372 // when \\(A\\) is numerically full rank and has a condition number 28373 // \\(\mathrm{cond}(A) \lt \frac{1}{\sqrt{\epsilon_{mach} } }\\) or \\(\lambda\\) is 28374 // sufficiently large. 28375 // 28376 // If `fast` is `False` an algorithm based on the numerically robust complete 28377 // orthogonal decomposition is used. This computes the minimum-norm 28378 // least-squares solution, even when \\(A\\) is rank deficient. This path is 28379 // typically 6-7 times slower than the fast path. If `fast` is `False` then 28380 // `l2_regularizer` is ignored. 28381 // 28382 // Arguments: 28383 // matrix: Shape is `[..., M, N]`. 28384 // rhs: Shape is `[..., M, K]`. 28385 // l2_regularizer: Scalar tensor. 28386 // 28387 // @compatibility(numpy) 28388 // Equivalent to np.linalg.lstsq 28389 // @end_compatibility 28390 // 28391 // Returns Shape is `[..., N, K]`. 28392 func MatrixSolveLs(scope *Scope, matrix tf.Output, rhs tf.Output, l2_regularizer tf.Output, optional ...MatrixSolveLsAttr) (output tf.Output) { 28393 if scope.Err() != nil { 28394 return 28395 } 28396 attrs := map[string]interface{}{} 28397 for _, a := range optional { 28398 a(attrs) 28399 } 28400 opspec := tf.OpSpec{ 28401 Type: "MatrixSolveLs", 28402 Input: []tf.Input{ 28403 matrix, rhs, l2_regularizer, 28404 }, 28405 Attrs: attrs, 28406 } 28407 op := scope.AddOperation(opspec) 28408 return op.Output(0) 28409 } 28410 28411 // Interleave the values from the `data` tensors into a single tensor. 28412 // 28413 // Builds a merged tensor such that 28414 // 28415 // ```python 28416 // merged[indices[m][i, ..., j], ...] = data[m][i, ..., j, ...] 28417 // ``` 28418 // 28419 // For example, if each `indices[m]` is scalar or vector, we have 28420 // 28421 // ```python 28422 // # Scalar indices: 28423 // merged[indices[m], ...] = data[m][...] 28424 // 28425 // # Vector indices: 28426 // merged[indices[m][i], ...] = data[m][i, ...] 28427 // ``` 28428 // 28429 // Each `data[i].shape` must start with the corresponding `indices[i].shape`, 28430 // and the rest of `data[i].shape` must be constant w.r.t. `i`. That is, we 28431 // must have `data[i].shape = indices[i].shape + constant`. In terms of this 28432 // `constant`, the output shape is 28433 // 28434 // merged.shape = [max(indices)] + constant 28435 // 28436 // Values are merged in order, so if an index appears in both `indices[m][i]` and 28437 // `indices[n][j]` for `(m,i) < (n,j)` the slice `data[n][j]` will appear in the 28438 // merged result. If you do not need this guarantee, ParallelDynamicStitch might 28439 // perform better on some devices. 28440 // 28441 // For example: 28442 // 28443 // ```python 28444 // indices[0] = 6 28445 // indices[1] = [4, 1] 28446 // indices[2] = [[5, 2], [0, 3]] 28447 // data[0] = [61, 62] 28448 // data[1] = [[41, 42], [11, 12]] 28449 // data[2] = [[[51, 52], [21, 22]], [[1, 2], [31, 32]]] 28450 // merged = [[1, 2], [11, 12], [21, 22], [31, 32], [41, 42], 28451 // [51, 52], [61, 62]] 28452 // ``` 28453 // 28454 // This method can be used to merge partitions created by `dynamic_partition` 28455 // as illustrated on the following example: 28456 // 28457 // ```python 28458 // # Apply function (increments x_i) on elements for which a certain condition 28459 // # apply (x_i != -1 in this example). 28460 // x=tf.constant([0.1, -1., 5.2, 4.3, -1., 7.4]) 28461 // condition_mask=tf.not_equal(x,tf.constant(-1.)) 28462 // partitioned_data = tf.dynamic_partition( 28463 // x, tf.cast(condition_mask, tf.int32) , 2) 28464 // partitioned_data[1] = partitioned_data[1] + 1.0 28465 // condition_indices = tf.dynamic_partition( 28466 // tf.range(tf.shape(x)[0]), tf.cast(condition_mask, tf.int32) , 2) 28467 // x = tf.dynamic_stitch(condition_indices, partitioned_data) 28468 // # Here x=[1.1, -1., 6.2, 5.3, -1, 8.4], the -1. values remain 28469 // # unchanged. 28470 // ``` 28471 // 28472 // <div style="width:70%; margin:auto; margin-bottom:10px; margin-top:20px;"> 28473 // <img style="width:100%" src="https://www.tensorflow.org/images/DynamicStitch.png" alt> 28474 // </div> 28475 func DynamicStitch(scope *Scope, indices []tf.Output, data []tf.Output) (merged tf.Output) { 28476 if scope.Err() != nil { 28477 return 28478 } 28479 opspec := tf.OpSpec{ 28480 Type: "DynamicStitch", 28481 Input: []tf.Input{ 28482 tf.OutputList(indices), tf.OutputList(data), 28483 }, 28484 } 28485 op := scope.AddOperation(opspec) 28486 return op.Output(0) 28487 } 28488 28489 // Performs a padding as a preprocess during a convolution. 28490 // 28491 // Similar to FusedResizeAndPadConv2d, this op allows for an optimized 28492 // implementation where the spatial padding transformation stage is fused with the 28493 // im2col lookup, but in this case without the bilinear filtering required for 28494 // resizing. Fusing the padding prevents the need to write out the intermediate 28495 // results as whole tensors, reducing memory pressure, and we can get some latency 28496 // gains by merging the transformation calculations. 28497 // The data_format attribute for Conv2D isn't supported by this op, and 'NHWC' 28498 // order is used instead. 28499 // Internally this op uses a single per-graph scratch buffer, which means that it 28500 // will block if multiple versions are being run in parallel. This is because this 28501 // operator is primarily an optimization to minimize memory usage. 28502 // 28503 // Arguments: 28504 // input: 4-D with shape `[batch, in_height, in_width, in_channels]`. 28505 // paddings: A two-column matrix specifying the padding sizes. The number of 28506 // rows must be the same as the rank of `input`. 28507 // filter: 4-D with shape 28508 // `[filter_height, filter_width, in_channels, out_channels]`. 28509 // 28510 // strides: 1-D of length 4. The stride of the sliding window for each dimension 28511 // of `input`. Must be in the same order as the dimension specified with format. 28512 // padding: The type of padding algorithm to use. 28513 func FusedPadConv2D(scope *Scope, input tf.Output, paddings tf.Output, filter tf.Output, mode string, strides []int64, padding string) (output tf.Output) { 28514 if scope.Err() != nil { 28515 return 28516 } 28517 attrs := map[string]interface{}{"mode": mode, "strides": strides, "padding": padding} 28518 opspec := tf.OpSpec{ 28519 Type: "FusedPadConv2D", 28520 Input: []tf.Input{ 28521 input, paddings, filter, 28522 }, 28523 Attrs: attrs, 28524 } 28525 op := scope.AddOperation(opspec) 28526 return op.Output(0) 28527 } 28528 28529 // Conv2DBackpropInputAttr is an optional argument to Conv2DBackpropInput. 28530 type Conv2DBackpropInputAttr func(optionalAttr) 28531 28532 // Conv2DBackpropInputUseCudnnOnGpu sets the optional use_cudnn_on_gpu attribute to value. 28533 // If not specified, defaults to true 28534 func Conv2DBackpropInputUseCudnnOnGpu(value bool) Conv2DBackpropInputAttr { 28535 return func(m optionalAttr) { 28536 m["use_cudnn_on_gpu"] = value 28537 } 28538 } 28539 28540 // Conv2DBackpropInputExplicitPaddings sets the optional explicit_paddings attribute to value. 28541 // 28542 // value: If `padding` is `"EXPLICIT"`, the list of explicit padding amounts. For the ith 28543 // dimension, the amount of padding inserted before and after the dimension is 28544 // `explicit_paddings[2 * i]` and `explicit_paddings[2 * i + 1]`, respectively. If 28545 // `padding` is not `"EXPLICIT"`, `explicit_paddings` must be empty. 28546 // If not specified, defaults to <> 28547 func Conv2DBackpropInputExplicitPaddings(value []int64) Conv2DBackpropInputAttr { 28548 return func(m optionalAttr) { 28549 m["explicit_paddings"] = value 28550 } 28551 } 28552 28553 // Conv2DBackpropInputDataFormat sets the optional data_format attribute to value. 28554 // 28555 // value: Specify the data format of the input and output data. With the 28556 // default format "NHWC", the data is stored in the order of: 28557 // [batch, in_height, in_width, in_channels]. 28558 // Alternatively, the format could be "NCHW", the data storage order of: 28559 // [batch, in_channels, in_height, in_width]. 28560 // If not specified, defaults to "NHWC" 28561 func Conv2DBackpropInputDataFormat(value string) Conv2DBackpropInputAttr { 28562 return func(m optionalAttr) { 28563 m["data_format"] = value 28564 } 28565 } 28566 28567 // Conv2DBackpropInputDilations sets the optional dilations attribute to value. 28568 // 28569 // value: 1-D tensor of length 4. The dilation factor for each dimension of 28570 // `input`. If set to k > 1, there will be k-1 skipped cells between each filter 28571 // element on that dimension. The dimension order is determined by the value of 28572 // `data_format`, see above for details. Dilations in the batch and depth 28573 // dimensions must be 1. 28574 // If not specified, defaults to <i:1 i:1 i:1 i:1 > 28575 func Conv2DBackpropInputDilations(value []int64) Conv2DBackpropInputAttr { 28576 return func(m optionalAttr) { 28577 m["dilations"] = value 28578 } 28579 } 28580 28581 // Computes the gradients of convolution with respect to the input. 28582 // 28583 // Arguments: 28584 // input_sizes: An integer vector representing the shape of `input`, 28585 // where `input` is a 4-D `[batch, height, width, channels]` tensor. 28586 // filter: 4-D with shape 28587 // `[filter_height, filter_width, in_channels, out_channels]`. 28588 // out_backprop: 4-D with shape `[batch, out_height, out_width, out_channels]`. 28589 // Gradients w.r.t. the output of the convolution. 28590 // strides: The stride of the sliding window for each dimension of the input 28591 // of the convolution. Must be in the same order as the dimension specified with 28592 // format. 28593 // padding: The type of padding algorithm to use. 28594 // 28595 // Returns 4-D with shape `[batch, in_height, in_width, in_channels]`. Gradient 28596 // w.r.t. the input of the convolution. 28597 func Conv2DBackpropInput(scope *Scope, input_sizes tf.Output, filter tf.Output, out_backprop tf.Output, strides []int64, padding string, optional ...Conv2DBackpropInputAttr) (output tf.Output) { 28598 if scope.Err() != nil { 28599 return 28600 } 28601 attrs := map[string]interface{}{"strides": strides, "padding": padding} 28602 for _, a := range optional { 28603 a(attrs) 28604 } 28605 opspec := tf.OpSpec{ 28606 Type: "Conv2DBackpropInput", 28607 Input: []tf.Input{ 28608 input_sizes, filter, out_backprop, 28609 }, 28610 Attrs: attrs, 28611 } 28612 op := scope.AddOperation(opspec) 28613 return op.Output(0) 28614 } 28615 28616 // Creates a dataset that executes a SQL query and emits rows of the result set. 28617 // 28618 // Arguments: 28619 // driver_name: The database type. Currently, the only supported type is 'sqlite'. 28620 // data_source_name: A connection string to connect to the database. 28621 // query: A SQL query to execute. 28622 // 28623 // 28624 func ExperimentalSqlDataset(scope *Scope, driver_name tf.Output, data_source_name tf.Output, query tf.Output, output_types []tf.DataType, output_shapes []tf.Shape) (handle tf.Output) { 28625 if scope.Err() != nil { 28626 return 28627 } 28628 attrs := map[string]interface{}{"output_types": output_types, "output_shapes": output_shapes} 28629 opspec := tf.OpSpec{ 28630 Type: "ExperimentalSqlDataset", 28631 Input: []tf.Input{ 28632 driver_name, data_source_name, query, 28633 }, 28634 Attrs: attrs, 28635 } 28636 op := scope.AddOperation(opspec) 28637 return op.Output(0) 28638 } 28639 28640 // LoadTPUEmbeddingCenteredRMSPropParametersAttr is an optional argument to LoadTPUEmbeddingCenteredRMSPropParameters. 28641 type LoadTPUEmbeddingCenteredRMSPropParametersAttr func(optionalAttr) 28642 28643 // LoadTPUEmbeddingCenteredRMSPropParametersTableId sets the optional table_id attribute to value. 28644 // If not specified, defaults to -1 28645 // 28646 // REQUIRES: value >= -1 28647 func LoadTPUEmbeddingCenteredRMSPropParametersTableId(value int64) LoadTPUEmbeddingCenteredRMSPropParametersAttr { 28648 return func(m optionalAttr) { 28649 m["table_id"] = value 28650 } 28651 } 28652 28653 // LoadTPUEmbeddingCenteredRMSPropParametersTableName sets the optional table_name attribute to value. 28654 // If not specified, defaults to "" 28655 func LoadTPUEmbeddingCenteredRMSPropParametersTableName(value string) LoadTPUEmbeddingCenteredRMSPropParametersAttr { 28656 return func(m optionalAttr) { 28657 m["table_name"] = value 28658 } 28659 } 28660 28661 // Load centered RMSProp embedding parameters. 28662 // 28663 // An op that loads optimization parameters into HBM for embedding. Must be 28664 // preceded by a ConfigureTPUEmbeddingHost op that sets up the correct 28665 // embedding table configuration. For example, this op is used to install 28666 // parameters that are loaded from a checkpoint before a training loop is 28667 // executed. 28668 // 28669 // Arguments: 28670 // parameters: Value of parameters used in the centered RMSProp optimization algorithm. 28671 // ms: Value of ms used in the centered RMSProp optimization algorithm. 28672 // mom: Value of mom used in the centered RMSProp optimization algorithm. 28673 // mg: Value of mg used in the centered RMSProp optimization algorithm. 28674 // 28675 // 28676 // 28677 // Returns the created operation. 28678 func LoadTPUEmbeddingCenteredRMSPropParameters(scope *Scope, parameters tf.Output, ms tf.Output, mom tf.Output, mg tf.Output, num_shards int64, shard_id int64, optional ...LoadTPUEmbeddingCenteredRMSPropParametersAttr) (o *tf.Operation) { 28679 if scope.Err() != nil { 28680 return 28681 } 28682 attrs := map[string]interface{}{"num_shards": num_shards, "shard_id": shard_id} 28683 for _, a := range optional { 28684 a(attrs) 28685 } 28686 opspec := tf.OpSpec{ 28687 Type: "LoadTPUEmbeddingCenteredRMSPropParameters", 28688 Input: []tf.Input{ 28689 parameters, ms, mom, mg, 28690 }, 28691 Attrs: attrs, 28692 } 28693 return scope.AddOperation(opspec) 28694 } 28695 28696 // DataFormatVecPermuteAttr is an optional argument to DataFormatVecPermute. 28697 type DataFormatVecPermuteAttr func(optionalAttr) 28698 28699 // DataFormatVecPermuteSrcFormat sets the optional src_format attribute to value. 28700 // 28701 // value: source data format. 28702 // If not specified, defaults to "NHWC" 28703 func DataFormatVecPermuteSrcFormat(value string) DataFormatVecPermuteAttr { 28704 return func(m optionalAttr) { 28705 m["src_format"] = value 28706 } 28707 } 28708 28709 // DataFormatVecPermuteDstFormat sets the optional dst_format attribute to value. 28710 // 28711 // value: destination data format. 28712 // If not specified, defaults to "NCHW" 28713 func DataFormatVecPermuteDstFormat(value string) DataFormatVecPermuteAttr { 28714 return func(m optionalAttr) { 28715 m["dst_format"] = value 28716 } 28717 } 28718 28719 // Returns the permuted vector/tensor in the destination data format given the 28720 // 28721 // one in the source data format. 28722 // 28723 // Arguments: 28724 // x: Vector of size 4 or Tensor of shape (4, 2) in source data format. 28725 // 28726 // Returns Vector of size 4 or Tensor of shape (4, 2) in destination data format. 28727 func DataFormatVecPermute(scope *Scope, x tf.Output, optional ...DataFormatVecPermuteAttr) (y tf.Output) { 28728 if scope.Err() != nil { 28729 return 28730 } 28731 attrs := map[string]interface{}{} 28732 for _, a := range optional { 28733 a(attrs) 28734 } 28735 opspec := tf.OpSpec{ 28736 Type: "DataFormatVecPermute", 28737 Input: []tf.Input{ 28738 x, 28739 }, 28740 Attrs: attrs, 28741 } 28742 op := scope.AddOperation(opspec) 28743 return op.Output(0) 28744 } 28745 28746 // Returns x / y element-wise. 28747 // 28748 // *NOTE*: `Div` supports broadcasting. More about broadcasting 28749 // [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html) 28750 func Div(scope *Scope, x tf.Output, y tf.Output) (z tf.Output) { 28751 if scope.Err() != nil { 28752 return 28753 } 28754 opspec := tf.OpSpec{ 28755 Type: "Div", 28756 Input: []tf.Input{ 28757 x, y, 28758 }, 28759 } 28760 op := scope.AddOperation(opspec) 28761 return op.Output(0) 28762 } 28763 28764 // CudnnRNNCanonicalToParamsAttr is an optional argument to CudnnRNNCanonicalToParams. 28765 type CudnnRNNCanonicalToParamsAttr func(optionalAttr) 28766 28767 // CudnnRNNCanonicalToParamsRnnMode sets the optional rnn_mode attribute to value. 28768 // If not specified, defaults to "lstm" 28769 func CudnnRNNCanonicalToParamsRnnMode(value string) CudnnRNNCanonicalToParamsAttr { 28770 return func(m optionalAttr) { 28771 m["rnn_mode"] = value 28772 } 28773 } 28774 28775 // CudnnRNNCanonicalToParamsInputMode sets the optional input_mode attribute to value. 28776 // If not specified, defaults to "linear_input" 28777 func CudnnRNNCanonicalToParamsInputMode(value string) CudnnRNNCanonicalToParamsAttr { 28778 return func(m optionalAttr) { 28779 m["input_mode"] = value 28780 } 28781 } 28782 28783 // CudnnRNNCanonicalToParamsDirection sets the optional direction attribute to value. 28784 // If not specified, defaults to "unidirectional" 28785 func CudnnRNNCanonicalToParamsDirection(value string) CudnnRNNCanonicalToParamsAttr { 28786 return func(m optionalAttr) { 28787 m["direction"] = value 28788 } 28789 } 28790 28791 // CudnnRNNCanonicalToParamsDropout sets the optional dropout attribute to value. 28792 // If not specified, defaults to 0 28793 func CudnnRNNCanonicalToParamsDropout(value float32) CudnnRNNCanonicalToParamsAttr { 28794 return func(m optionalAttr) { 28795 m["dropout"] = value 28796 } 28797 } 28798 28799 // CudnnRNNCanonicalToParamsSeed sets the optional seed attribute to value. 28800 // If not specified, defaults to 0 28801 func CudnnRNNCanonicalToParamsSeed(value int64) CudnnRNNCanonicalToParamsAttr { 28802 return func(m optionalAttr) { 28803 m["seed"] = value 28804 } 28805 } 28806 28807 // CudnnRNNCanonicalToParamsSeed2 sets the optional seed2 attribute to value. 28808 // If not specified, defaults to 0 28809 func CudnnRNNCanonicalToParamsSeed2(value int64) CudnnRNNCanonicalToParamsAttr { 28810 return func(m optionalAttr) { 28811 m["seed2"] = value 28812 } 28813 } 28814 28815 // Converts CudnnRNN params from canonical form to usable form. 28816 // 28817 // Writes a set of weights into the opaque params buffer so they can be used in 28818 // upcoming training or inferences. 28819 // 28820 // Note that the params buffer may not be compatible across different GPUs. So any 28821 // save and restoration should be converted to and from the canonical weights and 28822 // biases. 28823 // 28824 // num_layers: Specifies the number of layers in the RNN model. 28825 // num_units: Specifies the size of the hidden state. 28826 // input_size: Specifies the size of the input state. 28827 // weights: the canonical form of weights that can be used for saving 28828 // and restoration. They are more likely to be compatible across different 28829 // generations. 28830 // biases: the canonical form of biases that can be used for saving 28831 // and restoration. They are more likely to be compatible across different 28832 // generations. 28833 // num_params: number of parameter sets for all layers. 28834 // Each layer may contain multiple parameter sets, with each set consisting of 28835 // a weight matrix and a bias vector. 28836 // rnn_mode: Indicates the type of the RNN model. 28837 // input_mode: Indicate whether there is a linear projection between the input and 28838 // The actual computation before the first layer. 'skip_input' is only allowed 28839 // when input_size == num_units; 'auto_select' implies 'skip_input' when 28840 // input_size == num_units; otherwise, it implies 'linear_input'. 28841 // direction: Indicates whether a bidirectional model will be used. 28842 // dir = (direction == bidirectional) ? 2 : 1 28843 // dropout: dropout probability. When set to 0., dropout is disabled. 28844 // seed: the 1st part of a seed to initialize dropout. 28845 // seed2: the 2nd part of a seed to initialize dropout. 28846 func CudnnRNNCanonicalToParams(scope *Scope, num_layers tf.Output, num_units tf.Output, input_size tf.Output, weights []tf.Output, biases []tf.Output, optional ...CudnnRNNCanonicalToParamsAttr) (params tf.Output) { 28847 if scope.Err() != nil { 28848 return 28849 } 28850 attrs := map[string]interface{}{} 28851 for _, a := range optional { 28852 a(attrs) 28853 } 28854 opspec := tf.OpSpec{ 28855 Type: "CudnnRNNCanonicalToParams", 28856 Input: []tf.Input{ 28857 num_layers, num_units, input_size, tf.OutputList(weights), tf.OutputList(biases), 28858 }, 28859 Attrs: attrs, 28860 } 28861 op := scope.AddOperation(opspec) 28862 return op.Output(0) 28863 } 28864 28865 // Creates a dataset containing elements of first component of `input_dataset` having true in the last component. 28866 func FilterByLastComponentDataset(scope *Scope, input_dataset tf.Output, output_types []tf.DataType, output_shapes []tf.Shape) (output tf.Output) { 28867 if scope.Err() != nil { 28868 return 28869 } 28870 attrs := map[string]interface{}{"output_types": output_types, "output_shapes": output_shapes} 28871 opspec := tf.OpSpec{ 28872 Type: "FilterByLastComponentDataset", 28873 Input: []tf.Input{ 28874 input_dataset, 28875 }, 28876 Attrs: attrs, 28877 } 28878 op := scope.AddOperation(opspec) 28879 return op.Output(0) 28880 } 28881 28882 // Computes the absolute value of a tensor. 28883 // 28884 // Given a tensor `x`, this operation returns a tensor containing the absolute 28885 // value of each element in `x`. For example, if x is an input element and y is 28886 // an output element, this operation computes \\(y = |x|\\). 28887 func Abs(scope *Scope, x tf.Output) (y tf.Output) { 28888 if scope.Err() != nil { 28889 return 28890 } 28891 opspec := tf.OpSpec{ 28892 Type: "Abs", 28893 Input: []tf.Input{ 28894 x, 28895 }, 28896 } 28897 op := scope.AddOperation(opspec) 28898 return op.Output(0) 28899 } 28900 28901 // MaxPoolGradV2Attr is an optional argument to MaxPoolGradV2. 28902 type MaxPoolGradV2Attr func(optionalAttr) 28903 28904 // MaxPoolGradV2DataFormat sets the optional data_format attribute to value. 28905 // 28906 // value: Specify the data format of the input and output data. With the 28907 // default format "NHWC", the data is stored in the order of: 28908 // [batch, in_height, in_width, in_channels]. 28909 // Alternatively, the format could be "NCHW", the data storage order of: 28910 // [batch, in_channels, in_height, in_width]. 28911 // If not specified, defaults to "NHWC" 28912 func MaxPoolGradV2DataFormat(value string) MaxPoolGradV2Attr { 28913 return func(m optionalAttr) { 28914 m["data_format"] = value 28915 } 28916 } 28917 28918 // Computes gradients of the maxpooling function. 28919 // 28920 // Arguments: 28921 // orig_input: The original input tensor. 28922 // orig_output: The original output tensor. 28923 // grad: 4-D. Gradients w.r.t. the output of `max_pool`. 28924 // ksize: The size of the window for each dimension of the input tensor. 28925 // strides: The stride of the sliding window for each dimension of the 28926 // input tensor. 28927 // padding: The type of padding algorithm to use. 28928 // 28929 // Returns Gradients w.r.t. the input to `max_pool`. 28930 func MaxPoolGradV2(scope *Scope, orig_input tf.Output, orig_output tf.Output, grad tf.Output, ksize tf.Output, strides tf.Output, padding string, optional ...MaxPoolGradV2Attr) (output tf.Output) { 28931 if scope.Err() != nil { 28932 return 28933 } 28934 attrs := map[string]interface{}{"padding": padding} 28935 for _, a := range optional { 28936 a(attrs) 28937 } 28938 opspec := tf.OpSpec{ 28939 Type: "MaxPoolGradV2", 28940 Input: []tf.Input{ 28941 orig_input, orig_output, grad, ksize, strides, 28942 }, 28943 Attrs: attrs, 28944 } 28945 op := scope.AddOperation(opspec) 28946 return op.Output(0) 28947 } 28948 28949 // Restore a reader to a previously saved state. 28950 // 28951 // Not all Readers support being restored, so this can produce an 28952 // Unimplemented error. 28953 // 28954 // Arguments: 28955 // reader_handle: Handle to a Reader. 28956 // state: Result of a ReaderSerializeState of a Reader with type 28957 // matching reader_handle. 28958 // 28959 // Returns the created operation. 28960 func ReaderRestoreStateV2(scope *Scope, reader_handle tf.Output, state tf.Output) (o *tf.Operation) { 28961 if scope.Err() != nil { 28962 return 28963 } 28964 opspec := tf.OpSpec{ 28965 Type: "ReaderRestoreStateV2", 28966 Input: []tf.Input{ 28967 reader_handle, state, 28968 }, 28969 } 28970 return scope.AddOperation(opspec) 28971 } 28972 28973 // Inverse fast Fourier transform. 28974 // 28975 // Computes the inverse 1-dimensional discrete Fourier transform over the 28976 // inner-most dimension of `input`. 28977 // 28978 // Arguments: 28979 // input: A complex tensor. 28980 // 28981 // Returns A complex tensor of the same shape as `input`. The inner-most 28982 // dimension of `input` is replaced with its inverse 1D Fourier transform. 28983 // 28984 // @compatibility(numpy) 28985 // Equivalent to np.fft.ifft 28986 // @end_compatibility 28987 func IFFT(scope *Scope, input tf.Output) (output tf.Output) { 28988 if scope.Err() != nil { 28989 return 28990 } 28991 opspec := tf.OpSpec{ 28992 Type: "IFFT", 28993 Input: []tf.Input{ 28994 input, 28995 }, 28996 } 28997 op := scope.AddOperation(opspec) 28998 return op.Output(0) 28999 } 29000 29001 // 2D fast Fourier transform. 29002 // 29003 // Computes the 2-dimensional discrete Fourier transform over the inner-most 29004 // 2 dimensions of `input`. 29005 // 29006 // Arguments: 29007 // input: A complex tensor. 29008 // 29009 // Returns A complex tensor of the same shape as `input`. The inner-most 2 29010 // dimensions of `input` are replaced with their 2D Fourier transform. 29011 // 29012 // @compatibility(numpy) 29013 // Equivalent to np.fft.fft2 29014 // @end_compatibility 29015 func FFT2D(scope *Scope, input tf.Output) (output tf.Output) { 29016 if scope.Err() != nil { 29017 return 29018 } 29019 opspec := tf.OpSpec{ 29020 Type: "FFT2D", 29021 Input: []tf.Input{ 29022 input, 29023 }, 29024 } 29025 op := scope.AddOperation(opspec) 29026 return op.Output(0) 29027 } 29028 29029 // Inverse 2D fast Fourier transform. 29030 // 29031 // Computes the inverse 2-dimensional discrete Fourier transform over the 29032 // inner-most 2 dimensions of `input`. 29033 // 29034 // Arguments: 29035 // input: A complex tensor. 29036 // 29037 // Returns A complex tensor of the same shape as `input`. The inner-most 2 29038 // dimensions of `input` are replaced with their inverse 2D Fourier transform. 29039 // 29040 // @compatibility(numpy) 29041 // Equivalent to np.fft.ifft2 29042 // @end_compatibility 29043 func IFFT2D(scope *Scope, input tf.Output) (output tf.Output) { 29044 if scope.Err() != nil { 29045 return 29046 } 29047 opspec := tf.OpSpec{ 29048 Type: "IFFT2D", 29049 Input: []tf.Input{ 29050 input, 29051 }, 29052 } 29053 op := scope.AddOperation(opspec) 29054 return op.Output(0) 29055 } 29056 29057 // Inverse 3D real-valued fast Fourier transform. 29058 // 29059 // Computes the inverse 3-dimensional discrete Fourier transform of a real-valued 29060 // signal over the inner-most 3 dimensions of `input`. 29061 // 29062 // The inner-most 3 dimensions of `input` are assumed to be the result of `RFFT3D`: 29063 // The inner-most dimension contains the `fft_length / 2 + 1` unique components of 29064 // the DFT of a real-valued signal. If `fft_length` is not provided, it is computed 29065 // from the size of the inner-most 3 dimensions of `input`. If the FFT length used 29066 // to compute `input` is odd, it should be provided since it cannot be inferred 29067 // properly. 29068 // 29069 // Along each axis `IRFFT3D` is computed on, if `fft_length` (or 29070 // `fft_length / 2 + 1` for the inner-most dimension) is smaller than the 29071 // corresponding dimension of `input`, the dimension is cropped. If it is larger, 29072 // the dimension is padded with zeros. 29073 // 29074 // Arguments: 29075 // input: A complex64 tensor. 29076 // fft_length: An int32 tensor of shape [3]. The FFT length for each dimension. 29077 // 29078 // Returns A float32 tensor of the same rank as `input`. The inner-most 3 29079 // dimensions of `input` are replaced with the `fft_length` samples of their 29080 // inverse 3D real Fourier transform. 29081 // 29082 // @compatibility(numpy) 29083 // Equivalent to np.irfftn with 3 dimensions. 29084 // @end_compatibility 29085 func IRFFT3D(scope *Scope, input tf.Output, fft_length tf.Output) (output tf.Output) { 29086 if scope.Err() != nil { 29087 return 29088 } 29089 opspec := tf.OpSpec{ 29090 Type: "IRFFT3D", 29091 Input: []tf.Input{ 29092 input, fft_length, 29093 }, 29094 } 29095 op := scope.AddOperation(opspec) 29096 return op.Output(0) 29097 } 29098 29099 // Returns the truth value of (x != y) element-wise. 29100 // 29101 // *NOTE*: `NotEqual` supports broadcasting. More about broadcasting 29102 // [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html) 29103 func NotEqual(scope *Scope, x tf.Output, y tf.Output) (z tf.Output) { 29104 if scope.Err() != nil { 29105 return 29106 } 29107 opspec := tf.OpSpec{ 29108 Type: "NotEqual", 29109 Input: []tf.Input{ 29110 x, y, 29111 }, 29112 } 29113 op := scope.AddOperation(opspec) 29114 return op.Output(0) 29115 } 29116 29117 // LoadTPUEmbeddingMomentumParametersGradAccumDebugAttr is an optional argument to LoadTPUEmbeddingMomentumParametersGradAccumDebug. 29118 type LoadTPUEmbeddingMomentumParametersGradAccumDebugAttr func(optionalAttr) 29119 29120 // LoadTPUEmbeddingMomentumParametersGradAccumDebugTableId sets the optional table_id attribute to value. 29121 // If not specified, defaults to -1 29122 // 29123 // REQUIRES: value >= -1 29124 func LoadTPUEmbeddingMomentumParametersGradAccumDebugTableId(value int64) LoadTPUEmbeddingMomentumParametersGradAccumDebugAttr { 29125 return func(m optionalAttr) { 29126 m["table_id"] = value 29127 } 29128 } 29129 29130 // LoadTPUEmbeddingMomentumParametersGradAccumDebugTableName sets the optional table_name attribute to value. 29131 // If not specified, defaults to "" 29132 func LoadTPUEmbeddingMomentumParametersGradAccumDebugTableName(value string) LoadTPUEmbeddingMomentumParametersGradAccumDebugAttr { 29133 return func(m optionalAttr) { 29134 m["table_name"] = value 29135 } 29136 } 29137 29138 // Load Momentum embedding parameters with debug support. 29139 // 29140 // An op that loads optimization parameters into HBM for embedding. Must be 29141 // preceded by a ConfigureTPUEmbeddingHost op that sets up the correct 29142 // embedding table configuration. For example, this op is used to install 29143 // parameters that are loaded from a checkpoint before a training loop is 29144 // executed. 29145 // 29146 // Arguments: 29147 // parameters: Value of parameters used in the Momentum optimization algorithm. 29148 // momenta: Value of momenta used in the Momentum optimization algorithm. 29149 // gradient_accumulators: Value of gradient_accumulators used in the Momentum optimization algorithm. 29150 // 29151 // 29152 // 29153 // Returns the created operation. 29154 func LoadTPUEmbeddingMomentumParametersGradAccumDebug(scope *Scope, parameters tf.Output, momenta tf.Output, gradient_accumulators tf.Output, num_shards int64, shard_id int64, optional ...LoadTPUEmbeddingMomentumParametersGradAccumDebugAttr) (o *tf.Operation) { 29155 if scope.Err() != nil { 29156 return 29157 } 29158 attrs := map[string]interface{}{"num_shards": num_shards, "shard_id": shard_id} 29159 for _, a := range optional { 29160 a(attrs) 29161 } 29162 opspec := tf.OpSpec{ 29163 Type: "LoadTPUEmbeddingMomentumParametersGradAccumDebug", 29164 Input: []tf.Input{ 29165 parameters, momenta, gradient_accumulators, 29166 }, 29167 Attrs: attrs, 29168 } 29169 return scope.AddOperation(opspec) 29170 } 29171 29172 // StatefulStandardNormalAttr is an optional argument to StatefulStandardNormal. 29173 type StatefulStandardNormalAttr func(optionalAttr) 29174 29175 // StatefulStandardNormalDtype sets the optional dtype attribute to value. 29176 // 29177 // value: The type of the output. 29178 // If not specified, defaults to DT_FLOAT 29179 func StatefulStandardNormalDtype(value tf.DataType) StatefulStandardNormalAttr { 29180 return func(m optionalAttr) { 29181 m["dtype"] = value 29182 } 29183 } 29184 29185 // Outputs random values from a normal distribution. 29186 // 29187 // The generated values will have mean 0 and standard deviation 1. 29188 // 29189 // Arguments: 29190 // resource: The handle of the resource variable that stores the state of the RNG. 29191 // shape: The shape of the output tensor. 29192 // 29193 // Returns A tensor of the specified shape filled with random normal values. 29194 func StatefulStandardNormal(scope *Scope, resource tf.Output, shape tf.Output, optional ...StatefulStandardNormalAttr) (output tf.Output) { 29195 if scope.Err() != nil { 29196 return 29197 } 29198 attrs := map[string]interface{}{} 29199 for _, a := range optional { 29200 a(attrs) 29201 } 29202 opspec := tf.OpSpec{ 29203 Type: "StatefulStandardNormal", 29204 Input: []tf.Input{ 29205 resource, shape, 29206 }, 29207 Attrs: attrs, 29208 } 29209 op := scope.AddOperation(opspec) 29210 return op.Output(0) 29211 } 29212 29213 // Computes the Gauss error function of `x` element-wise. 29214 func Erf(scope *Scope, x tf.Output) (y tf.Output) { 29215 if scope.Err() != nil { 29216 return 29217 } 29218 opspec := tf.OpSpec{ 29219 Type: "Erf", 29220 Input: []tf.Input{ 29221 x, 29222 }, 29223 } 29224 op := scope.AddOperation(opspec) 29225 return op.Output(0) 29226 } 29227 29228 // Returns element-wise largest integer not greater than x. 29229 func Floor(scope *Scope, x tf.Output) (y tf.Output) { 29230 if scope.Err() != nil { 29231 return 29232 } 29233 opspec := tf.OpSpec{ 29234 Type: "Floor", 29235 Input: []tf.Input{ 29236 x, 29237 }, 29238 } 29239 op := scope.AddOperation(opspec) 29240 return op.Output(0) 29241 } 29242 29243 // Returns the number of records this Reader has produced. 29244 // 29245 // This is the same as the number of ReaderRead executions that have 29246 // succeeded. 29247 // 29248 // Arguments: 29249 // reader_handle: Handle to a Reader. 29250 func ReaderNumRecordsProducedV2(scope *Scope, reader_handle tf.Output) (records_produced tf.Output) { 29251 if scope.Err() != nil { 29252 return 29253 } 29254 opspec := tf.OpSpec{ 29255 Type: "ReaderNumRecordsProducedV2", 29256 Input: []tf.Input{ 29257 reader_handle, 29258 }, 29259 } 29260 op := scope.AddOperation(opspec) 29261 return op.Output(0) 29262 } 29263 29264 // TensorListConcatAttr is an optional argument to TensorListConcat. 29265 type TensorListConcatAttr func(optionalAttr) 29266 29267 // TensorListConcatElementShape sets the optional element_shape attribute to value. 29268 // If not specified, defaults to <unknown_rank:true > 29269 func TensorListConcatElementShape(value tf.Shape) TensorListConcatAttr { 29270 return func(m optionalAttr) { 29271 m["element_shape"] = value 29272 } 29273 } 29274 29275 // Concats all tensors in the list along the 0th dimension. 29276 // 29277 // Requires that all tensors have the same shape except the first dimension. 29278 // 29279 // input_handle: The input list. 29280 // tensor: The concated result. 29281 // lengths: Output tensor containing sizes of the 0th dimension of tensors in the list, used for computing the gradient. 29282 // 29283 func TensorListConcat(scope *Scope, input_handle tf.Output, element_dtype tf.DataType, optional ...TensorListConcatAttr) (tensor tf.Output, lengths tf.Output) { 29284 if scope.Err() != nil { 29285 return 29286 } 29287 attrs := map[string]interface{}{"element_dtype": element_dtype} 29288 for _, a := range optional { 29289 a(attrs) 29290 } 29291 opspec := tf.OpSpec{ 29292 Type: "TensorListConcat", 29293 Input: []tf.Input{ 29294 input_handle, 29295 }, 29296 Attrs: attrs, 29297 } 29298 op := scope.AddOperation(opspec) 29299 return op.Output(0), op.Output(1) 29300 } 29301 29302 // Elementwise computes the bitwise AND of `x` and `y`. 29303 // 29304 // The result will have those bits set, that are set in both `x` and `y`. The 29305 // computation is performed on the underlying representations of `x` and `y`. 29306 func BitwiseAnd(scope *Scope, x tf.Output, y tf.Output) (z tf.Output) { 29307 if scope.Err() != nil { 29308 return 29309 } 29310 opspec := tf.OpSpec{ 29311 Type: "BitwiseAnd", 29312 Input: []tf.Input{ 29313 x, y, 29314 }, 29315 } 29316 op := scope.AddOperation(opspec) 29317 return op.Output(0) 29318 } 29319 29320 // ResizeAreaAttr is an optional argument to ResizeArea. 29321 type ResizeAreaAttr func(optionalAttr) 29322 29323 // ResizeAreaAlignCorners sets the optional align_corners attribute to value. 29324 // 29325 // value: If true, the centers of the 4 corner pixels of the input and output tensors are 29326 // aligned, preserving the values at the corner pixels. Defaults to false. 29327 // If not specified, defaults to false 29328 func ResizeAreaAlignCorners(value bool) ResizeAreaAttr { 29329 return func(m optionalAttr) { 29330 m["align_corners"] = value 29331 } 29332 } 29333 29334 // Resize `images` to `size` using area interpolation. 29335 // 29336 // Input images can be of different types but output images are always float. 29337 // 29338 // The range of pixel values for the output image might be slightly different 29339 // from the range for the input image because of limited numerical precision. 29340 // To guarantee an output range, for example `[0.0, 1.0]`, apply 29341 // `tf.clip_by_value` to the output. 29342 // 29343 // Each output pixel is computed by first transforming the pixel's footprint into 29344 // the input tensor and then averaging the pixels that intersect the footprint. An 29345 // input pixel's contribution to the average is weighted by the fraction of its 29346 // area that intersects the footprint. This is the same as OpenCV's INTER_AREA. 29347 // 29348 // Arguments: 29349 // images: 4-D with shape `[batch, height, width, channels]`. 29350 // size: = A 1-D int32 Tensor of 2 elements: `new_height, new_width`. The 29351 // new size for the images. 29352 // 29353 // Returns 4-D with shape 29354 // `[batch, new_height, new_width, channels]`. 29355 func ResizeArea(scope *Scope, images tf.Output, size tf.Output, optional ...ResizeAreaAttr) (resized_images tf.Output) { 29356 if scope.Err() != nil { 29357 return 29358 } 29359 attrs := map[string]interface{}{} 29360 for _, a := range optional { 29361 a(attrs) 29362 } 29363 opspec := tf.OpSpec{ 29364 Type: "ResizeArea", 29365 Input: []tf.Input{ 29366 images, size, 29367 }, 29368 Attrs: attrs, 29369 } 29370 op := scope.AddOperation(opspec) 29371 return op.Output(0) 29372 } 29373 29374 // Sends `input` to all devices that are connected to the output. 29375 // 29376 // Sends `input` to all devices that are connected to the output. 29377 // 29378 // The graph should be constructed so that all ops connected to the output have a 29379 // valid device assignment, and the op itself is assigned one of these devices. 29380 // 29381 // input: The input to the broadcast. 29382 // output: The same as input. 29383 // shape: The shape of the input tensor. 29384 // 29385 func NcclBroadcast(scope *Scope, input tf.Output, shape tf.Shape) (output tf.Output) { 29386 if scope.Err() != nil { 29387 return 29388 } 29389 attrs := map[string]interface{}{"shape": shape} 29390 opspec := tf.OpSpec{ 29391 Type: "NcclBroadcast", 29392 Input: []tf.Input{ 29393 input, 29394 }, 29395 Attrs: attrs, 29396 } 29397 op := scope.AddOperation(opspec) 29398 return op.Output(0) 29399 } 29400 29401 // Computes the gradient of morphological 2-D dilation with respect to the filter. 29402 // 29403 // Arguments: 29404 // input: 4-D with shape `[batch, in_height, in_width, depth]`. 29405 // filter: 3-D with shape `[filter_height, filter_width, depth]`. 29406 // out_backprop: 4-D with shape `[batch, out_height, out_width, depth]`. 29407 // strides: 1-D of length 4. The stride of the sliding window for each dimension of 29408 // the input tensor. Must be: `[1, stride_height, stride_width, 1]`. 29409 // rates: 1-D of length 4. The input stride for atrous morphological dilation. 29410 // Must be: `[1, rate_height, rate_width, 1]`. 29411 // padding: The type of padding algorithm to use. 29412 // 29413 // Returns 3-D with shape `[filter_height, filter_width, depth]`. 29414 func Dilation2DBackpropFilter(scope *Scope, input tf.Output, filter tf.Output, out_backprop tf.Output, strides []int64, rates []int64, padding string) (filter_backprop tf.Output) { 29415 if scope.Err() != nil { 29416 return 29417 } 29418 attrs := map[string]interface{}{"strides": strides, "rates": rates, "padding": padding} 29419 opspec := tf.OpSpec{ 29420 Type: "Dilation2DBackpropFilter", 29421 Input: []tf.Input{ 29422 input, filter, out_backprop, 29423 }, 29424 Attrs: attrs, 29425 } 29426 op := scope.AddOperation(opspec) 29427 return op.Output(0) 29428 } 29429 29430 // AddSparseToTensorsMapAttr is an optional argument to AddSparseToTensorsMap. 29431 type AddSparseToTensorsMapAttr func(optionalAttr) 29432 29433 // AddSparseToTensorsMapContainer sets the optional container attribute to value. 29434 // 29435 // value: The container name for the `SparseTensorsMap` created by this op. 29436 // If not specified, defaults to "" 29437 func AddSparseToTensorsMapContainer(value string) AddSparseToTensorsMapAttr { 29438 return func(m optionalAttr) { 29439 m["container"] = value 29440 } 29441 } 29442 29443 // AddSparseToTensorsMapSharedName sets the optional shared_name attribute to value. 29444 // 29445 // value: The shared name for the `SparseTensorsMap` created by this op. 29446 // If blank, the new Operation's unique name is used. 29447 // If not specified, defaults to "" 29448 func AddSparseToTensorsMapSharedName(value string) AddSparseToTensorsMapAttr { 29449 return func(m optionalAttr) { 29450 m["shared_name"] = value 29451 } 29452 } 29453 29454 // Add a `SparseTensor` to a `SparseTensorsMap` return its handle. 29455 // 29456 // A `SparseTensor` is represented by three tensors: `sparse_indices`, 29457 // `sparse_values`, and `sparse_shape`. 29458 // 29459 // This operator takes the given `SparseTensor` and adds it to a container 29460 // object (a `SparseTensorsMap`). A unique key within this container is generated 29461 // in the form of an `int64`, and this is the value that is returned. 29462 // 29463 // The `SparseTensor` can then be read out as part of a minibatch by passing 29464 // the key as a vector element to `TakeManySparseFromTensorsMap`. To ensure 29465 // the correct `SparseTensorsMap` is accessed, ensure that the same 29466 // `container` and `shared_name` are passed to that Op. If no `shared_name` 29467 // is provided here, instead use the *name* of the Operation created by calling 29468 // `AddSparseToTensorsMap` as the `shared_name` passed to 29469 // `TakeManySparseFromTensorsMap`. Ensure the Operations are colocated. 29470 // 29471 // Arguments: 29472 // sparse_indices: 2-D. The `indices` of the `SparseTensor`. 29473 // sparse_values: 1-D. The `values` of the `SparseTensor`. 29474 // sparse_shape: 1-D. The `shape` of the `SparseTensor`. 29475 // 29476 // Returns 0-D. The handle of the `SparseTensor` now stored in the 29477 // `SparseTensorsMap`. 29478 func AddSparseToTensorsMap(scope *Scope, sparse_indices tf.Output, sparse_values tf.Output, sparse_shape tf.Output, optional ...AddSparseToTensorsMapAttr) (sparse_handle tf.Output) { 29479 if scope.Err() != nil { 29480 return 29481 } 29482 attrs := map[string]interface{}{} 29483 for _, a := range optional { 29484 a(attrs) 29485 } 29486 opspec := tf.OpSpec{ 29487 Type: "AddSparseToTensorsMap", 29488 Input: []tf.Input{ 29489 sparse_indices, sparse_values, sparse_shape, 29490 }, 29491 Attrs: attrs, 29492 } 29493 op := scope.AddOperation(opspec) 29494 return op.Output(0) 29495 } 29496 29497 // Returns a list list which has the passed-in `Tensor` as last element and the other elements of the given list in `input_handle`. 29498 // 29499 // tensor: The tensor to put on the list. 29500 // input_handle: The old list. 29501 // output_handle: A list with the elements of the old list followed by tensor. 29502 // element_dtype: the type of elements in the list. 29503 // element_shape: a shape compatible with that of elements in the list. 29504 func TensorListPushBack(scope *Scope, input_handle tf.Output, tensor tf.Output) (output_handle tf.Output) { 29505 if scope.Err() != nil { 29506 return 29507 } 29508 opspec := tf.OpSpec{ 29509 Type: "TensorListPushBack", 29510 Input: []tf.Input{ 29511 input_handle, tensor, 29512 }, 29513 } 29514 op := scope.AddOperation(opspec) 29515 return op.Output(0) 29516 } 29517 29518 // EnterAttr is an optional argument to Enter. 29519 type EnterAttr func(optionalAttr) 29520 29521 // EnterIsConstant sets the optional is_constant attribute to value. 29522 // 29523 // value: If true, the output is constant within the child frame. 29524 // If not specified, defaults to false 29525 func EnterIsConstant(value bool) EnterAttr { 29526 return func(m optionalAttr) { 29527 m["is_constant"] = value 29528 } 29529 } 29530 29531 // EnterParallelIterations sets the optional parallel_iterations attribute to value. 29532 // 29533 // value: The number of iterations allowed to run in parallel. 29534 // If not specified, defaults to 10 29535 func EnterParallelIterations(value int64) EnterAttr { 29536 return func(m optionalAttr) { 29537 m["parallel_iterations"] = value 29538 } 29539 } 29540 29541 // Creates or finds a child frame, and makes `data` available to the child frame. 29542 // 29543 // This op is used together with `Exit` to create loops in the graph. 29544 // The unique `frame_name` is used by the `Executor` to identify frames. If 29545 // `is_constant` is true, `output` is a constant in the child frame; otherwise 29546 // it may be changed in the child frame. At most `parallel_iterations` iterations 29547 // are run in parallel in the child frame. 29548 // 29549 // Arguments: 29550 // data: The tensor to be made available to the child frame. 29551 // frame_name: The name of the child frame. 29552 // 29553 // Returns The same tensor as `data`. 29554 func Enter(scope *Scope, data tf.Output, frame_name string, optional ...EnterAttr) (output tf.Output) { 29555 if scope.Err() != nil { 29556 return 29557 } 29558 attrs := map[string]interface{}{"frame_name": frame_name} 29559 for _, a := range optional { 29560 a(attrs) 29561 } 29562 opspec := tf.OpSpec{ 29563 Type: "Enter", 29564 Input: []tf.Input{ 29565 data, 29566 }, 29567 Attrs: attrs, 29568 } 29569 op := scope.AddOperation(opspec) 29570 return op.Output(0) 29571 } 29572 29573 // TryRpcAttr is an optional argument to TryRpc. 29574 type TryRpcAttr func(optionalAttr) 29575 29576 // TryRpcProtocol sets the optional protocol attribute to value. 29577 // 29578 // value: RPC protocol to use. Empty string means use the default protocol. 29579 // Options include 'grpc'. 29580 // If not specified, defaults to "" 29581 func TryRpcProtocol(value string) TryRpcAttr { 29582 return func(m optionalAttr) { 29583 m["protocol"] = value 29584 } 29585 } 29586 29587 // TryRpcFailFast sets the optional fail_fast attribute to value. 29588 // 29589 // value: `boolean`. If `true` (default), then failures to connect 29590 // (i.e., the server does not immediately respond) cause an RPC failure. 29591 // If not specified, defaults to true 29592 func TryRpcFailFast(value bool) TryRpcAttr { 29593 return func(m optionalAttr) { 29594 m["fail_fast"] = value 29595 } 29596 } 29597 29598 // TryRpcTimeoutInMs sets the optional timeout_in_ms attribute to value. 29599 // 29600 // value: `int`. If `0` (default), then the kernel will run the RPC 29601 // request and only time out if the RPC deadline passes or the session times out. 29602 // If this value is greater than `0`, then the op will raise an exception if 29603 // the RPC takes longer than `timeout_in_ms`. 29604 // If not specified, defaults to 0 29605 func TryRpcTimeoutInMs(value int64) TryRpcAttr { 29606 return func(m optionalAttr) { 29607 m["timeout_in_ms"] = value 29608 } 29609 } 29610 29611 // Perform batches of RPC requests. 29612 // 29613 // This op asynchronously performs either a single RPC request, or a batch 29614 // of requests. RPC requests are defined by three main parameters: 29615 // 29616 // - `address` (the host+port or BNS address of the request) 29617 // - `method` (the method name for the request) 29618 // - `request` (the serialized proto string, or vector of strings, 29619 // of the RPC request argument). 29620 // 29621 // For example, if you have an RPC service running on port localhost:2345, 29622 // and its interface is configured with the following proto declaration: 29623 // 29624 // ``` 29625 // service MyService { 29626 // rpc MyMethod(MyRequestProto) returns (MyResponseProto) { 29627 // } 29628 // }; 29629 // ``` 29630 // 29631 // then call this op with arguments: 29632 // 29633 // ``` 29634 // address = "localhost:2345" 29635 // method = "MyService/MyMethod" 29636 // ``` 29637 // 29638 // The `request` tensor is a string tensor representing serialized `MyRequestProto` 29639 // strings; and the output string tensor `response` will have the same shape 29640 // and contain (upon successful completion) corresponding serialized 29641 // `MyResponseProto` strings. 29642 // 29643 // For example, to send a single, empty, `MyRequestProto`, call 29644 // this op with `request = ""`. To send 5 **parallel** empty requests, 29645 // call this op with `request = ["", "", "", "", ""]`. 29646 // 29647 // More generally, one can create a batch of `MyRequestProto` serialized protos 29648 // from regular batched tensors using the `encode_proto` op, and convert 29649 // the response `MyResponseProto` serialized protos to batched tensors 29650 // using the `decode_proto` op. 29651 // 29652 // **NOTE** Working with serialized proto strings is faster than instantiating 29653 // actual proto objects in memory, so no performance degradation is expected 29654 // compared to writing custom kernels for this workflow. 29655 // 29656 // Unlike the standard `Rpc` op, if the connection fails or the remote worker 29657 // returns an error status, this op does **not** reraise the exception. 29658 // Instead, the `status_code` and `status_message` entry for the corresponding RPC 29659 // call is set with the error returned from the RPC call. The `response` tensor 29660 // will contain valid response values for those minibatch entries whose RPCs did 29661 // not fail; the rest of the entries will have empty strings. 29662 // 29663 // Arguments: 29664 // address: `0-D` or `1-D`. The address (i.e. host_name:port) of the RPC server. 29665 // If this tensor has more than 1 element, then multiple parallel rpc requests 29666 // are sent. This argument broadcasts with `method` and `request`. 29667 // method: `0-D` or `1-D`. The method address on the RPC server. 29668 // If this tensor has more than 1 element, then multiple parallel rpc requests 29669 // are sent. This argument broadcasts with `address` and `request`. 29670 // request: `0-D` or `1-D`. Serialized proto strings: the rpc request argument. 29671 // If this tensor has more than 1 element, then multiple parallel rpc requests 29672 // are sent. This argument broadcasts with `address` and `method`. 29673 // 29674 // Returns Same shape as `request`. Serialized proto strings: the rpc responses.Same shape as `request`. Values correspond to tensorflow Status enum codes.Same shape as `request`. Values correspond to Status messages 29675 // returned from the RPC calls. 29676 func TryRpc(scope *Scope, address tf.Output, method tf.Output, request tf.Output, optional ...TryRpcAttr) (response tf.Output, status_code tf.Output, status_message tf.Output) { 29677 if scope.Err() != nil { 29678 return 29679 } 29680 attrs := map[string]interface{}{} 29681 for _, a := range optional { 29682 a(attrs) 29683 } 29684 opspec := tf.OpSpec{ 29685 Type: "TryRpc", 29686 Input: []tf.Input{ 29687 address, method, request, 29688 }, 29689 Attrs: attrs, 29690 } 29691 op := scope.AddOperation(opspec) 29692 return op.Output(0), op.Output(1), op.Output(2) 29693 } 29694 29695 // Add all input tensors element wise. 29696 // 29697 // Arguments: 29698 // inputs: Must all be the same size and shape. 29699 func AddN(scope *Scope, inputs []tf.Output) (sum tf.Output) { 29700 if scope.Err() != nil { 29701 return 29702 } 29703 opspec := tf.OpSpec{ 29704 Type: "AddN", 29705 Input: []tf.Input{ 29706 tf.OutputList(inputs), 29707 }, 29708 } 29709 op := scope.AddOperation(opspec) 29710 return op.Output(0) 29711 } 29712 29713 // Returns the element-wise sum of a list of tensors. 29714 // 29715 // `tf.accumulate_n_v2` performs the same operation as `tf.add_n`, but does not 29716 // wait for all of its inputs to be ready before beginning to sum. This can 29717 // save memory if inputs are ready at different times, since minimum temporary 29718 // storage is proportional to the output size rather than the inputs size. 29719 // 29720 // Unlike the original `accumulate_n`, `accumulate_n_v2` is differentiable. 29721 // 29722 // Returns a `Tensor` of same shape and type as the elements of `inputs`. 29723 // 29724 // Arguments: 29725 // inputs: A list of `Tensor` objects, each with same shape and type. 29726 // shape: Shape of elements of `inputs`. 29727 func AccumulateNV2(scope *Scope, inputs []tf.Output, shape tf.Shape) (sum tf.Output) { 29728 if scope.Err() != nil { 29729 return 29730 } 29731 attrs := map[string]interface{}{"shape": shape} 29732 opspec := tf.OpSpec{ 29733 Type: "AccumulateNV2", 29734 Input: []tf.Input{ 29735 tf.OutputList(inputs), 29736 }, 29737 Attrs: attrs, 29738 } 29739 op := scope.AddOperation(opspec) 29740 return op.Output(0) 29741 } 29742 29743 // Computes the reciprocal of x element-wise. 29744 // 29745 // I.e., \\(y = 1 / x\\). 29746 func Inv(scope *Scope, x tf.Output) (y tf.Output) { 29747 if scope.Err() != nil { 29748 return 29749 } 29750 opspec := tf.OpSpec{ 29751 Type: "Inv", 29752 Input: []tf.Input{ 29753 x, 29754 }, 29755 } 29756 op := scope.AddOperation(opspec) 29757 return op.Output(0) 29758 } 29759 29760 // Creates a dataset that batches input elements into a SparseTensor. 29761 // 29762 // Arguments: 29763 // input_dataset: A handle to an input dataset. Must have a single component. 29764 // batch_size: A scalar representing the number of elements to accumulate in a 29765 // batch. 29766 // row_shape: A vector representing the dense shape of each row in the produced 29767 // SparseTensor. The shape may be partially specified, using `-1` to indicate 29768 // that a particular dimension should use the maximum size of all batch elements. 29769 // 29770 // 29771 func ExperimentalDenseToSparseBatchDataset(scope *Scope, input_dataset tf.Output, batch_size tf.Output, row_shape tf.Output, output_types []tf.DataType, output_shapes []tf.Shape) (handle tf.Output) { 29772 if scope.Err() != nil { 29773 return 29774 } 29775 attrs := map[string]interface{}{"output_types": output_types, "output_shapes": output_shapes} 29776 opspec := tf.OpSpec{ 29777 Type: "ExperimentalDenseToSparseBatchDataset", 29778 Input: []tf.Input{ 29779 input_dataset, batch_size, row_shape, 29780 }, 29781 Attrs: attrs, 29782 } 29783 op := scope.AddOperation(opspec) 29784 return op.Output(0) 29785 } 29786 29787 // Computes the reciprocal of x element-wise. 29788 // 29789 // I.e., \\(y = 1 / x\\). 29790 func Reciprocal(scope *Scope, x tf.Output) (y tf.Output) { 29791 if scope.Err() != nil { 29792 return 29793 } 29794 opspec := tf.OpSpec{ 29795 Type: "Reciprocal", 29796 Input: []tf.Input{ 29797 x, 29798 }, 29799 } 29800 op := scope.AddOperation(opspec) 29801 return op.Output(0) 29802 } 29803 29804 // Conv3DBackpropFilterAttr is an optional argument to Conv3DBackpropFilter. 29805 type Conv3DBackpropFilterAttr func(optionalAttr) 29806 29807 // Conv3DBackpropFilterDilations sets the optional dilations attribute to value. 29808 // If not specified, defaults to <i:1 i:1 i:1 i:1 i:1 > 29809 func Conv3DBackpropFilterDilations(value []int64) Conv3DBackpropFilterAttr { 29810 return func(m optionalAttr) { 29811 m["dilations"] = value 29812 } 29813 } 29814 29815 // Computes the gradients of 3-D convolution with respect to the filter. 29816 // 29817 // DEPRECATED at GraphDef version 10: Use Conv3DBackpropFilterV2 29818 // 29819 // Arguments: 29820 // input: Shape `[batch, depth, rows, cols, in_channels]`. 29821 // filter: Shape `[depth, rows, cols, in_channels, out_channels]`. 29822 // `in_channels` must match between `input` and `filter`. 29823 // out_backprop: Backprop signal of shape `[batch, out_depth, out_rows, out_cols, 29824 // out_channels]`. 29825 // strides: 1-D tensor of length 5. The stride of the sliding window for each 29826 // dimension of `input`. Must have `strides[0] = strides[4] = 1`. 29827 // padding: The type of padding algorithm to use. 29828 func Conv3DBackpropFilter(scope *Scope, input tf.Output, filter tf.Output, out_backprop tf.Output, strides []int64, padding string, optional ...Conv3DBackpropFilterAttr) (output tf.Output) { 29829 if scope.Err() != nil { 29830 return 29831 } 29832 attrs := map[string]interface{}{"strides": strides, "padding": padding} 29833 for _, a := range optional { 29834 a(attrs) 29835 } 29836 opspec := tf.OpSpec{ 29837 Type: "Conv3DBackpropFilter", 29838 Input: []tf.Input{ 29839 input, filter, out_backprop, 29840 }, 29841 Attrs: attrs, 29842 } 29843 op := scope.AddOperation(opspec) 29844 return op.Output(0) 29845 } 29846 29847 // Computes square root of x element-wise. 29848 // 29849 // I.e., \\(y = \sqrt{x} = x^{1/2}\\). 29850 func Sqrt(scope *Scope, x tf.Output) (y tf.Output) { 29851 if scope.Err() != nil { 29852 return 29853 } 29854 opspec := tf.OpSpec{ 29855 Type: "Sqrt", 29856 Input: []tf.Input{ 29857 x, 29858 }, 29859 } 29860 op := scope.AddOperation(opspec) 29861 return op.Output(0) 29862 } 29863 29864 // Get the value of the tensor specified by its handle. 29865 // 29866 // Arguments: 29867 // handle: The handle for a tensor stored in the session state. 29868 // dtype: The type of the output value. 29869 // 29870 // Returns The tensor for the given handle. 29871 func GetSessionTensor(scope *Scope, handle tf.Output, dtype tf.DataType) (value tf.Output) { 29872 if scope.Err() != nil { 29873 return 29874 } 29875 attrs := map[string]interface{}{"dtype": dtype} 29876 opspec := tf.OpSpec{ 29877 Type: "GetSessionTensor", 29878 Input: []tf.Input{ 29879 handle, 29880 }, 29881 Attrs: attrs, 29882 } 29883 op := scope.AddOperation(opspec) 29884 return op.Output(0) 29885 } 29886 29887 // Computes the gradient for the sqrt of `x` wrt its input. 29888 // 29889 // Specifically, `grad = dy * 0.5 / y`, where `y = sqrt(x)`, and `dy` 29890 // is the corresponding input gradient. 29891 func SqrtGrad(scope *Scope, y tf.Output, dy tf.Output) (z tf.Output) { 29892 if scope.Err() != nil { 29893 return 29894 } 29895 opspec := tf.OpSpec{ 29896 Type: "SqrtGrad", 29897 Input: []tf.Input{ 29898 y, dy, 29899 }, 29900 } 29901 op := scope.AddOperation(opspec) 29902 return op.Output(0) 29903 } 29904 29905 // MatrixInverseAttr is an optional argument to MatrixInverse. 29906 type MatrixInverseAttr func(optionalAttr) 29907 29908 // MatrixInverseAdjoint sets the optional adjoint attribute to value. 29909 // If not specified, defaults to false 29910 func MatrixInverseAdjoint(value bool) MatrixInverseAttr { 29911 return func(m optionalAttr) { 29912 m["adjoint"] = value 29913 } 29914 } 29915 29916 // Computes the inverse of one or more square invertible matrices or their 29917 // 29918 // adjoints (conjugate transposes). 29919 // 29920 // The input is a tensor of shape `[..., M, M]` whose inner-most 2 dimensions 29921 // form square matrices. The output is a tensor of the same shape as the input 29922 // containing the inverse for all input submatrices `[..., :, :]`. 29923 // 29924 // The op uses LU decomposition with partial pivoting to compute the inverses. 29925 // 29926 // If a matrix is not invertible there is no guarantee what the op does. It 29927 // may detect the condition and raise an exception or it may simply return a 29928 // garbage result. 29929 // 29930 // Arguments: 29931 // input: Shape is `[..., M, M]`. 29932 // 29933 // Returns Shape is `[..., M, M]`. 29934 // 29935 // @compatibility(numpy) 29936 // Equivalent to np.linalg.inv 29937 // @end_compatibility 29938 func MatrixInverse(scope *Scope, input tf.Output, optional ...MatrixInverseAttr) (output tf.Output) { 29939 if scope.Err() != nil { 29940 return 29941 } 29942 attrs := map[string]interface{}{} 29943 for _, a := range optional { 29944 a(attrs) 29945 } 29946 opspec := tf.OpSpec{ 29947 Type: "MatrixInverse", 29948 Input: []tf.Input{ 29949 input, 29950 }, 29951 Attrs: attrs, 29952 } 29953 op := scope.AddOperation(opspec) 29954 return op.Output(0) 29955 } 29956 29957 // Computes reciprocal of square root of x element-wise. 29958 // 29959 // I.e., \\(y = 1 / \sqrt{x}\\). 29960 func Rsqrt(scope *Scope, x tf.Output) (y tf.Output) { 29961 if scope.Err() != nil { 29962 return 29963 } 29964 opspec := tf.OpSpec{ 29965 Type: "Rsqrt", 29966 Input: []tf.Input{ 29967 x, 29968 }, 29969 } 29970 op := scope.AddOperation(opspec) 29971 return op.Output(0) 29972 } 29973 29974 // Rounds the values of a tensor to the nearest integer, element-wise. 29975 // 29976 // Rounds half to even. Also known as bankers rounding. If you want to round 29977 // according to the current system rounding mode use std::cint. 29978 func Round(scope *Scope, x tf.Output) (y tf.Output) { 29979 if scope.Err() != nil { 29980 return 29981 } 29982 opspec := tf.OpSpec{ 29983 Type: "Round", 29984 Input: []tf.Input{ 29985 x, 29986 }, 29987 } 29988 op := scope.AddOperation(opspec) 29989 return op.Output(0) 29990 } 29991 29992 // Delete the TensorArray from its resource container. 29993 // 29994 // This enables the user to close and release the resource in the middle 29995 // of a step/run. 29996 // 29997 // Arguments: 29998 // handle: The handle to a TensorArray (output of TensorArray or TensorArrayGrad). 29999 // 30000 // Returns the created operation. 30001 func TensorArrayCloseV3(scope *Scope, handle tf.Output) (o *tf.Operation) { 30002 if scope.Err() != nil { 30003 return 30004 } 30005 opspec := tf.OpSpec{ 30006 Type: "TensorArrayCloseV3", 30007 Input: []tf.Input{ 30008 handle, 30009 }, 30010 } 30011 return scope.AddOperation(opspec) 30012 } 30013 30014 // Computes exponential of x element-wise. \\(y = e^x\\). 30015 func Exp(scope *Scope, x tf.Output) (y tf.Output) { 30016 if scope.Err() != nil { 30017 return 30018 } 30019 opspec := tf.OpSpec{ 30020 Type: "Exp", 30021 Input: []tf.Input{ 30022 x, 30023 }, 30024 } 30025 op := scope.AddOperation(opspec) 30026 return op.Output(0) 30027 } 30028 30029 // NthElementAttr is an optional argument to NthElement. 30030 type NthElementAttr func(optionalAttr) 30031 30032 // NthElementReverse sets the optional reverse attribute to value. 30033 // 30034 // value: When set to True, find the nth-largest value in the vector and vice 30035 // versa. 30036 // If not specified, defaults to false 30037 func NthElementReverse(value bool) NthElementAttr { 30038 return func(m optionalAttr) { 30039 m["reverse"] = value 30040 } 30041 } 30042 30043 // Finds values of the `n`-th order statistic for the last dimension. 30044 // 30045 // If the input is a vector (rank-1), finds the entries which is the nth-smallest 30046 // value in the vector and outputs their values as scalar tensor. 30047 // 30048 // For matrices (resp. higher rank input), computes the entries which is the 30049 // nth-smallest value in each row (resp. vector along the last dimension). Thus, 30050 // 30051 // values.shape = input.shape[:-1] 30052 // 30053 // Arguments: 30054 // input: 1-D or higher with last dimension at least `n+1`. 30055 // n: 0-D. Position of sorted vector to select along the last dimension (along 30056 // each row for matrices). Valid range of n is `[0, input.shape[:-1])` 30057 // 30058 // Returns The `n`-th order statistic along each last dimensional slice. 30059 func NthElement(scope *Scope, input tf.Output, n tf.Output, optional ...NthElementAttr) (values tf.Output) { 30060 if scope.Err() != nil { 30061 return 30062 } 30063 attrs := map[string]interface{}{} 30064 for _, a := range optional { 30065 a(attrs) 30066 } 30067 opspec := tf.OpSpec{ 30068 Type: "NthElement", 30069 Input: []tf.Input{ 30070 input, n, 30071 }, 30072 Attrs: attrs, 30073 } 30074 op := scope.AddOperation(opspec) 30075 return op.Output(0) 30076 } 30077 30078 // Computes the maximum along segments of a tensor. 30079 // 30080 // Read 30081 // [the section on segmentation](https://tensorflow.org/api_docs/python/tf/math#Segmentation) 30082 // for an explanation of segments. 30083 // 30084 // This operator is similar to the unsorted segment sum operator found 30085 // [(here)](../../../api_docs/python/math_ops.md#UnsortedSegmentSum). 30086 // Instead of computing the sum over segments, it computes the maximum such that: 30087 // 30088 // \\(output_i = \max_{j...} data[j...]\\) where max is over tuples `j...` such 30089 // that `segment_ids[j...] == i`. 30090 // 30091 // If the maximum is empty for a given segment ID `i`, it outputs the smallest 30092 // possible value for the specific numeric type, 30093 // `output[i] = numeric_limits<T>::lowest()`. 30094 // 30095 // If the given segment ID `i` is negative, then the corresponding value is 30096 // dropped, and will not be included in the result. 30097 // 30098 // <div style="width:70%; margin:auto; margin-bottom:10px; margin-top:20px;"> 30099 // <img style="width:100%" src="https://www.tensorflow.org/images/UnsortedSegmentMax.png" alt> 30100 // </div> 30101 // 30102 // For example: 30103 // 30104 // ``` python 30105 // c = tf.constant([[1,2,3,4], [5,6,7,8], [4,3,2,1]]) 30106 // tf.unsorted_segment_max(c, tf.constant([0, 1, 0]), num_segments=2) 30107 // # ==> [[ 4, 3, 3, 4], 30108 // # [5, 6, 7, 8]] 30109 // ``` 30110 // 30111 // 30112 // Arguments: 30113 // 30114 // segment_ids: A tensor whose shape is a prefix of `data.shape`. 30115 // 30116 // 30117 // Returns Has same shape as data, except for the first `segment_ids.rank` 30118 // dimensions, which are replaced with a single dimension which has size 30119 // `num_segments`. 30120 func UnsortedSegmentMax(scope *Scope, data tf.Output, segment_ids tf.Output, num_segments tf.Output) (output tf.Output) { 30121 if scope.Err() != nil { 30122 return 30123 } 30124 opspec := tf.OpSpec{ 30125 Type: "UnsortedSegmentMax", 30126 Input: []tf.Input{ 30127 data, segment_ids, num_segments, 30128 }, 30129 } 30130 op := scope.AddOperation(opspec) 30131 return op.Output(0) 30132 } 30133 30134 // Computes softplus: `log(exp(features) + 1)`. 30135 func Softplus(scope *Scope, features tf.Output) (activations tf.Output) { 30136 if scope.Err() != nil { 30137 return 30138 } 30139 opspec := tf.OpSpec{ 30140 Type: "Softplus", 30141 Input: []tf.Input{ 30142 features, 30143 }, 30144 } 30145 op := scope.AddOperation(opspec) 30146 return op.Output(0) 30147 } 30148 30149 // Computes exponential of x - 1 element-wise. 30150 // 30151 // I.e., \\(y = (\exp x) - 1\\). 30152 func Expm1(scope *Scope, x tf.Output) (y tf.Output) { 30153 if scope.Err() != nil { 30154 return 30155 } 30156 opspec := tf.OpSpec{ 30157 Type: "Expm1", 30158 Input: []tf.Input{ 30159 x, 30160 }, 30161 } 30162 op := scope.AddOperation(opspec) 30163 return op.Output(0) 30164 } 30165 30166 // Computes natural logarithm of x element-wise. 30167 // 30168 // I.e., \\(y = \log_e x\\). 30169 func Log(scope *Scope, x tf.Output) (y tf.Output) { 30170 if scope.Err() != nil { 30171 return 30172 } 30173 opspec := tf.OpSpec{ 30174 Type: "Log", 30175 Input: []tf.Input{ 30176 x, 30177 }, 30178 } 30179 op := scope.AddOperation(opspec) 30180 return op.Output(0) 30181 } 30182 30183 // Returns the index of a data point that should be added to the seed set. 30184 // 30185 // Entries in distances are assumed to be squared distances of candidate points to 30186 // the already sampled centers in the seed set. The op constructs one Markov chain 30187 // of the k-MC^2 algorithm and returns the index of one candidate point to be added 30188 // as an additional cluster center. 30189 // 30190 // Arguments: 30191 // distances: Vector with squared distances to the closest previously sampled cluster center 30192 // for each candidate point. 30193 // seed: Scalar. Seed for initializing the random number generator. 30194 // 30195 // Returns Scalar with the index of the sampled point. 30196 func KMC2ChainInitialization(scope *Scope, distances tf.Output, seed tf.Output) (index tf.Output) { 30197 if scope.Err() != nil { 30198 return 30199 } 30200 opspec := tf.OpSpec{ 30201 Type: "KMC2ChainInitialization", 30202 Input: []tf.Input{ 30203 distances, seed, 30204 }, 30205 } 30206 op := scope.AddOperation(opspec) 30207 return op.Output(0) 30208 } 30209 30210 // Computes hyperbolic sine of x element-wise. 30211 func Sinh(scope *Scope, x tf.Output) (y tf.Output) { 30212 if scope.Err() != nil { 30213 return 30214 } 30215 opspec := tf.OpSpec{ 30216 Type: "Sinh", 30217 Input: []tf.Input{ 30218 x, 30219 }, 30220 } 30221 op := scope.AddOperation(opspec) 30222 return op.Output(0) 30223 } 30224 30225 // Computes the sum along sparse segments of a tensor. 30226 // 30227 // Read 30228 // [the section on segmentation](https://tensorflow.org/api_docs/python/tf/math#Segmentation) 30229 // for an explanation of segments. 30230 // 30231 // Like `SegmentSum`, but `segment_ids` can have rank less than `data`'s first 30232 // dimension, selecting a subset of dimension 0, specified by `indices`. 30233 // 30234 // For example: 30235 // 30236 // ```python 30237 // c = tf.constant([[1,2,3,4], [-1,-2,-3,-4], [5,6,7,8]]) 30238 // 30239 // # Select two rows, one segment. 30240 // tf.sparse_segment_sum(c, tf.constant([0, 1]), tf.constant([0, 0])) 30241 // # => [[0 0 0 0]] 30242 // 30243 // # Select two rows, two segment. 30244 // tf.sparse_segment_sum(c, tf.constant([0, 1]), tf.constant([0, 1])) 30245 // # => [[ 1 2 3 4] 30246 // # [-1 -2 -3 -4]] 30247 // 30248 // # Select all rows, two segments. 30249 // tf.sparse_segment_sum(c, tf.constant([0, 1, 2]), tf.constant([0, 0, 1])) 30250 // # => [[0 0 0 0] 30251 // # [5 6 7 8]] 30252 // 30253 // # Which is equivalent to: 30254 // tf.segment_sum(c, tf.constant([0, 0, 1])) 30255 // ``` 30256 // 30257 // Arguments: 30258 // 30259 // indices: A 1-D tensor. Has same rank as `segment_ids`. 30260 // segment_ids: A 1-D tensor. Values should be sorted and can be repeated. 30261 // 30262 // Returns Has same shape as data, except for dimension 0 which 30263 // has size `k`, the number of segments. 30264 func SparseSegmentSum(scope *Scope, data tf.Output, indices tf.Output, segment_ids tf.Output) (output tf.Output) { 30265 if scope.Err() != nil { 30266 return 30267 } 30268 opspec := tf.OpSpec{ 30269 Type: "SparseSegmentSum", 30270 Input: []tf.Input{ 30271 data, indices, segment_ids, 30272 }, 30273 } 30274 op := scope.AddOperation(opspec) 30275 return op.Output(0) 30276 } 30277 30278 // CastAttr is an optional argument to Cast. 30279 type CastAttr func(optionalAttr) 30280 30281 // CastTruncate sets the optional Truncate attribute to value. 30282 // If not specified, defaults to false 30283 func CastTruncate(value bool) CastAttr { 30284 return func(m optionalAttr) { 30285 m["Truncate"] = value 30286 } 30287 } 30288 30289 // Cast x of type SrcT to y of DstT. 30290 func Cast(scope *Scope, x tf.Output, DstT tf.DataType, optional ...CastAttr) (y tf.Output) { 30291 if scope.Err() != nil { 30292 return 30293 } 30294 attrs := map[string]interface{}{"DstT": DstT} 30295 for _, a := range optional { 30296 a(attrs) 30297 } 30298 opspec := tf.OpSpec{ 30299 Type: "Cast", 30300 Input: []tf.Input{ 30301 x, 30302 }, 30303 Attrs: attrs, 30304 } 30305 op := scope.AddOperation(opspec) 30306 return op.Output(0) 30307 } 30308 30309 // Computes the log of the absolute value of `Gamma(x)` element-wise. 30310 func Lgamma(scope *Scope, x tf.Output) (y tf.Output) { 30311 if scope.Err() != nil { 30312 return 30313 } 30314 opspec := tf.OpSpec{ 30315 Type: "Lgamma", 30316 Input: []tf.Input{ 30317 x, 30318 }, 30319 } 30320 op := scope.AddOperation(opspec) 30321 return op.Output(0) 30322 } 30323 30324 // UnicodeEncodeAttr is an optional argument to UnicodeEncode. 30325 type UnicodeEncodeAttr func(optionalAttr) 30326 30327 // UnicodeEncodeErrors sets the optional errors attribute to value. 30328 // 30329 // value: Error handling policy when there is invalid formatting found in the input. 30330 // The value of 'strict' will cause the operation to produce a InvalidArgument 30331 // error on any invalid input formatting. A value of 'replace' (the default) will 30332 // cause the operation to replace any invalid formatting in the input with the 30333 // `replacement_char` codepoint. A value of 'ignore' will cause the operation to 30334 // skip any invalid formatting in the input and produce no corresponding output 30335 // character. 30336 // If not specified, defaults to "replace" 30337 func UnicodeEncodeErrors(value string) UnicodeEncodeAttr { 30338 return func(m optionalAttr) { 30339 m["errors"] = value 30340 } 30341 } 30342 30343 // UnicodeEncodeReplacementChar sets the optional replacement_char attribute to value. 30344 // 30345 // value: The replacement character codepoint to be used in place of any invalid 30346 // formatting in the input when `errors='replace'`. Any valid unicode codepoint may 30347 // be used. The default value is the default unicode replacement character is 30348 // 0xFFFD (U+65533). 30349 // If not specified, defaults to 65533 30350 func UnicodeEncodeReplacementChar(value int64) UnicodeEncodeAttr { 30351 return func(m optionalAttr) { 30352 m["replacement_char"] = value 30353 } 30354 } 30355 30356 // Encode a tensor of ints into unicode strings. 30357 // 30358 // Returns a vector of strings, where `output[i]` is constructed by encoding the 30359 // Unicode codepoints in `input_values[input_splits[i]:input_splits[i+1]]` 30360 // using `output_encoding`. 30361 // 30362 // --- 30363 // 30364 // Example: 30365 // 30366 // ``` 30367 // input_values = [72, 101, 108, 108, 111, 87, 111, 114, 108, 100] 30368 // input_splits = [0, 5, 10] 30369 // output_encoding = 'UTF-8' 30370 // 30371 // output = ['Hello', 'World'] 30372 // ``` 30373 // 30374 // Arguments: 30375 // input_values: A 1D tensor containing the unicode codepoints that should be encoded. 30376 // input_splits: A 1D tensor specifying how the unicode codepoints should be split into strings. 30377 // In particular, `output[i]` is constructed by encoding the codepoints in the 30378 // slice `input_values[input_splits[i]:input_splits[i+1]]`. 30379 // output_encoding: Unicode encoding of the output strings. Valid encodings are: `"UTF-8", 30380 // "UTF-16-BE", and "UTF-32-BE"`. 30381 // 30382 // Returns The 1-D Tensor of strings encoded from the provided unicode codepoints. 30383 func UnicodeEncode(scope *Scope, input_values tf.Output, input_splits tf.Output, output_encoding string, optional ...UnicodeEncodeAttr) (output tf.Output) { 30384 if scope.Err() != nil { 30385 return 30386 } 30387 attrs := map[string]interface{}{"output_encoding": output_encoding} 30388 for _, a := range optional { 30389 a(attrs) 30390 } 30391 opspec := tf.OpSpec{ 30392 Type: "UnicodeEncode", 30393 Input: []tf.Input{ 30394 input_values, input_splits, 30395 }, 30396 Attrs: attrs, 30397 } 30398 op := scope.AddOperation(opspec) 30399 return op.Output(0) 30400 } 30401 30402 // Computes the complementary error function of `x` element-wise. 30403 func Erfc(scope *Scope, x tf.Output) (y tf.Output) { 30404 if scope.Err() != nil { 30405 return 30406 } 30407 opspec := tf.OpSpec{ 30408 Type: "Erfc", 30409 Input: []tf.Input{ 30410 x, 30411 }, 30412 } 30413 op := scope.AddOperation(opspec) 30414 return op.Output(0) 30415 } 30416 30417 // Computes sigmoid of `x` element-wise. 30418 // 30419 // Specifically, `y = 1 / (1 + exp(-x))`. 30420 func Sigmoid(scope *Scope, x tf.Output) (y tf.Output) { 30421 if scope.Err() != nil { 30422 return 30423 } 30424 opspec := tf.OpSpec{ 30425 Type: "Sigmoid", 30426 Input: []tf.Input{ 30427 x, 30428 }, 30429 } 30430 op := scope.AddOperation(opspec) 30431 return op.Output(0) 30432 } 30433 30434 // Computes sin of x element-wise. 30435 func Sin(scope *Scope, x tf.Output) (y tf.Output) { 30436 if scope.Err() != nil { 30437 return 30438 } 30439 opspec := tf.OpSpec{ 30440 Type: "Sin", 30441 Input: []tf.Input{ 30442 x, 30443 }, 30444 } 30445 op := scope.AddOperation(opspec) 30446 return op.Output(0) 30447 } 30448 30449 // FusedBatchNormGradAttr is an optional argument to FusedBatchNormGrad. 30450 type FusedBatchNormGradAttr func(optionalAttr) 30451 30452 // FusedBatchNormGradEpsilon sets the optional epsilon attribute to value. 30453 // 30454 // value: A small float number added to the variance of x. 30455 // If not specified, defaults to 0.0001 30456 func FusedBatchNormGradEpsilon(value float32) FusedBatchNormGradAttr { 30457 return func(m optionalAttr) { 30458 m["epsilon"] = value 30459 } 30460 } 30461 30462 // FusedBatchNormGradDataFormat sets the optional data_format attribute to value. 30463 // 30464 // value: The data format for y_backprop, x, x_backprop. 30465 // Either "NHWC" (default) or "NCHW". 30466 // If not specified, defaults to "NHWC" 30467 func FusedBatchNormGradDataFormat(value string) FusedBatchNormGradAttr { 30468 return func(m optionalAttr) { 30469 m["data_format"] = value 30470 } 30471 } 30472 30473 // FusedBatchNormGradIsTraining sets the optional is_training attribute to value. 30474 // 30475 // value: A bool value to indicate the operation is for training (default) 30476 // or inference. 30477 // If not specified, defaults to true 30478 func FusedBatchNormGradIsTraining(value bool) FusedBatchNormGradAttr { 30479 return func(m optionalAttr) { 30480 m["is_training"] = value 30481 } 30482 } 30483 30484 // Gradient for batch normalization. 30485 // 30486 // Note that the size of 4D Tensors are defined by either "NHWC" or "NCHW". 30487 // The size of 1D Tensors matches the dimension C of the 4D Tensors. 30488 // 30489 // Arguments: 30490 // y_backprop: A 4D Tensor for the gradient with respect to y. 30491 // x: A 4D Tensor for input data. 30492 // scale: A 1D Tensor for scaling factor, to scale the normalized x. 30493 // reserve_space_1: When is_training is True, a 1D Tensor for the computed batch 30494 // mean to be reused in gradient computation. When is_training is 30495 // False, a 1D Tensor for the population mean to be reused in both 30496 // 1st and 2nd order gradient computation. 30497 // reserve_space_2: When is_training is True, a 1D Tensor for the computed batch 30498 // variance (inverted variance in the cuDNN case) to be reused in 30499 // gradient computation. When is_training is False, a 1D Tensor 30500 // for the population variance to be reused in both 1st and 2nd 30501 // order gradient computation. 30502 // 30503 // Returns A 4D Tensor for the gradient with respect to x.A 1D Tensor for the gradient with respect to scale.A 1D Tensor for the gradient with respect to offset.Unused placeholder to match the mean input in FusedBatchNorm.Unused placeholder to match the variance input 30504 // in FusedBatchNorm. 30505 func FusedBatchNormGrad(scope *Scope, y_backprop tf.Output, x tf.Output, scale tf.Output, reserve_space_1 tf.Output, reserve_space_2 tf.Output, optional ...FusedBatchNormGradAttr) (x_backprop tf.Output, scale_backprop tf.Output, offset_backprop tf.Output, reserve_space_3 tf.Output, reserve_space_4 tf.Output) { 30506 if scope.Err() != nil { 30507 return 30508 } 30509 attrs := map[string]interface{}{} 30510 for _, a := range optional { 30511 a(attrs) 30512 } 30513 opspec := tf.OpSpec{ 30514 Type: "FusedBatchNormGrad", 30515 Input: []tf.Input{ 30516 y_backprop, x, scale, reserve_space_1, reserve_space_2, 30517 }, 30518 Attrs: attrs, 30519 } 30520 op := scope.AddOperation(opspec) 30521 return op.Output(0), op.Output(1), op.Output(2), op.Output(3), op.Output(4) 30522 } 30523 30524 // Computes cos of x element-wise. 30525 func Cos(scope *Scope, x tf.Output) (y tf.Output) { 30526 if scope.Err() != nil { 30527 return 30528 } 30529 opspec := tf.OpSpec{ 30530 Type: "Cos", 30531 Input: []tf.Input{ 30532 x, 30533 }, 30534 } 30535 op := scope.AddOperation(opspec) 30536 return op.Output(0) 30537 } 30538 30539 // Computes the determinant of one or more square matrices. 30540 // 30541 // The input is a tensor of shape `[..., M, M]` whose inner-most 2 dimensions 30542 // form square matrices. The output is a tensor containing the determinants 30543 // for all input submatrices `[..., :, :]`. 30544 // 30545 // Arguments: 30546 // input: Shape is `[..., M, M]`. 30547 // 30548 // Returns Shape is `[...]`. 30549 func MatrixDeterminant(scope *Scope, input tf.Output) (output tf.Output) { 30550 if scope.Err() != nil { 30551 return 30552 } 30553 opspec := tf.OpSpec{ 30554 Type: "MatrixDeterminant", 30555 Input: []tf.Input{ 30556 input, 30557 }, 30558 } 30559 op := scope.AddOperation(opspec) 30560 return op.Output(0) 30561 } 30562 30563 // Updates the tree ensemble by either adding a layer to the last tree being grown 30564 // 30565 // or by starting a new tree. 30566 // 30567 // Arguments: 30568 // tree_ensemble_handle: Handle to the ensemble variable. 30569 // feature_ids: Rank 1 tensor with ids for each feature. This is the real id of 30570 // the feature that will be used in the split. 30571 // node_ids: List of rank 1 tensors representing the nodes for which this feature 30572 // has a split. 30573 // gains: List of rank 1 tensors representing the gains for each of the feature's 30574 // split. 30575 // thresholds: List of rank 1 tensors representing the thesholds for each of the 30576 // feature's split. 30577 // left_node_contribs: List of rank 2 tensors with left leaf contribs for each of 30578 // the feature's splits. Will be added to the previous node values to constitute 30579 // the values of the left nodes. 30580 // right_node_contribs: List of rank 2 tensors with right leaf contribs for each 30581 // of the feature's splits. Will be added to the previous node values to constitute 30582 // the values of the right nodes. 30583 // max_depth: Max depth of the tree to build. 30584 // learning_rate: shrinkage const for each new tree. 30585 // pruning_mode: 0-No pruning, 1-Pre-pruning, 2-Post-pruning. 30586 // 30587 // Returns the created operation. 30588 func BoostedTreesUpdateEnsemble(scope *Scope, tree_ensemble_handle tf.Output, feature_ids tf.Output, node_ids []tf.Output, gains []tf.Output, thresholds []tf.Output, left_node_contribs []tf.Output, right_node_contribs []tf.Output, max_depth tf.Output, learning_rate tf.Output, pruning_mode int64) (o *tf.Operation) { 30589 if scope.Err() != nil { 30590 return 30591 } 30592 attrs := map[string]interface{}{"pruning_mode": pruning_mode} 30593 opspec := tf.OpSpec{ 30594 Type: "BoostedTreesUpdateEnsemble", 30595 Input: []tf.Input{ 30596 tree_ensemble_handle, feature_ids, tf.OutputList(node_ids), tf.OutputList(gains), tf.OutputList(thresholds), tf.OutputList(left_node_contribs), tf.OutputList(right_node_contribs), max_depth, learning_rate, 30597 }, 30598 Attrs: attrs, 30599 } 30600 return scope.AddOperation(opspec) 30601 } 30602 30603 // Computes tan of x element-wise. 30604 func Tan(scope *Scope, x tf.Output) (y tf.Output) { 30605 if scope.Err() != nil { 30606 return 30607 } 30608 opspec := tf.OpSpec{ 30609 Type: "Tan", 30610 Input: []tf.Input{ 30611 x, 30612 }, 30613 } 30614 op := scope.AddOperation(opspec) 30615 return op.Output(0) 30616 } 30617 30618 // Creates a dataset that emits each dim-0 slice of `components` once. 30619 func TensorSliceDataset(scope *Scope, components []tf.Output, output_shapes []tf.Shape) (handle tf.Output) { 30620 if scope.Err() != nil { 30621 return 30622 } 30623 attrs := map[string]interface{}{"output_shapes": output_shapes} 30624 opspec := tf.OpSpec{ 30625 Type: "TensorSliceDataset", 30626 Input: []tf.Input{ 30627 tf.OutputList(components), 30628 }, 30629 Attrs: attrs, 30630 } 30631 op := scope.AddOperation(opspec) 30632 return op.Output(0) 30633 } 30634 30635 // Computes acos of x element-wise. 30636 func Acos(scope *Scope, x tf.Output) (y tf.Output) { 30637 if scope.Err() != nil { 30638 return 30639 } 30640 opspec := tf.OpSpec{ 30641 Type: "Acos", 30642 Input: []tf.Input{ 30643 x, 30644 }, 30645 } 30646 op := scope.AddOperation(opspec) 30647 return op.Output(0) 30648 } 30649 30650 // Computes the Bessel i0e function of `x` element-wise. 30651 // 30652 // Exponentially scaled modified Bessel function of order 0 defined as 30653 // `bessel_i0e(x) = exp(-abs(x)) bessel_i0(x)`. 30654 // 30655 // This function is faster and numerically stabler than `bessel_i0(x)`. 30656 func BesselI0e(scope *Scope, x tf.Output) (y tf.Output) { 30657 if scope.Err() != nil { 30658 return 30659 } 30660 opspec := tf.OpSpec{ 30661 Type: "BesselI0e", 30662 Input: []tf.Input{ 30663 x, 30664 }, 30665 } 30666 op := scope.AddOperation(opspec) 30667 return op.Output(0) 30668 } 30669 30670 // Shuffle dimensions of x according to a permutation. 30671 // 30672 // The output `y` has the same rank as `x`. The shapes of `x` and `y` satisfy: 30673 // `y.shape[i] == x.shape[perm[i]] for i in [0, 1, ..., rank(x) - 1]` 30674 func Transpose(scope *Scope, x tf.Output, perm tf.Output) (y tf.Output) { 30675 if scope.Err() != nil { 30676 return 30677 } 30678 opspec := tf.OpSpec{ 30679 Type: "Transpose", 30680 Input: []tf.Input{ 30681 x, perm, 30682 }, 30683 } 30684 op := scope.AddOperation(opspec) 30685 return op.Output(0) 30686 } 30687 30688 // MinAttr is an optional argument to Min. 30689 type MinAttr func(optionalAttr) 30690 30691 // MinKeepDims sets the optional keep_dims attribute to value. 30692 // 30693 // value: If true, retain reduced dimensions with length 1. 30694 // If not specified, defaults to false 30695 func MinKeepDims(value bool) MinAttr { 30696 return func(m optionalAttr) { 30697 m["keep_dims"] = value 30698 } 30699 } 30700 30701 // Computes the minimum of elements across dimensions of a tensor. 30702 // 30703 // Reduces `input` along the dimensions given in `axis`. Unless 30704 // `keep_dims` is true, the rank of the tensor is reduced by 1 for each entry in 30705 // `axis`. If `keep_dims` is true, the reduced dimensions are 30706 // retained with length 1. 30707 // 30708 // Arguments: 30709 // input: The tensor to reduce. 30710 // axis: The dimensions to reduce. Must be in the range 30711 // `[-rank(input), rank(input))`. 30712 // 30713 // Returns The reduced tensor. 30714 func Min(scope *Scope, input tf.Output, axis tf.Output, optional ...MinAttr) (output tf.Output) { 30715 if scope.Err() != nil { 30716 return 30717 } 30718 attrs := map[string]interface{}{} 30719 for _, a := range optional { 30720 a(attrs) 30721 } 30722 opspec := tf.OpSpec{ 30723 Type: "Min", 30724 Input: []tf.Input{ 30725 input, axis, 30726 }, 30727 Attrs: attrs, 30728 } 30729 op := scope.AddOperation(opspec) 30730 return op.Output(0) 30731 } 30732 30733 // Computes the Bessel i1e function of `x` element-wise. 30734 // 30735 // Exponentially scaled modified Bessel function of order 0 defined as 30736 // `bessel_i1e(x) = exp(-abs(x)) bessel_i1(x)`. 30737 // 30738 // This function is faster and numerically stabler than `bessel_i1(x)`. 30739 func BesselI1e(scope *Scope, x tf.Output) (y tf.Output) { 30740 if scope.Err() != nil { 30741 return 30742 } 30743 opspec := tf.OpSpec{ 30744 Type: "BesselI1e", 30745 Input: []tf.Input{ 30746 x, 30747 }, 30748 } 30749 op := scope.AddOperation(opspec) 30750 return op.Output(0) 30751 } 30752 30753 // Returns an element-wise indication of the sign of a number. 30754 // 30755 // `y = sign(x) = -1` if `x < 0`; 0 if `x == 0`; 1 if `x > 0`. 30756 // 30757 // For complex numbers, `y = sign(x) = x / |x|` if `x != 0`, otherwise `y = 0`. 30758 func Sign(scope *Scope, x tf.Output) (y tf.Output) { 30759 if scope.Err() != nil { 30760 return 30761 } 30762 opspec := tf.OpSpec{ 30763 Type: "Sign", 30764 Input: []tf.Input{ 30765 x, 30766 }, 30767 } 30768 op := scope.AddOperation(opspec) 30769 return op.Output(0) 30770 } 30771 30772 // Creates a dataset that passes a sliding window over `input_dataset`. 30773 // 30774 // Arguments: 30775 // 30776 // window_size: A scalar representing the number of elements in the 30777 // sliding window. 30778 // window_shift: A scalar representing the steps moving the sliding window 30779 // forward in one iteration. It must be positive. 30780 // window_stride: A scalar representing the stride of the input elements of the sliding window. 30781 // It must be positive. 30782 // 30783 // 30784 func ExperimentalSlidingWindowDataset(scope *Scope, input_dataset tf.Output, window_size tf.Output, window_shift tf.Output, window_stride tf.Output, output_types []tf.DataType, output_shapes []tf.Shape) (handle tf.Output) { 30785 if scope.Err() != nil { 30786 return 30787 } 30788 attrs := map[string]interface{}{"output_types": output_types, "output_shapes": output_shapes} 30789 opspec := tf.OpSpec{ 30790 Type: "ExperimentalSlidingWindowDataset", 30791 Input: []tf.Input{ 30792 input_dataset, window_size, window_shift, window_stride, 30793 }, 30794 Attrs: attrs, 30795 } 30796 op := scope.AddOperation(opspec) 30797 return op.Output(0) 30798 } 30799 30800 // OrderedMapUnstageNoKeyAttr is an optional argument to OrderedMapUnstageNoKey. 30801 type OrderedMapUnstageNoKeyAttr func(optionalAttr) 30802 30803 // OrderedMapUnstageNoKeyCapacity sets the optional capacity attribute to value. 30804 // If not specified, defaults to 0 30805 // 30806 // REQUIRES: value >= 0 30807 func OrderedMapUnstageNoKeyCapacity(value int64) OrderedMapUnstageNoKeyAttr { 30808 return func(m optionalAttr) { 30809 m["capacity"] = value 30810 } 30811 } 30812 30813 // OrderedMapUnstageNoKeyMemoryLimit sets the optional memory_limit attribute to value. 30814 // If not specified, defaults to 0 30815 // 30816 // REQUIRES: value >= 0 30817 func OrderedMapUnstageNoKeyMemoryLimit(value int64) OrderedMapUnstageNoKeyAttr { 30818 return func(m optionalAttr) { 30819 m["memory_limit"] = value 30820 } 30821 } 30822 30823 // OrderedMapUnstageNoKeyContainer sets the optional container attribute to value. 30824 // If not specified, defaults to "" 30825 func OrderedMapUnstageNoKeyContainer(value string) OrderedMapUnstageNoKeyAttr { 30826 return func(m optionalAttr) { 30827 m["container"] = value 30828 } 30829 } 30830 30831 // OrderedMapUnstageNoKeySharedName sets the optional shared_name attribute to value. 30832 // If not specified, defaults to "" 30833 func OrderedMapUnstageNoKeySharedName(value string) OrderedMapUnstageNoKeyAttr { 30834 return func(m optionalAttr) { 30835 m["shared_name"] = value 30836 } 30837 } 30838 30839 // Op removes and returns the (key, value) element with the smallest 30840 // 30841 // key from the underlying container. If the underlying container 30842 // does not contain elements, the op will block until it does. 30843 func OrderedMapUnstageNoKey(scope *Scope, indices tf.Output, dtypes []tf.DataType, optional ...OrderedMapUnstageNoKeyAttr) (key tf.Output, values []tf.Output) { 30844 if scope.Err() != nil { 30845 return 30846 } 30847 attrs := map[string]interface{}{"dtypes": dtypes} 30848 for _, a := range optional { 30849 a(attrs) 30850 } 30851 opspec := tf.OpSpec{ 30852 Type: "OrderedMapUnstageNoKey", 30853 Input: []tf.Input{ 30854 indices, 30855 }, 30856 Attrs: attrs, 30857 } 30858 op := scope.AddOperation(opspec) 30859 if scope.Err() != nil { 30860 return 30861 } 30862 var idx int 30863 var err error 30864 key = op.Output(idx) 30865 if values, idx, err = makeOutputList(op, idx, "values"); err != nil { 30866 scope.UpdateErr("OrderedMapUnstageNoKey", err) 30867 return 30868 } 30869 return key, values 30870 } 30871 30872 // Returns element-wise integer closest to x. 30873 // 30874 // If the result is midway between two representable values, 30875 // the even representable is chosen. 30876 // For example: 30877 // 30878 // ``` 30879 // rint(-1.5) ==> -2.0 30880 // rint(0.5000001) ==> 1.0 30881 // rint([-1.7, -1.5, -0.2, 0.2, 1.5, 1.7, 2.0]) ==> [-2., -2., -0., 0., 2., 2., 2.] 30882 // ``` 30883 func Rint(scope *Scope, x tf.Output) (y tf.Output) { 30884 if scope.Err() != nil { 30885 return 30886 } 30887 opspec := tf.OpSpec{ 30888 Type: "Rint", 30889 Input: []tf.Input{ 30890 x, 30891 }, 30892 } 30893 op := scope.AddOperation(opspec) 30894 return op.Output(0) 30895 } 30896 30897 // Computes the derivative of a Gamma random sample w.r.t. `alpha`. 30898 func RandomGammaGrad(scope *Scope, alpha tf.Output, sample tf.Output) (output tf.Output) { 30899 if scope.Err() != nil { 30900 return 30901 } 30902 opspec := tf.OpSpec{ 30903 Type: "RandomGammaGrad", 30904 Input: []tf.Input{ 30905 alpha, sample, 30906 }, 30907 } 30908 op := scope.AddOperation(opspec) 30909 return op.Output(0) 30910 } 30911 30912 // Returns x + y element-wise. 30913 // 30914 // *NOTE*: `Add` supports broadcasting. `AddN` does not. More about broadcasting 30915 // [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html) 30916 func Add(scope *Scope, x tf.Output, y tf.Output) (z tf.Output) { 30917 if scope.Err() != nil { 30918 return 30919 } 30920 opspec := tf.OpSpec{ 30921 Type: "Add", 30922 Input: []tf.Input{ 30923 x, y, 30924 }, 30925 } 30926 op := scope.AddOperation(opspec) 30927 return op.Output(0) 30928 } 30929 30930 // Returns x + y element-wise. 30931 // 30932 // *NOTE*: `Add` supports broadcasting. `AddN` does not. More about broadcasting 30933 // [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html) 30934 func AddV2(scope *Scope, x tf.Output, y tf.Output) (z tf.Output) { 30935 if scope.Err() != nil { 30936 return 30937 } 30938 opspec := tf.OpSpec{ 30939 Type: "AddV2", 30940 Input: []tf.Input{ 30941 x, y, 30942 }, 30943 } 30944 op := scope.AddOperation(opspec) 30945 return op.Output(0) 30946 } 30947 30948 // AllCandidateSamplerAttr is an optional argument to AllCandidateSampler. 30949 type AllCandidateSamplerAttr func(optionalAttr) 30950 30951 // AllCandidateSamplerSeed sets the optional seed attribute to value. 30952 // 30953 // value: If either seed or seed2 are set to be non-zero, the random number 30954 // generator is seeded by the given seed. Otherwise, it is seeded by a 30955 // random seed. 30956 // If not specified, defaults to 0 30957 func AllCandidateSamplerSeed(value int64) AllCandidateSamplerAttr { 30958 return func(m optionalAttr) { 30959 m["seed"] = value 30960 } 30961 } 30962 30963 // AllCandidateSamplerSeed2 sets the optional seed2 attribute to value. 30964 // 30965 // value: An second seed to avoid seed collision. 30966 // If not specified, defaults to 0 30967 func AllCandidateSamplerSeed2(value int64) AllCandidateSamplerAttr { 30968 return func(m optionalAttr) { 30969 m["seed2"] = value 30970 } 30971 } 30972 30973 // Generates labels for candidate sampling with a learned unigram distribution. 30974 // 30975 // See explanations of candidate sampling and the data formats at 30976 // go/candidate-sampling. 30977 // 30978 // For each batch, this op picks a single set of sampled candidate labels. 30979 // 30980 // The advantages of sampling candidates per-batch are simplicity and the 30981 // possibility of efficient dense matrix multiplication. The disadvantage is that 30982 // the sampled candidates must be chosen independently of the context and of the 30983 // true labels. 30984 // 30985 // Arguments: 30986 // true_classes: A batch_size * num_true matrix, in which each row contains the 30987 // IDs of the num_true target_classes in the corresponding original label. 30988 // num_true: Number of true labels per context. 30989 // num_sampled: Number of candidates to produce. 30990 // unique: If unique is true, we sample with rejection, so that all sampled 30991 // candidates in a batch are unique. This requires some approximation to 30992 // estimate the post-rejection sampling probabilities. 30993 // 30994 // Returns A vector of length num_sampled, in which each element is 30995 // the ID of a sampled candidate.A batch_size * num_true matrix, representing 30996 // the number of times each candidate is expected to occur in a batch 30997 // of sampled candidates. If unique=true, then this is a probability.A vector of length num_sampled, for each sampled 30998 // candidate representing the number of times the candidate is expected 30999 // to occur in a batch of sampled candidates. If unique=true, then this is a 31000 // probability. 31001 func AllCandidateSampler(scope *Scope, true_classes tf.Output, num_true int64, num_sampled int64, unique bool, optional ...AllCandidateSamplerAttr) (sampled_candidates tf.Output, true_expected_count tf.Output, sampled_expected_count tf.Output) { 31002 if scope.Err() != nil { 31003 return 31004 } 31005 attrs := map[string]interface{}{"num_true": num_true, "num_sampled": num_sampled, "unique": unique} 31006 for _, a := range optional { 31007 a(attrs) 31008 } 31009 opspec := tf.OpSpec{ 31010 Type: "AllCandidateSampler", 31011 Input: []tf.Input{ 31012 true_classes, 31013 }, 31014 Attrs: attrs, 31015 } 31016 op := scope.AddOperation(opspec) 31017 return op.Output(0), op.Output(1), op.Output(2) 31018 } 31019 31020 // Returns element-wise remainder of division. When `x < 0` xor `y < 0` is 31021 // 31022 // true, this follows Python semantics in that the result here is consistent 31023 // with a flooring divide. E.g. `floor(x / y) * y + mod(x, y) = x`. 31024 // 31025 // *NOTE*: `FloorMod` supports broadcasting. More about broadcasting 31026 // [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html) 31027 func FloorMod(scope *Scope, x tf.Output, y tf.Output) (z tf.Output) { 31028 if scope.Err() != nil { 31029 return 31030 } 31031 opspec := tf.OpSpec{ 31032 Type: "FloorMod", 31033 Input: []tf.Input{ 31034 x, y, 31035 }, 31036 } 31037 op := scope.AddOperation(opspec) 31038 return op.Output(0) 31039 } 31040 31041 // Saves the input tensors to disk. 31042 // 31043 // The size of `tensor_names` must match the number of tensors in `data`. `data[i]` 31044 // is written to `filename` with name `tensor_names[i]`. 31045 // 31046 // See also `SaveSlices`. 31047 // 31048 // Arguments: 31049 // filename: Must have a single element. The name of the file to which we write 31050 // the tensor. 31051 // tensor_names: Shape `[N]`. The names of the tensors to be saved. 31052 // data: `N` tensors to save. 31053 // 31054 // Returns the created operation. 31055 func Save(scope *Scope, filename tf.Output, tensor_names tf.Output, data []tf.Output) (o *tf.Operation) { 31056 if scope.Err() != nil { 31057 return 31058 } 31059 opspec := tf.OpSpec{ 31060 Type: "Save", 31061 Input: []tf.Input{ 31062 filename, tensor_names, tf.OutputList(data), 31063 }, 31064 } 31065 return scope.AddOperation(opspec) 31066 } 31067 31068 // Returns x * y element-wise. Returns zero if y is zero, even if x if infinite or NaN. 31069 // 31070 // *NOTE*: `Mul` supports broadcasting. More about broadcasting 31071 // [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html) 31072 func MulNoNan(scope *Scope, x tf.Output, y tf.Output) (z tf.Output) { 31073 if scope.Err() != nil { 31074 return 31075 } 31076 opspec := tf.OpSpec{ 31077 Type: "MulNoNan", 31078 Input: []tf.Input{ 31079 x, y, 31080 }, 31081 } 31082 op := scope.AddOperation(opspec) 31083 return op.Output(0) 31084 } 31085 31086 // Returns x / y element-wise for integer types. 31087 // 31088 // Truncation designates that negative numbers will round fractional quantities 31089 // toward zero. I.e. -7 / 5 = -1. This matches C semantics but it is different 31090 // than Python semantics. See `FloorDiv` for a division function that matches 31091 // Python Semantics. 31092 // 31093 // *NOTE*: `TruncateDiv` supports broadcasting. More about broadcasting 31094 // [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html) 31095 func TruncateDiv(scope *Scope, x tf.Output, y tf.Output) (z tf.Output) { 31096 if scope.Err() != nil { 31097 return 31098 } 31099 opspec := tf.OpSpec{ 31100 Type: "TruncateDiv", 31101 Input: []tf.Input{ 31102 x, y, 31103 }, 31104 } 31105 op := scope.AddOperation(opspec) 31106 return op.Output(0) 31107 } 31108 31109 // RequantizePerChannelAttr is an optional argument to RequantizePerChannel. 31110 type RequantizePerChannelAttr func(optionalAttr) 31111 31112 // RequantizePerChannelOutType sets the optional out_type attribute to value. 31113 // 31114 // value: The quantized type of output tensor that needs to be converted. 31115 // If not specified, defaults to DT_QUINT8 31116 func RequantizePerChannelOutType(value tf.DataType) RequantizePerChannelAttr { 31117 return func(m optionalAttr) { 31118 m["out_type"] = value 31119 } 31120 } 31121 31122 // Requantizes input with min and max values known per channel. 31123 // 31124 // Arguments: 31125 // input: The original input tensor. 31126 // input_min: The minimum value of the input tensor 31127 // input_max: The maximum value of the input tensor. 31128 // requested_output_min: The minimum value of the output tensor requested. 31129 // requested_output_max: The maximum value of the output tensor requested. 31130 // 31131 // Returns Output tensor.The minimum value of the final output tensorThe maximum value of the final output tensor. 31132 func RequantizePerChannel(scope *Scope, input tf.Output, input_min tf.Output, input_max tf.Output, requested_output_min tf.Output, requested_output_max tf.Output, optional ...RequantizePerChannelAttr) (output tf.Output, output_min tf.Output, output_max tf.Output) { 31133 if scope.Err() != nil { 31134 return 31135 } 31136 attrs := map[string]interface{}{} 31137 for _, a := range optional { 31138 a(attrs) 31139 } 31140 opspec := tf.OpSpec{ 31141 Type: "RequantizePerChannel", 31142 Input: []tf.Input{ 31143 input, input_min, input_max, requested_output_min, requested_output_max, 31144 }, 31145 Attrs: attrs, 31146 } 31147 op := scope.AddOperation(opspec) 31148 return op.Output(0), op.Output(1), op.Output(2) 31149 } 31150 31151 // Restores tensors from a V2 checkpoint. 31152 // 31153 // For backward compatibility with the V1 format, this Op currently allows 31154 // restoring from a V1 checkpoint as well: 31155 // - This Op first attempts to find the V2 index file pointed to by "prefix", and 31156 // if found proceed to read it as a V2 checkpoint; 31157 // - Otherwise the V1 read path is invoked. 31158 // Relying on this behavior is not recommended, as the ability to fall back to read 31159 // V1 might be deprecated and eventually removed. 31160 // 31161 // By default, restores the named tensors in full. If the caller wishes to restore 31162 // specific slices of stored tensors, "shape_and_slices" should be non-empty 31163 // strings and correspondingly well-formed. 31164 // 31165 // Callers must ensure all the named tensors are indeed stored in the checkpoint. 31166 // 31167 // Arguments: 31168 // prefix: Must have a single element. The prefix of a V2 checkpoint. 31169 // tensor_names: shape {N}. The names of the tensors to be restored. 31170 // shape_and_slices: shape {N}. The slice specs of the tensors to be restored. 31171 // Empty strings indicate that they are non-partitioned tensors. 31172 // dtypes: shape {N}. The list of expected dtype for the tensors. Must match 31173 // those stored in the checkpoint. 31174 // 31175 // Returns shape {N}. The restored tensors, whose shapes are read from the 31176 // checkpoint directly. 31177 func RestoreV2(scope *Scope, prefix tf.Output, tensor_names tf.Output, shape_and_slices tf.Output, dtypes []tf.DataType) (tensors []tf.Output) { 31178 if scope.Err() != nil { 31179 return 31180 } 31181 attrs := map[string]interface{}{"dtypes": dtypes} 31182 opspec := tf.OpSpec{ 31183 Type: "RestoreV2", 31184 Input: []tf.Input{ 31185 prefix, tensor_names, shape_and_slices, 31186 }, 31187 Attrs: attrs, 31188 } 31189 op := scope.AddOperation(opspec) 31190 if scope.Err() != nil { 31191 return 31192 } 31193 var idx int 31194 var err error 31195 if tensors, idx, err = makeOutputList(op, idx, "tensors"); err != nil { 31196 scope.UpdateErr("RestoreV2", err) 31197 return 31198 } 31199 return tensors 31200 } 31201 31202 // FIFOQueueV2Attr is an optional argument to FIFOQueueV2. 31203 type FIFOQueueV2Attr func(optionalAttr) 31204 31205 // FIFOQueueV2Shapes sets the optional shapes attribute to value. 31206 // 31207 // value: The shape of each component in a value. The length of this attr must 31208 // be either 0 or the same as the length of component_types. If the length of 31209 // this attr is 0, the shapes of queue elements are not constrained, and 31210 // only one element may be dequeued at a time. 31211 // If not specified, defaults to <> 31212 // 31213 // REQUIRES: len(value) >= 0 31214 func FIFOQueueV2Shapes(value []tf.Shape) FIFOQueueV2Attr { 31215 return func(m optionalAttr) { 31216 m["shapes"] = value 31217 } 31218 } 31219 31220 // FIFOQueueV2Capacity sets the optional capacity attribute to value. 31221 // 31222 // value: The upper bound on the number of elements in this queue. 31223 // Negative numbers mean no limit. 31224 // If not specified, defaults to -1 31225 func FIFOQueueV2Capacity(value int64) FIFOQueueV2Attr { 31226 return func(m optionalAttr) { 31227 m["capacity"] = value 31228 } 31229 } 31230 31231 // FIFOQueueV2Container sets the optional container attribute to value. 31232 // 31233 // value: If non-empty, this queue is placed in the given container. 31234 // Otherwise, a default container is used. 31235 // If not specified, defaults to "" 31236 func FIFOQueueV2Container(value string) FIFOQueueV2Attr { 31237 return func(m optionalAttr) { 31238 m["container"] = value 31239 } 31240 } 31241 31242 // FIFOQueueV2SharedName sets the optional shared_name attribute to value. 31243 // 31244 // value: If non-empty, this queue will be shared under the given name 31245 // across multiple sessions. 31246 // If not specified, defaults to "" 31247 func FIFOQueueV2SharedName(value string) FIFOQueueV2Attr { 31248 return func(m optionalAttr) { 31249 m["shared_name"] = value 31250 } 31251 } 31252 31253 // A queue that produces elements in first-in first-out order. 31254 // 31255 // Arguments: 31256 // component_types: The type of each component in a value. 31257 // 31258 // Returns The handle to the queue. 31259 func FIFOQueueV2(scope *Scope, component_types []tf.DataType, optional ...FIFOQueueV2Attr) (handle tf.Output) { 31260 if scope.Err() != nil { 31261 return 31262 } 31263 attrs := map[string]interface{}{"component_types": component_types} 31264 for _, a := range optional { 31265 a(attrs) 31266 } 31267 opspec := tf.OpSpec{ 31268 Type: "FIFOQueueV2", 31269 31270 Attrs: attrs, 31271 } 31272 op := scope.AddOperation(opspec) 31273 return op.Output(0) 31274 } 31275 31276 // Creates a dataset that contains the elements of `input_dataset` ignoring errors. 31277 func ExperimentalIgnoreErrorsDataset(scope *Scope, input_dataset tf.Output, output_types []tf.DataType, output_shapes []tf.Shape) (handle tf.Output) { 31278 if scope.Err() != nil { 31279 return 31280 } 31281 attrs := map[string]interface{}{"output_types": output_types, "output_shapes": output_shapes} 31282 opspec := tf.OpSpec{ 31283 Type: "ExperimentalIgnoreErrorsDataset", 31284 Input: []tf.Input{ 31285 input_dataset, 31286 }, 31287 Attrs: attrs, 31288 } 31289 op := scope.AddOperation(opspec) 31290 return op.Output(0) 31291 } 31292 31293 // Returns 0 if x == 0, and x / y otherwise, elementwise. 31294 func Xdivy(scope *Scope, x tf.Output, y tf.Output) (z tf.Output) { 31295 if scope.Err() != nil { 31296 return 31297 } 31298 opspec := tf.OpSpec{ 31299 Type: "Xdivy", 31300 Input: []tf.Input{ 31301 x, y, 31302 }, 31303 } 31304 op := scope.AddOperation(opspec) 31305 return op.Output(0) 31306 } 31307 31308 // Bucketizes 'input' based on 'boundaries'. 31309 // 31310 // For example, if the inputs are 31311 // boundaries = [0, 10, 100] 31312 // input = [[-5, 10000] 31313 // [150, 10] 31314 // [5, 100]] 31315 // 31316 // then the output will be 31317 // output = [[0, 3] 31318 // [3, 2] 31319 // [1, 3]] 31320 // 31321 // Arguments: 31322 // input: Any shape of Tensor contains with int or float type. 31323 // boundaries: A sorted list of floats gives the boundary of the buckets. 31324 // 31325 // Returns Same shape with 'input', each value of input replaced with bucket index. 31326 // 31327 // @compatibility(numpy) 31328 // Equivalent to np.digitize. 31329 // @end_compatibility 31330 func Bucketize(scope *Scope, input tf.Output, boundaries []float32) (output tf.Output) { 31331 if scope.Err() != nil { 31332 return 31333 } 31334 attrs := map[string]interface{}{"boundaries": boundaries} 31335 opspec := tf.OpSpec{ 31336 Type: "Bucketize", 31337 Input: []tf.Input{ 31338 input, 31339 }, 31340 Attrs: attrs, 31341 } 31342 op := scope.AddOperation(opspec) 31343 return op.Output(0) 31344 } 31345 31346 // Calculates gains for each feature and returns the best possible split information for the feature. 31347 // 31348 // The split information is the best threshold (bucket id), gains and left/right node contributions per node for each feature. 31349 // 31350 // It is possible that not all nodes can be split on each feature. Hence, the list of possible nodes can differ between the features. Therefore, we return `node_ids_list` for each feature, containing the list of nodes that this feature can be used to split. 31351 // 31352 // In this manner, the output is the best split per features and per node, so that it needs to be combined later to produce the best split for each node (among all possible features). 31353 // 31354 // The length of output lists are all of the same length, `num_features`. 31355 // The output shapes are compatible in a way that the first dimension of all tensors of all lists are the same and equal to the number of possible split nodes for each feature. 31356 // 31357 // Arguments: 31358 // node_id_range: A Rank 1 tensor (shape=[2]) to specify the range [first, last) of node ids to process within `stats_summary_list`. The nodes are iterated between the two nodes specified by the tensor, as like `for node_id in range(node_id_range[0], node_id_range[1])` (Note that the last index node_id_range[1] is exclusive). 31359 // stats_summary_list: A list of Rank 3 tensor (#shape=[max_splits, bucket, 2]) for accumulated stats summary (gradient/hessian) per node per buckets for each feature. The first dimension of the tensor is the maximum number of splits, and thus not all elements of it will be used, but only the indexes specified by node_ids will be used. 31360 // l1: l1 regularization factor on leaf weights, per instance based. 31361 // l2: l2 regularization factor on leaf weights, per instance based. 31362 // tree_complexity: adjustment to the gain, per leaf based. 31363 // min_node_weight: mininum avg of hessians in a node before required for the node to be considered for splitting. 31364 // max_splits: the number of nodes that can be split in the whole tree. Used as a dimension of output tensors. 31365 // 31366 // Returns An output list of Rank 1 tensors indicating possible split node ids for each feature. The length of the list is num_features, but each tensor has different size as each feature provides different possible nodes. See above for details like shapes and sizes.An output list of Rank 1 tensors indicating the best gains for each feature to split for certain nodes. See above for details like shapes and sizes.An output list of Rank 1 tensors indicating the bucket id to compare with (as a threshold) for split in each node. See above for details like shapes and sizes.A list of Rank 2 tensors indicating the contribution of the left nodes when branching from parent nodes (given by the tensor element in the output node_ids_list) to the left direction by the given threshold for each feature. This value will be used to make the left node value by adding to the parent node value. Second dimension size is 1 for 1-dimensional logits, but would be larger for multi-class problems. See above for details like shapes and sizes.A list of Rank 2 tensors, with the same shape/conditions as left_node_contribs_list, but just that the value is for the right node. 31367 func BoostedTreesCalculateBestGainsPerFeature(scope *Scope, node_id_range tf.Output, stats_summary_list []tf.Output, l1 tf.Output, l2 tf.Output, tree_complexity tf.Output, min_node_weight tf.Output, max_splits int64) (node_ids_list []tf.Output, gains_list []tf.Output, thresholds_list []tf.Output, left_node_contribs_list []tf.Output, right_node_contribs_list []tf.Output) { 31368 if scope.Err() != nil { 31369 return 31370 } 31371 attrs := map[string]interface{}{"max_splits": max_splits} 31372 opspec := tf.OpSpec{ 31373 Type: "BoostedTreesCalculateBestGainsPerFeature", 31374 Input: []tf.Input{ 31375 node_id_range, tf.OutputList(stats_summary_list), l1, l2, tree_complexity, min_node_weight, 31376 }, 31377 Attrs: attrs, 31378 } 31379 op := scope.AddOperation(opspec) 31380 if scope.Err() != nil { 31381 return 31382 } 31383 var idx int 31384 var err error 31385 if node_ids_list, idx, err = makeOutputList(op, idx, "node_ids_list"); err != nil { 31386 scope.UpdateErr("BoostedTreesCalculateBestGainsPerFeature", err) 31387 return 31388 } 31389 if gains_list, idx, err = makeOutputList(op, idx, "gains_list"); err != nil { 31390 scope.UpdateErr("BoostedTreesCalculateBestGainsPerFeature", err) 31391 return 31392 } 31393 if thresholds_list, idx, err = makeOutputList(op, idx, "thresholds_list"); err != nil { 31394 scope.UpdateErr("BoostedTreesCalculateBestGainsPerFeature", err) 31395 return 31396 } 31397 if left_node_contribs_list, idx, err = makeOutputList(op, idx, "left_node_contribs_list"); err != nil { 31398 scope.UpdateErr("BoostedTreesCalculateBestGainsPerFeature", err) 31399 return 31400 } 31401 if right_node_contribs_list, idx, err = makeOutputList(op, idx, "right_node_contribs_list"); err != nil { 31402 scope.UpdateErr("BoostedTreesCalculateBestGainsPerFeature", err) 31403 return 31404 } 31405 return node_ids_list, gains_list, thresholds_list, left_node_contribs_list, right_node_contribs_list 31406 } 31407 31408 // EncodePngAttr is an optional argument to EncodePng. 31409 type EncodePngAttr func(optionalAttr) 31410 31411 // EncodePngCompression sets the optional compression attribute to value. 31412 // 31413 // value: Compression level. 31414 // If not specified, defaults to -1 31415 func EncodePngCompression(value int64) EncodePngAttr { 31416 return func(m optionalAttr) { 31417 m["compression"] = value 31418 } 31419 } 31420 31421 // PNG-encode an image. 31422 // 31423 // `image` is a 3-D uint8 or uint16 Tensor of shape `[height, width, channels]` 31424 // where `channels` is: 31425 // 31426 // * 1: for grayscale. 31427 // * 2: for grayscale + alpha. 31428 // * 3: for RGB. 31429 // * 4: for RGBA. 31430 // 31431 // The ZLIB compression level, `compression`, can be -1 for the PNG-encoder 31432 // default or a value from 0 to 9. 9 is the highest compression level, generating 31433 // the smallest output, but is slower. 31434 // 31435 // Arguments: 31436 // image: 3-D with shape `[height, width, channels]`. 31437 // 31438 // Returns 0-D. PNG-encoded image. 31439 func EncodePng(scope *Scope, image tf.Output, optional ...EncodePngAttr) (contents tf.Output) { 31440 if scope.Err() != nil { 31441 return 31442 } 31443 attrs := map[string]interface{}{} 31444 for _, a := range optional { 31445 a(attrs) 31446 } 31447 opspec := tf.OpSpec{ 31448 Type: "EncodePng", 31449 Input: []tf.Input{ 31450 image, 31451 }, 31452 Attrs: attrs, 31453 } 31454 op := scope.AddOperation(opspec) 31455 return op.Output(0) 31456 } 31457 31458 // QueueDequeueUpToV2Attr is an optional argument to QueueDequeueUpToV2. 31459 type QueueDequeueUpToV2Attr func(optionalAttr) 31460 31461 // QueueDequeueUpToV2TimeoutMs sets the optional timeout_ms attribute to value. 31462 // 31463 // value: If the queue has fewer than n elements, this operation 31464 // will block for up to timeout_ms milliseconds. 31465 // Note: This option is not supported yet. 31466 // If not specified, defaults to -1 31467 func QueueDequeueUpToV2TimeoutMs(value int64) QueueDequeueUpToV2Attr { 31468 return func(m optionalAttr) { 31469 m["timeout_ms"] = value 31470 } 31471 } 31472 31473 // Dequeues `n` tuples of one or more tensors from the given queue. 31474 // 31475 // This operation is not supported by all queues. If a queue does not support 31476 // DequeueUpTo, then an Unimplemented error is returned. 31477 // 31478 // If the queue is closed and there are more than 0 but less than `n` 31479 // elements remaining, then instead of returning an OutOfRange error like 31480 // QueueDequeueMany, less than `n` elements are returned immediately. If 31481 // the queue is closed and there are 0 elements left in the queue, then 31482 // an OutOfRange error is returned just like in QueueDequeueMany. 31483 // Otherwise the behavior is identical to QueueDequeueMany: 31484 // 31485 // This operation concatenates queue-element component tensors along the 31486 // 0th dimension to make a single component tensor. All of the components 31487 // in the dequeued tuple will have size n in the 0th dimension. 31488 // 31489 // This operation has `k` outputs, where `k` is the number of components in 31490 // the tuples stored in the given queue, and output `i` is the ith 31491 // component of the dequeued tuple. 31492 // 31493 // Arguments: 31494 // handle: The handle to a queue. 31495 // n: The number of tuples to dequeue. 31496 // component_types: The type of each component in a tuple. 31497 // 31498 // Returns One or more tensors that were dequeued as a tuple. 31499 func QueueDequeueUpToV2(scope *Scope, handle tf.Output, n tf.Output, component_types []tf.DataType, optional ...QueueDequeueUpToV2Attr) (components []tf.Output) { 31500 if scope.Err() != nil { 31501 return 31502 } 31503 attrs := map[string]interface{}{"component_types": component_types} 31504 for _, a := range optional { 31505 a(attrs) 31506 } 31507 opspec := tf.OpSpec{ 31508 Type: "QueueDequeueUpToV2", 31509 Input: []tf.Input{ 31510 handle, n, 31511 }, 31512 Attrs: attrs, 31513 } 31514 op := scope.AddOperation(opspec) 31515 if scope.Err() != nil { 31516 return 31517 } 31518 var idx int 31519 var err error 31520 if components, idx, err = makeOutputList(op, idx, "components"); err != nil { 31521 scope.UpdateErr("QueueDequeueUpToV2", err) 31522 return 31523 } 31524 return components 31525 } 31526 31527 // Returns the max of x and y (i.e. x > y ? x : y) element-wise. 31528 // 31529 // *NOTE*: `Maximum` supports broadcasting. More about broadcasting 31530 // [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html) 31531 func Maximum(scope *Scope, x tf.Output, y tf.Output) (z tf.Output) { 31532 if scope.Err() != nil { 31533 return 31534 } 31535 opspec := tf.OpSpec{ 31536 Type: "Maximum", 31537 Input: []tf.Input{ 31538 x, y, 31539 }, 31540 } 31541 op := scope.AddOperation(opspec) 31542 return op.Output(0) 31543 } 31544 31545 // Returns element-wise remainder of division. This emulates C semantics in that 31546 // 31547 // the result here is consistent with a truncating divide. E.g. 31548 // `tf.truncatediv(x, y) * y + truncate_mod(x, y) = x`. 31549 // 31550 // *NOTE*: `Mod` supports broadcasting. More about broadcasting 31551 // [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html) 31552 func Mod(scope *Scope, x tf.Output, y tf.Output) (z tf.Output) { 31553 if scope.Err() != nil { 31554 return 31555 } 31556 opspec := tf.OpSpec{ 31557 Type: "Mod", 31558 Input: []tf.Input{ 31559 x, y, 31560 }, 31561 } 31562 op := scope.AddOperation(opspec) 31563 return op.Output(0) 31564 } 31565 31566 // Returns element-wise remainder of division. This emulates C semantics in that 31567 // 31568 // the result here is consistent with a truncating divide. E.g. `truncate(x / y) * 31569 // y + truncate_mod(x, y) = x`. 31570 // 31571 // *NOTE*: `TruncateMod` supports broadcasting. More about broadcasting 31572 // [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html) 31573 func TruncateMod(scope *Scope, x tf.Output, y tf.Output) (z tf.Output) { 31574 if scope.Err() != nil { 31575 return 31576 } 31577 opspec := tf.OpSpec{ 31578 Type: "TruncateMod", 31579 Input: []tf.Input{ 31580 x, y, 31581 }, 31582 } 31583 op := scope.AddOperation(opspec) 31584 return op.Output(0) 31585 } 31586 31587 // Computes offsets of concat inputs within its output. 31588 // 31589 // For example: 31590 // 31591 // ``` 31592 // # 'x' is [2, 2, 7] 31593 // # 'y' is [2, 3, 7] 31594 // # 'z' is [2, 5, 7] 31595 // concat_offset(2, [x, y, z]) => [0, 0, 0], [0, 2, 0], [0, 5, 0] 31596 // ``` 31597 // 31598 // This is typically used by gradient computations for a concat operation. 31599 // 31600 // Arguments: 31601 // concat_dim: The dimension along which to concatenate. 31602 // shape: The `N` int32 vectors representing shape of tensors being concatenated. 31603 // 31604 // Returns The `N` int32 vectors representing the starting offset 31605 // of input tensors within the concatenated output. 31606 func ConcatOffset(scope *Scope, concat_dim tf.Output, shape []tf.Output) (offset []tf.Output) { 31607 if scope.Err() != nil { 31608 return 31609 } 31610 opspec := tf.OpSpec{ 31611 Type: "ConcatOffset", 31612 Input: []tf.Input{ 31613 concat_dim, tf.OutputList(shape), 31614 }, 31615 } 31616 op := scope.AddOperation(opspec) 31617 if scope.Err() != nil { 31618 return 31619 } 31620 var idx int 31621 var err error 31622 if offset, idx, err = makeOutputList(op, idx, "offset"); err != nil { 31623 scope.UpdateErr("ConcatOffset", err) 31624 return 31625 } 31626 return offset 31627 } 31628 31629 // LoadTPUEmbeddingRMSPropParametersGradAccumDebugAttr is an optional argument to LoadTPUEmbeddingRMSPropParametersGradAccumDebug. 31630 type LoadTPUEmbeddingRMSPropParametersGradAccumDebugAttr func(optionalAttr) 31631 31632 // LoadTPUEmbeddingRMSPropParametersGradAccumDebugTableId sets the optional table_id attribute to value. 31633 // If not specified, defaults to -1 31634 // 31635 // REQUIRES: value >= -1 31636 func LoadTPUEmbeddingRMSPropParametersGradAccumDebugTableId(value int64) LoadTPUEmbeddingRMSPropParametersGradAccumDebugAttr { 31637 return func(m optionalAttr) { 31638 m["table_id"] = value 31639 } 31640 } 31641 31642 // LoadTPUEmbeddingRMSPropParametersGradAccumDebugTableName sets the optional table_name attribute to value. 31643 // If not specified, defaults to "" 31644 func LoadTPUEmbeddingRMSPropParametersGradAccumDebugTableName(value string) LoadTPUEmbeddingRMSPropParametersGradAccumDebugAttr { 31645 return func(m optionalAttr) { 31646 m["table_name"] = value 31647 } 31648 } 31649 31650 // Load RMSProp embedding parameters with debug support. 31651 // 31652 // An op that loads optimization parameters into HBM for embedding. Must be 31653 // preceded by a ConfigureTPUEmbeddingHost op that sets up the correct 31654 // embedding table configuration. For example, this op is used to install 31655 // parameters that are loaded from a checkpoint before a training loop is 31656 // executed. 31657 // 31658 // Arguments: 31659 // parameters: Value of parameters used in the RMSProp optimization algorithm. 31660 // ms: Value of ms used in the RMSProp optimization algorithm. 31661 // mom: Value of mom used in the RMSProp optimization algorithm. 31662 // gradient_accumulators: Value of gradient_accumulators used in the RMSProp optimization algorithm. 31663 // 31664 // 31665 // 31666 // Returns the created operation. 31667 func LoadTPUEmbeddingRMSPropParametersGradAccumDebug(scope *Scope, parameters tf.Output, ms tf.Output, mom tf.Output, gradient_accumulators tf.Output, num_shards int64, shard_id int64, optional ...LoadTPUEmbeddingRMSPropParametersGradAccumDebugAttr) (o *tf.Operation) { 31668 if scope.Err() != nil { 31669 return 31670 } 31671 attrs := map[string]interface{}{"num_shards": num_shards, "shard_id": shard_id} 31672 for _, a := range optional { 31673 a(attrs) 31674 } 31675 opspec := tf.OpSpec{ 31676 Type: "LoadTPUEmbeddingRMSPropParametersGradAccumDebug", 31677 Input: []tf.Input{ 31678 parameters, ms, mom, gradient_accumulators, 31679 }, 31680 Attrs: attrs, 31681 } 31682 return scope.AddOperation(opspec) 31683 } 31684 31685 // Compute the lower regularized incomplete Gamma function `P(a, x)`. 31686 // 31687 // The lower regularized incomplete Gamma function is defined as: 31688 // 31689 // 31690 // \\(P(a, x) = gamma(a, x) / Gamma(a) = 1 - Q(a, x)\\) 31691 // 31692 // where 31693 // 31694 // \\(gamma(a, x) = \\int_{0}^{x} t^{a-1} exp(-t) dt\\) 31695 // 31696 // is the lower incomplete Gamma function. 31697 // 31698 // Note, above `Q(a, x)` (`Igammac`) is the upper regularized complete 31699 // Gamma function. 31700 func Igamma(scope *Scope, a tf.Output, x tf.Output) (z tf.Output) { 31701 if scope.Err() != nil { 31702 return 31703 } 31704 opspec := tf.OpSpec{ 31705 Type: "Igamma", 31706 Input: []tf.Input{ 31707 a, x, 31708 }, 31709 } 31710 op := scope.AddOperation(opspec) 31711 return op.Output(0) 31712 } 31713 31714 // Compute the regularized incomplete beta integral \\(I_x(a, b)\\). 31715 // 31716 // The regularized incomplete beta integral is defined as: 31717 // 31718 // 31719 // \\(I_x(a, b) = \frac{B(x; a, b)}{B(a, b)}\\) 31720 // 31721 // where 31722 // 31723 // 31724 // \\(B(x; a, b) = \int_0^x t^{a-1} (1 - t)^{b-1} dt\\) 31725 // 31726 // 31727 // is the incomplete beta function and \\(B(a, b)\\) is the *complete* 31728 // beta function. 31729 func Betainc(scope *Scope, a tf.Output, b tf.Output, x tf.Output) (z tf.Output) { 31730 if scope.Err() != nil { 31731 return 31732 } 31733 opspec := tf.OpSpec{ 31734 Type: "Betainc", 31735 Input: []tf.Input{ 31736 a, b, x, 31737 }, 31738 } 31739 op := scope.AddOperation(opspec) 31740 return op.Output(0) 31741 } 31742 31743 // ShapeAttr is an optional argument to Shape. 31744 type ShapeAttr func(optionalAttr) 31745 31746 // ShapeOutType sets the optional out_type attribute to value. 31747 // If not specified, defaults to DT_INT32 31748 func ShapeOutType(value tf.DataType) ShapeAttr { 31749 return func(m optionalAttr) { 31750 m["out_type"] = value 31751 } 31752 } 31753 31754 // Returns the shape of a tensor. 31755 // 31756 // This operation returns a 1-D integer tensor representing the shape of `input`. 31757 // 31758 // For example: 31759 // 31760 // ``` 31761 // # 't' is [[[1, 1, 1], [2, 2, 2]], [[3, 3, 3], [4, 4, 4]]] 31762 // shape(t) ==> [2, 2, 3] 31763 // ``` 31764 func Shape(scope *Scope, input tf.Output, optional ...ShapeAttr) (output tf.Output) { 31765 if scope.Err() != nil { 31766 return 31767 } 31768 attrs := map[string]interface{}{} 31769 for _, a := range optional { 31770 a(attrs) 31771 } 31772 opspec := tf.OpSpec{ 31773 Type: "Shape", 31774 Input: []tf.Input{ 31775 input, 31776 }, 31777 Attrs: attrs, 31778 } 31779 op := scope.AddOperation(opspec) 31780 return op.Output(0) 31781 } 31782 31783 // Computes fingerprints of the input strings. 31784 // 31785 // Arguments: 31786 // input: vector of strings to compute fingerprints on. 31787 // 31788 // Returns a (N,2) shaped matrix where N is the number of elements in the input 31789 // vector. Each row contains the low and high parts of the fingerprint. 31790 func SdcaFprint(scope *Scope, input tf.Output) (output tf.Output) { 31791 if scope.Err() != nil { 31792 return 31793 } 31794 opspec := tf.OpSpec{ 31795 Type: "SdcaFprint", 31796 Input: []tf.Input{ 31797 input, 31798 }, 31799 } 31800 op := scope.AddOperation(opspec) 31801 return op.Output(0) 31802 } 31803 31804 // Computes the power of one value to another. 31805 // 31806 // Given a tensor `x` and a tensor `y`, this operation computes \\(x^y\\) for 31807 // corresponding elements in `x` and `y`. For example: 31808 // 31809 // ``` 31810 // # tensor 'x' is [[2, 2]], [3, 3]] 31811 // # tensor 'y' is [[8, 16], [2, 3]] 31812 // tf.pow(x, y) ==> [[256, 65536], [9, 27]] 31813 // ``` 31814 func Pow(scope *Scope, x tf.Output, y tf.Output) (z tf.Output) { 31815 if scope.Err() != nil { 31816 return 31817 } 31818 opspec := tf.OpSpec{ 31819 Type: "Pow", 31820 Input: []tf.Input{ 31821 x, y, 31822 }, 31823 } 31824 op := scope.AddOperation(opspec) 31825 return op.Output(0) 31826 } 31827 31828 // QuantizedReluXAttr is an optional argument to QuantizedReluX. 31829 type QuantizedReluXAttr func(optionalAttr) 31830 31831 // QuantizedReluXOutType sets the optional out_type attribute to value. 31832 // If not specified, defaults to DT_QUINT8 31833 func QuantizedReluXOutType(value tf.DataType) QuantizedReluXAttr { 31834 return func(m optionalAttr) { 31835 m["out_type"] = value 31836 } 31837 } 31838 31839 // Computes Quantized Rectified Linear X: `min(max(features, 0), max_value)` 31840 // 31841 // Arguments: 31842 // 31843 // 31844 // min_features: The float value that the lowest quantized value represents. 31845 // max_features: The float value that the highest quantized value represents. 31846 // 31847 // Returns Has the same output shape as "features".The float value that the lowest quantized value represents.The float value that the highest quantized value represents. 31848 func QuantizedReluX(scope *Scope, features tf.Output, max_value tf.Output, min_features tf.Output, max_features tf.Output, optional ...QuantizedReluXAttr) (activations tf.Output, min_activations tf.Output, max_activations tf.Output) { 31849 if scope.Err() != nil { 31850 return 31851 } 31852 attrs := map[string]interface{}{} 31853 for _, a := range optional { 31854 a(attrs) 31855 } 31856 opspec := tf.OpSpec{ 31857 Type: "QuantizedReluX", 31858 Input: []tf.Input{ 31859 features, max_value, min_features, max_features, 31860 }, 31861 Attrs: attrs, 31862 } 31863 op := scope.AddOperation(opspec) 31864 return op.Output(0), op.Output(1), op.Output(2) 31865 } 31866 31867 // Returns the truth value of (x < y) element-wise. 31868 // 31869 // *NOTE*: `Less` supports broadcasting. More about broadcasting 31870 // [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html) 31871 func Less(scope *Scope, x tf.Output, y tf.Output) (z tf.Output) { 31872 if scope.Err() != nil { 31873 return 31874 } 31875 opspec := tf.OpSpec{ 31876 Type: "Less", 31877 Input: []tf.Input{ 31878 x, y, 31879 }, 31880 } 31881 op := scope.AddOperation(opspec) 31882 return op.Output(0) 31883 } 31884 31885 // RandomPoissonAttr is an optional argument to RandomPoisson. 31886 type RandomPoissonAttr func(optionalAttr) 31887 31888 // RandomPoissonSeed sets the optional seed attribute to value. 31889 // If not specified, defaults to 0 31890 func RandomPoissonSeed(value int64) RandomPoissonAttr { 31891 return func(m optionalAttr) { 31892 m["seed"] = value 31893 } 31894 } 31895 31896 // RandomPoissonSeed2 sets the optional seed2 attribute to value. 31897 // If not specified, defaults to 0 31898 func RandomPoissonSeed2(value int64) RandomPoissonAttr { 31899 return func(m optionalAttr) { 31900 m["seed2"] = value 31901 } 31902 } 31903 31904 // Use RandomPoissonV2 instead. 31905 // 31906 // DEPRECATED at GraphDef version 25: Replaced by RandomPoissonV2 31907 func RandomPoisson(scope *Scope, shape tf.Output, rate tf.Output, optional ...RandomPoissonAttr) (output tf.Output) { 31908 if scope.Err() != nil { 31909 return 31910 } 31911 attrs := map[string]interface{}{} 31912 for _, a := range optional { 31913 a(attrs) 31914 } 31915 opspec := tf.OpSpec{ 31916 Type: "RandomPoisson", 31917 Input: []tf.Input{ 31918 shape, rate, 31919 }, 31920 Attrs: attrs, 31921 } 31922 op := scope.AddOperation(opspec) 31923 return op.Output(0) 31924 } 31925 31926 // Gets the next output from the given iterator. 31927 // 31928 // This operation is a synchronous version IteratorGetNext. It should only be used 31929 // in situations where the iterator does not block the calling thread, or where 31930 // the calling thread is not a member of the thread pool used to execute parallel 31931 // operations (e.g. in eager mode). 31932 func IteratorGetNextSync(scope *Scope, iterator tf.Output, output_types []tf.DataType, output_shapes []tf.Shape) (components []tf.Output) { 31933 if scope.Err() != nil { 31934 return 31935 } 31936 attrs := map[string]interface{}{"output_types": output_types, "output_shapes": output_shapes} 31937 opspec := tf.OpSpec{ 31938 Type: "IteratorGetNextSync", 31939 Input: []tf.Input{ 31940 iterator, 31941 }, 31942 Attrs: attrs, 31943 } 31944 op := scope.AddOperation(opspec) 31945 if scope.Err() != nil { 31946 return 31947 } 31948 var idx int 31949 var err error 31950 if components, idx, err = makeOutputList(op, idx, "components"); err != nil { 31951 scope.UpdateErr("IteratorGetNextSync", err) 31952 return 31953 } 31954 return components 31955 } 31956 31957 // Returns the truth value of (x >= y) element-wise. 31958 // 31959 // *NOTE*: `GreaterEqual` supports broadcasting. More about broadcasting 31960 // [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html) 31961 func GreaterEqual(scope *Scope, x tf.Output, y tf.Output) (z tf.Output) { 31962 if scope.Err() != nil { 31963 return 31964 } 31965 opspec := tf.OpSpec{ 31966 Type: "GreaterEqual", 31967 Input: []tf.Input{ 31968 x, y, 31969 }, 31970 } 31971 op := scope.AddOperation(opspec) 31972 return op.Output(0) 31973 } 31974 31975 // ApproximateEqualAttr is an optional argument to ApproximateEqual. 31976 type ApproximateEqualAttr func(optionalAttr) 31977 31978 // ApproximateEqualTolerance sets the optional tolerance attribute to value. 31979 // If not specified, defaults to 1e-05 31980 func ApproximateEqualTolerance(value float32) ApproximateEqualAttr { 31981 return func(m optionalAttr) { 31982 m["tolerance"] = value 31983 } 31984 } 31985 31986 // Returns the truth value of abs(x-y) < tolerance element-wise. 31987 func ApproximateEqual(scope *Scope, x tf.Output, y tf.Output, optional ...ApproximateEqualAttr) (z tf.Output) { 31988 if scope.Err() != nil { 31989 return 31990 } 31991 attrs := map[string]interface{}{} 31992 for _, a := range optional { 31993 a(attrs) 31994 } 31995 opspec := tf.OpSpec{ 31996 Type: "ApproximateEqual", 31997 Input: []tf.Input{ 31998 x, y, 31999 }, 32000 Attrs: attrs, 32001 } 32002 op := scope.AddOperation(opspec) 32003 return op.Output(0) 32004 } 32005 32006 // Returns the truth value of x OR y element-wise. 32007 // 32008 // *NOTE*: `LogicalOr` supports broadcasting. More about broadcasting 32009 // [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html) 32010 func LogicalOr(scope *Scope, x tf.Output, y tf.Output) (z tf.Output) { 32011 if scope.Err() != nil { 32012 return 32013 } 32014 opspec := tf.OpSpec{ 32015 Type: "LogicalOr", 32016 Input: []tf.Input{ 32017 x, y, 32018 }, 32019 } 32020 op := scope.AddOperation(opspec) 32021 return op.Output(0) 32022 } 32023 32024 // MatMulAttr is an optional argument to MatMul. 32025 type MatMulAttr func(optionalAttr) 32026 32027 // MatMulTransposeA sets the optional transpose_a attribute to value. 32028 // 32029 // value: If true, "a" is transposed before multiplication. 32030 // If not specified, defaults to false 32031 func MatMulTransposeA(value bool) MatMulAttr { 32032 return func(m optionalAttr) { 32033 m["transpose_a"] = value 32034 } 32035 } 32036 32037 // MatMulTransposeB sets the optional transpose_b attribute to value. 32038 // 32039 // value: If true, "b" is transposed before multiplication. 32040 // If not specified, defaults to false 32041 func MatMulTransposeB(value bool) MatMulAttr { 32042 return func(m optionalAttr) { 32043 m["transpose_b"] = value 32044 } 32045 } 32046 32047 // Multiply the matrix "a" by the matrix "b". 32048 // 32049 // The inputs must be two-dimensional matrices and the inner dimension of 32050 // "a" (after being transposed if transpose_a is true) must match the 32051 // outer dimension of "b" (after being transposed if transposed_b is 32052 // true). 32053 // 32054 // *Note*: The default kernel implementation for MatMul on GPUs uses 32055 // cublas. 32056 func MatMul(scope *Scope, a tf.Output, b tf.Output, optional ...MatMulAttr) (product tf.Output) { 32057 if scope.Err() != nil { 32058 return 32059 } 32060 attrs := map[string]interface{}{} 32061 for _, a := range optional { 32062 a(attrs) 32063 } 32064 opspec := tf.OpSpec{ 32065 Type: "MatMul", 32066 Input: []tf.Input{ 32067 a, b, 32068 }, 32069 Attrs: attrs, 32070 } 32071 op := scope.AddOperation(opspec) 32072 return op.Output(0) 32073 } 32074 32075 // InitializeTableFromTextFileV2Attr is an optional argument to InitializeTableFromTextFileV2. 32076 type InitializeTableFromTextFileV2Attr func(optionalAttr) 32077 32078 // InitializeTableFromTextFileV2VocabSize sets the optional vocab_size attribute to value. 32079 // 32080 // value: Number of elements of the file, use -1 if unknown. 32081 // If not specified, defaults to -1 32082 // 32083 // REQUIRES: value >= -1 32084 func InitializeTableFromTextFileV2VocabSize(value int64) InitializeTableFromTextFileV2Attr { 32085 return func(m optionalAttr) { 32086 m["vocab_size"] = value 32087 } 32088 } 32089 32090 // InitializeTableFromTextFileV2Delimiter sets the optional delimiter attribute to value. 32091 // 32092 // value: Delimiter to separate fields in a line. 32093 // If not specified, defaults to "\t" 32094 func InitializeTableFromTextFileV2Delimiter(value string) InitializeTableFromTextFileV2Attr { 32095 return func(m optionalAttr) { 32096 m["delimiter"] = value 32097 } 32098 } 32099 32100 // Initializes a table from a text file. 32101 // 32102 // It inserts one key-value pair into the table for each line of the file. 32103 // The key and value is extracted from the whole line content, elements from the 32104 // split line based on `delimiter` or the line number (starting from zero). 32105 // Where to extract the key and value from a line is specified by `key_index` and 32106 // `value_index`. 32107 // 32108 // - A value of -1 means use the line number(starting from zero), expects `int64`. 32109 // - A value of -2 means use the whole line content, expects `string`. 32110 // - A value >= 0 means use the index (starting at zero) of the split line based 32111 // on `delimiter`. 32112 // 32113 // Arguments: 32114 // table_handle: Handle to a table which will be initialized. 32115 // filename: Filename of a vocabulary text file. 32116 // key_index: Column index in a line to get the table `key` values from. 32117 // value_index: Column index that represents information of a line to get the table 32118 // `value` values from. 32119 // 32120 // Returns the created operation. 32121 func InitializeTableFromTextFileV2(scope *Scope, table_handle tf.Output, filename tf.Output, key_index int64, value_index int64, optional ...InitializeTableFromTextFileV2Attr) (o *tf.Operation) { 32122 if scope.Err() != nil { 32123 return 32124 } 32125 attrs := map[string]interface{}{"key_index": key_index, "value_index": value_index} 32126 for _, a := range optional { 32127 a(attrs) 32128 } 32129 opspec := tf.OpSpec{ 32130 Type: "InitializeTableFromTextFileV2", 32131 Input: []tf.Input{ 32132 table_handle, filename, 32133 }, 32134 Attrs: attrs, 32135 } 32136 return scope.AddOperation(opspec) 32137 } 32138 32139 // MeanAttr is an optional argument to Mean. 32140 type MeanAttr func(optionalAttr) 32141 32142 // MeanKeepDims sets the optional keep_dims attribute to value. 32143 // 32144 // value: If true, retain reduced dimensions with length 1. 32145 // If not specified, defaults to false 32146 func MeanKeepDims(value bool) MeanAttr { 32147 return func(m optionalAttr) { 32148 m["keep_dims"] = value 32149 } 32150 } 32151 32152 // Computes the mean of elements across dimensions of a tensor. 32153 // 32154 // Reduces `input` along the dimensions given in `axis`. Unless 32155 // `keep_dims` is true, the rank of the tensor is reduced by 1 for each entry in 32156 // `axis`. If `keep_dims` is true, the reduced dimensions are 32157 // retained with length 1. 32158 // 32159 // Arguments: 32160 // input: The tensor to reduce. 32161 // axis: The dimensions to reduce. Must be in the range 32162 // `[-rank(input), rank(input))`. 32163 // 32164 // Returns The reduced tensor. 32165 func Mean(scope *Scope, input tf.Output, axis tf.Output, optional ...MeanAttr) (output tf.Output) { 32166 if scope.Err() != nil { 32167 return 32168 } 32169 attrs := map[string]interface{}{} 32170 for _, a := range optional { 32171 a(attrs) 32172 } 32173 opspec := tf.OpSpec{ 32174 Type: "Mean", 32175 Input: []tf.Input{ 32176 input, axis, 32177 }, 32178 Attrs: attrs, 32179 } 32180 op := scope.AddOperation(opspec) 32181 return op.Output(0) 32182 } 32183 32184 // ProdAttr is an optional argument to Prod. 32185 type ProdAttr func(optionalAttr) 32186 32187 // ProdKeepDims sets the optional keep_dims attribute to value. 32188 // 32189 // value: If true, retain reduced dimensions with length 1. 32190 // If not specified, defaults to false 32191 func ProdKeepDims(value bool) ProdAttr { 32192 return func(m optionalAttr) { 32193 m["keep_dims"] = value 32194 } 32195 } 32196 32197 // Computes the product of elements across dimensions of a tensor. 32198 // 32199 // Reduces `input` along the dimensions given in `axis`. Unless 32200 // `keep_dims` is true, the rank of the tensor is reduced by 1 for each entry in 32201 // `axis`. If `keep_dims` is true, the reduced dimensions are 32202 // retained with length 1. 32203 // 32204 // Arguments: 32205 // input: The tensor to reduce. 32206 // axis: The dimensions to reduce. Must be in the range 32207 // `[-rank(input), rank(input))`. 32208 // 32209 // Returns The reduced tensor. 32210 func Prod(scope *Scope, input tf.Output, axis tf.Output, optional ...ProdAttr) (output tf.Output) { 32211 if scope.Err() != nil { 32212 return 32213 } 32214 attrs := map[string]interface{}{} 32215 for _, a := range optional { 32216 a(attrs) 32217 } 32218 opspec := tf.OpSpec{ 32219 Type: "Prod", 32220 Input: []tf.Input{ 32221 input, axis, 32222 }, 32223 Attrs: attrs, 32224 } 32225 op := scope.AddOperation(opspec) 32226 return op.Output(0) 32227 } 32228 32229 // ResizeBilinearAttr is an optional argument to ResizeBilinear. 32230 type ResizeBilinearAttr func(optionalAttr) 32231 32232 // ResizeBilinearAlignCorners sets the optional align_corners attribute to value. 32233 // 32234 // value: If true, the centers of the 4 corner pixels of the input and output tensors are 32235 // aligned, preserving the values at the corner pixels. Defaults to false. 32236 // If not specified, defaults to false 32237 func ResizeBilinearAlignCorners(value bool) ResizeBilinearAttr { 32238 return func(m optionalAttr) { 32239 m["align_corners"] = value 32240 } 32241 } 32242 32243 // ResizeBilinearHalfPixelCenters sets the optional half_pixel_centers attribute to value. 32244 // If not specified, defaults to false 32245 func ResizeBilinearHalfPixelCenters(value bool) ResizeBilinearAttr { 32246 return func(m optionalAttr) { 32247 m["half_pixel_centers"] = value 32248 } 32249 } 32250 32251 // Resize `images` to `size` using bilinear interpolation. 32252 // 32253 // Input images can be of different types but output images are always float. 32254 // 32255 // Arguments: 32256 // images: 4-D with shape `[batch, height, width, channels]`. 32257 // size: = A 1-D int32 Tensor of 2 elements: `new_height, new_width`. The 32258 // new size for the images. 32259 // 32260 // Returns 4-D with shape 32261 // `[batch, new_height, new_width, channels]`. 32262 func ResizeBilinear(scope *Scope, images tf.Output, size tf.Output, optional ...ResizeBilinearAttr) (resized_images tf.Output) { 32263 if scope.Err() != nil { 32264 return 32265 } 32266 attrs := map[string]interface{}{} 32267 for _, a := range optional { 32268 a(attrs) 32269 } 32270 opspec := tf.OpSpec{ 32271 Type: "ResizeBilinear", 32272 Input: []tf.Input{ 32273 images, size, 32274 }, 32275 Attrs: attrs, 32276 } 32277 op := scope.AddOperation(opspec) 32278 return op.Output(0) 32279 } 32280 32281 // MaxAttr is an optional argument to Max. 32282 type MaxAttr func(optionalAttr) 32283 32284 // MaxKeepDims sets the optional keep_dims attribute to value. 32285 // 32286 // value: If true, retain reduced dimensions with length 1. 32287 // If not specified, defaults to false 32288 func MaxKeepDims(value bool) MaxAttr { 32289 return func(m optionalAttr) { 32290 m["keep_dims"] = value 32291 } 32292 } 32293 32294 // Computes the maximum of elements across dimensions of a tensor. 32295 // 32296 // Reduces `input` along the dimensions given in `axis`. Unless 32297 // `keep_dims` is true, the rank of the tensor is reduced by 1 for each entry in 32298 // `axis`. If `keep_dims` is true, the reduced dimensions are 32299 // retained with length 1. 32300 // 32301 // Arguments: 32302 // input: The tensor to reduce. 32303 // axis: The dimensions to reduce. Must be in the range 32304 // `[-rank(input), rank(input))`. 32305 // 32306 // Returns The reduced tensor. 32307 func Max(scope *Scope, input tf.Output, axis tf.Output, optional ...MaxAttr) (output tf.Output) { 32308 if scope.Err() != nil { 32309 return 32310 } 32311 attrs := map[string]interface{}{} 32312 for _, a := range optional { 32313 a(attrs) 32314 } 32315 opspec := tf.OpSpec{ 32316 Type: "Max", 32317 Input: []tf.Input{ 32318 input, axis, 32319 }, 32320 Attrs: attrs, 32321 } 32322 op := scope.AddOperation(opspec) 32323 return op.Output(0) 32324 } 32325 32326 // Creates a dataset that contains the unique elements of `input_dataset`. 32327 func ExperimentalUniqueDataset(scope *Scope, input_dataset tf.Output, output_types []tf.DataType, output_shapes []tf.Shape) (handle tf.Output) { 32328 if scope.Err() != nil { 32329 return 32330 } 32331 attrs := map[string]interface{}{"output_types": output_types, "output_shapes": output_shapes} 32332 opspec := tf.OpSpec{ 32333 Type: "ExperimentalUniqueDataset", 32334 Input: []tf.Input{ 32335 input_dataset, 32336 }, 32337 Attrs: attrs, 32338 } 32339 op := scope.AddOperation(opspec) 32340 return op.Output(0) 32341 } 32342 32343 // ArgMinAttr is an optional argument to ArgMin. 32344 type ArgMinAttr func(optionalAttr) 32345 32346 // ArgMinOutputType sets the optional output_type attribute to value. 32347 // If not specified, defaults to DT_INT64 32348 func ArgMinOutputType(value tf.DataType) ArgMinAttr { 32349 return func(m optionalAttr) { 32350 m["output_type"] = value 32351 } 32352 } 32353 32354 // Returns the index with the smallest value across dimensions of a tensor. 32355 // 32356 // Note that in case of ties the identity of the return value is not guaranteed. 32357 // 32358 // Arguments: 32359 // 32360 // dimension: int32 or int64, must be in the range `[-rank(input), rank(input))`. 32361 // Describes which dimension of the input Tensor to reduce across. For vectors, 32362 // use dimension = 0. 32363 func ArgMin(scope *Scope, input tf.Output, dimension tf.Output, optional ...ArgMinAttr) (output tf.Output) { 32364 if scope.Err() != nil { 32365 return 32366 } 32367 attrs := map[string]interface{}{} 32368 for _, a := range optional { 32369 a(attrs) 32370 } 32371 opspec := tf.OpSpec{ 32372 Type: "ArgMin", 32373 Input: []tf.Input{ 32374 input, dimension, 32375 }, 32376 Attrs: attrs, 32377 } 32378 op := scope.AddOperation(opspec) 32379 return op.Output(0) 32380 } 32381 32382 // Converts the quantized `input` tensor into a lower-precision `output`. 32383 // 32384 // Converts the quantized `input` tensor into a lower-precision `output`, using the 32385 // output range specified with `requested_output_min` and `requested_output_max`. 32386 // 32387 // `[input_min, input_max]` are scalar floats that specify the range for the float 32388 // interpretation of the `input` data. For example, if `input_min` is -1.0f and 32389 // `input_max` is 1.0f, and we are dealing with `quint16` quantized data, then a 0 32390 // value in the 16-bit data should be interpreted as -1.0f, and a 65535 means 1.0f. 32391 // 32392 // Arguments: 32393 // 32394 // input_min: The float value that the minimum quantized input value represents. 32395 // input_max: The float value that the maximum quantized input value represents. 32396 // requested_output_min: The float value that the minimum quantized output value represents. 32397 // requested_output_max: The float value that the maximum quantized output value represents. 32398 // out_type: The type of the output. Should be a lower bit depth than Tinput. 32399 // 32400 // Returns The requested_output_min value is copied into this output.The requested_output_max value is copied into this output. 32401 func Requantize(scope *Scope, input tf.Output, input_min tf.Output, input_max tf.Output, requested_output_min tf.Output, requested_output_max tf.Output, out_type tf.DataType) (output tf.Output, output_min tf.Output, output_max tf.Output) { 32402 if scope.Err() != nil { 32403 return 32404 } 32405 attrs := map[string]interface{}{"out_type": out_type} 32406 opspec := tf.OpSpec{ 32407 Type: "Requantize", 32408 Input: []tf.Input{ 32409 input, input_min, input_max, requested_output_min, requested_output_max, 32410 }, 32411 Attrs: attrs, 32412 } 32413 op := scope.AddOperation(opspec) 32414 return op.Output(0), op.Output(1), op.Output(2) 32415 } 32416 32417 // Creates a dataset that emits the lines of one or more text files. 32418 // 32419 // Arguments: 32420 // filenames: A scalar or a vector containing the name(s) of the file(s) to be 32421 // read. 32422 // compression_type: A scalar containing either (i) the empty string (no 32423 // compression), (ii) "ZLIB", or (iii) "GZIP". 32424 // buffer_size: A scalar containing the number of bytes to buffer. 32425 func TextLineDataset(scope *Scope, filenames tf.Output, compression_type tf.Output, buffer_size tf.Output) (handle tf.Output) { 32426 if scope.Err() != nil { 32427 return 32428 } 32429 opspec := tf.OpSpec{ 32430 Type: "TextLineDataset", 32431 Input: []tf.Input{ 32432 filenames, compression_type, buffer_size, 32433 }, 32434 } 32435 op := scope.AddOperation(opspec) 32436 return op.Output(0) 32437 } 32438 32439 // Computes the sum along segments of a tensor. 32440 // 32441 // Read 32442 // [the section on segmentation](https://tensorflow.org/api_docs/python/tf/math#Segmentation) 32443 // for an explanation of segments. 32444 // 32445 // Computes a tensor such that 32446 // \\(output_i = \sum_j data_j\\) where sum is over `j` such 32447 // that `segment_ids[j] == i`. 32448 // 32449 // If the sum is empty for a given segment ID `i`, `output[i] = 0`. 32450 // 32451 // <div style="width:70%; margin:auto; margin-bottom:10px; margin-top:20px;"> 32452 // <img style="width:100%" src="https://www.tensorflow.org/images/SegmentSum.png" alt> 32453 // </div> 32454 // 32455 // For example: 32456 // 32457 // ``` 32458 // c = tf.constant([[1,2,3,4], [4, 3, 2, 1], [5,6,7,8]]) 32459 // tf.segment_sum(c, tf.constant([0, 0, 1])) 32460 // # ==> [[5, 5, 5, 5], 32461 // # [5, 6, 7, 8]] 32462 // ``` 32463 // 32464 // 32465 // Arguments: 32466 // 32467 // segment_ids: A 1-D tensor whose size is equal to the size of `data`'s 32468 // first dimension. Values should be sorted and can be repeated. 32469 // 32470 // Returns Has same shape as data, except for dimension 0 which 32471 // has size `k`, the number of segments. 32472 func SegmentSum(scope *Scope, data tf.Output, segment_ids tf.Output) (output tf.Output) { 32473 if scope.Err() != nil { 32474 return 32475 } 32476 opspec := tf.OpSpec{ 32477 Type: "SegmentSum", 32478 Input: []tf.Input{ 32479 data, segment_ids, 32480 }, 32481 } 32482 op := scope.AddOperation(opspec) 32483 return op.Output(0) 32484 } 32485 32486 // Computes the mean along segments of a tensor. 32487 // 32488 // Read 32489 // [the section on segmentation](https://tensorflow.org/api_docs/python/tf/math#Segmentation) 32490 // for an explanation of segments. 32491 // 32492 // Computes a tensor such that 32493 // \\(output_i = \frac{\sum_j data_j}{N}\\) where `mean` is 32494 // over `j` such that `segment_ids[j] == i` and `N` is the total number of 32495 // values summed. 32496 // 32497 // If the mean is empty for a given segment ID `i`, `output[i] = 0`. 32498 // 32499 // <div style="width:70%; margin:auto; margin-bottom:10px; margin-top:20px;"> 32500 // <img style="width:100%" src="https://www.tensorflow.org/images/SegmentMean.png" alt> 32501 // </div> 32502 // 32503 // For example: 32504 // 32505 // ``` 32506 // c = tf.constant([[1.0,2,3,4], [4, 3, 2, 1], [5,6,7,8]]) 32507 // tf.segment_mean(c, tf.constant([0, 0, 1])) 32508 // # ==> [[2.5, 2.5, 2.5, 2.5], 32509 // # [5, 6, 7, 8]] 32510 // ``` 32511 // 32512 // 32513 // Arguments: 32514 // 32515 // segment_ids: A 1-D tensor whose size is equal to the size of `data`'s 32516 // first dimension. Values should be sorted and can be repeated. 32517 // 32518 // Returns Has same shape as data, except for dimension 0 which 32519 // has size `k`, the number of segments. 32520 func SegmentMean(scope *Scope, data tf.Output, segment_ids tf.Output) (output tf.Output) { 32521 if scope.Err() != nil { 32522 return 32523 } 32524 opspec := tf.OpSpec{ 32525 Type: "SegmentMean", 32526 Input: []tf.Input{ 32527 data, segment_ids, 32528 }, 32529 } 32530 op := scope.AddOperation(opspec) 32531 return op.Output(0) 32532 } 32533 32534 // Computes the minimum along segments of a tensor. 32535 // 32536 // Read 32537 // [the section on segmentation](https://tensorflow.org/api_docs/python/tf/math#Segmentation) 32538 // for an explanation of segments. 32539 // 32540 // Computes a tensor such that 32541 // \\(output_i = \min_j(data_j)\\) where `min` is over `j` such 32542 // that `segment_ids[j] == i`. 32543 // 32544 // If the min is empty for a given segment ID `i`, `output[i] = 0`. 32545 // 32546 // <div style="width:70%; margin:auto; margin-bottom:10px; margin-top:20px;"> 32547 // <img style="width:100%" src="https://www.tensorflow.org/images/SegmentMin.png" alt> 32548 // </div> 32549 // 32550 // For example: 32551 // 32552 // ``` 32553 // c = tf.constant([[1,2,3,4], [4, 3, 2, 1], [5,6,7,8]]) 32554 // tf.segment_min(c, tf.constant([0, 0, 1])) 32555 // # ==> [[1, 2, 2, 1], 32556 // # [5, 6, 7, 8]] 32557 // ``` 32558 // 32559 // Arguments: 32560 // 32561 // segment_ids: A 1-D tensor whose size is equal to the size of `data`'s 32562 // first dimension. Values should be sorted and can be repeated. 32563 // 32564 // Returns Has same shape as data, except for dimension 0 which 32565 // has size `k`, the number of segments. 32566 func SegmentMin(scope *Scope, data tf.Output, segment_ids tf.Output) (output tf.Output) { 32567 if scope.Err() != nil { 32568 return 32569 } 32570 opspec := tf.OpSpec{ 32571 Type: "SegmentMin", 32572 Input: []tf.Input{ 32573 data, segment_ids, 32574 }, 32575 } 32576 op := scope.AddOperation(opspec) 32577 return op.Output(0) 32578 } 32579 32580 // Computes the sum along segments of a tensor. 32581 // 32582 // Read 32583 // [the section on segmentation](https://tensorflow.org/api_docs/python/tf/math#Segmentation) 32584 // for an explanation of segments. 32585 // 32586 // Computes a tensor such that 32587 // \\(output[i] = \sum_{j...} data[j...]\\) where the sum is over tuples `j...` such 32588 // that `segment_ids[j...] == i`. Unlike `SegmentSum`, `segment_ids` 32589 // need not be sorted and need not cover all values in the full 32590 // range of valid values. 32591 // 32592 // If the sum is empty for a given segment ID `i`, `output[i] = 0`. 32593 // If the given segment ID `i` is negative, the value is dropped and will not be 32594 // added to the sum of the segment. 32595 // 32596 // `num_segments` should equal the number of distinct segment IDs. 32597 // 32598 // <div style="width:70%; margin:auto; margin-bottom:10px; margin-top:20px;"> 32599 // <img style="width:100%" src="https://www.tensorflow.org/images/UnsortedSegmentSum.png" alt> 32600 // </div> 32601 // 32602 // ``` python 32603 // c = tf.constant([[1,2,3,4], [5,6,7,8], [4,3,2,1]]) 32604 // tf.unsorted_segment_sum(c, tf.constant([0, 1, 0]), num_segments=2) 32605 // # ==> [[ 5, 5, 5, 5], 32606 // # [5, 6, 7, 8]] 32607 // ``` 32608 // 32609 // 32610 // Arguments: 32611 // 32612 // segment_ids: A tensor whose shape is a prefix of `data.shape`. 32613 // 32614 // 32615 // Returns Has same shape as data, except for the first `segment_ids.rank` 32616 // dimensions, which are replaced with a single dimension which has size 32617 // `num_segments`. 32618 func UnsortedSegmentSum(scope *Scope, data tf.Output, segment_ids tf.Output, num_segments tf.Output) (output tf.Output) { 32619 if scope.Err() != nil { 32620 return 32621 } 32622 opspec := tf.OpSpec{ 32623 Type: "UnsortedSegmentSum", 32624 Input: []tf.Input{ 32625 data, segment_ids, num_segments, 32626 }, 32627 } 32628 op := scope.AddOperation(opspec) 32629 return op.Output(0) 32630 } 32631 32632 // Computes the product along segments of a tensor. 32633 // 32634 // Read 32635 // [the section on segmentation](https://tensorflow.org/api_docs/python/tf/math#Segmentation) 32636 // for an explanation of segments. 32637 // 32638 // This operator is similar to the unsorted segment sum operator found 32639 // [(here)](../../../api_docs/python/math_ops.md#UnsortedSegmentSum). 32640 // Instead of computing the sum over segments, it computes the product of all 32641 // entries belonging to a segment such that: 32642 // 32643 // \\(output_i = \prod_{j...} data[j...]\\) where the product is over tuples 32644 // `j...` such that `segment_ids[j...] == i`. 32645 // 32646 // For example: 32647 // 32648 // ``` python 32649 // c = tf.constant([[1,2,3,4], [5,6,7,8], [4,3,2,1]]) 32650 // tf.unsorted_segment_prod(c, tf.constant([0, 1, 0]), num_segments=2) 32651 // # ==> [[ 4, 6, 6, 4], 32652 // # [5, 6, 7, 8]] 32653 // ``` 32654 // 32655 // If there is no entry for a given segment ID `i`, it outputs 1. 32656 // 32657 // If the given segment ID `i` is negative, then the corresponding value is 32658 // dropped, and will not be included in the result. 32659 // 32660 // Arguments: 32661 // 32662 // segment_ids: A tensor whose shape is a prefix of `data.shape`. 32663 // 32664 // 32665 // Returns Has same shape as data, except for the first `segment_ids.rank` 32666 // dimensions, which are replaced with a single dimension which has size 32667 // `num_segments`. 32668 func UnsortedSegmentProd(scope *Scope, data tf.Output, segment_ids tf.Output, num_segments tf.Output) (output tf.Output) { 32669 if scope.Err() != nil { 32670 return 32671 } 32672 opspec := tf.OpSpec{ 32673 Type: "UnsortedSegmentProd", 32674 Input: []tf.Input{ 32675 data, segment_ids, num_segments, 32676 }, 32677 } 32678 op := scope.AddOperation(opspec) 32679 return op.Output(0) 32680 } 32681 32682 // Computes hyperbolic cosine of x element-wise. 32683 func Cosh(scope *Scope, x tf.Output) (y tf.Output) { 32684 if scope.Err() != nil { 32685 return 32686 } 32687 opspec := tf.OpSpec{ 32688 Type: "Cosh", 32689 Input: []tf.Input{ 32690 x, 32691 }, 32692 } 32693 op := scope.AddOperation(opspec) 32694 return op.Output(0) 32695 } 32696 32697 // Computes the mean along sparse segments of a tensor. 32698 // 32699 // Like `SparseSegmentMean`, but allows missing ids in `segment_ids`. If an id is 32700 // misisng, the `output` tensor at that position will be zeroed. 32701 // 32702 // Read 32703 // [the section on segmentation](https://tensorflow.org/api_docs/python/tf/math#Segmentation) 32704 // for an explanation of segments. 32705 // 32706 // Arguments: 32707 // 32708 // indices: A 1-D tensor. Has same rank as `segment_ids`. 32709 // segment_ids: A 1-D tensor. Values should be sorted and can be repeated. 32710 // num_segments: Should equal the number of distinct segment IDs. 32711 // 32712 // Returns Has same shape as data, except for dimension 0 which has size 32713 // `num_segments`. 32714 func SparseSegmentMeanWithNumSegments(scope *Scope, data tf.Output, indices tf.Output, segment_ids tf.Output, num_segments tf.Output) (output tf.Output) { 32715 if scope.Err() != nil { 32716 return 32717 } 32718 opspec := tf.OpSpec{ 32719 Type: "SparseSegmentMeanWithNumSegments", 32720 Input: []tf.Input{ 32721 data, indices, segment_ids, num_segments, 32722 }, 32723 } 32724 op := scope.AddOperation(opspec) 32725 return op.Output(0) 32726 } 32727 32728 // CudnnRNNParamsSizeAttr is an optional argument to CudnnRNNParamsSize. 32729 type CudnnRNNParamsSizeAttr func(optionalAttr) 32730 32731 // CudnnRNNParamsSizeRnnMode sets the optional rnn_mode attribute to value. 32732 // If not specified, defaults to "lstm" 32733 func CudnnRNNParamsSizeRnnMode(value string) CudnnRNNParamsSizeAttr { 32734 return func(m optionalAttr) { 32735 m["rnn_mode"] = value 32736 } 32737 } 32738 32739 // CudnnRNNParamsSizeInputMode sets the optional input_mode attribute to value. 32740 // If not specified, defaults to "linear_input" 32741 func CudnnRNNParamsSizeInputMode(value string) CudnnRNNParamsSizeAttr { 32742 return func(m optionalAttr) { 32743 m["input_mode"] = value 32744 } 32745 } 32746 32747 // CudnnRNNParamsSizeDirection sets the optional direction attribute to value. 32748 // If not specified, defaults to "unidirectional" 32749 func CudnnRNNParamsSizeDirection(value string) CudnnRNNParamsSizeAttr { 32750 return func(m optionalAttr) { 32751 m["direction"] = value 32752 } 32753 } 32754 32755 // CudnnRNNParamsSizeDropout sets the optional dropout attribute to value. 32756 // If not specified, defaults to 0 32757 func CudnnRNNParamsSizeDropout(value float32) CudnnRNNParamsSizeAttr { 32758 return func(m optionalAttr) { 32759 m["dropout"] = value 32760 } 32761 } 32762 32763 // CudnnRNNParamsSizeSeed sets the optional seed attribute to value. 32764 // If not specified, defaults to 0 32765 func CudnnRNNParamsSizeSeed(value int64) CudnnRNNParamsSizeAttr { 32766 return func(m optionalAttr) { 32767 m["seed"] = value 32768 } 32769 } 32770 32771 // CudnnRNNParamsSizeSeed2 sets the optional seed2 attribute to value. 32772 // If not specified, defaults to 0 32773 func CudnnRNNParamsSizeSeed2(value int64) CudnnRNNParamsSizeAttr { 32774 return func(m optionalAttr) { 32775 m["seed2"] = value 32776 } 32777 } 32778 32779 // Computes size of weights that can be used by a Cudnn RNN model. 32780 // 32781 // Return the params size that can be used by the Cudnn RNN model. Subsequent 32782 // weight allocation and initialization should use this size. 32783 // 32784 // num_layers: Specifies the number of layers in the RNN model. 32785 // num_units: Specifies the size of the hidden state. 32786 // input_size: Specifies the size of the input state. 32787 // rnn_mode: Indicates the type of the RNN model. 32788 // input_mode: Indicate whether there is a linear projection between the input and 32789 // The actual computation before the first layer. 'skip_input' is only allowed 32790 // when input_size == num_units; 'auto_select' implies 'skip_input' when 32791 // input_size == num_units; otherwise, it implies 'linear_input'. 32792 // direction: Indicates whether a bidirectional model will be used. 32793 // dir = (direction == bidirectional) ? 2 : 1 32794 // dropout: dropout probability. When set to 0., dropout is disabled. 32795 // seed: the 1st part of a seed to initialize dropout. 32796 // seed2: the 2nd part of a seed to initialize dropout. 32797 // params_size: The size of the params buffer that should be allocated and 32798 // initialized for this RNN model. Note that this params buffer may not be 32799 // compatible across GPUs. Please use CudnnRNNParamsWeights and 32800 // CudnnRNNParamsBiases to save and restore them in a way that is compatible 32801 // across different runs. 32802 func CudnnRNNParamsSize(scope *Scope, num_layers tf.Output, num_units tf.Output, input_size tf.Output, T tf.DataType, S tf.DataType, optional ...CudnnRNNParamsSizeAttr) (params_size tf.Output) { 32803 if scope.Err() != nil { 32804 return 32805 } 32806 attrs := map[string]interface{}{"T": T, "S": S} 32807 for _, a := range optional { 32808 a(attrs) 32809 } 32810 opspec := tf.OpSpec{ 32811 Type: "CudnnRNNParamsSize", 32812 Input: []tf.Input{ 32813 num_layers, num_units, input_size, 32814 }, 32815 Attrs: attrs, 32816 } 32817 op := scope.AddOperation(opspec) 32818 return op.Output(0) 32819 } 32820 32821 // Computes gradients for SparseSegmentMean. 32822 // 32823 // Returns tensor "output" with same shape as grad, except for dimension 0 whose 32824 // value is output_dim0. 32825 // 32826 // Arguments: 32827 // grad: gradient propagated to the SparseSegmentMean op. 32828 // indices: indices passed to the corresponding SparseSegmentMean op. 32829 // segment_ids: segment_ids passed to the corresponding SparseSegmentMean op. 32830 // output_dim0: dimension 0 of "data" passed to SparseSegmentMean op. 32831 func SparseSegmentMeanGrad(scope *Scope, grad tf.Output, indices tf.Output, segment_ids tf.Output, output_dim0 tf.Output) (output tf.Output) { 32832 if scope.Err() != nil { 32833 return 32834 } 32835 opspec := tf.OpSpec{ 32836 Type: "SparseSegmentMeanGrad", 32837 Input: []tf.Input{ 32838 grad, indices, segment_ids, output_dim0, 32839 }, 32840 } 32841 op := scope.AddOperation(opspec) 32842 return op.Output(0) 32843 } 32844 32845 // Computes the sum along sparse segments of a tensor divided by the sqrt of N. 32846 // 32847 // N is the size of the segment being reduced. 32848 // 32849 // See `tf.sparse.segment_sum` for usage examples. 32850 // 32851 // 32852 // Arguments: 32853 // 32854 // indices: A 1-D tensor. Has same rank as `segment_ids`. 32855 // segment_ids: A 1-D tensor. Values should be sorted and can be repeated. 32856 // 32857 // Returns Has same shape as data, except for dimension 0 which 32858 // has size `k`, the number of segments. 32859 func SparseSegmentSqrtN(scope *Scope, data tf.Output, indices tf.Output, segment_ids tf.Output) (output tf.Output) { 32860 if scope.Err() != nil { 32861 return 32862 } 32863 opspec := tf.OpSpec{ 32864 Type: "SparseSegmentSqrtN", 32865 Input: []tf.Input{ 32866 data, indices, segment_ids, 32867 }, 32868 } 32869 op := scope.AddOperation(opspec) 32870 return op.Output(0) 32871 } 32872 32873 // Compute the upper regularized incomplete Gamma function `Q(a, x)`. 32874 // 32875 // The upper regularized incomplete Gamma function is defined as: 32876 // 32877 // \\(Q(a, x) = Gamma(a, x) / Gamma(a) = 1 - P(a, x)\\) 32878 // 32879 // where 32880 // 32881 // \\(Gamma(a, x) = int_{x}^{\infty} t^{a-1} exp(-t) dt\\) 32882 // 32883 // is the upper incomplete Gama function. 32884 // 32885 // Note, above `P(a, x)` (`Igamma`) is the lower regularized complete 32886 // Gamma function. 32887 func Igammac(scope *Scope, a tf.Output, x tf.Output) (z tf.Output) { 32888 if scope.Err() != nil { 32889 return 32890 } 32891 opspec := tf.OpSpec{ 32892 Type: "Igammac", 32893 Input: []tf.Input{ 32894 a, x, 32895 }, 32896 } 32897 op := scope.AddOperation(opspec) 32898 return op.Output(0) 32899 } 32900 32901 // Computes the sum along sparse segments of a tensor divided by the sqrt of N. 32902 // 32903 // N is the size of the segment being reduced. 32904 // 32905 // Like `SparseSegmentSqrtN`, but allows missing ids in `segment_ids`. If an id is 32906 // misisng, the `output` tensor at that position will be zeroed. 32907 // 32908 // Read 32909 // [the section on segmentation](https://tensorflow.org/api_docs/python/tf/math#Segmentation) 32910 // for an explanation of segments. 32911 // 32912 // Arguments: 32913 // 32914 // indices: A 1-D tensor. Has same rank as `segment_ids`. 32915 // segment_ids: A 1-D tensor. Values should be sorted and can be repeated. 32916 // num_segments: Should equal the number of distinct segment IDs. 32917 // 32918 // Returns Has same shape as data, except for dimension 0 which 32919 // has size `k`, the number of segments. 32920 func SparseSegmentSqrtNWithNumSegments(scope *Scope, data tf.Output, indices tf.Output, segment_ids tf.Output, num_segments tf.Output) (output tf.Output) { 32921 if scope.Err() != nil { 32922 return 32923 } 32924 opspec := tf.OpSpec{ 32925 Type: "SparseSegmentSqrtNWithNumSegments", 32926 Input: []tf.Input{ 32927 data, indices, segment_ids, num_segments, 32928 }, 32929 } 32930 op := scope.AddOperation(opspec) 32931 return op.Output(0) 32932 } 32933 32934 // Computes gradients for SparseSegmentSqrtN. 32935 // 32936 // Returns tensor "output" with same shape as grad, except for dimension 0 whose 32937 // value is output_dim0. 32938 // 32939 // Arguments: 32940 // grad: gradient propagated to the SparseSegmentSqrtN op. 32941 // indices: indices passed to the corresponding SparseSegmentSqrtN op. 32942 // segment_ids: segment_ids passed to the corresponding SparseSegmentSqrtN op. 32943 // output_dim0: dimension 0 of "data" passed to SparseSegmentSqrtN op. 32944 func SparseSegmentSqrtNGrad(scope *Scope, grad tf.Output, indices tf.Output, segment_ids tf.Output, output_dim0 tf.Output) (output tf.Output) { 32945 if scope.Err() != nil { 32946 return 32947 } 32948 opspec := tf.OpSpec{ 32949 Type: "SparseSegmentSqrtNGrad", 32950 Input: []tf.Input{ 32951 grad, indices, segment_ids, output_dim0, 32952 }, 32953 } 32954 op := scope.AddOperation(opspec) 32955 return op.Output(0) 32956 } 32957 32958 // LRNGradAttr is an optional argument to LRNGrad. 32959 type LRNGradAttr func(optionalAttr) 32960 32961 // LRNGradDepthRadius sets the optional depth_radius attribute to value. 32962 // 32963 // value: A depth radius. 32964 // If not specified, defaults to 5 32965 func LRNGradDepthRadius(value int64) LRNGradAttr { 32966 return func(m optionalAttr) { 32967 m["depth_radius"] = value 32968 } 32969 } 32970 32971 // LRNGradBias sets the optional bias attribute to value. 32972 // 32973 // value: An offset (usually > 0 to avoid dividing by 0). 32974 // If not specified, defaults to 1 32975 func LRNGradBias(value float32) LRNGradAttr { 32976 return func(m optionalAttr) { 32977 m["bias"] = value 32978 } 32979 } 32980 32981 // LRNGradAlpha sets the optional alpha attribute to value. 32982 // 32983 // value: A scale factor, usually positive. 32984 // If not specified, defaults to 1 32985 func LRNGradAlpha(value float32) LRNGradAttr { 32986 return func(m optionalAttr) { 32987 m["alpha"] = value 32988 } 32989 } 32990 32991 // LRNGradBeta sets the optional beta attribute to value. 32992 // 32993 // value: An exponent. 32994 // If not specified, defaults to 0.5 32995 func LRNGradBeta(value float32) LRNGradAttr { 32996 return func(m optionalAttr) { 32997 m["beta"] = value 32998 } 32999 } 33000 33001 // Gradients for Local Response Normalization. 33002 // 33003 // Arguments: 33004 // input_grads: 4-D with shape `[batch, height, width, channels]`. 33005 // input_image: 4-D with shape `[batch, height, width, channels]`. 33006 // output_image: 4-D with shape `[batch, height, width, channels]`. 33007 // 33008 // Returns The gradients for LRN. 33009 func LRNGrad(scope *Scope, input_grads tf.Output, input_image tf.Output, output_image tf.Output, optional ...LRNGradAttr) (output tf.Output) { 33010 if scope.Err() != nil { 33011 return 33012 } 33013 attrs := map[string]interface{}{} 33014 for _, a := range optional { 33015 a(attrs) 33016 } 33017 opspec := tf.OpSpec{ 33018 Type: "LRNGrad", 33019 Input: []tf.Input{ 33020 input_grads, input_image, output_image, 33021 }, 33022 Attrs: attrs, 33023 } 33024 op := scope.AddOperation(opspec) 33025 return op.Output(0) 33026 } 33027 33028 // AnyAttr is an optional argument to Any. 33029 type AnyAttr func(optionalAttr) 33030 33031 // AnyKeepDims sets the optional keep_dims attribute to value. 33032 // 33033 // value: If true, retain reduced dimensions with length 1. 33034 // If not specified, defaults to false 33035 func AnyKeepDims(value bool) AnyAttr { 33036 return func(m optionalAttr) { 33037 m["keep_dims"] = value 33038 } 33039 } 33040 33041 // Computes the "logical or" of elements across dimensions of a tensor. 33042 // 33043 // Reduces `input` along the dimensions given in `axis`. Unless 33044 // `keep_dims` is true, the rank of the tensor is reduced by 1 for each entry in 33045 // `axis`. If `keep_dims` is true, the reduced dimensions are 33046 // retained with length 1. 33047 // 33048 // Arguments: 33049 // input: The tensor to reduce. 33050 // axis: The dimensions to reduce. Must be in the range 33051 // `[-rank(input), rank(input))`. 33052 // 33053 // Returns The reduced tensor. 33054 func Any(scope *Scope, input tf.Output, axis tf.Output, optional ...AnyAttr) (output tf.Output) { 33055 if scope.Err() != nil { 33056 return 33057 } 33058 attrs := map[string]interface{}{} 33059 for _, a := range optional { 33060 a(attrs) 33061 } 33062 opspec := tf.OpSpec{ 33063 Type: "Any", 33064 Input: []tf.Input{ 33065 input, axis, 33066 }, 33067 Attrs: attrs, 33068 } 33069 op := scope.AddOperation(opspec) 33070 return op.Output(0) 33071 } 33072 33073 // DestroyResourceOpAttr is an optional argument to DestroyResourceOp. 33074 type DestroyResourceOpAttr func(optionalAttr) 33075 33076 // DestroyResourceOpIgnoreLookupError sets the optional ignore_lookup_error attribute to value. 33077 // 33078 // value: whether to ignore the error when the resource 33079 // doesn't exist. 33080 // If not specified, defaults to true 33081 func DestroyResourceOpIgnoreLookupError(value bool) DestroyResourceOpAttr { 33082 return func(m optionalAttr) { 33083 m["ignore_lookup_error"] = value 33084 } 33085 } 33086 33087 // Deletes the resource specified by the handle. 33088 // 33089 // All subsequent operations using the resource will result in a NotFound 33090 // error status. 33091 // 33092 // Arguments: 33093 // resource: handle to the resource to delete. 33094 // 33095 // Returns the created operation. 33096 func DestroyResourceOp(scope *Scope, resource tf.Output, optional ...DestroyResourceOpAttr) (o *tf.Operation) { 33097 if scope.Err() != nil { 33098 return 33099 } 33100 attrs := map[string]interface{}{} 33101 for _, a := range optional { 33102 a(attrs) 33103 } 33104 opspec := tf.OpSpec{ 33105 Type: "DestroyResourceOp", 33106 Input: []tf.Input{ 33107 resource, 33108 }, 33109 Attrs: attrs, 33110 } 33111 return scope.AddOperation(opspec) 33112 } 33113 33114 // Generates values in an interval. 33115 // 33116 // A sequence of `num` evenly-spaced values are generated beginning at `start`. 33117 // If `num > 1`, the values in the sequence increase by `stop - start / num - 1`, 33118 // so that the last one is exactly `stop`. 33119 // 33120 // For example: 33121 // 33122 // ``` 33123 // tf.linspace(10.0, 12.0, 3, name="linspace") => [ 10.0 11.0 12.0] 33124 // ``` 33125 // 33126 // Arguments: 33127 // start: 0-D tensor. First entry in the range. 33128 // stop: 0-D tensor. Last entry in the range. 33129 // num: 0-D tensor. Number of values to generate. 33130 // 33131 // Returns 1-D. The generated values. 33132 func LinSpace(scope *Scope, start tf.Output, stop tf.Output, num tf.Output) (output tf.Output) { 33133 if scope.Err() != nil { 33134 return 33135 } 33136 opspec := tf.OpSpec{ 33137 Type: "LinSpace", 33138 Input: []tf.Input{ 33139 start, stop, num, 33140 }, 33141 } 33142 op := scope.AddOperation(opspec) 33143 return op.Output(0) 33144 } 33145 33146 // ComplexAttr is an optional argument to Complex. 33147 type ComplexAttr func(optionalAttr) 33148 33149 // ComplexTout sets the optional Tout attribute to value. 33150 // If not specified, defaults to DT_COMPLEX64 33151 func ComplexTout(value tf.DataType) ComplexAttr { 33152 return func(m optionalAttr) { 33153 m["Tout"] = value 33154 } 33155 } 33156 33157 // Converts two real numbers to a complex number. 33158 // 33159 // Given a tensor `real` representing the real part of a complex number, and a 33160 // tensor `imag` representing the imaginary part of a complex number, this 33161 // operation returns complex numbers elementwise of the form \\(a + bj\\), where 33162 // *a* represents the `real` part and *b* represents the `imag` part. 33163 // 33164 // The input tensors `real` and `imag` must have the same shape. 33165 // 33166 // For example: 33167 // 33168 // ``` 33169 // # tensor 'real' is [2.25, 3.25] 33170 // # tensor `imag` is [4.75, 5.75] 33171 // tf.complex(real, imag) ==> [[2.25 + 4.75j], [3.25 + 5.75j]] 33172 // ``` 33173 func Complex(scope *Scope, real tf.Output, imag tf.Output, optional ...ComplexAttr) (out tf.Output) { 33174 if scope.Err() != nil { 33175 return 33176 } 33177 attrs := map[string]interface{}{} 33178 for _, a := range optional { 33179 a(attrs) 33180 } 33181 opspec := tf.OpSpec{ 33182 Type: "Complex", 33183 Input: []tf.Input{ 33184 real, imag, 33185 }, 33186 Attrs: attrs, 33187 } 33188 op := scope.AddOperation(opspec) 33189 return op.Output(0) 33190 } 33191 33192 // ImagAttr is an optional argument to Imag. 33193 type ImagAttr func(optionalAttr) 33194 33195 // ImagTout sets the optional Tout attribute to value. 33196 // If not specified, defaults to DT_FLOAT 33197 func ImagTout(value tf.DataType) ImagAttr { 33198 return func(m optionalAttr) { 33199 m["Tout"] = value 33200 } 33201 } 33202 33203 // Returns the imaginary part of a complex number. 33204 // 33205 // Given a tensor `input` of complex numbers, this operation returns a tensor of 33206 // type `float` that is the imaginary part of each element in `input`. All 33207 // elements in `input` must be complex numbers of the form \\(a + bj\\), where *a* 33208 // is the real part and *b* is the imaginary part returned by this operation. 33209 // 33210 // For example: 33211 // 33212 // ``` 33213 // # tensor 'input' is [-2.25 + 4.75j, 3.25 + 5.75j] 33214 // tf.imag(input) ==> [4.75, 5.75] 33215 // ``` 33216 func Imag(scope *Scope, input tf.Output, optional ...ImagAttr) (output tf.Output) { 33217 if scope.Err() != nil { 33218 return 33219 } 33220 attrs := map[string]interface{}{} 33221 for _, a := range optional { 33222 a(attrs) 33223 } 33224 opspec := tf.OpSpec{ 33225 Type: "Imag", 33226 Input: []tf.Input{ 33227 input, 33228 }, 33229 Attrs: attrs, 33230 } 33231 op := scope.AddOperation(opspec) 33232 return op.Output(0) 33233 } 33234 33235 // Computes hyperbolic tangent of `x` element-wise. 33236 func Tanh(scope *Scope, x tf.Output) (y tf.Output) { 33237 if scope.Err() != nil { 33238 return 33239 } 33240 opspec := tf.OpSpec{ 33241 Type: "Tanh", 33242 Input: []tf.Input{ 33243 x, 33244 }, 33245 } 33246 op := scope.AddOperation(opspec) 33247 return op.Output(0) 33248 } 33249 33250 // Computes the maximum along segments of a tensor. 33251 // 33252 // Read 33253 // [the section on segmentation](https://tensorflow.org/api_docs/python/tf/math#Segmentation) 33254 // for an explanation of segments. 33255 // 33256 // Computes a tensor such that 33257 // \\(output_i = \max_j(data_j)\\) where `max` is over `j` such 33258 // that `segment_ids[j] == i`. 33259 // 33260 // If the max is empty for a given segment ID `i`, `output[i] = 0`. 33261 // 33262 // <div style="width:70%; margin:auto; margin-bottom:10px; margin-top:20px;"> 33263 // <img style="width:100%" src="https://www.tensorflow.org/images/SegmentMax.png" alt> 33264 // </div> 33265 // 33266 // For example: 33267 // 33268 // ``` 33269 // c = tf.constant([[1,2,3,4], [4, 3, 2, 1], [5,6,7,8]]) 33270 // tf.segment_max(c, tf.constant([0, 0, 1])) 33271 // # ==> [[4, 3, 3, 4], 33272 // # [5, 6, 7, 8]] 33273 // ``` 33274 // 33275 // 33276 // Arguments: 33277 // 33278 // segment_ids: A 1-D tensor whose size is equal to the size of `data`'s 33279 // first dimension. Values should be sorted and can be repeated. 33280 // 33281 // Returns Has same shape as data, except for dimension 0 which 33282 // has size `k`, the number of segments. 33283 func SegmentMax(scope *Scope, data tf.Output, segment_ids tf.Output) (output tf.Output) { 33284 if scope.Err() != nil { 33285 return 33286 } 33287 opspec := tf.OpSpec{ 33288 Type: "SegmentMax", 33289 Input: []tf.Input{ 33290 data, segment_ids, 33291 }, 33292 } 33293 op := scope.AddOperation(opspec) 33294 return op.Output(0) 33295 } 33296 33297 // Creates a dataset that skips `count` elements from the `input_dataset`. 33298 // 33299 // Arguments: 33300 // 33301 // count: A scalar representing the number of elements from the `input_dataset` 33302 // that should be skipped. If count is -1, skips everything. 33303 // 33304 // 33305 func SkipDataset(scope *Scope, input_dataset tf.Output, count tf.Output, output_types []tf.DataType, output_shapes []tf.Shape) (handle tf.Output) { 33306 if scope.Err() != nil { 33307 return 33308 } 33309 attrs := map[string]interface{}{"output_types": output_types, "output_shapes": output_shapes} 33310 opspec := tf.OpSpec{ 33311 Type: "SkipDataset", 33312 Input: []tf.Input{ 33313 input_dataset, count, 33314 }, 33315 Attrs: attrs, 33316 } 33317 op := scope.AddOperation(opspec) 33318 return op.Output(0) 33319 } 33320 33321 // VarHandleOpAttr is an optional argument to VarHandleOp. 33322 type VarHandleOpAttr func(optionalAttr) 33323 33324 // VarHandleOpContainer sets the optional container attribute to value. 33325 // 33326 // value: the container this variable is placed in. 33327 // If not specified, defaults to "" 33328 func VarHandleOpContainer(value string) VarHandleOpAttr { 33329 return func(m optionalAttr) { 33330 m["container"] = value 33331 } 33332 } 33333 33334 // VarHandleOpSharedName sets the optional shared_name attribute to value. 33335 // 33336 // value: the name by which this variable is referred to. 33337 // If not specified, defaults to "" 33338 func VarHandleOpSharedName(value string) VarHandleOpAttr { 33339 return func(m optionalAttr) { 33340 m["shared_name"] = value 33341 } 33342 } 33343 33344 // Creates a handle to a Variable resource. 33345 // 33346 // Arguments: 33347 // dtype: the type of this variable. Must agree with the dtypes 33348 // of all ops using this variable. 33349 // shape: The (possibly partially specified) shape of this variable. 33350 func VarHandleOp(scope *Scope, dtype tf.DataType, shape tf.Shape, optional ...VarHandleOpAttr) (resource tf.Output) { 33351 if scope.Err() != nil { 33352 return 33353 } 33354 attrs := map[string]interface{}{"dtype": dtype, "shape": shape} 33355 for _, a := range optional { 33356 a(attrs) 33357 } 33358 opspec := tf.OpSpec{ 33359 Type: "VarHandleOp", 33360 33361 Attrs: attrs, 33362 } 33363 op := scope.AddOperation(opspec) 33364 return op.Output(0) 33365 } 33366 33367 // AngleAttr is an optional argument to Angle. 33368 type AngleAttr func(optionalAttr) 33369 33370 // AngleTout sets the optional Tout attribute to value. 33371 // If not specified, defaults to DT_FLOAT 33372 func AngleTout(value tf.DataType) AngleAttr { 33373 return func(m optionalAttr) { 33374 m["Tout"] = value 33375 } 33376 } 33377 33378 // Returns the argument of a complex number. 33379 // 33380 // Given a tensor `input` of complex numbers, this operation returns a tensor of 33381 // type `float` that is the argument of each element in `input`. All elements in 33382 // `input` must be complex numbers of the form \\(a + bj\\), where *a* 33383 // is the real part and *b* is the imaginary part. 33384 // 33385 // The argument returned by this operation is of the form \\(atan2(b, a)\\). 33386 // 33387 // For example: 33388 // 33389 // ``` 33390 // # tensor 'input' is [-2.25 + 4.75j, 3.25 + 5.75j] 33391 // tf.angle(input) ==> [2.0132, 1.056] 33392 // ``` 33393 // 33394 // @compatibility(numpy) 33395 // Equivalent to np.angle. 33396 // @end_compatibility 33397 func Angle(scope *Scope, input tf.Output, optional ...AngleAttr) (output tf.Output) { 33398 if scope.Err() != nil { 33399 return 33400 } 33401 attrs := map[string]interface{}{} 33402 for _, a := range optional { 33403 a(attrs) 33404 } 33405 opspec := tf.OpSpec{ 33406 Type: "Angle", 33407 Input: []tf.Input{ 33408 input, 33409 }, 33410 Attrs: attrs, 33411 } 33412 op := scope.AddOperation(opspec) 33413 return op.Output(0) 33414 } 33415 33416 // Clips tensor values to a specified min and max. 33417 // 33418 // Given a tensor `t`, this operation returns a tensor of the same type and 33419 // shape as `t` with its values clipped to `clip_value_min` and `clip_value_max`. 33420 // Any values less than `clip_value_min` are set to `clip_value_min`. Any values 33421 // greater than `clip_value_max` are set to `clip_value_max`. 33422 // 33423 // Arguments: 33424 // t: A `Tensor`. 33425 // clip_value_min: A 0-D (scalar) `Tensor`, or a `Tensor` with the same shape 33426 // as `t`. The minimum value to clip by. 33427 // clip_value_max: A 0-D (scalar) `Tensor`, or a `Tensor` with the same shape 33428 // as `t`. The maximum value to clip by. 33429 // 33430 // Returns A clipped `Tensor` with the same shape as input 't'. 33431 func ClipByValue(scope *Scope, t tf.Output, clip_value_min tf.Output, clip_value_max tf.Output) (output tf.Output) { 33432 if scope.Err() != nil { 33433 return 33434 } 33435 opspec := tf.OpSpec{ 33436 Type: "ClipByValue", 33437 Input: []tf.Input{ 33438 t, clip_value_min, clip_value_max, 33439 }, 33440 } 33441 op := scope.AddOperation(opspec) 33442 return op.Output(0) 33443 } 33444 33445 // Counts the number of occurrences of each value in an integer array. 33446 // 33447 // Outputs a vector with length `size` and the same dtype as `weights`. If 33448 // `weights` are empty, then index `i` stores the number of times the value `i` is 33449 // counted in `arr`. If `weights` are non-empty, then index `i` stores the sum of 33450 // the value in `weights` at each index where the corresponding value in `arr` is 33451 // `i`. 33452 // 33453 // Values in `arr` outside of the range [0, size) are ignored. 33454 // 33455 // Arguments: 33456 // arr: int32 `Tensor`. 33457 // size: non-negative int32 scalar `Tensor`. 33458 // weights: is an int32, int64, float32, or float64 `Tensor` with the same 33459 // shape as `arr`, or a length-0 `Tensor`, in which case it acts as all weights 33460 // equal to 1. 33461 // 33462 // Returns 1D `Tensor` with length equal to `size`. The counts or summed weights for 33463 // each value in the range [0, size). 33464 func Bincount(scope *Scope, arr tf.Output, size tf.Output, weights tf.Output) (bins tf.Output) { 33465 if scope.Err() != nil { 33466 return 33467 } 33468 opspec := tf.OpSpec{ 33469 Type: "Bincount", 33470 Input: []tf.Input{ 33471 arr, size, weights, 33472 }, 33473 } 33474 op := scope.AddOperation(opspec) 33475 return op.Output(0) 33476 } 33477 33478 // CumsumAttr is an optional argument to Cumsum. 33479 type CumsumAttr func(optionalAttr) 33480 33481 // CumsumExclusive sets the optional exclusive attribute to value. 33482 // 33483 // value: If `True`, perform exclusive cumsum. 33484 // If not specified, defaults to false 33485 func CumsumExclusive(value bool) CumsumAttr { 33486 return func(m optionalAttr) { 33487 m["exclusive"] = value 33488 } 33489 } 33490 33491 // CumsumReverse sets the optional reverse attribute to value. 33492 // 33493 // value: A `bool` (default: False). 33494 // If not specified, defaults to false 33495 func CumsumReverse(value bool) CumsumAttr { 33496 return func(m optionalAttr) { 33497 m["reverse"] = value 33498 } 33499 } 33500 33501 // Compute the cumulative sum of the tensor `x` along `axis`. 33502 // 33503 // By default, this op performs an inclusive cumsum, which means that the first 33504 // element of the input is identical to the first element of the output: 33505 // 33506 // ```python 33507 // tf.cumsum([a, b, c]) # => [a, a + b, a + b + c] 33508 // ``` 33509 // 33510 // By setting the `exclusive` kwarg to `True`, an exclusive cumsum is 33511 // performed instead: 33512 // 33513 // ```python 33514 // tf.cumsum([a, b, c], exclusive=True) # => [0, a, a + b] 33515 // ``` 33516 // 33517 // By setting the `reverse` kwarg to `True`, the cumsum is performed in the 33518 // opposite direction: 33519 // 33520 // ```python 33521 // tf.cumsum([a, b, c], reverse=True) # => [a + b + c, b + c, c] 33522 // ``` 33523 // 33524 // This is more efficient than using separate `tf.reverse` ops. 33525 // 33526 // The `reverse` and `exclusive` kwargs can also be combined: 33527 // 33528 // ```python 33529 // tf.cumsum([a, b, c], exclusive=True, reverse=True) # => [b + c, c, 0] 33530 // ``` 33531 // 33532 // Arguments: 33533 // x: A `Tensor`. Must be one of the following types: `float32`, `float64`, 33534 // `int64`, `int32`, `uint8`, `uint16`, `int16`, `int8`, `complex64`, 33535 // `complex128`, `qint8`, `quint8`, `qint32`, `half`. 33536 // axis: A `Tensor` of type `int32` (default: 0). Must be in the range 33537 // `[-rank(x), rank(x))`. 33538 func Cumsum(scope *Scope, x tf.Output, axis tf.Output, optional ...CumsumAttr) (out tf.Output) { 33539 if scope.Err() != nil { 33540 return 33541 } 33542 attrs := map[string]interface{}{} 33543 for _, a := range optional { 33544 a(attrs) 33545 } 33546 opspec := tf.OpSpec{ 33547 Type: "Cumsum", 33548 Input: []tf.Input{ 33549 x, axis, 33550 }, 33551 Attrs: attrs, 33552 } 33553 op := scope.AddOperation(opspec) 33554 return op.Output(0) 33555 } 33556 33557 // Return the shape of s0 op s1 with broadcast. 33558 // 33559 // Given `s0` and `s1`, tensors that represent shapes, compute `r0`, the 33560 // broadcasted shape. `s0`, `s1` and `r0` are all integer vectors. 33561 func BroadcastArgs(scope *Scope, s0 tf.Output, s1 tf.Output) (r0 tf.Output) { 33562 if scope.Err() != nil { 33563 return 33564 } 33565 opspec := tf.OpSpec{ 33566 Type: "BroadcastArgs", 33567 Input: []tf.Input{ 33568 s0, s1, 33569 }, 33570 } 33571 op := scope.AddOperation(opspec) 33572 return op.Output(0) 33573 } 33574 33575 // DataFormatDimMapAttr is an optional argument to DataFormatDimMap. 33576 type DataFormatDimMapAttr func(optionalAttr) 33577 33578 // DataFormatDimMapSrcFormat sets the optional src_format attribute to value. 33579 // 33580 // value: source data format. 33581 // If not specified, defaults to "NHWC" 33582 func DataFormatDimMapSrcFormat(value string) DataFormatDimMapAttr { 33583 return func(m optionalAttr) { 33584 m["src_format"] = value 33585 } 33586 } 33587 33588 // DataFormatDimMapDstFormat sets the optional dst_format attribute to value. 33589 // 33590 // value: destination data format. 33591 // If not specified, defaults to "NCHW" 33592 func DataFormatDimMapDstFormat(value string) DataFormatDimMapAttr { 33593 return func(m optionalAttr) { 33594 m["dst_format"] = value 33595 } 33596 } 33597 33598 // Returns the dimension index in the destination data format given the one in 33599 // 33600 // the source data format. 33601 // 33602 // Arguments: 33603 // x: A Tensor with each element as a dimension index in source data format. 33604 // Must be in the range [-4, 4). 33605 // 33606 // Returns A Tensor with each element as a dimension index in destination data format. 33607 func DataFormatDimMap(scope *Scope, x tf.Output, optional ...DataFormatDimMapAttr) (y tf.Output) { 33608 if scope.Err() != nil { 33609 return 33610 } 33611 attrs := map[string]interface{}{} 33612 for _, a := range optional { 33613 a(attrs) 33614 } 33615 opspec := tf.OpSpec{ 33616 Type: "DataFormatDimMap", 33617 Input: []tf.Input{ 33618 x, 33619 }, 33620 Attrs: attrs, 33621 } 33622 op := scope.AddOperation(opspec) 33623 return op.Output(0) 33624 } 33625 33626 // CumprodAttr is an optional argument to Cumprod. 33627 type CumprodAttr func(optionalAttr) 33628 33629 // CumprodExclusive sets the optional exclusive attribute to value. 33630 // 33631 // value: If `True`, perform exclusive cumprod. 33632 // If not specified, defaults to false 33633 func CumprodExclusive(value bool) CumprodAttr { 33634 return func(m optionalAttr) { 33635 m["exclusive"] = value 33636 } 33637 } 33638 33639 // CumprodReverse sets the optional reverse attribute to value. 33640 // 33641 // value: A `bool` (default: False). 33642 // If not specified, defaults to false 33643 func CumprodReverse(value bool) CumprodAttr { 33644 return func(m optionalAttr) { 33645 m["reverse"] = value 33646 } 33647 } 33648 33649 // Compute the cumulative product of the tensor `x` along `axis`. 33650 // 33651 // By default, this op performs an inclusive cumprod, which means that the first 33652 // element of the input is identical to the first element of the output: 33653 // 33654 // ```python 33655 // tf.cumprod([a, b, c]) # => [a, a * b, a * b * c] 33656 // ``` 33657 // 33658 // By setting the `exclusive` kwarg to `True`, an exclusive cumprod is 33659 // performed instead: 33660 // 33661 // ```python 33662 // tf.cumprod([a, b, c], exclusive=True) # => [1, a, a * b] 33663 // ``` 33664 // 33665 // By setting the `reverse` kwarg to `True`, the cumprod is performed in the 33666 // opposite direction: 33667 // 33668 // ```python 33669 // tf.cumprod([a, b, c], reverse=True) # => [a * b * c, b * c, c] 33670 // ``` 33671 // 33672 // This is more efficient than using separate `tf.reverse` ops. 33673 // 33674 // The `reverse` and `exclusive` kwargs can also be combined: 33675 // 33676 // ```python 33677 // tf.cumprod([a, b, c], exclusive=True, reverse=True) # => [b * c, c, 1] 33678 // ``` 33679 // 33680 // Arguments: 33681 // x: A `Tensor`. Must be one of the following types: `float32`, `float64`, 33682 // `int64`, `int32`, `uint8`, `uint16`, `int16`, `int8`, `complex64`, 33683 // `complex128`, `qint8`, `quint8`, `qint32`, `half`. 33684 // axis: A `Tensor` of type `int32` (default: 0). Must be in the range 33685 // `[-rank(x), rank(x))`. 33686 func Cumprod(scope *Scope, x tf.Output, axis tf.Output, optional ...CumprodAttr) (out tf.Output) { 33687 if scope.Err() != nil { 33688 return 33689 } 33690 attrs := map[string]interface{}{} 33691 for _, a := range optional { 33692 a(attrs) 33693 } 33694 opspec := tf.OpSpec{ 33695 Type: "Cumprod", 33696 Input: []tf.Input{ 33697 x, axis, 33698 }, 33699 Attrs: attrs, 33700 } 33701 op := scope.AddOperation(opspec) 33702 return op.Output(0) 33703 } 33704 33705 // RetrieveTPUEmbeddingStochasticGradientDescentParametersAttr is an optional argument to RetrieveTPUEmbeddingStochasticGradientDescentParameters. 33706 type RetrieveTPUEmbeddingStochasticGradientDescentParametersAttr func(optionalAttr) 33707 33708 // RetrieveTPUEmbeddingStochasticGradientDescentParametersTableId sets the optional table_id attribute to value. 33709 // If not specified, defaults to -1 33710 // 33711 // REQUIRES: value >= -1 33712 func RetrieveTPUEmbeddingStochasticGradientDescentParametersTableId(value int64) RetrieveTPUEmbeddingStochasticGradientDescentParametersAttr { 33713 return func(m optionalAttr) { 33714 m["table_id"] = value 33715 } 33716 } 33717 33718 // RetrieveTPUEmbeddingStochasticGradientDescentParametersTableName sets the optional table_name attribute to value. 33719 // If not specified, defaults to "" 33720 func RetrieveTPUEmbeddingStochasticGradientDescentParametersTableName(value string) RetrieveTPUEmbeddingStochasticGradientDescentParametersAttr { 33721 return func(m optionalAttr) { 33722 m["table_name"] = value 33723 } 33724 } 33725 33726 // Retrieve SGD embedding parameters. 33727 // 33728 // An op that retrieves optimization parameters from embedding to host 33729 // memory. Must be preceded by a ConfigureTPUEmbeddingHost op that sets up 33730 // the correct embedding table configuration. For example, this op is 33731 // used to retrieve updated parameters before saving a checkpoint. 33732 // 33733 // Returns Parameter parameters updated by the stochastic gradient descent optimization algorithm. 33734 func RetrieveTPUEmbeddingStochasticGradientDescentParameters(scope *Scope, num_shards int64, shard_id int64, optional ...RetrieveTPUEmbeddingStochasticGradientDescentParametersAttr) (parameters tf.Output) { 33735 if scope.Err() != nil { 33736 return 33737 } 33738 attrs := map[string]interface{}{"num_shards": num_shards, "shard_id": shard_id} 33739 for _, a := range optional { 33740 a(attrs) 33741 } 33742 opspec := tf.OpSpec{ 33743 Type: "RetrieveTPUEmbeddingStochasticGradientDescentParameters", 33744 33745 Attrs: attrs, 33746 } 33747 op := scope.AddOperation(opspec) 33748 return op.Output(0) 33749 } 33750 33751 // QuantizedMulAttr is an optional argument to QuantizedMul. 33752 type QuantizedMulAttr func(optionalAttr) 33753 33754 // QuantizedMulToutput sets the optional Toutput attribute to value. 33755 // If not specified, defaults to DT_QINT32 33756 func QuantizedMulToutput(value tf.DataType) QuantizedMulAttr { 33757 return func(m optionalAttr) { 33758 m["Toutput"] = value 33759 } 33760 } 33761 33762 // Returns x * y element-wise, working on quantized buffers. 33763 // 33764 // Arguments: 33765 // 33766 // 33767 // min_x: The float value that the lowest quantized `x` value represents. 33768 // max_x: The float value that the highest quantized `x` value represents. 33769 // min_y: The float value that the lowest quantized `y` value represents. 33770 // max_y: The float value that the highest quantized `y` value represents. 33771 // 33772 // Returns The float value that the lowest quantized output value represents.The float value that the highest quantized output value represents. 33773 // 33774 // *NOTE*: `QuantizedMul` supports limited forms of broadcasting. More about 33775 // broadcasting [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html) 33776 func QuantizedMul(scope *Scope, x tf.Output, y tf.Output, min_x tf.Output, max_x tf.Output, min_y tf.Output, max_y tf.Output, optional ...QuantizedMulAttr) (z tf.Output, min_z tf.Output, max_z tf.Output) { 33777 if scope.Err() != nil { 33778 return 33779 } 33780 attrs := map[string]interface{}{} 33781 for _, a := range optional { 33782 a(attrs) 33783 } 33784 opspec := tf.OpSpec{ 33785 Type: "QuantizedMul", 33786 Input: []tf.Input{ 33787 x, y, min_x, max_x, min_y, max_y, 33788 }, 33789 Attrs: attrs, 33790 } 33791 op := scope.AddOperation(opspec) 33792 return op.Output(0), op.Output(1), op.Output(2) 33793 } 33794 33795 // QuantizedAddAttr is an optional argument to QuantizedAdd. 33796 type QuantizedAddAttr func(optionalAttr) 33797 33798 // QuantizedAddToutput sets the optional Toutput attribute to value. 33799 // If not specified, defaults to DT_QINT32 33800 func QuantizedAddToutput(value tf.DataType) QuantizedAddAttr { 33801 return func(m optionalAttr) { 33802 m["Toutput"] = value 33803 } 33804 } 33805 33806 // Returns x + y element-wise, working on quantized buffers. 33807 // 33808 // Arguments: 33809 // 33810 // 33811 // min_x: The float value that the lowest quantized `x` value represents. 33812 // max_x: The float value that the highest quantized `x` value represents. 33813 // min_y: The float value that the lowest quantized `y` value represents. 33814 // max_y: The float value that the highest quantized `y` value represents. 33815 // 33816 // Returns The float value that the lowest quantized output value represents.The float value that the highest quantized output value represents. 33817 // 33818 // *NOTE*: `QuantizedAdd` supports limited forms of broadcasting. More about 33819 // broadcasting [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html) 33820 func QuantizedAdd(scope *Scope, x tf.Output, y tf.Output, min_x tf.Output, max_x tf.Output, min_y tf.Output, max_y tf.Output, optional ...QuantizedAddAttr) (z tf.Output, min_z tf.Output, max_z tf.Output) { 33821 if scope.Err() != nil { 33822 return 33823 } 33824 attrs := map[string]interface{}{} 33825 for _, a := range optional { 33826 a(attrs) 33827 } 33828 opspec := tf.OpSpec{ 33829 Type: "QuantizedAdd", 33830 Input: []tf.Input{ 33831 x, y, min_x, max_x, min_y, max_y, 33832 }, 33833 Attrs: attrs, 33834 } 33835 op := scope.AddOperation(opspec) 33836 return op.Output(0), op.Output(1), op.Output(2) 33837 } 33838 33839 // Scatters tensor at indices in an input list. 33840 // 33841 // Each member of the TensorList corresponds to one row of the input tensor, 33842 // specified by the given index (see `tf.gather`). 33843 // 33844 // input_handle: The list to scatter into. 33845 // tensor: The input tensor. 33846 // indices: The indices used to index into the list. 33847 // output_handle: The TensorList. 33848 func TensorListScatterIntoExistingList(scope *Scope, input_handle tf.Output, tensor tf.Output, indices tf.Output) (output_handle tf.Output) { 33849 if scope.Err() != nil { 33850 return 33851 } 33852 opspec := tf.OpSpec{ 33853 Type: "TensorListScatterIntoExistingList", 33854 Input: []tf.Input{ 33855 input_handle, tensor, indices, 33856 }, 33857 } 33858 op := scope.AddOperation(opspec) 33859 return op.Output(0) 33860 } 33861 33862 // Computes a range that covers the actual values present in a quantized tensor. 33863 // 33864 // Given a quantized tensor described by `(input, input_min, input_max)`, outputs a 33865 // range that covers the actual values present in that tensor. This op is typically 33866 // used to produce the `requested_output_min` and `requested_output_max` for 33867 // `Requantize`. 33868 // 33869 // Arguments: 33870 // 33871 // input_min: The float value that the minimum quantized input value represents. 33872 // input_max: The float value that the maximum quantized input value represents. 33873 // 33874 // Returns The computed min output.the computed max output. 33875 func RequantizationRange(scope *Scope, input tf.Output, input_min tf.Output, input_max tf.Output) (output_min tf.Output, output_max tf.Output) { 33876 if scope.Err() != nil { 33877 return 33878 } 33879 opspec := tf.OpSpec{ 33880 Type: "RequantizationRange", 33881 Input: []tf.Input{ 33882 input, input_min, input_max, 33883 }, 33884 } 33885 op := scope.AddOperation(opspec) 33886 return op.Output(0), op.Output(1) 33887 } 33888 33889 // Rolls the elements of a tensor along an axis. 33890 // 33891 // The elements are shifted positively (towards larger indices) by the offset of 33892 // `shift` along the dimension of `axis`. Negative `shift` values will shift 33893 // elements in the opposite direction. Elements that roll passed the last position 33894 // will wrap around to the first and vice versa. Multiple shifts along multiple 33895 // axes may be specified. 33896 // 33897 // For example: 33898 // 33899 // ``` 33900 // # 't' is [0, 1, 2, 3, 4] 33901 // roll(t, shift=2, axis=0) ==> [3, 4, 0, 1, 2] 33902 // 33903 // # shifting along multiple dimensions 33904 // # 't' is [[0, 1, 2, 3, 4], [5, 6, 7, 8, 9]] 33905 // roll(t, shift=[1, -2], axis=[0, 1]) ==> [[7, 8, 9, 5, 6], [2, 3, 4, 0, 1]] 33906 // 33907 // # shifting along the same axis multiple times 33908 // # 't' is [[0, 1, 2, 3, 4], [5, 6, 7, 8, 9]] 33909 // roll(t, shift=[2, -3], axis=[1, 1]) ==> [[1, 2, 3, 4, 0], [6, 7, 8, 9, 5]] 33910 // ``` 33911 // 33912 // Arguments: 33913 // 33914 // shift: Dimension must be 0-D or 1-D. `shift[i]` specifies the number of places by which 33915 // elements are shifted positively (towards larger indices) along the dimension 33916 // specified by `axis[i]`. Negative shifts will roll the elements in the opposite 33917 // direction. 33918 // axis: Dimension must be 0-D or 1-D. `axis[i]` specifies the dimension that the shift 33919 // `shift[i]` should occur. If the same axis is referenced more than once, the 33920 // total shift for that axis will be the sum of all the shifts that belong to that 33921 // axis. 33922 // 33923 // Returns Has the same shape and size as the input. The elements are shifted 33924 // positively (towards larger indices) by the offsets of `shift` along the 33925 // dimensions of `axis`. 33926 func Roll(scope *Scope, input tf.Output, shift tf.Output, axis tf.Output) (output tf.Output) { 33927 if scope.Err() != nil { 33928 return 33929 } 33930 opspec := tf.OpSpec{ 33931 Type: "Roll", 33932 Input: []tf.Input{ 33933 input, shift, axis, 33934 }, 33935 } 33936 op := scope.AddOperation(opspec) 33937 return op.Output(0) 33938 } 33939 33940 // Updates the table to associates keys with values. 33941 // 33942 // The tensor `keys` must be of the same type as the keys of the table. 33943 // The tensor `values` must be of the type of the table values. 33944 // 33945 // Arguments: 33946 // table_handle: Handle to the table. 33947 // keys: Any shape. Keys to look up. 33948 // values: Values to associate with keys. 33949 // 33950 // Returns the created operation. 33951 func LookupTableInsertV2(scope *Scope, table_handle tf.Output, keys tf.Output, values tf.Output) (o *tf.Operation) { 33952 if scope.Err() != nil { 33953 return 33954 } 33955 opspec := tf.OpSpec{ 33956 Type: "LookupTableInsertV2", 33957 Input: []tf.Input{ 33958 table_handle, keys, values, 33959 }, 33960 } 33961 return scope.AddOperation(opspec) 33962 } 33963 33964 // Creates a `Dataset` that includes only 1/`num_shards` of this dataset. 33965 // 33966 // Arguments: 33967 // 33968 // num_shards: An integer representing the number of shards operating in parallel. 33969 // index: An integer representing the current worker index. 33970 // 33971 // 33972 func ShardDataset(scope *Scope, input_dataset tf.Output, num_shards tf.Output, index tf.Output, output_types []tf.DataType, output_shapes []tf.Shape) (handle tf.Output) { 33973 if scope.Err() != nil { 33974 return 33975 } 33976 attrs := map[string]interface{}{"output_types": output_types, "output_shapes": output_shapes} 33977 opspec := tf.OpSpec{ 33978 Type: "ShardDataset", 33979 Input: []tf.Input{ 33980 input_dataset, num_shards, index, 33981 }, 33982 Attrs: attrs, 33983 } 33984 op := scope.AddOperation(opspec) 33985 return op.Output(0) 33986 } 33987 33988 // Creates a dataset that batches and pads `batch_size` elements from the input. 33989 // 33990 // Arguments: 33991 // 33992 // batch_size: A scalar representing the number of elements to accumulate in a 33993 // batch. 33994 // padded_shapes: A list of int64 tensors representing the desired padded shapes 33995 // of the corresponding output components. These shapes may be partially 33996 // specified, using `-1` to indicate that a particular dimension should be 33997 // padded to the maximum size of all batch elements. 33998 // padding_values: A list of scalars containing the padding value to use for 33999 // each of the outputs. 34000 // drop_remainder: A scalar representing whether the last batch should be dropped in case its size 34001 // is smaller than desired. 34002 // 34003 func PaddedBatchDatasetV2(scope *Scope, input_dataset tf.Output, batch_size tf.Output, padded_shapes []tf.Output, padding_values []tf.Output, drop_remainder tf.Output, output_shapes []tf.Shape) (handle tf.Output) { 34004 if scope.Err() != nil { 34005 return 34006 } 34007 attrs := map[string]interface{}{"output_shapes": output_shapes} 34008 opspec := tf.OpSpec{ 34009 Type: "PaddedBatchDatasetV2", 34010 Input: []tf.Input{ 34011 input_dataset, batch_size, tf.OutputList(padded_shapes), tf.OutputList(padding_values), drop_remainder, 34012 }, 34013 Attrs: attrs, 34014 } 34015 op := scope.AddOperation(opspec) 34016 return op.Output(0) 34017 } 34018 34019 // Returns element-wise smallest integer not less than x. 34020 func Ceil(scope *Scope, x tf.Output) (y tf.Output) { 34021 if scope.Err() != nil { 34022 return 34023 } 34024 opspec := tf.OpSpec{ 34025 Type: "Ceil", 34026 Input: []tf.Input{ 34027 x, 34028 }, 34029 } 34030 op := scope.AddOperation(opspec) 34031 return op.Output(0) 34032 } 34033 34034 // Computes the number of elements in the given table. 34035 // 34036 // Arguments: 34037 // table_handle: Handle to the table. 34038 // 34039 // Returns Scalar that contains number of elements in the table. 34040 func LookupTableSizeV2(scope *Scope, table_handle tf.Output) (size tf.Output) { 34041 if scope.Err() != nil { 34042 return 34043 } 34044 opspec := tf.OpSpec{ 34045 Type: "LookupTableSizeV2", 34046 Input: []tf.Input{ 34047 table_handle, 34048 }, 34049 } 34050 op := scope.AddOperation(opspec) 34051 return op.Output(0) 34052 } 34053 34054 // ResizeBilinearGradAttr is an optional argument to ResizeBilinearGrad. 34055 type ResizeBilinearGradAttr func(optionalAttr) 34056 34057 // ResizeBilinearGradAlignCorners sets the optional align_corners attribute to value. 34058 // 34059 // value: If true, the centers of the 4 corner pixels of the input and grad tensors are 34060 // aligned. Defaults to false. 34061 // If not specified, defaults to false 34062 func ResizeBilinearGradAlignCorners(value bool) ResizeBilinearGradAttr { 34063 return func(m optionalAttr) { 34064 m["align_corners"] = value 34065 } 34066 } 34067 34068 // ResizeBilinearGradHalfPixelCenters sets the optional half_pixel_centers attribute to value. 34069 // If not specified, defaults to false 34070 func ResizeBilinearGradHalfPixelCenters(value bool) ResizeBilinearGradAttr { 34071 return func(m optionalAttr) { 34072 m["half_pixel_centers"] = value 34073 } 34074 } 34075 34076 // Computes the gradient of bilinear interpolation. 34077 // 34078 // Arguments: 34079 // grads: 4-D with shape `[batch, height, width, channels]`. 34080 // original_image: 4-D with shape `[batch, orig_height, orig_width, channels]`, 34081 // The image tensor that was resized. 34082 // 34083 // Returns 4-D with shape `[batch, orig_height, orig_width, channels]`. 34084 // Gradients with respect to the input image. Input image must have been 34085 // float or double. 34086 func ResizeBilinearGrad(scope *Scope, grads tf.Output, original_image tf.Output, optional ...ResizeBilinearGradAttr) (output tf.Output) { 34087 if scope.Err() != nil { 34088 return 34089 } 34090 attrs := map[string]interface{}{} 34091 for _, a := range optional { 34092 a(attrs) 34093 } 34094 opspec := tf.OpSpec{ 34095 Type: "ResizeBilinearGrad", 34096 Input: []tf.Input{ 34097 grads, original_image, 34098 }, 34099 Attrs: attrs, 34100 } 34101 op := scope.AddOperation(opspec) 34102 return op.Output(0) 34103 } 34104 34105 // Outputs all keys and values in the table. 34106 // 34107 // Arguments: 34108 // table_handle: Handle to the table. 34109 // 34110 // 34111 // 34112 // Returns Vector of all keys present in the table.Tensor of all values in the table. Indexed in parallel with `keys`. 34113 func LookupTableExportV2(scope *Scope, table_handle tf.Output, Tkeys tf.DataType, Tvalues tf.DataType) (keys tf.Output, values tf.Output) { 34114 if scope.Err() != nil { 34115 return 34116 } 34117 attrs := map[string]interface{}{"Tkeys": Tkeys, "Tvalues": Tvalues} 34118 opspec := tf.OpSpec{ 34119 Type: "LookupTableExportV2", 34120 Input: []tf.Input{ 34121 table_handle, 34122 }, 34123 Attrs: attrs, 34124 } 34125 op := scope.AddOperation(opspec) 34126 return op.Output(0), op.Output(1) 34127 } 34128 34129 // MultiDeviceIteratorFromStringHandleAttr is an optional argument to MultiDeviceIteratorFromStringHandle. 34130 type MultiDeviceIteratorFromStringHandleAttr func(optionalAttr) 34131 34132 // MultiDeviceIteratorFromStringHandleOutputTypes sets the optional output_types attribute to value. 34133 // 34134 // value: The type list for the return values. 34135 // If not specified, defaults to <> 34136 // 34137 // REQUIRES: len(value) >= 0 34138 func MultiDeviceIteratorFromStringHandleOutputTypes(value []tf.DataType) MultiDeviceIteratorFromStringHandleAttr { 34139 return func(m optionalAttr) { 34140 m["output_types"] = value 34141 } 34142 } 34143 34144 // MultiDeviceIteratorFromStringHandleOutputShapes sets the optional output_shapes attribute to value. 34145 // 34146 // value: The list of shapes being produced. 34147 // If not specified, defaults to <> 34148 // 34149 // REQUIRES: len(value) >= 0 34150 func MultiDeviceIteratorFromStringHandleOutputShapes(value []tf.Shape) MultiDeviceIteratorFromStringHandleAttr { 34151 return func(m optionalAttr) { 34152 m["output_shapes"] = value 34153 } 34154 } 34155 34156 // Generates a MultiDeviceIterator resource from its provided string handle. 34157 // 34158 // Arguments: 34159 // string_handle: String representing the resource. 34160 // 34161 // Returns A MultiDeviceIterator resource. 34162 func MultiDeviceIteratorFromStringHandle(scope *Scope, string_handle tf.Output, optional ...MultiDeviceIteratorFromStringHandleAttr) (multi_device_iterator tf.Output) { 34163 if scope.Err() != nil { 34164 return 34165 } 34166 attrs := map[string]interface{}{} 34167 for _, a := range optional { 34168 a(attrs) 34169 } 34170 opspec := tf.OpSpec{ 34171 Type: "MultiDeviceIteratorFromStringHandle", 34172 Input: []tf.Input{ 34173 string_handle, 34174 }, 34175 Attrs: attrs, 34176 } 34177 op := scope.AddOperation(opspec) 34178 return op.Output(0) 34179 } 34180 34181 // MutableHashTableV2Attr is an optional argument to MutableHashTableV2. 34182 type MutableHashTableV2Attr func(optionalAttr) 34183 34184 // MutableHashTableV2Container sets the optional container attribute to value. 34185 // 34186 // value: If non-empty, this table is placed in the given container. 34187 // Otherwise, a default container is used. 34188 // If not specified, defaults to "" 34189 func MutableHashTableV2Container(value string) MutableHashTableV2Attr { 34190 return func(m optionalAttr) { 34191 m["container"] = value 34192 } 34193 } 34194 34195 // MutableHashTableV2SharedName sets the optional shared_name attribute to value. 34196 // 34197 // value: If non-empty, this table is shared under the given name across 34198 // multiple sessions. 34199 // If not specified, defaults to "" 34200 func MutableHashTableV2SharedName(value string) MutableHashTableV2Attr { 34201 return func(m optionalAttr) { 34202 m["shared_name"] = value 34203 } 34204 } 34205 34206 // MutableHashTableV2UseNodeNameSharing sets the optional use_node_name_sharing attribute to value. 34207 // 34208 // value: If true and shared_name is empty, the table is shared 34209 // using the node name. 34210 // If not specified, defaults to false 34211 func MutableHashTableV2UseNodeNameSharing(value bool) MutableHashTableV2Attr { 34212 return func(m optionalAttr) { 34213 m["use_node_name_sharing"] = value 34214 } 34215 } 34216 34217 // Creates an empty hash table. 34218 // 34219 // This op creates a mutable hash table, specifying the type of its keys and 34220 // values. Each value must be a scalar. Data can be inserted into the table using 34221 // the insert operations. It does not support the initialization operation. 34222 // 34223 // Arguments: 34224 // key_dtype: Type of the table keys. 34225 // value_dtype: Type of the table values. 34226 // 34227 // Returns Handle to a table. 34228 func MutableHashTableV2(scope *Scope, key_dtype tf.DataType, value_dtype tf.DataType, optional ...MutableHashTableV2Attr) (table_handle tf.Output) { 34229 if scope.Err() != nil { 34230 return 34231 } 34232 attrs := map[string]interface{}{"key_dtype": key_dtype, "value_dtype": value_dtype} 34233 for _, a := range optional { 34234 a(attrs) 34235 } 34236 opspec := tf.OpSpec{ 34237 Type: "MutableHashTableV2", 34238 34239 Attrs: attrs, 34240 } 34241 op := scope.AddOperation(opspec) 34242 return op.Output(0) 34243 } 34244 34245 // DequantizeAttr is an optional argument to Dequantize. 34246 type DequantizeAttr func(optionalAttr) 34247 34248 // DequantizeMode sets the optional mode attribute to value. 34249 // If not specified, defaults to "MIN_COMBINED" 34250 func DequantizeMode(value string) DequantizeAttr { 34251 return func(m optionalAttr) { 34252 m["mode"] = value 34253 } 34254 } 34255 34256 // Dequantize the 'input' tensor into a float Tensor. 34257 // 34258 // [min_range, max_range] are scalar floats that specify the range for 34259 // the 'input' data. The 'mode' attribute controls exactly which calculations are 34260 // used to convert the float values to their quantized equivalents. 34261 // 34262 // In 'MIN_COMBINED' mode, each value of the tensor will undergo the following: 34263 // 34264 // ``` 34265 // if T == qint8: in[i] += (range(T) + 1)/ 2.0 34266 // out[i] = min_range + (in[i]* (max_range - min_range) / range(T)) 34267 // ``` 34268 // here `range(T) = numeric_limits<T>::max() - numeric_limits<T>::min()` 34269 // 34270 // *MIN_COMBINED Mode Example* 34271 // 34272 // If the input comes from a QuantizedRelu6, the output type is 34273 // quint8 (range of 0-255) but the possible range of QuantizedRelu6 is 34274 // 0-6. The min_range and max_range values are therefore 0.0 and 6.0. 34275 // Dequantize on quint8 will take each value, cast to float, and multiply 34276 // by 6 / 255. 34277 // Note that if quantizedtype is qint8, the operation will additionally add 34278 // each value by 128 prior to casting. 34279 // 34280 // If the mode is 'MIN_FIRST', then this approach is used: 34281 // 34282 // ```c++ 34283 // num_discrete_values = 1 << (# of bits in T) 34284 // range_adjust = num_discrete_values / (num_discrete_values - 1) 34285 // range = (range_max - range_min) * range_adjust 34286 // range_scale = range / num_discrete_values 34287 // const double offset_input = static_cast<double>(input) - lowest_quantized; 34288 // result = range_min + ((input - numeric_limits<T>::min()) * range_scale) 34289 // ``` 34290 // 34291 // *SCALED mode Example* 34292 // 34293 // `SCALED` mode matches the quantization approach used in 34294 // `QuantizeAndDequantize{V2|V3}`. 34295 // 34296 // If the mode is `SCALED`, we do not use the full range of the output type, 34297 // choosing to elide the lowest possible value for symmetry (e.g., output range is 34298 // -127 to 127, not -128 to 127 for signed 8 bit quantization), so that 0.0 maps to 34299 // 0. 34300 // 34301 // We first find the range of values in our tensor. The 34302 // range we use is always centered on 0, so we find m such that 34303 // ```c++ 34304 // m = max(abs(input_min), abs(input_max)) 34305 // ``` 34306 // 34307 // Our input tensor range is then `[-m, m]`. 34308 // 34309 // Next, we choose our fixed-point quantization buckets, `[min_fixed, max_fixed]`. 34310 // If T is signed, this is 34311 // ``` 34312 // num_bits = sizeof(T) * 8 34313 // [min_fixed, max_fixed] = 34314 // [-(1 << (num_bits - 1) - 1), (1 << (num_bits - 1)) - 1] 34315 // ``` 34316 // 34317 // Otherwise, if T is unsigned, the fixed-point range is 34318 // ``` 34319 // [min_fixed, max_fixed] = [0, (1 << num_bits) - 1] 34320 // ``` 34321 // 34322 // From this we compute our scaling factor, s: 34323 // ```c++ 34324 // s = (2 * m) / (max_fixed - min_fixed) 34325 // ``` 34326 // 34327 // Now we can dequantize the elements of our tensor: 34328 // ```c++ 34329 // result = input * s 34330 // ``` 34331 // 34332 // Arguments: 34333 // 34334 // min_range: The minimum scalar value possibly produced for the input. 34335 // max_range: The maximum scalar value possibly produced for the input. 34336 func Dequantize(scope *Scope, input tf.Output, min_range tf.Output, max_range tf.Output, optional ...DequantizeAttr) (output tf.Output) { 34337 if scope.Err() != nil { 34338 return 34339 } 34340 attrs := map[string]interface{}{} 34341 for _, a := range optional { 34342 a(attrs) 34343 } 34344 opspec := tf.OpSpec{ 34345 Type: "Dequantize", 34346 Input: []tf.Input{ 34347 input, min_range, max_range, 34348 }, 34349 Attrs: attrs, 34350 } 34351 op := scope.AddOperation(opspec) 34352 return op.Output(0) 34353 } 34354 34355 // Flips all bits elementwise. 34356 // 34357 // The result will have exactly those bits set, that are not set in `x`. The 34358 // computation is performed on the underlying representation of x. 34359 func Invert(scope *Scope, x tf.Output) (y tf.Output) { 34360 if scope.Err() != nil { 34361 return 34362 } 34363 opspec := tf.OpSpec{ 34364 Type: "Invert", 34365 Input: []tf.Input{ 34366 x, 34367 }, 34368 } 34369 op := scope.AddOperation(opspec) 34370 return op.Output(0) 34371 } 34372 34373 // Deserialize bucket boundaries and ready flag into current QuantileAccumulator. 34374 // 34375 // An op that deserializes bucket boundaries and are boundaries ready flag into current QuantileAccumulator. 34376 // 34377 // Arguments: 34378 // quantile_stream_resource_handle: resource handle referring to a QuantileStreamResource. 34379 // bucket_boundaries: float; List of Rank 1 Tensors each containing the bucket boundaries for a feature. 34380 // 34381 // Returns the created operation. 34382 func BoostedTreesQuantileStreamResourceDeserialize(scope *Scope, quantile_stream_resource_handle tf.Output, bucket_boundaries []tf.Output) (o *tf.Operation) { 34383 if scope.Err() != nil { 34384 return 34385 } 34386 opspec := tf.OpSpec{ 34387 Type: "BoostedTreesQuantileStreamResourceDeserialize", 34388 Input: []tf.Input{ 34389 quantile_stream_resource_handle, tf.OutputList(bucket_boundaries), 34390 }, 34391 } 34392 return scope.AddOperation(opspec) 34393 } 34394 34395 // Inverse 3D fast Fourier transform. 34396 // 34397 // Computes the inverse 3-dimensional discrete Fourier transform over the 34398 // inner-most 3 dimensions of `input`. 34399 // 34400 // Arguments: 34401 // input: A complex64 tensor. 34402 // 34403 // Returns A complex64 tensor of the same shape as `input`. The inner-most 3 34404 // dimensions of `input` are replaced with their inverse 3D Fourier transform. 34405 // 34406 // @compatibility(numpy) 34407 // Equivalent to np.fft.ifftn with 3 dimensions. 34408 // @end_compatibility 34409 func IFFT3D(scope *Scope, input tf.Output) (output tf.Output) { 34410 if scope.Err() != nil { 34411 return 34412 } 34413 opspec := tf.OpSpec{ 34414 Type: "IFFT3D", 34415 Input: []tf.Input{ 34416 input, 34417 }, 34418 } 34419 op := scope.AddOperation(opspec) 34420 return op.Output(0) 34421 } 34422 34423 // Shuts down a running distributed TPU system. 34424 // 34425 // The op returns an error if no system is running. 34426 // 34427 // Returns the created operation. 34428 func ShutdownDistributedTPU(scope *Scope) (o *tf.Operation) { 34429 if scope.Err() != nil { 34430 return 34431 } 34432 opspec := tf.OpSpec{ 34433 Type: "ShutdownDistributedTPU", 34434 } 34435 return scope.AddOperation(opspec) 34436 } 34437 34438 // Deprecated. Disallowed in GraphDef version >= 2. 34439 // 34440 // DEPRECATED at GraphDef version 2: Use AdjustContrastv2 instead 34441 func AdjustContrast(scope *Scope, images tf.Output, contrast_factor tf.Output, min_value tf.Output, max_value tf.Output) (output tf.Output) { 34442 if scope.Err() != nil { 34443 return 34444 } 34445 opspec := tf.OpSpec{ 34446 Type: "AdjustContrast", 34447 Input: []tf.Input{ 34448 images, contrast_factor, min_value, max_value, 34449 }, 34450 } 34451 op := scope.AddOperation(opspec) 34452 return op.Output(0) 34453 } 34454 34455 // Table initializer that takes two tensors for keys and values respectively. 34456 // 34457 // Arguments: 34458 // table_handle: Handle to a table which will be initialized. 34459 // keys: Keys of type Tkey. 34460 // values: Values of type Tval. 34461 // 34462 // Returns the created operation. 34463 func InitializeTableV2(scope *Scope, table_handle tf.Output, keys tf.Output, values tf.Output) (o *tf.Operation) { 34464 if scope.Err() != nil { 34465 return 34466 } 34467 opspec := tf.OpSpec{ 34468 Type: "InitializeTableV2", 34469 Input: []tf.Input{ 34470 table_handle, keys, values, 34471 }, 34472 } 34473 return scope.AddOperation(opspec) 34474 } 34475 34476 // PrintAttr is an optional argument to Print. 34477 type PrintAttr func(optionalAttr) 34478 34479 // PrintMessage sets the optional message attribute to value. 34480 // 34481 // value: A string, prefix of the error message. 34482 // If not specified, defaults to "" 34483 func PrintMessage(value string) PrintAttr { 34484 return func(m optionalAttr) { 34485 m["message"] = value 34486 } 34487 } 34488 34489 // PrintFirstN sets the optional first_n attribute to value. 34490 // 34491 // value: Only log `first_n` number of times. -1 disables logging. 34492 // If not specified, defaults to -1 34493 func PrintFirstN(value int64) PrintAttr { 34494 return func(m optionalAttr) { 34495 m["first_n"] = value 34496 } 34497 } 34498 34499 // PrintSummarize sets the optional summarize attribute to value. 34500 // 34501 // value: Only print this many entries of each tensor. 34502 // If not specified, defaults to 3 34503 func PrintSummarize(value int64) PrintAttr { 34504 return func(m optionalAttr) { 34505 m["summarize"] = value 34506 } 34507 } 34508 34509 // Prints a list of tensors. 34510 // 34511 // Passes `input` through to `output` and prints `data` when evaluating. 34512 // 34513 // Arguments: 34514 // input: The tensor passed to `output` 34515 // data: A list of tensors to print out when op is evaluated. 34516 // 34517 // Returns = The unmodified `input` tensor 34518 func Print(scope *Scope, input tf.Output, data []tf.Output, optional ...PrintAttr) (output tf.Output) { 34519 if scope.Err() != nil { 34520 return 34521 } 34522 attrs := map[string]interface{}{} 34523 for _, a := range optional { 34524 a(attrs) 34525 } 34526 opspec := tf.OpSpec{ 34527 Type: "Print", 34528 Input: []tf.Input{ 34529 input, tf.OutputList(data), 34530 }, 34531 Attrs: attrs, 34532 } 34533 op := scope.AddOperation(opspec) 34534 return op.Output(0) 34535 } 34536 34537 // Outputs a `Summary` protocol buffer with a tensor and per-plugin data. 34538 // 34539 // Arguments: 34540 // tag: A string attached to this summary. Used for organization in TensorBoard. 34541 // tensor: A tensor to serialize. 34542 // serialized_summary_metadata: A serialized SummaryMetadata proto. Contains plugin 34543 // data. 34544 func TensorSummaryV2(scope *Scope, tag tf.Output, tensor tf.Output, serialized_summary_metadata tf.Output) (summary tf.Output) { 34545 if scope.Err() != nil { 34546 return 34547 } 34548 opspec := tf.OpSpec{ 34549 Type: "TensorSummaryV2", 34550 Input: []tf.Input{ 34551 tag, tensor, serialized_summary_metadata, 34552 }, 34553 } 34554 op := scope.AddOperation(opspec) 34555 return op.Output(0) 34556 } 34557 34558 // Creates a dataset that asynchronously prefetches elements from `input_dataset`. 34559 // 34560 // Arguments: 34561 // 34562 // buffer_size: The maximum number of elements to buffer in an iterator over 34563 // this dataset. 34564 // 34565 // 34566 func PrefetchDataset(scope *Scope, input_dataset tf.Output, buffer_size tf.Output, output_types []tf.DataType, output_shapes []tf.Shape) (handle tf.Output) { 34567 if scope.Err() != nil { 34568 return 34569 } 34570 attrs := map[string]interface{}{"output_types": output_types, "output_shapes": output_shapes} 34571 opspec := tf.OpSpec{ 34572 Type: "PrefetchDataset", 34573 Input: []tf.Input{ 34574 input_dataset, buffer_size, 34575 }, 34576 Attrs: attrs, 34577 } 34578 op := scope.AddOperation(opspec) 34579 return op.Output(0) 34580 } 34581 34582 // TensorSummaryAttr is an optional argument to TensorSummary. 34583 type TensorSummaryAttr func(optionalAttr) 34584 34585 // TensorSummaryDescription sets the optional description attribute to value. 34586 // 34587 // value: A json-encoded SummaryDescription proto. 34588 // If not specified, defaults to "" 34589 func TensorSummaryDescription(value string) TensorSummaryAttr { 34590 return func(m optionalAttr) { 34591 m["description"] = value 34592 } 34593 } 34594 34595 // TensorSummaryLabels sets the optional labels attribute to value. 34596 // 34597 // value: An unused list of strings. 34598 // If not specified, defaults to <> 34599 func TensorSummaryLabels(value []string) TensorSummaryAttr { 34600 return func(m optionalAttr) { 34601 m["labels"] = value 34602 } 34603 } 34604 34605 // TensorSummaryDisplayName sets the optional display_name attribute to value. 34606 // 34607 // value: An unused string. 34608 // If not specified, defaults to "" 34609 func TensorSummaryDisplayName(value string) TensorSummaryAttr { 34610 return func(m optionalAttr) { 34611 m["display_name"] = value 34612 } 34613 } 34614 34615 // Outputs a `Summary` protocol buffer with a tensor. 34616 // 34617 // This op is being phased out in favor of TensorSummaryV2, which lets callers pass 34618 // a tag as well as a serialized SummaryMetadata proto string that contains 34619 // plugin-specific data. We will keep this op to maintain backwards compatibility. 34620 // 34621 // Arguments: 34622 // tensor: A tensor to serialize. 34623 func TensorSummary(scope *Scope, tensor tf.Output, optional ...TensorSummaryAttr) (summary tf.Output) { 34624 if scope.Err() != nil { 34625 return 34626 } 34627 attrs := map[string]interface{}{} 34628 for _, a := range optional { 34629 a(attrs) 34630 } 34631 opspec := tf.OpSpec{ 34632 Type: "TensorSummary", 34633 Input: []tf.Input{ 34634 tensor, 34635 }, 34636 Attrs: attrs, 34637 } 34638 op := scope.AddOperation(opspec) 34639 return op.Output(0) 34640 } 34641 34642 // Read an element from the TensorArray into output `value`. 34643 // 34644 // Arguments: 34645 // handle: The handle to a TensorArray. 34646 // 34647 // flow_in: A float scalar that enforces proper chaining of operations. 34648 // dtype: The type of the elem that is returned. 34649 // 34650 // Returns The tensor that is read from the TensorArray. 34651 func TensorArrayReadV3(scope *Scope, handle tf.Output, index tf.Output, flow_in tf.Output, dtype tf.DataType) (value tf.Output) { 34652 if scope.Err() != nil { 34653 return 34654 } 34655 attrs := map[string]interface{}{"dtype": dtype} 34656 opspec := tf.OpSpec{ 34657 Type: "TensorArrayReadV3", 34658 Input: []tf.Input{ 34659 handle, index, flow_in, 34660 }, 34661 Attrs: attrs, 34662 } 34663 op := scope.AddOperation(opspec) 34664 return op.Output(0) 34665 } 34666 34667 // Reduces sparse updates into the variable referenced by `resource` using the `max` operation. 34668 // 34669 // This operation computes 34670 // 34671 // # Scalar indices 34672 // ref[indices, ...] = max(ref[indices, ...], updates[...]) 34673 // 34674 // # Vector indices (for each i) 34675 // ref[indices[i], ...] = max(ref[indices[i], ...], updates[i, ...]) 34676 // 34677 // # High rank indices (for each i, ..., j) 34678 // ref[indices[i, ..., j], ...] = max(ref[indices[i, ..., j], ...], updates[i, ..., j, ...]) 34679 // 34680 // Duplicate entries are handled correctly: if multiple `indices` reference 34681 // the same location, their contributions are combined. 34682 // 34683 // Requires `updates.shape = indices.shape + ref.shape[1:]` or `updates.shape = []`. 34684 // 34685 // <div style="width:70%; margin:auto; margin-bottom:10px; margin-top:20px;"> 34686 // <img style="width:100%" src='https://www.tensorflow.org/images/ScatterAdd.png' alt> 34687 // </div> 34688 // 34689 // Arguments: 34690 // resource: Should be from a `Variable` node. 34691 // indices: A tensor of indices into the first dimension of `ref`. 34692 // updates: A tensor of updated values to add to `ref`. 34693 // 34694 // Returns the created operation. 34695 func ResourceScatterMax(scope *Scope, resource tf.Output, indices tf.Output, updates tf.Output) (o *tf.Operation) { 34696 if scope.Err() != nil { 34697 return 34698 } 34699 opspec := tf.OpSpec{ 34700 Type: "ResourceScatterMax", 34701 Input: []tf.Input{ 34702 resource, indices, updates, 34703 }, 34704 } 34705 return scope.AddOperation(opspec) 34706 } 34707 34708 // Computes the gradient for the tanh of `x` wrt its input. 34709 // 34710 // Specifically, `grad = dy * (1 - y*y)`, where `y = tanh(x)`, and `dy` 34711 // is the corresponding input gradient. 34712 func TanhGrad(scope *Scope, y tf.Output, dy tf.Output) (z tf.Output) { 34713 if scope.Err() != nil { 34714 return 34715 } 34716 opspec := tf.OpSpec{ 34717 Type: "TanhGrad", 34718 Input: []tf.Input{ 34719 y, dy, 34720 }, 34721 } 34722 op := scope.AddOperation(opspec) 34723 return op.Output(0) 34724 } 34725 34726 // Outputs a `Summary` protocol buffer with scalar values. 34727 // 34728 // The input `tags` and `values` must have the same shape. The generated summary 34729 // has a summary value for each tag-value pair in `tags` and `values`. 34730 // 34731 // Arguments: 34732 // tags: Tags for the summary. 34733 // values: Same shape as `tags. Values for the summary. 34734 // 34735 // Returns Scalar. Serialized `Summary` protocol buffer. 34736 func ScalarSummary(scope *Scope, tags tf.Output, values tf.Output) (summary tf.Output) { 34737 if scope.Err() != nil { 34738 return 34739 } 34740 opspec := tf.OpSpec{ 34741 Type: "ScalarSummary", 34742 Input: []tf.Input{ 34743 tags, values, 34744 }, 34745 } 34746 op := scope.AddOperation(opspec) 34747 return op.Output(0) 34748 } 34749 34750 // ImageSummaryAttr is an optional argument to ImageSummary. 34751 type ImageSummaryAttr func(optionalAttr) 34752 34753 // ImageSummaryMaxImages sets the optional max_images attribute to value. 34754 // 34755 // value: Max number of batch elements to generate images for. 34756 // If not specified, defaults to 3 34757 // 34758 // REQUIRES: value >= 1 34759 func ImageSummaryMaxImages(value int64) ImageSummaryAttr { 34760 return func(m optionalAttr) { 34761 m["max_images"] = value 34762 } 34763 } 34764 34765 // ImageSummaryBadColor sets the optional bad_color attribute to value. 34766 // 34767 // value: Color to use for pixels with non-finite values. 34768 // If not specified, defaults to <dtype:DT_UINT8 tensor_shape:<dim:<size:4 > > int_val:255 int_val:0 int_val:0 int_val:255 > 34769 func ImageSummaryBadColor(value tf.Tensor) ImageSummaryAttr { 34770 return func(m optionalAttr) { 34771 m["bad_color"] = value 34772 } 34773 } 34774 34775 // Outputs a `Summary` protocol buffer with images. 34776 // 34777 // The summary has up to `max_images` summary values containing images. The 34778 // images are built from `tensor` which must be 4-D with shape `[batch_size, 34779 // height, width, channels]` and where `channels` can be: 34780 // 34781 // * 1: `tensor` is interpreted as Grayscale. 34782 // * 3: `tensor` is interpreted as RGB. 34783 // * 4: `tensor` is interpreted as RGBA. 34784 // 34785 // The images have the same number of channels as the input tensor. For float 34786 // input, the values are normalized one image at a time to fit in the range 34787 // `[0, 255]`. `uint8` values are unchanged. The op uses two different 34788 // normalization algorithms: 34789 // 34790 // * If the input values are all positive, they are rescaled so the largest one 34791 // is 255. 34792 // 34793 // * If any input value is negative, the values are shifted so input value 0.0 34794 // is at 127. They are then rescaled so that either the smallest value is 0, 34795 // or the largest one is 255. 34796 // 34797 // The `tag` argument is a scalar `Tensor` of type `string`. It is used to 34798 // build the `tag` of the summary values: 34799 // 34800 // * If `max_images` is 1, the summary value tag is '*tag*/image'. 34801 // * If `max_images` is greater than 1, the summary value tags are 34802 // generated sequentially as '*tag*/image/0', '*tag*/image/1', etc. 34803 // 34804 // The `bad_color` argument is the color to use in the generated images for 34805 // non-finite input values. It is a `uint8` 1-D tensor of length `channels`. 34806 // Each element must be in the range `[0, 255]` (It represents the value of a 34807 // pixel in the output image). Non-finite values in the input tensor are 34808 // replaced by this tensor in the output image. The default value is the color 34809 // red. 34810 // 34811 // Arguments: 34812 // tag: Scalar. Used to build the `tag` attribute of the summary values. 34813 // tensor: 4-D of shape `[batch_size, height, width, channels]` where 34814 // `channels` is 1, 3, or 4. 34815 // 34816 // Returns Scalar. Serialized `Summary` protocol buffer. 34817 func ImageSummary(scope *Scope, tag tf.Output, tensor tf.Output, optional ...ImageSummaryAttr) (summary tf.Output) { 34818 if scope.Err() != nil { 34819 return 34820 } 34821 attrs := map[string]interface{}{} 34822 for _, a := range optional { 34823 a(attrs) 34824 } 34825 opspec := tf.OpSpec{ 34826 Type: "ImageSummary", 34827 Input: []tf.Input{ 34828 tag, tensor, 34829 }, 34830 Attrs: attrs, 34831 } 34832 op := scope.AddOperation(opspec) 34833 return op.Output(0) 34834 } 34835 34836 // AudioSummaryV2Attr is an optional argument to AudioSummaryV2. 34837 type AudioSummaryV2Attr func(optionalAttr) 34838 34839 // AudioSummaryV2MaxOutputs sets the optional max_outputs attribute to value. 34840 // 34841 // value: Max number of batch elements to generate audio for. 34842 // If not specified, defaults to 3 34843 // 34844 // REQUIRES: value >= 1 34845 func AudioSummaryV2MaxOutputs(value int64) AudioSummaryV2Attr { 34846 return func(m optionalAttr) { 34847 m["max_outputs"] = value 34848 } 34849 } 34850 34851 // Outputs a `Summary` protocol buffer with audio. 34852 // 34853 // The summary has up to `max_outputs` summary values containing audio. The 34854 // audio is built from `tensor` which must be 3-D with shape `[batch_size, 34855 // frames, channels]` or 2-D with shape `[batch_size, frames]`. The values are 34856 // assumed to be in the range of `[-1.0, 1.0]` with a sample rate of `sample_rate`. 34857 // 34858 // The `tag` argument is a scalar `Tensor` of type `string`. It is used to 34859 // build the `tag` of the summary values: 34860 // 34861 // * If `max_outputs` is 1, the summary value tag is '*tag*/audio'. 34862 // * If `max_outputs` is greater than 1, the summary value tags are 34863 // generated sequentially as '*tag*/audio/0', '*tag*/audio/1', etc. 34864 // 34865 // Arguments: 34866 // tag: Scalar. Used to build the `tag` attribute of the summary values. 34867 // tensor: 2-D of shape `[batch_size, frames]`. 34868 // sample_rate: The sample rate of the signal in hertz. 34869 // 34870 // Returns Scalar. Serialized `Summary` protocol buffer. 34871 func AudioSummaryV2(scope *Scope, tag tf.Output, tensor tf.Output, sample_rate tf.Output, optional ...AudioSummaryV2Attr) (summary tf.Output) { 34872 if scope.Err() != nil { 34873 return 34874 } 34875 attrs := map[string]interface{}{} 34876 for _, a := range optional { 34877 a(attrs) 34878 } 34879 opspec := tf.OpSpec{ 34880 Type: "AudioSummaryV2", 34881 Input: []tf.Input{ 34882 tag, tensor, sample_rate, 34883 }, 34884 Attrs: attrs, 34885 } 34886 op := scope.AddOperation(opspec) 34887 return op.Output(0) 34888 } 34889 34890 // Splits a tensor into a list. 34891 // 34892 // list[i] corresponds to lengths[i] tensors from the input tensor. 34893 // The tensor must have rank at least 1 and contain exactly sum(lengths) elements. 34894 // 34895 // tensor: The input tensor. 34896 // element_shape: A shape compatible with that of elements in the tensor. 34897 // lengths: Vector of sizes of the 0th dimension of tensors in the list. 34898 // output_handle: The list. 34899 func TensorListSplit(scope *Scope, tensor tf.Output, element_shape tf.Output, lengths tf.Output) (output_handle tf.Output) { 34900 if scope.Err() != nil { 34901 return 34902 } 34903 opspec := tf.OpSpec{ 34904 Type: "TensorListSplit", 34905 Input: []tf.Input{ 34906 tensor, element_shape, lengths, 34907 }, 34908 } 34909 op := scope.AddOperation(opspec) 34910 return op.Output(0) 34911 } 34912 34913 // AvgPoolAttr is an optional argument to AvgPool. 34914 type AvgPoolAttr func(optionalAttr) 34915 34916 // AvgPoolDataFormat sets the optional data_format attribute to value. 34917 // 34918 // value: Specify the data format of the input and output data. With the 34919 // default format "NHWC", the data is stored in the order of: 34920 // [batch, in_height, in_width, in_channels]. 34921 // Alternatively, the format could be "NCHW", the data storage order of: 34922 // [batch, in_channels, in_height, in_width]. 34923 // If not specified, defaults to "NHWC" 34924 func AvgPoolDataFormat(value string) AvgPoolAttr { 34925 return func(m optionalAttr) { 34926 m["data_format"] = value 34927 } 34928 } 34929 34930 // Performs average pooling on the input. 34931 // 34932 // Each entry in `output` is the mean of the corresponding size `ksize` 34933 // window in `value`. 34934 // 34935 // Arguments: 34936 // value: 4-D with shape `[batch, height, width, channels]`. 34937 // ksize: The size of the sliding window for each dimension of `value`. 34938 // strides: The stride of the sliding window for each dimension of `value`. 34939 // padding: The type of padding algorithm to use. 34940 // 34941 // Returns The average pooled output tensor. 34942 func AvgPool(scope *Scope, value tf.Output, ksize []int64, strides []int64, padding string, optional ...AvgPoolAttr) (output tf.Output) { 34943 if scope.Err() != nil { 34944 return 34945 } 34946 attrs := map[string]interface{}{"ksize": ksize, "strides": strides, "padding": padding} 34947 for _, a := range optional { 34948 a(attrs) 34949 } 34950 opspec := tf.OpSpec{ 34951 Type: "AvgPool", 34952 Input: []tf.Input{ 34953 value, 34954 }, 34955 Attrs: attrs, 34956 } 34957 op := scope.AddOperation(opspec) 34958 return op.Output(0) 34959 } 34960 34961 // Merges summaries. 34962 // 34963 // This op creates a 34964 // [`Summary`](https://www.tensorflow.org/code/tensorflow/core/framework/summary.proto) 34965 // protocol buffer that contains the union of all the values in the input 34966 // summaries. 34967 // 34968 // When the Op is run, it reports an `InvalidArgument` error if multiple values 34969 // in the summaries to merge use the same tag. 34970 // 34971 // Arguments: 34972 // inputs: Can be of any shape. Each must contain serialized `Summary` protocol 34973 // buffers. 34974 // 34975 // Returns Scalar. Serialized `Summary` protocol buffer. 34976 func MergeSummary(scope *Scope, inputs []tf.Output) (summary tf.Output) { 34977 if scope.Err() != nil { 34978 return 34979 } 34980 opspec := tf.OpSpec{ 34981 Type: "MergeSummary", 34982 Input: []tf.Input{ 34983 tf.OutputList(inputs), 34984 }, 34985 } 34986 op := scope.AddOperation(opspec) 34987 return op.Output(0) 34988 } 34989 34990 // The shape of the elements of the given list, as a tensor. 34991 // 34992 // input_handle: the list 34993 // element_shape: the shape of elements of the list 34994 func TensorListElementShape(scope *Scope, input_handle tf.Output, shape_type tf.DataType) (element_shape tf.Output) { 34995 if scope.Err() != nil { 34996 return 34997 } 34998 attrs := map[string]interface{}{"shape_type": shape_type} 34999 opspec := tf.OpSpec{ 35000 Type: "TensorListElementShape", 35001 Input: []tf.Input{ 35002 input_handle, 35003 }, 35004 Attrs: attrs, 35005 } 35006 op := scope.AddOperation(opspec) 35007 return op.Output(0) 35008 } 35009 35010 // Returns the item in the list with the given index. 35011 // 35012 // input_handle: the list 35013 // index: the position in the list from which an element will be retrieved 35014 // item: the element at that position 35015 // 35016 // 35017 func TensorListGetItem(scope *Scope, input_handle tf.Output, index tf.Output, element_shape tf.Output, element_dtype tf.DataType) (item tf.Output) { 35018 if scope.Err() != nil { 35019 return 35020 } 35021 attrs := map[string]interface{}{"element_dtype": element_dtype} 35022 opspec := tf.OpSpec{ 35023 Type: "TensorListGetItem", 35024 Input: []tf.Input{ 35025 input_handle, index, element_shape, 35026 }, 35027 Attrs: attrs, 35028 } 35029 op := scope.AddOperation(opspec) 35030 return op.Output(0) 35031 } 35032 35033 // Resizes the list. 35034 // 35035 // 35036 // input_handle: the input list 35037 // size: size of the output list 35038 // 35039 func TensorListResize(scope *Scope, input_handle tf.Output, size tf.Output) (output_handle tf.Output) { 35040 if scope.Err() != nil { 35041 return 35042 } 35043 opspec := tf.OpSpec{ 35044 Type: "TensorListResize", 35045 Input: []tf.Input{ 35046 input_handle, size, 35047 }, 35048 } 35049 op := scope.AddOperation(opspec) 35050 return op.Output(0) 35051 } 35052 35053 // Returns a diagonal tensor with a given diagonal values. 35054 // 35055 // Given a `diagonal`, this operation returns a tensor with the `diagonal` and 35056 // everything else padded with zeros. The diagonal is computed as follows: 35057 // 35058 // Assume `diagonal` has dimensions [D1,..., Dk], then the output is a tensor of 35059 // rank 2k with dimensions [D1,..., Dk, D1,..., Dk] where: 35060 // 35061 // `output[i1,..., ik, i1,..., ik] = diagonal[i1, ..., ik]` and 0 everywhere else. 35062 // 35063 // For example: 35064 // 35065 // ``` 35066 // # 'diagonal' is [1, 2, 3, 4] 35067 // tf.diag(diagonal) ==> [[1, 0, 0, 0] 35068 // [0, 2, 0, 0] 35069 // [0, 0, 3, 0] 35070 // [0, 0, 0, 4]] 35071 // ``` 35072 // 35073 // Arguments: 35074 // diagonal: Rank k tensor where k is at most 1. 35075 func Diag(scope *Scope, diagonal tf.Output) (output tf.Output) { 35076 if scope.Err() != nil { 35077 return 35078 } 35079 opspec := tf.OpSpec{ 35080 Type: "Diag", 35081 Input: []tf.Input{ 35082 diagonal, 35083 }, 35084 } 35085 op := scope.AddOperation(opspec) 35086 return op.Output(0) 35087 } 35088 35089 // ParameterizedTruncatedNormalAttr is an optional argument to ParameterizedTruncatedNormal. 35090 type ParameterizedTruncatedNormalAttr func(optionalAttr) 35091 35092 // ParameterizedTruncatedNormalSeed sets the optional seed attribute to value. 35093 // 35094 // value: If either `seed` or `seed2` are set to be non-zero, the random number 35095 // generator is seeded by the given seed. Otherwise, it is seeded by a 35096 // random seed. 35097 // If not specified, defaults to 0 35098 func ParameterizedTruncatedNormalSeed(value int64) ParameterizedTruncatedNormalAttr { 35099 return func(m optionalAttr) { 35100 m["seed"] = value 35101 } 35102 } 35103 35104 // ParameterizedTruncatedNormalSeed2 sets the optional seed2 attribute to value. 35105 // 35106 // value: A second seed to avoid seed collision. 35107 // If not specified, defaults to 0 35108 func ParameterizedTruncatedNormalSeed2(value int64) ParameterizedTruncatedNormalAttr { 35109 return func(m optionalAttr) { 35110 m["seed2"] = value 35111 } 35112 } 35113 35114 // Outputs random values from a normal distribution. The parameters may each be a 35115 // 35116 // scalar which applies to the entire output, or a vector of length shape[0] which 35117 // stores the parameters for each batch. 35118 // 35119 // Arguments: 35120 // shape: The shape of the output tensor. Batches are indexed by the 0th dimension. 35121 // means: The mean parameter of each batch. 35122 // stdevs: The standard deviation parameter of each batch. Must be greater than 0. 35123 // minvals: The minimum cutoff. May be -infinity. 35124 // maxvals: The maximum cutoff. May be +infinity, and must be more than the minval 35125 // for each batch. 35126 // 35127 // Returns A matrix of shape num_batches x samples_per_batch, filled with random 35128 // truncated normal values using the parameters for each row. 35129 func ParameterizedTruncatedNormal(scope *Scope, shape tf.Output, means tf.Output, stdevs tf.Output, minvals tf.Output, maxvals tf.Output, optional ...ParameterizedTruncatedNormalAttr) (output tf.Output) { 35130 if scope.Err() != nil { 35131 return 35132 } 35133 attrs := map[string]interface{}{} 35134 for _, a := range optional { 35135 a(attrs) 35136 } 35137 opspec := tf.OpSpec{ 35138 Type: "ParameterizedTruncatedNormal", 35139 Input: []tf.Input{ 35140 shape, means, stdevs, minvals, maxvals, 35141 }, 35142 Attrs: attrs, 35143 } 35144 op := scope.AddOperation(opspec) 35145 return op.Output(0) 35146 } 35147 35148 // Sets the index-th position of the list to contain the given tensor. 35149 // 35150 // input_handle: the list 35151 // index: the position in the list to which the tensor will be assigned 35152 // item: the element to be assigned to that position 35153 // output_handle: the new list, with the element in the proper position 35154 // 35155 func TensorListSetItem(scope *Scope, input_handle tf.Output, index tf.Output, item tf.Output) (output_handle tf.Output) { 35156 if scope.Err() != nil { 35157 return 35158 } 35159 opspec := tf.OpSpec{ 35160 Type: "TensorListSetItem", 35161 Input: []tf.Input{ 35162 input_handle, index, item, 35163 }, 35164 } 35165 op := scope.AddOperation(opspec) 35166 return op.Output(0) 35167 } 35168 35169 // Creates a TensorList by indexing into a Tensor. 35170 // 35171 // Each member of the TensorList corresponds to one row of the input tensor, 35172 // specified by the given index (see `tf.gather`). 35173 // 35174 // tensor: The input tensor. 35175 // indices: The indices used to index into the list. 35176 // element_shape: The shape of the elements in the list (can be less specified than 35177 // the shape of the tensor). 35178 // output_handle: The TensorList. 35179 func TensorListScatter(scope *Scope, tensor tf.Output, indices tf.Output, element_shape tf.Output) (output_handle tf.Output) { 35180 if scope.Err() != nil { 35181 return 35182 } 35183 opspec := tf.OpSpec{ 35184 Type: "TensorListScatter", 35185 Input: []tf.Input{ 35186 tensor, indices, element_shape, 35187 }, 35188 } 35189 op := scope.AddOperation(opspec) 35190 return op.Output(0) 35191 } 35192 35193 // Deprecated. Use TensorArrayScatterV3 35194 // 35195 // DEPRECATED at GraphDef version 26: Use TensorArrayScatterV3 35196 func TensorArrayScatterV2(scope *Scope, handle tf.Output, indices tf.Output, value tf.Output, flow_in tf.Output) (flow_out tf.Output) { 35197 if scope.Err() != nil { 35198 return 35199 } 35200 opspec := tf.OpSpec{ 35201 Type: "TensorArrayScatterV2", 35202 Input: []tf.Input{ 35203 handle, indices, value, flow_in, 35204 }, 35205 } 35206 op := scope.AddOperation(opspec) 35207 return op.Output(0) 35208 } 35209 35210 // AsStringAttr is an optional argument to AsString. 35211 type AsStringAttr func(optionalAttr) 35212 35213 // AsStringPrecision sets the optional precision attribute to value. 35214 // 35215 // value: The post-decimal precision to use for floating point numbers. 35216 // Only used if precision > -1. 35217 // If not specified, defaults to -1 35218 func AsStringPrecision(value int64) AsStringAttr { 35219 return func(m optionalAttr) { 35220 m["precision"] = value 35221 } 35222 } 35223 35224 // AsStringScientific sets the optional scientific attribute to value. 35225 // 35226 // value: Use scientific notation for floating point numbers. 35227 // If not specified, defaults to false 35228 func AsStringScientific(value bool) AsStringAttr { 35229 return func(m optionalAttr) { 35230 m["scientific"] = value 35231 } 35232 } 35233 35234 // AsStringShortest sets the optional shortest attribute to value. 35235 // 35236 // value: Use shortest representation (either scientific or standard) for 35237 // floating point numbers. 35238 // If not specified, defaults to false 35239 func AsStringShortest(value bool) AsStringAttr { 35240 return func(m optionalAttr) { 35241 m["shortest"] = value 35242 } 35243 } 35244 35245 // AsStringWidth sets the optional width attribute to value. 35246 // 35247 // value: Pad pre-decimal numbers to this width. 35248 // Applies to both floating point and integer numbers. 35249 // Only used if width > -1. 35250 // If not specified, defaults to -1 35251 func AsStringWidth(value int64) AsStringAttr { 35252 return func(m optionalAttr) { 35253 m["width"] = value 35254 } 35255 } 35256 35257 // AsStringFill sets the optional fill attribute to value. 35258 // 35259 // value: The value to pad if width > -1. If empty, pads with spaces. 35260 // Another typical value is '0'. String cannot be longer than 1 character. 35261 // If not specified, defaults to "" 35262 func AsStringFill(value string) AsStringAttr { 35263 return func(m optionalAttr) { 35264 m["fill"] = value 35265 } 35266 } 35267 35268 // Converts each entry in the given tensor to strings. Supports many numeric 35269 // 35270 // types and boolean. 35271 func AsString(scope *Scope, input tf.Output, optional ...AsStringAttr) (output tf.Output) { 35272 if scope.Err() != nil { 35273 return 35274 } 35275 attrs := map[string]interface{}{} 35276 for _, a := range optional { 35277 a(attrs) 35278 } 35279 opspec := tf.OpSpec{ 35280 Type: "AsString", 35281 Input: []tf.Input{ 35282 input, 35283 }, 35284 Attrs: attrs, 35285 } 35286 op := scope.AddOperation(opspec) 35287 return op.Output(0) 35288 } 35289 35290 // Returns a `RaggedTensor` containing the specified sequences of numbers. 35291 // 35292 // 35293 // Returns a `RaggedTensor` `result` composed from `rt_dense_values` and 35294 // `rt_nested_splits`, such that 35295 // `result[i] = range(starts[i], limits[i], deltas[i])`. 35296 // 35297 // ```python 35298 // >>> (rt_nested_splits, rt_dense_values) = gen_ragged_ops.ragged_range( 35299 // ... starts=[2, 5, 8], limits=[3, 5, 12], deltas=1) 35300 // >>> result = ragged.from_nested_row_splits(rt_dense_values, rt_nested_splits) 35301 // >>> print result.eval().tolist() 35302 // [[2], # result[0] = range(2, 3) 35303 // [], # result[1] = range(5, 5) 35304 // [8, 9, 10, 11]] # result[2] = range(8, 12) 35305 // ``` 35306 // 35307 // The input tensors `starts`, `limits`, and `deltas` may be scalars or vectors. 35308 // The vector inputs must all have the same size. Scalar inputs are broadcast 35309 // to match the size of the vector inputs. 35310 // 35311 // Arguments: 35312 // starts: The starts of each range. 35313 // limits: The limits of each range. 35314 // deltas: The deltas of each range. 35315 // 35316 // Returns The `row_splits` for the returned `RaggedTensor`.The `flat_values` for the returned `RaggedTensor`. 35317 func RaggedRange(scope *Scope, starts tf.Output, limits tf.Output, deltas tf.Output) (rt_nested_splits tf.Output, rt_dense_values tf.Output) { 35318 if scope.Err() != nil { 35319 return 35320 } 35321 opspec := tf.OpSpec{ 35322 Type: "RaggedRange", 35323 Input: []tf.Input{ 35324 starts, limits, deltas, 35325 }, 35326 } 35327 op := scope.AddOperation(opspec) 35328 return op.Output(0), op.Output(1) 35329 } 35330 35331 // Deprecated, use python implementation tf.linalg.matrix_exponential. 35332 // 35333 // DEPRECATED at GraphDef version 27: Use Python implementation tf.linalg.matrix_exponential instead. 35334 func MatrixExponential(scope *Scope, input tf.Output) (output tf.Output) { 35335 if scope.Err() != nil { 35336 return 35337 } 35338 opspec := tf.OpSpec{ 35339 Type: "MatrixExponential", 35340 Input: []tf.Input{ 35341 input, 35342 }, 35343 } 35344 op := scope.AddOperation(opspec) 35345 return op.Output(0) 35346 } 35347 35348 // Computes the Cholesky decomposition of one or more square matrices. 35349 // 35350 // The input is a tensor of shape `[..., M, M]` whose inner-most 2 dimensions 35351 // form square matrices. 35352 // 35353 // The input has to be symmetric and positive definite. Only the lower-triangular 35354 // part of the input will be used for this operation. The upper-triangular part 35355 // will not be read. 35356 // 35357 // The output is a tensor of the same shape as the input 35358 // containing the Cholesky decompositions for all input submatrices `[..., :, :]`. 35359 // 35360 // **Note**: The gradient computation on GPU is faster for large matrices but 35361 // not for large batch dimensions when the submatrices are small. In this 35362 // case it might be faster to use the CPU. 35363 // 35364 // Arguments: 35365 // input: Shape is `[..., M, M]`. 35366 // 35367 // Returns Shape is `[..., M, M]`. 35368 func Cholesky(scope *Scope, input tf.Output) (output tf.Output) { 35369 if scope.Err() != nil { 35370 return 35371 } 35372 opspec := tf.OpSpec{ 35373 Type: "Cholesky", 35374 Input: []tf.Input{ 35375 input, 35376 }, 35377 } 35378 op := scope.AddOperation(opspec) 35379 return op.Output(0) 35380 } 35381 35382 // Writes contents to the file at input filename. Creates file and recursively 35383 // 35384 // creates directory if not existing. 35385 // 35386 // Arguments: 35387 // filename: scalar. The name of the file to which we write the contents. 35388 // contents: scalar. The content to be written to the output file. 35389 // 35390 // Returns the created operation. 35391 func WriteFile(scope *Scope, filename tf.Output, contents tf.Output) (o *tf.Operation) { 35392 if scope.Err() != nil { 35393 return 35394 } 35395 opspec := tf.OpSpec{ 35396 Type: "WriteFile", 35397 Input: []tf.Input{ 35398 filename, contents, 35399 }, 35400 } 35401 return scope.AddOperation(opspec) 35402 } 35403 35404 // AllAttr is an optional argument to All. 35405 type AllAttr func(optionalAttr) 35406 35407 // AllKeepDims sets the optional keep_dims attribute to value. 35408 // 35409 // value: If true, retain reduced dimensions with length 1. 35410 // If not specified, defaults to false 35411 func AllKeepDims(value bool) AllAttr { 35412 return func(m optionalAttr) { 35413 m["keep_dims"] = value 35414 } 35415 } 35416 35417 // Computes the "logical and" of elements across dimensions of a tensor. 35418 // 35419 // Reduces `input` along the dimensions given in `axis`. Unless 35420 // `keep_dims` is true, the rank of the tensor is reduced by 1 for each entry in 35421 // `axis`. If `keep_dims` is true, the reduced dimensions are 35422 // retained with length 1. 35423 // 35424 // Arguments: 35425 // input: The tensor to reduce. 35426 // axis: The dimensions to reduce. Must be in the range 35427 // `[-rank(input), rank(input))`. 35428 // 35429 // Returns The reduced tensor. 35430 func All(scope *Scope, input tf.Output, axis tf.Output, optional ...AllAttr) (output tf.Output) { 35431 if scope.Err() != nil { 35432 return 35433 } 35434 attrs := map[string]interface{}{} 35435 for _, a := range optional { 35436 a(attrs) 35437 } 35438 opspec := tf.OpSpec{ 35439 Type: "All", 35440 Input: []tf.Input{ 35441 input, axis, 35442 }, 35443 Attrs: attrs, 35444 } 35445 op := scope.AddOperation(opspec) 35446 return op.Output(0) 35447 } 35448 35449 // Computes the Eigen Decomposition of a batch of square self-adjoint matrices. 35450 // 35451 // DEPRECATED at GraphDef version 11: Use SelfAdjointEigV2 instead. 35452 // 35453 // The input is a tensor of shape `[..., M, M]` whose inner-most 2 dimensions 35454 // form square matrices, with the same constraints as the single matrix 35455 // SelfAdjointEig. 35456 // 35457 // The result is a [..., M+1, M] matrix with [..., 0,:] containing the 35458 // eigenvalues, and subsequent [...,1:, :] containing the eigenvectors. The eigenvalues 35459 // are sorted in non-decreasing order. 35460 // 35461 // Arguments: 35462 // input: Shape is `[..., M, M]`. 35463 // 35464 // Returns Shape is `[..., M+1, M]`. 35465 func SelfAdjointEig(scope *Scope, input tf.Output) (output tf.Output) { 35466 if scope.Err() != nil { 35467 return 35468 } 35469 opspec := tf.OpSpec{ 35470 Type: "SelfAdjointEig", 35471 Input: []tf.Input{ 35472 input, 35473 }, 35474 } 35475 op := scope.AddOperation(opspec) 35476 return op.Output(0) 35477 } 35478 35479 // Computes softplus gradients for a softplus operation. 35480 // 35481 // Arguments: 35482 // gradients: The backpropagated gradients to the corresponding softplus operation. 35483 // features: The features passed as input to the corresponding softplus operation. 35484 // 35485 // Returns The gradients: `gradients / (1 + exp(-features))`. 35486 func SoftplusGrad(scope *Scope, gradients tf.Output, features tf.Output) (backprops tf.Output) { 35487 if scope.Err() != nil { 35488 return 35489 } 35490 opspec := tf.OpSpec{ 35491 Type: "SoftplusGrad", 35492 Input: []tf.Input{ 35493 gradients, features, 35494 }, 35495 } 35496 op := scope.AddOperation(opspec) 35497 return op.Output(0) 35498 } 35499 35500 // Solves tridiagonal systems of equations. 35501 // 35502 // `diagonals` is a tensor of shape `[..., 3, M]` whose inner-most 2 dimensions 35503 // represent matrices with three rows being the superdiagonal, diagonals, and 35504 // subdiagonals, in order. The last element of the superdiagonal and the first 35505 // element of the subdiagonal is ignored. 35506 // `rhs` is a tensor of shape `[..., M, K]`, representing K right-hand sides per 35507 // each left-hand side. 35508 // The output is a tensor of shape `[..., M, K]` containing the solutions. 35509 // 35510 // Arguments: 35511 // diagonals: Shape is `[..., 3, M]`. 35512 // rhs: Shape is `[..., M, K]`. 35513 // 35514 // Returns Shape is `[..., M, K]`. 35515 func TridiagonalSolve(scope *Scope, diagonals tf.Output, rhs tf.Output) (output tf.Output) { 35516 if scope.Err() != nil { 35517 return 35518 } 35519 opspec := tf.OpSpec{ 35520 Type: "TridiagonalSolve", 35521 Input: []tf.Input{ 35522 diagonals, rhs, 35523 }, 35524 } 35525 op := scope.AddOperation(opspec) 35526 return op.Output(0) 35527 } 35528 35529 // SelfAdjointEigV2Attr is an optional argument to SelfAdjointEigV2. 35530 type SelfAdjointEigV2Attr func(optionalAttr) 35531 35532 // SelfAdjointEigV2ComputeV sets the optional compute_v attribute to value. 35533 // 35534 // value: If `True` then eigenvectors will be computed and returned in `v`. 35535 // Otherwise, only the eigenvalues will be computed. 35536 // If not specified, defaults to true 35537 func SelfAdjointEigV2ComputeV(value bool) SelfAdjointEigV2Attr { 35538 return func(m optionalAttr) { 35539 m["compute_v"] = value 35540 } 35541 } 35542 35543 // Computes the eigen decomposition of one or more square self-adjoint matrices. 35544 // 35545 // Computes the eigenvalues and (optionally) eigenvectors of each inner matrix in 35546 // `input` such that `input[..., :, :] = v[..., :, :] * diag(e[..., :])`. The eigenvalues 35547 // are sorted in non-decreasing order. 35548 // 35549 // ```python 35550 // # a is a tensor. 35551 // # e is a tensor of eigenvalues. 35552 // # v is a tensor of eigenvectors. 35553 // e, v = self_adjoint_eig(a) 35554 // e = self_adjoint_eig(a, compute_v=False) 35555 // ``` 35556 // 35557 // Arguments: 35558 // input: `Tensor` input of shape `[N, N]`. 35559 // 35560 // Returns Eigenvalues. Shape is `[N]`.Eigenvectors. Shape is `[N, N]`. 35561 func SelfAdjointEigV2(scope *Scope, input tf.Output, optional ...SelfAdjointEigV2Attr) (e tf.Output, v tf.Output) { 35562 if scope.Err() != nil { 35563 return 35564 } 35565 attrs := map[string]interface{}{} 35566 for _, a := range optional { 35567 a(attrs) 35568 } 35569 opspec := tf.OpSpec{ 35570 Type: "SelfAdjointEigV2", 35571 Input: []tf.Input{ 35572 input, 35573 }, 35574 Attrs: attrs, 35575 } 35576 op := scope.AddOperation(opspec) 35577 return op.Output(0), op.Output(1) 35578 } 35579 35580 // Adjust the saturation of one or more images. 35581 // 35582 // `images` is a tensor of at least 3 dimensions. The last dimension is 35583 // interpretted as channels, and must be three. 35584 // 35585 // The input image is considered in the RGB colorspace. Conceptually, the RGB 35586 // colors are first mapped into HSV. A scale is then applied all the saturation 35587 // values, and then remapped back to RGB colorspace. 35588 // 35589 // Arguments: 35590 // images: Images to adjust. At least 3-D. 35591 // scale: A float scale to add to the saturation. 35592 // 35593 // Returns The hue-adjusted image or images. 35594 func AdjustSaturation(scope *Scope, images tf.Output, scale tf.Output) (output tf.Output) { 35595 if scope.Err() != nil { 35596 return 35597 } 35598 opspec := tf.OpSpec{ 35599 Type: "AdjustSaturation", 35600 Input: []tf.Input{ 35601 images, scale, 35602 }, 35603 } 35604 op := scope.AddOperation(opspec) 35605 return op.Output(0) 35606 } 35607 35608 // LuAttr is an optional argument to Lu. 35609 type LuAttr func(optionalAttr) 35610 35611 // LuOutputIdxType sets the optional output_idx_type attribute to value. 35612 // If not specified, defaults to DT_INT32 35613 func LuOutputIdxType(value tf.DataType) LuAttr { 35614 return func(m optionalAttr) { 35615 m["output_idx_type"] = value 35616 } 35617 } 35618 35619 // Computes the LU decomposition of one or more square matrices. 35620 // 35621 // The input is a tensor of shape `[..., M, M]` whose inner-most 2 dimensions 35622 // form square matrices. 35623 // 35624 // The input has to be invertible. 35625 // 35626 // The output consists of two tensors LU and P containing the LU decomposition 35627 // of all input submatrices `[..., :, :]`. LU encodes the lower triangular and 35628 // upper triangular factors. 35629 // 35630 // For each input submatrix of shape `[M, M]`, L is a lower triangular matrix of 35631 // shape `[M, M]` with unit diagonal whose entries correspond to the strictly lower 35632 // triangular part of LU. U is a upper triangular matrix of shape `[M, M]` whose 35633 // entries correspond to the upper triangular part, including the diagonal, of LU. 35634 // 35635 // P represents a permutation matrix encoded as a list of indices each between `0` 35636 // and `M-1`, inclusive. If P_mat denotes the permutation matrix corresponding to 35637 // P, then the L, U and P satisfies P_mat * input = L * U. 35638 // 35639 // Arguments: 35640 // input: A tensor of shape `[..., M, M]` whose inner-most 2 dimensions form matrices of 35641 // size `[M, M]`. 35642 // 35643 // Returns A tensor of shape `[..., M, M]` whose strictly lower triangular part denotes the 35644 // lower triangular factor `L` with unit diagonal, and whose upper triangular part 35645 // denotes the upper triangular factor `U`.Permutation of the rows encoded as a list of indices in `0..M-1`. Shape is 35646 // `[..., M]`. 35647 // @compatibility(scipy) 35648 // Similar to `scipy.linalg.lu`, except the triangular factors `L` and `U` are 35649 // packed into a single tensor, the permutation is applied to `input` instead of 35650 // the right hand side and the permutation `P` is returned as a list of indices 35651 // instead of a permutation matrix. 35652 // @end_compatibility 35653 func Lu(scope *Scope, input tf.Output, optional ...LuAttr) (lu tf.Output, p tf.Output) { 35654 if scope.Err() != nil { 35655 return 35656 } 35657 attrs := map[string]interface{}{} 35658 for _, a := range optional { 35659 a(attrs) 35660 } 35661 opspec := tf.OpSpec{ 35662 Type: "Lu", 35663 Input: []tf.Input{ 35664 input, 35665 }, 35666 Attrs: attrs, 35667 } 35668 op := scope.AddOperation(opspec) 35669 return op.Output(0), op.Output(1) 35670 } 35671 35672 // Deprecated. Use TensorArrayCloseV3 35673 // 35674 // DEPRECATED at GraphDef version 26: Use TensorArrayCloseV3 35675 // 35676 // Returns the created operation. 35677 func TensorArrayCloseV2(scope *Scope, handle tf.Output) (o *tf.Operation) { 35678 if scope.Err() != nil { 35679 return 35680 } 35681 opspec := tf.OpSpec{ 35682 Type: "TensorArrayCloseV2", 35683 Input: []tf.Input{ 35684 handle, 35685 }, 35686 } 35687 return scope.AddOperation(opspec) 35688 } 35689 35690 // EncodeBase64Attr is an optional argument to EncodeBase64. 35691 type EncodeBase64Attr func(optionalAttr) 35692 35693 // EncodeBase64Pad sets the optional pad attribute to value. 35694 // 35695 // value: Bool whether padding is applied at the ends. 35696 // If not specified, defaults to false 35697 func EncodeBase64Pad(value bool) EncodeBase64Attr { 35698 return func(m optionalAttr) { 35699 m["pad"] = value 35700 } 35701 } 35702 35703 // Encode strings into web-safe base64 format. 35704 // 35705 // Refer to the following article for more information on base64 format: 35706 // en.wikipedia.org/wiki/Base64. Base64 strings may have padding with '=' at the 35707 // end so that the encoded has length multiple of 4. See Padding section of the 35708 // link above. 35709 // 35710 // Web-safe means that the encoder uses - and _ instead of + and /. 35711 // 35712 // Arguments: 35713 // input: Strings to be encoded. 35714 // 35715 // Returns Input strings encoded in base64. 35716 func EncodeBase64(scope *Scope, input tf.Output, optional ...EncodeBase64Attr) (output tf.Output) { 35717 if scope.Err() != nil { 35718 return 35719 } 35720 attrs := map[string]interface{}{} 35721 for _, a := range optional { 35722 a(attrs) 35723 } 35724 opspec := tf.OpSpec{ 35725 Type: "EncodeBase64", 35726 Input: []tf.Input{ 35727 input, 35728 }, 35729 Attrs: attrs, 35730 } 35731 op := scope.AddOperation(opspec) 35732 return op.Output(0) 35733 } 35734 35735 // A dataset that creates window datasets from the input dataset. 35736 // 35737 // Arguments: 35738 // 35739 // size: A scalar representing the number of elements to accumulate in a window. 35740 // shift: A scalar representing the steps moving the sliding window forward in one 35741 // iteration. It must be positive. 35742 // stride: A scalar representing the stride of the input elements of the sliding window. 35743 // It must be positive. 35744 // drop_remainder: A scalar representing whether a window should be dropped in case its size is 35745 // smaller than desired. 35746 // 35747 // 35748 func WindowDataset(scope *Scope, input_dataset tf.Output, size tf.Output, shift tf.Output, stride tf.Output, drop_remainder tf.Output, output_types []tf.DataType, output_shapes []tf.Shape) (handle tf.Output) { 35749 if scope.Err() != nil { 35750 return 35751 } 35752 attrs := map[string]interface{}{"output_types": output_types, "output_shapes": output_shapes} 35753 opspec := tf.OpSpec{ 35754 Type: "WindowDataset", 35755 Input: []tf.Input{ 35756 input_dataset, size, shift, stride, drop_remainder, 35757 }, 35758 Attrs: attrs, 35759 } 35760 op := scope.AddOperation(opspec) 35761 return op.Output(0) 35762 } 35763 35764 // Computes the matrix square root of one or more square matrices: 35765 // 35766 // matmul(sqrtm(A), sqrtm(A)) = A 35767 // 35768 // The input matrix should be invertible. If the input matrix is real, it should 35769 // have no eigenvalues which are real and negative (pairs of complex conjugate 35770 // eigenvalues are allowed). 35771 // 35772 // The matrix square root is computed by first reducing the matrix to 35773 // quasi-triangular form with the real Schur decomposition. The square root 35774 // of the quasi-triangular matrix is then computed directly. Details of 35775 // the algorithm can be found in: Nicholas J. Higham, "Computing real 35776 // square roots of a real matrix", Linear Algebra Appl., 1987. 35777 // 35778 // The input is a tensor of shape `[..., M, M]` whose inner-most 2 dimensions 35779 // form square matrices. The output is a tensor of the same shape as the input 35780 // containing the matrix square root for all input submatrices `[..., :, :]`. 35781 // 35782 // Arguments: 35783 // input: Shape is `[..., M, M]`. 35784 // 35785 // Returns Shape is `[..., M, M]`. 35786 // 35787 // @compatibility(scipy) 35788 // Equivalent to scipy.linalg.sqrtm 35789 // @end_compatibility 35790 func MatrixSquareRoot(scope *Scope, input tf.Output) (output tf.Output) { 35791 if scope.Err() != nil { 35792 return 35793 } 35794 opspec := tf.OpSpec{ 35795 Type: "MatrixSquareRoot", 35796 Input: []tf.Input{ 35797 input, 35798 }, 35799 } 35800 op := scope.AddOperation(opspec) 35801 return op.Output(0) 35802 } 35803 35804 // SvdAttr is an optional argument to Svd. 35805 type SvdAttr func(optionalAttr) 35806 35807 // SvdComputeUv sets the optional compute_uv attribute to value. 35808 // 35809 // value: If true, left and right singular vectors will be 35810 // computed and returned in `u` and `v`, respectively. 35811 // If false, `u` and `v` are not set and should never referenced. 35812 // If not specified, defaults to true 35813 func SvdComputeUv(value bool) SvdAttr { 35814 return func(m optionalAttr) { 35815 m["compute_uv"] = value 35816 } 35817 } 35818 35819 // SvdFullMatrices sets the optional full_matrices attribute to value. 35820 // 35821 // value: If true, compute full-sized `u` and `v`. If false 35822 // (the default), compute only the leading `P` singular vectors. 35823 // Ignored if `compute_uv` is `False`. 35824 // If not specified, defaults to false 35825 func SvdFullMatrices(value bool) SvdAttr { 35826 return func(m optionalAttr) { 35827 m["full_matrices"] = value 35828 } 35829 } 35830 35831 // Computes the singular value decompositions of one or more matrices. 35832 // 35833 // Computes the SVD of each inner matrix in `input` such that 35834 // `input[..., :, :] = u[..., :, :] * diag(s[..., :, :]) * transpose(v[..., :, :])` 35835 // 35836 // ```python 35837 // # a is a tensor containing a batch of matrices. 35838 // # s is a tensor of singular values for each matrix. 35839 // # u is the tensor containing of left singular vectors for each matrix. 35840 // # v is the tensor containing of right singular vectors for each matrix. 35841 // s, u, v = svd(a) 35842 // s, _, _ = svd(a, compute_uv=False) 35843 // ``` 35844 // 35845 // Arguments: 35846 // input: A tensor of shape `[..., M, N]` whose inner-most 2 dimensions 35847 // form matrices of size `[M, N]`. Let `P` be the minimum of `M` and `N`. 35848 // 35849 // Returns Singular values. Shape is `[..., P]`.Left singular vectors. If `full_matrices` is `False` then shape is 35850 // `[..., M, P]`; if `full_matrices` is `True` then shape is 35851 // `[..., M, M]`. Undefined if `compute_uv` is `False`.Left singular vectors. If `full_matrices` is `False` then shape is 35852 // `[..., N, P]`. If `full_matrices` is `True` then shape is `[..., N, N]`. 35853 // Undefined if `compute_uv` is false. 35854 func Svd(scope *Scope, input tf.Output, optional ...SvdAttr) (s tf.Output, u tf.Output, v tf.Output) { 35855 if scope.Err() != nil { 35856 return 35857 } 35858 attrs := map[string]interface{}{} 35859 for _, a := range optional { 35860 a(attrs) 35861 } 35862 opspec := tf.OpSpec{ 35863 Type: "Svd", 35864 Input: []tf.Input{ 35865 input, 35866 }, 35867 Attrs: attrs, 35868 } 35869 op := scope.AddOperation(opspec) 35870 return op.Output(0), op.Output(1), op.Output(2) 35871 } 35872 35873 // Converts one or more images from RGB to HSV. 35874 // 35875 // Outputs a tensor of the same shape as the `images` tensor, containing the HSV 35876 // value of the pixels. The output is only well defined if the value in `images` 35877 // are in `[0,1]`. 35878 // 35879 // `output[..., 0]` contains hue, `output[..., 1]` contains saturation, and 35880 // `output[..., 2]` contains value. All HSV values are in `[0,1]`. A hue of 0 35881 // corresponds to pure red, hue 1/3 is pure green, and 2/3 is pure blue. 35882 // 35883 // Arguments: 35884 // images: 1-D or higher rank. RGB data to convert. Last dimension must be size 3. 35885 // 35886 // Returns `images` converted to HSV. 35887 func RGBToHSV(scope *Scope, images tf.Output) (output tf.Output) { 35888 if scope.Err() != nil { 35889 return 35890 } 35891 opspec := tf.OpSpec{ 35892 Type: "RGBToHSV", 35893 Input: []tf.Input{ 35894 images, 35895 }, 35896 } 35897 op := scope.AddOperation(opspec) 35898 return op.Output(0) 35899 } 35900 35901 // Does nothing. Only useful as a placeholder for control edges. 35902 // 35903 // Returns the created operation. 35904 func NoOp(scope *Scope) (o *tf.Operation) { 35905 if scope.Err() != nil { 35906 return 35907 } 35908 opspec := tf.OpSpec{ 35909 Type: "NoOp", 35910 } 35911 return scope.AddOperation(opspec) 35912 } 35913 35914 // MergeV2CheckpointsAttr is an optional argument to MergeV2Checkpoints. 35915 type MergeV2CheckpointsAttr func(optionalAttr) 35916 35917 // MergeV2CheckpointsDeleteOldDirs sets the optional delete_old_dirs attribute to value. 35918 // 35919 // value: see above. 35920 // If not specified, defaults to true 35921 func MergeV2CheckpointsDeleteOldDirs(value bool) MergeV2CheckpointsAttr { 35922 return func(m optionalAttr) { 35923 m["delete_old_dirs"] = value 35924 } 35925 } 35926 35927 // V2 format specific: merges the metadata files of sharded checkpoints. The 35928 // 35929 // result is one logical checkpoint, with one physical metadata file and renamed 35930 // data files. 35931 // 35932 // Intended for "grouping" multiple checkpoints in a sharded checkpoint setup. 35933 // 35934 // If delete_old_dirs is true, attempts to delete recursively the dirname of each 35935 // path in the input checkpoint_prefixes. This is useful when those paths are non 35936 // user-facing temporary locations. 35937 // 35938 // Arguments: 35939 // checkpoint_prefixes: prefixes of V2 checkpoints to merge. 35940 // destination_prefix: scalar. The desired final prefix. Allowed to be the same 35941 // as one of the checkpoint_prefixes. 35942 // 35943 // Returns the created operation. 35944 func MergeV2Checkpoints(scope *Scope, checkpoint_prefixes tf.Output, destination_prefix tf.Output, optional ...MergeV2CheckpointsAttr) (o *tf.Operation) { 35945 if scope.Err() != nil { 35946 return 35947 } 35948 attrs := map[string]interface{}{} 35949 for _, a := range optional { 35950 a(attrs) 35951 } 35952 opspec := tf.OpSpec{ 35953 Type: "MergeV2Checkpoints", 35954 Input: []tf.Input{ 35955 checkpoint_prefixes, destination_prefix, 35956 }, 35957 Attrs: attrs, 35958 } 35959 return scope.AddOperation(opspec) 35960 } 35961 35962 // Saves input tensors slices to disk. 35963 // 35964 // This is like `Save` except that tensors can be listed in the saved file as being 35965 // a slice of a larger tensor. `shapes_and_slices` specifies the shape of the 35966 // larger tensor and the slice that this tensor covers. `shapes_and_slices` must 35967 // have as many elements as `tensor_names`. 35968 // 35969 // Elements of the `shapes_and_slices` input must either be: 35970 // 35971 // * The empty string, in which case the corresponding tensor is 35972 // saved normally. 35973 // * A string of the form `dim0 dim1 ... dimN-1 slice-spec` where the 35974 // `dimI` are the dimensions of the larger tensor and `slice-spec` 35975 // specifies what part is covered by the tensor to save. 35976 // 35977 // `slice-spec` itself is a `:`-separated list: `slice0:slice1:...:sliceN-1` 35978 // where each `sliceI` is either: 35979 // 35980 // * The string `-` meaning that the slice covers all indices of this dimension 35981 // * `start,length` where `start` and `length` are integers. In that 35982 // case the slice covers `length` indices starting at `start`. 35983 // 35984 // See also `Save`. 35985 // 35986 // Arguments: 35987 // filename: Must have a single element. The name of the file to which we write the 35988 // tensor. 35989 // tensor_names: Shape `[N]`. The names of the tensors to be saved. 35990 // shapes_and_slices: Shape `[N]`. The shapes and slice specifications to use when 35991 // saving the tensors. 35992 // data: `N` tensors to save. 35993 // 35994 // Returns the created operation. 35995 func SaveSlices(scope *Scope, filename tf.Output, tensor_names tf.Output, shapes_and_slices tf.Output, data []tf.Output) (o *tf.Operation) { 35996 if scope.Err() != nil { 35997 return 35998 } 35999 opspec := tf.OpSpec{ 36000 Type: "SaveSlices", 36001 Input: []tf.Input{ 36002 filename, tensor_names, shapes_and_slices, tf.OutputList(data), 36003 }, 36004 } 36005 return scope.AddOperation(opspec) 36006 } 36007 36008 // DenseToDenseSetOperationAttr is an optional argument to DenseToDenseSetOperation. 36009 type DenseToDenseSetOperationAttr func(optionalAttr) 36010 36011 // DenseToDenseSetOperationValidateIndices sets the optional validate_indices attribute to value. 36012 // If not specified, defaults to true 36013 func DenseToDenseSetOperationValidateIndices(value bool) DenseToDenseSetOperationAttr { 36014 return func(m optionalAttr) { 36015 m["validate_indices"] = value 36016 } 36017 } 36018 36019 // Applies set operation along last dimension of 2 `Tensor` inputs. 36020 // 36021 // See SetOperationOp::SetOperationFromContext for values of `set_operation`. 36022 // 36023 // Output `result` is a `SparseTensor` represented by `result_indices`, 36024 // `result_values`, and `result_shape`. For `set1` and `set2` ranked `n`, this 36025 // has rank `n` and the same 1st `n-1` dimensions as `set1` and `set2`. The `nth` 36026 // dimension contains the result of `set_operation` applied to the corresponding 36027 // `[0...n-1]` dimension of `set`. 36028 // 36029 // Arguments: 36030 // set1: `Tensor` with rank `n`. 1st `n-1` dimensions must be the same as `set2`. 36031 // Dimension `n` contains values in a set, duplicates are allowed but ignored. 36032 // set2: `Tensor` with rank `n`. 1st `n-1` dimensions must be the same as `set1`. 36033 // Dimension `n` contains values in a set, duplicates are allowed but ignored. 36034 // 36035 // 36036 // Returns 2D indices of a `SparseTensor`.1D values of a `SparseTensor`.1D `Tensor` shape of a `SparseTensor`. `result_shape[0...n-1]` is 36037 // the same as the 1st `n-1` dimensions of `set1` and `set2`, `result_shape[n]` 36038 // is the max result set size across all `0...n-1` dimensions. 36039 func DenseToDenseSetOperation(scope *Scope, set1 tf.Output, set2 tf.Output, set_operation string, optional ...DenseToDenseSetOperationAttr) (result_indices tf.Output, result_values tf.Output, result_shape tf.Output) { 36040 if scope.Err() != nil { 36041 return 36042 } 36043 attrs := map[string]interface{}{"set_operation": set_operation} 36044 for _, a := range optional { 36045 a(attrs) 36046 } 36047 opspec := tf.OpSpec{ 36048 Type: "DenseToDenseSetOperation", 36049 Input: []tf.Input{ 36050 set1, set2, 36051 }, 36052 Attrs: attrs, 36053 } 36054 op := scope.AddOperation(opspec) 36055 return op.Output(0), op.Output(1), op.Output(2) 36056 } 36057 36058 // Generate a sharded filename. The filename is printf formatted as 36059 // 36060 // %s-%05d-of-%05d, basename, shard, num_shards. 36061 func ShardedFilename(scope *Scope, basename tf.Output, shard tf.Output, num_shards tf.Output) (filename tf.Output) { 36062 if scope.Err() != nil { 36063 return 36064 } 36065 opspec := tf.OpSpec{ 36066 Type: "ShardedFilename", 36067 Input: []tf.Input{ 36068 basename, shard, num_shards, 36069 }, 36070 } 36071 op := scope.AddOperation(opspec) 36072 return op.Output(0) 36073 } 36074 36075 // Generate a glob pattern matching all sharded file names. 36076 func ShardedFilespec(scope *Scope, basename tf.Output, num_shards tf.Output) (filename tf.Output) { 36077 if scope.Err() != nil { 36078 return 36079 } 36080 opspec := tf.OpSpec{ 36081 Type: "ShardedFilespec", 36082 Input: []tf.Input{ 36083 basename, num_shards, 36084 }, 36085 } 36086 op := scope.AddOperation(opspec) 36087 return op.Output(0) 36088 } 36089 36090 // TextLineReaderV2Attr is an optional argument to TextLineReaderV2. 36091 type TextLineReaderV2Attr func(optionalAttr) 36092 36093 // TextLineReaderV2SkipHeaderLines sets the optional skip_header_lines attribute to value. 36094 // 36095 // value: Number of lines to skip from the beginning of every file. 36096 // If not specified, defaults to 0 36097 func TextLineReaderV2SkipHeaderLines(value int64) TextLineReaderV2Attr { 36098 return func(m optionalAttr) { 36099 m["skip_header_lines"] = value 36100 } 36101 } 36102 36103 // TextLineReaderV2Container sets the optional container attribute to value. 36104 // 36105 // value: If non-empty, this reader is placed in the given container. 36106 // Otherwise, a default container is used. 36107 // If not specified, defaults to "" 36108 func TextLineReaderV2Container(value string) TextLineReaderV2Attr { 36109 return func(m optionalAttr) { 36110 m["container"] = value 36111 } 36112 } 36113 36114 // TextLineReaderV2SharedName sets the optional shared_name attribute to value. 36115 // 36116 // value: If non-empty, this reader is named in the given bucket 36117 // with this shared_name. Otherwise, the node name is used instead. 36118 // If not specified, defaults to "" 36119 func TextLineReaderV2SharedName(value string) TextLineReaderV2Attr { 36120 return func(m optionalAttr) { 36121 m["shared_name"] = value 36122 } 36123 } 36124 36125 // A Reader that outputs the lines of a file delimited by '\n'. 36126 // 36127 // Returns The handle to reference the Reader. 36128 func TextLineReaderV2(scope *Scope, optional ...TextLineReaderV2Attr) (reader_handle tf.Output) { 36129 if scope.Err() != nil { 36130 return 36131 } 36132 attrs := map[string]interface{}{} 36133 for _, a := range optional { 36134 a(attrs) 36135 } 36136 opspec := tf.OpSpec{ 36137 Type: "TextLineReaderV2", 36138 36139 Attrs: attrs, 36140 } 36141 op := scope.AddOperation(opspec) 36142 return op.Output(0) 36143 } 36144 36145 // LoadAndRemapMatrixAttr is an optional argument to LoadAndRemapMatrix. 36146 type LoadAndRemapMatrixAttr func(optionalAttr) 36147 36148 // LoadAndRemapMatrixMaxRowsInMemory sets the optional max_rows_in_memory attribute to value. 36149 // 36150 // value: The maximum number of rows to load from the checkpoint at 36151 // once. If less than or equal to 0, the entire matrix will be loaded into 36152 // memory. Setting this arg trades increased disk reads for lower memory usage. 36153 // If not specified, defaults to -1 36154 func LoadAndRemapMatrixMaxRowsInMemory(value int64) LoadAndRemapMatrixAttr { 36155 return func(m optionalAttr) { 36156 m["max_rows_in_memory"] = value 36157 } 36158 } 36159 36160 // Loads a 2-D (matrix) `Tensor` with name `old_tensor_name` from the checkpoint 36161 // 36162 // at `ckpt_path` and potentially reorders its rows and columns using the 36163 // specified remappings. 36164 // 36165 // Most users should use one of the wrapper initializers (such as 36166 // `tf.contrib.framework.load_and_remap_matrix_initializer`) instead of this 36167 // function directly. 36168 // 36169 // The remappings are 1-D tensors with the following properties: 36170 // 36171 // * `row_remapping` must have exactly `num_rows` entries. Row `i` of the output 36172 // matrix will be initialized from the row corresponding to index 36173 // `row_remapping[i]` in the old `Tensor` from the checkpoint. 36174 // * `col_remapping` must have either 0 entries (indicating that no column 36175 // reordering is needed) or `num_cols` entries. If specified, column `j` of the 36176 // output matrix will be initialized from the column corresponding to index 36177 // `col_remapping[j]` in the old `Tensor` from the checkpoint. 36178 // * A value of -1 in either of the remappings signifies a "missing" entry. In that 36179 // case, values from the `initializing_values` tensor will be used to fill that 36180 // missing row or column. If `row_remapping` has `r` missing entries and 36181 // `col_remapping` has `c` missing entries, then the following condition must be 36182 // true: 36183 // 36184 // `(r * num_cols) + (c * num_rows) - (r * c) == len(initializing_values)` 36185 // 36186 // The remapping tensors can be generated using the GenerateVocabRemapping op. 36187 // 36188 // As an example, with row_remapping = [1, 0, -1], col_remapping = [0, 2, -1], 36189 // initializing_values = [0.5, -0.5, 0.25, -0.25, 42], and w(i, j) representing 36190 // the value from row i, column j of the old tensor in the checkpoint, the output 36191 // matrix will look like the following: 36192 // 36193 // [[w(1, 0), w(1, 2), 0.5], 36194 // [w(0, 0), w(0, 2), -0.5], 36195 // [0.25, -0.25, 42]] 36196 // 36197 // Arguments: 36198 // ckpt_path: Path to the TensorFlow checkpoint (version 2, `TensorBundle`) from 36199 // which the old matrix `Tensor` will be loaded. 36200 // old_tensor_name: Name of the 2-D `Tensor` to load from checkpoint. 36201 // row_remapping: An int `Tensor` of row remappings (generally created by 36202 // `generate_vocab_remapping`). Even if no row remapping is needed, this must 36203 // still be an index-valued Tensor (e.g. [0, 1, 2, ...]), or a shifted 36204 // index-valued `Tensor` (e.g. [8, 9, 10, ...], for partitioned `Variables`). 36205 // col_remapping: An int `Tensor` of column remappings (generally created by 36206 // `generate_vocab_remapping`). May be a size-0 `Tensor` if only row remapping 36207 // is to be done (e.g. column ordering is the same). 36208 // initializing_values: A float `Tensor` containing values to fill in for cells 36209 // in the output matrix that are not loaded from the checkpoint. Length must be 36210 // exactly the same as the number of missing / new cells. 36211 // num_rows: Number of rows (length of the 1st dimension) in the output matrix. 36212 // num_cols: Number of columns (length of the 2nd dimension) in the output matrix. 36213 // 36214 // Returns Output matrix containing existing values loaded from the 36215 // checkpoint, and with any missing values filled in from initializing_values. 36216 func LoadAndRemapMatrix(scope *Scope, ckpt_path tf.Output, old_tensor_name tf.Output, row_remapping tf.Output, col_remapping tf.Output, initializing_values tf.Output, num_rows int64, num_cols int64, optional ...LoadAndRemapMatrixAttr) (output_matrix tf.Output) { 36217 if scope.Err() != nil { 36218 return 36219 } 36220 attrs := map[string]interface{}{"num_rows": num_rows, "num_cols": num_cols} 36221 for _, a := range optional { 36222 a(attrs) 36223 } 36224 opspec := tf.OpSpec{ 36225 Type: "LoadAndRemapMatrix", 36226 Input: []tf.Input{ 36227 ckpt_path, old_tensor_name, row_remapping, col_remapping, initializing_values, 36228 }, 36229 Attrs: attrs, 36230 } 36231 op := scope.AddOperation(opspec) 36232 return op.Output(0) 36233 } 36234 36235 // TFRecordReaderV2Attr is an optional argument to TFRecordReaderV2. 36236 type TFRecordReaderV2Attr func(optionalAttr) 36237 36238 // TFRecordReaderV2Container sets the optional container attribute to value. 36239 // 36240 // value: If non-empty, this reader is placed in the given container. 36241 // Otherwise, a default container is used. 36242 // If not specified, defaults to "" 36243 func TFRecordReaderV2Container(value string) TFRecordReaderV2Attr { 36244 return func(m optionalAttr) { 36245 m["container"] = value 36246 } 36247 } 36248 36249 // TFRecordReaderV2SharedName sets the optional shared_name attribute to value. 36250 // 36251 // value: If non-empty, this reader is named in the given bucket 36252 // with this shared_name. Otherwise, the node name is used instead. 36253 // If not specified, defaults to "" 36254 func TFRecordReaderV2SharedName(value string) TFRecordReaderV2Attr { 36255 return func(m optionalAttr) { 36256 m["shared_name"] = value 36257 } 36258 } 36259 36260 // TFRecordReaderV2CompressionType sets the optional compression_type attribute to value. 36261 // If not specified, defaults to "" 36262 func TFRecordReaderV2CompressionType(value string) TFRecordReaderV2Attr { 36263 return func(m optionalAttr) { 36264 m["compression_type"] = value 36265 } 36266 } 36267 36268 // A Reader that outputs the records from a TensorFlow Records file. 36269 // 36270 // Returns The handle to reference the Reader. 36271 func TFRecordReaderV2(scope *Scope, optional ...TFRecordReaderV2Attr) (reader_handle tf.Output) { 36272 if scope.Err() != nil { 36273 return 36274 } 36275 attrs := map[string]interface{}{} 36276 for _, a := range optional { 36277 a(attrs) 36278 } 36279 opspec := tf.OpSpec{ 36280 Type: "TFRecordReaderV2", 36281 36282 Attrs: attrs, 36283 } 36284 op := scope.AddOperation(opspec) 36285 return op.Output(0) 36286 } 36287 36288 // QuantizeAndDequantizeV3Attr is an optional argument to QuantizeAndDequantizeV3. 36289 type QuantizeAndDequantizeV3Attr func(optionalAttr) 36290 36291 // QuantizeAndDequantizeV3SignedInput sets the optional signed_input attribute to value. 36292 // If not specified, defaults to true 36293 func QuantizeAndDequantizeV3SignedInput(value bool) QuantizeAndDequantizeV3Attr { 36294 return func(m optionalAttr) { 36295 m["signed_input"] = value 36296 } 36297 } 36298 36299 // QuantizeAndDequantizeV3RangeGiven sets the optional range_given attribute to value. 36300 // If not specified, defaults to true 36301 func QuantizeAndDequantizeV3RangeGiven(value bool) QuantizeAndDequantizeV3Attr { 36302 return func(m optionalAttr) { 36303 m["range_given"] = value 36304 } 36305 } 36306 36307 // Quantizes then dequantizes a tensor. 36308 // 36309 // This is almost identical to QuantizeAndDequantizeV2, except that num_bits is a 36310 // tensor, so its value can change during training. 36311 func QuantizeAndDequantizeV3(scope *Scope, input tf.Output, input_min tf.Output, input_max tf.Output, num_bits tf.Output, optional ...QuantizeAndDequantizeV3Attr) (output tf.Output) { 36312 if scope.Err() != nil { 36313 return 36314 } 36315 attrs := map[string]interface{}{} 36316 for _, a := range optional { 36317 a(attrs) 36318 } 36319 opspec := tf.OpSpec{ 36320 Type: "QuantizeAndDequantizeV3", 36321 Input: []tf.Input{ 36322 input, input_min, input_max, num_bits, 36323 }, 36324 Attrs: attrs, 36325 } 36326 op := scope.AddOperation(opspec) 36327 return op.Output(0) 36328 } 36329 36330 // IdentityReaderV2Attr is an optional argument to IdentityReaderV2. 36331 type IdentityReaderV2Attr func(optionalAttr) 36332 36333 // IdentityReaderV2Container sets the optional container attribute to value. 36334 // 36335 // value: If non-empty, this reader is placed in the given container. 36336 // Otherwise, a default container is used. 36337 // If not specified, defaults to "" 36338 func IdentityReaderV2Container(value string) IdentityReaderV2Attr { 36339 return func(m optionalAttr) { 36340 m["container"] = value 36341 } 36342 } 36343 36344 // IdentityReaderV2SharedName sets the optional shared_name attribute to value. 36345 // 36346 // value: If non-empty, this reader is named in the given bucket 36347 // with this shared_name. Otherwise, the node name is used instead. 36348 // If not specified, defaults to "" 36349 func IdentityReaderV2SharedName(value string) IdentityReaderV2Attr { 36350 return func(m optionalAttr) { 36351 m["shared_name"] = value 36352 } 36353 } 36354 36355 // A Reader that outputs the queued work as both the key and value. 36356 // 36357 // To use, enqueue strings in a Queue. ReaderRead will take the front 36358 // work string and output (work, work). 36359 // 36360 // Returns The handle to reference the Reader. 36361 func IdentityReaderV2(scope *Scope, optional ...IdentityReaderV2Attr) (reader_handle tf.Output) { 36362 if scope.Err() != nil { 36363 return 36364 } 36365 attrs := map[string]interface{}{} 36366 for _, a := range optional { 36367 a(attrs) 36368 } 36369 opspec := tf.OpSpec{ 36370 Type: "IdentityReaderV2", 36371 36372 Attrs: attrs, 36373 } 36374 op := scope.AddOperation(opspec) 36375 return op.Output(0) 36376 } 36377 36378 // ResourceApplyGradientDescentAttr is an optional argument to ResourceApplyGradientDescent. 36379 type ResourceApplyGradientDescentAttr func(optionalAttr) 36380 36381 // ResourceApplyGradientDescentUseLocking sets the optional use_locking attribute to value. 36382 // 36383 // value: If `True`, the subtraction will be protected by a lock; 36384 // otherwise the behavior is undefined, but may exhibit less contention. 36385 // If not specified, defaults to false 36386 func ResourceApplyGradientDescentUseLocking(value bool) ResourceApplyGradientDescentAttr { 36387 return func(m optionalAttr) { 36388 m["use_locking"] = value 36389 } 36390 } 36391 36392 // Update '*var' by subtracting 'alpha' * 'delta' from it. 36393 // 36394 // Arguments: 36395 // var_: Should be from a Variable(). 36396 // alpha: Scaling factor. Must be a scalar. 36397 // delta: The change. 36398 // 36399 // Returns the created operation. 36400 func ResourceApplyGradientDescent(scope *Scope, var_ tf.Output, alpha tf.Output, delta tf.Output, optional ...ResourceApplyGradientDescentAttr) (o *tf.Operation) { 36401 if scope.Err() != nil { 36402 return 36403 } 36404 attrs := map[string]interface{}{} 36405 for _, a := range optional { 36406 a(attrs) 36407 } 36408 opspec := tf.OpSpec{ 36409 Type: "ResourceApplyGradientDescent", 36410 Input: []tf.Input{ 36411 var_, alpha, delta, 36412 }, 36413 Attrs: attrs, 36414 } 36415 return scope.AddOperation(opspec) 36416 } 36417 36418 // Returns the next record (key, value pair) produced by a Reader. 36419 // 36420 // Will dequeue from the input queue if necessary (e.g. when the 36421 // Reader needs to start reading from a new file since it has finished 36422 // with the previous file). 36423 // 36424 // Arguments: 36425 // reader_handle: Handle to a Reader. 36426 // queue_handle: Handle to a Queue, with string work items. 36427 // 36428 // Returns A scalar.A scalar. 36429 func ReaderReadV2(scope *Scope, reader_handle tf.Output, queue_handle tf.Output) (key tf.Output, value tf.Output) { 36430 if scope.Err() != nil { 36431 return 36432 } 36433 opspec := tf.OpSpec{ 36434 Type: "ReaderReadV2", 36435 Input: []tf.Input{ 36436 reader_handle, queue_handle, 36437 }, 36438 } 36439 op := scope.AddOperation(opspec) 36440 return op.Output(0), op.Output(1) 36441 } 36442 36443 // Returns up to `num_records` (key, value) pairs produced by a Reader. 36444 // 36445 // Will dequeue from the input queue if necessary (e.g. when the 36446 // Reader needs to start reading from a new file since it has finished 36447 // with the previous file). 36448 // It may return less than `num_records` even before the last batch. 36449 // 36450 // Arguments: 36451 // reader_handle: Handle to a `Reader`. 36452 // queue_handle: Handle to a `Queue`, with string work items. 36453 // num_records: number of records to read from `Reader`. 36454 // 36455 // Returns A 1-D tensor.A 1-D tensor. 36456 func ReaderReadUpToV2(scope *Scope, reader_handle tf.Output, queue_handle tf.Output, num_records tf.Output) (keys tf.Output, values tf.Output) { 36457 if scope.Err() != nil { 36458 return 36459 } 36460 opspec := tf.OpSpec{ 36461 Type: "ReaderReadUpToV2", 36462 Input: []tf.Input{ 36463 reader_handle, queue_handle, num_records, 36464 }, 36465 } 36466 op := scope.AddOperation(opspec) 36467 return op.Output(0), op.Output(1) 36468 } 36469 36470 // Adds v into specified rows of x. 36471 // 36472 // Computes y = x; y[i, :] += v; return y. 36473 // 36474 // Arguments: 36475 // x: A `Tensor` of type T. 36476 // i: A vector. Indices into the left-most dimension of `x`. 36477 // v: A `Tensor` of type T. Same dimension sizes as x except the first dimension, which must be the same as i's size. 36478 // 36479 // Returns A `Tensor` of type T. An alias of `x`. The content of `y` is undefined if there are duplicates in `i`. 36480 func InplaceAdd(scope *Scope, x tf.Output, i tf.Output, v tf.Output) (y tf.Output) { 36481 if scope.Err() != nil { 36482 return 36483 } 36484 opspec := tf.OpSpec{ 36485 Type: "InplaceAdd", 36486 Input: []tf.Input{ 36487 x, i, v, 36488 }, 36489 } 36490 op := scope.AddOperation(opspec) 36491 return op.Output(0) 36492 } 36493 36494 // Restore a Reader to its initial clean state. 36495 // 36496 // Arguments: 36497 // reader_handle: Handle to a Reader. 36498 // 36499 // Returns the created operation. 36500 func ReaderResetV2(scope *Scope, reader_handle tf.Output) (o *tf.Operation) { 36501 if scope.Err() != nil { 36502 return 36503 } 36504 opspec := tf.OpSpec{ 36505 Type: "ReaderResetV2", 36506 Input: []tf.Input{ 36507 reader_handle, 36508 }, 36509 } 36510 return scope.AddOperation(opspec) 36511 } 36512 36513 // BatchAttr is an optional argument to Batch. 36514 type BatchAttr func(optionalAttr) 36515 36516 // BatchMaxEnqueuedBatches sets the optional max_enqueued_batches attribute to value. 36517 // If not specified, defaults to 10 36518 func BatchMaxEnqueuedBatches(value int64) BatchAttr { 36519 return func(m optionalAttr) { 36520 m["max_enqueued_batches"] = value 36521 } 36522 } 36523 36524 // BatchAllowedBatchSizes sets the optional allowed_batch_sizes attribute to value. 36525 // If not specified, defaults to <> 36526 func BatchAllowedBatchSizes(value []int64) BatchAttr { 36527 return func(m optionalAttr) { 36528 m["allowed_batch_sizes"] = value 36529 } 36530 } 36531 36532 // BatchContainer sets the optional container attribute to value. 36533 // If not specified, defaults to "" 36534 func BatchContainer(value string) BatchAttr { 36535 return func(m optionalAttr) { 36536 m["container"] = value 36537 } 36538 } 36539 36540 // BatchSharedName sets the optional shared_name attribute to value. 36541 // If not specified, defaults to "" 36542 func BatchSharedName(value string) BatchAttr { 36543 return func(m optionalAttr) { 36544 m["shared_name"] = value 36545 } 36546 } 36547 36548 // BatchBatchingQueue sets the optional batching_queue attribute to value. 36549 // If not specified, defaults to "" 36550 func BatchBatchingQueue(value string) BatchAttr { 36551 return func(m optionalAttr) { 36552 m["batching_queue"] = value 36553 } 36554 } 36555 36556 // Batches all input tensors nondeterministically. 36557 // 36558 // When many instances of this Op are being run concurrently with the same 36559 // container/shared_name in the same device, some will output zero-shaped Tensors 36560 // and others will output Tensors of size up to max_batch_size. 36561 // 36562 // All Tensors in in_tensors are batched together (so, for example, labels and 36563 // features should be batched with a single instance of this operation. 36564 // 36565 // Each invocation of batch emits an `id` scalar which will be used to identify 36566 // this particular invocation when doing unbatch or its gradient. 36567 // 36568 // Each op which emits a non-empty batch will also emit a non-empty batch_index 36569 // Tensor, which, is a [K, 3] matrix where each row contains the invocation's id, 36570 // start, and length of elements of each set of Tensors present in batched_tensors. 36571 // 36572 // Batched tensors are concatenated along the first dimension, and all tensors in 36573 // in_tensors must have the first dimension of the same size. 36574 // 36575 // in_tensors: The tensors to be batched. 36576 // num_batch_threads: Number of scheduling threads for processing batches of work. 36577 // Determines the number of batches processed in parallel. 36578 // max_batch_size: Batch sizes will never be bigger than this. 36579 // batch_timeout_micros: Maximum number of microseconds to wait before outputting 36580 // an incomplete batch. 36581 // allowed_batch_sizes: Optional list of allowed batch sizes. If left empty, does 36582 // nothing. Otherwise, supplies a list of batch sizes, causing the op to pad 36583 // batches up to one of those sizes. The entries must increase monotonically, and 36584 // the final entry must equal max_batch_size. 36585 // grad_timeout_micros: The timeout to use for the gradient. See Unbatch. 36586 // batched_tensors: Either empty tensors or a batch of concatenated Tensors. 36587 // batch_index: If out_tensors is non-empty, has information to invert it. 36588 // container: Controls the scope of sharing of this batch. 36589 // id: always contains a scalar with a unique ID for this invocation of Batch. 36590 // shared_name: Concurrently running instances of batch in the same device with the 36591 // same container and shared_name will batch their elements together. If left 36592 // empty, the op name will be used as the shared name. 36593 // T: the types of tensors to be batched. 36594 func Batch(scope *Scope, in_tensors []tf.Output, num_batch_threads int64, max_batch_size int64, batch_timeout_micros int64, grad_timeout_micros int64, optional ...BatchAttr) (batched_tensors []tf.Output, batch_index tf.Output, id tf.Output) { 36595 if scope.Err() != nil { 36596 return 36597 } 36598 attrs := map[string]interface{}{"num_batch_threads": num_batch_threads, "max_batch_size": max_batch_size, "batch_timeout_micros": batch_timeout_micros, "grad_timeout_micros": grad_timeout_micros} 36599 for _, a := range optional { 36600 a(attrs) 36601 } 36602 opspec := tf.OpSpec{ 36603 Type: "Batch", 36604 Input: []tf.Input{ 36605 tf.OutputList(in_tensors), 36606 }, 36607 Attrs: attrs, 36608 } 36609 op := scope.AddOperation(opspec) 36610 if scope.Err() != nil { 36611 return 36612 } 36613 var idx int 36614 var err error 36615 if batched_tensors, idx, err = makeOutputList(op, idx, "batched_tensors"); err != nil { 36616 scope.UpdateErr("Batch", err) 36617 return 36618 } 36619 batch_index = op.Output(idx) 36620 id = op.Output(idx) 36621 return batched_tensors, batch_index, id 36622 } 36623 36624 // Adjust the hue of one or more images. 36625 // 36626 // `images` is a tensor of at least 3 dimensions. The last dimension is 36627 // interpretted as channels, and must be three. 36628 // 36629 // The input image is considered in the RGB colorspace. Conceptually, the RGB 36630 // colors are first mapped into HSV. A delta is then applied all the hue values, 36631 // and then remapped back to RGB colorspace. 36632 // 36633 // Arguments: 36634 // images: Images to adjust. At least 3-D. 36635 // delta: A float delta to add to the hue. 36636 // 36637 // Returns The hue-adjusted image or images. 36638 func AdjustHue(scope *Scope, images tf.Output, delta tf.Output) (output tf.Output) { 36639 if scope.Err() != nil { 36640 return 36641 } 36642 opspec := tf.OpSpec{ 36643 Type: "AdjustHue", 36644 Input: []tf.Input{ 36645 images, delta, 36646 }, 36647 } 36648 op := scope.AddOperation(opspec) 36649 return op.Output(0) 36650 } 36651 36652 // ResizeBicubicGradAttr is an optional argument to ResizeBicubicGrad. 36653 type ResizeBicubicGradAttr func(optionalAttr) 36654 36655 // ResizeBicubicGradAlignCorners sets the optional align_corners attribute to value. 36656 // 36657 // value: If true, the centers of the 4 corner pixels of the input and grad tensors are 36658 // aligned. Defaults to false. 36659 // If not specified, defaults to false 36660 func ResizeBicubicGradAlignCorners(value bool) ResizeBicubicGradAttr { 36661 return func(m optionalAttr) { 36662 m["align_corners"] = value 36663 } 36664 } 36665 36666 // ResizeBicubicGradHalfPixelCenters sets the optional half_pixel_centers attribute to value. 36667 // If not specified, defaults to false 36668 func ResizeBicubicGradHalfPixelCenters(value bool) ResizeBicubicGradAttr { 36669 return func(m optionalAttr) { 36670 m["half_pixel_centers"] = value 36671 } 36672 } 36673 36674 // Computes the gradient of bicubic interpolation. 36675 // 36676 // Arguments: 36677 // grads: 4-D with shape `[batch, height, width, channels]`. 36678 // original_image: 4-D with shape `[batch, orig_height, orig_width, channels]`, 36679 // The image tensor that was resized. 36680 // 36681 // Returns 4-D with shape `[batch, orig_height, orig_width, channels]`. 36682 // Gradients with respect to the input image. Input image must have been 36683 // float or double. 36684 func ResizeBicubicGrad(scope *Scope, grads tf.Output, original_image tf.Output, optional ...ResizeBicubicGradAttr) (output tf.Output) { 36685 if scope.Err() != nil { 36686 return 36687 } 36688 attrs := map[string]interface{}{} 36689 for _, a := range optional { 36690 a(attrs) 36691 } 36692 opspec := tf.OpSpec{ 36693 Type: "ResizeBicubicGrad", 36694 Input: []tf.Input{ 36695 grads, original_image, 36696 }, 36697 Attrs: attrs, 36698 } 36699 op := scope.AddOperation(opspec) 36700 return op.Output(0) 36701 } 36702 36703 // ResizeNearestNeighborAttr is an optional argument to ResizeNearestNeighbor. 36704 type ResizeNearestNeighborAttr func(optionalAttr) 36705 36706 // ResizeNearestNeighborAlignCorners sets the optional align_corners attribute to value. 36707 // 36708 // value: If true, the centers of the 4 corner pixels of the input and output tensors are 36709 // aligned, preserving the values at the corner pixels. Defaults to false. 36710 // If not specified, defaults to false 36711 func ResizeNearestNeighborAlignCorners(value bool) ResizeNearestNeighborAttr { 36712 return func(m optionalAttr) { 36713 m["align_corners"] = value 36714 } 36715 } 36716 36717 // ResizeNearestNeighborHalfPixelCenters sets the optional half_pixel_centers attribute to value. 36718 // If not specified, defaults to false 36719 func ResizeNearestNeighborHalfPixelCenters(value bool) ResizeNearestNeighborAttr { 36720 return func(m optionalAttr) { 36721 m["half_pixel_centers"] = value 36722 } 36723 } 36724 36725 // Resize `images` to `size` using nearest neighbor interpolation. 36726 // 36727 // Arguments: 36728 // images: 4-D with shape `[batch, height, width, channels]`. 36729 // size: = A 1-D int32 Tensor of 2 elements: `new_height, new_width`. The 36730 // new size for the images. 36731 // 36732 // Returns 4-D with shape 36733 // `[batch, new_height, new_width, channels]`. 36734 func ResizeNearestNeighbor(scope *Scope, images tf.Output, size tf.Output, optional ...ResizeNearestNeighborAttr) (resized_images tf.Output) { 36735 if scope.Err() != nil { 36736 return 36737 } 36738 attrs := map[string]interface{}{} 36739 for _, a := range optional { 36740 a(attrs) 36741 } 36742 opspec := tf.OpSpec{ 36743 Type: "ResizeNearestNeighbor", 36744 Input: []tf.Input{ 36745 images, size, 36746 }, 36747 Attrs: attrs, 36748 } 36749 op := scope.AddOperation(opspec) 36750 return op.Output(0) 36751 } 36752 36753 // ResizeNearestNeighborGradAttr is an optional argument to ResizeNearestNeighborGrad. 36754 type ResizeNearestNeighborGradAttr func(optionalAttr) 36755 36756 // ResizeNearestNeighborGradAlignCorners sets the optional align_corners attribute to value. 36757 // 36758 // value: If true, the centers of the 4 corner pixels of the input and grad tensors are 36759 // aligned. Defaults to false. 36760 // If not specified, defaults to false 36761 func ResizeNearestNeighborGradAlignCorners(value bool) ResizeNearestNeighborGradAttr { 36762 return func(m optionalAttr) { 36763 m["align_corners"] = value 36764 } 36765 } 36766 36767 // ResizeNearestNeighborGradHalfPixelCenters sets the optional half_pixel_centers attribute to value. 36768 // If not specified, defaults to false 36769 func ResizeNearestNeighborGradHalfPixelCenters(value bool) ResizeNearestNeighborGradAttr { 36770 return func(m optionalAttr) { 36771 m["half_pixel_centers"] = value 36772 } 36773 } 36774 36775 // Computes the gradient of nearest neighbor interpolation. 36776 // 36777 // Arguments: 36778 // grads: 4-D with shape `[batch, height, width, channels]`. 36779 // size: = A 1-D int32 Tensor of 2 elements: `orig_height, orig_width`. The 36780 // original input size. 36781 // 36782 // Returns 4-D with shape `[batch, orig_height, orig_width, channels]`. Gradients 36783 // with respect to the input image. 36784 func ResizeNearestNeighborGrad(scope *Scope, grads tf.Output, size tf.Output, optional ...ResizeNearestNeighborGradAttr) (output tf.Output) { 36785 if scope.Err() != nil { 36786 return 36787 } 36788 attrs := map[string]interface{}{} 36789 for _, a := range optional { 36790 a(attrs) 36791 } 36792 opspec := tf.OpSpec{ 36793 Type: "ResizeNearestNeighborGrad", 36794 Input: []tf.Input{ 36795 grads, size, 36796 }, 36797 Attrs: attrs, 36798 } 36799 op := scope.AddOperation(opspec) 36800 return op.Output(0) 36801 } 36802 36803 // ExtractJpegShapeAttr is an optional argument to ExtractJpegShape. 36804 type ExtractJpegShapeAttr func(optionalAttr) 36805 36806 // ExtractJpegShapeOutputType sets the optional output_type attribute to value. 36807 // 36808 // value: (Optional) The output type of the operation (int32 or int64). 36809 // Defaults to int32. 36810 // If not specified, defaults to DT_INT32 36811 func ExtractJpegShapeOutputType(value tf.DataType) ExtractJpegShapeAttr { 36812 return func(m optionalAttr) { 36813 m["output_type"] = value 36814 } 36815 } 36816 36817 // Extract the shape information of a JPEG-encoded image. 36818 // 36819 // This op only parses the image header, so it is much faster than DecodeJpeg. 36820 // 36821 // Arguments: 36822 // contents: 0-D. The JPEG-encoded image. 36823 // 36824 // Returns 1-D. The image shape with format [height, width, channels]. 36825 func ExtractJpegShape(scope *Scope, contents tf.Output, optional ...ExtractJpegShapeAttr) (image_shape tf.Output) { 36826 if scope.Err() != nil { 36827 return 36828 } 36829 attrs := map[string]interface{}{} 36830 for _, a := range optional { 36831 a(attrs) 36832 } 36833 opspec := tf.OpSpec{ 36834 Type: "ExtractJpegShape", 36835 Input: []tf.Input{ 36836 contents, 36837 }, 36838 Attrs: attrs, 36839 } 36840 op := scope.AddOperation(opspec) 36841 return op.Output(0) 36842 } 36843 36844 // DecodePngAttr is an optional argument to DecodePng. 36845 type DecodePngAttr func(optionalAttr) 36846 36847 // DecodePngChannels sets the optional channels attribute to value. 36848 // 36849 // value: Number of color channels for the decoded image. 36850 // If not specified, defaults to 0 36851 func DecodePngChannels(value int64) DecodePngAttr { 36852 return func(m optionalAttr) { 36853 m["channels"] = value 36854 } 36855 } 36856 36857 // DecodePngDtype sets the optional dtype attribute to value. 36858 // If not specified, defaults to DT_UINT8 36859 func DecodePngDtype(value tf.DataType) DecodePngAttr { 36860 return func(m optionalAttr) { 36861 m["dtype"] = value 36862 } 36863 } 36864 36865 // Decode a PNG-encoded image to a uint8 or uint16 tensor. 36866 // 36867 // The attr `channels` indicates the desired number of color channels for the 36868 // decoded image. 36869 // 36870 // Accepted values are: 36871 // 36872 // * 0: Use the number of channels in the PNG-encoded image. 36873 // * 1: output a grayscale image. 36874 // * 3: output an RGB image. 36875 // * 4: output an RGBA image. 36876 // 36877 // If needed, the PNG-encoded image is transformed to match the requested number 36878 // of color channels. 36879 // 36880 // This op also supports decoding JPEGs and non-animated GIFs since the interface 36881 // is the same, though it is cleaner to use `tf.image.decode_image`. 36882 // 36883 // Arguments: 36884 // contents: 0-D. The PNG-encoded image. 36885 // 36886 // Returns 3-D with shape `[height, width, channels]`. 36887 func DecodePng(scope *Scope, contents tf.Output, optional ...DecodePngAttr) (image tf.Output) { 36888 if scope.Err() != nil { 36889 return 36890 } 36891 attrs := map[string]interface{}{} 36892 for _, a := range optional { 36893 a(attrs) 36894 } 36895 opspec := tf.OpSpec{ 36896 Type: "DecodePng", 36897 Input: []tf.Input{ 36898 contents, 36899 }, 36900 Attrs: attrs, 36901 } 36902 op := scope.AddOperation(opspec) 36903 return op.Output(0) 36904 } 36905 36906 // Decode the first frame of a GIF-encoded image to a uint8 tensor. 36907 // 36908 // GIF with frame or transparency compression are not supported 36909 // convert animated GIF from compressed to uncompressed by: 36910 // 36911 // convert $src.gif -coalesce $dst.gif 36912 // 36913 // This op also supports decoding JPEGs and PNGs, though it is cleaner to use 36914 // `tf.image.decode_image`. 36915 // 36916 // Arguments: 36917 // contents: 0-D. The GIF-encoded image. 36918 // 36919 // Returns 4-D with shape `[num_frames, height, width, 3]`. RGB order 36920 func DecodeGif(scope *Scope, contents tf.Output) (image tf.Output) { 36921 if scope.Err() != nil { 36922 return 36923 } 36924 opspec := tf.OpSpec{ 36925 Type: "DecodeGif", 36926 Input: []tf.Input{ 36927 contents, 36928 }, 36929 } 36930 op := scope.AddOperation(opspec) 36931 return op.Output(0) 36932 } 36933 36934 // LearnedUnigramCandidateSamplerAttr is an optional argument to LearnedUnigramCandidateSampler. 36935 type LearnedUnigramCandidateSamplerAttr func(optionalAttr) 36936 36937 // LearnedUnigramCandidateSamplerSeed sets the optional seed attribute to value. 36938 // 36939 // value: If either seed or seed2 are set to be non-zero, the random number 36940 // generator is seeded by the given seed. Otherwise, it is seeded by a 36941 // random seed. 36942 // If not specified, defaults to 0 36943 func LearnedUnigramCandidateSamplerSeed(value int64) LearnedUnigramCandidateSamplerAttr { 36944 return func(m optionalAttr) { 36945 m["seed"] = value 36946 } 36947 } 36948 36949 // LearnedUnigramCandidateSamplerSeed2 sets the optional seed2 attribute to value. 36950 // 36951 // value: An second seed to avoid seed collision. 36952 // If not specified, defaults to 0 36953 func LearnedUnigramCandidateSamplerSeed2(value int64) LearnedUnigramCandidateSamplerAttr { 36954 return func(m optionalAttr) { 36955 m["seed2"] = value 36956 } 36957 } 36958 36959 // Generates labels for candidate sampling with a learned unigram distribution. 36960 // 36961 // See explanations of candidate sampling and the data formats at 36962 // go/candidate-sampling. 36963 // 36964 // For each batch, this op picks a single set of sampled candidate labels. 36965 // 36966 // The advantages of sampling candidates per-batch are simplicity and the 36967 // possibility of efficient dense matrix multiplication. The disadvantage is that 36968 // the sampled candidates must be chosen independently of the context and of the 36969 // true labels. 36970 // 36971 // Arguments: 36972 // true_classes: A batch_size * num_true matrix, in which each row contains the 36973 // IDs of the num_true target_classes in the corresponding original label. 36974 // num_true: Number of true labels per context. 36975 // num_sampled: Number of candidates to randomly sample. 36976 // unique: If unique is true, we sample with rejection, so that all sampled 36977 // candidates in a batch are unique. This requires some approximation to 36978 // estimate the post-rejection sampling probabilities. 36979 // range_max: The sampler will sample integers from the interval [0, range_max). 36980 // 36981 // Returns A vector of length num_sampled, in which each element is 36982 // the ID of a sampled candidate.A batch_size * num_true matrix, representing 36983 // the number of times each candidate is expected to occur in a batch 36984 // of sampled candidates. If unique=true, then this is a probability.A vector of length num_sampled, for each sampled 36985 // candidate representing the number of times the candidate is expected 36986 // to occur in a batch of sampled candidates. If unique=true, then this is a 36987 // probability. 36988 func LearnedUnigramCandidateSampler(scope *Scope, true_classes tf.Output, num_true int64, num_sampled int64, unique bool, range_max int64, optional ...LearnedUnigramCandidateSamplerAttr) (sampled_candidates tf.Output, true_expected_count tf.Output, sampled_expected_count tf.Output) { 36989 if scope.Err() != nil { 36990 return 36991 } 36992 attrs := map[string]interface{}{"num_true": num_true, "num_sampled": num_sampled, "unique": unique, "range_max": range_max} 36993 for _, a := range optional { 36994 a(attrs) 36995 } 36996 opspec := tf.OpSpec{ 36997 Type: "LearnedUnigramCandidateSampler", 36998 Input: []tf.Input{ 36999 true_classes, 37000 }, 37001 Attrs: attrs, 37002 } 37003 op := scope.AddOperation(opspec) 37004 return op.Output(0), op.Output(1), op.Output(2) 37005 } 37006 37007 // RandomShuffleQueueV2Attr is an optional argument to RandomShuffleQueueV2. 37008 type RandomShuffleQueueV2Attr func(optionalAttr) 37009 37010 // RandomShuffleQueueV2Shapes sets the optional shapes attribute to value. 37011 // 37012 // value: The shape of each component in a value. The length of this attr must 37013 // be either 0 or the same as the length of component_types. If the length of 37014 // this attr is 0, the shapes of queue elements are not constrained, and 37015 // only one element may be dequeued at a time. 37016 // If not specified, defaults to <> 37017 // 37018 // REQUIRES: len(value) >= 0 37019 func RandomShuffleQueueV2Shapes(value []tf.Shape) RandomShuffleQueueV2Attr { 37020 return func(m optionalAttr) { 37021 m["shapes"] = value 37022 } 37023 } 37024 37025 // RandomShuffleQueueV2Capacity sets the optional capacity attribute to value. 37026 // 37027 // value: The upper bound on the number of elements in this queue. 37028 // Negative numbers mean no limit. 37029 // If not specified, defaults to -1 37030 func RandomShuffleQueueV2Capacity(value int64) RandomShuffleQueueV2Attr { 37031 return func(m optionalAttr) { 37032 m["capacity"] = value 37033 } 37034 } 37035 37036 // RandomShuffleQueueV2MinAfterDequeue sets the optional min_after_dequeue attribute to value. 37037 // 37038 // value: Dequeue will block unless there would be this 37039 // many elements after the dequeue or the queue is closed. This 37040 // ensures a minimum level of mixing of elements. 37041 // If not specified, defaults to 0 37042 func RandomShuffleQueueV2MinAfterDequeue(value int64) RandomShuffleQueueV2Attr { 37043 return func(m optionalAttr) { 37044 m["min_after_dequeue"] = value 37045 } 37046 } 37047 37048 // RandomShuffleQueueV2Seed sets the optional seed attribute to value. 37049 // 37050 // value: If either seed or seed2 is set to be non-zero, the random number 37051 // generator is seeded by the given seed. Otherwise, a random seed is used. 37052 // If not specified, defaults to 0 37053 func RandomShuffleQueueV2Seed(value int64) RandomShuffleQueueV2Attr { 37054 return func(m optionalAttr) { 37055 m["seed"] = value 37056 } 37057 } 37058 37059 // RandomShuffleQueueV2Seed2 sets the optional seed2 attribute to value. 37060 // 37061 // value: A second seed to avoid seed collision. 37062 // If not specified, defaults to 0 37063 func RandomShuffleQueueV2Seed2(value int64) RandomShuffleQueueV2Attr { 37064 return func(m optionalAttr) { 37065 m["seed2"] = value 37066 } 37067 } 37068 37069 // RandomShuffleQueueV2Container sets the optional container attribute to value. 37070 // 37071 // value: If non-empty, this queue is placed in the given container. 37072 // Otherwise, a default container is used. 37073 // If not specified, defaults to "" 37074 func RandomShuffleQueueV2Container(value string) RandomShuffleQueueV2Attr { 37075 return func(m optionalAttr) { 37076 m["container"] = value 37077 } 37078 } 37079 37080 // RandomShuffleQueueV2SharedName sets the optional shared_name attribute to value. 37081 // 37082 // value: If non-empty, this queue will be shared under the given name 37083 // across multiple sessions. 37084 // If not specified, defaults to "" 37085 func RandomShuffleQueueV2SharedName(value string) RandomShuffleQueueV2Attr { 37086 return func(m optionalAttr) { 37087 m["shared_name"] = value 37088 } 37089 } 37090 37091 // A queue that randomizes the order of elements. 37092 // 37093 // Arguments: 37094 // component_types: The type of each component in a value. 37095 // 37096 // Returns The handle to the queue. 37097 func RandomShuffleQueueV2(scope *Scope, component_types []tf.DataType, optional ...RandomShuffleQueueV2Attr) (handle tf.Output) { 37098 if scope.Err() != nil { 37099 return 37100 } 37101 attrs := map[string]interface{}{"component_types": component_types} 37102 for _, a := range optional { 37103 a(attrs) 37104 } 37105 opspec := tf.OpSpec{ 37106 Type: "RandomShuffleQueueV2", 37107 37108 Attrs: attrs, 37109 } 37110 op := scope.AddOperation(opspec) 37111 return op.Output(0) 37112 } 37113 37114 // SerializeSparseAttr is an optional argument to SerializeSparse. 37115 type SerializeSparseAttr func(optionalAttr) 37116 37117 // SerializeSparseOutType sets the optional out_type attribute to value. 37118 // 37119 // value: The `dtype` to use for serialization; the supported types are `string` 37120 // (default) and `variant`. 37121 // If not specified, defaults to DT_STRING 37122 func SerializeSparseOutType(value tf.DataType) SerializeSparseAttr { 37123 return func(m optionalAttr) { 37124 m["out_type"] = value 37125 } 37126 } 37127 37128 // Serialize a `SparseTensor` into a `[3]` `Tensor` object. 37129 // 37130 // Arguments: 37131 // sparse_indices: 2-D. The `indices` of the `SparseTensor`. 37132 // sparse_values: 1-D. The `values` of the `SparseTensor`. 37133 // sparse_shape: 1-D. The `shape` of the `SparseTensor`. 37134 func SerializeSparse(scope *Scope, sparse_indices tf.Output, sparse_values tf.Output, sparse_shape tf.Output, optional ...SerializeSparseAttr) (serialized_sparse tf.Output) { 37135 if scope.Err() != nil { 37136 return 37137 } 37138 attrs := map[string]interface{}{} 37139 for _, a := range optional { 37140 a(attrs) 37141 } 37142 opspec := tf.OpSpec{ 37143 Type: "SerializeSparse", 37144 Input: []tf.Input{ 37145 sparse_indices, sparse_values, sparse_shape, 37146 }, 37147 Attrs: attrs, 37148 } 37149 op := scope.AddOperation(opspec) 37150 return op.Output(0) 37151 } 37152 37153 // Draw bounding boxes on a batch of images. 37154 // 37155 // Outputs a copy of `images` but draws on top of the pixels zero or more bounding 37156 // boxes specified by the locations in `boxes`. The coordinates of the each 37157 // bounding box in `boxes` are encoded as `[y_min, x_min, y_max, x_max]`. The 37158 // bounding box coordinates are floats in `[0.0, 1.0]` relative to the width and 37159 // height of the underlying image. 37160 // 37161 // For example, if an image is 100 x 200 pixels (height x width) and the bounding 37162 // box is `[0.1, 0.2, 0.5, 0.9]`, the upper-left and bottom-right coordinates of 37163 // the bounding box will be `(40, 10)` to `(180, 50)` (in (x,y) coordinates). 37164 // 37165 // Parts of the bounding box may fall outside the image. 37166 // 37167 // Arguments: 37168 // images: 4-D with shape `[batch, height, width, depth]`. A batch of images. 37169 // boxes: 3-D with shape `[batch, num_bounding_boxes, 4]` containing bounding 37170 // boxes. 37171 // 37172 // Returns 4-D with the same shape as `images`. The batch of input images with 37173 // bounding boxes drawn on the images. 37174 func DrawBoundingBoxes(scope *Scope, images tf.Output, boxes tf.Output) (output tf.Output) { 37175 if scope.Err() != nil { 37176 return 37177 } 37178 opspec := tf.OpSpec{ 37179 Type: "DrawBoundingBoxes", 37180 Input: []tf.Input{ 37181 images, boxes, 37182 }, 37183 } 37184 op := scope.AddOperation(opspec) 37185 return op.Output(0) 37186 } 37187 37188 // SampleDistortedBoundingBoxV2Attr is an optional argument to SampleDistortedBoundingBoxV2. 37189 type SampleDistortedBoundingBoxV2Attr func(optionalAttr) 37190 37191 // SampleDistortedBoundingBoxV2Seed sets the optional seed attribute to value. 37192 // 37193 // value: If either `seed` or `seed2` are set to non-zero, the random number 37194 // generator is seeded by the given `seed`. Otherwise, it is seeded by a random 37195 // seed. 37196 // If not specified, defaults to 0 37197 func SampleDistortedBoundingBoxV2Seed(value int64) SampleDistortedBoundingBoxV2Attr { 37198 return func(m optionalAttr) { 37199 m["seed"] = value 37200 } 37201 } 37202 37203 // SampleDistortedBoundingBoxV2Seed2 sets the optional seed2 attribute to value. 37204 // 37205 // value: A second seed to avoid seed collision. 37206 // If not specified, defaults to 0 37207 func SampleDistortedBoundingBoxV2Seed2(value int64) SampleDistortedBoundingBoxV2Attr { 37208 return func(m optionalAttr) { 37209 m["seed2"] = value 37210 } 37211 } 37212 37213 // SampleDistortedBoundingBoxV2AspectRatioRange sets the optional aspect_ratio_range attribute to value. 37214 // 37215 // value: The cropped area of the image must have an aspect ratio = 37216 // width / height within this range. 37217 // If not specified, defaults to <f:0.75 f:1.33 > 37218 func SampleDistortedBoundingBoxV2AspectRatioRange(value []float32) SampleDistortedBoundingBoxV2Attr { 37219 return func(m optionalAttr) { 37220 m["aspect_ratio_range"] = value 37221 } 37222 } 37223 37224 // SampleDistortedBoundingBoxV2AreaRange sets the optional area_range attribute to value. 37225 // 37226 // value: The cropped area of the image must contain a fraction of the 37227 // supplied image within this range. 37228 // If not specified, defaults to <f:0.05 f:1 > 37229 func SampleDistortedBoundingBoxV2AreaRange(value []float32) SampleDistortedBoundingBoxV2Attr { 37230 return func(m optionalAttr) { 37231 m["area_range"] = value 37232 } 37233 } 37234 37235 // SampleDistortedBoundingBoxV2MaxAttempts sets the optional max_attempts attribute to value. 37236 // 37237 // value: Number of attempts at generating a cropped region of the image 37238 // of the specified constraints. After `max_attempts` failures, return the entire 37239 // image. 37240 // If not specified, defaults to 100 37241 func SampleDistortedBoundingBoxV2MaxAttempts(value int64) SampleDistortedBoundingBoxV2Attr { 37242 return func(m optionalAttr) { 37243 m["max_attempts"] = value 37244 } 37245 } 37246 37247 // SampleDistortedBoundingBoxV2UseImageIfNoBoundingBoxes sets the optional use_image_if_no_bounding_boxes attribute to value. 37248 // 37249 // value: Controls behavior if no bounding boxes supplied. 37250 // If true, assume an implicit bounding box covering the whole input. If false, 37251 // raise an error. 37252 // If not specified, defaults to false 37253 func SampleDistortedBoundingBoxV2UseImageIfNoBoundingBoxes(value bool) SampleDistortedBoundingBoxV2Attr { 37254 return func(m optionalAttr) { 37255 m["use_image_if_no_bounding_boxes"] = value 37256 } 37257 } 37258 37259 // Generate a single randomly distorted bounding box for an image. 37260 // 37261 // Bounding box annotations are often supplied in addition to ground-truth labels 37262 // in image recognition or object localization tasks. A common technique for 37263 // training such a system is to randomly distort an image while preserving 37264 // its content, i.e. *data augmentation*. This Op outputs a randomly distorted 37265 // localization of an object, i.e. bounding box, given an `image_size`, 37266 // `bounding_boxes` and a series of constraints. 37267 // 37268 // The output of this Op is a single bounding box that may be used to crop the 37269 // original image. The output is returned as 3 tensors: `begin`, `size` and 37270 // `bboxes`. The first 2 tensors can be fed directly into `tf.slice` to crop the 37271 // image. The latter may be supplied to `tf.image.draw_bounding_boxes` to visualize 37272 // what the bounding box looks like. 37273 // 37274 // Bounding boxes are supplied and returned as `[y_min, x_min, y_max, x_max]`. The 37275 // bounding box coordinates are floats in `[0.0, 1.0]` relative to the width and 37276 // height of the underlying image. 37277 // 37278 // For example, 37279 // 37280 // ```python 37281 // # Generate a single distorted bounding box. 37282 // begin, size, bbox_for_draw = tf.image.sample_distorted_bounding_box( 37283 // tf.shape(image), 37284 // bounding_boxes=bounding_boxes) 37285 // 37286 // # Draw the bounding box in an image summary. 37287 // image_with_box = tf.image.draw_bounding_boxes(tf.expand_dims(image, 0), 37288 // bbox_for_draw) 37289 // tf.summary.image('images_with_box', image_with_box) 37290 // 37291 // # Employ the bounding box to distort the image. 37292 // distorted_image = tf.slice(image, begin, size) 37293 // ``` 37294 // 37295 // Note that if no bounding box information is available, setting 37296 // `use_image_if_no_bounding_boxes = true` will assume there is a single implicit 37297 // bounding box covering the whole image. If `use_image_if_no_bounding_boxes` is 37298 // false and no bounding boxes are supplied, an error is raised. 37299 // 37300 // Arguments: 37301 // image_size: 1-D, containing `[height, width, channels]`. 37302 // bounding_boxes: 3-D with shape `[batch, N, 4]` describing the N bounding boxes 37303 // associated with the image. 37304 // min_object_covered: The cropped area of the image must contain at least this 37305 // fraction of any bounding box supplied. The value of this parameter should be 37306 // non-negative. In the case of 0, the cropped area does not need to overlap 37307 // any of the bounding boxes supplied. 37308 // 37309 // Returns 1-D, containing `[offset_height, offset_width, 0]`. Provide as input to 37310 // `tf.slice`.1-D, containing `[target_height, target_width, -1]`. Provide as input to 37311 // `tf.slice`.3-D with shape `[1, 1, 4]` containing the distorted bounding box. 37312 // Provide as input to `tf.image.draw_bounding_boxes`. 37313 func SampleDistortedBoundingBoxV2(scope *Scope, image_size tf.Output, bounding_boxes tf.Output, min_object_covered tf.Output, optional ...SampleDistortedBoundingBoxV2Attr) (begin tf.Output, size tf.Output, bboxes tf.Output) { 37314 if scope.Err() != nil { 37315 return 37316 } 37317 attrs := map[string]interface{}{} 37318 for _, a := range optional { 37319 a(attrs) 37320 } 37321 opspec := tf.OpSpec{ 37322 Type: "SampleDistortedBoundingBoxV2", 37323 Input: []tf.Input{ 37324 image_size, bounding_boxes, min_object_covered, 37325 }, 37326 Attrs: attrs, 37327 } 37328 op := scope.AddOperation(opspec) 37329 return op.Output(0), op.Output(1), op.Output(2) 37330 } 37331 37332 // Computes requantization range per channel. 37333 // 37334 // Arguments: 37335 // input: The original input tensor. 37336 // input_min: The minimum value of the input tensor 37337 // input_max: The maximum value of the input tensor. 37338 // clip_value_max: The maximum value of the output that needs to be clipped. 37339 // Example: set this to 6 for Relu6. 37340 // 37341 // Returns The minimum value of the final output tensorThe maximum value of the final output tensor. 37342 func RequantizationRangePerChannel(scope *Scope, input tf.Output, input_min tf.Output, input_max tf.Output, clip_value_max float32) (output_min tf.Output, output_max tf.Output) { 37343 if scope.Err() != nil { 37344 return 37345 } 37346 attrs := map[string]interface{}{"clip_value_max": clip_value_max} 37347 opspec := tf.OpSpec{ 37348 Type: "RequantizationRangePerChannel", 37349 Input: []tf.Input{ 37350 input, input_min, input_max, 37351 }, 37352 Attrs: attrs, 37353 } 37354 op := scope.AddOperation(opspec) 37355 return op.Output(0), op.Output(1) 37356 } 37357 37358 // ExtractGlimpseAttr is an optional argument to ExtractGlimpse. 37359 type ExtractGlimpseAttr func(optionalAttr) 37360 37361 // ExtractGlimpseCentered sets the optional centered attribute to value. 37362 // 37363 // value: indicates if the offset coordinates are centered relative to 37364 // the image, in which case the (0, 0) offset is relative to the center 37365 // of the input images. If false, the (0,0) offset corresponds to the 37366 // upper left corner of the input images. 37367 // If not specified, defaults to true 37368 func ExtractGlimpseCentered(value bool) ExtractGlimpseAttr { 37369 return func(m optionalAttr) { 37370 m["centered"] = value 37371 } 37372 } 37373 37374 // ExtractGlimpseNormalized sets the optional normalized attribute to value. 37375 // 37376 // value: indicates if the offset coordinates are normalized. 37377 // If not specified, defaults to true 37378 func ExtractGlimpseNormalized(value bool) ExtractGlimpseAttr { 37379 return func(m optionalAttr) { 37380 m["normalized"] = value 37381 } 37382 } 37383 37384 // ExtractGlimpseUniformNoise sets the optional uniform_noise attribute to value. 37385 // 37386 // value: indicates if the noise should be generated using a 37387 // uniform distribution or a Gaussian distribution. 37388 // If not specified, defaults to true 37389 func ExtractGlimpseUniformNoise(value bool) ExtractGlimpseAttr { 37390 return func(m optionalAttr) { 37391 m["uniform_noise"] = value 37392 } 37393 } 37394 37395 // ExtractGlimpseNoise sets the optional noise attribute to value. 37396 // 37397 // value: indicates if the noise should `uniform`, `gaussian`, or 37398 // `zero`. The default is `uniform` which means the the noise type 37399 // will be decided by `uniform_noise`. 37400 // If not specified, defaults to "uniform" 37401 func ExtractGlimpseNoise(value string) ExtractGlimpseAttr { 37402 return func(m optionalAttr) { 37403 m["noise"] = value 37404 } 37405 } 37406 37407 // Extracts a glimpse from the input tensor. 37408 // 37409 // Returns a set of windows called glimpses extracted at location 37410 // `offsets` from the input tensor. If the windows only partially 37411 // overlaps the inputs, the non overlapping areas will be filled with 37412 // random noise. 37413 // 37414 // The result is a 4-D tensor of shape `[batch_size, glimpse_height, 37415 // glimpse_width, channels]`. The channels and batch dimensions are the 37416 // same as that of the input tensor. The height and width of the output 37417 // windows are specified in the `size` parameter. 37418 // 37419 // The argument `normalized` and `centered` controls how the windows are built: 37420 // 37421 // * If the coordinates are normalized but not centered, 0.0 and 1.0 37422 // correspond to the minimum and maximum of each height and width 37423 // dimension. 37424 // * If the coordinates are both normalized and centered, they range from 37425 // -1.0 to 1.0. The coordinates (-1.0, -1.0) correspond to the upper 37426 // left corner, the lower right corner is located at (1.0, 1.0) and the 37427 // center is at (0, 0). 37428 // * If the coordinates are not normalized they are interpreted as 37429 // numbers of pixels. 37430 // 37431 // Arguments: 37432 // input: A 4-D float tensor of shape `[batch_size, height, width, channels]`. 37433 // size: A 1-D tensor of 2 elements containing the size of the glimpses 37434 // to extract. The glimpse height must be specified first, following 37435 // by the glimpse width. 37436 // offsets: A 2-D integer tensor of shape `[batch_size, 2]` containing 37437 // the y, x locations of the center of each window. 37438 // 37439 // Returns A tensor representing the glimpses `[batch_size, 37440 // glimpse_height, glimpse_width, channels]`. 37441 func ExtractGlimpse(scope *Scope, input tf.Output, size tf.Output, offsets tf.Output, optional ...ExtractGlimpseAttr) (glimpse tf.Output) { 37442 if scope.Err() != nil { 37443 return 37444 } 37445 attrs := map[string]interface{}{} 37446 for _, a := range optional { 37447 a(attrs) 37448 } 37449 opspec := tf.OpSpec{ 37450 Type: "ExtractGlimpse", 37451 Input: []tf.Input{ 37452 input, size, offsets, 37453 }, 37454 Attrs: attrs, 37455 } 37456 op := scope.AddOperation(opspec) 37457 return op.Output(0) 37458 } 37459 37460 // A container for an iterator resource. 37461 // 37462 // Returns A handle to the iterator that can be passed to a "MakeIterator" 37463 // or "IteratorGetNext" op. 37464 func Iterator(scope *Scope, shared_name string, container string, output_types []tf.DataType, output_shapes []tf.Shape) (handle tf.Output) { 37465 if scope.Err() != nil { 37466 return 37467 } 37468 attrs := map[string]interface{}{"shared_name": shared_name, "container": container, "output_types": output_types, "output_shapes": output_shapes} 37469 opspec := tf.OpSpec{ 37470 Type: "Iterator", 37471 37472 Attrs: attrs, 37473 } 37474 op := scope.AddOperation(opspec) 37475 return op.Output(0) 37476 } 37477 37478 // TensorForestTreeResourceHandleOpAttr is an optional argument to TensorForestTreeResourceHandleOp. 37479 type TensorForestTreeResourceHandleOpAttr func(optionalAttr) 37480 37481 // TensorForestTreeResourceHandleOpContainer sets the optional container attribute to value. 37482 // If not specified, defaults to "" 37483 func TensorForestTreeResourceHandleOpContainer(value string) TensorForestTreeResourceHandleOpAttr { 37484 return func(m optionalAttr) { 37485 m["container"] = value 37486 } 37487 } 37488 37489 // TensorForestTreeResourceHandleOpSharedName sets the optional shared_name attribute to value. 37490 // If not specified, defaults to "" 37491 func TensorForestTreeResourceHandleOpSharedName(value string) TensorForestTreeResourceHandleOpAttr { 37492 return func(m optionalAttr) { 37493 m["shared_name"] = value 37494 } 37495 } 37496 37497 // Creates a handle to a TensorForestTreeResource 37498 func TensorForestTreeResourceHandleOp(scope *Scope, optional ...TensorForestTreeResourceHandleOpAttr) (resource tf.Output) { 37499 if scope.Err() != nil { 37500 return 37501 } 37502 attrs := map[string]interface{}{} 37503 for _, a := range optional { 37504 a(attrs) 37505 } 37506 opspec := tf.OpSpec{ 37507 Type: "TensorForestTreeResourceHandleOp", 37508 37509 Attrs: attrs, 37510 } 37511 op := scope.AddOperation(opspec) 37512 return op.Output(0) 37513 } 37514 37515 // CropAndResizeGradImageAttr is an optional argument to CropAndResizeGradImage. 37516 type CropAndResizeGradImageAttr func(optionalAttr) 37517 37518 // CropAndResizeGradImageMethod sets the optional method attribute to value. 37519 // 37520 // value: A string specifying the interpolation method. Only 'bilinear' is 37521 // supported for now. 37522 // If not specified, defaults to "bilinear" 37523 func CropAndResizeGradImageMethod(value string) CropAndResizeGradImageAttr { 37524 return func(m optionalAttr) { 37525 m["method"] = value 37526 } 37527 } 37528 37529 // Computes the gradient of the crop_and_resize op wrt the input image tensor. 37530 // 37531 // Arguments: 37532 // grads: A 4-D tensor of shape `[num_boxes, crop_height, crop_width, depth]`. 37533 // boxes: A 2-D tensor of shape `[num_boxes, 4]`. The `i`-th row of the tensor 37534 // specifies the coordinates of a box in the `box_ind[i]` image and is specified 37535 // in normalized coordinates `[y1, x1, y2, x2]`. A normalized coordinate value of 37536 // `y` is mapped to the image coordinate at `y * (image_height - 1)`, so as the 37537 // `[0, 1]` interval of normalized image height is mapped to 37538 // `[0, image_height - 1] in image height coordinates. We do allow y1 > y2, in 37539 // which case the sampled crop is an up-down flipped version of the original 37540 // image. The width dimension is treated similarly. Normalized coordinates 37541 // outside the `[0, 1]` range are allowed, in which case we use 37542 // `extrapolation_value` to extrapolate the input image values. 37543 // box_ind: A 1-D tensor of shape `[num_boxes]` with int32 values in `[0, batch)`. 37544 // The value of `box_ind[i]` specifies the image that the `i`-th box refers to. 37545 // image_size: A 1-D tensor with value `[batch, image_height, image_width, depth]` 37546 // containing the original image size. Both `image_height` and `image_width` need 37547 // to be positive. 37548 // 37549 // 37550 // Returns A 4-D tensor of shape `[batch, image_height, image_width, depth]`. 37551 func CropAndResizeGradImage(scope *Scope, grads tf.Output, boxes tf.Output, box_ind tf.Output, image_size tf.Output, T tf.DataType, optional ...CropAndResizeGradImageAttr) (output tf.Output) { 37552 if scope.Err() != nil { 37553 return 37554 } 37555 attrs := map[string]interface{}{"T": T} 37556 for _, a := range optional { 37557 a(attrs) 37558 } 37559 opspec := tf.OpSpec{ 37560 Type: "CropAndResizeGradImage", 37561 Input: []tf.Input{ 37562 grads, boxes, box_ind, image_size, 37563 }, 37564 Attrs: attrs, 37565 } 37566 op := scope.AddOperation(opspec) 37567 return op.Output(0) 37568 } 37569 37570 // ShuffleDatasetAttr is an optional argument to ShuffleDataset. 37571 type ShuffleDatasetAttr func(optionalAttr) 37572 37573 // ShuffleDatasetReshuffleEachIteration sets the optional reshuffle_each_iteration attribute to value. 37574 // 37575 // value: If true, each iterator over this dataset will be given 37576 // a different pseudorandomly generated seed, based on a sequence seeded by the 37577 // `seed` and `seed2` inputs. If false, each iterator will be given the same 37578 // seed, and repeated iteration over this dataset will yield the exact same 37579 // sequence of results. 37580 // If not specified, defaults to true 37581 func ShuffleDatasetReshuffleEachIteration(value bool) ShuffleDatasetAttr { 37582 return func(m optionalAttr) { 37583 m["reshuffle_each_iteration"] = value 37584 } 37585 } 37586 37587 // Creates a dataset that shuffles elements from `input_dataset` pseudorandomly. 37588 // 37589 // Arguments: 37590 // 37591 // buffer_size: The number of output elements to buffer in an iterator over 37592 // this dataset. Compare with the `min_after_dequeue` attr when creating a 37593 // `RandomShuffleQueue`. 37594 // seed: A scalar seed for the random number generator. If either `seed` or 37595 // `seed2` is set to be non-zero, the random number generator is seeded 37596 // by the given seed. Otherwise, a random seed is used. 37597 // seed2: A second scalar seed to avoid seed collision. 37598 // 37599 // 37600 func ShuffleDataset(scope *Scope, input_dataset tf.Output, buffer_size tf.Output, seed tf.Output, seed2 tf.Output, output_types []tf.DataType, output_shapes []tf.Shape, optional ...ShuffleDatasetAttr) (handle tf.Output) { 37601 if scope.Err() != nil { 37602 return 37603 } 37604 attrs := map[string]interface{}{"output_types": output_types, "output_shapes": output_shapes} 37605 for _, a := range optional { 37606 a(attrs) 37607 } 37608 opspec := tf.OpSpec{ 37609 Type: "ShuffleDataset", 37610 Input: []tf.Input{ 37611 input_dataset, buffer_size, seed, seed2, 37612 }, 37613 Attrs: attrs, 37614 } 37615 op := scope.AddOperation(opspec) 37616 return op.Output(0) 37617 } 37618 37619 // 3D fast Fourier transform. 37620 // 37621 // Computes the 3-dimensional discrete Fourier transform over the inner-most 3 37622 // dimensions of `input`. 37623 // 37624 // Arguments: 37625 // input: A complex64 tensor. 37626 // 37627 // Returns A complex64 tensor of the same shape as `input`. The inner-most 3 37628 // dimensions of `input` are replaced with their 3D Fourier transform. 37629 // 37630 // @compatibility(numpy) 37631 // Equivalent to np.fft.fftn with 3 dimensions. 37632 // @end_compatibility 37633 func FFT3D(scope *Scope, input tf.Output) (output tf.Output) { 37634 if scope.Err() != nil { 37635 return 37636 } 37637 opspec := tf.OpSpec{ 37638 Type: "FFT3D", 37639 Input: []tf.Input{ 37640 input, 37641 }, 37642 } 37643 op := scope.AddOperation(opspec) 37644 return op.Output(0) 37645 } 37646 37647 // CropAndResizeGradBoxesAttr is an optional argument to CropAndResizeGradBoxes. 37648 type CropAndResizeGradBoxesAttr func(optionalAttr) 37649 37650 // CropAndResizeGradBoxesMethod sets the optional method attribute to value. 37651 // 37652 // value: A string specifying the interpolation method. Only 'bilinear' is 37653 // supported for now. 37654 // If not specified, defaults to "bilinear" 37655 func CropAndResizeGradBoxesMethod(value string) CropAndResizeGradBoxesAttr { 37656 return func(m optionalAttr) { 37657 m["method"] = value 37658 } 37659 } 37660 37661 // Computes the gradient of the crop_and_resize op wrt the input boxes tensor. 37662 // 37663 // Arguments: 37664 // grads: A 4-D tensor of shape `[num_boxes, crop_height, crop_width, depth]`. 37665 // image: A 4-D tensor of shape `[batch, image_height, image_width, depth]`. 37666 // Both `image_height` and `image_width` need to be positive. 37667 // boxes: A 2-D tensor of shape `[num_boxes, 4]`. The `i`-th row of the tensor 37668 // specifies the coordinates of a box in the `box_ind[i]` image and is specified 37669 // in normalized coordinates `[y1, x1, y2, x2]`. A normalized coordinate value of 37670 // `y` is mapped to the image coordinate at `y * (image_height - 1)`, so as the 37671 // `[0, 1]` interval of normalized image height is mapped to 37672 // `[0, image_height - 1] in image height coordinates. We do allow y1 > y2, in 37673 // which case the sampled crop is an up-down flipped version of the original 37674 // image. The width dimension is treated similarly. Normalized coordinates 37675 // outside the `[0, 1]` range are allowed, in which case we use 37676 // `extrapolation_value` to extrapolate the input image values. 37677 // box_ind: A 1-D tensor of shape `[num_boxes]` with int32 values in `[0, batch)`. 37678 // The value of `box_ind[i]` specifies the image that the `i`-th box refers to. 37679 // 37680 // Returns A 2-D tensor of shape `[num_boxes, 4]`. 37681 func CropAndResizeGradBoxes(scope *Scope, grads tf.Output, image tf.Output, boxes tf.Output, box_ind tf.Output, optional ...CropAndResizeGradBoxesAttr) (output tf.Output) { 37682 if scope.Err() != nil { 37683 return 37684 } 37685 attrs := map[string]interface{}{} 37686 for _, a := range optional { 37687 a(attrs) 37688 } 37689 opspec := tf.OpSpec{ 37690 Type: "CropAndResizeGradBoxes", 37691 Input: []tf.Input{ 37692 grads, image, boxes, box_ind, 37693 }, 37694 Attrs: attrs, 37695 } 37696 op := scope.AddOperation(opspec) 37697 return op.Output(0) 37698 } 37699 37700 // Greedily selects a subset of bounding boxes in descending order of score, 37701 // 37702 // pruning away boxes that have high intersection-over-union (IOU) overlap 37703 // with previously selected boxes. Bounding boxes with score less than 37704 // `score_threshold` are removed. Bounding boxes are supplied as 37705 // [y1, x1, y2, x2], where (y1, x1) and (y2, x2) are the coordinates of any 37706 // diagonal pair of box corners and the coordinates can be provided as normalized 37707 // (i.e., lying in the interval [0, 1]) or absolute. Note that this algorithm 37708 // is agnostic to where the origin is in the coordinate system and more 37709 // generally is invariant to orthogonal transformations and translations 37710 // of the coordinate system; thus translating or reflections of the coordinate 37711 // system result in the same boxes being selected by the algorithm. 37712 // The output of this operation is a set of integers indexing into the input 37713 // collection of bounding boxes representing the selected boxes. The bounding 37714 // box coordinates corresponding to the selected indices can then be obtained 37715 // using the `tf.gather operation`. For example: 37716 // selected_indices = tf.image.non_max_suppression_v2( 37717 // boxes, scores, max_output_size, iou_threshold, score_threshold) 37718 // selected_boxes = tf.gather(boxes, selected_indices) 37719 // 37720 // Arguments: 37721 // boxes: A 2-D float tensor of shape `[num_boxes, 4]`. 37722 // scores: A 1-D float tensor of shape `[num_boxes]` representing a single 37723 // score corresponding to each box (each row of boxes). 37724 // max_output_size: A scalar integer tensor representing the maximum number of 37725 // boxes to be selected by non max suppression. 37726 // iou_threshold: A 0-D float tensor representing the threshold for deciding whether 37727 // boxes overlap too much with respect to IOU. 37728 // score_threshold: A 0-D float tensor representing the threshold for deciding when to remove 37729 // boxes based on score. 37730 // 37731 // Returns A 1-D integer tensor of shape `[M]` representing the selected 37732 // indices from the boxes tensor, where `M <= max_output_size`. 37733 func NonMaxSuppressionV3(scope *Scope, boxes tf.Output, scores tf.Output, max_output_size tf.Output, iou_threshold tf.Output, score_threshold tf.Output) (selected_indices tf.Output) { 37734 if scope.Err() != nil { 37735 return 37736 } 37737 opspec := tf.OpSpec{ 37738 Type: "NonMaxSuppressionV3", 37739 Input: []tf.Input{ 37740 boxes, scores, max_output_size, iou_threshold, score_threshold, 37741 }, 37742 } 37743 op := scope.AddOperation(opspec) 37744 return op.Output(0) 37745 } 37746 37747 // NonMaxSuppressionV4Attr is an optional argument to NonMaxSuppressionV4. 37748 type NonMaxSuppressionV4Attr func(optionalAttr) 37749 37750 // NonMaxSuppressionV4PadToMaxOutputSize sets the optional pad_to_max_output_size attribute to value. 37751 // 37752 // value: If true, the output `selected_indices` is padded to be of length 37753 // `max_output_size`. Defaults to false. 37754 // If not specified, defaults to false 37755 func NonMaxSuppressionV4PadToMaxOutputSize(value bool) NonMaxSuppressionV4Attr { 37756 return func(m optionalAttr) { 37757 m["pad_to_max_output_size"] = value 37758 } 37759 } 37760 37761 // Greedily selects a subset of bounding boxes in descending order of score, 37762 // 37763 // pruning away boxes that have high intersection-over-union (IOU) overlap 37764 // with previously selected boxes. Bounding boxes with score less than 37765 // `score_threshold` are removed. Bounding boxes are supplied as 37766 // [y1, x1, y2, x2], where (y1, x1) and (y2, x2) are the coordinates of any 37767 // diagonal pair of box corners and the coordinates can be provided as normalized 37768 // (i.e., lying in the interval [0, 1]) or absolute. Note that this algorithm 37769 // is agnostic to where the origin is in the coordinate system and more 37770 // generally is invariant to orthogonal transformations and translations 37771 // of the coordinate system; thus translating or reflections of the coordinate 37772 // system result in the same boxes being selected by the algorithm. 37773 // The output of this operation is a set of integers indexing into the input 37774 // collection of bounding boxes representing the selected boxes. The bounding 37775 // box coordinates corresponding to the selected indices can then be obtained 37776 // using the `tf.gather operation`. For example: 37777 // selected_indices = tf.image.non_max_suppression_v2( 37778 // boxes, scores, max_output_size, iou_threshold, score_threshold) 37779 // selected_boxes = tf.gather(boxes, selected_indices) 37780 // 37781 // Arguments: 37782 // boxes: A 2-D float tensor of shape `[num_boxes, 4]`. 37783 // scores: A 1-D float tensor of shape `[num_boxes]` representing a single 37784 // score corresponding to each box (each row of boxes). 37785 // max_output_size: A scalar integer tensor representing the maximum number of 37786 // boxes to be selected by non max suppression. 37787 // iou_threshold: A 0-D float tensor representing the threshold for deciding whether 37788 // boxes overlap too much with respect to IOU. 37789 // score_threshold: A 0-D float tensor representing the threshold for deciding when to remove 37790 // boxes based on score. 37791 // 37792 // Returns A 1-D integer tensor of shape `[M]` representing the selected 37793 // indices from the boxes tensor, where `M <= max_output_size`.A 0-D integer tensor representing the number of valid elements in 37794 // `selected_indices`, with the valid elements appearing first. 37795 func NonMaxSuppressionV4(scope *Scope, boxes tf.Output, scores tf.Output, max_output_size tf.Output, iou_threshold tf.Output, score_threshold tf.Output, optional ...NonMaxSuppressionV4Attr) (selected_indices tf.Output, valid_outputs tf.Output) { 37796 if scope.Err() != nil { 37797 return 37798 } 37799 attrs := map[string]interface{}{} 37800 for _, a := range optional { 37801 a(attrs) 37802 } 37803 opspec := tf.OpSpec{ 37804 Type: "NonMaxSuppressionV4", 37805 Input: []tf.Input{ 37806 boxes, scores, max_output_size, iou_threshold, score_threshold, 37807 }, 37808 Attrs: attrs, 37809 } 37810 op := scope.AddOperation(opspec) 37811 return op.Output(0), op.Output(1) 37812 } 37813 37814 // Removes keys and its associated values from a table. 37815 // 37816 // The tensor `keys` must of the same type as the keys of the table. Keys not 37817 // already in the table are silently ignored. 37818 // 37819 // Arguments: 37820 // table_handle: Handle to the table. 37821 // keys: Any shape. Keys of the elements to remove. 37822 // 37823 // Returns the created operation. 37824 func LookupTableRemoveV2(scope *Scope, table_handle tf.Output, keys tf.Output) (o *tf.Operation) { 37825 if scope.Err() != nil { 37826 return 37827 } 37828 opspec := tf.OpSpec{ 37829 Type: "LookupTableRemoveV2", 37830 Input: []tf.Input{ 37831 table_handle, keys, 37832 }, 37833 } 37834 return scope.AddOperation(opspec) 37835 } 37836 37837 // CombinedNonMaxSuppressionAttr is an optional argument to CombinedNonMaxSuppression. 37838 type CombinedNonMaxSuppressionAttr func(optionalAttr) 37839 37840 // CombinedNonMaxSuppressionPadPerClass sets the optional pad_per_class attribute to value. 37841 // 37842 // value: If false, the output nmsed boxes, scores and classes 37843 // are padded/clipped to `max_total_size`. If true, the 37844 // output nmsed boxes, scores and classes are padded to be of length 37845 // `max_size_per_class`*`num_classes`, unless it exceeds `max_total_size` in 37846 // which case it is clipped to `max_total_size`. Defaults to false. 37847 // If not specified, defaults to false 37848 func CombinedNonMaxSuppressionPadPerClass(value bool) CombinedNonMaxSuppressionAttr { 37849 return func(m optionalAttr) { 37850 m["pad_per_class"] = value 37851 } 37852 } 37853 37854 // Greedily selects a subset of bounding boxes in descending order of score, 37855 // 37856 // This operation performs non_max_suppression on the inputs per batch, across 37857 // all classes. 37858 // Prunes away boxes that have high intersection-over-union (IOU) overlap 37859 // with previously selected boxes. Bounding boxes are supplied as 37860 // [y1, x1, y2, x2], where (y1, x1) and (y2, x2) are the coordinates of any 37861 // diagonal pair of box corners and the coordinates can be provided as normalized 37862 // (i.e., lying in the interval [0, 1]) or absolute. Note that this algorithm 37863 // is agnostic to where the origin is in the coordinate system. Also note that 37864 // this algorithm is invariant to orthogonal transformations and translations 37865 // of the coordinate system; thus translating or reflections of the coordinate 37866 // system result in the same boxes being selected by the algorithm. 37867 // The output of this operation is the final boxes, scores and classes tensor 37868 // returned after performing non_max_suppression. 37869 // 37870 // Arguments: 37871 // boxes: A 4-D float tensor of shape `[batch_size, num_boxes, q, 4]`. If `q` is 1 then 37872 // same boxes are used for all classes otherwise, if `q` is equal to number of 37873 // classes, class-specific boxes are used. 37874 // scores: A 3-D float tensor of shape `[batch_size, num_boxes, num_classes]` 37875 // representing a single score corresponding to each box (each row of boxes). 37876 // max_output_size_per_class: A scalar integer tensor representing the maximum number of 37877 // boxes to be selected by non max suppression per class 37878 // max_total_size: A scalar representing maximum number of boxes retained over all classes. 37879 // iou_threshold: A 0-D float tensor representing the threshold for deciding whether 37880 // boxes overlap too much with respect to IOU. 37881 // score_threshold: A 0-D float tensor representing the threshold for deciding when to remove 37882 // boxes based on score. 37883 // 37884 // Returns A [batch_size, max_detections, 4] float32 tensor 37885 // containing the non-max suppressed boxes.A [batch_size, max_detections] float32 tensor 37886 // containing the scores for the boxes.A [batch_size, max_detections] float32 tensor 37887 // containing the classes for the boxes.A [batch_size] int32 tensor indicating the number of 37888 // valid detections per batch item. Only the top num_detections[i] entries in 37889 // nms_boxes[i], nms_scores[i] and nms_class[i] are valid. The rest of the 37890 // entries are zero paddings. 37891 func CombinedNonMaxSuppression(scope *Scope, boxes tf.Output, scores tf.Output, max_output_size_per_class tf.Output, max_total_size tf.Output, iou_threshold tf.Output, score_threshold tf.Output, optional ...CombinedNonMaxSuppressionAttr) (nmsed_boxes tf.Output, nmsed_scores tf.Output, nmsed_classes tf.Output, valid_detections tf.Output) { 37892 if scope.Err() != nil { 37893 return 37894 } 37895 attrs := map[string]interface{}{} 37896 for _, a := range optional { 37897 a(attrs) 37898 } 37899 opspec := tf.OpSpec{ 37900 Type: "CombinedNonMaxSuppression", 37901 Input: []tf.Input{ 37902 boxes, scores, max_output_size_per_class, max_total_size, iou_threshold, score_threshold, 37903 }, 37904 Attrs: attrs, 37905 } 37906 op := scope.AddOperation(opspec) 37907 return op.Output(0), op.Output(1), op.Output(2), op.Output(3) 37908 } 37909 37910 // Computes the matrix logarithm of one or more square matrices: 37911 // 37912 // 37913 // \\(log(exp(A)) = A\\) 37914 // 37915 // This op is only defined for complex matrices. If A is positive-definite and 37916 // real, then casting to a complex matrix, taking the logarithm and casting back 37917 // to a real matrix will give the correct result. 37918 // 37919 // This function computes the matrix logarithm using the Schur-Parlett algorithm. 37920 // Details of the algorithm can be found in Section 11.6.2 of: 37921 // Nicholas J. Higham, Functions of Matrices: Theory and Computation, SIAM 2008. 37922 // ISBN 978-0-898716-46-7. 37923 // 37924 // The input is a tensor of shape `[..., M, M]` whose inner-most 2 dimensions 37925 // form square matrices. The output is a tensor of the same shape as the input 37926 // containing the exponential for all input submatrices `[..., :, :]`. 37927 // 37928 // Arguments: 37929 // input: Shape is `[..., M, M]`. 37930 // 37931 // Returns Shape is `[..., M, M]`. 37932 // 37933 // @compatibility(scipy) 37934 // Equivalent to scipy.linalg.logm 37935 // @end_compatibility 37936 func MatrixLogarithm(scope *Scope, input tf.Output) (output tf.Output) { 37937 if scope.Err() != nil { 37938 return 37939 } 37940 opspec := tf.OpSpec{ 37941 Type: "MatrixLogarithm", 37942 Input: []tf.Input{ 37943 input, 37944 }, 37945 } 37946 op := scope.AddOperation(opspec) 37947 return op.Output(0) 37948 } 37949 37950 // This op is used as a placeholder in If branch functions. It doesn't provide a 37951 // valid output when run, so must either be removed (e.g. replaced with a 37952 // function input) or guaranteed not to be used (e.g. if mirroring an 37953 // intermediate output needed for the gradient computation of the other branch). 37954 // 37955 // Arguments: 37956 // dtype: The type of the output. 37957 // shape: The purported shape of the output. This is only used for shape inference; 37958 // the output will not necessarily have this shape. Can be a partial shape. 37959 // 37960 // Returns \"Fake\" output value. This should not be consumed by another op. 37961 func FakeParam(scope *Scope, dtype tf.DataType, shape tf.Shape) (output tf.Output) { 37962 if scope.Err() != nil { 37963 return 37964 } 37965 attrs := map[string]interface{}{"dtype": dtype, "shape": shape} 37966 opspec := tf.OpSpec{ 37967 Type: "FakeParam", 37968 37969 Attrs: attrs, 37970 } 37971 op := scope.AddOperation(opspec) 37972 return op.Output(0) 37973 } 37974 37975 // Returns the next representable value of `x1` in the direction of `x2`, element-wise. 37976 // 37977 // This operation returns the same result as the C++ std::nextafter function. 37978 // 37979 // It can also return a subnormal number. 37980 // 37981 // @compatibility(cpp) 37982 // Equivalent to C++ std::nextafter function. 37983 // @end_compatibility 37984 func NextAfter(scope *Scope, x1 tf.Output, x2 tf.Output) (output tf.Output) { 37985 if scope.Err() != nil { 37986 return 37987 } 37988 opspec := tf.OpSpec{ 37989 Type: "NextAfter", 37990 Input: []tf.Input{ 37991 x1, x2, 37992 }, 37993 } 37994 op := scope.AddOperation(opspec) 37995 return op.Output(0) 37996 } 37997 37998 // OrderedMapStageAttr is an optional argument to OrderedMapStage. 37999 type OrderedMapStageAttr func(optionalAttr) 38000 38001 // OrderedMapStageCapacity sets the optional capacity attribute to value. 38002 // 38003 // value: Maximum number of elements in the Staging Area. If > 0, inserts 38004 // on the container will block when the capacity is reached. 38005 // If not specified, defaults to 0 38006 // 38007 // REQUIRES: value >= 0 38008 func OrderedMapStageCapacity(value int64) OrderedMapStageAttr { 38009 return func(m optionalAttr) { 38010 m["capacity"] = value 38011 } 38012 } 38013 38014 // OrderedMapStageMemoryLimit sets the optional memory_limit attribute to value. 38015 // If not specified, defaults to 0 38016 // 38017 // REQUIRES: value >= 0 38018 func OrderedMapStageMemoryLimit(value int64) OrderedMapStageAttr { 38019 return func(m optionalAttr) { 38020 m["memory_limit"] = value 38021 } 38022 } 38023 38024 // OrderedMapStageContainer sets the optional container attribute to value. 38025 // 38026 // value: If non-empty, this queue is placed in the given container. Otherwise, 38027 // a default container is used. 38028 // If not specified, defaults to "" 38029 func OrderedMapStageContainer(value string) OrderedMapStageAttr { 38030 return func(m optionalAttr) { 38031 m["container"] = value 38032 } 38033 } 38034 38035 // OrderedMapStageSharedName sets the optional shared_name attribute to value. 38036 // 38037 // value: It is necessary to match this name to the matching Unstage Op. 38038 // If not specified, defaults to "" 38039 func OrderedMapStageSharedName(value string) OrderedMapStageAttr { 38040 return func(m optionalAttr) { 38041 m["shared_name"] = value 38042 } 38043 } 38044 38045 // Stage (key, values) in the underlying container which behaves like a ordered 38046 // 38047 // associative container. Elements are ordered by key. 38048 // 38049 // Arguments: 38050 // key: int64 38051 // 38052 // values: a list of tensors 38053 // dtypes A list of data types that inserted values should adhere to. 38054 // 38055 // 38056 // Returns the created operation. 38057 func OrderedMapStage(scope *Scope, key tf.Output, indices tf.Output, values []tf.Output, dtypes []tf.DataType, optional ...OrderedMapStageAttr) (o *tf.Operation) { 38058 if scope.Err() != nil { 38059 return 38060 } 38061 attrs := map[string]interface{}{"dtypes": dtypes} 38062 for _, a := range optional { 38063 a(attrs) 38064 } 38065 opspec := tf.OpSpec{ 38066 Type: "OrderedMapStage", 38067 Input: []tf.Input{ 38068 key, indices, tf.OutputList(values), 38069 }, 38070 Attrs: attrs, 38071 } 38072 return scope.AddOperation(opspec) 38073 } 38074 38075 // StackPushV2Attr is an optional argument to StackPushV2. 38076 type StackPushV2Attr func(optionalAttr) 38077 38078 // StackPushV2SwapMemory sets the optional swap_memory attribute to value. 38079 // 38080 // value: Swap `elem` to CPU. Default to false. 38081 // If not specified, defaults to false 38082 func StackPushV2SwapMemory(value bool) StackPushV2Attr { 38083 return func(m optionalAttr) { 38084 m["swap_memory"] = value 38085 } 38086 } 38087 38088 // Push an element onto the stack. 38089 // 38090 // Arguments: 38091 // handle: The handle to a stack. 38092 // elem: The tensor to be pushed onto the stack. 38093 // 38094 // Returns The same tensor as the input 'elem'. 38095 func StackPushV2(scope *Scope, handle tf.Output, elem tf.Output, optional ...StackPushV2Attr) (output tf.Output) { 38096 if scope.Err() != nil { 38097 return 38098 } 38099 attrs := map[string]interface{}{} 38100 for _, a := range optional { 38101 a(attrs) 38102 } 38103 opspec := tf.OpSpec{ 38104 Type: "StackPushV2", 38105 Input: []tf.Input{ 38106 handle, elem, 38107 }, 38108 Attrs: attrs, 38109 } 38110 op := scope.AddOperation(opspec) 38111 return op.Output(0) 38112 } 38113 38114 // RpcAttr is an optional argument to Rpc. 38115 type RpcAttr func(optionalAttr) 38116 38117 // RpcProtocol sets the optional protocol attribute to value. 38118 // 38119 // value: RPC protocol to use. Empty string means use the default protocol. 38120 // Options include 'grpc'. 38121 // If not specified, defaults to "" 38122 func RpcProtocol(value string) RpcAttr { 38123 return func(m optionalAttr) { 38124 m["protocol"] = value 38125 } 38126 } 38127 38128 // RpcFailFast sets the optional fail_fast attribute to value. 38129 // 38130 // value: `boolean`. If `true` (default), then failures to connect 38131 // (i.e., the server does not immediately respond) cause an RPC failure. 38132 // If not specified, defaults to true 38133 func RpcFailFast(value bool) RpcAttr { 38134 return func(m optionalAttr) { 38135 m["fail_fast"] = value 38136 } 38137 } 38138 38139 // RpcTimeoutInMs sets the optional timeout_in_ms attribute to value. 38140 // 38141 // value: `int`. If `0` (default), then the kernel will run the RPC 38142 // request and only time out if the RPC deadline passes or the session times out. 38143 // If this value is greater than `0`, then the op will raise an exception if 38144 // the RPC takes longer than `timeout_in_ms`. 38145 // If not specified, defaults to 0 38146 func RpcTimeoutInMs(value int64) RpcAttr { 38147 return func(m optionalAttr) { 38148 m["timeout_in_ms"] = value 38149 } 38150 } 38151 38152 // Perform batches of RPC requests. 38153 // 38154 // This op asynchronously performs either a single RPC request, or a batch 38155 // of requests. RPC requests are defined by three main parameters: 38156 // 38157 // - `address` (the host+port or BNS address of the request) 38158 // - `method` (the RPC method name for the request) 38159 // - `request` (the serialized proto string, or vector of strings, 38160 // of the RPC request argument). 38161 // 38162 // For example, if you have an RPC service running on port localhost:2345, 38163 // and its interface is configured with the following proto declaration: 38164 // 38165 // ``` 38166 // service MyService { 38167 // rpc MyMethod(MyRequestProto) returns (MyResponseProto) { 38168 // } 38169 // }; 38170 // ``` 38171 // 38172 // then call this op with arguments: 38173 // 38174 // ``` 38175 // address = "localhost:2345" 38176 // method = "MyService/MyMethod" 38177 // ``` 38178 // 38179 // The `request` tensor is a string tensor representing serialized `MyRequestProto` 38180 // strings; and the output string tensor `response` will have the same shape 38181 // and contain (upon successful completion) corresponding serialized 38182 // `MyResponseProto` strings. 38183 // 38184 // For example, to send a single, empty, `MyRequestProto`, call 38185 // this op with `request = ""`. To send 5 **parallel** empty requests, 38186 // call this op with `request = ["", "", "", "", ""]`. 38187 // 38188 // More generally, one can create a batch of `MyRequestProto` serialized protos 38189 // from regular batched tensors using the `encode_proto` op, and convert 38190 // the response `MyResponseProto` serialized protos to batched tensors 38191 // using the `decode_proto` op. 38192 // 38193 // **NOTE** Working with serialized proto strings is faster than instantiating 38194 // actual proto objects in memory, so no performance degradation is expected 38195 // compared to writing custom kernels for this workflow. 38196 // 38197 // If the connection fails or the remote worker returns an error 38198 // status, the op reraises this exception locally. 38199 // 38200 // See the `TryRpc` op if you prefer to handle RPC failures manually in the graph. 38201 // 38202 // Arguments: 38203 // address: `0-D` or `1-D`. The address (i.e. host_name:port) of the RPC server. 38204 // If this tensor has more than 1 element, then multiple parallel rpc requests 38205 // are sent. This argument broadcasts with `method` and `request`. 38206 // method: `0-D` or `1-D`. The method address on the RPC server. 38207 // If this tensor has more than 1 element, then multiple parallel rpc requests 38208 // are sent. This argument broadcasts with `address` and `request`. 38209 // request: `0-D` or `1-D`. Serialized proto strings: the rpc request argument. 38210 // If this tensor has more than 1 element, then multiple parallel rpc requests 38211 // are sent. This argument broadcasts with `address` and `method`. 38212 // 38213 // Returns Same shape as `request`. Serialized proto strings: the rpc responses. 38214 func Rpc(scope *Scope, address tf.Output, method tf.Output, request tf.Output, optional ...RpcAttr) (response tf.Output) { 38215 if scope.Err() != nil { 38216 return 38217 } 38218 attrs := map[string]interface{}{} 38219 for _, a := range optional { 38220 a(attrs) 38221 } 38222 opspec := tf.OpSpec{ 38223 Type: "Rpc", 38224 Input: []tf.Input{ 38225 address, method, request, 38226 }, 38227 Attrs: attrs, 38228 } 38229 op := scope.AddOperation(opspec) 38230 return op.Output(0) 38231 } 38232 38233 // Records the bytes size of each element of `input_dataset` in a StatsAggregator. 38234 func ExperimentalBytesProducedStatsDataset(scope *Scope, input_dataset tf.Output, tag tf.Output, output_types []tf.DataType, output_shapes []tf.Shape) (handle tf.Output) { 38235 if scope.Err() != nil { 38236 return 38237 } 38238 attrs := map[string]interface{}{"output_types": output_types, "output_shapes": output_shapes} 38239 opspec := tf.OpSpec{ 38240 Type: "ExperimentalBytesProducedStatsDataset", 38241 Input: []tf.Input{ 38242 input_dataset, tag, 38243 }, 38244 Attrs: attrs, 38245 } 38246 op := scope.AddOperation(opspec) 38247 return op.Output(0) 38248 } 38249 38250 // A substitute for `InterleaveDataset` on a fixed list of `N` datasets. 38251 // 38252 // Arguments: 38253 // selector_input_dataset: A dataset of scalar `DT_INT64` elements that determines which of the 38254 // `N` data inputs should produce the next output element. 38255 // data_input_datasets: `N` datasets with the same type that will be interleaved according to 38256 // the values of `selector_input_dataset`. 38257 // 38258 // 38259 func ExperimentalDirectedInterleaveDataset(scope *Scope, selector_input_dataset tf.Output, data_input_datasets []tf.Output, output_types []tf.DataType, output_shapes []tf.Shape) (handle tf.Output) { 38260 if scope.Err() != nil { 38261 return 38262 } 38263 attrs := map[string]interface{}{"output_types": output_types, "output_shapes": output_shapes} 38264 opspec := tf.OpSpec{ 38265 Type: "ExperimentalDirectedInterleaveDataset", 38266 Input: []tf.Input{ 38267 selector_input_dataset, tf.OutputList(data_input_datasets), 38268 }, 38269 Attrs: attrs, 38270 } 38271 op := scope.AddOperation(opspec) 38272 return op.Output(0) 38273 } 38274 38275 // RandomUniformIntAttr is an optional argument to RandomUniformInt. 38276 type RandomUniformIntAttr func(optionalAttr) 38277 38278 // RandomUniformIntSeed sets the optional seed attribute to value. 38279 // 38280 // value: If either `seed` or `seed2` are set to be non-zero, the random number 38281 // generator is seeded by the given seed. Otherwise, it is seeded by a 38282 // random seed. 38283 // If not specified, defaults to 0 38284 func RandomUniformIntSeed(value int64) RandomUniformIntAttr { 38285 return func(m optionalAttr) { 38286 m["seed"] = value 38287 } 38288 } 38289 38290 // RandomUniformIntSeed2 sets the optional seed2 attribute to value. 38291 // 38292 // value: A second seed to avoid seed collision. 38293 // If not specified, defaults to 0 38294 func RandomUniformIntSeed2(value int64) RandomUniformIntAttr { 38295 return func(m optionalAttr) { 38296 m["seed2"] = value 38297 } 38298 } 38299 38300 // Outputs random integers from a uniform distribution. 38301 // 38302 // The generated values are uniform integers in the range `[minval, maxval)`. 38303 // The lower bound `minval` is included in the range, while the upper bound 38304 // `maxval` is excluded. 38305 // 38306 // The random integers are slightly biased unless `maxval - minval` is an exact 38307 // power of two. The bias is small for values of `maxval - minval` significantly 38308 // smaller than the range of the output (either `2^32` or `2^64`). 38309 // 38310 // Arguments: 38311 // shape: The shape of the output tensor. 38312 // minval: 0-D. Inclusive lower bound on the generated integers. 38313 // maxval: 0-D. Exclusive upper bound on the generated integers. 38314 // 38315 // Returns A tensor of the specified shape filled with uniform random integers. 38316 func RandomUniformInt(scope *Scope, shape tf.Output, minval tf.Output, maxval tf.Output, optional ...RandomUniformIntAttr) (output tf.Output) { 38317 if scope.Err() != nil { 38318 return 38319 } 38320 attrs := map[string]interface{}{} 38321 for _, a := range optional { 38322 a(attrs) 38323 } 38324 opspec := tf.OpSpec{ 38325 Type: "RandomUniformInt", 38326 Input: []tf.Input{ 38327 shape, minval, maxval, 38328 }, 38329 Attrs: attrs, 38330 } 38331 op := scope.AddOperation(opspec) 38332 return op.Output(0) 38333 } 38334 38335 // Add the quantile summaries to each quantile stream resource. 38336 // 38337 // An op that adds a list of quantile summaries to a quantile stream resource. Each 38338 // summary Tensor is rank 2, containing summaries (value, weight, min_rank, max_rank) 38339 // for a single feature. 38340 // 38341 // Arguments: 38342 // quantile_stream_resource_handle: resource handle referring to a QuantileStreamResource. 38343 // summaries: string; List of Rank 2 Tensor each containing the summaries for a single feature. 38344 // 38345 // Returns the created operation. 38346 func BoostedTreesQuantileStreamResourceAddSummaries(scope *Scope, quantile_stream_resource_handle tf.Output, summaries []tf.Output) (o *tf.Operation) { 38347 if scope.Err() != nil { 38348 return 38349 } 38350 opspec := tf.OpSpec{ 38351 Type: "BoostedTreesQuantileStreamResourceAddSummaries", 38352 Input: []tf.Input{ 38353 quantile_stream_resource_handle, tf.OutputList(summaries), 38354 }, 38355 } 38356 return scope.AddOperation(opspec) 38357 } 38358 38359 // Creates a Dataset that returns pseudorandom numbers. 38360 // 38361 // Arguments: 38362 // seed: A scalar seed for the random number generator. If either seed or 38363 // seed2 is set to be non-zero, the random number generator is seeded 38364 // by the given seed. Otherwise, a random seed is used. 38365 // seed2: A second scalar seed to avoid seed collision. 38366 // 38367 // 38368 func ExperimentalRandomDataset(scope *Scope, seed tf.Output, seed2 tf.Output, output_types []tf.DataType, output_shapes []tf.Shape) (handle tf.Output) { 38369 if scope.Err() != nil { 38370 return 38371 } 38372 attrs := map[string]interface{}{"output_types": output_types, "output_shapes": output_shapes} 38373 opspec := tf.OpSpec{ 38374 Type: "ExperimentalRandomDataset", 38375 Input: []tf.Input{ 38376 seed, seed2, 38377 }, 38378 Attrs: attrs, 38379 } 38380 op := scope.AddOperation(opspec) 38381 return op.Output(0) 38382 } 38383 38384 // Creates a dataset that overrides the maximum intra-op parallelism. 38385 // 38386 // Arguments: 38387 // 38388 // max_intra_op_parallelism: Identifies the maximum intra-op parallelism to use. 38389 // 38390 // 38391 func ExperimentalMaxIntraOpParallelismDataset(scope *Scope, input_dataset tf.Output, max_intra_op_parallelism tf.Output, output_types []tf.DataType, output_shapes []tf.Shape) (handle tf.Output) { 38392 if scope.Err() != nil { 38393 return 38394 } 38395 attrs := map[string]interface{}{"output_types": output_types, "output_shapes": output_shapes} 38396 opspec := tf.OpSpec{ 38397 Type: "ExperimentalMaxIntraOpParallelismDataset", 38398 Input: []tf.Input{ 38399 input_dataset, max_intra_op_parallelism, 38400 }, 38401 Attrs: attrs, 38402 } 38403 op := scope.AddOperation(opspec) 38404 return op.Output(0) 38405 } 38406 38407 // StringSplitV2Attr is an optional argument to StringSplitV2. 38408 type StringSplitV2Attr func(optionalAttr) 38409 38410 // StringSplitV2Maxsplit sets the optional maxsplit attribute to value. 38411 // 38412 // value: An `int`. If `maxsplit > 0`, limit of the split of the result. 38413 // If not specified, defaults to -1 38414 func StringSplitV2Maxsplit(value int64) StringSplitV2Attr { 38415 return func(m optionalAttr) { 38416 m["maxsplit"] = value 38417 } 38418 } 38419 38420 // Split elements of `source` based on `sep` into a `SparseTensor`. 38421 // 38422 // Let N be the size of source (typically N will be the batch size). Split each 38423 // element of `source` based on `sep` and return a `SparseTensor` 38424 // containing the split tokens. Empty tokens are ignored. 38425 // 38426 // For example, N = 2, source[0] is 'hello world' and source[1] is 'a b c', 38427 // then the output will be 38428 // ``` 38429 // st.indices = [0, 0; 38430 // 0, 1; 38431 // 1, 0; 38432 // 1, 1; 38433 // 1, 2] 38434 // st.shape = [2, 3] 38435 // st.values = ['hello', 'world', 'a', 'b', 'c'] 38436 // ``` 38437 // 38438 // If `sep` is given, consecutive delimiters are not grouped together and are 38439 // deemed to delimit empty strings. For example, source of `"1<>2<><>3"` and 38440 // sep of `"<>"` returns `["1", "2", "", "3"]`. If `sep` is None or an empty 38441 // string, consecutive whitespace are regarded as a single separator, and the 38442 // result will contain no empty strings at the startor end if the string has 38443 // leading or trailing whitespace. 38444 // 38445 // Note that the above mentioned behavior matches python's str.split. 38446 // 38447 // Arguments: 38448 // input: `1-D` string `Tensor`, the strings to split. 38449 // sep: `0-D` string `Tensor`, the delimiter character. 38450 func StringSplitV2(scope *Scope, input tf.Output, sep tf.Output, optional ...StringSplitV2Attr) (indices tf.Output, values tf.Output, shape tf.Output) { 38451 if scope.Err() != nil { 38452 return 38453 } 38454 attrs := map[string]interface{}{} 38455 for _, a := range optional { 38456 a(attrs) 38457 } 38458 opspec := tf.OpSpec{ 38459 Type: "StringSplitV2", 38460 Input: []tf.Input{ 38461 input, sep, 38462 }, 38463 Attrs: attrs, 38464 } 38465 op := scope.AddOperation(opspec) 38466 return op.Output(0), op.Output(1), op.Output(2) 38467 } 38468 38469 // Creates a dataset that uses a custom thread pool to compute `input_dataset`. 38470 // 38471 // Arguments: 38472 // 38473 // thread_pool: A resource produced by the ThreadPoolHandle op. 38474 // 38475 // 38476 func ExperimentalThreadPoolDataset(scope *Scope, input_dataset tf.Output, thread_pool tf.Output, output_types []tf.DataType, output_shapes []tf.Shape) (handle tf.Output) { 38477 if scope.Err() != nil { 38478 return 38479 } 38480 attrs := map[string]interface{}{"output_types": output_types, "output_shapes": output_shapes} 38481 opspec := tf.OpSpec{ 38482 Type: "ExperimentalThreadPoolDataset", 38483 Input: []tf.Input{ 38484 input_dataset, thread_pool, 38485 }, 38486 Attrs: attrs, 38487 } 38488 op := scope.AddOperation(opspec) 38489 return op.Output(0) 38490 } 38491 38492 // Computes softsign: `features / (abs(features) + 1)`. 38493 func Softsign(scope *Scope, features tf.Output) (activations tf.Output) { 38494 if scope.Err() != nil { 38495 return 38496 } 38497 opspec := tf.OpSpec{ 38498 Type: "Softsign", 38499 Input: []tf.Input{ 38500 features, 38501 }, 38502 } 38503 op := scope.AddOperation(opspec) 38504 return op.Output(0) 38505 } 38506 38507 // EncodeProtoAttr is an optional argument to EncodeProto. 38508 type EncodeProtoAttr func(optionalAttr) 38509 38510 // EncodeProtoDescriptorSource sets the optional descriptor_source attribute to value. 38511 // If not specified, defaults to "local://" 38512 func EncodeProtoDescriptorSource(value string) EncodeProtoAttr { 38513 return func(m optionalAttr) { 38514 m["descriptor_source"] = value 38515 } 38516 } 38517 38518 // The op serializes protobuf messages provided in the input tensors. 38519 // 38520 // The types of the tensors in `values` must match the schema for the 38521 // fields specified in `field_names`. All the tensors in `values` must 38522 // have a common shape prefix, *batch_shape*. 38523 // 38524 // The `sizes` tensor specifies repeat counts for each field. The repeat 38525 // count (last dimension) of a each tensor in `values` must be greater 38526 // than or equal to corresponding repeat count in `sizes`. 38527 // 38528 // A `message_type` name must be provided to give context for the field 38529 // names. The actual message descriptor can be looked up either in the 38530 // linked-in descriptor pool or a filename provided by the caller using 38531 // the `descriptor_source` attribute. 38532 // 38533 // The `descriptor_source` attribute selects a source of protocol 38534 // descriptors to consult when looking up `message_type`. This may be a 38535 // filename containing a serialized `FileDescriptorSet` message, 38536 // or the special value `local://`, in which case only descriptors linked 38537 // into the code will be searched; the filename can be on any filesystem 38538 // accessible to TensorFlow. 38539 // 38540 // You can build a `descriptor_source` file using the `--descriptor_set_out` 38541 // and `--include_imports` options to the protocol compiler `protoc`. 38542 // 38543 // The `local://` database only covers descriptors linked into the 38544 // code via C++ libraries, not Python imports. You can link in a proto descriptor 38545 // by creating a cc_library target with alwayslink=1. 38546 // 38547 // There are a few special cases in the value mapping: 38548 // 38549 // Submessage and group fields must be pre-serialized as TensorFlow strings. 38550 // 38551 // TensorFlow lacks support for unsigned int64s, so they must be 38552 // represented as `tf.int64` with the same twos-complement bit pattern 38553 // (the obvious way). 38554 // 38555 // Unsigned int32 values can be represented exactly with `tf.int64`, or 38556 // with sign wrapping if the input is of type `tf.int32`. 38557 // 38558 // Arguments: 38559 // sizes: Tensor of int32 with shape `[batch_shape, len(field_names)]`. 38560 // values: List of tensors containing values for the corresponding field. 38561 // field_names: List of strings containing proto field names. 38562 // message_type: Name of the proto message type to decode. 38563 // 38564 // Returns Tensor of serialized protos with shape `batch_shape`. 38565 func EncodeProto(scope *Scope, sizes tf.Output, values []tf.Output, field_names []string, message_type string, optional ...EncodeProtoAttr) (bytes tf.Output) { 38566 if scope.Err() != nil { 38567 return 38568 } 38569 attrs := map[string]interface{}{"field_names": field_names, "message_type": message_type} 38570 for _, a := range optional { 38571 a(attrs) 38572 } 38573 opspec := tf.OpSpec{ 38574 Type: "EncodeProto", 38575 Input: []tf.Input{ 38576 sizes, tf.OutputList(values), 38577 }, 38578 Attrs: attrs, 38579 } 38580 op := scope.AddOperation(opspec) 38581 return op.Output(0) 38582 } 38583 38584 // Creates an Optional variant with no value. 38585 func OptionalNone(scope *Scope) (optional tf.Output) { 38586 if scope.Err() != nil { 38587 return 38588 } 38589 opspec := tf.OpSpec{ 38590 Type: "OptionalNone", 38591 } 38592 op := scope.AddOperation(opspec) 38593 return op.Output(0) 38594 } 38595 38596 // DecodeProtoV2Attr is an optional argument to DecodeProtoV2. 38597 type DecodeProtoV2Attr func(optionalAttr) 38598 38599 // DecodeProtoV2DescriptorSource sets the optional descriptor_source attribute to value. 38600 // 38601 // value: Either the special value `local://` or a path to a file containing 38602 // a serialized `FileDescriptorSet`. 38603 // If not specified, defaults to "local://" 38604 func DecodeProtoV2DescriptorSource(value string) DecodeProtoV2Attr { 38605 return func(m optionalAttr) { 38606 m["descriptor_source"] = value 38607 } 38608 } 38609 38610 // DecodeProtoV2MessageFormat sets the optional message_format attribute to value. 38611 // 38612 // value: Either `binary` or `text`. 38613 // If not specified, defaults to "binary" 38614 func DecodeProtoV2MessageFormat(value string) DecodeProtoV2Attr { 38615 return func(m optionalAttr) { 38616 m["message_format"] = value 38617 } 38618 } 38619 38620 // DecodeProtoV2Sanitize sets the optional sanitize attribute to value. 38621 // 38622 // value: Whether to sanitize the result or not. 38623 // If not specified, defaults to false 38624 func DecodeProtoV2Sanitize(value bool) DecodeProtoV2Attr { 38625 return func(m optionalAttr) { 38626 m["sanitize"] = value 38627 } 38628 } 38629 38630 // The op extracts fields from a serialized protocol buffers message into tensors. 38631 // 38632 // The `decode_proto` op extracts fields from a serialized protocol buffers 38633 // message into tensors. The fields in `field_names` are decoded and converted 38634 // to the corresponding `output_types` if possible. 38635 // 38636 // A `message_type` name must be provided to give context for the field 38637 // names. The actual message descriptor can be looked up either in the 38638 // linked-in descriptor pool or a filename provided by the caller using 38639 // the `descriptor_source` attribute. 38640 // 38641 // Each output tensor is a dense tensor. This means that it is padded to 38642 // hold the largest number of repeated elements seen in the input 38643 // minibatch. (The shape is also padded by one to prevent zero-sized 38644 // dimensions). The actual repeat counts for each example in the 38645 // minibatch can be found in the `sizes` output. In many cases the output 38646 // of `decode_proto` is fed immediately into tf.squeeze if missing values 38647 // are not a concern. When using tf.squeeze, always pass the squeeze 38648 // dimension explicitly to avoid surprises. 38649 // 38650 // For the most part, the mapping between Proto field types and 38651 // TensorFlow dtypes is straightforward. However, there are a few 38652 // special cases: 38653 // 38654 // - A proto field that contains a submessage or group can only be converted 38655 // to `DT_STRING` (the serialized submessage). This is to reduce the 38656 // complexity of the API. The resulting string can be used as input 38657 // to another instance of the decode_proto op. 38658 // 38659 // - TensorFlow lacks support for unsigned integers. The ops represent uint64 38660 // types as a `DT_INT64` with the same twos-complement bit pattern 38661 // (the obvious way). Unsigned int32 values can be represented exactly by 38662 // specifying type `DT_INT64`, or using twos-complement if the caller 38663 // specifies `DT_INT32` in the `output_types` attribute. 38664 // 38665 // The `descriptor_source` attribute selects a source of protocol 38666 // descriptors to consult when looking up `message_type`. This may be a 38667 // filename containing a serialized `FileDescriptorSet` message, 38668 // or the special value `local://`, in which case only descriptors linked 38669 // into the code will be searched; the filename can be on any filesystem 38670 // accessible to TensorFlow. 38671 // 38672 // You can build a `descriptor_source` file using the `--descriptor_set_out` 38673 // and `--include_imports` options to the protocol compiler `protoc`. 38674 // 38675 // The `local://` database only covers descriptors linked into the 38676 // code via C++ libraries, not Python imports. You can link in a proto descriptor 38677 // by creating a cc_library target with alwayslink=1. 38678 // 38679 // Both binary and text proto serializations are supported, and can be 38680 // chosen using the `format` attribute. 38681 // 38682 // Arguments: 38683 // bytes: Tensor of serialized protos with shape `batch_shape`. 38684 // message_type: Name of the proto message type to decode. 38685 // field_names: List of strings containing proto field names. An extension field can be decoded 38686 // by using its full name, e.g. EXT_PACKAGE.EXT_FIELD_NAME. 38687 // output_types: List of TF types to use for the respective field in field_names. 38688 // 38689 // Returns Tensor of int32 with shape `[batch_shape, len(field_names)]`. 38690 // Each entry is the number of values found for the corresponding field. 38691 // Optional fields may have 0 or 1 values.List of tensors containing values for the corresponding field. 38692 // `values[i]` has datatype `output_types[i]` 38693 // and shape `[batch_shape, max(sizes[...,i])]`. 38694 func DecodeProtoV2(scope *Scope, bytes tf.Output, message_type string, field_names []string, output_types []tf.DataType, optional ...DecodeProtoV2Attr) (sizes tf.Output, values []tf.Output) { 38695 if scope.Err() != nil { 38696 return 38697 } 38698 attrs := map[string]interface{}{"message_type": message_type, "field_names": field_names, "output_types": output_types} 38699 for _, a := range optional { 38700 a(attrs) 38701 } 38702 opspec := tf.OpSpec{ 38703 Type: "DecodeProtoV2", 38704 Input: []tf.Input{ 38705 bytes, 38706 }, 38707 Attrs: attrs, 38708 } 38709 op := scope.AddOperation(opspec) 38710 if scope.Err() != nil { 38711 return 38712 } 38713 var idx int 38714 var err error 38715 sizes = op.Output(idx) 38716 if values, idx, err = makeOutputList(op, idx, "values"); err != nil { 38717 scope.UpdateErr("DecodeProtoV2", err) 38718 return 38719 } 38720 return sizes, values 38721 } 38722 38723 // Creates a dataset that splits a SparseTensor into elements row-wise. 38724 func SparseTensorSliceDataset(scope *Scope, indices tf.Output, values tf.Output, dense_shape tf.Output) (handle tf.Output) { 38725 if scope.Err() != nil { 38726 return 38727 } 38728 opspec := tf.OpSpec{ 38729 Type: "SparseTensorSliceDataset", 38730 Input: []tf.Input{ 38731 indices, values, dense_shape, 38732 }, 38733 } 38734 op := scope.AddOperation(opspec) 38735 return op.Output(0) 38736 } 38737 38738 // Returns x / y element-wise for real types. 38739 // 38740 // If `x` and `y` are reals, this will return the floating-point division. 38741 // 38742 // *NOTE*: `Div` supports broadcasting. More about broadcasting 38743 // [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html) 38744 func RealDiv(scope *Scope, x tf.Output, y tf.Output) (z tf.Output) { 38745 if scope.Err() != nil { 38746 return 38747 } 38748 opspec := tf.OpSpec{ 38749 Type: "RealDiv", 38750 Input: []tf.Input{ 38751 x, y, 38752 }, 38753 } 38754 op := scope.AddOperation(opspec) 38755 return op.Output(0) 38756 } 38757 38758 // Creates a dataset that concatenates `input_dataset` with `another_dataset`. 38759 func ConcatenateDataset(scope *Scope, input_dataset tf.Output, another_dataset tf.Output, output_types []tf.DataType, output_shapes []tf.Shape) (handle tf.Output) { 38760 if scope.Err() != nil { 38761 return 38762 } 38763 attrs := map[string]interface{}{"output_types": output_types, "output_shapes": output_shapes} 38764 opspec := tf.OpSpec{ 38765 Type: "ConcatenateDataset", 38766 Input: []tf.Input{ 38767 input_dataset, another_dataset, 38768 }, 38769 Attrs: attrs, 38770 } 38771 op := scope.AddOperation(opspec) 38772 return op.Output(0) 38773 } 38774 38775 // Computes the grayscale dilation of 4-D `input` and 3-D `filter` tensors. 38776 // 38777 // The `input` tensor has shape `[batch, in_height, in_width, depth]` and the 38778 // `filter` tensor has shape `[filter_height, filter_width, depth]`, i.e., each 38779 // input channel is processed independently of the others with its own structuring 38780 // function. The `output` tensor has shape 38781 // `[batch, out_height, out_width, depth]`. The spatial dimensions of the output 38782 // tensor depend on the `padding` algorithm. We currently only support the default 38783 // "NHWC" `data_format`. 38784 // 38785 // In detail, the grayscale morphological 2-D dilation is the max-sum correlation 38786 // (for consistency with `conv2d`, we use unmirrored filters): 38787 // 38788 // output[b, y, x, c] = 38789 // max_{dy, dx} input[b, 38790 // strides[1] * y + rates[1] * dy, 38791 // strides[2] * x + rates[2] * dx, 38792 // c] + 38793 // filter[dy, dx, c] 38794 // 38795 // Max-pooling is a special case when the filter has size equal to the pooling 38796 // kernel size and contains all zeros. 38797 // 38798 // Note on duality: The dilation of `input` by the `filter` is equal to the 38799 // negation of the erosion of `-input` by the reflected `filter`. 38800 // 38801 // Arguments: 38802 // input: 4-D with shape `[batch, in_height, in_width, depth]`. 38803 // filter: 3-D with shape `[filter_height, filter_width, depth]`. 38804 // strides: The stride of the sliding window for each dimension of the input 38805 // tensor. Must be: `[1, stride_height, stride_width, 1]`. 38806 // rates: The input stride for atrous morphological dilation. Must be: 38807 // `[1, rate_height, rate_width, 1]`. 38808 // padding: The type of padding algorithm to use. 38809 // 38810 // Returns 4-D with shape `[batch, out_height, out_width, depth]`. 38811 func Dilation2D(scope *Scope, input tf.Output, filter tf.Output, strides []int64, rates []int64, padding string) (output tf.Output) { 38812 if scope.Err() != nil { 38813 return 38814 } 38815 attrs := map[string]interface{}{"strides": strides, "rates": rates, "padding": padding} 38816 opspec := tf.OpSpec{ 38817 Type: "Dilation2D", 38818 Input: []tf.Input{ 38819 input, filter, 38820 }, 38821 Attrs: attrs, 38822 } 38823 op := scope.AddOperation(opspec) 38824 return op.Output(0) 38825 } 38826 38827 // Creates a dataset that shuffles and repeats elements from `input_dataset` 38828 // 38829 // pseudorandomly. 38830 // 38831 // Arguments: 38832 // 38833 // buffer_size: The number of output elements to buffer in an iterator over 38834 // this dataset. Compare with the `min_after_dequeue` attr when creating a 38835 // `RandomShuffleQueue`. 38836 // seed: A scalar seed for the random number generator. If either `seed` or 38837 // `seed2` is set to be non-zero, the random number generator is seeded 38838 // by the given seed. Otherwise, a random seed is used. 38839 // seed2: A second scalar seed to avoid seed collision. 38840 // count: A scalar representing the number of times the underlying dataset 38841 // should be repeated. The default is `-1`, which results in infinite repetition. 38842 // 38843 // 38844 func ShuffleAndRepeatDataset(scope *Scope, input_dataset tf.Output, buffer_size tf.Output, seed tf.Output, seed2 tf.Output, count tf.Output, output_types []tf.DataType, output_shapes []tf.Shape) (handle tf.Output) { 38845 if scope.Err() != nil { 38846 return 38847 } 38848 attrs := map[string]interface{}{"output_types": output_types, "output_shapes": output_shapes} 38849 opspec := tf.OpSpec{ 38850 Type: "ShuffleAndRepeatDataset", 38851 Input: []tf.Input{ 38852 input_dataset, buffer_size, seed, seed2, count, 38853 }, 38854 Attrs: attrs, 38855 } 38856 op := scope.AddOperation(opspec) 38857 return op.Output(0) 38858 } 38859 38860 // Creates a dataset that caches elements from `input_dataset`. 38861 // 38862 // A CacheDataset will iterate over the input_dataset, and store tensors. If the 38863 // cache already exists, the cache will be used. If the cache is inappropriate 38864 // (e.g. cannot be opened, contains tensors of the wrong shape / size), an error 38865 // will the returned when used. 38866 // 38867 // Arguments: 38868 // 38869 // filename: A path on the filesystem where we should cache the dataset. Note: this 38870 // will be a directory. 38871 // 38872 // 38873 func CacheDataset(scope *Scope, input_dataset tf.Output, filename tf.Output, output_types []tf.DataType, output_shapes []tf.Shape) (handle tf.Output) { 38874 if scope.Err() != nil { 38875 return 38876 } 38877 attrs := map[string]interface{}{"output_types": output_types, "output_shapes": output_shapes} 38878 opspec := tf.OpSpec{ 38879 Type: "CacheDataset", 38880 Input: []tf.Input{ 38881 input_dataset, filename, 38882 }, 38883 Attrs: attrs, 38884 } 38885 op := scope.AddOperation(opspec) 38886 return op.Output(0) 38887 } 38888 38889 // Creates a dataset that emits the records from one or more binary files. 38890 // 38891 // Arguments: 38892 // filenames: A scalar or a vector containing the name(s) of the file(s) to be 38893 // read. 38894 // header_bytes: A scalar representing the number of bytes to skip at the 38895 // beginning of a file. 38896 // record_bytes: A scalar representing the number of bytes in each record. 38897 // footer_bytes: A scalar representing the number of bytes to skip at the end 38898 // of a file. 38899 // buffer_size: A scalar representing the number of bytes to buffer. Must be > 0. 38900 func FixedLengthRecordDataset(scope *Scope, filenames tf.Output, header_bytes tf.Output, record_bytes tf.Output, footer_bytes tf.Output, buffer_size tf.Output) (handle tf.Output) { 38901 if scope.Err() != nil { 38902 return 38903 } 38904 opspec := tf.OpSpec{ 38905 Type: "FixedLengthRecordDataset", 38906 Input: []tf.Input{ 38907 filenames, header_bytes, record_bytes, footer_bytes, buffer_size, 38908 }, 38909 } 38910 op := scope.AddOperation(opspec) 38911 return op.Output(0) 38912 } 38913 38914 // Gradients for batch normalization. 38915 // 38916 // DEPRECATED at GraphDef version 9: Use tf.nn.batch_normalization() 38917 // 38918 // This op is deprecated. See `tf.nn.batch_normalization`. 38919 // 38920 // Arguments: 38921 // t: A 4D input Tensor. 38922 // m: A 1D mean Tensor with size matching the last dimension of t. 38923 // This is the first output from tf.nn.moments, 38924 // or a saved moving average thereof. 38925 // v: A 1D variance Tensor with size matching the last dimension of t. 38926 // This is the second output from tf.nn.moments, 38927 // or a saved moving average thereof. 38928 // gamma: A 1D gamma Tensor with size matching the last dimension of t. 38929 // If "scale_after_normalization" is true, this Tensor will be multiplied 38930 // with the normalized Tensor. 38931 // backprop: 4D backprop Tensor. 38932 // variance_epsilon: A small float number to avoid dividing by 0. 38933 // scale_after_normalization: A bool indicating whether the resulted tensor 38934 // needs to be multiplied with gamma. 38935 // 38936 // Returns 4D backprop tensor for input.1D backprop tensor for mean.1D backprop tensor for variance.1D backprop tensor for beta.1D backprop tensor for gamma. 38937 func BatchNormWithGlobalNormalizationGrad(scope *Scope, t tf.Output, m tf.Output, v tf.Output, gamma tf.Output, backprop tf.Output, variance_epsilon float32, scale_after_normalization bool) (dx tf.Output, dm tf.Output, dv tf.Output, db tf.Output, dg tf.Output) { 38938 if scope.Err() != nil { 38939 return 38940 } 38941 attrs := map[string]interface{}{"variance_epsilon": variance_epsilon, "scale_after_normalization": scale_after_normalization} 38942 opspec := tf.OpSpec{ 38943 Type: "BatchNormWithGlobalNormalizationGrad", 38944 Input: []tf.Input{ 38945 t, m, v, gamma, backprop, 38946 }, 38947 Attrs: attrs, 38948 } 38949 op := scope.AddOperation(opspec) 38950 return op.Output(0), op.Output(1), op.Output(2), op.Output(3), op.Output(4) 38951 } 38952 38953 // Creates a dataset that emits the records from one or more TFRecord files. 38954 // 38955 // Arguments: 38956 // filenames: A scalar or vector containing the name(s) of the file(s) to be 38957 // read. 38958 // compression_type: A scalar containing either (i) the empty string (no 38959 // compression), (ii) "ZLIB", or (iii) "GZIP". 38960 // buffer_size: A scalar representing the number of bytes to buffer. A value of 38961 // 0 means no buffering will be performed. 38962 func TFRecordDataset(scope *Scope, filenames tf.Output, compression_type tf.Output, buffer_size tf.Output) (handle tf.Output) { 38963 if scope.Err() != nil { 38964 return 38965 } 38966 opspec := tf.OpSpec{ 38967 Type: "TFRecordDataset", 38968 Input: []tf.Input{ 38969 filenames, compression_type, buffer_size, 38970 }, 38971 } 38972 op := scope.AddOperation(opspec) 38973 return op.Output(0) 38974 } 38975 38976 // ExperimentalStatsAggregatorHandleAttr is an optional argument to ExperimentalStatsAggregatorHandle. 38977 type ExperimentalStatsAggregatorHandleAttr func(optionalAttr) 38978 38979 // ExperimentalStatsAggregatorHandleContainer sets the optional container attribute to value. 38980 // If not specified, defaults to "" 38981 func ExperimentalStatsAggregatorHandleContainer(value string) ExperimentalStatsAggregatorHandleAttr { 38982 return func(m optionalAttr) { 38983 m["container"] = value 38984 } 38985 } 38986 38987 // ExperimentalStatsAggregatorHandleSharedName sets the optional shared_name attribute to value. 38988 // If not specified, defaults to "" 38989 func ExperimentalStatsAggregatorHandleSharedName(value string) ExperimentalStatsAggregatorHandleAttr { 38990 return func(m optionalAttr) { 38991 m["shared_name"] = value 38992 } 38993 } 38994 38995 // Creates a statistics manager resource. 38996 func ExperimentalStatsAggregatorHandle(scope *Scope, optional ...ExperimentalStatsAggregatorHandleAttr) (handle tf.Output) { 38997 if scope.Err() != nil { 38998 return 38999 } 39000 attrs := map[string]interface{}{} 39001 for _, a := range optional { 39002 a(attrs) 39003 } 39004 opspec := tf.OpSpec{ 39005 Type: "ExperimentalStatsAggregatorHandle", 39006 39007 Attrs: attrs, 39008 } 39009 op := scope.AddOperation(opspec) 39010 return op.Output(0) 39011 } 39012 39013 // A container for an iterator resource. 39014 // 39015 // Returns A handle to the iterator that can be passed to a "MakeIterator" or 39016 // "IteratorGetNext" op. In contrast to Iterator, AnonymousIterator prevents 39017 // resource sharing by name, and does not keep a reference to the resource 39018 // container. 39019 func AnonymousIterator(scope *Scope, output_types []tf.DataType, output_shapes []tf.Shape) (handle tf.Output) { 39020 if scope.Err() != nil { 39021 return 39022 } 39023 attrs := map[string]interface{}{"output_types": output_types, "output_shapes": output_shapes} 39024 opspec := tf.OpSpec{ 39025 Type: "AnonymousIterator", 39026 39027 Attrs: attrs, 39028 } 39029 op := scope.AddOperation(opspec) 39030 return op.Output(0) 39031 } 39032 39033 // Adjust the contrast of one or more images. 39034 // 39035 // `images` is a tensor of at least 3 dimensions. The last 3 dimensions are 39036 // interpreted as `[height, width, channels]`. The other dimensions only 39037 // represent a collection of images, such as `[batch, height, width, channels].` 39038 // 39039 // Contrast is adjusted independently for each channel of each image. 39040 // 39041 // For each channel, the Op first computes the mean of the image pixels in the 39042 // channel and then adjusts each component of each pixel to 39043 // `(x - mean) * contrast_factor + mean`. 39044 // 39045 // Arguments: 39046 // images: Images to adjust. At least 3-D. 39047 // contrast_factor: A float multiplier for adjusting contrast. 39048 // 39049 // Returns The contrast-adjusted image or images. 39050 func AdjustContrastv2(scope *Scope, images tf.Output, contrast_factor tf.Output) (output tf.Output) { 39051 if scope.Err() != nil { 39052 return 39053 } 39054 opspec := tf.OpSpec{ 39055 Type: "AdjustContrastv2", 39056 Input: []tf.Input{ 39057 images, contrast_factor, 39058 }, 39059 } 39060 op := scope.AddOperation(opspec) 39061 return op.Output(0) 39062 } 39063 39064 // Gets the next output from the given iterator . 39065 func IteratorGetNext(scope *Scope, iterator tf.Output, output_types []tf.DataType, output_shapes []tf.Shape) (components []tf.Output) { 39066 if scope.Err() != nil { 39067 return 39068 } 39069 attrs := map[string]interface{}{"output_types": output_types, "output_shapes": output_shapes} 39070 opspec := tf.OpSpec{ 39071 Type: "IteratorGetNext", 39072 Input: []tf.Input{ 39073 iterator, 39074 }, 39075 Attrs: attrs, 39076 } 39077 op := scope.AddOperation(opspec) 39078 if scope.Err() != nil { 39079 return 39080 } 39081 var idx int 39082 var err error 39083 if components, idx, err = makeOutputList(op, idx, "components"); err != nil { 39084 scope.UpdateErr("IteratorGetNext", err) 39085 return 39086 } 39087 return components 39088 } 39089 39090 // Outputs the single element from the given dataset. 39091 // 39092 // Arguments: 39093 // dataset: A handle to a dataset that contains a single element. 39094 // 39095 // 39096 // 39097 // Returns The components of the single element of `input`. 39098 func DatasetToSingleElement(scope *Scope, dataset tf.Output, output_types []tf.DataType, output_shapes []tf.Shape) (components []tf.Output) { 39099 if scope.Err() != nil { 39100 return 39101 } 39102 attrs := map[string]interface{}{"output_types": output_types, "output_shapes": output_shapes} 39103 opspec := tf.OpSpec{ 39104 Type: "DatasetToSingleElement", 39105 Input: []tf.Input{ 39106 dataset, 39107 }, 39108 Attrs: attrs, 39109 } 39110 op := scope.AddOperation(opspec) 39111 if scope.Err() != nil { 39112 return 39113 } 39114 var idx int 39115 var err error 39116 if components, idx, err = makeOutputList(op, idx, "components"); err != nil { 39117 scope.UpdateErr("DatasetToSingleElement", err) 39118 return 39119 } 39120 return components 39121 } 39122 39123 // Converts the given `resource_handle` representing an iterator to a string. 39124 // 39125 // Arguments: 39126 // resource_handle: A handle to an iterator resource. 39127 // 39128 // Returns A string representation of the given handle. 39129 func IteratorToStringHandle(scope *Scope, resource_handle tf.Output) (string_handle tf.Output) { 39130 if scope.Err() != nil { 39131 return 39132 } 39133 opspec := tf.OpSpec{ 39134 Type: "IteratorToStringHandle", 39135 Input: []tf.Input{ 39136 resource_handle, 39137 }, 39138 } 39139 op := scope.AddOperation(opspec) 39140 return op.Output(0) 39141 } 39142 39143 // IteratorFromStringHandleAttr is an optional argument to IteratorFromStringHandle. 39144 type IteratorFromStringHandleAttr func(optionalAttr) 39145 39146 // IteratorFromStringHandleOutputTypes sets the optional output_types attribute to value. 39147 // 39148 // value: If specified, defines the type of each tuple component in an 39149 // element produced by the resulting iterator. 39150 // If not specified, defaults to <> 39151 // 39152 // REQUIRES: len(value) >= 0 39153 func IteratorFromStringHandleOutputTypes(value []tf.DataType) IteratorFromStringHandleAttr { 39154 return func(m optionalAttr) { 39155 m["output_types"] = value 39156 } 39157 } 39158 39159 // IteratorFromStringHandleOutputShapes sets the optional output_shapes attribute to value. 39160 // 39161 // value: If specified, defines the shape of each tuple component in an 39162 // element produced by the resulting iterator. 39163 // If not specified, defaults to <> 39164 // 39165 // REQUIRES: len(value) >= 0 39166 func IteratorFromStringHandleOutputShapes(value []tf.Shape) IteratorFromStringHandleAttr { 39167 return func(m optionalAttr) { 39168 m["output_shapes"] = value 39169 } 39170 } 39171 39172 // Converts the given string representing a handle to an iterator to a resource. 39173 // 39174 // Arguments: 39175 // string_handle: A string representation of the given handle. 39176 // 39177 // Returns A handle to an iterator resource. 39178 func IteratorFromStringHandle(scope *Scope, string_handle tf.Output, optional ...IteratorFromStringHandleAttr) (resource_handle tf.Output) { 39179 if scope.Err() != nil { 39180 return 39181 } 39182 attrs := map[string]interface{}{} 39183 for _, a := range optional { 39184 a(attrs) 39185 } 39186 opspec := tf.OpSpec{ 39187 Type: "IteratorFromStringHandle", 39188 Input: []tf.Input{ 39189 string_handle, 39190 }, 39191 Attrs: attrs, 39192 } 39193 op := scope.AddOperation(opspec) 39194 return op.Output(0) 39195 } 39196