iprog4u

iprog4u

Machine Learning in Elixir: Chapter 6 Axon.Display.as_table does not work (Page 133)

Please guide me in the right direction. I am able to get .as_graph() to display the model correctly

Axon.Display.as_graph(model, template)

however when I try to run .as_table() I get an error (CAUTION: wall of error text follows):

Axon.Display.as_table(model, template)
|> IO.puts

** (FunctionClauseError) no function clause matching in Axon.Display.do_axon_to_rows/6    
    
    The following arguments were given to Axon.Display.do_axon_to_rows/6:
    
        # 1
        %Axon.Node{
          id: 5,
          name: #Function<194.57606554/2 in Axon.name/2>,
          mode: :both,
          parent: [4],
          parameters: [],
          args: [:layer],
          op: :softmax,
          policy: #Axon.MixedPrecision.Policy<>,
          hooks: [],
          opts: [],
          global_options: [],
          op_name: :softmax,
          meta: %{},
          stacktrace: [
            {Axon, :layer, 3, [file: ~c"lib/axon.ex", line: 346]},
            {:elixir, :eval_external_handler, 3, [file: ~c"src/elixir.erl", line: 388]},
            {:erl_eval, :do_apply, 7, [file: ~c"erl_eval.erl", line: 919]},
            {:erl_eval, :expr, 6, [file: ~c"erl_eval.erl", line: 663]},
            {:elixir, :eval_forms, 4, [file: ~c"src/elixir.erl", line: 366]},
            {Module.ParallelChecker, :verify, 1, [file: ~c"lib/module/parallel_checker.ex", line: 120]}
          ]
        }
    
        # 2
        %{
          1 => %Axon.Node{
            id: 1,
            name: #Function<195.57606554/2 in Axon.name/2>,
            mode: :both,
            parent: [],
            parameters: [],
            args: [],
            op: :input,
            policy: #Axon.MixedPrecision.Policy<>,
            hooks: [],
            opts: [shape: {nil, 748}, optional: false],
            global_options: [],
            op_name: :input,
            meta: nil,
            stacktrace: [
              {Axon, :layer, 3, [file: ~c"lib/axon.ex", line: 346]},
              {:elixir, :eval_external_handler, 3, [file: ~c"src/elixir.erl", line: 388]},
              {:erl_eval, :do_apply, 7, [file: ~c"erl_eval.erl", line: 919]},
              {:erl_eval, :expr_list, 7, [file: ~c"erl_eval.erl", line: 1207]},
              {:erl_eval, :expr, 6, [file: ~c"erl_eval.erl", line: 625]},
              {:erl_eval, :expr_list, 7, [file: ~c"erl_eval.erl", line: 1207]}
            ]
          },
          2 => %Axon.Node{
            id: 2,
            name: #Function<194.57606554/2 in Axon.name/2>,
            mode: :both,
            parent: [1],
            parameters: [
              %Axon.Parameter{
                name: "kernel",
                template: #Function<485.57606554/1 in Axon.shape_fun/2>,
                shape: nil,
                initializer: #Function<3.47872556/3 in Axon.Initializers.glorot_uniform/1>,
                children: nil,
                type: {:f, 32},
                frozen: false,
                kind: :parameter
              },
              %Axon.Parameter{
                name: "bias",
                template: #Function<485.57606554/1 in Axon.shape_fun/2>,
                shape: nil,
                initializer: #Function<23.47872556/2 in Axon.Initializers.zeros/0>,
                children: nil,
                type: {:f, 32},
                frozen: false,
                kind: :parameter
              }
            ],
            args: [:layer, :parameter, :parameter],
            op: :dense,
            policy: #Axon.MixedPrecision.Policy<>,
            hooks: [],
            opts: [],
            global_options: [],
            op_name: :dense,
            meta: %{use_bias: true, units: 128},
            stacktrace: [
              {Axon, :layer, 3, [file: ~c"lib/axon.ex", line: 346]},
              {Axon, :dense, 3, [file: ~c"lib/axon.ex", line: 877]},
              {:elixir, :eval_external_handler, 3, [file: ~c"src/elixir.erl", line: 388]},
              {:erl_eval, :do_apply, 7, [file: ~c"erl_eval.erl", line: 919]},
              {:erl_eval, :expr_list, 7, [file: ~c"erl_eval.erl", line: 1207]},
              {:erl_eval, :expr, 6, [file: ~c"erl_eval.erl", line: 625]}
            ]
          },
          3 => %Axon.Node{
            id: 3,
            name: #Function<194.57606554/2 in Axon.name/2>,
            mode: :both,
            parent: [2],
            parameters: [],
            args: [:layer],
            op: :relu,
            policy: #Axon.MixedPrecision.Policy<>,
            hooks: [],
            opts: [],
            global_options: [],
            op_name: :relu,
            meta: %{},
            stacktrace: [
              {Axon, :layer, 3, [file: ~c"lib/axon.ex", line: 346]},
              {:elixir, :eval_external_handler, 3, [file: ~c"src/elixir.erl", line: 388]},
              {:erl_eval, :do_apply, 7, [file: ~c"erl_eval.erl", line: 919]},
              {:erl_eval, :expr_list, 7, [file: ~c"erl_eval.erl", line: 1207]},
              {:erl_eval, :expr, 6, [file: ~c"erl_eval.erl", line: 625]},
              {:erl_eval, :expr, 6, [file: ~c"erl_eval.erl", line: 663]}
            ]
          },
          4 => %Axon.Node{
            id: 4,
            name: #Function<194.57606554/2 in Axon.name/2>,
            mode: :both,
            parent: [3],
            parameters: [
              %Axon.Parameter{
                name: "kernel",
                template: #Function<485.57606554/1 in Axon.shape_fun/2>,
                shape: nil,
                initializer: #Function<3.47872556/3 in Axon.Initializers.glorot_uniform/1>,
                children: nil,
                type: {:f, 32},
                frozen: false,
                kind: :parameter
              },
              %Axon.Parameter{
                name: "bias",
                template: #Function<485.57606554/1 in Axon.shape_fun/2>,
                shape: nil,
                initializer: #Function<23.47872556/2 in Axon.Initializers.zeros/0>,
                children: nil,
                type: {:f, 32},
                frozen: false,
                kind: :parameter
              }
            ],
            args: [:layer, :parameter, :parameter],
            op: :dense,
            policy: #Axon.MixedPrecision.Policy<>,
            hooks: [],
            opts: [],
            global_options: [],
            op_name: :dense,
            meta: %{use_bias: true, units: 10},
            stacktrace: [
              {Axon, :layer, 3, [file: ~c"lib/axon.ex", line: 346]},
              {Axon, :dense, 3, [file: ~c"lib/axon.ex", line: 877]},
              {:elixir, :eval_external_handler, 3, [file: ~c"src/elixir.erl", line: 388]},
              {:erl_eval, :do_apply, 7, [file: ~c"erl_eval.erl", line: 919]},
              {:erl_eval, :expr, 6, [file: ~c"erl_eval.erl", line: 663]},
              {:elixir, :eval_forms, 4, [file: ~c"src/elixir.erl", line: 366]}
            ]
          },
          5 => %Axon.Node{
            id: 5,
            name: #Function<194.57606554/2 in Axon.name/2>,
            mode: :both,
            parent: [4],
            parameters: [],
            args: [:layer],
            op: :softmax,
            policy: #Axon.MixedPrecision.Policy<>,
            hooks: [],
            opts: [],
            global_options: [],
            op_name: :softmax,
            meta: %{},
            stacktrace: [
              {Axon, :layer, 3, [file: ~c"lib/axon.ex", line: 346]},
              {:elixir, :eval_external_handler, 3, [file: ~c"src/elixir.erl", line: 388]},
              {:erl_eval, :do_apply, 7, [file: ~c"erl_eval.erl", line: 919]},
              {:erl_eval, :expr, 6, [file: ~c"erl_eval.erl", line: 663]},
              {:elixir, :eval_forms, 4, [file: ~c"src/elixir.erl", line: 366]},
              {Module.ParallelChecker, :verify, 1, [file: ~c"lib/module/parallel_checker.ex", line: 120]}
            ]
          }
        }
    
        # 3
        #Nx.Tensor<
          f32[1][784]
          Nx.TemplateBackend
        >
    
        # 4
        %{}
    
        # 5
        %{}
    
        # 6
        %{num_params: 0, total_param_byte_size: 0}
    
    Attempted function clauses (showing 2 out of 2):
    
        defp do_axon_to_rows(%Axon.Node{id: id, op: structure, op_name: :container, parent: [parents], name: name_fn}, nodes, templates, cache, op_counts, model_info)
        defp do_axon_to_rows(%Axon.Node{
      id: id,
      parent: parents,
      parameters: params,
      name: name_fn,
      opts: opts,
      policy: %{params: {_, bitsize}},
      op_name: op_name
    }, nodes, templates, cache, op_counts, model_info)
    
    (axon 0.7.0) lib/axon/display.ex:93: Axon.Display.do_axon_to_rows/6
    (axon 0.7.0) lib/axon/display.ex:85: Axon.Display.axon_to_rows/6
    (axon 0.7.0) lib/axon/display.ex:39: Axon.Display.as_table/2
    #cell:r744jk7wwgcawf6v:2: (file)

Perhaps not hyper important as the graph contains the same info but it is nice how the table has the labels.

Marked As Solved

iprog4u

iprog4u

Removing specific versions or updating to the latest available version corrected the issue for me. Pol Valente was kind enough to update the Axon lib, thanks Pol!

Mix.install([
  :axon,
  :nx,
  :exla,
  :kino,
  :table_rex,
  :scidata
])

Nx.default_backend(EXLA.Backend)

Axon.Display.as_table(model, template)
|> IO.puts()
+------------------------------------------------------------------------------------------------------------------+
|                                                      Model                                                       |
+=======================+===============================+==============+===================+=======================+
| Layer                 | Input Shape                   | Output Shape | Options           | Parameters            |
+=======================+===============================+==============+===================+=======================+
| images ( input )      | %{}                           | f32[1][784]  | shape: {nil, 784} |                       |
|                       |                               |              | optional: false   |                       |
+-----------------------+-------------------------------+--------------+-------------------+-----------------------+
| dense_0 ( dense )     | %{"images" => "f32[1][784]"}  | f32[1][128]  |                   | kernel: f32[784][128] |
|                       |                               |              |                   | bias: f32[128]        |
+-----------------------+-------------------------------+--------------+-------------------+-----------------------+
| relu_0 ( relu )       | %{"dense_0" => "f32[1][128]"} | f32[1][128]  |                   |                       |
+-----------------------+-------------------------------+--------------+-------------------+-----------------------+
| dense_1 ( dense )     | %{"relu_0" => "f32[1][128]"}  | f32[1][10]   |                   | kernel: f32[128][10]  |
|                       |                               |              |                   | bias: f32[10]         |
+-----------------------+-------------------------------+--------------+-------------------+-----------------------+
| softmax_0 ( softmax ) | %{"dense_1" => "f32[1][10]"}  | f32[1][10]   |                   |                       |
+-----------------------+-------------------------------+--------------+-------------------+-----------------------+
Total Parameters: 101770
Total Parameters Memory: 407.08 kilobytes

Where Next?

Popular Pragmatic Bookshelf topics Top

telemachus
Python Testing With Pytest - Chapter 2, warnings for “unregistered custom marks” While running the smoke tests in Chapter 2, I get these...
New
yulkin
your book suggests to use Image.toByteData() to convert image to bytes, however I get the following error: "the getter ‘toByteData’ isn’t...
New
rmurray10127
Title: Intuitive Python: docker run… denied error (page 2) Attempted to run the docker command in both CLI and Powershell PS C:\Users\r...
New
swlaschin
The book has the same “Problem space/Solution space” diagram on page 18 as is on page 17. The correct Problem/Solution space diagrams ar...
New
brunogirin
When installing Cards as an editable package, I get the following error: ERROR: File “setup.py” not found. Directory cannot be installe...
New
oaklandgit
Hi, I completed chapter 6 but am getting the following error when running: thread 'main' panicked at 'Failed to load texture: IoError(O...
New
hazardco
On page 78 the following code appears: &lt;%= link_to ‘Destroy’, product, class: ‘hover:underline’, method: :delete, data: { confirm...
New
bjnord
Hello @herbert ! Trying to get the very first “Hello, Bracket Terminal!" example to run (p. 53). I develop on an Amazon EC2 instance runn...
New
davetron5000
Hello faithful readers! If you have tried to follow along in the book, you are asked to start up the dev environment via dx/build and ar...
New
roadbike
From page 13: On Python 3.7, you can install the libraries with pip by running these commands inside a Python venv using Visual Studio ...
New

Other popular topics Top

AstonJ
Curious to know which languages and frameworks you’re all thinking about learning next :upside_down_face: Perhaps if there’s enough peop...
New
PragmaticBookshelf
Rust is an exciting new programming language combining the power of C with memory safety, fearless concurrency, and productivity boosters...
New
AstonJ
Was just curious to see if any were around, found this one: I got 51/100: Not sure if it was meant to buy I am sure at times the b...
New
New
sir.laksmana_wenk
I’m able to do the “artistic” part of game-development; character designing/modeling, music, environment modeling, etc. However, I don’t...
New
AstonJ
This is a very quick guide, you just need to: Download LM Studio: https://lmstudio.ai/ Click on search Type DeepSeek, then select the o...
New
PragmaticBookshelf
Overarching tutorial for Python beginner and intermediate developers that teaches web development with the Flask framework. Miguel Gr...
New
Fl4m3Ph03n1x
Background Lately I am in a quest to find a good quality TTS ai generation tool to run locally in order to create audio for some videos I...
New
PragmaticBookshelf
Use advanced functional programming principles, practical Domain-Driven Design techniques, and production-ready Elixir code to build scal...
New
PragmaticBookshelf
Lint your docs like code: turn any style guide into enforceable rules with Vale and publish clear, consistent content every time. ...
New

Sub Categories: