swift - 从 swift 数组创建张量

标签 swift tensorflow swift-for-tensorflow

这很好用:

import TensorFlow
var t = Tensor<Float>([[1, 0], [0, 1]])

但是下面给出了错误

import TensorFlow
var a = [[1, 0], [0, 1]]
var t = Tensor<Float>(a)
error: expression type 'Tensor<Float>' is ambiguous without more context
var t = Tensor<Float>(a)
        ^~~~~~~~~~~~~~~~

为什么会这样?还有如何从数组中快速创建张量。

最佳答案

您的第一个代码之所以有效,是因为它使用文字,而不是使用已声明的变量(其类型已确定)来初始化 Tensor<Float> .编译器对文字进行特殊处理。

Tensor.init 的过载你打电话的是this .在您的情况下,它接受 ShapedArray<Float> .

ShapedArray 符合协议(protocol)ExpressibleByArrayLiteral ,这意味着编译器可以将数组文字转换为 ShapeArray含蓄地。然而,这仅限于文字,例如[[1, 0], [0, 1]] ,而不是引用数组类型变量的标识符,例如 a . a的类型被推断为 [[Int]]由编译器,编译器不能隐式转换 [[Int]]ShapedArray<Float> .

虽然不那么重要,但事实是 Float符合 ExpressibleByIntegerLiteral (因此 10 可以转换为 float )也在允许您的代码编译方面发挥作用。

为什么var aa: Tensor<Float> = [[1.0, 0.0], [1.0, 0.0]]的原因工作是因为Tensor也符合 ExpressibleByArrayLiteral .

关于swift - 从 swift 数组创建张量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59508668/

相关文章:

iOS 结果类型 'Element' 与预期类型不匹配(Swift - Coredata)

swift - 保存 UIImage 数组以解析为一个文件

ios - Swift 4.1 类属性和子字符串前缀为 'some' (Xcode 9.3)

c++ - dlib 19.6 多分类器训练数据

c++ - TensorFlow C++ API 中 ClientSession 和 Session 的区别

c - 通过 C API 访问 tensorflow 2.0 SavedModel 的输入和输出张量

swift - tensorflow 模块在 swift 内部不可见

objective-c - Swift 和 AFNetworking 集成