aos
Hey all. I’m working through some of my old torch into Nx. I ran into a particular problem that I’m hoping someone can shed some light on.
I’m attempting to one-hot encode a Nx.tensor, but using Scholar I get an error. Here’s the code, followed by error:
tensor = Nx.tensor(5)
num_classes = 27
Scholar.Preprocessing.one_hot_encode(tensor, num_classes: num_classes)
This gives me this error:
** (ArgumentError) given axis (0) invalid for shape with rank 0
(nx 0.7.3) lib/nx/shape.ex:1121: Nx.Shape.normalize_axis/4
(nx 0.7.3) lib/nx.ex:14975: anonymous fn/3 in Nx.sort/2
(nx 0.7.3) lib/nx.ex:5368: Nx.apply_vectorized/2
(scholar 0.3.1) lib/scholar/preprocessing/ordinal_encoder.ex:53: Scholar.Preprocessing.OrdinalEncoder."__defn:fit_n__"/2
(nx 0.7.3) lib/nx/defn/compiler.ex:218: Nx.Defn.Compiler.__remote__/4
(scholar 0.3.1) lib/scholar/preprocessing/one_hot_encoder.ex:62: Scholar.Preprocessing.OneHotEncoder."__defn:fit_n__"/2
(scholar 0.3.1) lib/scholar/preprocessing/one_hot_encoder.ex:133: Scholar.Preprocessing.OneHotEncoder."__defn:fit_transform__"/2
#cell:bdn3o6ty5cug3rcb:8: (file)
I dug a bit into the original Scholar code that added one hot encoding here: Add ordinal and one-hot encodings by msluszniak · Pull Request #26 · elixir-nx/scholar · GitHub It looks like this is no longer the code that does one-hot encoding.
I tested it out, and this seems to do what I expect. For example:
tensor = Nx.tensor(5)
num_classes = 27
Nx.equal(
Nx.new_axis(tensor, -1),
Nx.iota({1, num_classes})
)
This looks correct to me:
#Nx.Tensor<
u8[1][27]
EXLA.Backend<host:0, 0.1032028734.2104360976.142186>
[
[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
]
>
Am I doing something wrong or is there some sort of bug in the one_hot_encode function?
Trending in Questions
Hello!
Suppose you are building workflow (order / task / payment) processing system with the following requirements:
Each workflow con...
New
Hi all,
I’m working on a Phoenix project where I need to make external HTTP requests and I’m trying to choose between Req and HTTPoison....
New
How do I tell Hologram not to escape HTML when substituting into templates?
{Textile.render(@product.long_description)}
escapes the HTM...
New
I’d like to create a file with 600 permissions (rw-------), but there’s a race condition if I create it and then change the permissions. ...
New
Hi,
we run different LLM models across a cluster, with each node loading a configurable subset. Model-specific queues let nodes consume ...
New
Is there a way to import record definitions in the iex shell for pretty printing (similar to the rr command in the erl shell)? This woul...
New
When I use Mix.install with a git dependency, using git@github.com:... how do I change the SSH identity used?
I’ve got two Github accoun...
New
Other Trending Topics
Hey there,
I haven’t seen a list of useful Elixir specific skills for the popular AI tools yet so I’m starting one here with my first.
...
New
Hi everyone :waving_hand:
I wanted to share something I’ve been building — NowBlind, a random chat app designed to help people discover ...
New
I fully migrated to my own harness from Anthropic/Gemini and I think it’s time to share it. Welcome DSH, the DeepSeek Harness, fully writ...
New
Hey. Is there anyone here who creates agents in their apps? Not talking about using agents, but creating them. I’m finding it pretty diff...
New
(I just needed to vent somewhere and LinkedIn is full of hope, or hype, I’m not sure which exactly)
AI dream has many faces, but general...
New
Localize is the next generation localisation library for Elixir. Think of it as ex_cldr version 3.0. The first version will be released ...
New
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #library
- #deployment
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #elixirconf
- #channels
- #exunit
- #code-sync
- #discussion
- #podcasts
- #javascript
- #onsite
- #dialyzer
- #docker
- #authentication
- #ai
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #elixirconf-us
- #blog-post
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #graphql
- #genstage
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #elixirconf-eu
- #processes
- #security
- #api
- #forms
- #performance











Showing Posts 1 to 3- Show Best Posts
- Show All (oldest first)
- Show All (newest first)
aos
Started to do my own investigation of this. Looks like the issue is with the
Nx.sortcall here: scholar/lib/scholar/preprocessing/ordinal_encoder.ex at 8712e96189983e56f32050ba91874e115ed70e1d · elixir-nx/scholar · GitHubIt doesn’t properly work for scalar tensors:
Returns the same error:
So this seems like a bug (or feature?) in
Nxitself.However,
Nx.sortdoes work with 1D tensors, and doesn’t error out. So attempting the original with a 1D tensor, I get a different error.So there’s probably 2 different issues going on here.
I’m going to continue digging to see if I can find a resolution to this problem.
josevalim
The ordinal encoder is expecting a tensor with at least two elements. Once you fulfill that requirement, it should work. Can you please open up an issue on Scholar? We should check for the shape and “hardcode” the answer if a tensor of size 1 is given. We should probably check the shapes in general.
aos
Good to know - thank you. I’ve submitted the issue here: `one_hot_encode` errors with tensor of size 1 · Issue #290 · elixir-nx/scholar · GitHub