在张量流中创建新操作时指定形状句柄的形状(输出张量的秩问题)
Specifying shapehandle's shape when creating new op in tensorflow (rank problem of the output tensor)
我已经成功编译了OP注册文件,并在仅使用此文件时进行了测试。但是在培训过程中,我试图调用OP中定义的功能,这些错误遇到了,每次都会有所不同:
Segmentation fault (core dumped)
或
double free or corruption (!prev)
Aborted (core dumped)
或
ValueError: Shape must be rank 1 but is rank 99648624 for 'x' (op: 'x') with input shapes: [50, 1000, 3].
,请注意上面的数字99648624
是不确定的,有时可能是0或任何怪异的数字。
以下是在TensorFlow中注册OP的代码,在其中我将输出的维度指定为(b,200,200,1)
:
.SetShapeFn([](::tensorflow::shape_inference::InferenceContext* c) {
::tensorflow::shape_inference::ShapeHandle input
TF_RETURN_IF_ERROR(c->WithRank(c->input(0), 3, &input));
::tensorflow::shape_inference::ShapeHandle dim2;
TF_RETURN_IF_ERROR(c->MakeShapeFromShapeTensor(200, &dim2));
::tensorflow::shape_inference::ShapeHandle dim3;
TF_RETURN_IF_ERROR(c->MakeShapeFromShapeTensor(200, &dim3));
::tensorflow::shape_inference::ShapeHandle dim4;
TF_RETURN_IF_ERROR(c->MakeShapeFromShapeTensor(1, &dim4));
::tensorflow::shape_inference::ShapeHandle output = c->MakeShape({c->Dim(input, 0), c->Dim(dim2, 0), c->Dim(dim3, 0), c->Dim(dim4, 0)});
c->set_output(0, output);
return Status::OK();
});
预先感谢您!欢迎任何建议!
根据tensorflows源代码中的注释,MakeShapeFromShapeTensor
将ID作为输入:
在
out
中返回一个新形状的尺寸来自输入张量input_idx
。张量必须是1维INT32或INT64张量。如果 输入张量为null,然后返回未知的形状。
因此,它将您声明为带有索引input_idx
的输入的张量,并试图将其用作形状(而不是使用 c->input(0)
的张量,而不是使用张量(。因此,如果您宣布这样的输入:
REGISTER_OP("SomeOp")
.Input("some_input: float")
.Input("some_vector: int64")
和Some_Vector是例如(2,2,1(,那么c->MakeShapeFromShapeTensor(1, &dims)
将输出到具有尺寸的dims
A ShapeHandle
(2,2,1(。
因此,您真正想要的是在调用MakeShape
时直接设置尺寸:
c->MakeShape({c->Dim(input, 0), 200, 200, 1});
您的错误来自以下事实:在访问无效索引时,在C 中没有执行多次检查,因此它试图加载RAM中的任何值,并将其转换为整数向量。访问此内存adress是不允许的(分段故障(,或者它包含无效的值(损坏(或垃圾(随机高级(。
相关文章:
- 使用Pybind11向Python公开Eigen::张量
- C++中的张量流对象检测
- 在官方张量流 resnet50 模型上运行 tflite 精度工具
- PyTorch C++将数据转换为张量失败
- 如何使用 c++ 更改张量流中的per_process_gpu_memory_fraction?
- 编译 GPU 的张量流示例自定义操作
- 在 Torch C++ API 中,如何快速写入张量的内部数据?
- 如何在C++中将一个特征张量乘以另一个特征张量的标量和?
- C++ ABI 兼容性问题/张量流
- 如何从内存缓冲区加载张量流图
- PyTorch C++ 前端向前返回多个张量
- 从 std::向量值创建张量<Tensor>
- 张量流错误 此文件需要编译器和库支持 ISO C++ 2011 标准
- 如何将自定义特征张量类存储到 std::vector 中?
- CUDA 高效的 nd-array(张量)切片
- 部署在张量流中训练的神经网络来火炬C++的最佳方法是什么?
- 在张量流中创建新操作时指定形状句柄的形状(输出张量的秩问题)
- 特征张量的问题:声明矛盾
- 在C++中,这个Eigen::张量的声明是安全的,还是有缺陷的?我应该为它提交一个问题吗
- 使用本征张量类的问题