aos

aos

Scholar.Preprocessing.one_hot_encode does not work?

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?

Most Liked

josevalim

josevalim

Creator of Elixir

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.

Last Post!

aos

aos

Where Next?

Popular in Questions Top

baxterw3b
Hi guys, i’m new in the Elixir world, and i have to say, that i love it! i’m having some problem to understand anonymous functions with ...
New
jononomo
I am trying to figure out how Mix knows whether the environment is test, dev, or prod – where is this set? Thanks.
New
hariharasudhan94
I would like to know what is the best IDE for elixir development?
New
gshaw
What is the idiomatic way of matching for not nil in Elixir? E.g., First way: defp halt_if_not_signed_in(conn, signed_in_account) when...
New
vrod
I am using the Starship cross-shell prompt – it seems pretty nice, but I get some errors: [WARN] - (starship::utils): Executing command ...
New
romenigld
I am trying to run a deploy with docker and I successfully runned with this command: docker build -t romenigld/blog-prod . but when I t...
New
svb
Hi! Currently I want to submit a form by pressing the Enter key. However, since my input field is of type “textarea” this is just adds a...
New

Other popular topics Top

minhajuddin
I have seen a lot of code which picks the first element from a list using Enum.at(0) instead of List.first. Is there a reason why people ...
New
vertexbuffer
Hello, can anybody help here..? I have a list of players and I what to delete an element, but every for loop the list is reverting to ori...
New
New
gausby
I asked this very same question on twitter and got some interesting feedback, but I thought it would be a good question to ask here as we...
1207 40082 209
New
SoCreat
i’m a new one to elixir which editor can i use vs code? or atom? Thanks! :smiley:
New
TunkShif
This post is an instruction guide to help you setup your Neovim for Elixir development from scratch. It includes general information on h...
274 42576 114
New

We're in Beta

About us Mission Statement