Powered by AppSignal & Oban Pro
Would you like to see your link here? Contact us

test_model

test.livemd

test_model

Dependencies

Mix.install([
  {:exla, "~> 0.1.0-dev", github: "elixir-nx/nx", sparse: "exla"},
  {:nx, "~> 0.1.0-dev", github: "elixir-nx/nx", sparse: "nx", override: true},
  {:axon, "~> 0.1.0-dev", github: "elixir-nx/axon"}
])

Load binary trained model and architecture

filename_w = "elixir-ml-example/x_ray_model_cnn_weights"
filename_m = "elixir-ml-example/x_ray_model_cnn_model"

{:ok, testt} = File.read(filename_w)
trained_model = :erlang.binary_to_term(testt)

{:ok, testt} = File.read(filename_m)
model = :erlang.binary_to_term(testt)

Load and preprocess test data

{:ok, test_images_bin} = File.read("elixir-ml-example/x-ray-test-ubyte")

<<_::32, n_test::32, n_rows::32, n_cols::32, test_data::binary>> = test_images_bin

x_test =
  test_data
  |> Nx.from_binary({:u, 8})
  |> Nx.reshape({n_test, 1, n_rows, n_cols})
  |> Nx.divide(255)

Load and preprocess test labels

{:ok, test_labels_bin} = File.read("elixir-ml-example/x-ray-test-labels-ubyte")

<<_::32, _::32, test_label::binary>> = test_labels_bin
y_test =
  test_label
  |> Nx.from_binary({:u, 8})
  |> Nx.reshape({n_test, 1})
  |> Nx.equal(Nx.tensor(Enum.to_list(0..1)))

Prediction

require Axon

result =
  model
  |> Axon.predict(trained_model.params, x_test, compiler: EXLA)

Categorial cross entropy result

result =
  result
  |> Nx.argmax(axis: 1)
  |> Nx.reshape({624, 1})
  |> Nx.equal(Nx.tensor(Enum.to_list(0..1)))

Get final accuracy

Axon.Metrics.accuracy(y_test, result)