【问题标题】:TensorFlow Casting Internal Tensor PointerTensorFlow Casting 内部张量指针
【发布时间】:2016-10-07 21:38:01
【问题描述】:

previously asked 如何获取张量内的指针。我现在想弄清楚存储的数据类型,然后能够将void* 转换为这种数据类型。

张量有一个功能, DataType dtype() const { return shape_.data_type(); }

DataType 是一个简单的枚举,实际上并不能帮助我投射。我希望static_cast<type> 能够得到dtype() 的结果。因此,我正在寻找可以为我执行此操作的宏或模板。

这样的存在吗?

【问题讨论】:

    标签: c++ templates macros tensorflow


    【解决方案1】:

    框架在types.h中构建,在queue_base.cc中使用

    不幸的是,因为它是一个模板,你需要使用宏等来编译每个不同的模板。

    首先编写获取类型作为模板参数的函数

    template <DataType DT>
    Status HandleSliceToElement(const Tensor& parent, Tensor* element,
                                int64 index) {
      typedef typename EnumToDataType<DT>::Type T;
      ...
    }
    

    然后使用宏来处理每种数据类型。为简洁起见(见完整版list of macros

    Status QueueBase::CopySliceToElement(const Tensor& parent, Tensor* element,
                                         int64 index) {
    #define HANDLE_TYPE(DT)                                                   \
      if (parent.dtype() == DT) {                                             \
        TF_RETURN_IF_ERROR(HandleSliceToElement<DT>(parent, element, index)); \
        return Status::OK();                                                  \
      }
      HANDLE_TYPE(DT_FLOAT);
      HANDLE_TYPE(DT_HALF);
      HANDLE_TYPE(DT_DOUBLE);
      ...
    #undef HANDLE_TYPE
      return errors::Unimplemented("CopySliceToElement Unhandled data type: ",
                                   parent.dtype());
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 2012-10-17
      • 2020-01-13
      • 1970-01-01
      • 1970-01-01
      • 2018-10-09
      • 1970-01-01
      相关资源
      最近更新 更多