Comments (4)
Thinking more about this, it would certainly be nice to use more of usize
for dimensions/shape, e.g. for size
or for the various nn
creators. The only exception I can think of are view
, get
, narrow
which should handle negative indexing and values. I'll try making some changes for this when I get a chance.
from tch-rs.
Right, having usize
at some places would be better. That said, a commonly used value is -1
both for indexes and shapes.
For indexes it means start from the end, -1 would be the last value, -2 the value before and so on.
For shapes it's used for a single dimension and gets an appropriate value based on the tensor total number of elements (this number of element has to be divisible by the product of sizes for other dimensions of course). E.g. one could write a.reshape([batch_size, -1])
to flatten a
.
This explains why i64
are used there, it's less verbose than using Option<usize>
for shapes or some other alternative for indexes, it's also close to how the python api works but it certainly doesn't feel very rust idiomatic.
from tch-rs.
Thanks for the quick reply! I like the idea of tch-rs
staying close to the Python API. For now I will just start to write some more idiomatic Rust wrappers around some of these methods for my own needs. Maybe in the future we can have a separate crate which handles these kind of things. Such a crate was briefly discussed in #12, do you have any ideas in mind here?
from tch-rs.
I don't have much concrete ideas but maybe a couple of these would be good:
- The tensor type could be parameterized by the kind of element embedded would be nice, e.g.
Tensor<i64>
. - The tensor type could embed the number of dimensions, e.g.
Tensor<d2, i64>
orTensor2d<i64>
. - Maybe tensors with named dimensions although that may be quite a stretch.
I would have hoped for the first two points to be doable when generating the binding code but I haven't found enough information in the Declarations.yaml
file that is used for generation. Fwiw tensorflow provides some description of operations with all the details on the supported types which make it possible to generate better type annotations, e.g. for conv2d here is some generated ocaml code: conv2d can only apply to tensors of float or double and return a tensor of the same type.
Also if you get some interesting wrappers that you think should be part of tch-rs
let me know via a PR or an issue.
from tch-rs.
Related Issues (20)
- pyo3 and windows 11: HOT 1
- Tried to register multiple backend fallbacks for the same dispatch key Conjugate HOT 1
- Is it possible to load weights from VarStore even after applying some operations?
- `try_from` ndarray to tensor using zero copy
- Workflows error when trying to build torch-sys without venv, "torch module not found" HOT 2
- Confusing warning emitted from `Tensor::scatter_reduce`.
- SDPA Flash kernel HOT 6
- when compile with tokenizers library , encounter static libcpmt.lib and dynamic msvcprt.lib conflict link error
- Load model once and run inference across threads?
- Build fails unless I downgrade `google-glog` to 0.6.0. HOT 5
- Copying Scalars from Torch to Rust? HOT 1
- Second-order utils ?
- Any plan on `at::Generator`?
- Could not be compliered. HOT 1
- Error with: Internal torch error: can't fopen
- concat doesn't support gradient HOT 1
- Double free or corruption (fasttop) HOT 1
- grads become zeros after a short period of training on metal backend
- Can we `.set_retains_grad(true)` ?
- model in rust, optimizer.step in python
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from tch-rs.