У меня есть Tensor :: тензор, который я буду нарезать несколько раз и изменить значение на лету. И нарезанное значение будет подано в сеть. Поэтому мне нужен эффективный и элегантный способ выполнения операций нарезки и подачи.
Я использую версию тензорного потока для С ++, и наиболее интуитивно понятный способ в Python так же прост, как использовать numpy's arr [:, h: h + 3, w: w + 3,:] и feeddict.
Но в с ++, вот так
for h{
for w{
for i in range 3{
for j in range 3{
new_tensor(i,j) = m_tensor(h+i,w+j)
}
}
out = sess->run(out_node, in:new_tensor)
m_tensor(h,w) = out.xxx
}
}
метод не так элегантен, как я ожидал.
- получение ломтика
Сначала я пытался использовать операцию среза Eigen :: tenor для прямой передачи его в Tensor :: tenser, но странные ошибки мешают его компиляции
https://bitbucket.org/eigen/eigen/src/default/unsupported/Eigen/CXX11/src/Tensor/README.md?fileviewer=file-view-default#markdown-header-operation-chipconst-index-offset-const-index-dim
Тогда я думаю, что хорошо, я просто нарежу его, а затем скопирую в тензор.
- преобразовать его в тензор
Наиболее показанные результаты:
std::copy_n(vec.begin(), vec.size(), input.flat<float>().data())
или
std::memcpy(input.flat<float>().data(), vec.data(), input.NumElements() * sizeof(float))
Я ожидаю, что более быстрый способ присвоения значения тензору, чем подача в сеть, есть ли более интуитивный способ?
Ниже приведена часть, которую я хочу ускорить.
for i in range 3{
for j in range 3{
new_tensor(i,j) = m_tensor(h+i,w+j)
}
}