From 38ff7c8a74daf695e4897d5aa39494b29ee68ddb Mon Sep 17 00:00:00 2001 From: Harry Stuart Date: Tue, 11 Jun 2024 21:28:52 +1000 Subject: [PATCH] Add create_image.py --- benchmarks/benchmark_performance.py | 6 +++--- benchmarks/execution_time_comparison.png | Bin 0 -> 36279 bytes create_image.py | 13 +++++++++++++ 3 files changed, 16 insertions(+), 3 deletions(-) create mode 100644 benchmarks/execution_time_comparison.png create mode 100644 create_image.py diff --git a/benchmarks/benchmark_performance.py b/benchmarks/benchmark_performance.py index da616ab..9771844 100644 --- a/benchmarks/benchmark_performance.py +++ b/benchmarks/benchmark_performance.py @@ -35,9 +35,9 @@ def mlflow_context(): @given( data=st.data(), feature_size=st.integers(min_value=1, max_value=10), - width=st.integers(min_value=MINIMUM_NETWORK_DIMENSION, max_value=20), - height=st.integers(min_value=MINIMUM_NETWORK_DIMENSION, max_value=20), - num_iterations=st.integers(min_value=10, max_value=50), + width=st.integers(min_value=MINIMUM_NETWORK_DIMENSION, max_value=100), + height=st.integers(min_value=MINIMUM_NETWORK_DIMENSION, max_value=100), + num_iterations=st.integers(min_value=10, max_value=100), initial_learning_rate=st.floats(min_value=1e-3, max_value=1.0, allow_nan=False, allow_infinity=False) ) @settings(max_examples=10, deadline=None, suppress_health_check=(HealthCheck.too_slow,)) diff --git a/benchmarks/execution_time_comparison.png b/benchmarks/execution_time_comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..b7858b1ee158f96df091b63ce686d1d5a7e6dee1 GIT binary patch literal 36279 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 D`rKp> literal 0 HcmV?d00001 diff --git a/create_image.py b/create_image.py new file mode 100644 index 0000000..0a36290 --- /dev/null +++ b/create_image.py @@ -0,0 +1,13 @@ +import numpy as np +import matplotlib.pyplot as plt + +from models import train_kohonen_network, create_kohonen_params + +X = np.random.random((1000,3)) + +IMAGE_SIZE = 10 + +params = create_kohonen_params(X, IMAGE_SIZE, IMAGE_SIZE, 1000).unwrap() +image_data = train_kohonen_network(X, params, use_mlflow=True).unwrap() + +plt.imsave(f'{IMAGE_SIZE}.png', image_data) \ No newline at end of file