gpt4 book ai didi

android - ANeuralNetworksMemory_createFromFd 是如何工作的?

转载 作者:太空宇宙 更新时间:2023-11-03 17:25:34 26 4
gpt4 key购买 nike

在 Android Neural Network API 文档中说:从文件描述符创建共享内存对象。

但我在 TFL 源代码上找不到任何地方指定此文件的格式:

分配.cc:

MMAPAllocation::MMAPAllocation(const char* filename,
ErrorReporter* error_reporter)
: Allocation(error_reporter), mmapped_buffer_(MAP_FAILED) {
mmap_fd_ = open(filename, O_RDONLY);
if (mmap_fd_ == -1) {
error_reporter_->Report("Could not open '%s'.", filename);
return;
}
struct stat sb;
fstat(mmap_fd_, &sb);
buffer_size_bytes_ = sb.st_size;
mmapped_buffer_ =
mmap(nullptr, buffer_size_bytes_, PROT_READ, MAP_SHARED, mmap_fd_, 0);
if (mmapped_buffer_ == MAP_FAILED) {
error_reporter_->Report("Mmap of '%s' failed.", filename);
return;
}
}

nnapi_delegate.cc

NNAPIAllocation::NNAPIAllocation(const char* filename,
ErrorReporter* error_reporter)
: MMAPAllocation(filename, error_reporter) {
if (mmapped_buffer_ != MAP_FAILED)
CHECK_NN(ANeuralNetworksMemory_createFromFd(buffer_size_bytes_, PROT_READ,
mmap_fd_, 0, &handle_));
}

意思是,TFL打开文件,把这个文件交给NNAPI。我需要的是这个存储张量的文件的格式是什么,它是像 TFL 格式的 FlatBuffers 文件吗?

编辑:这是来自 NNAPI 文档的示例:

ANeuralNetworksMemory* mem1 = NULL;
int fd = open("training_data", O_RDONLY);
ANeuralNetworksMemory_createFromFd(file_size, PROT_READ, fd, 0, &mem1);

这个文件training_data,它的内容必须如何构造才能让 NNAPI 理解?

最佳答案

ANeuralNetworksMemory_createFromFd(file_size, PROT_READ, fd, 0, &mem1) - 此 API 将模型文件映射到 ANeuralNetworksMemory。

映射地址存储在mem1(通过引用传递!)

此外,通过指向适当的偏移值读取存储在 mem1(ANeuralNetworksMemory 对象)中的训练值,并将其复制到神经网络模型的张量中。

 ANeuralNetworksModel_setOperandValueFromMemory(model_, tensor0, mem1, offset, size);
ANeuralNetworksModel_setOperandValueFromMemory(model_, tensor1, mem1, offset+size, size);
  • tensor0 - 指向偏移量
  • tensor1 - 指向offset+size

关于android - ANeuralNetworksMemory_createFromFd 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48915426/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com