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)