diff --git a/.devcontainer/cuda-tf/devcontainer.json b/.devcontainer/cuda-tf/devcontainer.json new file mode 100644 index 0000000..f3f3c1e --- /dev/null +++ b/.devcontainer/cuda-tf/devcontainer.json @@ -0,0 +1,70 @@ +{ + "name": "cuda-11.8", + "image": "mcr.microsoft.com/devcontainers/python:3.9", + // "hostRequirements": { + // "gpu": "optional" + // }, + "runArgs": [ + "--gpus=all" + ], + "remoteEnv": { + "PATH": "${containerEnv:PATH}:/usr/local/cuda/bin:/home/vscode/.local/bin", + "LD_LIBRARY_PATH": "$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64", + "XLA_FLAGS": "--xla_gpu_cuda_data_dir=/usr/local/cuda" + }, + "features": { + "ghcr.io/devcontainers/features/common-utils:2": { + "installZsh": true, + "installOhMyZsh": true, + "configureZshAsDefaultShell": true, + "username": "vscode", + "userUid": "1000", + "userGid": "1000" + // "upgradePackages": "true" + }, + // "ghcr.io/devcontainers/features/python:1": {}, + // "ghcr.io/devcontainers/features/node:1": "none", + "ghcr.io/devcontainers/features/git:1": { + "version": "latest", + "ppa": true + }, + "ghcr.io/devcontainers/features/nvidia-cuda:1": { + "installCudnn": true, + "cudaVersion": "11.8", + "cudnnVersion": "8.6.0.163", + "installToolkit": true + }, + "ghcr.io/iterative/features/nvtop:1": {} + }, + "updateContentCommand": "bash .devcontainer/cuda-tf/setup.sh", + "postCreateCommand": [ + "nvidia-smi" + ], + "customizations": { + "vscode": { + "settings": { + "python.linting.enabled": true, + "python.testing.pytestEnabled": true, + "editor.formatOnSave": true, + "editor.codeActionsOnSave": { + "source.organizeImports": "always" + }, + "[python]": { + "editor.defaultFormatter": "ms-python.vscode-pylance" + }, + "editor.rulers": [ + 80 + ] + }, + "extensions": [ + "ms-python.python", + "ms-toolsai.jupyter", + "ms-toolsai.vscode-jupyter-cell-tags", + "ms-toolsai.jupyter-keymap", + "ms-toolsai.jupyter-renderers", + "ms-toolsai.vscode-jupyter-slideshow", + "ms-python.vscode-pylance" + ] + } + } +} diff --git a/.devcontainer/cuda-tf/setup.sh b/.devcontainer/cuda-tf/setup.sh new file mode 100644 index 0000000..ad5f97e --- /dev/null +++ b/.devcontainer/cuda-tf/setup.sh @@ -0,0 +1,13 @@ +# install Python packages in virtual environment +# python3.11 -m venv .venv-3.11 +# source .venv-3.11/bin/activate +# python -m pip install --upgrade pip + +# needed to make sure default python is 3.9 instead of 3.11 +sudo ln -s -f /usr/local/bin/python3.9 /usr/bin/python3 + +# install packages and make sure we use TF 2.14.1 +pip install -e .[dev] tensorflow==2.14.1 + +# install pre-commit hook if not installed already +pre-commit install diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..9f441ad --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,37 @@ +--- +name: Bug report +about: Create a report to help us improve +title: 'Bug:' +labels: bug +assignees: '' +--- + +**Describe the bug** +Provide a clear and concise description of the bug. + +**How to reproduce** +Include source code: + +```python +import airt +... +``` + +And/Or steps to reproduce the behavior: + +1. ... + +**Expected behavior** +Explain what you expected to happen clearly and concisely. + +**Observed behavior** +Describe what is actually happening clearly and concisely. + +**Screenshots** +If applicable, attach screenshots to help illustrate the problem. + +**Environment** +Include the info of your environment and monotonic-nn version + +**Additional context** +Provide any other relevant context or information about the problem here. diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..bd6f9e8 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,8 @@ +blank_issues_enabled: true + +contact_links: + - name: Security Contact + about: Please report security vulnerabilities to info@airt.ai + - name: Question or Problem + about: Ask a question or ask about a problem in GitHub Discussions. + url: https://github.com/airtai/airt/discussions/categories/questions diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000..a8607df --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,29 @@ +--- +name: Feature Request +about: Suggest an idea for this project +title: 'Feature:' +labels: enhancement +assignees: '' +--- + +To suggest an idea or inquire about any other enhancement, please follow this template: + +**Is your feature request related to a problem? Please describe.** +Provide a clear and concise description of the problem you've encountered. For example: "I'm always frustrated when..." + +**Describe the solution you'd like** +Clearly and concisely describe the desired outcome or solution. + +**Feature code example** +To help others understand the proposed feature, illustrate it with a code example: + +```python +import airt +... +``` + +**Describe alternatives you've considered** +Provide a clear and concise description of any alternative solutions or features you've thought about. + +**Additional context** +Include any other relevant context or screenshots related to the feature request. diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..93f6f4c --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,26 @@ +# Description + +Please include a summary of the change and specify which issue is being addressed. Additionally, provide relevant motivation and context. + +Fixes # (issue number) + +## Type of change + +Please delete options that are not relevant. + +- [ ] Documentation (typos, code examples, or any documentation updates) +- [ ] Bug fix (a non-breaking change that resolves an issue) +- [ ] New feature (a non-breaking change that adds functionality) +- [ ] Breaking change (a fix or feature that would disrupt existing functionality) +- [ ] This change requires a documentation update + +## Checklist + +- [ ] My code adheres to the style guidelines of this project (`scripts/lint.sh` shows no errors) +- [ ] I have conducted a self-review of my own code +- [ ] I have made the necessary changes to the documentation +- [ ] My changes do not generate any new warnings +- [ ] I have added tests to validate the effectiveness of my fix or the functionality of my new feature +- [ ] Both new and existing unit tests pass successfully on my local environment by running `scripts/test-cov.sh` +- [ ] I have ensured that static analysis tests are passing by running `scripts/static-anaylysis.sh` +- [ ] I have included code examples to illustrate the modifications diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..a72abdc --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,17 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: + # GitHub Actions + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" + # Python + - package-ecosystem: "pip" # See documentation for possible values + directory: "/" # Location of package manifests + schedule: + interval: "weekly" diff --git a/.github/workflows/check-broken-links-in-docs.yaml b/.github/workflows/check-broken-links-in-docs.yaml new file mode 100644 index 0000000..d14b777 --- /dev/null +++ b/.github/workflows/check-broken-links-in-docs.yaml @@ -0,0 +1,19 @@ +name: Check docs for broken links + +on: + workflow_run: + workflows: ["pages-build-deployment"] + types: [completed] + +jobs: + check-broken-link: + name: Check docs for broken links + runs-on: ubuntu-latest + if: ${{ github.event.workflow_run.conclusion == 'success' }} + steps: + - name: Check links using container + uses: ruzickap/action-my-broken-link-checker@v2 + with: + url: https://airt.airt.ai + cmd_params: '--buffer-size=8192 --max-connections=1 --color=always --header="User-Agent:Mozilla/5.0(Firefox/97.0)" --exclude="(localhost:8000|linkedin.com|fonts.gstatic.com|reddit.com)" --max-connections-per-host=1 --rate-limit=1' + debug: true diff --git a/.github/workflows/codeql.yaml b/.github/workflows/codeql.yaml new file mode 100644 index 0000000..e0c92f4 --- /dev/null +++ b/.github/workflows/codeql.yaml @@ -0,0 +1,83 @@ +# For most projects, this workflow file will not need changing; you simply need +# to commit it to your repository. +# +# You may wish to alter this file to override the set of languages analyzed, +# or to provide custom queries or build logic. +# +# ******** NOTE ******** +# We have attempted to detect the languages in your repository. Please check +# the `language` matrix defined below to confirm you have the correct set of +# supported CodeQL languages. +# +name: "CodeQL" + +on: + push: + branches: [ "main"] + pull_request: + # The branches below must be a subset of the branches above + branches: [ "main" ] + schedule: + - cron: '39 20 * * 0' + +jobs: + analyze: + if: github.event.pull_request.draft == false + name: Analyze + # Runner size impacts CodeQL analysis time. To learn more, please see: + # - https://gh.io/recommended-hardware-resources-for-running-codeql + # - https://gh.io/supported-runners-and-hardware-resources + # - https://gh.io/using-larger-runners + # Consider using larger runners for possible analysis time improvements. + runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }} + timeout-minutes: ${{ (matrix.language == 'swift' && 120) || 360 }} + permissions: + actions: read + contents: read + security-events: write + + strategy: + fail-fast: false + matrix: + language: [ 'python' ] + # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby', 'swift' ] + # Use only 'java' to analyze code written in Java, Kotlin or both + # Use only 'javascript' to analyze code written in JavaScript, TypeScript or both + # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v3 # nosemgrep + with: + languages: ${{ matrix.language }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + + # For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs + # queries: security-extended,security-and-quality + + + # Autobuild attempts to build any compiled languages (C/C++, C#, Go, Java, or Swift). + # If this step fails, then you should remove it and run the build manually (see below) + - name: Autobuild + uses: github/codeql-action/autobuild@v3 # nosemgrep + + # ℹ️ Command-line programs to run using the OS shell. + # πŸ“š See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun + + # If the Autobuild fails above, remove it and uncomment the following three lines. + # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. + + # - run: | + # echo "Run, Build Application using script" + # ./location_of_script_within_repo/buildscript.sh + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v3 # nosemgrep + with: + category: "/language:${{matrix.language}}" diff --git a/.github/workflows/dependency-review.yaml b/.github/workflows/dependency-review.yaml new file mode 100644 index 0000000..0db18cc --- /dev/null +++ b/.github/workflows/dependency-review.yaml @@ -0,0 +1,21 @@ +# Dependency Review Action +# +# This Action will scan dependency manifest files that change as part of a Pull Request, surfacing known-vulnerable versions of the packages declared or updated in the PR. Once installed, if the workflow run is marked as required, PRs introducing known-vulnerable packages will be blocked from merging. +# +# Source repository: https://github.com/actions/dependency-review-action +# Public documentation: https://docs.github.com/en/code-security/supply-chain-security/understanding-your-software-supply-chain/about-dependency-review#dependency-review-enforcement +name: 'Dependency Review' +on: [pull_request] + +permissions: + contents: read + +jobs: + dependency-review: + if: github.event.pull_request.draft == false + runs-on: ubuntu-latest + steps: + - name: 'Checkout Repository' + uses: actions/checkout@v4 + - name: 'Dependency Review' + uses: actions/dependency-review-action@v3 diff --git a/.github/workflows/deploy-docs.yaml b/.github/workflows/deploy-docs.yaml new file mode 100644 index 0000000..c01e193 --- /dev/null +++ b/.github/workflows/deploy-docs.yaml @@ -0,0 +1,43 @@ +name: Deploy Docs +on: + push: + branches: + - main + paths: + - docs/** + - .github/workflows/deploy-docs.yaml + - airt/__about__.py + +permissions: + contents: write +jobs: + deploy_docs: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - uses: actions/setup-python@v5 + with: + python-version: 3.x + - uses: actions/cache@v3 + with: + key: ${{ github.ref }} + path: .cache + - run: pip install -e ".[dev]" + - run: ./scripts/build-docs.sh + - run: echo "VERSION=$(python3 -c 'from importlib.metadata import version; print(".".join(version("airt").split(".")[:2]))')" >> $GITHUB_ENV + - run: echo "IS_RC=$(python3 -c 'from importlib.metadata import version; print("rc" in version("airt"))')" >> $GITHUB_ENV + - name: Configure Git user + run: | + git config --local user.email "github-actions[bot]@users.noreply.github.com" + git config --local user.name "github-actions[bot]" + - run: echo $VERSION + - run: echo $IS_RC + - run: | + if [ "$IS_RC" == "False" ]; then + cd docs && mike deploy -F mkdocs.yml --update-aliases $VERSION latest + mike set-default --push --allow-empty -F mkdocs.yml latest + else + cd docs && mike deploy --push -F mkdocs.yml --update-aliases $VERSION + fi diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml deleted file mode 100644 index bb7e4ef..0000000 --- a/.github/workflows/deploy.yaml +++ /dev/null @@ -1,11 +0,0 @@ -name: Deploy nbdev-mkdocs generated documentation to GitHub Pages - -on: - push: - branches: [ "main", "master" ] - workflow_dispatch: -jobs: - deploy: - runs-on: ubuntu-latest - steps: - - uses: airtai/workflows/nbdev-mkdocs-ghp@main diff --git a/.github/workflows/publish_coverage.yaml b/.github/workflows/publish_coverage.yaml new file mode 100644 index 0000000..77c58ab --- /dev/null +++ b/.github/workflows/publish_coverage.yaml @@ -0,0 +1,37 @@ +name: Smokeshow + +on: + workflow_run: + workflows: [Test] + types: [completed] + + +permissions: + statuses: write + + +jobs: + smokeshow: + if: ${{ github.event.workflow_run.conclusion == 'success' }} + runs-on: ubuntu-latest + + steps: + - uses: actions/setup-python@v5 + with: + python-version: "3.9" + + - run: pip install smokeshow + + - uses: dawidd6/action-download-artifact@v3.0.0 # nosemgrep + with: + workflow: test.yaml + commit: ${{ github.event.workflow_run.head_sha }} + + - run: smokeshow upload coverage-html + env: + SMOKESHOW_GITHUB_STATUS_DESCRIPTION: Coverage {coverage-percentage} + SMOKESHOW_GITHUB_COVERAGE_THRESHOLD: 70 + SMOKESHOW_GITHUB_CONTEXT: coverage + SMOKESHOW_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + SMOKESHOW_GITHUB_PR_HEAD_SHA: ${{ github.event.workflow_run.head_sha }} + SMOKESHOW_AUTH_KEY: ${{ secrets.SMOKESHOW_AUTH_KEY }} diff --git a/.github/workflows/publish_pypi.yaml b/.github/workflows/publish_pypi.yaml new file mode 100644 index 0000000..0790ad7 --- /dev/null +++ b/.github/workflows/publish_pypi.yaml @@ -0,0 +1,50 @@ +name: Publish to PyPi + +on: + workflow_dispatch: null + push: + tags: + - "*" + +jobs: + publish: + runs-on: ubuntu-latest + + steps: + - name: Dump GitHub context + env: + GITHUB_CONTEXT: ${{ toJson(github) }} + run: echo "$GITHUB_CONTEXT" + + - uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.11" + cache: "pip" + cache-dependency-path: pyproject.toml + + - uses: actions/cache@v3 + id: cache + with: + path: ${{ env.pythonLocation }} + key: ${{ runner.os }}-python-${{ env.pythonLocation }}-${{ hashFiles('pyproject.toml') }}-publish + + - name: Install build dependencies + if: steps.cache.outputs.cache-hit != 'true' + run: pip install build + + - name: Build distribution + run: python -m build + + - name: Publish + uses: pypa/gh-action-pypi-publish@release/v1 # nosemgrep + with: + password: ${{ secrets.PYPI_API_TOKEN }} + skip-existing: true + + - name: Dump GitHub context + env: + GITHUB_CONTEXT: ${{ toJson(github) }} + run: echo "$GITHUB_CONTEXT" diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 433a5f8..49dc779 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -1,28 +1,187 @@ -name: CI -on: [workflow_dispatch, pull_request, push] +name: Test + +on: + push: + branches: + - main + pull_request: + types: [opened, synchronize] + merge_group: jobs: - mypy_static_analysis: + static_analysis: + if: github.event.pull_request.draft == false runs-on: ubuntu-latest + strategy: + matrix: + python-version: ["3.9", "3.10", "3.11"] + fail-fast: false + steps: - - uses: airtai/workflows/airt-mypy-check@main - bandit_static_analysis: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + - name: Install Dependencies and library + shell: bash + run: | + set -ux + python -m pip install --upgrade pip + pip install -e ".[dev]" + + - name: Run ruff + shell: bash + run: ruff check + + - name: Run mypy + shell: bash + run: mypy airt tests docs/*.py docs/docs_src examples + + - name: Run bandit + shell: bash + run: bandit -c pyproject.toml -r airt + + - name: Run Semgrep + shell: bash + run: semgrep scan --config auto --error + + test: + if: github.event.pull_request.draft == false runs-on: ubuntu-latest + strategy: + matrix: + python-version: ["3.9", "3.10", "3.11"] + tf-version: ["2.10.1", "2.11.1", "2.12.1", "2.13.1", "2.14.1", "2.15.0.post1", "2.16.0"] + fail-fast: false + steps: - - uses: airtai/workflows/airt-bandit-check@main - semgrep_static_analysis: + - uses: actions/checkout@v4 + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + cache: "pip" + cache-dependency-path: pyproject.toml + - uses: actions/cache@v3 + id: cache + with: + path: ${{ env.pythonLocation }} + key: ${{ runner.os }}-python-${{ env.pythonLocation }}-${{ hashFiles('pyproject.toml') }}-test-v03 + - name: Install Dependencies + if: steps.cache.outputs.cache-hit != 'true' + run: pip install ".[dev]" "tensorflow==${{ matrix.tf-version}}" + - run: mkdir coverage + - name: Test + run: bash scripts/test.sh + env: + COVERAGE_FILE: coverage/.coverage.${{ runner.os }}-py${{ matrix.python-version }}-tf${{ matrix.tf-version }} + CONTEXT: ${{ runner.os }}-py${{ matrix.python-version }}-tf${{ matrix.tf-version }} + - name: Store coverage files + uses: actions/upload-artifact@v4 + with: + name: .coverage.${{ runner.os }}-py${{ matrix.python-version }}-tf${{ matrix.tf-version }} + path: coverage + if-no-files-found: error + + test-macos-latest: + if: github.event.pull_request.draft == false + runs-on: macos-latest + steps: + - uses: actions/checkout@v4 + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.11" + cache: "pip" + cache-dependency-path: pyproject.toml + - name: Install Dependencies + if: steps.cache.outputs.cache-hit != 'true' + run: pip install .[dev] + - name: Test + run: bash scripts/test.sh + + # test-windows-latest: + # if: github.event.pull_request.draft == false + # runs-on: windows-latest + # steps: + # - uses: actions/checkout@v4 + # - name: Set up Python + # uses: actions/setup-python@v5 + # with: + # python-version: "3.11" + # cache: "pip" + # cache-dependency-path: pyproject.toml + # - name: Install Dependencies + # if: steps.cache.outputs.cache-hit != 'true' + # run: pip install .[dev] + # - name: Test + # run: bash scripts/test.sh + + coverage-combine: + if: github.event.pull_request.draft == false + needs: + - test runs-on: ubuntu-latest + steps: - - uses: airtai/workflows/airt-semgrep-check@main - test: - strategy: - fail-fast: false - matrix: - os: [ubuntu, macos] - version: ["3.8", "3.9", "3.10", "3.11"] - runs-on: ${{ matrix.os }}-latest + - uses: actions/checkout@v4 + + - uses: actions/setup-python@v5 + with: + python-version: "3.11" + cache: "pip" + cache-dependency-path: pyproject.toml + + - name: Get coverage files + uses: actions/download-artifact@v4 + with: + pattern: .coverage* + path: coverage + merge-multiple: true + + - run: pip install coverage[toml] + + - run: ls -la coverage + - run: coverage combine coverage + - run: coverage report + - run: coverage html --show-contexts --title "monotonic-nn coverage for ${{ github.sha }}" + + - name: Store coverage html + uses: actions/upload-artifact@v4 + with: + name: coverage-html + path: htmlcov + + pre-commit-check: + runs-on: ubuntu-latest + env: + SKIP: "static-analysis" + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: "3.9" + # - name: Set $PY environment variable + # run: echo "PY=$(python -VV | sha256sum | cut -d' ' -f1)" >> $GITHUB_ENV + # - uses: actions/cache@v4 + # with: + # path: ~/.cache/pre-commit + # key: pre-commit|${{ env.PY }}|${{ hashFiles('.pre-commit-config.yaml') }} + - uses: pre-commit/action@v3.0.1 + + check: # This job does nothing and is only used for the branch protection + if: github.event.pull_request.draft == false + + needs: + - pre-commit-check + - static_analysis + - coverage-combine + - test-macos-latest + # - test-windows-latest + runs-on: ubuntu-latest + steps: - - uses: fastai/workflows/nbdev-ci@master + - name: Decide whether the needed jobs succeeded or failed + uses: re-actors/alls-green@release/v1 # nosemgrep with: - version: ${{ matrix.version }} - pre: 1 + jobs: ${{ toJSON(needs) }} diff --git a/.github/workflows/update_release_notes.yaml b/.github/workflows/update_release_notes.yaml new file mode 100644 index 0000000..dd0d000 --- /dev/null +++ b/.github/workflows/update_release_notes.yaml @@ -0,0 +1,66 @@ +name: Update Release Notes + +on: + workflow_dispatch: null + push: + tags: + - '*' + +jobs: + update-release-notes: + runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write + env: + TAG_NAME: ${{ github.ref_name }} + BRANCH_NAME: update-release-notes-${{ github.ref_name }} + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Configure Git user + run: | + git config --local user.email "github-actions[bot]@users.noreply.github.com" + git config --local user.name "github-actions[bot]" + + - uses: tibdex/github-app-token@v2 + id: generate-token + with: + app_id: ${{ secrets.APP_ID }} + private_key: ${{ secrets.APP_PRIVATE_KEY }} + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3.9' + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install requests + + - name: Run update_releases.py script + run: python ./docs/update_releases.py + + - name: Check for changes + id: git-check + run: | + git diff --quiet || echo "::set-output name=changes_detected::true" + + - name: Show git diff + run: git diff + + - name: Create Pull Request + if: steps.git-check.outputs.changes_detected + uses: peter-evans/create-pull-request@v5 + with: + token: ${{ steps.generate-token.outputs.token }} + branch: ${{ env.BRANCH_NAME }} + base: "main" # The branch you want to merge into + title: "Update Release Notes for ${{ env.TAG_NAME }}" + commit-message: "Update Release Notes for ${{ env.TAG_NAME }}" + body: "This is an automated pull request to update the release notes for ${{ env.TAG_NAME }}" + labels: documentation diff --git a/.gitignore b/.gitignore index e9f3ce3..24d5522 100644 --- a/.gitignore +++ b/.gitignore @@ -1,19 +1,24 @@ -run_jupyter.sh - -monotonic_nn.egg-info -_proc -_docs -dist -build -/.quarto/ -.ipynb_checkpoints __pycache__ - +dist +.idea +venv* +.venv* +.env +.env* +*.lock +.vscode +.pypirc +.pytest_cache +.ruff_cache +.mypy_cache +.coverage* +.cache +htmlcov token +.DS_Store -# nbdev_mkdocs -mkdocs/docs/ -mkdocs/site/ - -CHANGELOG.bak +docs/site/ +docs/site_build/ +*.bak +.ipynb_checkpoints diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..6316a44 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,70 @@ +# See https://pre-commit.com for more information +# See https://pre-commit.com/hooks.html for more hooks +repos: +- repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.5.0 + hooks: + - id: trailing-whitespace + - id: end-of-file-fixer + exclude: | + (?x)^( + docs/docs/SUMMARY.md| + docs/docs/en/api/.meta.yml| + docs/docs/en/release.md + )$ + - id: check-yaml + exclude: 'docs/mkdocs.yml' + - id: check-added-large-files + +- repo: https://github.com/codespell-project/codespell + rev: v2.2.6 + hooks: + - id: codespell + exclude: | + (?x)^( + docs/overrides/home.html| + nbs/experiments/_Experiments.ipynb| + nbs/MonoDenseLayer.ipynb| + nbs/InDepth.ipynb + + )$ + +- repo: local + hooks: + - id: lint + name: Linter + entry: "scripts/lint-pre-commit.sh" + language: python + language_version: python3.9 + types: [python] + require_serial: true + verbose: true + +- repo: local + hooks: + - id: static-analysis + name: Static analysis + entry: "scripts/static-pre-commit.sh" + language: python + language_version: python3.9 + types: [python] + require_serial: true + verbose: true + +- repo: local + hooks: + - id: docs + name: Build docs + entry: "scripts/build-docs-pre-commit.sh" + language: python + language_version: python3.9 + files: ^docs + require_serial: true + verbose: true + +- repo: https://github.com/Yelp/detect-secrets + rev: v1.4.0 + hooks: + - id: detect-secrets + args: ['--baseline', '.secrets.baseline'] + exclude: "nbs" diff --git a/.secrets.baseline b/.secrets.baseline new file mode 100644 index 0000000..2f3c180 --- /dev/null +++ b/.secrets.baseline @@ -0,0 +1,112 @@ +{ + "version": "1.4.0", + "plugins_used": [ + { + "name": "ArtifactoryDetector" + }, + { + "name": "AWSKeyDetector" + }, + { + "name": "AzureStorageKeyDetector" + }, + { + "name": "Base64HighEntropyString", + "limit": 4.5 + }, + { + "name": "BasicAuthDetector" + }, + { + "name": "CloudantDetector" + }, + { + "name": "DiscordBotTokenDetector" + }, + { + "name": "GitHubTokenDetector" + }, + { + "name": "HexHighEntropyString", + "limit": 3.0 + }, + { + "name": "IbmCloudIamDetector" + }, + { + "name": "IbmCosHmacDetector" + }, + { + "name": "JwtTokenDetector" + }, + { + "name": "KeywordDetector", + "keyword_exclude": "" + }, + { + "name": "MailchimpDetector" + }, + { + "name": "NpmDetector" + }, + { + "name": "PrivateKeyDetector" + }, + { + "name": "SendGridDetector" + }, + { + "name": "SlackDetector" + }, + { + "name": "SoftlayerDetector" + }, + { + "name": "SquareOAuthDetector" + }, + { + "name": "StripeDetector" + }, + { + "name": "TwilioKeyDetector" + } + ], + "filters_used": [ + { + "path": "detect_secrets.filters.allowlist.is_line_allowlisted" + }, + { + "path": "detect_secrets.filters.common.is_ignored_due_to_verification_policies", + "min_level": 2 + }, + { + "path": "detect_secrets.filters.heuristic.is_indirect_reference" + }, + { + "path": "detect_secrets.filters.heuristic.is_likely_id_string" + }, + { + "path": "detect_secrets.filters.heuristic.is_lock_file" + }, + { + "path": "detect_secrets.filters.heuristic.is_not_alphanumeric_string" + }, + { + "path": "detect_secrets.filters.heuristic.is_potential_uuid" + }, + { + "path": "detect_secrets.filters.heuristic.is_prefixed_with_dollar_sign" + }, + { + "path": "detect_secrets.filters.heuristic.is_sequential_string" + }, + { + "path": "detect_secrets.filters.heuristic.is_swagger_file" + }, + { + "path": "detect_secrets.filters.heuristic.is_templated_secret" + } + ], + "results": {}, + "generated_at": "2024-01-10T11:34:16Z" +} diff --git a/.semgrepignore b/.semgrepignore new file mode 100644 index 0000000..0158cc3 --- /dev/null +++ b/.semgrepignore @@ -0,0 +1 @@ +docs/overrides/main.html diff --git a/CHANGELOG.md b/CHANGELOG.md index 713b936..cd268f7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,12 +21,10 @@ ## 0.3.1 -- add support for import different subpackages with the same root packge name and different locations +- add support for import different subpackages with the same root package name and different locations ## 0.3.0 Initial version as published at ICML 2023 - - diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..35445a7 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,133 @@ + +# Contributor Covenant Code of Conduct + +## Our Pledge + +We as members, contributors, and leaders pledge to make participation in our +community a harassment-free experience for everyone, regardless of age, body +size, visible or invisible disability, ethnicity, sex characteristics, gender +identity and expression, level of experience, education, socio-economic status, +nationality, personal appearance, race, caste, color, religion, or sexual +identity and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, +diverse, inclusive, and healthy community. + +## Our Standards + +Examples of behavior that contributes to a positive environment for our +community include: + +* Demonstrating empathy and kindness toward other people +* Being respectful of differing opinions, viewpoints, and experiences +* Giving and gracefully accepting constructive feedback +* Accepting responsibility and apologizing to those affected by our mistakes, + and learning from the experience +* Focusing on what is best not just for us as individuals, but for the overall + community + +Examples of unacceptable behavior include: + +* The use of sexualized language or imagery, and sexual attention or advances of + any kind +* Trolling, insulting or derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or email address, + without their explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Enforcement Responsibilities + +Community leaders are responsible for clarifying and enforcing our standards of +acceptable behavior and will take appropriate and fair corrective action in +response to any behavior that they deem inappropriate, threatening, offensive, +or harmful. + +Community leaders have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, and will communicate reasons for moderation +decisions when appropriate. + +## Scope + +This Code of Conduct applies within all community spaces, and also applies when +an individual is officially representing the community in public spaces. +Examples of representing our community include using an official e-mail address, +posting via an official social media account, or acting as an appointed +representative at an online or offline event. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported to the community leaders responsible for enforcement at +. +All complaints will be reviewed and investigated promptly and fairly. + +All community leaders are obligated to respect the privacy and security of the +reporter of any incident. + +## Enforcement Guidelines + +Community leaders will follow these Community Impact Guidelines in determining +the consequences for any action they deem in violation of this Code of Conduct: + +### 1. Correction + +**Community Impact**: Use of inappropriate language or other behavior deemed +unprofessional or unwelcome in the community. + +**Consequence**: A private, written warning from community leaders, providing +clarity around the nature of the violation and an explanation of why the +behavior was inappropriate. A public apology may be requested. + +### 2. Warning + +**Community Impact**: A violation through a single incident or series of +actions. + +**Consequence**: A warning with consequences for continued behavior. No +interaction with the people involved, including unsolicited interaction with +those enforcing the Code of Conduct, for a specified period of time. This +includes avoiding interactions in community spaces as well as external channels +like social media. Violating these terms may lead to a temporary or permanent +ban. + +### 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including +sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public +communication with the community for a specified period of time. No public or +private interaction with the people involved, including unsolicited interaction +with those enforcing the Code of Conduct, is allowed during this period. +Violating these terms may lead to a permanent ban. + +### 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community +standards, including sustained inappropriate behavior, harassment of an +individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within the +community. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 2.1, available at +[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1]. + +Community Impact Guidelines were inspired by +[Mozilla's code of conduct enforcement ladder][Mozilla CoC]. + +For answers to common questions about this code of conduct, see the FAQ at +[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at +[https://www.contributor-covenant.org/translations][translations]. + +[homepage]: https://www.contributor-covenant.org +[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html +[Mozilla CoC]: https://github.com/mozilla/diversity +[FAQ]: https://www.contributor-covenant.org/faq +[translations]: https://www.contributor-covenant.org/translations diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..3162417 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1 @@ +> **_NOTE:_** This is an auto-generated file. Please edit docs/docs/en/getting-started/contributing/CONTRIBUTING.md instead. diff --git a/LICENSE b/LICENSE index bfef380..cbe5ad1 100644 --- a/LICENSE +++ b/LICENSE @@ -434,4 +434,4 @@ understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses. -Creative Commons may be contacted at creativecommons.org. \ No newline at end of file +Creative Commons may be contacted at creativecommons.org. diff --git a/README.md b/README.md index a58bb6d..e4030bb 100644 --- a/README.md +++ b/README.md @@ -69,11 +69,11 @@ as follows: - if `is_convex` or `is_concave` is **True**, then the activation selector **s** will be (`units`, 0, 0) and (0, `units`, 0), - respecively. + respectively. - if both `is_convex` or `is_concave` is **False**, then the `activation_weights` represent ratios between $\breve{s}$, $\hat{s}$ - and $\tilde{s}$, respecively. E.g. if `activation_weights = (2, 2, 1)` + and $\tilde{s}$, respectively. E.g. if `activation_weights = (2, 2, 1)` and `units = 10`, then $$ @@ -146,7 +146,7 @@ layer instead of `Dense` layer to build a simple monotonic network. By default, the [`MonoDense`](https://monotonic.airt.ai/latest/api/airt/keras/layers/MonoDense/#airt.keras.layers.MonoDense) layer assumes the output of the layer is monotonically increasing with -all inputs. This assumtion is always true for all layers except possibly +all inputs. This assumption is always true for all layers except possibly the first one. For the first layer, we use `monotonicity_indicator` to specify which input parameters are monotonic and to specify are they increasingly or decreasingly monotonic: @@ -187,14 +187,14 @@ model.summary() Model: "sequential" _________________________________________________________________ - Layer (type) Output Shape Param # + Layer (type) Output Shape Param # ================================================================= - mono_dense (MonoDense) (None, 128) 512 - - mono_dense_1 (MonoDense) (None, 128) 16512 - - mono_dense_2 (MonoDense) (None, 1) 129 - + mono_dense (MonoDense) (None, 128) 512 + + mono_dense_1 (MonoDense) (None, 128) 16512 + + mono_dense_2 (MonoDense) (None, 1) 129 + ================================================================= Total params: 17,153 Trainable params: 17,153 @@ -261,7 +261,7 @@ medium or format The licensor cannot revoke these freedoms as long as you follow the license terms. -Under the following terms: +Under the following terms: - Attribution β€” You must give appropriate credit, provide a link to the license, and indicate if changes were diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..6e9df51 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,17 @@ +# Security Policy + +## Supported Versions + +| Version | Supported | +| ------- | ------------------ | +| 0.4.x | :white_check_mark: | +| 0.3.x | :white_check_mark: | +| < 0.3 | :x: | + +## Reporting a Vulnerability + +If you discover a security vulnerability within this project, please send an email to info@airt.ai. All security vulnerabilities will be promptly addressed. + +Please do not create a GitHub issue for security vulnerabilities. Instead, kindly send an email so we can address it swiftly and protect our users. + +Thank you for improving the security of this project. We appreciate your efforts to responsibly disclose your findings, and will make every effort to acknowledge your contributions. diff --git a/airt/__about__.py b/airt/__about__.py new file mode 100644 index 0000000..f1cdb40 --- /dev/null +++ b/airt/__about__.py @@ -0,0 +1,3 @@ +"""Implementation of the constrained monotonic neural networks.""" + +__version__ = "0.4.0rc0" diff --git a/airt/__init__.py b/airt/__init__.py index b046a7b..9069983 100644 --- a/airt/__init__.py +++ b/airt/__init__.py @@ -1,21 +1,11 @@ -__version__ = "0.3.4" -# AUTOGENERATED! DO NOT EDIT! File to edit: ../nbs/TopLevel.ipynb. +"""Airt neural network library.""" -# %% auto 0 -__all__ = ['dummy'] +from .__about__ import __version__ -# %% ../nbs/TopLevel.ipynb 1 +__all__ = ["__version__"] + +# extend path if needed from pkgutil import extend_path -# %% ../nbs/TopLevel.ipynb 2 if "__path__" in globals(): __path__ = extend_path(__path__, __name__) - -# %% ../nbs/TopLevel.ipynb 3 -def dummy() -> None: - pass - -# %% ../nbs/TopLevel.ipynb 4 -del dummy - -__all__ = [] diff --git a/airt/_components/helpers.py b/airt/_components/helpers.py deleted file mode 100644 index e8c910a..0000000 --- a/airt/_components/helpers.py +++ /dev/null @@ -1,15 +0,0 @@ -# AUTOGENERATED! DO NOT EDIT! File to edit: ../../nbs/Helpers.ipynb. - -# %% auto 0 -__all__ = ['T', 'export'] - -# %% ../../nbs/Helpers.ipynb 1 -from typing import Any, TypeVar - -# %% ../../nbs/Helpers.ipynb 2 -T = TypeVar("T") - - -def export(o: T, module: str = "airt.keras.layers") -> T: - o.__module__ = module - return o diff --git a/airt/_components/mono_dense_layer.py b/airt/_components/mono_dense_layer.py deleted file mode 100644 index 149fcf5..0000000 --- a/airt/_components/mono_dense_layer.py +++ /dev/null @@ -1,739 +0,0 @@ -# AUTOGENERATED! DO NOT EDIT! File to edit: ../../nbs/MonoDenseLayer.ipynb. - -# %% auto 0 -__all__ = ['T', 'get_saturated_activation', 'get_activation_functions', 'apply_activations', 'get_monotonicity_indicator', - 'apply_monotonicity_indicator_to_kernel', 'replace_kernel_using_monotonicity_indicator', 'MonoDense'] - -# %% ../../nbs/MonoDenseLayer.ipynb 3 -from contextlib import contextmanager -from datetime import datetime -from functools import lru_cache -from typing import * - -import numpy as np -import tensorflow as tf -from numpy.typing import ArrayLike, NDArray -from tensorflow.keras.layers import Concatenate, Dense, Dropout -from tensorflow.types.experimental import TensorLike - -from .helpers import export - -# %% ../../nbs/MonoDenseLayer.ipynb 9 -def get_saturated_activation( - convex_activation: Callable[[TensorLike], TensorLike], - concave_activation: Callable[[TensorLike], TensorLike], - a: float = 1.0, - c: float = 1.0, -) -> Callable[[TensorLike], TensorLike]: - @tf.function - def saturated_activation( - x: TensorLike, - convex_activation: Callable[[TensorLike], TensorLike] = convex_activation, - concave_activation: Callable[[TensorLike], TensorLike] = concave_activation, - a: float = a, - c: float = c, - ) -> TensorLike: - cc = convex_activation(tf.ones_like(x) * c) - ccc = concave_activation(-tf.ones_like(x) * c) - return a * tf.where( - x <= 0, - convex_activation(x + c) - cc, - concave_activation(x - c) + cc, - ) - - return saturated_activation # type: ignore - - -@lru_cache -def get_activation_functions( - activation: Optional[Union[str, Callable[[TensorLike], TensorLike]]] = None -) -> Tuple[ - Callable[[TensorLike], TensorLike], - Callable[[TensorLike], TensorLike], - Callable[[TensorLike], TensorLike], -]: - convex_activation = tf.keras.activations.get( - activation.lower() if isinstance(activation, str) else activation - ) - - @tf.function - def concave_activation(x: TensorLike) -> TensorLike: - return -convex_activation(-x) - - saturated_activation = get_saturated_activation( - convex_activation, concave_activation - ) - return convex_activation, concave_activation, saturated_activation - -# %% ../../nbs/MonoDenseLayer.ipynb 13 -@tf.function -def apply_activations( - x: TensorLike, - *, - units: int, - convex_activation: Callable[[TensorLike], TensorLike], - concave_activation: Callable[[TensorLike], TensorLike], - saturated_activation: Callable[[TensorLike], TensorLike], - is_convex: bool = False, - is_concave: bool = False, - activation_weights: Tuple[float, float, float] = (7.0, 7.0, 2.0), -) -> TensorLike: - if convex_activation is None: - return x - - elif is_convex: - normalized_activation_weights = np.array([1.0, 0.0, 0.0]) - elif is_concave: - normalized_activation_weights = np.array([0.0, 1.0, 0.0]) - else: - if len(activation_weights) != 3: - raise ValueError(f"activation_weights={activation_weights}") - if (np.array(activation_weights) < 0).any(): - raise ValueError(f"activation_weights={activation_weights}") - normalized_activation_weights = np.array(activation_weights) / sum( - activation_weights - ) - - s_convex = round(normalized_activation_weights[0] * units) - s_concave = round(normalized_activation_weights[1] * units) - s_saturated = units - s_convex - s_concave - - x_convex, x_concave, x_saturated = tf.split( - x, (s_convex, s_concave, s_saturated), axis=-1 - ) - - y_convex = convex_activation(x_convex) - y_concave = concave_activation(x_concave) - y_saturated = saturated_activation(x_saturated) - - y = tf.concat([y_convex, y_concave, y_saturated], axis=-1) - - return y - -# %% ../../nbs/MonoDenseLayer.ipynb 17 -def get_monotonicity_indicator( - monotonicity_indicator: ArrayLike, - *, - input_shape: Tuple[int, ...], - units: int, -) -> TensorLike: - # convert to tensor if needed and make it broadcastable to the kernel - monotonicity_indicator = np.array(monotonicity_indicator) - if len(monotonicity_indicator.shape) < 2: - monotonicity_indicator = np.reshape(monotonicity_indicator, (-1, 1)) - elif len(monotonicity_indicator.shape) > 2: - raise ValueError( - f"monotonicity_indicator has rank greater than 2: {monotonicity_indicator.shape}" - ) - - monotonicity_indicator_broadcasted = np.broadcast_to( - monotonicity_indicator, shape=(input_shape[-1], units) - ) - - if not np.all( - (monotonicity_indicator == -1) - | (monotonicity_indicator == 0) - | (monotonicity_indicator == 1) - ): - raise ValueError( - f"Each element of monotonicity_indicator must be one of -1, 0, 1, but it is: '{monotonicity_indicator}'" - ) - return monotonicity_indicator - -# %% ../../nbs/MonoDenseLayer.ipynb 21 -def apply_monotonicity_indicator_to_kernel( - kernel: tf.Variable, - monotonicity_indicator: ArrayLike, -) -> TensorLike: - # convert to tensor if needed and make it broadcastable to the kernel - monotonicity_indicator = tf.convert_to_tensor(monotonicity_indicator) - - # absolute value of the kernel - abs_kernel = tf.abs(kernel) - - # replace original kernel values for positive or negative ones where needed - xs = tf.where( - monotonicity_indicator == 1, - abs_kernel, - kernel, - ) - xs = tf.where(monotonicity_indicator == -1, -abs_kernel, xs) - - return xs - - -@contextmanager -def replace_kernel_using_monotonicity_indicator( - layer: tf.keras.layers.Dense, - monotonicity_indicator: TensorLike, -) -> Generator[None, None, None]: - old_kernel = layer.kernel - - layer.kernel = apply_monotonicity_indicator_to_kernel( - layer.kernel, monotonicity_indicator - ) - try: - yield - finally: - layer.kernel = old_kernel - -# %% ../../nbs/MonoDenseLayer.ipynb 28 -@export -class MonoDense(Dense): - """Monotonic counterpart of the regular Dense Layer of tf.keras - - This is an implementation of our Monotonic Dense Unit or Constrained Monotone Fully Connected Layer. The below is the figure from the paper for reference. - - - the parameter `monotonicity_indicator` corresponds to **t** in the figure below, and - - - parameters `is_convex`, `is_concave` and `activation_weights` are used to calculate the activation selector **s** as follows: - - - if `is_convex` or `is_concave` is **True**, then the activation selector **s** will be (`units`, 0, 0) and (0, `units`, 0), respecively. - - - if both `is_convex` or `is_concave` is **False**, then the `activation_weights` represent ratios between $\\breve{s}$, $\\hat{s}$ and $\\tilde{s}$, - respecively. E.g. if `activation_weights = (2, 2, 1)` and `units = 10`, then - - $$ - (\\breve{s}, \\hat{s}, \\tilde{s}) = (4, 4, 2) - $$ - - ![mono-dense-layer-diagram.png](../../../../../images/nbs/images/mono-dense-layer-diagram.png) - - """ - - def __init__( - self, - units: int, - *, - activation: Optional[Union[str, Callable[[TensorLike], TensorLike]]] = None, - monotonicity_indicator: ArrayLike = 1, - is_convex: bool = False, - is_concave: bool = False, - activation_weights: Tuple[float, float, float] = (7.0, 7.0, 2.0), - **kwargs: Any, - ): - """Constructs a new MonoDense instance. - - Params: - units: Positive integer, dimensionality of the output space. - activation: Activation function to use, it is assumed to be convex monotonically - increasing function such as "relu" or "elu" - monotonicity_indicator: Vector to indicate which of the inputs are monotonically increasing or - monotonically decreasing or non-monotonic. Has value 1 for monotonically increasing, - -1 for monotonically decreasing and 0 for non-monotonic. - is_convex: convex if set to True - is_concave: concave if set to True - activation_weights: relative weights for each type of activation, the default is (1.0, 1.0, 1.0). - Ignored if is_convex or is_concave is set to True - **kwargs: passed as kwargs to the constructor of `Dense` - - Raise: - ValueError: - - if both **is_concave** and **is_convex** are set to **True**, or - - if any component of activation_weights is negative or there is not exactly three components - """ - if is_convex and is_concave: - raise ValueError( - "The model cannot be set to be both convex and concave (only linear functions are both)." - ) - - if len(activation_weights) != 3: - raise ValueError( - f"There must be exactly three components of activation_weights, but we have this instead: {activation_weights}." - ) - - if (np.array(activation_weights) < 0).any(): - raise ValueError( - f"Values of activation_weights must be non-negative, but we have this instead: {activation_weights}." - ) - - super(MonoDense, self).__init__(units=units, activation=None, **kwargs) - - self.units = units - self.org_activation = activation - self.monotonicity_indicator = monotonicity_indicator - self.is_convex = is_convex - self.is_concave = is_concave - self.activation_weights = activation_weights - - ( - self.convex_activation, - self.concave_activation, - self.saturated_activation, - ) = get_activation_functions(self.org_activation) - - def get_config(self) -> Dict[str, Any]: - """Get config is used for saving the model""" - return dict( - units=self.units, - activation=self.org_activation, - monotonicity_indicator=self.monotonicity_indicator, - is_convex=self.is_convex, - is_concave=self.is_concave, - activation_weights=self.activation_weights, - ) - - def build(self, input_shape: Tuple, *args: List[Any], **kwargs: Any) -> None: - """Build - - Args: - input_shape: input tensor - args: positional arguments passed to Dense.build() - kwargs: keyword arguments passed to Dense.build() - """ - super(MonoDense, self).build(input_shape, *args, **kwargs) - self.monotonicity_indicator = get_monotonicity_indicator( - monotonicity_indicator=self.monotonicity_indicator, - input_shape=input_shape, - units=self.units, - ) - - def call(self, inputs: TensorLike) -> TensorLike: - """Call - - Args: - inputs: input tensor of shape (batch_size, ..., x_length) - - Returns: - N-D tensor with shape: `(batch_size, ..., units)`. - - """ - # calculate W'*x+y after we replace the kernal according to monotonicity vector - with replace_kernel_using_monotonicity_indicator( - self, monotonicity_indicator=self.monotonicity_indicator - ): - h = super(MonoDense, self).call(inputs) - - y = apply_activations( - h, - units=self.units, - convex_activation=self.convex_activation, - concave_activation=self.concave_activation, - saturated_activation=self.saturated_activation, - is_convex=self.is_convex, - is_concave=self.is_concave, - activation_weights=self.activation_weights, - ) - - return y - - @classmethod - def create_type_1( - cls, - inputs: Union[TensorLike, Dict[str, TensorLike], List[TensorLike]], - *, - units: int, - final_units: int, - activation: Union[str, Callable[[TensorLike], TensorLike]], - n_layers: int, - final_activation: Optional[ - Union[str, Callable[[TensorLike], TensorLike]] - ] = None, - monotonicity_indicator: Union[int, Dict[str, int], List[int]] = 1, - is_convex: Union[bool, Dict[str, bool], List[bool]] = False, - is_concave: Union[bool, Dict[str, bool], List[bool]] = False, - dropout: Optional[float] = None, - ) -> TensorLike: - """Builds Type-1 monotonic network - - Type-1 architecture corresponds to the standard MLP type of neural network architecture used in general, where each - of the input features is concatenated to form one single input feature vector $\mathbf{x}$ and fed into the network, - with the only difference being that instead of standard fully connected or dense layers, we employ monotonic dense units - throughout. For the first (or input layer) layer, the indicator vector $\mathbf{t}$, is used to identify the monotonicity - property of the input feature with respect to the output. Specifically, $\mathbf{t}$ is set to $1$ for those components - in the input feature vector that are monotonically increasing and is set to $-1$ for those components that are monotonically - decreasing and set to $0$ if the feature is non-monotonic. For the subsequent hidden layers, monotonic dense units with the - indicator vector $\mathbf{t}$ always being set to $1$ are used in order to preserve monotonicity. Finally, depending on - whether the problem at hand is a regression problem or a classification problem (or even a multi-task problem), an appropriate - activation function (such as linear activation or sigmoid or softmax) to obtain the final output. - - ![mono-dense-layer-diagram.png](../../../images/nbs/images/type-1.png) - - Args: - inputs: input tensor or a dictionary of tensors - units: number of units in hidden layers - final_units: number of units in the output layer - activation: the base activation function - n_layers: total number of layers (hidden layers plus the output layer) - final_activation: the activation function of the final layer (typicall softmax, sigmoid or linear). - If set to None (default value), then the linear activation is used. - monotonicity_indicator: if an instance of dictionary, then maps names of input feature to their monotonicity - indicator (-1 for monotonically decreasing, 1 for monotonically increasing and 0 otherwise). If int, - then all input features are set to the same monotinicity indicator. - is_convex: set to True if a particular input feature is convex - is_concave: set to True if a particular inputs feature is concave - dropout: dropout rate. If set to float greater than 0, Dropout layers are inserted after hidden layers. - - Returns: - Output tensor - - """ - return _create_type_1( - inputs, - units=units, - final_units=final_units, - activation=activation, - n_layers=n_layers, - final_activation=final_activation, - monotonicity_indicator=monotonicity_indicator, - is_convex=is_convex, - is_concave=is_concave, - dropout=dropout, - ) - - @classmethod - def create_type_2( - cls, - inputs: Union[TensorLike, Dict[str, TensorLike], List[TensorLike]], - *, - input_units: Optional[int] = None, - units: int, - final_units: int, - activation: Union[str, Callable[[TensorLike], TensorLike]], - n_layers: int, - final_activation: Optional[ - Union[str, Callable[[TensorLike], TensorLike]] - ] = None, - monotonicity_indicator: Union[int, Dict[str, int], List[int]] = 1, - is_convex: Union[bool, Dict[str, bool], List[bool]] = False, - is_concave: Union[bool, Dict[str, bool], List[bool]] = False, - dropout: Optional[float] = None, - ) -> TensorLike: - """Builds Type-2 monotonic network - - Type-2 architecture is another example of a neural network architecture that can be built employing proposed - monotonic dense blocks. The difference when compared to the architecture described above lies in the way input - features are fed into the hidden layers of neural network architecture. Instead of concatenating the features - directly, this architecture provides flexibility to employ any form of complex feature extractors for the - non-monotonic features and use the extracted feature vectors as inputs. Another difference is that each monotonic - input is passed through separate monotonic dense units. This provides an advantage since depending on whether the - input is completely concave or convex or both, we can adjust the activation selection vector $\mathbf{s}$ appropriately - along with an appropriate value for the indicator vector $\mathbf{t}$. Thus, each of the monotonic input features has - a separate monotonic dense layer associated with it. Thus as the major difference to the above-mentioned architecture, - we concatenate the feature vectors instead of concatenating the inputs directly. The subsequent parts of the network are - similar to the architecture described above wherein for the rest of the hidden monotonic dense units, the indicator vector - $\mathbf{t}$ is always set to $1$ to preserve monotonicity. - - ![mono-dense-layer-diagram.png](../../../images/nbs/images/type-2.png) - - Args: - inputs: input tensor or a dictionary of tensors - input_units: used to preprocess features before entering the common mono block - units: number of units in hidden layers - final_units: number of units in the output layer - activation: the base activation function - n_layers: total number of layers (hidden layers plus the output layer) - final_activation: the activation function of the final layer (typicall softmax, sigmoid or linear). - If set to None (default value), then the linear activation is used. - monotonicity_indicator: if an instance of dictionary, then maps names of input feature to their monotonicity - indicator (-1 for monotonically decreasing, 1 for monotonically increasing and 0 otherwise). If int, - then all input features are set to the same monotinicity indicator. - is_convex: set to True if a particular input feature is convex - is_concave: set to True if a particular inputs feature is concave - dropout: dropout rate. If set to float greater than 0, Dropout layers are inserted after hidden layers. - - Returns: - Output tensor - - """ - return _create_type_2( - inputs, - input_units=input_units, - units=units, - final_units=final_units, - activation=activation, - n_layers=n_layers, - final_activation=final_activation, - monotonicity_indicator=monotonicity_indicator, - is_convex=is_convex, - is_concave=is_concave, - dropout=dropout, - ) - -# %% ../../nbs/MonoDenseLayer.ipynb 33 -def _create_mono_block( - *, - units: List[int], - activation: Union[str, Callable[[TensorLike], TensorLike]], - monotonicity_indicator: TensorLike = 1, - is_convex: bool = False, - is_concave: bool = False, - dropout: Optional[float] = None, -) -> Callable[[TensorLike], TensorLike]: - def create_mono_block_inner( - x: TensorLike, - *, - units: List[int] = units, - activation: Union[str, Callable[[TensorLike], TensorLike]] = activation, - monotonicity_indicator: TensorLike = monotonicity_indicator, - is_convex: bool = is_convex, - is_concave: bool = is_concave, - ) -> TensorLike: - if len(units) == 0: - return x - - y = x - for i in range(len(units)): - y = MonoDense( - units=units[i], - activation=activation if i < len(units) - 1 else None, - monotonicity_indicator=monotonicity_indicator if i == 0 else 1, - is_convex=is_convex, - is_concave=is_concave, - name=f"mono_dense_{i}" - + ("_increasing" if i != 0 else "") - + ("_convex" if is_convex else "") - + ("_concave" if is_concave else ""), - )(y) - if (i < len(units) - 1) and dropout: - y = Dropout(dropout)(y) - - return y - - return create_mono_block_inner - -# %% ../../nbs/MonoDenseLayer.ipynb 35 -T = TypeVar("T") - - -def _prepare_mono_input_n_param( - inputs: Union[TensorLike, Dict[str, TensorLike], List[TensorLike]], - param: Union[T, Dict[str, T], List[T]], -) -> Tuple[List[TensorLike], List[T], List[str]]: - if isinstance(inputs, list): - if isinstance(param, int): - param = [param] * len(inputs) # type: ignore - elif isinstance(param, list): - if len(inputs) != len(param): - raise ValueError(f"{len(inputs)} != {len(param)}") - else: - raise ValueError(f"Uncompatible types: {type(inputs)=}, {type(param)=}") - sorted_feature_names = [f"{i}" for i in range(len(inputs))] - - elif isinstance(inputs, dict): - sorted_feature_names = sorted(inputs.keys()) - - if isinstance(param, int): - param = [param] * len(inputs) # type: ignore - elif isinstance(param, dict): - if set(param.keys()) != set(sorted_feature_names): - raise ValueError(f"{set(param.keys())} != {set(sorted_feature_names)}") - else: - param = [param[k] for k in sorted_feature_names] - else: - raise ValueError(f"Uncompatible types: {type(inputs)=}, {type(param)=}") - - inputs = [inputs[k] for k in sorted_feature_names] - - else: - if not isinstance(param, int): - raise ValueError(f"Uncompatible types: {type(inputs)=}, {type(param)=}") - inputs = [inputs] - param = [param] # type: ignore - sorted_feature_names = ["inputs"] - - return inputs, param, sorted_feature_names - -# %% ../../nbs/MonoDenseLayer.ipynb 43 -def _check_convexity_params( - monotonicity_indicator: List[int], - is_convex: List[bool], - is_concave: List[bool], - names: List[str], -) -> Tuple[bool, bool]: - ix = [ - i for i in range(len(monotonicity_indicator)) if is_convex[i] and is_concave[i] - ] - - if len(ix) > 0: - raise ValueError( - f"Parameters both convex and concave: {[names[i] for i in ix]}" - ) - - has_convex = any(is_convex) - has_concave = any(is_concave) - if has_convex and has_concave: - print("WARNING: we have both convex and concave parameters") - - return has_convex, has_concave - -# %% ../../nbs/MonoDenseLayer.ipynb 46 -@export -def _create_type_1( - inputs: Union[TensorLike, Dict[str, TensorLike], List[TensorLike]], - *, - units: int, - final_units: int, - activation: Union[str, Callable[[TensorLike], TensorLike]], - n_layers: int, - final_activation: Optional[Union[str, Callable[[TensorLike], TensorLike]]] = None, - monotonicity_indicator: Union[int, Dict[str, int], List[int]] = 1, - is_convex: Union[bool, Dict[str, bool], List[bool]] = False, - is_concave: Union[bool, Dict[str, bool], List[bool]] = False, - dropout: Optional[float] = None, -) -> TensorLike: - """Builds Type-1 monotonic network - - Type-1 architecture corresponds to the standard MLP type of neural network architecture used in general, where each - of the input features is concatenated to form one single input feature vector $\mathbf{x}$ and fed into the network, - with the only difference being that instead of standard fully connected or dense layers, we employ monotonic dense units - throughout. For the first (or input layer) layer, the indicator vector $\mathbf{t}$, is used to identify the monotonicity - property of the input feature with respect to the output. Specifically, $\mathbf{t}$ is set to $1$ for those components - in the input feature vector that are monotonically increasing and is set to $-1$ for those components that are monotonically - decreasing and set to $0$ if the feature is non-monotonic. For the subsequent hidden layers, monotonic dense units with the - indicator vector $\mathbf{t}$ always being set to $1$ are used in order to preserve monotonicity. Finally, depending on - whether the problem at hand is a regression problem or a classification problem (or even a multi-task problem), an appropriate - activation function (such as linear activation or sigmoid or softmax) to obtain the final output. - - ![mono-dense-layer-diagram.png](../../../images/nbs/images/type-1.png) - - Args: - inputs: input tensor or a dictionary of tensors - units: number of units in hidden layers - final_units: number of units in the output layer - activation: the base activation function - n_layers: total number of layers (hidden layers plus the output layer) - final_activation: the activation function of the final layer (typicall softmax, sigmoid or linear). - If set to None (default value), then the linear activation is used. - monotonicity_indicator: if an instance of dictionary, then maps names of input feature to their monotonicity - indicator (-1 for monotonically decreasing, 1 for monotonically increasing and 0 otherwise). If int, - then all input features are set to the same monotinicity indicator. - is_convex: set to True if a particular input feature is convex - is_concave: set to True if a particular inputs feature is concave - dropout: dropout rate. If set to float greater than 0, Dropout layers are inserted after hidden layers. - - Returns: - Output tensor - - """ - _, is_convex, _ = _prepare_mono_input_n_param(inputs, is_convex) - _, is_concave, _ = _prepare_mono_input_n_param(inputs, is_concave) - x, monotonicity_indicator, names = _prepare_mono_input_n_param( - inputs, monotonicity_indicator - ) - has_convex, has_concave = _check_convexity_params( - monotonicity_indicator, is_convex, is_concave, names - ) - - y = tf.keras.layers.Concatenate()(x) - - y = _create_mono_block( - units=[units] * (n_layers - 1) + [final_units], - activation=activation, - monotonicity_indicator=monotonicity_indicator, - is_convex=has_convex, - is_concave=has_concave and not has_convex, - dropout=dropout, - )(y) - - if final_activation is not None: - y = tf.keras.activations.get(final_activation)(y) - - return y - -# %% ../../nbs/MonoDenseLayer.ipynb 50 -@export -def _create_type_2( - inputs: Union[TensorLike, Dict[str, TensorLike], List[TensorLike]], - *, - input_units: Optional[int] = None, - units: int, - final_units: int, - activation: Union[str, Callable[[TensorLike], TensorLike]], - n_layers: int, - final_activation: Optional[Union[str, Callable[[TensorLike], TensorLike]]] = None, - monotonicity_indicator: Union[int, Dict[str, int], List[int]] = 1, - is_convex: Union[bool, Dict[str, bool], List[bool]] = False, - is_concave: Union[bool, Dict[str, bool], List[bool]] = False, - dropout: Optional[float] = None, -) -> TensorLike: - """Builds Type-2 monotonic network - - Type-2 architecture is another example of a neural network architecture that can be built employing proposed - monotonic dense blocks. The difference when compared to the architecture described above lies in the way input - features are fed into the hidden layers of neural network architecture. Instead of concatenating the features - directly, this architecture provides flexibility to employ any form of complex feature extractors for the - non-monotonic features and use the extracted feature vectors as inputs. Another difference is that each monotonic - input is passed through separate monotonic dense units. This provides an advantage since depending on whether the - input is completely concave or convex or both, we can adjust the activation selection vector $\mathbf{s}$ appropriately - along with an appropriate value for the indicator vector $\mathbf{t}$. Thus, each of the monotonic input features has - a separate monotonic dense layer associated with it. Thus as the major difference to the above-mentioned architecture, - we concatenate the feature vectors instead of concatenating the inputs directly. The subsequent parts of the network are - similar to the architecture described above wherein for the rest of the hidden monotonic dense units, the indicator vector - $\mathbf{t}$ is always set to $1$ to preserve monotonicity. - - ![mono-dense-layer-diagram.png](../../../images/nbs/images/type-2.png) - - Args: - inputs: input tensor or a dictionary of tensors - input_units: used to preprocess features before entering the common mono block - units: number of units in hidden layers - final_units: number of units in the output layer - activation: the base activation function - n_layers: total number of layers (hidden layers plus the output layer) - final_activation: the activation function of the final layer (typicall softmax, sigmoid or linear). - If set to None (default value), then the linear activation is used. - monotonicity_indicator: if an instance of dictionary, then maps names of input feature to their monotonicity - indicator (-1 for monotonically decreasing, 1 for monotonically increasing and 0 otherwise). If int, - then all input features are set to the same monotinicity indicator. - is_convex: set to True if a particular input feature is convex - is_concave: set to True if a particular inputs feature is concave - dropout: dropout rate. If set to float greater than 0, Dropout layers are inserted after hidden layers. - - Returns: - Output tensor - - """ - _, is_convex, _ = _prepare_mono_input_n_param(inputs, is_convex) - _, is_concave, _ = _prepare_mono_input_n_param(inputs, is_concave) - x, monotonicity_indicator, names = _prepare_mono_input_n_param( - inputs, monotonicity_indicator - ) - has_convex, has_concave = _check_convexity_params( - monotonicity_indicator, is_convex, is_concave, names - ) - - if input_units is None: - input_units = max(units // 4, 1) - - y = [ - ( - MonoDense( - units=input_units, - activation=activation, - monotonicity_indicator=monotonicity_indicator[i], - is_convex=is_convex[i], - is_concave=is_concave[i], - name=f"mono_dense_{names[i]}" - + ("_increasing" if monotonicity_indicator[i] == 1 else "_decreasing") - + ("_convex" if is_convex[i] else "") - + ("_concave" if is_concave[i] else ""), - ) - if monotonicity_indicator[i] != 0 - else ( - Dense( - units=input_units, activation=activation, name=f"dense_{names[i]}" - ) - ) - )(x[i]) - for i in range(len(inputs)) - ] - - y = Concatenate(name="preprocessed_features")(y) - monotonicity_indicator_block: List[int] = sum( - [[abs(x)] * input_units for x in monotonicity_indicator], [] - ) - - y = _create_mono_block( - units=[units] * (n_layers - 1) + [final_units], - activation=activation, - monotonicity_indicator=monotonicity_indicator_block, - is_convex=has_convex, - is_concave=has_concave and not has_convex, - dropout=dropout, - )(y) - - if final_activation is not None: - y = tf.keras.activations.get(final_activation)(y) - - return y diff --git a/airt/_modidx.py b/airt/_modidx.py deleted file mode 100644 index a095d90..0000000 --- a/airt/_modidx.py +++ /dev/null @@ -1,78 +0,0 @@ -# Autogenerated by nbdev - -d = { 'settings': { 'branch': 'main', - 'doc_baseurl': '/monotonic-nn', - 'doc_host': 'https://airtai.github.io', - 'git_url': 'https://github.com/airtai/monotonic-nn', - 'lib_path': 'airt'}, - 'syms': { 'airt._components.helpers': {'airt._components.helpers.export': ('helpers.html#export', 'airt/_components/helpers.py')}, - 'airt._components.mono_dense_layer': { 'airt._components.mono_dense_layer.MonoDense': ( 'monodenselayer.html#monodense', - 'airt/_components/mono_dense_layer.py'), - 'airt._components.mono_dense_layer.MonoDense.__init__': ( 'monodenselayer.html#monodense.__init__', - 'airt/_components/mono_dense_layer.py'), - 'airt._components.mono_dense_layer.MonoDense.build': ( 'monodenselayer.html#monodense.build', - 'airt/_components/mono_dense_layer.py'), - 'airt._components.mono_dense_layer.MonoDense.call': ( 'monodenselayer.html#monodense.call', - 'airt/_components/mono_dense_layer.py'), - 'airt._components.mono_dense_layer.MonoDense.create_type_1': ( 'monodenselayer.html#monodense.create_type_1', - 'airt/_components/mono_dense_layer.py'), - 'airt._components.mono_dense_layer.MonoDense.create_type_2': ( 'monodenselayer.html#monodense.create_type_2', - 'airt/_components/mono_dense_layer.py'), - 'airt._components.mono_dense_layer.MonoDense.get_config': ( 'monodenselayer.html#monodense.get_config', - 'airt/_components/mono_dense_layer.py'), - 'airt._components.mono_dense_layer._check_convexity_params': ( 'monodenselayer.html#_check_convexity_params', - 'airt/_components/mono_dense_layer.py'), - 'airt._components.mono_dense_layer._create_mono_block': ( 'monodenselayer.html#_create_mono_block', - 'airt/_components/mono_dense_layer.py'), - 'airt._components.mono_dense_layer._create_type_1': ( 'monodenselayer.html#_create_type_1', - 'airt/_components/mono_dense_layer.py'), - 'airt._components.mono_dense_layer._create_type_2': ( 'monodenselayer.html#_create_type_2', - 'airt/_components/mono_dense_layer.py'), - 'airt._components.mono_dense_layer._prepare_mono_input_n_param': ( 'monodenselayer.html#_prepare_mono_input_n_param', - 'airt/_components/mono_dense_layer.py'), - 'airt._components.mono_dense_layer.apply_activations': ( 'monodenselayer.html#apply_activations', - 'airt/_components/mono_dense_layer.py'), - 'airt._components.mono_dense_layer.apply_monotonicity_indicator_to_kernel': ( 'monodenselayer.html#apply_monotonicity_indicator_to_kernel', - 'airt/_components/mono_dense_layer.py'), - 'airt._components.mono_dense_layer.get_activation_functions': ( 'monodenselayer.html#get_activation_functions', - 'airt/_components/mono_dense_layer.py'), - 'airt._components.mono_dense_layer.get_monotonicity_indicator': ( 'monodenselayer.html#get_monotonicity_indicator', - 'airt/_components/mono_dense_layer.py'), - 'airt._components.mono_dense_layer.get_saturated_activation': ( 'monodenselayer.html#get_saturated_activation', - 'airt/_components/mono_dense_layer.py'), - 'airt._components.mono_dense_layer.replace_kernel_using_monotonicity_indicator': ( 'monodenselayer.html#replace_kernel_using_monotonicity_indicator', - 'airt/_components/mono_dense_layer.py')}, - 'airt.keras.experiments': { 'airt.keras.experiments._DownloadProgressBar': ( 'experiments.html#_downloadprogressbar', - 'airt/keras/experiments.py'), - 'airt.keras.experiments._DownloadProgressBar.update_to': ( 'experiments.html#_downloadprogressbar.update_to', - 'airt/keras/experiments.py'), - 'airt.keras.experiments._TestHyperModel': ( 'experiments.html#_testhypermodel', - 'airt/keras/experiments.py'), - 'airt.keras.experiments._TestHyperModel.__init__': ( 'experiments.html#_testhypermodel.__init__', - 'airt/keras/experiments.py'), - 'airt.keras.experiments._TestHyperModel.build': ( 'experiments.html#_testhypermodel.build', - 'airt/keras/experiments.py'), - 'airt.keras.experiments._build_mono_model_f': ( 'experiments.html#_build_mono_model_f', - 'airt/keras/experiments.py'), - 'airt.keras.experiments._count_model_params': ( 'experiments.html#_count_model_params', - 'airt/keras/experiments.py'), - 'airt.keras.experiments._create_model_stats': ( 'experiments.html#_create_model_stats', - 'airt/keras/experiments.py'), - 'airt.keras.experiments._download_data': ( 'experiments.html#_download_data', - 'airt/keras/experiments.py'), - 'airt.keras.experiments._download_url': ( 'experiments.html#_download_url', - 'airt/keras/experiments.py'), - 'airt.keras.experiments._get_build_model_with_hp_f': ( 'experiments.html#_get_build_model_with_hp_f', - 'airt/keras/experiments.py'), - 'airt.keras.experiments._get_data_path': ( 'experiments.html#_get_data_path', - 'airt/keras/experiments.py'), - 'airt.keras.experiments._sanitize_col_names': ( 'experiments.html#_sanitize_col_names', - 'airt/keras/experiments.py'), - 'airt.keras.experiments.create_tuner_stats': ( 'experiments.html#create_tuner_stats', - 'airt/keras/experiments.py'), - 'airt.keras.experiments.df2ds': ('experiments.html#df2ds', 'airt/keras/experiments.py'), - 'airt.keras.experiments.find_hyperparameters': ( 'experiments.html#find_hyperparameters', - 'airt/keras/experiments.py'), - 'airt.keras.experiments.get_train_n_test_data': ( 'experiments.html#get_train_n_test_data', - 'airt/keras/experiments.py'), - 'airt.keras.experiments.peek': ('experiments.html#peek', 'airt/keras/experiments.py')}}} diff --git a/airt/keras/__init__.py b/airt/keras/__init__.py index e69de29..b92b293 100644 --- a/airt/keras/__init__.py +++ b/airt/keras/__init__.py @@ -0,0 +1 @@ +"""Keras related code.""" diff --git a/airt/keras/experiments.py b/airt/keras/experiments.py deleted file mode 100644 index c0b708b..0000000 --- a/airt/keras/experiments.py +++ /dev/null @@ -1,438 +0,0 @@ -# AUTOGENERATED! DO NOT EDIT! File to edit: ../../nbs/Experiments.ipynb. - -# %% auto 0 -__all__ = ['get_train_n_test_data', 'df2ds', 'peek', 'find_hyperparameters', 'create_tuner_stats'] - -# %% ../../nbs/Experiments.ipynb 3 -import shutil -import urllib.request -from contextlib import contextmanager -from datetime import datetime -from os import environ -from pathlib import Path -from tempfile import TemporaryDirectory -from typing import * - -import matplotlib -import matplotlib.pyplot as plt -import numpy as np -import pandas as pd -import pytest -import seaborn as sns -import tensorflow as tf -from keras_tuner import ( - BayesianOptimization, - HyperModel, - HyperParameters, - Objective, - Tuner, -) -from numpy.typing import ArrayLike, NDArray -from tensorflow.keras import Model -from tensorflow.keras.backend import count_params -from tensorflow.keras.layers import Concatenate, Dense, Dropout, Input -from tensorflow.keras.optimizers.experimental import AdamW -from tensorflow.types.experimental import TensorLike -from tqdm import tqdm - -from .layers import MonoDense - -# %% ../../nbs/Experiments.ipynb 7 -class _DownloadProgressBar(tqdm): - def update_to( - self, b: int = 1, bsize: int = 1, tsize: Optional[int] = None - ) -> None: - if tsize is not None: - self.total = tsize - self.update(b * bsize - self.n) - - -def _download_url(url: str, output_path: Path) -> None: - with _DownloadProgressBar( - unit="B", unit_scale=True, miniters=1, desc=url.split("/")[-1] - ) as t: - # nosemgrep: python.lang.security.audit.dynamic-urllib-use-detected.dynamic-urllib-use-detected - urllib.request.urlretrieve( - url, filename=output_path, reporthook=t.update_to - ) # nosec - -# %% ../../nbs/Experiments.ipynb 8 -def _get_data_path(data_path: Optional[Union[Path, str]] = None) -> Path: - if data_path is None: - data_path = "./data" - return Path(data_path) - - -def _download_data( - dataset_name: str, - data_path: Optional[Union[Path, str]] = "data", - force_download: bool = False, -) -> None: - data_path = _get_data_path(data_path) - data_path.mkdir(exist_ok=True, parents=True) - - for prefix in ["train", "test"]: - filename = f"{prefix}_{dataset_name}.csv" - if not (data_path / filename).exists() or force_download: - with TemporaryDirectory() as d: - _download_url( - f"https://zenodo.org/record/7968969/files/{filename}", - Path(d) / filename, - ) - shutil.copyfile(Path(d) / filename, data_path / filename) - else: - print(f"Upload skipped, file {(data_path / filename).resolve()} exists.") - -# %% ../../nbs/Experiments.ipynb 10 -def _sanitize_col_names(df: pd.DataFrame) -> pd.DataFrame: - columns = {c: c.replace(" ", "_") for c in df} - df = df.rename(columns=columns) - return df - -# %% ../../nbs/Experiments.ipynb 12 -def get_train_n_test_data( - dataset_name: str, - *, - data_path: Optional[Union[Path, str]] = "./data", -) -> Tuple[pd.DataFrame, pd.DataFrame]: - """Download data - - Args: - dataset_name: name of the dataset, one of "auto", "heart", compas", "blog", "loan" - data_path: root directory where to download data to - """ - data_path = _get_data_path(data_path) - _download_data(dataset_name=dataset_name, data_path=data_path) - - dfx = [ - pd.read_csv(data_path / f"{prefix}_{dataset_name}.csv") - for prefix in ["train", "test"] - ] - dfx = [_sanitize_col_names(df) for df in dfx] - return dfx[0], dfx[1] - -# %% ../../nbs/Experiments.ipynb 14 -def df2ds(df: pd.DataFrame) -> tf.data.Dataset: - """Converts DataFrame to Dataset - - Args: - df: input DataFrame - - Returns: - dataset - """ - x = df.to_dict("list") - y = x.pop("ground_truth") - - ds = tf.data.Dataset.from_tensor_slices((x, y)) - - return ds - - -def peek(ds: tf.data.Dataset) -> tf.Tensor: - """Returns the first element of the dataset - - Args: - ds: dataset - - Returns: - the first element of the dataset - """ - for x in ds: - return x - -# %% ../../nbs/Experiments.ipynb 16 -def _build_mono_model_f( - *, - monotonicity_indicator: Dict[str, int], - final_activation: Union[str, Callable[[TensorLike], TensorLike]], - loss: Union[str, Callable[[TensorLike, TensorLike], TensorLike]], - metrics: Union[str, Callable[[TensorLike, TensorLike], TensorLike]], - train_ds: tf.data.Dataset, - batch_size: int, - units: int, - n_layers: int, - activation: Union[str, Callable[[TensorLike], TensorLike]], - learning_rate: float, - weight_decay: float, - dropout: float, - decay_rate: float, -) -> Model: - inputs = {k: Input(name=k, shape=(1,)) for k in monotonicity_indicator.keys()} - outputs = MonoDense.create_type_2( - inputs, - units=units, - final_units=1, - activation=activation, - n_layers=n_layers, - monotonicity_indicator=monotonicity_indicator, - is_convex=False, - is_concave=False, - dropout=dropout, - final_activation=final_activation, - ) - model = Model(inputs=inputs, outputs=outputs) - - lr_schedule = tf.keras.optimizers.schedules.ExponentialDecay( - learning_rate, - decay_steps=len(train_ds.batch(batch_size)), - decay_rate=decay_rate, - staircase=True, - ) - - optimizer = AdamW(learning_rate=lr_schedule, weight_decay=weight_decay) - model.compile(optimizer=optimizer, loss=loss, metrics=metrics) - - return model - -# %% ../../nbs/Experiments.ipynb 18 -def _get_build_model_with_hp_f( - build_model_f: Callable[[], Model], - hp_params_f: Optional[Callable[[HyperParameters], Dict[str, Any]]] = None, - **kwargs: Any, -) -> Callable[[HyperParameters], Model]: - def build_model_with_hp_f( - hp: HyperParameters, - hp_params_f: Optional[ - Callable[[HyperParameters], Dict[str, Any]] - ] = hp_params_f, - kwargs: Dict[str, Any] = kwargs, - ) -> Model: - override_kwargs = hp_params_f(hp) if hp_params_f is not None else {} - - default_kwargs = dict( - units=hp.Int("units", min_value=8, max_value=32, step=1), - n_layers=hp.Int("n_layers", min_value=1, max_value=4), - activation=hp.Choice("activation", values=["elu"]), - learning_rate=hp.Float( - "learning_rate", min_value=1e-3, max_value=0.3, sampling="log" - ), - weight_decay=hp.Float( - "weight_decay", min_value=1e-1, max_value=0.3, sampling="log" - ), - dropout=hp.Float( - "dropout", min_value=0.0, max_value=0.5, sampling="linear" - ), - decay_rate=hp.Float( - "decay_rate", min_value=0.5, max_value=1.0, sampling="reverse_log" - ), - ) - - default_kwargs.update(**override_kwargs) - model = build_model_f(**default_kwargs, **kwargs) - return model - - return build_model_with_hp_f - - -class _TestHyperModel(HyperModel): - def __init__(self, **kwargs: Any): - self.kwargs = kwargs - - def build(self, hp: HyperParameters) -> Model: - build_model_with_hp_f = _get_build_model_with_hp_f( - _build_mono_model_f, **self.kwargs # type: ignore - ) - return build_model_with_hp_f(hp) - -# %% ../../nbs/Experiments.ipynb 20 -def find_hyperparameters( - dataset_name: str, - *, - monotonicity_indicator: Dict[str, int], - final_activation: Union[str, Callable[[TensorLike, TensorLike], TensorLike]], - loss: Union[str, Callable[[TensorLike, TensorLike], TensorLike]], - metrics: Union[str, Callable[[TensorLike, TensorLike], TensorLike]], - hp_params_f: Optional[Callable[[HyperParameters], Dict[str, Any]]] = None, - max_trials: int = 100, - max_epochs: int = 50, - batch_size: int = 8, - objective: Union[str, Objective], - direction: str, - dir_root: Union[Path, str] = "tuner", - seed: int = 42, - executions_per_trial: int = 3, - max_consecutive_failed_trials: int = 5, - patience: int = 10, -) -> Tuner: - """Search for optimal hyperparameters - - Args: - dataset_name: name of the dataset, one of "auto", "heart", compas", "blog", "loan" - monotonicity_indicator: monotonicity indicator as used in `MonoDense.__init__` - final_activation: final activation of the neural network - loss: Tensorflow loss function - metrics: Tensorflow metrics function - hp_params_f: a function constructing sampling hyperparameters using Keras Tuner - max_trials: maximum number of trials - max_epochs: maximum number of epochs in each trial - batch_size: batch size - objective: objective, typically f"val_{metrics}" - direction: direction of the objective, either "min" or "max" - dir_root: root directory for storing Keras Tuner data - seed: random seed used to guarantee reproducibility of results - executions_per_trial: number of executions per trial. Set it to number higher than zero for small datasets - max_consecutive_failed_trials: maximum number of failed trials as used in Keras Tuner - patience: number of epoch with worse objective before stopping trial early - - Returns: - An instance of Keras Tuner - - """ - tf.keras.utils.set_random_seed(seed) - - train_df, test_df = get_train_n_test_data(dataset_name) - train_ds, test_ds = df2ds(train_df), df2ds(test_df) - - oracle = _TestHyperModel( - monotonicity_indicator=monotonicity_indicator, - hp_params_f=hp_params_f, - final_activation=final_activation, - loss=loss, - metrics=metrics, - train_ds=train_ds, - batch_size=batch_size, - ) - - tuner = BayesianOptimization( - oracle, - objective=Objective(objective, direction), - max_trials=max_trials, - seed=seed, - directory=Path(dir_root), - project_name=dataset_name, - executions_per_trial=executions_per_trial, - max_consecutive_failed_trials=max_consecutive_failed_trials, - ) - - stop_early = tf.keras.callbacks.EarlyStopping(monitor="val_loss", patience=patience) - - tuner.search( - train_ds.shuffle(len(train_ds)).batch(batch_size).prefetch(2), - validation_data=test_ds.batch(256), - callbacks=[stop_early], - epochs=max_epochs, - ) - - return tuner - -# %% ../../nbs/Experiments.ipynb 22 -def _count_model_params(model: Model) -> int: - return sum([sum([count_params(v) for v in l.variables]) for l in model.layers]) - - -def _create_model_stats( - tuner: Tuner, - hp: Dict[str, Any], - *, - stats: Optional[pd.DataFrame] = None, - max_epochs: int, - num_runs: int, - top_runs: int, - batch_size: int, - patience: int, - verbose: int, - train_ds: tf.data.Dataset, - test_ds: tf.data.Dataset, -) -> pd.DataFrame: - tf.keras.utils.set_random_seed(42) - - def model_stats( - tuner: Tuner = tuner, - hp: Dict[str, Any] = hp, - max_epochs: int = max_epochs, - batch_size: int = batch_size, - patience: int = patience, - verbose: int = verbose, - train_ds: tf.data.Dataset = train_ds, - test_ds: tf.data.Dataset = test_ds, - ) -> float: - model = tuner.hypermodel.build(hp) - stop_early = tf.keras.callbacks.EarlyStopping( - monitor="val_loss", patience=patience - ) - history = model.fit( - train_ds.shuffle(len(train_ds)).batch(batch_size).prefetch(2), - epochs=max_epochs, - validation_data=test_ds.batch(256), - verbose=verbose, - callbacks=[stop_early], - ) - objective = history.history[tuner.oracle.objective.name] - if tuner.oracle.objective.direction == "max": - best_epoch = objective.index(max(objective)) - else: - best_epoch = objective.index(min(objective)) - return objective[best_epoch] # type: ignore - - xs = sorted( - [model_stats() for _ in range(num_runs)], - reverse=tuner.oracle.objective.direction == "max", - ) - stats = pd.Series(xs[:top_runs]) - stats = stats.describe() - stats = { - f"{tuner.oracle.objective.name}_{k}": stats[k] - for k in ["mean", "std", "min", "max"] - } - model = tuner.hypermodel.build(hp) - stats_df = pd.DataFrame( - dict(**hp.values, **stats, params=_count_model_params(model)), # type: ignore - index=[0], - ) - return stats_df - -# %% ../../nbs/Experiments.ipynb 23 -def create_tuner_stats( - tuner: Tuner, - *, - num_models: int = 10, - max_epochs: int = 50, - batch_size: int = 8, - patience: int = 10, - verbose: int = 0, -) -> pd.DataFrame: - """Calculates statistics for the best models found by Keras Tuner - - Args: - tuner: an instance of Keras Tuner - num_models: number of best models to use for calculating statistics - max_epochs: maximum number of epochs used in runs - batch_size: batch_size - patience: maximum number of epochs with worse objective before stopping trial early - verbose: verbosity level of `Model.fit` function - - Returns: - A dataframe with statistics - """ - stats = None - - train_df, test_df = get_train_n_test_data(tuner.project_name) - train_ds, test_ds = df2ds(train_df), df2ds(test_df) - - for hp in tuner.get_best_hyperparameters(num_trials=num_models): - new_entry = _create_model_stats( - tuner, - hp, - stats=stats, - max_epochs=max_epochs, - num_runs=10, - top_runs=5, - batch_size=batch_size, - patience=patience, - verbose=verbose, - train_ds=train_ds, - test_ds=test_ds, - ) - if stats is None: - stats = new_entry - else: - stats = pd.concat([stats, new_entry]).reset_index(drop=True) - - try: - display(stats.sort_values(f"{tuner.oracle.objective.name}_mean")) # type: ignore - # nosemgrep - except Exception as e: # nosec - pass - - return stats.sort_values(f"{tuner.oracle.objective.name}_mean") # type: ignore diff --git a/airt/keras/layers/__init__.py b/airt/keras/layers/__init__.py index ea8551d..ba970a7 100644 --- a/airt/keras/layers/__init__.py +++ b/airt/keras/layers/__init__.py @@ -1,19 +1,4 @@ -# AUTOGENERATED! DO NOT EDIT! File to edit: ../../../nbs/Layers.ipynb. +"""Keras layers.""" -# %% auto 0 -__all__ = ['dummy'] - -# %% ../../../nbs/Layers.ipynb 1 -import tensorflow as tf - -from ..._components.mono_dense_layer import MonoDense - -# %% ../../../nbs/Layers.ipynb 4 -def dummy() -> None: - pass - - -dummy.__module__ = "_dummy" - -# %% ../../../nbs/Layers.ipynb 5 -__all__ = ["MonoDense"] +__all__: list[str] = [] +# __all__ = ("MonoDenseLayer",) diff --git a/airt/keras/layers/_mono_dense.py b/airt/keras/layers/_mono_dense.py new file mode 100644 index 0000000..f8109a5 --- /dev/null +++ b/airt/keras/layers/_mono_dense.py @@ -0,0 +1,702 @@ +__all__ = [ + "get_activation_functions", + "apply_activations", +] + +# # %% ../../nbs/MonoDenseLayer.ipynb 3 +# from contextlib import contextmanager +from functools import lru_cache +from typing import Callable, Optional, Union + +import numpy as np +import tensorflow as tf + +# from numpy.typing import ArrayLike, NDArray +# from tensorflow.keras.layers import Concatenate, Dense, Dropout +from tensorflow.types.experimental import TensorLike + + +@lru_cache +def get_activation_functions( + activation: Optional[Union[str, Callable[[TensorLike], TensorLike]]] = None, +) -> tuple[ + Callable[[TensorLike], TensorLike], + Callable[[TensorLike], TensorLike], +]: + convex_activation = tf.keras.activations.get( + activation.lower() if isinstance(activation, str) else activation + ) + + @tf.function # type: ignore[misc] + def concave_activation(x: TensorLike) -> TensorLike: + return -convex_activation(-x) + + return convex_activation, concave_activation + + +# @tf.function +def apply_activations( + x: TensorLike, + *, + units: int, + convex_activation: Callable[[TensorLike], TensorLike], + concave_activation: Callable[[TensorLike], TensorLike], + is_convex: bool = False, + is_concave: bool = False, + activation_weights: tuple[float, float] = (1.0, 1.0), +) -> TensorLike: + if convex_activation is None: + return x + elif is_convex: + normalized_activation_weights = np.array([1.0, 0.0]) + elif is_concave: + normalized_activation_weights = np.array([0.0, 1.0]) + else: + if len(activation_weights) != 2: + raise ValueError(f"activation_weights={activation_weights}") + if (np.array(activation_weights) < 0).any(): + raise ValueError(f"activation_weights={activation_weights}") + normalized_activation_weights = np.array(activation_weights) / sum( + activation_weights + ) + + s_convex = round(normalized_activation_weights[0] * units) + s_concave = units - s_convex + + x_convex, x_concave = tf.split(x, (s_convex, s_concave), axis=-1) + + y_convex = convex_activation(x_convex) + y_concave = concave_activation(x_concave) + + y = tf.concat([y_convex, y_concave], axis=-1) + + return y + + +# # %% ../../nbs/MonoDenseLayer.ipynb 17 +# def get_monotonicity_indicator( +# monotonicity_indicator: ArrayLike, +# *, +# input_shape: Tuple[int, ...], +# units: int, +# ) -> TensorLike: +# # convert to tensor if needed and make it broadcastable to the kernel +# monotonicity_indicator = np.array(monotonicity_indicator) +# if len(monotonicity_indicator.shape) < 2: +# monotonicity_indicator = np.reshape(monotonicity_indicator, (-1, 1)) +# elif len(monotonicity_indicator.shape) > 2: +# raise ValueError( +# f"monotonicity_indicator has rank greater than 2: {monotonicity_indicator.shape}" +# ) + +# monotonicity_indicator_broadcasted = np.broadcast_to( +# monotonicity_indicator, shape=(input_shape[-1], units) +# ) + +# if not np.all( +# (monotonicity_indicator == -1) +# | (monotonicity_indicator == 0) +# | (monotonicity_indicator == 1) +# ): +# raise ValueError( +# f"Each element of monotonicity_indicator must be one of -1, 0, 1, but it is: '{monotonicity_indicator}'" +# ) +# return monotonicity_indicator + +# # %% ../../nbs/MonoDenseLayer.ipynb 21 +# def apply_monotonicity_indicator_to_kernel( +# kernel: tf.Variable, +# monotonicity_indicator: ArrayLike, +# ) -> TensorLike: +# # convert to tensor if needed and make it broadcastable to the kernel +# monotonicity_indicator = tf.convert_to_tensor(monotonicity_indicator) + +# # absolute value of the kernel +# abs_kernel = tf.abs(kernel) + +# # replace original kernel values for positive or negative ones where needed +# xs = tf.where( +# monotonicity_indicator == 1, +# abs_kernel, +# kernel, +# ) +# xs = tf.where(monotonicity_indicator == -1, -abs_kernel, xs) + +# return xs + + +# @contextmanager +# def replace_kernel_using_monotonicity_indicator( +# layer: tf.keras.layers.Dense, +# monotonicity_indicator: TensorLike, +# ) -> Generator[None, None, None]: +# old_kernel = layer.kernel + +# layer.kernel = apply_monotonicity_indicator_to_kernel( +# layer.kernel, monotonicity_indicator +# ) +# try: +# yield +# finally: +# layer.kernel = old_kernel + +# # %% ../../nbs/MonoDenseLayer.ipynb 28 +# @export +# class MonoDense(Dense): +# """Monotonic counterpart of the regular Dense Layer of tf.keras + +# This is an implementation of our Monotonic Dense Unit or Constrained Monotone Fully Connected Layer. The below is the figure from the paper for reference. + +# - the parameter `monotonicity_indicator` corresponds to **t** in the figure below, and + +# - parameters `is_convex`, `is_concave` and `activation_weights` are used to calculate the activation selector **s** as follows: + +# - if `is_convex` or `is_concave` is **True**, then the activation selector **s** will be (`units`, 0, 0) and (0, `units`, 0), respectively. + +# - if both `is_convex` or `is_concave` is **False**, then the `activation_weights` represent ratios between $\\breve{s}$, $\\hat{s}$ and $\\tilde{s}$, +# respectively. E.g. if `activation_weights = (2, 2, 1)` and `units = 10`, then + +# $$ +# (\\breve{s}, \\hat{s}, \\tilde{s}) = (4, 4, 2) +# $$ + +# ![mono-dense-layer-diagram.png](../../../../../images/nbs/images/mono-dense-layer-diagram.png) + +# """ + +# def __init__( +# self, +# units: int, +# *, +# activation: Optional[Union[str, Callable[[TensorLike], TensorLike]]] = None, +# monotonicity_indicator: ArrayLike = 1, +# is_convex: bool = False, +# is_concave: bool = False, +# activation_weights: Tuple[float, float, float] = (7.0, 7.0, 2.0), +# **kwargs: Any, +# ): +# """Constructs a new MonoDense instance. + +# Params: +# units: Positive integer, dimensionality of the output space. +# activation: Activation function to use, it is assumed to be convex monotonically +# increasing function such as "relu" or "elu" +# monotonicity_indicator: Vector to indicate which of the inputs are monotonically increasing or +# monotonically decreasing or non-monotonic. Has value 1 for monotonically increasing, +# -1 for monotonically decreasing and 0 for non-monotonic. +# is_convex: convex if set to True +# is_concave: concave if set to True +# activation_weights: relative weights for each type of activation, the default is (1.0, 1.0, 1.0). +# Ignored if is_convex or is_concave is set to True +# **kwargs: passed as kwargs to the constructor of `Dense` + +# Raise: +# ValueError: +# - if both **is_concave** and **is_convex** are set to **True**, or +# - if any component of activation_weights is negative or there is not exactly three components +# """ +# if is_convex and is_concave: +# raise ValueError( +# "The model cannot be set to be both convex and concave (only linear functions are both)." +# ) + +# if len(activation_weights) != 3: +# raise ValueError( +# f"There must be exactly three components of activation_weights, but we have this instead: {activation_weights}." +# ) + +# if (np.array(activation_weights) < 0).any(): +# raise ValueError( +# f"Values of activation_weights must be non-negative, but we have this instead: {activation_weights}." +# ) + +# super(MonoDense, self).__init__(units=units, activation=None, **kwargs) + +# self.units = units +# self.org_activation = activation +# self.monotonicity_indicator = monotonicity_indicator +# self.is_convex = is_convex +# self.is_concave = is_concave +# self.activation_weights = activation_weights + +# ( +# self.convex_activation, +# self.concave_activation, +# self.saturated_activation, +# ) = get_activation_functions(self.org_activation) + +# def get_config(self) -> Dict[str, Any]: +# """Get config is used for saving the model""" +# return dict( +# units=self.units, +# activation=self.org_activation, +# monotonicity_indicator=self.monotonicity_indicator, +# is_convex=self.is_convex, +# is_concave=self.is_concave, +# activation_weights=self.activation_weights, +# ) + +# def build(self, input_shape: Tuple, *args: List[Any], **kwargs: Any) -> None: +# """Build + +# Args: +# input_shape: input tensor +# args: positional arguments passed to Dense.build() +# kwargs: keyword arguments passed to Dense.build() +# """ +# super(MonoDense, self).build(input_shape, *args, **kwargs) +# self.monotonicity_indicator = get_monotonicity_indicator( +# monotonicity_indicator=self.monotonicity_indicator, +# input_shape=input_shape, +# units=self.units, +# ) + +# def call(self, inputs: TensorLike) -> TensorLike: +# """Call + +# Args: +# inputs: input tensor of shape (batch_size, ..., x_length) + +# Returns: +# N-D tensor with shape: `(batch_size, ..., units)`. + +# """ +# # calculate W'*x+y after we replace the kernel according to monotonicity vector +# with replace_kernel_using_monotonicity_indicator( +# self, monotonicity_indicator=self.monotonicity_indicator +# ): +# h = super(MonoDense, self).call(inputs) + +# y = apply_activations( +# h, +# units=self.units, +# convex_activation=self.convex_activation, +# concave_activation=self.concave_activation, +# saturated_activation=self.saturated_activation, +# is_convex=self.is_convex, +# is_concave=self.is_concave, +# activation_weights=self.activation_weights, +# ) + +# return y + +# @classmethod +# def create_type_1( +# cls, +# inputs: Union[TensorLike, Dict[str, TensorLike], List[TensorLike]], +# *, +# units: int, +# final_units: int, +# activation: Union[str, Callable[[TensorLike], TensorLike]], +# n_layers: int, +# final_activation: Optional[ +# Union[str, Callable[[TensorLike], TensorLike]] +# ] = None, +# monotonicity_indicator: Union[int, Dict[str, int], List[int]] = 1, +# is_convex: Union[bool, Dict[str, bool], List[bool]] = False, +# is_concave: Union[bool, Dict[str, bool], List[bool]] = False, +# dropout: Optional[float] = None, +# ) -> TensorLike: +# """Builds Type-1 monotonic network + +# Type-1 architecture corresponds to the standard MLP type of neural network architecture used in general, where each +# of the input features is concatenated to form one single input feature vector $\mathbf{x}$ and fed into the network, +# with the only difference being that instead of standard fully connected or dense layers, we employ monotonic dense units +# throughout. For the first (or input layer) layer, the indicator vector $\mathbf{t}$, is used to identify the monotonicity +# property of the input feature with respect to the output. Specifically, $\mathbf{t}$ is set to $1$ for those components +# in the input feature vector that are monotonically increasing and is set to $-1$ for those components that are monotonically +# decreasing and set to $0$ if the feature is non-monotonic. For the subsequent hidden layers, monotonic dense units with the +# indicator vector $\mathbf{t}$ always being set to $1$ are used in order to preserve monotonicity. Finally, depending on +# whether the problem at hand is a regression problem or a classification problem (or even a multi-task problem), an appropriate +# activation function (such as linear activation or sigmoid or softmax) to obtain the final output. + +# ![mono-dense-layer-diagram.png](../../../images/nbs/images/type-1.png) + +# Args: +# inputs: input tensor or a dictionary of tensors +# units: number of units in hidden layers +# final_units: number of units in the output layer +# activation: the base activation function +# n_layers: total number of layers (hidden layers plus the output layer) +# final_activation: the activation function of the final layer (typically softmax, sigmoid or linear). +# If set to None (default value), then the linear activation is used. +# monotonicity_indicator: if an instance of dictionary, then maps names of input feature to their monotonicity +# indicator (-1 for monotonically decreasing, 1 for monotonically increasing and 0 otherwise). If int, +# then all input features are set to the same monotinicity indicator. +# is_convex: set to True if a particular input feature is convex +# is_concave: set to True if a particular inputs feature is concave +# dropout: dropout rate. If set to float greater than 0, Dropout layers are inserted after hidden layers. + +# Returns: +# Output tensor + +# """ +# return _create_type_1( +# inputs, +# units=units, +# final_units=final_units, +# activation=activation, +# n_layers=n_layers, +# final_activation=final_activation, +# monotonicity_indicator=monotonicity_indicator, +# is_convex=is_convex, +# is_concave=is_concave, +# dropout=dropout, +# ) + +# @classmethod +# def create_type_2( +# cls, +# inputs: Union[TensorLike, Dict[str, TensorLike], List[TensorLike]], +# *, +# input_units: Optional[int] = None, +# units: int, +# final_units: int, +# activation: Union[str, Callable[[TensorLike], TensorLike]], +# n_layers: int, +# final_activation: Optional[ +# Union[str, Callable[[TensorLike], TensorLike]] +# ] = None, +# monotonicity_indicator: Union[int, Dict[str, int], List[int]] = 1, +# is_convex: Union[bool, Dict[str, bool], List[bool]] = False, +# is_concave: Union[bool, Dict[str, bool], List[bool]] = False, +# dropout: Optional[float] = None, +# ) -> TensorLike: +# """Builds Type-2 monotonic network + +# Type-2 architecture is another example of a neural network architecture that can be built employing proposed +# monotonic dense blocks. The difference when compared to the architecture described above lies in the way input +# features are fed into the hidden layers of neural network architecture. Instead of concatenating the features +# directly, this architecture provides flexibility to employ any form of complex feature extractors for the +# non-monotonic features and use the extracted feature vectors as inputs. Another difference is that each monotonic +# input is passed through separate monotonic dense units. This provides an advantage since depending on whether the +# input is completely concave or convex or both, we can adjust the activation selection vector $\mathbf{s}$ appropriately +# along with an appropriate value for the indicator vector $\mathbf{t}$. Thus, each of the monotonic input features has +# a separate monotonic dense layer associated with it. Thus as the major difference to the above-mentioned architecture, +# we concatenate the feature vectors instead of concatenating the inputs directly. The subsequent parts of the network are +# similar to the architecture described above wherein for the rest of the hidden monotonic dense units, the indicator vector +# $\mathbf{t}$ is always set to $1$ to preserve monotonicity. + +# ![mono-dense-layer-diagram.png](../../../images/nbs/images/type-2.png) + +# Args: +# inputs: input tensor or a dictionary of tensors +# input_units: used to preprocess features before entering the common mono block +# units: number of units in hidden layers +# final_units: number of units in the output layer +# activation: the base activation function +# n_layers: total number of layers (hidden layers plus the output layer) +# final_activation: the activation function of the final layer (typically softmax, sigmoid or linear). +# If set to None (default value), then the linear activation is used. +# monotonicity_indicator: if an instance of dictionary, then maps names of input feature to their monotonicity +# indicator (-1 for monotonically decreasing, 1 for monotonically increasing and 0 otherwise). If int, +# then all input features are set to the same monotinicity indicator. +# is_convex: set to True if a particular input feature is convex +# is_concave: set to True if a particular inputs feature is concave +# dropout: dropout rate. If set to float greater than 0, Dropout layers are inserted after hidden layers. + +# Returns: +# Output tensor + +# """ +# return _create_type_2( +# inputs, +# input_units=input_units, +# units=units, +# final_units=final_units, +# activation=activation, +# n_layers=n_layers, +# final_activation=final_activation, +# monotonicity_indicator=monotonicity_indicator, +# is_convex=is_convex, +# is_concave=is_concave, +# dropout=dropout, +# ) + +# # %% ../../nbs/MonoDenseLayer.ipynb 33 +# def _create_mono_block( +# *, +# units: List[int], +# activation: Union[str, Callable[[TensorLike], TensorLike]], +# monotonicity_indicator: TensorLike = 1, +# is_convex: bool = False, +# is_concave: bool = False, +# dropout: Optional[float] = None, +# ) -> Callable[[TensorLike], TensorLike]: +# def create_mono_block_inner( +# x: TensorLike, +# *, +# units: List[int] = units, +# activation: Union[str, Callable[[TensorLike], TensorLike]] = activation, +# monotonicity_indicator: TensorLike = monotonicity_indicator, +# is_convex: bool = is_convex, +# is_concave: bool = is_concave, +# ) -> TensorLike: +# if len(units) == 0: +# return x + +# y = x +# for i in range(len(units)): +# y = MonoDense( +# units=units[i], +# activation=activation if i < len(units) - 1 else None, +# monotonicity_indicator=monotonicity_indicator if i == 0 else 1, +# is_convex=is_convex, +# is_concave=is_concave, +# name=f"mono_dense_{i}" +# + ("_increasing" if i != 0 else "") +# + ("_convex" if is_convex else "") +# + ("_concave" if is_concave else ""), +# )(y) +# if (i < len(units) - 1) and dropout: +# y = Dropout(dropout)(y) + +# return y + +# return create_mono_block_inner + +# # %% ../../nbs/MonoDenseLayer.ipynb 35 +# T = TypeVar("T") + + +# def _prepare_mono_input_n_param( +# inputs: Union[TensorLike, Dict[str, TensorLike], List[TensorLike]], +# param: Union[T, Dict[str, T], List[T]], +# ) -> Tuple[List[TensorLike], List[T], List[str]]: +# if isinstance(inputs, list): +# if isinstance(param, int): +# param = [param] * len(inputs) # type: ignore +# elif isinstance(param, list): +# if len(inputs) != len(param): +# raise ValueError(f"{len(inputs)} != {len(param)}") +# else: +# raise ValueError(f"Incompatible types: {type(inputs)=}, {type(param)=}") +# sorted_feature_names = [f"{i}" for i in range(len(inputs))] + +# elif isinstance(inputs, dict): +# sorted_feature_names = sorted(inputs.keys()) + +# if isinstance(param, int): +# param = [param] * len(inputs) # type: ignore +# elif isinstance(param, dict): +# if set(param.keys()) != set(sorted_feature_names): +# raise ValueError(f"{set(param.keys())} != {set(sorted_feature_names)}") +# else: +# param = [param[k] for k in sorted_feature_names] +# else: +# raise ValueError(f"Incompatible types: {type(inputs)=}, {type(param)=}") + +# inputs = [inputs[k] for k in sorted_feature_names] + +# else: +# if not isinstance(param, int): +# raise ValueError(f"Incompatible types: {type(inputs)=}, {type(param)=}") +# inputs = [inputs] +# param = [param] # type: ignore +# sorted_feature_names = ["inputs"] + +# return inputs, param, sorted_feature_names + +# # %% ../../nbs/MonoDenseLayer.ipynb 43 +# def _check_convexity_params( +# monotonicity_indicator: List[int], +# is_convex: List[bool], +# is_concave: List[bool], +# names: List[str], +# ) -> Tuple[bool, bool]: +# ix = [ +# i for i in range(len(monotonicity_indicator)) if is_convex[i] and is_concave[i] +# ] + +# if len(ix) > 0: +# raise ValueError( +# f"Parameters both convex and concave: {[names[i] for i in ix]}" +# ) + +# has_convex = any(is_convex) +# has_concave = any(is_concave) +# if has_convex and has_concave: +# print("WARNING: we have both convex and concave parameters") + +# return has_convex, has_concave + +# # %% ../../nbs/MonoDenseLayer.ipynb 46 +# @export +# def _create_type_1( +# inputs: Union[TensorLike, Dict[str, TensorLike], List[TensorLike]], +# *, +# units: int, +# final_units: int, +# activation: Union[str, Callable[[TensorLike], TensorLike]], +# n_layers: int, +# final_activation: Optional[Union[str, Callable[[TensorLike], TensorLike]]] = None, +# monotonicity_indicator: Union[int, Dict[str, int], List[int]] = 1, +# is_convex: Union[bool, Dict[str, bool], List[bool]] = False, +# is_concave: Union[bool, Dict[str, bool], List[bool]] = False, +# dropout: Optional[float] = None, +# ) -> TensorLike: +# """Builds Type-1 monotonic network + +# Type-1 architecture corresponds to the standard MLP type of neural network architecture used in general, where each +# of the input features is concatenated to form one single input feature vector $\mathbf{x}$ and fed into the network, +# with the only difference being that instead of standard fully connected or dense layers, we employ monotonic dense units +# throughout. For the first (or input layer) layer, the indicator vector $\mathbf{t}$, is used to identify the monotonicity +# property of the input feature with respect to the output. Specifically, $\mathbf{t}$ is set to $1$ for those components +# in the input feature vector that are monotonically increasing and is set to $-1$ for those components that are monotonically +# decreasing and set to $0$ if the feature is non-monotonic. For the subsequent hidden layers, monotonic dense units with the +# indicator vector $\mathbf{t}$ always being set to $1$ are used in order to preserve monotonicity. Finally, depending on +# whether the problem at hand is a regression problem or a classification problem (or even a multi-task problem), an appropriate +# activation function (such as linear activation or sigmoid or softmax) to obtain the final output. + +# ![mono-dense-layer-diagram.png](../../../images/nbs/images/type-1.png) + +# Args: +# inputs: input tensor or a dictionary of tensors +# units: number of units in hidden layers +# final_units: number of units in the output layer +# activation: the base activation function +# n_layers: total number of layers (hidden layers plus the output layer) +# final_activation: the activation function of the final layer (typically softmax, sigmoid or linear). +# If set to None (default value), then the linear activation is used. +# monotonicity_indicator: if an instance of dictionary, then maps names of input feature to their monotonicity +# indicator (-1 for monotonically decreasing, 1 for monotonically increasing and 0 otherwise). If int, +# then all input features are set to the same monotinicity indicator. +# is_convex: set to True if a particular input feature is convex +# is_concave: set to True if a particular inputs feature is concave +# dropout: dropout rate. If set to float greater than 0, Dropout layers are inserted after hidden layers. + +# Returns: +# Output tensor + +# """ +# _, is_convex, _ = _prepare_mono_input_n_param(inputs, is_convex) +# _, is_concave, _ = _prepare_mono_input_n_param(inputs, is_concave) +# x, monotonicity_indicator, names = _prepare_mono_input_n_param( +# inputs, monotonicity_indicator +# ) +# has_convex, has_concave = _check_convexity_params( +# monotonicity_indicator, is_convex, is_concave, names +# ) + +# y = tf.keras.layers.Concatenate()(x) + +# y = _create_mono_block( +# units=[units] * (n_layers - 1) + [final_units], +# activation=activation, +# monotonicity_indicator=monotonicity_indicator, +# is_convex=has_convex, +# is_concave=has_concave and not has_convex, +# dropout=dropout, +# )(y) + +# if final_activation is not None: +# y = tf.keras.activations.get(final_activation)(y) + +# return y + +# # %% ../../nbs/MonoDenseLayer.ipynb 50 +# @export +# def _create_type_2( +# inputs: Union[TensorLike, Dict[str, TensorLike], List[TensorLike]], +# *, +# input_units: Optional[int] = None, +# units: int, +# final_units: int, +# activation: Union[str, Callable[[TensorLike], TensorLike]], +# n_layers: int, +# final_activation: Optional[Union[str, Callable[[TensorLike], TensorLike]]] = None, +# monotonicity_indicator: Union[int, Dict[str, int], List[int]] = 1, +# is_convex: Union[bool, Dict[str, bool], List[bool]] = False, +# is_concave: Union[bool, Dict[str, bool], List[bool]] = False, +# dropout: Optional[float] = None, +# ) -> TensorLike: +# """Builds Type-2 monotonic network + +# Type-2 architecture is another example of a neural network architecture that can be built employing proposed +# monotonic dense blocks. The difference when compared to the architecture described above lies in the way input +# features are fed into the hidden layers of neural network architecture. Instead of concatenating the features +# directly, this architecture provides flexibility to employ any form of complex feature extractors for the +# non-monotonic features and use the extracted feature vectors as inputs. Another difference is that each monotonic +# input is passed through separate monotonic dense units. This provides an advantage since depending on whether the +# input is completely concave or convex or both, we can adjust the activation selection vector $\mathbf{s}$ appropriately +# along with an appropriate value for the indicator vector $\mathbf{t}$. Thus, each of the monotonic input features has +# a separate monotonic dense layer associated with it. Thus as the major difference to the above-mentioned architecture, +# we concatenate the feature vectors instead of concatenating the inputs directly. The subsequent parts of the network are +# similar to the architecture described above wherein for the rest of the hidden monotonic dense units, the indicator vector +# $\mathbf{t}$ is always set to $1$ to preserve monotonicity. + +# ![mono-dense-layer-diagram.png](../../../images/nbs/images/type-2.png) + +# Args: +# inputs: input tensor or a dictionary of tensors +# input_units: used to preprocess features before entering the common mono block +# units: number of units in hidden layers +# final_units: number of units in the output layer +# activation: the base activation function +# n_layers: total number of layers (hidden layers plus the output layer) +# final_activation: the activation function of the final layer (typically softmax, sigmoid or linear). +# If set to None (default value), then the linear activation is used. +# monotonicity_indicator: if an instance of dictionary, then maps names of input feature to their monotonicity +# indicator (-1 for monotonically decreasing, 1 for monotonically increasing and 0 otherwise). If int, +# then all input features are set to the same monotinicity indicator. +# is_convex: set to True if a particular input feature is convex +# is_concave: set to True if a particular inputs feature is concave +# dropout: dropout rate. If set to float greater than 0, Dropout layers are inserted after hidden layers. + +# Returns: +# Output tensor + +# """ +# _, is_convex, _ = _prepare_mono_input_n_param(inputs, is_convex) +# _, is_concave, _ = _prepare_mono_input_n_param(inputs, is_concave) +# x, monotonicity_indicator, names = _prepare_mono_input_n_param( +# inputs, monotonicity_indicator +# ) +# has_convex, has_concave = _check_convexity_params( +# monotonicity_indicator, is_convex, is_concave, names +# ) + +# if input_units is None: +# input_units = max(units // 4, 1) + +# y = [ +# ( +# MonoDense( +# units=input_units, +# activation=activation, +# monotonicity_indicator=monotonicity_indicator[i], +# is_convex=is_convex[i], +# is_concave=is_concave[i], +# name=f"mono_dense_{names[i]}" +# + ("_increasing" if monotonicity_indicator[i] == 1 else "_decreasing") +# + ("_convex" if is_convex[i] else "") +# + ("_concave" if is_concave[i] else ""), +# ) +# if monotonicity_indicator[i] != 0 +# else ( +# Dense( +# units=input_units, activation=activation, name=f"dense_{names[i]}" +# ) +# ) +# )(x[i]) +# for i in range(len(inputs)) +# ] + +# y = Concatenate(name="preprocessed_features")(y) +# monotonicity_indicator_block: List[int] = sum( +# [[abs(x)] * input_units for x in monotonicity_indicator], [] +# ) + +# y = _create_mono_block( +# units=[units] * (n_layers - 1) + [final_units], +# activation=activation, +# monotonicity_indicator=monotonicity_indicator_block, +# is_convex=has_convex, +# is_concave=has_concave and not has_convex, +# dropout=dropout, +# )(y) + +# if final_activation is not None: +# y = tf.keras.activations.get(final_activation)(y) + +# return y diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..abe1726 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,3 @@ +# :warning: DOCUMENTATION CODE SOURCES :warning: + +To find a real docs, just visit our website: [https://airt.airt.ai/latest/](https://airt.airt.ai/latest/) diff --git a/docs/create_api_docs.py b/docs/create_api_docs.py new file mode 100644 index 0000000..331b399 --- /dev/null +++ b/docs/create_api_docs.py @@ -0,0 +1,301 @@ +"""Create API documentation for a module.""" + +import itertools +from importlib import import_module +from inspect import getmembers, isclass, isfunction +from pathlib import Path +from pkgutil import walk_packages +from types import FunctionType, ModuleType +from typing import Any, Optional, Union + +API_META = ( + "# 0.5 - API\n" + "# 2 - Release\n" + "# 3 - Contributing\n" + "# 5 - Template Page\n" + "# 10 - Default\n" + "search:\n" + " boost: 0.5" +) + +MD_API_META = "---\n" + API_META + "\n---\n\n" + + +def _get_submodules(package_name: str) -> list[str]: + """Get all submodules of a package. + + Args: + package_name: The name of the package. + + Returns: + A list of submodules. + + !!! note + + The above docstring is autogenerated by docstring-gen library (https://github.com/airtai/docstring-gen) + """ + try: + # nosemgrep: python.lang.security.audit.non-literal-import.non-literal-import + m = import_module(package_name) + except ModuleNotFoundError as e: + raise e + submodules = [ + info.name for info in walk_packages(m.__path__, prefix=f"{package_name}.") + ] + submodules = [ + x for x in submodules if not any(name.startswith("_") for name in x.split(".")) + ] + return [package_name, *submodules] + + +def _import_submodules(module_name: str) -> Optional[list[ModuleType]]: + def _import_module(name: str) -> Optional[ModuleType]: + try: + # nosemgrep: python.lang.security.audit.non-literal-import.non-literal-import + return import_module(name) + except Exception: + return None + + package_names = _get_submodules(module_name) + modules = [_import_module(n) for n in package_names] + return [m for m in modules if m is not None] + + +def _import_functions_and_classes( + m: ModuleType, +) -> list[tuple[str, Union[FunctionType, type[Any]]]]: + funcs_and_classes = [ + (x, y) for x, y in getmembers(m) if isfunction(y) or isclass(y) + ] + if hasattr(m, "__all__"): + for t in m.__all__: + obj = getattr(m, t) + if isfunction(obj) or isclass(obj): + funcs_and_classes.append((t, m.__name__ + "." + t)) + + return funcs_and_classes + + +def _is_private(name: str) -> bool: + parts = name.split(".") + return any(part.startswith("_") for part in parts) + + +def _import_all_members(module_name: str) -> list[str]: + submodules = _import_submodules(module_name) + submodules = submodules if submodules is not None else [] + + members: list[tuple[str, Union[FunctionType, type[Any]]]] = list( + itertools.chain(*[_import_functions_and_classes(m) for m in submodules]) + ) + + names = [ + y if isinstance(y, str) else f"{y.__module__}.{y.__name__}" for x, y in members + ] + names = [ + name for name in names if not _is_private(name) and name.startswith(module_name) + ] + return names + + +def _merge_lists(members: list[str], submodules: list[str]) -> list[str]: + members_copy = members[:] + for sm in submodules: + for i, el in enumerate(members_copy): + if el.startswith(sm): + members_copy.insert(i, sm) + break + return members_copy + + +def _add_all_submodules(members: list[str]) -> list[str]: + def _f(x: str) -> list[str]: + xs = x.split(".") + return [".".join(xs[:i]) + "." for i in range(1, len(xs))] + + def _get_sorting_key(item: str) -> str: + y = item.split(".") + z = [f"~{a}" for a in y[:-1]] + [y[-1]] + return ".".join(z) + + submodules = list(set(itertools.chain(*[_f(x) for x in members]))) + members = _merge_lists(members, submodules) + members = list(dict.fromkeys(members)) + return sorted(members, key=_get_sorting_key) + + +def _get_api_summary_item(x: str) -> str: + xs = x.split(".") + if x.endswith("."): + indent = " " * (4 * (len(xs) - 1)) + return f"{indent}- {xs[-2]}" + else: + indent = " " * (4 * (len(xs))) + return f"{indent}- [{xs[-1]}](api/{'/'.join(xs)}.md)" + + +def _get_api_summary(members: list[str]) -> str: + return "\n".join([_get_api_summary_item(x) for x in members]) + + +def _generate_api_doc(name: str, docs_path: Path) -> Path: + xs = name.split(".") + module_name = ".".join(xs[:-1]) + member_name = xs[-1] + path = docs_path / f"{('/').join(xs)}.md" + content = f"::: {module_name}.{member_name}\n" + + path.parent.mkdir(exist_ok=True, parents=True) + path.write_text(MD_API_META + content) + + return path + + +def _generate_api_docs(members: list[str], docs_path: Path) -> list[Path]: + return [_generate_api_doc(x, docs_path) for x in members if not x.endswith(".")] + + +def _get_submodule_members(module_name: str) -> list[str]: + """Get a list of all submodules contained within the module. + + Args: + module_name: The name of the module to retrieve submodules from + + Returns: + A list of submodule names within the module + """ + members = _import_all_members(module_name) + members_with_submodules = _add_all_submodules(members) + members_with_submodules_str: list[str] = [ + x[:-1] if x.endswith(".") else x for x in members_with_submodules + ] + return members_with_submodules_str + + +def _load_submodules( + module_name: str, + members_with_submodules: list[str], +) -> list[Union[FunctionType, type[Any]]]: + """Load the given submodules from the module. + + Args: + module_name: The name of the module whose submodules to load + members_with_submodules: A list of submodule names to load + + Returns: + A list of imported submodule objects. + """ + submodules = _import_submodules(module_name) + submodules = submodules if submodules is not None else [] + members = itertools.chain(*map(_import_functions_and_classes, submodules)) + names = [ + y + for _, y in members + if (isinstance(y, str) and y in members_with_submodules) + or (f"{y.__module__}.{y.__name__}" in members_with_submodules) + ] + return names + + +def _update_single_api_doc( + symbol: Union[FunctionType, type[Any]], docs_path: Path, module_name: str +) -> None: + en_docs_path = docs_path / "docs" / "en" + + if isinstance(symbol, str): + class_name = symbol.split(".")[-1] + module_name = ".".join(symbol.split(".")[:-1]) + # nosemgrep: python.lang.security.audit.non-literal-import.non-literal-import + obj = getattr(import_module(module_name), class_name) + if obj.__module__.startswith(module_name): + obj = symbol + filename = symbol + + else: + obj = symbol + filename = f"{symbol.__module__}.{symbol.__name__}" + + content = "::: %s\n" % ( + obj if isinstance(obj, str) else f"{obj.__module__}.{obj.__qualname__}" + ) + + target_file_path = "/".join(filename.split(".")) + ".md" + + (en_docs_path / "api" / target_file_path).write_text(MD_API_META + content) + + +def _update_api_docs( + symbols: list[Union[FunctionType, type[Any]]], docs_path: Path, module_name: str +) -> None: + for symbol in symbols: + _update_single_api_doc( + symbol=symbol, docs_path=docs_path, module_name=module_name + ) + + +def _generate_api_docs_for_module(root_path: Path, module_name: str) -> str: + """Generate API documentation for a module. + + Args: + root_path: The root path of the project. + module_name: The name of the module. + + Returns: + A string containing the API documentation for the module. + + """ + members = _import_all_members(module_name) + members_with_submodules = _add_all_submodules(members) + api_summary = _get_api_summary(members_with_submodules) + + api_root = root_path / "docs" / "en" / "api" + api_root.mkdir(parents=True, exist_ok=True) + + (api_root / ".meta.yml").write_text(API_META) + + _generate_api_docs(members_with_submodules, api_root) + + members_with_submodules = _get_submodule_members(module_name) + symbols = _load_submodules(module_name, members_with_submodules) + + _update_api_docs(symbols, root_path, module_name) + + # todo: fix the problem and remove this + src = """ - [ContactDict](api/airt/asyncapi/schema/info/ContactDict.md) +""" + dst = """ - [ContactDict](api/airt/asyncapi/schema/info/ContactDict.md) + - [EmailStr](api/airt/asyncapi/schema/info/EmailStr.md) +""" + api_summary = api_summary.replace(src, dst) + + return api_summary + + +def create_api_docs( + root_path: Path, + module: str, +) -> None: + """Generate API documentation for a module. + + Args: + root_path: The root path of the project. + module: The name of the module. + + """ + api = _generate_api_docs_for_module(root_path, module) + + docs_dir = root_path / "docs" + + # read summary template from file + navigation_template = (docs_dir / "navigation_template.txt").read_text() + + summary = navigation_template.format(api=api) + + summary = "\n".join(filter(bool, (x.rstrip() for x in summary.split("\n")))) + + (docs_dir / "SUMMARY.md").write_text(summary) + + +if __name__ == "__main__": + root = Path(__file__).resolve().parent + create_api_docs(root, "airt") diff --git a/docs/docs.py b/docs/docs.py new file mode 100644 index 0000000..6a87a95 --- /dev/null +++ b/docs/docs.py @@ -0,0 +1,243 @@ +"""A script to help with the translation of the docs.""" + +import os +import subprocess +from http.server import HTTPServer, SimpleHTTPRequestHandler +from pathlib import Path +from shutil import rmtree +from typing import Annotated, Optional + +import mkdocs.commands.build +import mkdocs.commands.serve +import typer +from create_api_docs import create_api_docs +from expand_markdown import expand_markdown +from mkdocs.config import load_config +from update_releases import _find_metablock, _update_release_notes + +IGNORE_DIRS = ("assets", "stylesheets") + +BASE_DIR = Path(__file__).resolve().parent +CONFIG = BASE_DIR / "mkdocs.yml" +DOCS_DIR = BASE_DIR / "docs" +LANGUAGES_DIRS = tuple( + filter(lambda f: f.is_dir() and f.name not in IGNORE_DIRS, DOCS_DIR.iterdir()) +) +BUILD_DIR = BASE_DIR / "site" + +EN_DOCS_DIR = DOCS_DIR / "en" +EN_INDEX_PATH = EN_DOCS_DIR / "index.md" +README_PATH = BASE_DIR.parent / "README.md" +EN_CONTRIBUTING_PATH = ( + EN_DOCS_DIR / "getting-started" / "contributing" / "CONTRIBUTING.md" +) +CONTRIBUTING_PATH = BASE_DIR.parent / "CONTRIBUTING.md" + + +config = load_config(str(CONFIG)) + +DEV_SERVER = str(config.get("dev_addr", "0.0.0.0:8008")) + + +def _get_missing_translation(lng: str) -> Path: + return DOCS_DIR / lng / "helpful" / "missing-translation.md" + + +def _get_in_progress(lng: str) -> Path: + return DOCS_DIR / lng / "helpful" / "in-progress.md" + + +app = typer.Typer() + + +def _get_default_title(file: Path) -> str: + title = file.stem.upper().replace("-", " ") + if title == "INDEX": + title = _get_default_title(file.parent) + return title + + +def _join_nested(root: Path, path: str) -> Path: + for i in path.split("/"): + root = root / i + return _touch_file(root) + + +def _touch_file(path: Path) -> Path: + if not path.suffixes: + path.mkdir(parents=True, exist_ok=True) + else: + path.parent.mkdir(parents=True, exist_ok=True) + return path + + +@app.command() +def preview() -> None: + """A quick server to preview a built site with translations. + + For development, prefer the command live (or just mkdocs serve). + This is here only to preview a built site. + """ + _build() + typer.echo("Warning: this is a very simple server.") + typer.echo("For development, use the command live instead.") + typer.echo("This is here only to preview a built site.") + os.chdir(BUILD_DIR) + addr, port = DEV_SERVER.split(":") + server = HTTPServer((addr, int(port)), SimpleHTTPRequestHandler) + typer.echo(f"Serving at: http://{DEV_SERVER}") + server.serve_forever() + + +@app.command() +def live(port: Annotated[Optional[str], typer.Argument()] = None) -> None: + """Serve mkdocs with live reload.""" + dev_server = f"0.0.0.0:{port}" if port else DEV_SERVER + + typer.echo("Serving mkdocs with live reload") + typer.echo(f"Serving at: http://{dev_server}") + mkdocs.commands.serve.serve(dev_addr=dev_server) + + +@app.command() +def build() -> None: + """Build the docs.""" + _build() + + +@app.command() +def add(path: Annotated[str, typer.Argument(...)]) -> None: + """Add a new file to all languages.""" + title = "" + + exists = [] + not_exists = [] + + for i in LANGUAGES_DIRS: + file = _join_nested(i, path) + + if file.exists(): + exists.append(i) + + if not title: + with file.open("r") as r: + title = r.readline() + + else: + not_exists.append(i) + file.write_text( + f"# {title or _get_default_title(file)} \n" + "{! " + str(_get_in_progress(i.name)) + " !}" + ) + typer.echo(f"{file} - write `in progress`") + + if len(exists): + for i in not_exists: + file = i / path + file.write_text( + f"# {title or _get_default_title(file)} \n" + "{! " + str(_get_missing_translation(i.name)) + " !}" + ) + typer.echo(f"{file} - write `missing translation`") + + +@app.command() +def rm(path: Annotated[str, typer.Argument(...)]) -> None: + """Remove a file from all languages.""" + delete = typer.confirm("Are you sure you want to delete files?") + if not delete: + typer.echo("Not deleting") + raise typer.Abort() + + for i in LANGUAGES_DIRS: + file = i / path + if file.exists(): + if file.is_dir(): + rmtree(file) + else: + file.unlink() + typer.echo(f"{file} removed") + + if file.parent.exists() and not tuple(file.parent.iterdir()): + file.parent.rmdir() + typer.echo(f"{file.parent} removed") + + +@app.command() +def mv( + path: Annotated[str, typer.Argument(...)], + new_path: Annotated[str, typer.Argument(...)], +) -> None: + """Move a file to a new path in all languages.""" + for i in LANGUAGES_DIRS: + file = i / path + if file.exists(): + file.rename(i / new_path) + typer.echo(f"{i / new_path} moved") + + +@app.command() +def update_readme() -> None: + """Update README.md by expanding embeddings in docs/docs/en/index.md.""" + # todo: fix this function + typer.echo("Skipping updating README.md for now") + return None + + # typer.echo(f"Updating README.md") + # expand_markdown(input_markdown_path=EN_INDEX_PATH, output_markdown_path=README_PATH) + + # remove_lines_between_dashes(file_path=README_PATH) + + # relative_path = os.path.relpath(EN_INDEX_PATH, BASE_DIR.parent) + # auto_generated = f"[Note]: # (This is an auto-generated file. Please edit {relative_path} instead)\n\n" + + # existing_content = open(README_PATH).read() + # open(README_PATH, "w").write(auto_generated + existing_content) + + +@app.command() +def update_contributing() -> None: + """Update CONTRIBUTING.md by expanding embeddings in docs/docs/en/CONTRIBUTING.md.""" + typer.echo("Updating CONTRIBUTING.md") + expand_markdown( + input_markdown_path=EN_CONTRIBUTING_PATH, + output_markdown_path=CONTRIBUTING_PATH, + ) + + existing_content = CONTRIBUTING_PATH.read_text() + + _, content = _find_metablock(existing_content.splitlines()) + + relative_path = EN_CONTRIBUTING_PATH.relative_to(BASE_DIR.parent) + + CONTRIBUTING_PATH.write_text( + "\n".join( + ( + f"> **_NOTE:_** This is an auto-generated file. Please edit {relative_path} instead.", + *content, + ) + ) + + "\n" + ) + + +@app.command() +def build_api_docs() -> None: + """Build api docs for airt.""" + typer.echo("Updating API docs") + create_api_docs(root_path=BASE_DIR, module="airt") + + +def _build() -> None: + build_api_docs() + update_readme() + update_contributing() + + typer.echo("Updating Release Notes") + _update_release_notes(realease_notes_path=EN_DOCS_DIR / "release.md") + + subprocess.run(["mkdocs", "build", "--site-dir", BUILD_DIR], check=True) + + +if __name__ == "__main__": + app() diff --git a/docs/docs/.meta.yml b/docs/docs/.meta.yml new file mode 100644 index 0000000..b3b7b37 --- /dev/null +++ b/docs/docs/.meta.yml @@ -0,0 +1,7 @@ +# 0.5 - API +# 2 - Release +# 3 - Contributing +# 5 - Template Page +# 10 - Default +search: + boost: 10 diff --git a/docs/docs/SUMMARY.md b/docs/docs/SUMMARY.md new file mode 100644 index 0000000..e66bee6 --- /dev/null +++ b/docs/docs/SUMMARY.md @@ -0,0 +1,7 @@ +--- +search: + exclude: true +--- +- Contributing + - [Development](getting-started/contributing/CONTRIBUTING.md) +- [Release Notes](release.md) \ No newline at end of file diff --git a/mkdocs/docs_overrides/images/airt_icon_blue.svg b/docs/docs/assets/img/logo.svg similarity index 98% rename from mkdocs/docs_overrides/images/airt_icon_blue.svg rename to docs/docs/assets/img/logo.svg index 721ace8..0147265 100644 --- a/mkdocs/docs_overrides/images/airt_icon_blue.svg +++ b/docs/docs/assets/img/logo.svg @@ -8,4 +8,4 @@ - \ No newline at end of file + diff --git a/docs/docs/en/api/.meta.yml b/docs/docs/en/api/.meta.yml new file mode 100644 index 0000000..15d364b --- /dev/null +++ b/docs/docs/en/api/.meta.yml @@ -0,0 +1,7 @@ +# 0.5 - API +# 2 - Release +# 3 - Contributing +# 5 - Template Page +# 10 - Default +search: + boost: 0.5 \ No newline at end of file diff --git a/docs/docs/en/getting-started/contributing/CONTRIBUTING.md b/docs/docs/en/getting-started/contributing/CONTRIBUTING.md new file mode 100644 index 0000000..e16e203 --- /dev/null +++ b/docs/docs/en/getting-started/contributing/CONTRIBUTING.md @@ -0,0 +1,9 @@ +--- +# 0.5 - API +# 2 - Release +# 3 - Contributing +# 5 - Template Page +# 10 - Default +search: + boost: 3 +--- diff --git a/docs/docs/en/index.md b/docs/docs/en/index.md new file mode 100644 index 0000000..25b14f5 --- /dev/null +++ b/docs/docs/en/index.md @@ -0,0 +1,3 @@ +--- +title: monotonic-nn +--- diff --git a/docs/docs/en/release.md b/docs/docs/en/release.md new file mode 100644 index 0000000..d843fcc --- /dev/null +++ b/docs/docs/en/release.md @@ -0,0 +1,15 @@ +--- +# 0.5 - API +# 2 - Release +# 3 - Contributing +# 5 - Template Page +# 10 - Default +search: + boost: 2 +hide: + - navigation + - footer +--- + +# Release Notes + diff --git a/mkdocs/docs_overrides/js/extra.js b/docs/docs/javascripts/extra.js similarity index 100% rename from mkdocs/docs_overrides/js/extra.js rename to docs/docs/javascripts/extra.js diff --git a/docs/docs/navigation_template.txt b/docs/docs/navigation_template.txt new file mode 100644 index 0000000..c44e5e2 --- /dev/null +++ b/docs/docs/navigation_template.txt @@ -0,0 +1,7 @@ +--- +search: + exclude: true +--- +- Contributing + - [Development](getting-started/contributing/CONTRIBUTING.md) +- [Release Notes](release.md) diff --git a/docs/docs/stylesheets/extra.css b/docs/docs/stylesheets/extra.css new file mode 100644 index 0000000..1628ef7 --- /dev/null +++ b/docs/docs/stylesheets/extra.css @@ -0,0 +1,41 @@ +/* +all variables +https://github.com/squidfunk/mkdocs-material/blob/master/src/assets/stylesheets/main/_colors.scss +*/ + +:root { + --md-primary-fg-color: #003257; + --md-primary-fg-color--light: #48A8D8; + --md-primary-fg-color--dark: #48A8D8; +} + +[data-md-color-accent=indigo] { + --md-accent-fg-color: #48A8D8; + --md-accent-fg-color--transparent: #48A8D81A; +} + +[data-md-color-scheme=slate] { + --md-default-bg-color: hsla(var(--md-hue),7%,18%,1); + --md-footer-bg-color--dark: hsla(var(--md-hue),24%,26%,1); + --md-typeset-a-color: #48A8D8; +} + +a.external-link { + /* For right to left languages */ + direction: ltr; + display: inline-block; +} + +a.external-link::after { + /* \00A0 is a non-breaking space + to make the mark be on the same line as the link + */ + content: "\00A0[β†ͺ]"; +} + +a.internal-link::after { + /* \00A0 is a non-breaking space + to make the mark be on the same line as the link + */ + content: "\00A0β†ͺ"; +} diff --git a/airt/_components/__init__.py b/docs/docs_src/__init__.py similarity index 100% rename from airt/_components/__init__.py rename to docs/docs_src/__init__.py diff --git a/docs/expand_markdown.py b/docs/expand_markdown.py new file mode 100644 index 0000000..c2b640b --- /dev/null +++ b/docs/expand_markdown.py @@ -0,0 +1,119 @@ +"""Expand markdown files with embedded line references.""" + +import logging +import re +from pathlib import Path +from typing import Optional + +import typer + +logging.basicConfig(level=logging.INFO) + + +app = typer.Typer() + + +def _read_lines_from_file(file_path: Path, lines_spec: Optional[str]) -> str: + """Read lines from a file. + + Args: + file_path: The path to the file. + lines_spec: A comma-separated string of line numbers and/or line ranges. + + Returns: + A string containing the lines from the file. + """ + with file_path.open() as file: + all_lines = file.readlines() + + # Check if lines_spec is empty (indicating all lines should be read) + if not lines_spec: + return "".join(all_lines) + + selected_lines = [] + line_specs = lines_spec.split(",") + + for line_spec in line_specs: + if "-" in line_spec: + # Handle line ranges (e.g., "1-10") + start, end = map(int, line_spec.split("-")) + selected_lines.extend(all_lines[start - 1 : end]) + else: + # Handle single line numbers + line_number = int(line_spec) + if 1 <= line_number <= len(all_lines): + selected_lines.append(all_lines[line_number - 1]) + + return "".join(selected_lines) + + +def _extract_lines(embedded_line: str) -> str: + to_expand_path_elements = re.search("{!>(.*)!}", embedded_line).group(1).strip() # type: ignore[union-attr] + lines_spec = "" + if "[ln:" in to_expand_path_elements: + to_expand_path_elements, lines_spec = to_expand_path_elements.split("[ln:") + to_expand_path_elements = to_expand_path_elements.strip() + lines_spec = lines_spec[:-1] + + if Path("./docs/docs_src").exists(): + base_path = Path("./docs") + elif Path("./docs_src").exists(): + base_path = Path("./") + else: + raise ValueError("Couldn't find docs_src directory") + + return _read_lines_from_file(base_path / to_expand_path_elements, lines_spec) + + +@app.command() +def expand_markdown( + input_markdown_path: Path = typer.Argument(...), # noqa: B008 + output_markdown_path: Path = typer.Argument(...), # noqa: B008 +) -> None: + """Expand markdown files with embedded line references. + + Args: + input_markdown_path: The path to the input markdown file. + output_markdown_path: The path to the output markdown file. + + """ + with ( + input_markdown_path.open() as input_file, + output_markdown_path.open("w") as output_file, + ): + for line in input_file: + # Check if the line does not contain the "{!>" pattern + if "{!>" not in line: + # Write the line to the output file + output_file.write(line) + else: + output_file.write(_extract_lines(embedded_line=line)) + + +def _remove_lines_between_dashes(file_path: Path) -> None: + with file_path.open() as file: + lines = file.readlines() + + start_dash_index = None + end_dash_index = None + new_lines: list[str] = [] + + for index, line in enumerate(lines): + if line.strip() == "---": + if start_dash_index is None: + start_dash_index = index + else: + end_dash_index = index + # Remove lines between the two dashes + new_lines = ( + lines[:start_dash_index] + new_lines + lines[end_dash_index + 1 :] + ) + start_dash_index = end_dash_index = None + break # NOTE: Remove this line if you have multiple dash chunks + + with file_path.open("w") as file: + file.writelines(new_lines) + + +if __name__ == "__main__": + app() diff --git a/docs/includes/.keep b/docs/includes/.keep new file mode 100644 index 0000000..e69de29 diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml new file mode 100644 index 0000000..db3c5ec --- /dev/null +++ b/docs/mkdocs.yml @@ -0,0 +1,169 @@ +site_name: Monotonic Neural Networks +# description to improve website indexing +site_description: Monotonic Neural Networks implemented in Keras +site_url: https://monotonic.airt.ai +site_author: AIRT Technologies d.o.o. +copyright: '© 2022 onwards AIRT Technologies d.o.o.' + +docs_dir: docs + +watch: + - docs + - docs_src + - includes + - overrides + +repo_name: monotonic-nn +repo_url: https://github.com/airtai/monotonic-nn +edit_uri: https://github.com/airtai/monotonic-nn/tree/main/docs/docs + +exclude_docs: | + navigation_template.txt + SUMMARY.md + +theme: + name: material + custom_dir: overrides + logo: assets/img/logo.svg + favicon: assets/img/logo.svg + font: + text: Roboto + palette: + - media: "(prefers-color-scheme: light)" + scheme: default + primary: custom + toggle: + icon: material/brightness-7 + name: Switch to dark mode + - media: "(prefers-color-scheme: dark)" + scheme: slate + primary: custom + toggle: + icon: material/brightness-4 + name: Switch to light mode + icon: + repo: fontawesome/brands/github + edit: material/pencil-circle-outline + features: + - search.suggest + - search.highlight + - navigation.tabs # navbar navigation + - navigation.tabs.sticky # navbar always expanded + - navigation.indexes # attach index document direct to section + - navigation.tracking # show current TOC section in the page url + - navigation.prune # reduce render size + - navigation.top # back-to-top btn + - navigation.footer # show footer with next/prev btns + # - navigation.path # (insiders) breadcrumbs + - content.tabs.link # sync total page tabs + # - content.tooltips # (insiders) improved tooltips + - content.code.copy + - content.code.annotate # code annotations with # (1) + # - content.code.select # (insiders) highlight line under cursor + - content.action.edit # add edit btn at every page + +extra_css: + - stylesheets/extra.css + +extra_javascript: + - javascripts/extra.js + +plugins: + - search: + separator: '[\s\-,:!=\[\]()"`/]+|\.(?!\d)|&[lg]t;|(?!\b)(?=[A-Z][a-z])' + # - meta # (insiders) use .meta.yml files + - glightbox # image zoom + - macros: # Jinja templates + include_dir: includes + - mkdocstrings: # Generate References + default_handler: python + handlers: + python: + paths: [..] + import: + - https://docs.python.org/3/objects.inv + options: + filters: + - "!^_" + show_if_no_docstring: true + separate_signature: true + docstring_section_style: spacy + show_docstring_attributes: false + show_root_heading: true + show_signature_annotations: true + inherited_members: true + members_order: alphabetical + unwrap_annotated: true + merge_init_into_class: true + signature_crossrefs: true + show_symbol_type_heading: true + show_symbol_type_toc: true + load_external_modules: true + preload_modules: [httpx, starlette, fastapi] + - i18n: + docs_structure: folder + reconfigure_material: true + reconfigure_search: true + languages: + - locale: en + default: true + name: en - English + build: true + - git-revision-date-localized: # show page edition date + enabled: !ENV [CI, false] + type: timeago + - literate-nav: # .md importable navigation + nav_file: SUMMARY.md + - minify: + minify_html: true + minify_js: true + minify_css: true + htmlmin_opts: + remove_comments: true + cache_safe: true + css_files: + - stylesheets/extra.css + - mike: # versioning + alias_type: copy + redirect_template: templates/redirect.html + canonical_version: latest + +markdown_extensions: + - toc: + permalink: "#" # replace TOC block symbol + toc_depth: 3 + - mdx_include: + base_path: . + line_slice_separator: [] + - extra + - admonition # !!! note blocks support + - pymdownx.details # admonition collapsible + - pymdownx.superfences # highlight code syntax + - pymdownx.highlight: + anchor_linenums: true # allows link to codeline + - pymdownx.inlinehilite # inline code highlighting `#!python ` + - pymdownx.tabbed: + alternate_style: true # create tabs group + - attr_list # specify html attrs in markdown + - md_in_html # render md wrapped to html tags + +extra: + analytics: + provider: google + property: G-HDTMP5FFHP + #social_image: https://opengraph.githubassets.com/1671805243.560327/airtai/ + social: + # Discord link should be first + - icon: fontawesome/brands/discord + link: https://discord.gg/qFm6aSqq59 + - icon: fontawesome/brands/github-alt + link: https://github.com/airtai/airt + - icon: fontawesome/brands/twitter + link: https://twitter.com/airt_AI + - icon: fontawesome/brands/facebook + link: https://www.facebook.com/airt.ai.api/ + - icon: fontawesome/brands/linkedin + link: https://www.linkedin.com/company/airt-ai/ + + version: + provider: mike diff --git a/docs/overrides/.keep b/docs/overrides/.keep new file mode 100644 index 0000000..e69de29 diff --git a/docs/update_releases.py b/docs/update_releases.py new file mode 100644 index 0000000..5bb81ae --- /dev/null +++ b/docs/update_releases.py @@ -0,0 +1,98 @@ +"""Update the release notes with the latest version and changelog from GitHub releases.""" + +import re +from collections.abc import Sequence +from pathlib import Path + +import requests + + +def _find_metablock(lines: list[str]) -> tuple[list[str], list[str]]: + if lines[0] != "---": + return [], lines + + index: int = 0 + for i in range(1, len(lines)): + if lines[i] == "---": + index = i + 1 + + return lines[:index], lines[index:] + + +def _find_header(lines: list[str]) -> tuple[str, list[str]]: + for i in range(len(lines)): + if (line := lines[i]).startswith("#"): + return line, lines[i + 1 :] + + return "", lines + + +def _get_github_releases() -> Sequence[tuple[str, str]]: + # Get the latest version from GitHub releases + response = requests.get("https://api.github.com/repos/airtai/airt/releases") + return ( + ((x["tag_name"], x["body"]) for x in reversed(response.json())) # type: ignore[return-value] + if response.ok + else [] + ) + + +def _convert_links_and_usernames(text: str) -> str: + if "](" not in text: + # Convert HTTP/HTTPS links + text = re.sub( + r"(https?://.*\/(.*))", r'[#\2](\1){.external-link target="_blank"}', text + ) + + # Convert GitHub usernames to links + text = re.sub( + r"@(\w+) ", + r'[@\1](https://github.com/\1){.external-link target="_blank"} ', + text, + ) + + return text + + +def _collect_already_published_versions(text: str) -> list[str]: + data: list[str] = re.findall(r"## (\d.\d.\d.*)", text) + return data + + +def _update_release_notes(realease_notes_path: Path) -> None: + # Get the changelog from the RELEASE.md file + changelog = realease_notes_path.read_text() + + metablockx, lines = _find_metablock(changelog.splitlines()) + metablock = "\n".join(metablockx) + + header, changelogx = _find_header(lines) + changelog = "\n".join(changelogx) + + old_versions = _collect_already_published_versions(changelog) + + for version, body in filter( + lambda v: v[0] not in old_versions, + _get_github_releases(), + ): + body = body.replace("##", "###") + body = _convert_links_and_usernames(body) + version_changelog = f"## {version}\n\n{body}\n\n" + changelog = version_changelog + changelog + + # Update the RELEASE.md file with the latest version and changelog + realease_notes_path.write_text( + ( + metablock + + "\n\n" + + header + + "\n" # adding an addition newline after the header results in one empty file being added every time we run the script + + changelog + + "\n" + ).replace("\r", "") + ) + + +if __name__ == "__main__": + base_dir = Path(__file__).resolve().parent + _update_release_notes(base_dir / "docs" / "en" / "release.md") diff --git a/examples/__init__.py b/examples/__init__.py new file mode 100644 index 0000000..ce566ba --- /dev/null +++ b/examples/__init__.py @@ -0,0 +1 @@ +"""Examples.""" diff --git a/mkdocs/docs_overrides/css/extra.css b/mkdocs/docs_overrides/css/extra.css deleted file mode 100644 index 18b1e19..0000000 --- a/mkdocs/docs_overrides/css/extra.css +++ /dev/null @@ -1,65 +0,0 @@ -.md-typeset .admonition.caution, -.md-typeset details.caution { - border-color: #ff9100; -} -.md-typeset .caution > .admonition-title, -.md-typeset .caution > summary { - background-color: #ff91001a; -} -.md-typeset .caution > .admonition-title::before, -.md-typeset .caution > summary::before { - background-color: #ff9100; - -webkit-mask-image: var(--md-admonition-icon--warning); - mask-image: var(--md-admonition-icon--warning); -} - -.md-typeset .admonition.important, -.md-typeset details.important { - border-color: #ff1744; -} -.md-typeset .important > .admonition-title, -.md-typeset .important > summary { - background-color: #ff17441a; -} -.md-typeset .important > .admonition-title::before, -.md-typeset .important > summary::before { - background-color: #ff1744; - -webkit-mask-image: var(--md-admonition-icon--danger); - mask-image: var(--md-admonition-icon--danger); -} - -[data-md-color-scheme="default"] { - --md-primary-fg-color: #003257; - --md-primary-fg-color--light: #004171; - --md-primary-fg-color--dark: #00233d; -} -.md-header nav .md-header__title { - margin-left:0; -} -.md-typeset a, .md-nav__item .md-nav__link--active, .md-typeset a:hover, .md-nav__link:focus, .md-nav__link:hover, html .md-footer-meta.md-typeset a, html .md-footer-meta.md-typeset a:hover { - color: #56b7e1; -} -.md-typeset a:hover, html .md-footer-meta.md-typeset a:hover { - text-decoration: underline; -} - -.md-footer-meta { - background-color: #003257; -} - -.md-header__button.md-logo img, .md-header__button.md-logo svg { - height: 1rem; -} - -@media screen and (max-width: 76.1875em) { - .md-nav--primary .md-nav__item--active>.md-nav__link { - color: #56b7e1; - } -} - -[data-md-color-scheme="slate"] { - --md-hue: 210; - --md-primary-fg-color: #003257; - --md-primary-fg-color--light: #004171; - --md-primary-fg-color--dark: #00233d; -} diff --git a/mkdocs/docs_overrides/images/compass-outline.png b/mkdocs/docs_overrides/images/compass-outline.png deleted file mode 100644 index 17125bc..0000000 Binary files a/mkdocs/docs_overrides/images/compass-outline.png and /dev/null differ diff --git a/mkdocs/docs_overrides/images/default_social_logo.png b/mkdocs/docs_overrides/images/default_social_logo.png deleted file mode 100644 index d53cbad..0000000 Binary files a/mkdocs/docs_overrides/images/default_social_logo.png and /dev/null differ diff --git a/mkdocs/docs_overrides/js/math.js b/mkdocs/docs_overrides/js/math.js deleted file mode 100644 index 1d586b3..0000000 --- a/mkdocs/docs_overrides/js/math.js +++ /dev/null @@ -1,18 +0,0 @@ -window.MathJax = { - tex: { - inlineMath: [["\\(", "\\)"]], - displayMath: [["\\[", "\\]"]], - processEscapes: true, - processEnvironments: true - }, - options: { - ignoreHtmlClass: ".*|", - processHtmlClass: "arithmatex" - } -}; - -document$.subscribe(() => { - MathJax.typesetPromise() -}) - - diff --git a/mkdocs/docs_overrides/js/mathjax.js b/mkdocs/docs_overrides/js/mathjax.js deleted file mode 100644 index 1d586b3..0000000 --- a/mkdocs/docs_overrides/js/mathjax.js +++ /dev/null @@ -1,18 +0,0 @@ -window.MathJax = { - tex: { - inlineMath: [["\\(", "\\)"]], - displayMath: [["\\[", "\\]"]], - processEscapes: true, - processEnvironments: true - }, - options: { - ignoreHtmlClass: ".*|", - processHtmlClass: "arithmatex" - } -}; - -document$.subscribe(() => { - MathJax.typesetPromise() -}) - - diff --git a/mkdocs/mkdocs.yml b/mkdocs/mkdocs.yml deleted file mode 100644 index 74e3df5..0000000 --- a/mkdocs/mkdocs.yml +++ /dev/null @@ -1,109 +0,0 @@ -# Site -site_name: Monotonic Neural Networks -site_url: https://monotonic.airt.ai -site_author: AIRT Technologies d.o.o. -site_description: Monotonic Neural Networks implemented in Keras - -# Repository -repo_name: monotonic-nn -repo_url: https://github.com/airtai/monotonic-nn -edit_uri: "" - -copyright: 2022 onwards, AIRT Technologies d.o.o. - -docs_dir: docs -site_dir: site - -plugins: -- literate-nav: - nav_file: SUMMARY.md -- search -- mkdocstrings: - handlers: - python: - import: - - https://docs.python.org/3/objects.inv - options: - heading_level: 2 - show_category_heading: true - show_root_heading: true - show_root_toc_entry: true - show_signature_annotations: true - show_if_no_docstring: true - -markdown_extensions: -- md_in_html -- pymdownx.arithmatex: - generic: true -- pymdownx.inlinehilite -- pymdownx.details -- pymdownx.emoji -- pymdownx.magiclink -- pymdownx.superfences: - custom_fences: - - name: mermaid - class: mermaid - format: !!python/name:pymdownx.superfences.fence_code_format -- pymdownx.tasklist -- pymdownx.highlight: - linenums: false -- pymdownx.snippets: - check_paths: true -- pymdownx.tabbed: - alternate_style: true -- admonition -- toc: - permalink: "Β€" -# - callouts -theme: - name: material - custom_dir: site_overrides - features: - - navigation.instant -# - navigation.tabs -# - navigation.tabs.sticky -# - navigation.sections -# - navigation.expand - - navigation.indexes - - navigation.top -# - toc.integrates - - search.suggest - - search.highlight - - search.share - - content.code.copy - palette: - - scheme: slate - primary: custom - accent: light blue - toggle: - icon: material/toggle-switch - name: Switch to light mode - - scheme: default - primary: custom # deep orange - accent: light blue - toggle: - icon: material/toggle-switch-off-outline - name: Switch to dark mode - icon: - repo: fontawesome/brands/github -# repo: fontawesome/brands/gitlab - logo: overrides/images/airt_icon_blue.svg -# admonition: -# : - favicon: overrides/images/airt_icon_blue.svg - -extra_css: -- overrides/css/extra.css - -extra_javascript: -- overrides/js/extra.js -- overrides/js/mathjax.js -- https://polyfill.io/v3/polyfill.min.js?features=es6 -- https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js -extra: - version: - provider: mike - analytics: - provider: google - property: G-F7V44YPJHR - social_image: "https://opengraph.githubassets.com/1686060464.736638/airtai/monotonic-nn" diff --git a/mkdocs/site_overrides/main.html b/mkdocs/site_overrides/main.html deleted file mode 100644 index e9aefc8..0000000 --- a/mkdocs/site_overrides/main.html +++ /dev/null @@ -1,34 +0,0 @@ -{% extends "base.html" %} - -{% block extrahead %} - {% set title = config.site_name %} - {% if page and page.meta and page.meta.title %} - {% set title = title ~ " - " ~ page.meta.title %} - {% elif page and page.title and not page.is_homepage %} - {% set title = title ~ " - " ~ page.title | striptags %} - {% endif %} - {% set image_url = config.extra.social_image %} - - - - - - - - - - - - - -{% endblock %} - -{% block outdated %} - You're not viewing the latest version. - - - Click here to go to latest. - -{% endblock %} - - diff --git a/mkdocs/site_overrides/partials/copyright.html b/mkdocs/site_overrides/partials/copyright.html deleted file mode 100644 index c06bae1..0000000 --- a/mkdocs/site_overrides/partials/copyright.html +++ /dev/null @@ -1,17 +0,0 @@ - diff --git a/mkdocs/summary_template.txt b/mkdocs/summary_template.txt deleted file mode 100644 index 3d313c0..0000000 --- a/mkdocs/summary_template.txt +++ /dev/null @@ -1,4 +0,0 @@ -{sidebar} -- API -{api} -- [Releases]{changelog} diff --git a/mypy.ini b/mypy.ini deleted file mode 100644 index dc8a0fa..0000000 --- a/mypy.ini +++ /dev/null @@ -1,19 +0,0 @@ -# Global options: - -[mypy] -ignore_missing_imports = True -install_types = True -non_interactive = True - -# from https://blog.wolt.com/engineering/2021/09/30/professional-grade-mypy-configuration/ -disallow_untyped_defs = True -no_implicit_optional = True -check_untyped_defs = True -warn_return_any = True -show_error_codes = True -warn_unused_ignores = True - -disallow_incomplete_defs = True -disallow_untyped_decorators = False -disallow_any_unimported = False - diff --git a/nbs/.gitignore b/nbs/.gitignore index e34d916..7208faa 100644 --- a/nbs/.gitignore +++ b/nbs/.gitignore @@ -2,4 +2,3 @@ /data /tuner /plots - diff --git a/nbs/InDepth.ipynb b/nbs/InDepth.ipynb index c030c63..17562d6 100644 --- a/nbs/InDepth.ipynb +++ b/nbs/InDepth.ipynb @@ -1,1325 +1,1303 @@ { - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# In-depth explanation\n", - "\n", - "> In-depth explanation of MonoDense layer" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | hide\n", - "from os import environ\n", - "from pathlib import Path\n", - "from typing import *\n", - "\n", - "import matplotlib\n", - "import matplotlib.pyplot as plt\n", - "import numpy as np\n", - "import pandas as pd\n", - "import seaborn as sns\n", - "import tensorflow as tf\n", - "from tensorflow.keras import Model\n", - "from tensorflow.keras.layers import Concatenate, Dense, Dropout, Input\n", - "from tensorflow.types.experimental import TensorLike\n", - "\n", - "from airt._components.mono_dense_layer import (\n", - " apply_monotonicity_indicator_to_kernel,\n", - " get_activation_functions,\n", - " get_monotonicity_indicator,\n", - " replace_kernel_using_monotonicity_indicator,\n", - ")\n", - "from airt.keras.layers import MonoDense" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | hide\n", - "\n", - "environ[\"TF_FORCE_GPU_ALLOW_GROWTH\"] = \"true\"" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Introduction" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The simplest method to achieve monotonicity by construction\n", - "is to constrain the weights of the fully connected neural\n", - "network to have only non-negative (for non-decreasing variables)\n", - "or only non-positive values (for non-ascending) variables\n", - "when used in conjunction with a monotonic activation\n", - "function, a technique known for 30 years (Archer & Wang,\n", - "1993). When used in conjunction with saturated (bounded)\n", - "activation functions such as the sigmoid and hyperbolic tangent,\n", - "these models are difficult to train, i.e. they do not\n", - "converge to a good solution. On the other hand, when used\n", - "with non-saturated (unbounded) convex activation functions\n", - "such as ReLU (Nair & Hinton, 2010), the resulting models\n", - "are always convex (Liu et al., 2020), severely limiting the\n", - "applicability of the method in practice.\n", - "\n", - "\n", - "Our main contribution is a modification of the method above\n", - "which, in conjunction with non-saturated activation functions,\n", - "is capable of approximating non-convex functions\n", - "as well: when the original activation function is used with\n", - "additional two monotonic activation functions constructed\n", - "from it in a neural network with constrained weights, it can\n", - "approximate any monotone continuous functions.\n", - "The resulting model is guaranteed to be monotonic, can be\n", - "used in conjunction with popular convex monotonic nonsaturated\n", - "activation function, doesn’t have any additional\n", - "parameters compared to a non-monotonic fully-connected\n", - "network for the same task, and can be trained without any\n", - "additional requirements on the learning procedure. Experimental\n", - "results show it is exceeding the performance of all\n", - "other state-of-the-art methods, all while being both simpler\n", - "(in the number of parameters) and easier to train.\n", - "Our contributions can be summarized as follows:\n", - "\n", - "1. A modification to an existing constrained neural network\n", - "layer enabling it to model arbitrary monotonic\n", - "function when used with non-saturated monotone convex\n", - "activation functions such as ReLU, ELU, SELU,\n", - "and alike.\n", - "\n", - "2. Experimental comparisons with other recent works\n", - "showing that the proposed architecture can yield equal\n", - "or better results than the previous state-of-the-art and\n", - "with significantly fewer parameters.\n", - "\n", - "3. A proof showing that the proposed architecture can\n", - "approximate any monotone continuous function on a\n", - "compact subset of $\\mathbb{R}^n$ for a large class of non-saturated\n", - "activation functions." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## The problem\n", - "\n", - "Most of the commonly used activation functions such as ReLU, ELU, SELU, etc. are monotonically increasing zero-centred, convex, lower-bounded non-polynomial functions. When used in a fully-connected, feed-forward neural network with at least one hidden layer and with unconstrained weights, they can approximate any continuous function on a compact subset. The simplest way to construct a monotonic neural network is to constrain its weights when used in conjunction with a monotone activation function. However, when the activation function is convex as well, the constrained neural network is not able to approximate non-convex functions. \n", - "\n", - "\n", - "To better illustrate this, and to propose a simple solution in this particular example, we refer the readers to plots below where the goal is to approximate the simple cubic function $x^3$ using a neural network with a single hidden layer with either $2$ or $32$ neurons and with ReLU activation. A cubic function is apt for our illustration since it is concave in the considered interval $[-1, 0]$ and convex in the interval $[0, 1]$." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | hide\n", - "\n", - "\n", - "rng = np.random.default_rng(42)\n", - "\n", - "\n", - "def f(x):\n", - " return x**3\n", - "\n", - "\n", - "def create_model(kind: str, units: int):\n", - " x = Input(shape=(1,))\n", - " y = x\n", - "\n", - " def get_layer(units, activation):\n", - " if kind == \"Constrained with ReLU-based activations\":\n", - " layer = MonoDense(units=units, activation=activation)\n", - " elif kind == \"Constrained ReLU\":\n", - " layer = MonoDense(units=units, is_convex=True, activation=activation)\n", - " elif kind == \"Unconstrained ReLU\":\n", - " layer = Dense(units, activation=activation)\n", - " else:\n", - " raise ValueError(kind)\n", - " return layer\n", - "\n", - " y = get_layer(units=units, activation=\"relu\")(y)\n", - " y = get_layer(units=1, activation=None)(y)\n", - "\n", - " model = Model(inputs=x, outputs=y)\n", - " return model\n", - "\n", - "\n", - "def train_model(model, *, batch_size=128, lr=0.003, epochs=10):\n", - " x = np.arange(-1.1, 1.1, 0.0001)\n", - " y = f(x)\n", - "\n", - " learning_rate = tf.keras.optimizers.schedules.ExponentialDecay(\n", - " lr, decay_steps=len(x) // batch_size, decay_rate=0.9, staircase=True\n", - " )\n", - " optimizer = tf.keras.optimizers.Adam(learning_rate=learning_rate)\n", - " model.compile(loss=\"mse\", optimizer=optimizer)\n", - " model.fit(x, y, batch_size=batch_size, epochs=epochs, verbose=0)\n", - " return model.evaluate(x, y, batch_size=256)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "************************************************************************************************************************\n", - "\n", - "seed=47\n", - "\n", - "Model: \"model\"\n", - "_________________________________________________________________\n", - " Layer (type) Output Shape Param # \n", - "=================================================================\n", - " input_1 (InputLayer) [(None, 1)] 0 \n", - " \n", - " dense (Dense) (None, 2) 4 \n", - " \n", - " dense_1 (Dense) (None, 1) 3 \n", - " \n", - "=================================================================\n", - "Total params: 7\n", - "Trainable params: 7\n", - "Non-trainable params: 0\n", - "_________________________________________________________________\n", - "86/86 [==============================] - 0s 1ms/step - loss: 0.0035\n", - "kind='Unconstrained ReLU', units=2, seed=47, loss=0.00354481372050941\n", - "************************************************************************************************************************\n", - "\n", - "seed=47\n", - "\n", - "Model: \"model_1\"\n", - "_________________________________________________________________\n", - " Layer (type) Output Shape Param # \n", - "=================================================================\n", - " input_2 (InputLayer) [(None, 1)] 0 \n", - " \n", - " dense_2 (Dense) (None, 32) 64 \n", - " \n", - " dense_3 (Dense) (None, 1) 33 \n", - " \n", - "=================================================================\n", - "Total params: 97\n", - "Trainable params: 97\n", - "Non-trainable params: 0\n", - "_________________________________________________________________\n", - "86/86 [==============================] - 0s 1ms/step - loss: 4.2062e-05\n", - "kind='Unconstrained ReLU', units=32, seed=47, loss=4.2062136344611645e-05\n", - "************************************************************************************************************************\n", - "\n", - "seed=47\n", - "\n", - "Model: \"model_2\"\n", - "_________________________________________________________________\n", - " Layer (type) Output Shape Param # \n", - "=================================================================\n", - " input_3 (InputLayer) [(None, 1)] 0 \n", - " \n", - " mono_dense (MonoDense) (None, 2) 4 \n", - " \n", - " mono_dense_1 (MonoDense) (None, 1) 3 \n", - " \n", - "=================================================================\n", - "Total params: 7\n", - "Trainable params: 7\n", - "Non-trainable params: 0\n", - "_________________________________________________________________\n", - "86/86 [==============================] - 0s 1ms/step - loss: 0.0750\n", - "************************************************************************************************************************\n", - "\n", - "seed=48\n", - "\n", - "Model: \"model_3\"\n", - "_________________________________________________________________\n", - " Layer (type) Output Shape Param # \n", - "=================================================================\n", - " input_4 (InputLayer) [(None, 1)] 0 \n", - " \n", - " mono_dense_2 (MonoDense) (None, 2) 4 \n", - " \n", - " mono_dense_3 (MonoDense) (None, 1) 3 \n", - " \n", - "=================================================================\n", - "Total params: 7\n", - "Trainable params: 7\n", - "Non-trainable params: 0\n", - "_________________________________________________________________\n", - "86/86 [==============================] - 0s 1ms/step - loss: 0.0277\n", - "kind='Constrained ReLU', units=2, seed=48, loss=0.02771771512925625\n", - "************************************************************************************************************************\n", - "\n", - "seed=47\n", - "\n", - "Model: \"model_4\"\n", - "_________________________________________________________________\n", - " Layer (type) Output Shape Param # \n", - "=================================================================\n", - " input_5 (InputLayer) [(None, 1)] 0 \n", - " \n", - " mono_dense_4 (MonoDense) (None, 32) 64 \n", - " \n", - " mono_dense_5 (MonoDense) (None, 1) 33 \n", - " \n", - "=================================================================\n", - "Total params: 97\n", - "Trainable params: 97\n", - "Non-trainable params: 0\n", - "_________________________________________________________________\n", - "86/86 [==============================] - 0s 1ms/step - loss: 0.0272\n", - "kind='Constrained ReLU', units=32, seed=47, loss=0.027184106409549713\n", - "************************************************************************************************************************\n", - "\n", - "seed=47\n", - "\n", - "Model: \"model_5\"\n", - "_________________________________________________________________\n", - " Layer (type) Output Shape Param # \n", - "=================================================================\n", - " input_6 (InputLayer) [(None, 1)] 0 \n", - " \n", - " mono_dense_6 (MonoDense) (None, 2) 4 \n", - " \n", - " mono_dense_7 (MonoDense) (None, 1) 3 \n", - " \n", - "=================================================================\n", - "Total params: 7\n", - "Trainable params: 7\n", - "Non-trainable params: 0\n", - "_________________________________________________________________\n", - "86/86 [==============================] - 0s 1ms/step - loss: 0.0036\n", - "kind='Constrained with ReLU-based activations', units=2, seed=47, loss=0.0035652760416269302\n", - "************************************************************************************************************************\n", - "\n", - "seed=47\n", - "\n", - "Model: \"model_6\"\n", - "_________________________________________________________________\n", - " Layer (type) Output Shape Param # \n", - "=================================================================\n", - " input_7 (InputLayer) [(None, 1)] 0 \n", - " \n", - " mono_dense_8 (MonoDense) (None, 32) 64 \n", - " \n", - " mono_dense_9 (MonoDense) (None, 1) 33 \n", - " \n", - "=================================================================\n", - "Total params: 97\n", - "Trainable params: 97\n", - "Non-trainable params: 0\n", - "_________________________________________________________________\n", - "86/86 [==============================] - 0s 1ms/step - loss: 1.1078e-05\n", - "kind='Constrained with ReLU-based activations', units=32, seed=47, loss=1.107779098674655e-05\n" - ] - } - ], - "source": [ - "# | hide\n", - "\n", - "\n", - "kinds = [\n", - " \"Unconstrained ReLU\",\n", - " \"Constrained ReLU\",\n", - " \"Constrained with ReLU-based activations\",\n", - "]\n", - "models = {}\n", - "for kind in kinds:\n", - " for units in [2, 32]:\n", - " for seed in range(47, 100):\n", - " print(\"*\" * 120)\n", - " print()\n", - " print(f\"{seed=}\")\n", - " print()\n", - " tf.keras.utils.set_random_seed(seed)\n", - "\n", - " model = create_model(kind, units=units)\n", - " model.summary()\n", - " loss = train_model(model)\n", - " if loss < 0.03:\n", - " print(f\"{kind=}, {units=}, {seed=}, {loss=}\")\n", - " models[(kind, units)] = model\n", - " break" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "three_color_palette.as_hex()=['#e7338a', '#48a8d8', '#032545']\n" - ] - } - ], - "source": [ - "# | hide\n", - "\n", - "# Set your custom color palette\n", - "colors = [\"#E7338A\", \"#48A8D8\", \"#032545\"]\n", - "\n", - "three_color_palette = sns.color_palette(colors, 3)\n", - "print(f\"{three_color_palette.as_hex()=}\")\n", - "# sns.set_palette(three_color_palette, 3)\n", - "# sns.set_palette(\"colorblind\", 3)\n", - "\n", - "\n", - "def plot_model(\n", - " kind: str,\n", - " linestyle=\"--\",\n", - " alpha=0.7,\n", - " linewidth=5.0,\n", - " save_image: bool = False,\n", - " save_path: Union[Path, str] = \"images\",\n", - " font_size: int = 11,\n", - "):\n", - " plt.rcParams[\"figure.figsize\"] = (5, 5)\n", - " font = {\"size\": font_size}\n", - " matplotlib.rc(\"font\", **font)\n", - " sns.set(font_scale=1.0)\n", - "\n", - " sns.set_palette(three_color_palette, 3)\n", - " # sns.set_palette(\"hls\", 3)\n", - "\n", - " x = np.arange(-1.1, 1.1, 0.01)\n", - " y = f(x)\n", - "\n", - " title = kind\n", - " plt.title(title)\n", - "\n", - " plt.plot(\n", - " x, y, label=\"ground truth\", alpha=1.0, linewidth=linewidth * 0.5, linestyle=\"-\"\n", - " )\n", - "\n", - " for units, linestyle in zip([2, 32], [\"--\", \":\"]):\n", - " y = models[(kind, units)].predict(x)\n", - " plt.plot(\n", - " x,\n", - " y,\n", - " label=f\"{units} neurons\",\n", - " alpha=alpha,\n", - " linewidth=linewidth,\n", - " linestyle=linestyle,\n", - " )\n", - "\n", - " plt.axis(\"equal\")\n", - " plt.xlim(-1.1, 1.1)\n", - " plt.ylim(-1.1, 1.1)\n", - "\n", - " plt.legend()\n", - "\n", - " if save_image:\n", - " for file_format in [\"pdf\", \"png\"]:\n", - " path = Path(save_path) / (title.replace(\" \", \"_\") + f\".{file_format}\")\n", - " path.parent.mkdir(exist_ok=True, parents=True)\n", - " plt.savefig(path, format=file_format)\n", - " print(f\"Saved figure to: {path}\")\n", - "\n", - " plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "7/7 [==============================] - 0s 967us/step\n", - "7/7 [==============================] - 0s 839us/step\n", - "Saved figure to: images/Unconstrained_ReLU.pdf\n", - "Saved figure to: images/Unconstrained_ReLU.png\n" - ] + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# In-depth explanation\n", + "\n", + "> In-depth explanation of MonoDense layer" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "# | hide\n", + "from os import environ\n", + "from pathlib import Path\n", + "from typing import *\n", + "\n", + "import matplotlib\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import pandas as pd\n", + "import seaborn as sns\n", + "import tensorflow as tf\n", + "from tensorflow.keras import Model\n", + "from tensorflow.keras.layers import Concatenate, Dense, Dropout, Input\n", + "from tensorflow.types.experimental import TensorLike\n", + "\n", + "from airt.keras.layers._mono_dense_layer import (\n", + " # apply_monotonicity_indicator_to_kernel,\n", + " get_activation_functions,\n", + " # get_monotonicity_indicator,\n", + " # replace_kernel_using_monotonicity_indicator,\n", + ")\n", + "# from airt.keras.layers import MonoDense" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# | hide\n", + "\n", + "environ[\"TF_FORCE_GPU_ALLOW_GROWTH\"] = \"true\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Introduction" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The simplest method to achieve monotonicity by construction\n", + "is to constrain the weights of the fully connected neural\n", + "network to have only non-negative (for non-decreasing variables)\n", + "or only non-positive values (for non-ascending) variables\n", + "when used in conjunction with a monotonic activation\n", + "function, a technique known for 30 years (Archer & Wang,\n", + "1993). When used in conjunction with saturated (bounded)\n", + "activation functions such as the sigmoid and hyperbolic tangent,\n", + "these models are difficult to train, i.e. they do not\n", + "converge to a good solution. On the other hand, when used\n", + "with non-saturated (unbounded) convex activation functions\n", + "such as ReLU (Nair & Hinton, 2010), the resulting models\n", + "are always convex (Liu et al., 2020), severely limiting the\n", + "applicability of the method in practice.\n", + "\n", + "\n", + "Our main contribution is a modification of the method above\n", + "which, in conjunction with non-saturated activation functions,\n", + "is capable of approximating non-convex functions\n", + "as well: when the original activation function is used with\n", + "additional two monotonic activation functions constructed\n", + "from it in a neural network with constrained weights, it can\n", + "approximate any monotone continuous functions.\n", + "The resulting model is guaranteed to be monotonic, can be\n", + "used in conjunction with popular convex monotonic nonsaturated\n", + "activation function, doesn’t have any additional\n", + "parameters compared to a non-monotonic fully-connected\n", + "network for the same task, and can be trained without any\n", + "additional requirements on the learning procedure. Experimental\n", + "results show it is exceeding the performance of all\n", + "other state-of-the-art methods, all while being both simpler\n", + "(in the number of parameters) and easier to train.\n", + "Our contributions can be summarized as follows:\n", + "\n", + "1. A modification to an existing constrained neural network\n", + "layer enabling it to model arbitrary monotonic\n", + "function when used with non-saturated monotone convex\n", + "activation functions such as ReLU, ELU, SELU,\n", + "and alike.\n", + "\n", + "2. Experimental comparisons with other recent works\n", + "showing that the proposed architecture can yield equal\n", + "or better results than the previous state-of-the-art and\n", + "with significantly fewer parameters.\n", + "\n", + "3. A proof showing that the proposed architecture can\n", + "approximate any monotone continuous function on a\n", + "compact subset of $\\mathbb{R}^n$ for a large class of non-saturated\n", + "activation functions." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The problem\n", + "\n", + "Most of the commonly used activation functions such as ReLU, ELU, SELU, etc. are monotonically increasing zero-centred, convex, lower-bounded non-polynomial functions. When used in a fully-connected, feed-forward neural network with at least one hidden layer and with unconstrained weights, they can approximate any continuous function on a compact subset. The simplest way to construct a monotonic neural network is to constrain its weights when used in conjunction with a monotone activation function. However, when the activation function is convex as well, the constrained neural network is not able to approximate non-convex functions. \n", + "\n", + "\n", + "To better illustrate this, and to propose a simple solution in this particular example, we refer the readers to plots below where the goal is to approximate the simple cubic function $x^3$ using a neural network with a single hidden layer with either $2$ or $32$ neurons and with ReLU activation. A cubic function is apt for our illustration since it is concave in the considered interval $[-1, 0]$ and convex in the interval $[0, 1]$." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "# | hide\n", + "\n", + "\n", + "rng = np.random.default_rng(42)\n", + "\n", + "\n", + "def f(x):\n", + " return x**3\n", + "\n", + "\n", + "def create_model(kind: str, units: int):\n", + " x = Input(shape=(1,))\n", + " y = x\n", + "\n", + " def get_layer(units, activation):\n", + " if kind == \"Constrained with ReLU-based activations\":\n", + " layer = MonoDense(units=units, activation=activation)\n", + " elif kind == \"Constrained ReLU\":\n", + " layer = MonoDense(units=units, is_convex=True, activation=activation)\n", + " elif kind == \"Unconstrained ReLU\":\n", + " layer = Dense(units, activation=activation)\n", + " else:\n", + " raise ValueError(kind)\n", + " return layer\n", + "\n", + " y = get_layer(units=units, activation=\"relu\")(y)\n", + " y = get_layer(units=1, activation=None)(y)\n", + "\n", + " model = Model(inputs=x, outputs=y)\n", + " return model\n", + "\n", + "\n", + "def train_model(model, *, batch_size=128, lr=0.003, epochs=10):\n", + " x = np.arange(-1.1, 1.1, 0.0001)\n", + " y = f(x)\n", + "\n", + " learning_rate = tf.keras.optimizers.schedules.ExponentialDecay(\n", + " lr, decay_steps=len(x) // batch_size, decay_rate=0.9, staircase=True\n", + " )\n", + " optimizer = tf.keras.optimizers.Adam(learning_rate=learning_rate)\n", + " model.compile(loss=\"mse\", optimizer=optimizer)\n", + " model.fit(x, y, batch_size=batch_size, epochs=epochs, verbose=0)\n", + " return model.evaluate(x, y, batch_size=256)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "************************************************************************************************************************\n", + "\n", + "seed=47\n", + "\n", + "Model: \"model\"\n", + "_________________________________________________________________\n", + " Layer (type) Output Shape Param # \n", + "=================================================================\n", + " input_1 (InputLayer) [(None, 1)] 0 \n", + " \n", + " dense (Dense) (None, 2) 4 \n", + " \n", + " dense_1 (Dense) (None, 1) 3 \n", + " \n", + "=================================================================\n", + "Total params: 7 (28.00 Byte)\n", + "Trainable params: 7 (28.00 Byte)\n", + "Non-trainable params: 0 (0.00 Byte)\n", + "_________________________________________________________________\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2024-03-02 23:47:24.421114: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:995] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n", + "2024-03-02 23:47:24.421718: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:995] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n", + "2024-03-02 23:47:24.422254: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:995] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n", + "2024-03-02 23:47:24.483345: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:995] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n", + "2024-03-02 23:47:24.483785: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:995] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n", + "2024-03-02 23:47:24.484134: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:995] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n", + "2024-03-02 23:47:24.484475: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:995] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n", + "2024-03-02 23:47:24.484812: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:995] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n", + "2024-03-02 23:47:24.485155: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:995] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n", + "2024-03-02 23:47:25.198069: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:995] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n", + "2024-03-02 23:47:25.198457: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:995] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n", + "2024-03-02 23:47:25.198793: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:995] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n", + "2024-03-02 23:47:25.199130: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:995] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n", + "2024-03-02 23:47:25.199450: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:995] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n", + "2024-03-02 23:47:25.199772: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:995] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n", + "2024-03-02 23:47:25.200088: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:995] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n", + "2024-03-02 23:47:25.200405: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:995] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n", + "2024-03-02 23:47:25.200722: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:995] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n", + "2024-03-02 23:47:25.225731: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:995] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n", + "2024-03-02 23:47:25.226205: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:995] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n", + "2024-03-02 23:47:25.226598: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:995] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n", + "2024-03-02 23:47:25.226987: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:995] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n", + "2024-03-02 23:47:25.227356: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:995] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n", + "2024-03-02 23:47:25.227714: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:995] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n", + "2024-03-02 23:47:25.228071: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:995] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n", + "2024-03-02 23:47:25.228390: W tensorflow/core/common_runtime/gpu/gpu_bfc_allocator.cc:47] Overriding orig_value setting because the TF_FORCE_GPU_ALLOW_GROWTH environment variable is set. Original config value was 0.\n", + "2024-03-02 23:47:25.228435: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1639] Created device /job:localhost/replica:0/task:0/device:GPU:0 with 22451 MB memory: -> device: 0, name: NVIDIA GeForce RTX 3090, pci bus id: 0000:4b:00.0, compute capability: 8.6\n", + "2024-03-02 23:47:25.229139: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:995] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n", + "2024-03-02 23:47:25.229459: W tensorflow/core/common_runtime/gpu/gpu_bfc_allocator.cc:47] Overriding orig_value setting because the TF_FORCE_GPU_ALLOW_GROWTH environment variable is set. Original config value was 0.\n", + "2024-03-02 23:47:25.229475: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1639] Created device /job:localhost/replica:0/task:0/device:GPU:1 with 9520 MB memory: -> device: 1, name: NVIDIA GeForce RTX 2080 Ti, pci bus id: 0000:03:00.0, compute capability: 7.5\n", + "2024-03-02 23:47:25.230001: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:995] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n", + "2024-03-02 23:47:25.230326: W tensorflow/core/common_runtime/gpu/gpu_bfc_allocator.cc:47] Overriding orig_value setting because the TF_FORCE_GPU_ALLOW_GROWTH environment variable is set. Original config value was 0.\n", + "2024-03-02 23:47:25.230345: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1639] Created device /job:localhost/replica:0/task:0/device:GPU:2 with 9503 MB memory: -> device: 2, name: NVIDIA GeForce RTX 2080 Ti, pci bus id: 0000:21:00.0, compute capability: 7.5\n", + "2024-03-02 23:47:25.860015: I tensorflow/compiler/xla/stream_executor/cuda/cuda_blas.cc:606] TensorFloat-32 will be used for the matrix multiplication. This will only be logged once.\n", + "2024-03-02 23:47:26.070218: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x7f5a5110de60 initialized for platform CUDA (this does not guarantee that XLA will be used). Devices:\n", + "2024-03-02 23:47:26.070402: I tensorflow/compiler/xla/service/service.cc:176] StreamExecutor device (0): NVIDIA GeForce RTX 3090, Compute Capability 8.6\n", + "2024-03-02 23:47:26.070409: I tensorflow/compiler/xla/service/service.cc:176] StreamExecutor device (1): NVIDIA GeForce RTX 2080 Ti, Compute Capability 7.5\n", + "2024-03-02 23:47:26.070415: I tensorflow/compiler/xla/service/service.cc:176] StreamExecutor device (2): NVIDIA GeForce RTX 2080 Ti, Compute Capability 7.5\n", + "2024-03-02 23:47:26.081219: I tensorflow/compiler/mlir/tensorflow/utils/dump_mlir_util.cc:255] disabling MLIR crash reproducer, set env var `MLIR_CRASH_REPRODUCER_DIRECTORY` to enable.\n", + "2024-03-02 23:47:26.124111: I tensorflow/compiler/xla/stream_executor/cuda/cuda_dnn.cc:432] Loaded cuDNN version 8700\n", + "2024-03-02 23:47:26.343008: I ./tensorflow/compiler/jit/device_compiler.h:186] Compiled cluster using XLA! This line is logged at most once for the lifetime of the process.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "86/86 [==============================] - 0s 1ms/step - loss: 0.0035\n", + "kind='Unconstrained ReLU', units=2, seed=47, loss=0.003544812323525548\n", + "************************************************************************************************************************\n", + "\n", + "seed=47\n", + "\n", + "Model: \"model_1\"\n", + "_________________________________________________________________\n", + " Layer (type) Output Shape Param # \n", + "=================================================================\n", + " input_2 (InputLayer) [(None, 1)] 0 \n", + " \n", + " dense_2 (Dense) (None, 32) 64 \n", + " \n", + " dense_3 (Dense) (None, 1) 33 \n", + " \n", + "=================================================================\n", + "Total params: 97 (388.00 Byte)\n", + "Trainable params: 97 (388.00 Byte)\n", + "Non-trainable params: 0 (0.00 Byte)\n", + "_________________________________________________________________\n", + "86/86 [==============================] - 0s 753us/step - loss: 4.2096e-05\n", + "kind='Unconstrained ReLU', units=32, seed=47, loss=4.2095911339856684e-05\n", + "************************************************************************************************************************\n", + "\n", + "seed=47\n", + "\n" + ] + }, + { + "ename": "NameError", + "evalue": "name 'MonoDense' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[5], line 19\u001b[0m\n\u001b[1;32m 16\u001b[0m \u001b[38;5;28mprint\u001b[39m()\n\u001b[1;32m 17\u001b[0m tf\u001b[38;5;241m.\u001b[39mkeras\u001b[38;5;241m.\u001b[39mutils\u001b[38;5;241m.\u001b[39mset_random_seed(seed)\n\u001b[0;32m---> 19\u001b[0m model \u001b[38;5;241m=\u001b[39m \u001b[43mcreate_model\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkind\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43munits\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43munits\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 20\u001b[0m model\u001b[38;5;241m.\u001b[39msummary()\n\u001b[1;32m 21\u001b[0m loss \u001b[38;5;241m=\u001b[39m train_model(model)\n", + "Cell \u001b[0;32mIn[4], line 26\u001b[0m, in \u001b[0;36mcreate_model\u001b[0;34m(kind, units)\u001b[0m\n\u001b[1;32m 23\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(kind)\n\u001b[1;32m 24\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m layer\n\u001b[0;32m---> 26\u001b[0m y \u001b[38;5;241m=\u001b[39m \u001b[43mget_layer\u001b[49m\u001b[43m(\u001b[49m\u001b[43munits\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43munits\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mactivation\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mrelu\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m(y)\n\u001b[1;32m 27\u001b[0m y \u001b[38;5;241m=\u001b[39m get_layer(units\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m1\u001b[39m, activation\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m)(y)\n\u001b[1;32m 29\u001b[0m model \u001b[38;5;241m=\u001b[39m Model(inputs\u001b[38;5;241m=\u001b[39mx, outputs\u001b[38;5;241m=\u001b[39my)\n", + "Cell \u001b[0;32mIn[4], line 19\u001b[0m, in \u001b[0;36mcreate_model..get_layer\u001b[0;34m(units, activation)\u001b[0m\n\u001b[1;32m 17\u001b[0m layer \u001b[38;5;241m=\u001b[39m MonoDense(units\u001b[38;5;241m=\u001b[39munits, activation\u001b[38;5;241m=\u001b[39mactivation)\n\u001b[1;32m 18\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m kind \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mConstrained ReLU\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[0;32m---> 19\u001b[0m layer \u001b[38;5;241m=\u001b[39m \u001b[43mMonoDense\u001b[49m(units\u001b[38;5;241m=\u001b[39munits, is_convex\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m, activation\u001b[38;5;241m=\u001b[39mactivation)\n\u001b[1;32m 20\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m kind \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mUnconstrained ReLU\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[1;32m 21\u001b[0m layer \u001b[38;5;241m=\u001b[39m Dense(units, activation\u001b[38;5;241m=\u001b[39mactivation)\n", + "\u001b[0;31mNameError\u001b[0m: name 'MonoDense' is not defined" + ] + } + ], + "source": [ + "# | hide\n", + "\n", + "\n", + "kinds = [\n", + " \"Unconstrained ReLU\",\n", + " \"Constrained ReLU\",\n", + " \"Constrained with ReLU-based activations\",\n", + "]\n", + "models = {}\n", + "for kind in kinds:\n", + " for units in [2, 32]:\n", + " for seed in range(47, 100):\n", + " print(\"*\" * 120)\n", + " print()\n", + " print(f\"{seed=}\")\n", + " print()\n", + " tf.keras.utils.set_random_seed(seed)\n", + "\n", + " model = create_model(kind, units=units)\n", + " model.summary()\n", + " loss = train_model(model)\n", + " if loss < 0.03:\n", + " print(f\"{kind=}, {units=}, {seed=}, {loss=}\")\n", + " models[(kind, units)] = model\n", + " break" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "three_color_palette.as_hex()=['#e7338a', '#48a8d8', '#032545']\n" + ] + } + ], + "source": [ + "# | hide\n", + "\n", + "# Set your custom color palette\n", + "colors = [\"#E7338A\", \"#48A8D8\", \"#032545\"]\n", + "\n", + "three_color_palette = sns.color_palette(colors, 3)\n", + "print(f\"{three_color_palette.as_hex()=}\")\n", + "# sns.set_palette(three_color_palette, 3)\n", + "# sns.set_palette(\"colorblind\", 3)\n", + "\n", + "\n", + "def plot_model(\n", + " kind: str,\n", + " linestyle=\"--\",\n", + " alpha=0.7,\n", + " linewidth=5.0,\n", + " save_image: bool = False,\n", + " save_path: Union[Path, str] = \"images\",\n", + " font_size: int = 11,\n", + "):\n", + " plt.rcParams[\"figure.figsize\"] = (5, 5)\n", + " font = {\"size\": font_size}\n", + " matplotlib.rc(\"font\", **font)\n", + " sns.set(font_scale=1.0)\n", + "\n", + " sns.set_palette(three_color_palette, 3)\n", + " # sns.set_palette(\"hls\", 3)\n", + "\n", + " x = np.arange(-1.1, 1.1, 0.01)\n", + " y = f(x)\n", + "\n", + " title = kind\n", + " plt.title(title)\n", + "\n", + " plt.plot(\n", + " x, y, label=\"ground truth\", alpha=1.0, linewidth=linewidth * 0.5, linestyle=\"-\"\n", + " )\n", + "\n", + " for units, linestyle in zip([2, 32], [\"--\", \":\"]):\n", + " y = models[(kind, units)].predict(x)\n", + " plt.plot(\n", + " x,\n", + " y,\n", + " label=f\"{units} neurons\",\n", + " alpha=alpha,\n", + " linewidth=linewidth,\n", + " linestyle=linestyle,\n", + " )\n", + "\n", + " plt.axis(\"equal\")\n", + " plt.xlim(-1.1, 1.1)\n", + " plt.ylim(-1.1, 1.1)\n", + "\n", + " plt.legend()\n", + "\n", + " if save_image:\n", + " for file_format in [\"pdf\", \"png\"]:\n", + " path = Path(save_path) / (title.replace(\" \", \"_\") + f\".{file_format}\")\n", + " path.parent.mkdir(exist_ok=True, parents=True)\n", + " plt.savefig(path, format=file_format)\n", + " print(f\"Saved figure to: {path}\")\n", + "\n", + " plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "7/7 [==============================] - 0s 967us/step\n", + "7/7 [==============================] - 0s 839us/step\n", + "Saved figure to: images/Unconstrained_ReLU.pdf\n", + "Saved figure to: images/Unconstrained_ReLU.png\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdMAAAHHCAYAAADkubIgAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAACMS0lEQVR4nOzdd3yTVdvA8d+d1aYj3YNVoGWWvUGgIIIIDhRRcIGKir4gKvqo4ELlcT1OcKGC4t4LZLjZ4ABE9mihzNLSkbRNmnW/fxTShg5a2nRe388H5T73yMlpyZWzFVVVVYQQQghxzjS1nQEhhBCivpNgKoQQQlSRBFMhhBCiiiSYCiGEEFUkwVQIIYSoIgmmQgghRBVJMBVCCCGqSIKpEEIIUUUSTIUQQogqkmAqhDirBx98kGHDhtXKa3/99de0b9+ew4cP18rrC1EREkxFgzNv3jzat29PZmZmqecvueQSbrjhhhrOlW+lpaUxb948du7cWdtZqTWnf+6n/3Tq1Ilhw4YxZ84czGbzOT3zdCD/999/Sz1/+PBh2rdvz4IFC0o9v2DBAvki0EjoajsDQoiqO3HiBK+++irNmjWjY8eO1f78J598kvqyjPfs2bMJCAjAarWyfv16PvjgA7Zv384nn3xS21kTDZgEUyEaIavVitForPD1er3eh7mpXiNHjiQ8PByACRMmcM8997B06VK2bt1K165dazl3oqGSZl7R6G3cuJH27duzdOlS3njjDZKSkujSpQuTJk3i4MGDJa7/559/uPXWW+nTpw/du3fn0ksvZdGiRV7XrF+/nmuvvZbu3bvTu3dv7rjjDvbv3+91zelmyYMHD/Lggw/Su3dvevXqxcyZM7FarV7Xrl27lmuuuYbevXvTo0cPRo4cyYsvvujJ/7hx4wCYOXOmp5nz66+/BuCGG27gkksuYdu2bVx33XV069bNc+/PP//MbbfdxqBBg+jcuTPDhw/ntddew+Vyeb3+mX2mxZs3P/vsM4YPH07nzp258sor2bp1a4ky279/P9OnT6dv37506dKFsWPH8ssvv5S4bu/evUycOJGuXbuSlJTE66+/jtvtLv0HV0G9e/cGIDU11Sv9n3/+YfLkyfTq1Ytu3bpx/fXX8/fff1fptUTjJTVTIU55++23URSFm2++mdzcXN555x3uu+8+vvjiC881a9euZcqUKURHRzNx4kQiIyPZv38/v//+O5MmTQJg3bp13HrrrTRv3pxp06Zhs9n48MMPueaaa/j6669p3ry51+vefffdNG/enBkzZrBjxw6++OILwsPD+c9//gMUBpgpU6bQvn17pk+fjsFg4ODBg2zatAmAhIQEpk+fzty5cxk/fjy9evUCoGfPnp7XyM7O5tZbb+Xiiy/msssuIyIiAoBvvvmGgIAAbrrpJgICAtiwYQNz584lNzeXBx544KxltmTJEvLy8hg/fjyKovDOO+9w55138vPPP3tqs3v37uWaa64hJiaGW2+9lYCAAJYtW8bUqVOZN28eI0aMACA9PZ2JEyficrm47bbbMBqNfP755/j5+Z3Tz/O00/2VJpPJk7Z+/XpuvfVWOnfuzLRp01AUha+//ppJkybx8ccfSw1WVJoEUyFOKSgo4Ntvv8VgMACFH77//e9/2bNnD+3atcPlcvHoo48SHR3Nt99+6/XhXLw/8bnnniMkJITPPvuM0NBQAIYPH84VV1zBvHnzePbZZ71et2PHjjz11FOe4+zsbL788ktPMF27di0Oh4O3337b03xZXGRkJElJScydO5fu3bszZsyYEtekp6fz+OOPM2HCBK/0F154AX9/f8/xNddcw6OPPsonn3zCPffc4ymLshw9epQff/yRkJAQAFq3bs3//d//sWbNGs4//3wA/vvf/9KkSRO++uorz/OuvfZarrnmGp5//nlPMH377bfJzMzkiy++8ASzK664ggsvvLDcPJwpJycHKGzK3rBhAx9//DHh4eH06dMHKPxZzZ49m379+vHOO++gKApQ2CR88cUX8/LLL7Nw4cJKvaYQ0swrxCljx471Ch6nmwcPHToEwI4dOzh8+DATJ070CqSA5wP5xIkT7Ny5kyuuuMITSAE6dOjAeeedx8qVK0u87pkBrnfv3mRnZ5ObmwsU1ah++eWXc27yNBgMjB07tkR68UCam5tLZmYmvXv3xmq1kpycfNbnjh492hNIT+cdisosOzubDRs2MGrUKM/zMzMzycrKYtCgQRw4cIC0tDQAVq5cSffu3b1qheHh4Vx66aWVeq8XXXQRAwYMYNiwYcyaNYu4uDjefvttTx/xzp07OXDgAJdeeilZWVmePOXn5zNgwAD+/PPPKjcti8ZHaqZCnNK0aVOv49NB7PS0itMBol27dmU+4+jRo0BhDe1M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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "7/7 [==============================] - 0s 992us/step\n", + "7/7 [==============================] - 0s 1ms/step\n", + "Saved figure to: images/Constrained_ReLU.pdf\n", + "Saved figure to: images/Constrained_ReLU.png\n" + ] + }, + { + "data": { + "image/png": "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zZrFgQMHiImJQa/Xc/z4cZYsWcKzzz7LddddZ78+KSmpyMAbGhrK8OHDmTRpEu+99x533HEH/fv3x8PDgx07drBw4UJ69uxJ//79y1V+UbNIMBW12oABA5g/fz6zZ89mxYoVfP/99xgMBqKionj66acdVteZMWMGoaGh/P777/z9998EBgYyceJEHnrooTK99p133snKlSvZsGEDZrOZ+vXrM2XKFMaPH2/PM3jwYO68807++usv5s+fj6qq1wymI0eOJDExkR9//JH169fTtGlT3nzzTZYsWcLWrVvLVNai3H///TRu3Ji5c+fa59nWrVuXmJgYh0Bz6623YrVamT17Nm+88QaRkZH2Oarlde+99/L000+zYMECRo4cyfTp02ndujU//PAD7777LlqtlgYNGjB8+PBC84kvXrxYZBm6d+/O8OHDefDBB2nQoAHffvstH3/8MRaLhdDQUB5++GHuv//+Yp8ri9pJUa/soxFCCCFEqchHKyGEEKKcJJgKIYQQ5STBVAghhCgnCaZCCCFEOUkwFUIIIcpJgqkQQghRThJMhRBCiHKSRRuKoaoqNlv5p+BqNEqF3EcUTerXeaRunUvq13kc6lZVURPS4fKxhx7Fz6PE9ynp+tgSTIths6kkJZVse67i6HQa/P29MJkysVhs175AlIrUr/NI3TqX1K/zXFm36tYT2F5cbD+vPDUQTd+mJbpXQIAXWm3Jgql08wohhKix1E3H8w90GpTO5VsTujgSTIUQQtQ4GVnZ2Kw21C3HAVABouujeLk55fWkm1cIIUSN8+38v9m1eR894tPooQvgXFRj4ns1p3uWhUCPig99EkyFEELUKDlmM1t2HSDz1AUWWlKZb00gMz2b+ud92LfHg9YhRroFe1RoUJVgWg42mxWr1XqV8wrZ2VrM5hysVhm1V9FqWv1qtVo0Gq2riyFEtbd550Gys81waRCpydONpJxULmxaz95tm9HcPZ4jqWaa+RoqLKhKMC0DVVUxmZLIysrgUk98sRITNdhsMlrPWWpW/Sp4eHhhNAaUeDi+EKKwVZt2omaaIceCTVFI9XIDfd4H1eDQhuj0elQVDqeYSTXbuL2psdy/cxJMyyArK4OsrHS8vf1wc3MHiv8maLVKjWg1VVU1p35VcnKySU9PQa93w9PT29UFEqJaSk5NY+eBow6tUqtGQbkUTMOi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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "7/7 [==============================] - 0s 1ms/step\n", + "7/7 [==============================] - 0s 1ms/step\n", + "Saved figure to: images/Constrained_with_ReLU-based_activations.pdf\n", + "Saved figure to: images/Constrained_with_ReLU-based_activations.png\n" + ] + }, + { + "data": { + "image/png": "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9CjTpk1j/Pjx7vfrAw88wMcff0yfPn2AvC8Fv//+O1dddRWRkZEkJSUxf/58brnlFn777TciIiIA+O6775g5cyZDhw7ltttuIzc3l/3797N9+3auvfZaAJKSkhg3bhyKonDzzTcTEhLCmjVrePLJJ8nMzHTfirdarUyYMIHTp09z6623Eh4ezq+//lrkF8Oi7Ny5k61bt3L11VdTv359Tp48yTfffMNtt93Gb7/9ho+PDwBZWVncfPPNHD58mNGjR9OmTRtSU1NZuXIlCQkJxMTEMHXqVN59911uuOEG9/usqM8OvV7P4MGDWbFiBc8995zHnaLff/8dm83mvlNRmr/VkJAQZsyYwYwZMxgyZIj7PVLSoKOq/qyqEVRRLTIyMtTY2Fj1vvvuK1X+vXv3qrGxseqTTz7pkf7yyy+rsbGx6oYNG9xpV1xxhRobG6tu3rzZnZacnKy2a9dOffnll91p1113nXrPPfeU+LzPPfecGhsbWyj9xIkTamxsrNqlSxc1OTnZ45jD4VBzc3M90tLT09XLLrtMnT59ukd6bGys+u6777ofv/vuu2psbGyhfJMnT1Z79OjhfhwfH6+2bt1aff/99z3y7d+/X23Tpo073Wazqb1791ZHjBjhUab58+ersbGx6i233FLi69+xY4caGxurrlq1SlVVVd23b58aGxurTp06VR07dqw737333quOHDnS/Xjjxo1qbGysunHjRnfaPffco15xxRWFniM/77BhwzzKOG/ePDU2Nlbdv39/iWX88ccf1djYWHX9+vVqcnKyevr0aXXp0qVqr1691Hbt2qmnT592550wYYJ6zTXXeDyPy+VSb7jhBvXKK68sVKYlS5YU+7yxsbHqc889V+SxJUuWFHr9xcl/vy5btsydlpGRofbp08ejTnNzc1Wn0+lx7okTJ9R27dqps2fPdqfdd9996tVXX13icz7xxBNqnz591JSUFI/0adOmqV27dlVzcnJUVVXVuXPnqrGxserixYvdebKzs9UhQ4aU6vXlX+d8W7duVWNjY9Wff/7ZnfbOO++osbGx6vLlywvld7lcqqoWvBd//PHHQnkee+wxj/fWX3/9pcbGxqorV670yHf33XergwYNcj8u7d9qcnJyob/VfPl/s/mq67Oquslt3mqSmZkJFG6dFCf/9uEdd9zhkX7nnXd6HM/XvHlz920+gJCQEJo1a+Zxy89sNnPw4EGOHj1a5vLnu/LKKwkJCfFI02q17m/DLpeLtLQ0HA4H7dq1Y8+ePaW67vjx4z0ed+vWjbS0NHe9rVixApfLxbBhw0hJSXH/q1evHk2bNnXfXt21axfJycmMHz/e4xv69ddfT0BAwEXL0aZNG3x9fd23hbds2UL9+vUZOXIke/bsIScnx91aLa5VWlqjRo3yKGNxt2mLc/vtt9O7d2/69+/P1KlT8fHx4f3336d+/fpA3m3SjRs3MmzYMDIzM911lpqaSt++fTl69Gi5R/9WVHh4uEer2N/f313HZ8+eBcBgMKDR5H1kOZ1OUlNT8fX1pVmzZh7vK7PZzJkzZ9ixY0eRz6WqKsuXL2fgwIGoqurx/unbty8ZGRns3r0bgDVr1hAWFsZVV13lPt/Hx4dx48aV6nWZTCb3z3a7ndTUVJo0aYLZbPYo8/Lly2nVqlWRdwYURSnVc52vV69eBAcHs3jxYndaeno669ev9+g/r4y/1QvV1M8qb5PbvNXE398fyLu9UxonT55Eo9HQpEkTj/SwsDDMZrP7ll6+om5fBgYGkp6e7n48depU/vOf/zB06FBiY2Pp27cvI0aMoFWrVqV+HZGRkUWm//zzz3z66accOXIEu91+0fwXatiwocfj/FuV6enp+Pv7c/ToUVRV5corryzy/PwBEadOnQLy+p/Pp9frady48UXLodVq6dy5szuY/vPPP+5+XKfTybZt26hXrx5paWkeHwjlUdxrtlgspTr/mWeeoVmzZmRkZPDjjz+yefNmj+B8/PhxVFXlnXfe4Z133inyGsnJye7bpZUhPxBkZWWRnZ3tTtdqtR5fwpo2bVooaERFRQF57/2wsDBcLheff/45X3/9NfHx8TidTnfeoKAg9893330369evZ+zYsTRt2pQ+ffpwzTXXuL/spKSkYLFYmD9/PvPnzy+y3CkpKe7nLqpszZo1K9Xrt1qtzJkzh59++omEhASPEbcZGRnun48fP17se7k8dDodV155JYsWLcJms2EwGFi+fDl2u73QYLSK/q1eqKZ+VnmbBNNq4u/vT3h4OAcPHizTeaX9llqa6Sbdu3dnxYoV/PHHH6xbt44ffviBefPm8dxzzzF27NhSPc/537zz/frrrzz++OMMHjyYiRMnEhoailarZc6cOaVuZeW3QC6U/2HkcrlQFIWPPvqoyNfq6+tbqucpjS5duvDBBx+Qm5vLli1buPfeezGbzbRo0YJ//vmH0NBQgAoH04u95ovp0KGDezTv4MGDuemmm3j44YdZunQpfn5+uFwuIK+FcPnllxd5jQs/AEtiMBiKnQedn54/ovnTTz9l9uzZ7uONGjVi5cqVpX4ugA8++IB33nmH0aNH88ADDxAYGIhGo+HFF1/0qKOYmBiWLl3KqlWr+Ouvv1i+fDlff/01kydPZurUqe56uO666woNLstXWYsQvPDCC/z0009MmDCBTp06ERAQgKIoTJs2zatTWQCuvvpq5s+fz5o1axg8eDBLly4lOjraIwBVxt9qcWraZ5W3STCtRldccQXz589n69atdO7cucS8jRo1wuVycezYMWJiYtzpSUlJWCwWGjVqVK4yBAUFMXr0aEaPHk1WVha33HILs2bNcr9By3OLadmyZTRu3JjZs2d7nP/uu++Wq4xFadKkCaqqEhkZWWIrIb+1d+zYMfeIRMi75RYfH1+qb7bdunXDbrezaNEiEhIS3EGze/fubNmyhdDQUKKioqhXr16J1ylPXZaXVqvloYce4rbbbuOrr77innvucbfE9Xo9l112WYWfo2HDhhw5cqTIY/np+fU/cuRIj9vgF04bOnbsGKqqetRR/i29/Pf2smXL6NmzJy+++KLHuRaLheDgYI80X19fhg8fzvDhw7HZbNx///188MEHTJo0iZCQEPeXi4vVQ6NGjThw4EChshX3ui+0bNkyRo4cyeOPP+5Oy83N9WiVQt77+WJfrMv6/unevTthYWEsXryYLl26sHHjRu69995C5SvN32pZnru6Pquqm/SZVqO77roLX19fnnrqKZKSkgodP378OPPmzQOgf//+AO7H+T777DOP42WRmprq8djPz48mTZp4DF/PH21Y2luNUPBN8/xv3tu3b2fbtm1lLmNxrrzySrRaLbNnzy70DV9VVfdra9euHSEhIXz77bcer+vnn38u9Wvq2LEjer2ejz76iKCgIPcIw65du7J9+3Y2b95cqlapj49PoQ9Rb+rZsycdOnRg3rx55ObmEhoaSo8ePZg/fz6JiYmF8uff2iyt/v37s337dnbt2uWRbrFYWLhwIa1btyYsLAyAxo0bc9lll7n/Xdi/nJiYyIoVK9yPMzMz+eWXXzyuodVqC/2ulyxZUqif98L3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4u8nulwqTqfnB2B+MHWpZfulXnidgvTK/8NzOp04HA6OHj3CZ599TN++/Urcfs3hcLB7985S95k+//zTXHvtSMaPv4kFC37hxRefo3Xrtu6tzf7883eeffYJhg+/lokTJ5GcnMQHH8wmI8PCc8+9VOx1i7u1m5SUxNtvv86ECROJiKhPRER91q5dzVNPPcagQVdy771TOH78KHPmvEdCwhlmznzV4/zXXnuJoUOH8+KLr/HXX6t4//1ZxMS0oFevywB47LGHCAkJ4fHHn8bf35/4+BOcPZtYqrooraK+rFUHp9NVI8pxqZL6LeBavs89iheAoa0JDQwkNDCwXHVU1XXr9WAaHR1dqG80IyODs2fPekxlKcnChQvRaDQMHz7cG0Ws88aMudYdDHr2vIxnn/1vifm//vpzkpLOMm7cTaW6/qhR4xg1aiwA7dp1ZMOGtaxa9Qe3334Xqqry3nvvMHDgEB5//Gn3OaGh9fi//3uACRPuIjo6pkyvJyPDwuuvv0vbtu3cac888zht27Znxoy819ar12UYjSZee+1FDh8+RExMc3feAQMGMnHiJAC6devBhg3rWLXqD3r1uoy0tDROnz7JAw88TN++eVO0unTpVqbyCSE8qS4V9bc9BQmhftC9SfUVqBy83pnXr18/1q9fj8VicactXboUjUZDnz59SnWN3377jR49ehAeHl7q/IBMlSml1157hw8++JTHHnuKY8eO8Nhj04ptGW/evJFPPpnD7bffRatWrUt1/R49erl/9vHxoX79Bu7gfeLEMc6cOc3AgUNwOBzuf507d0Gj0bB//94yv57AwECPQJqdnc3BgwcYMGCgR75Bg64EYMeObR7p3bsXlFdRFJo2jSIxMdF97fr1GzBnzmyWLFlEYmJCmcsnhLjA1niIT3M/VIa2QqmhY02K4/WW6fjx4/niiy+YPHkykyZNIiEhgVdffZXx48d7zDGdMGECp06dYsWKFR7n79mzx72CUlEeeeQRmjZtSps2bdwDkObOncvgwYMlmJZS8+YtAGjXrgOtWrXhjjtuYs2aP7niisEe+fbv38eTTz7GkCFXcccdpe+39fcP8His0+ndK2ClpaUB8MQTjxR5bkLCmVI/T77g4FCPx5mZGaiqSkiIZ7q/vz8GgwGLxXMgXECAZ3n1er27q0JRFN58czYffvg/3nzzFXJycmjZ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O+aw77WGhgY88MADzna9Xo+EhARe4r3G3fySfHw1drkAKUDk5OTAYDCgtrbW2dbQ0ICTJ08iJyfHj5EFBrVajczMTPzwww8u7X1XBMaPHz+k9ztw4AC6urowefJkb4YZ8HJycvDzzz87z+iB3isESqXSZSX5zaZOnYpRo0Zhz549zrbu7m7s3buX4/MG7ub3VlpaWnDo0KG7box6m6/GLs9MvaypqQm///47AMBsNuP8+fOoqqoCAJevdUycOBHPPvss1q5dCwBIT09HdnY2iouLsWrVKoSEhGDjxo3QarWYO3eu7z9IAHr11Vfx0ksvoaysDLm5uairq8OuXbuwceNGl/1uzu369euhUCiQlpYGSZJw7NgxbNmyBZMmTcKcOXP88VH8ZuHChfjss8+wbNkyLF26FC0tLdiwYQMWLlyI+Ph4536LFi3CxYsXsW/fPgBASEgIli5dis2bNyMmJgbJycnYsWMHOjo6sGTJEn99nIDjbn537dqFAwcOYNasWYiLi0NjYyO2bt0KlUqFxYsX++vjBByz2YyDBw8C6D3WXr161Xl8zcjIQExMjN/GLoupl9XV1WH16tXObZ1OB51OBwAuy9ztdjscDodL3/Lycqxbtw6lpaXo6elBdnY2SkpKePeja6ZPn47NmzejvLwcX3/9NRISEvDBBx+4fH8M6J/bpKQk7NixA19++SUsFgvi4+Mxf/58FBUV3XW5jYqKwvbt2/H+++9j2bJliIiIwPz58/HGG2+47OdwOGC3213aCgsLIYTAtm3b0NbWhpSUFFRWVnKl6Q3cze/48ePR2tqKtWvXwmQyITIyEg8++CCKioqY3xtcuXIFr7/+uktb3/ann36KzMxMv41dhRCDvB8TERER3RLnTImIiDzEYkpEROQhFlMiIiIPsZgSERF5iMWUiIjIQyymREREHmIxJSIi8hCLKRERkYdYTImIiDzEYkpEROQhFlMiIiIP/T96KBJuclFwogAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# | hide\n", + "\n", + "\n", + "for kind in kinds:\n", + " plot_model(kind, save_image=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + "\n", + "\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + "
\n", + "\n", + "\"Unconstrained\n", + "\n", + "\n", + "The plot to the left shows two fully-connected neural networks with one hidden layer with 2 and 32 neurons and ReLU activations approximating the qubic function on the interval $[-1, 1]$.\n", + " \n", + "An unconstrained ReLU network with n neurons can approximate both concave and convex segments of the cubic function using at most $n + 1$ piecewise linear segments. Increasing the number of neurons will provide a better fit with the function being approximated. Notice that even though the cubic function is monotonic, there is no guarantee that the trained model will be monotonic as well.\n", + " \n", + "
\n", + "\n", + "\"Constrained\n", + "\n", + " \n", + "\n", + "\n", + "If we constrain the weights of the network to be non-negative while still employing ReLU activation, the resulting model is monotone and convex. We can no longer approximate non-convex segments such as the cubic function on $[βˆ’1, 0]$ in the figure, and increasing the number of neurons from 2 to 32 does not yield any\n", + "significant improvement in the approximation.\n", + "\n", + "
\n", + "\n", + "\"Constrained\n", + " \n", + "\n", + "\n", + "Our proposed solution uses a combination of three activation functions in the hidden layer in order to gain the ability to model non-convex, monotone continuous functions. Notice that increasing the number of neurons increases the number of piecewise linear segments to approximate the cubic function. The resulting net-\n", + "work is monotone by construction even when trained on noisy data.\n", + "\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Activation Functions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Our construction is based on generating two additional activation functions from a typical non-saturated activation function such as ReLU, ELU and SELU.\n", + "\n", + "We use $\\breve{\\mathcal{A}}$ to denote the set of all zero-centred, monotonically increasing, convex, lower-bounded functions. Let $\\breve{\\rho} \\in \\breve{\\mathcal{A}}$. Then\n", + "\n", + "$$\n", + "\\hat{\\rho}(x) = -\\breve{\\rho}(-x)\n", + "$$\n", + "\n", + "$$\n", + "\\tilde{\\rho}(x) = \\begin{cases}\n", + " \\breve{\\rho}(x+1)-\\breve{\\rho}(1) & \\text{if }x < 0\\\\\n", + " \\hat{\\rho}(x-1)+\\breve{\\rho}(1) & \\text{otherwise}\n", + " \\end{cases} \n", + "$$" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | hide\n", + "\n", + "\n", + "def plot_activation_functions(\n", + " activation: Optional[Union[str, Callable[[TensorLike], TensorLike]]] = None,\n", + " *,\n", + " font_size: int = 16,\n", + " save_image: bool = False,\n", + " save_path: Union[Path, str] = \"images\",\n", + " alpha=0.7,\n", + ") -> None:\n", + " font = {\"size\": font_size}\n", + " # sns.set_palette(\"hls\", 3)\n", + " sns.set_palette(three_color_palette, 3)\n", + " matplotlib.rc(\"font\", **font)\n", + " (\n", + " convex_activation,\n", + " concave_activation,\n", + " saturated_activation,\n", + " ) = get_activation_functions(activation)\n", + " plt.rcParams[\"figure.figsize\"] = (10, 5)\n", + "\n", + " x = np.arange(-6.6, 6.6, 0.1)\n", + " plt.plot(\n", + " x,\n", + " convex_activation(x),\n", + " label=r\"$\\breve{\\rho}(x)$\",\n", + " linestyle=\"-\",\n", + " linewidth=2.0,\n", + " alpha=1.0,\n", + " )\n", + " plt.plot(\n", + " x,\n", + " concave_activation(x),\n", + " label=r\"$\\hat{\\rho}(x)$\",\n", + " linestyle=\"--\",\n", + " linewidth=4.0,\n", + " alpha=0.7,\n", + " )\n", + " plt.plot(\n", + " x,\n", + " saturated_activation(x),\n", + " label=r\"$\\tilde{\\rho}(x)$\",\n", + " linestyle=\":\",\n", + " linewidth=4.0,\n", + " alpha=0.7,\n", + " )\n", + " plt.legend()\n", + "\n", + " title = f\"{activation.__name__ if hasattr(activation, '__name__') else activation}-based activations\"\n", + " plt.title(title)\n", + " plt.axis(\"equal\")\n", + " plt.xlim(-5.6, 5.6)\n", + " plt.ylim(-3.2, 3.2)\n", + "\n", + " if save_image:\n", + " for file_format in [\"pdf\", \"png\"]:\n", + " path = Path(save_path) / (title.replace(\" \", \"_\") + f\".{file_format}\")\n", + " path.parent.mkdir(exist_ok=True, parents=True)\n", + " plt.savefig(path, format=file_format)\n", + " print(f\"Saved figure to: {path}\")\n", + "\n", + " plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saved figure to: images/linear-based_activations.pdf\n", + "Saved figure to: images/linear-based_activations.png\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAz4AAAHHCAYAAAB+yY0gAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABfaklEQVR4nO3dd3hUZf738c/MpJdJp4MSkBB6UaqIRFhFERUXxVWKBUXEjgKujdWfiqu7qyAWsOCuZUWxbuRZK6ICCigq0qO0UELapCczc54/wmQzhJKQTCZz8n5dlxfmzDlzfyd3pnzmlK/FMAxDAAAAAGBiVn8XAAAAAAC+RvABAAAAYHoEHwAAAACmR/ABAAAAYHoEHwAAAACmR/ABAAAAYHoEHwAAAACmR/ABAAAAYHoEHwAAAACmR/ABgJOwbNkypaSkaM+ePVXLJk6cqIkTJ/qxqpM3e/Zs9e3b199l1FlKSormz5/v7zIkHf1vorGsWbNGKSkpWrNmTaOPDQCBguADAEAdPPfcc/r000/9MvZrr72mZcuW+WVsAAh0Qf4uAADM4sUXX/R3CWgEzz//vM4991yNHDnSa/lFF12kCy64QCEhIT4b+4033lBcXJzGjRvntfyMM87QTz/9pODgYJ+NDQCBjuADAA3Elx94G0JxcbEiIiL8XYZp2Ww22Ww2v4xttVoVGhrql7EBIFBwqBsANJAjz/HxnHeRnp6uZ599VmeddZZ69uypyZMna+fOnTW237Bhg6699lr1799fvXv31lVXXaV169Z5rbN37149+OCDOvfcc9WrVy8NHDhQt9xyS43zSjznm3z33Xd68MEHNXjwYA0fPvyEj2H37t269tpr1adPH5155plasGCBDMPwWufFF1/UhAkTNHDgQPXq1Uvjxo3T8uXLa9zXN998oyuuuEKnn366+vbtq3PPPVd/+9vfvNYpLy/X008/rVGjRqlHjx4aPny4Hn/8cZWXl9dY75FHHtGgQYPUt29fTZs2Tfv37z/h4/Fs+9RTT2ncuHHq37+/+vTpoz/96U9avXp1jXXdbreWLFmiCy+8UD179tSgQYN07bXX6ueff5ZUeU5RcXGx3n33XaWkpCglJUWzZ8+WVPMcnxtuuEHnnHPOUWu6/PLLvfbavPPOO5o0aZIGDx6sHj166Pzzz9frr7/utU1aWpq2bdum7777rmpsz9/bsc7x+fjjjzVu3Liqv5WZM2fqwIEDXut4zu86cOCApk+frr59+2rQoEGaN2+eXC6X17r/+c9/NG7cOPXt21f9+vXThRdeqCVLlpxwDgCgKWCPDwD42KJFi2SxWHTNNdeosLBQixcv1syZM7V06dKqdVatWqWpU6eqR48emjFjhiwWi5YtW6bJkyfr9ddfV69evSRJP//8s3744QddcMEFatWqlfbu3as33nhDkyZN0n/+8x+Fh4d7jT137lzFx8frpptuUnFx8XHrdLlcuu6669S7d2/dddddWrlypebPny+Xy6Vbb721ar1XX31VaWlpuvDCC1VRUaH//Oc/uvXWW/X888/r7LPPliRt27ZNN9xwg1JSUnTLLbcoJCREO3fu1Pr166vux+1268Ybb9S6det02WWXqVOnTtq6dauWLFmi33//XQsXLqxa989//rM++OADjRkzRv369dPq1at1/fXX1+r3X1hYqKVLl2rMmDEaP368ioqK9Pbbb+u6667T0qVLlZqa6jXOsmXLdNZZZ+mPf/yjXC6X1q5dqw0bNqhnz556/PHHde+996pXr1667LLLJEkdOnQ46rijR4/WrFmz9NNPP1XNn1QZXn/88UfdfffdVcveeOMNnXbaaUpLS1NQUJC++OILzZ07V4Zh6Morr5Qk3XPPPXrooYcUERGhadOmSZISExOP+biXLVumOXPmqGfPnrrjjjuUnZ2tV199VevXr9d7770nu91eta7L5dK1116rXr166e6779aqVav00ksvqX379vrTn/4kqTLI3nHHHRo8eLBmzpwpScrIyND69es1efLkWs0FAPiVAQCos3feecfo0qWLsXv37qplV111lXHVVVdV/bx69WqjS5cuxujRo42ysrKq5UuWLDG6dOlibNmyxTAMw3C73cYf/vAH45prrjHcbnfVeiUlJUZaWppx9dVXey070g8//GB06dLFePfdd2vUd8UVVxhOp/OEj2fWrFlGly5djIceeqhqmdvtNq6//nqje/fuRnZ29jFrKC8vN8aMGWNMmjSpatnLL79sdOnSxWu7I7333ntG165dje+//95r+RtvvGF06dLFWLdunWEYhrFp0yajS5cuxoMPPui13h133GF06dLFePrpp4/72JxOp9fv3zAMIz8/3xgyZIgxZ86cqmWrVq2q8TvwqD4vffr0MWbNmlVjnSP/JgoKCowePXoYjz32mNd6ixYtMlJSUoy9e/dWLTvavF5zzTXGOeec47Xsggsu8Pob8/D8ra1evdowjMo5GTx4sDFmzBijtLS0ar0vvvjC6NKli/HUU09VLfPM/YIFC7zu8+KLLzYuueSSqp8ffvhho1+/frX6ewKApohD3QDAx8aNG+d1/s/pp58uqfKwMknatGmTfv/9d1144YXKzc1VTk6OcnJyVFxcrMGDB+v777+X2+2WJIWFhVXdT0VFhXJzc9WhQwfZ7Xb9+uuvNca+7LLL6nTeiWfvgiRZLBZdeeWVqqio0KpVq6qWV68hPz9fBQUF6t+/v9f4nr0Jn332WVXtR1q+fLk6deqk5OTkqseck5OjQYMGSVLVYVsrVqyQpBqXCq/tXgabzVb1+3e73crLy5PT6VSPHj28av7vf/8ri8WiGTNm1LgPi8VSq7Gqi4qK0llnnaWPP/7Y63DB9PR09enTR23atKlaVv13WlBQoJycHA0YMEC7d+9WQUFBncf+5ZdflJ2drSuuuMLr3J+zzz5bycnJ+vLLL2tsc8UVV3j93L9/f69DKO12u0pKSvTNN9/UuR4AaAo41A0AfKz6B1zpf6HA4XBIkn7//XdJ0qxZs455HwUFBYqJiVFpaamef/55LVu2TAcOHPD6QH20D8jt2rWr+v/y8nLl5+d73R4fH18VjKxWq9q3b+91e8eOHSVVHp7l8cUXX+jZZ5/Vpk2bvM7FqR4Ozj//fC1dulT33nuvnnzySQ0ePFijRo3SeeedJ6u18ju3nTt3aseOHRo8ePBRH3N2dnbV2FartcYhZcnJyUfd7mjeffddvfTSS/rtt99UUVFRtbz672fXrl1q0aKFYmNja32/J3L++efr008/1Q8//KB+/fpp165d2rhxo+655x6v9datW6f58+frxx9/VElJiddtBQUFio6OrtO4mZmZkv43f9UlJyfXOHcsNDRU8fHxXstiYmK8/l7+9Kc/6eOPP9bUqVPVsmVLDR06VKNHj9ZZZ51Vp9oAwF8IPgDgY54P+kfyhBbPv3fffbfX+SbVea7G9tBDD1Wd+9OnTx9FR0fLYrHo9ttvr3ERAkle3/b/8MMPmjRpktftn332mdeH/xNZu3atbrzxRp1xxhl64IEHlJSUpODgYL3zzjv66KOPqtYLCwvTa6+9pjVr1ujLL7/UypUrlZ6ern//+9966aWXZLPZ5Ha71aVLF82ZM+eoY7Vq1arWdR3P+++/r9mzZ2vkyJG69tprlZCQIJvNpueff75qr5uvjBgxQuHh4fr444/Vr18/ffzxx7JarTrvvPOq1tm1a5emTJmi5ORkzZ49W61bt1ZwcLBWrFihV1555Zh7zBpSbfYKJiQk6L333tPXX3+tr776Sl999ZWWLVumiy++WPPmzfN5jQBQXwQfAPAzz16WqKgoDRky5Ljr/r//9/908cUXV11JTJLKyspqdThU165d9fLLL3stS0pKqvp/t9ut3bt3e+0l+O233yRJbdu2rRo/NDRUL774otfhe++8806N8axWqwYPHqzBgwdrzpw5eu655/T3v/9da9as0ZAhQ9ShQwdt3rxZgwcPPu6hZG3btpXb7dauXbu89vJkZGSc8DF7am7fvr0WLFjgNc7TTz/ttV6HDh309ddfKy8vr8H2+kREROjss8/W8uXLNWfOHKWnp+v0009Xy5Ytq9b5/PPPVV5ermeffdZr7+CRV2iTan/Ined+fvvttxp71H777bcaeyFrKyQkRGlpaUpLS5Pb7daDDz6of//735o+fbpOOeWUk7pPAGgsnOMDAH7Wo0cPdejQQS+99JKKiopq3J6Tk1P1/0f7Zv6f//xnjcsOH01MTIyGDBni9d+RvV9ee+21qv83DEOvvfaagoODqz4822w2WSwWr/H27Nmjzz77zOt+8vLyaozv2ZvlOTxu9OjROnDggN56660a65aWllZdhc5zKNU///lPr3Vqexllz++s+h6xDRs26Mcff/Ra7w9/+IMMw9CCBQtq3Ef1bSMiIqoOU6yN888/XwcPHtTSpUu1efNmjR49+oT1FRQUHDVMhoeH12rsHj16KCEhQW+++abX4YgrVqzQjh07qq6+Vxe5ubleP1utVqWkpEhSjcuPA0BTxB4fAPAzq9Wqhx9+WFOnTtWYMWM0btw4tWzZUgcOHNCaNWsUFRWl5557TlLlyenvv/++oqKi1LlzZ/3444/69ttvG2QPRWhoqFauXKlZs2apV69eWrlypb788ktNmzat6vyP4cOH6+WXX9Z1112nMWPGKDs7W6+//ro6dOigLVu2VN3XM888o7Vr12r48OFq27Zt1XqtWrVS//79JUkXXXSRPv74Yz3wwANas2aN+vXrJ5fLpYyMDC1fvlyLFy9Wz549lZqaqjFjxuj1119XQUGB+vbtq9WrVx+1F9LRnH322frvf/+rm266SWeffbb27NmjN998U507d/a6xPegQYN00UUX6Z///Kd27typYcOGye12a926dRo4cKCuuuoqSVL37t21atUqvfzyy2rRooXatWun3r17H3P84cOHKzIyUvPmzZPNZtO5557rdfvQoUMVHBysadOmacKECSoqKtLSpUuVkJCgrKwsr3W7d++uN954QwsXLtQpp5yi+Pj4o54jFRwcrJkzZ2rOnDm66qqrdMEFF1Rdzrpt27aaMmVKrX531d17773Kz8/XoEGD1LJlS2VmZupf//qXUlNT1alTpzrfHwA0NoIPADQBAwcO1L///W8tXLhQ//rXv1RcXKykpCT16tVLl19+edV6f/7zn2W1WvXhhx+qrKxM/fr1qwoi9WWz2bR48WI9+OCD+utf/6rIyEjNmDFDN910U9U6gwcP1v/93/9p0aJFeuSRR9SuXTvNnDlTe/fu9Qo+aWlp2rt3r9555x3l5uYqLi5OAwYM0M0331x1or7VatUzzzyjV155Re+//74++eQThYeHq127dpo4caLXIXePPPKI4uLi9OGHH+qzzz7TwIED9cILL9SqKeu4ceN06NAh/fvf/9bXX3+tzp07669//auWL1+u7777zmvdRx99VCkpKXr77bf1+OOPKzo6Wj169FDfvn2r1pk9e7buv/9+/eMf/1BpaakuueSS4waf0NBQpaWl6cMPP9SQIUOUkJDgdXtycrKefvpp/eMf/9C8efOUmJioK664QvHx8TUugnDTTTcpMzNTixcvVlFRkQYMGHDMi0OMGzdOYWFhWrRokZ544glFRERo5MiRuuuuu7x6+NTW2LFj9dZbb+n111+Xw+FQUlKSRo8erZtvvvmY57EBQFNiMY52NiwAAAAAmAhf0QAAAAAwPYIPAAAAANMj+AAAAAAwPYIPAAAAANMj+AAAAAAwPYIPAAAAANMj+AAAAAAwvYBtYGoYhtxu37cgslotjTIO/Ic5Njfm19yYX/Njjiu5DanI6Zbbbcgod0meNowWiywhNlmtFkUGWWW1+LfOumJ+za2x5tdqtchiOfEff8AGH7fbUE5OkU/HCAqyKi4uUg5HsZxOt0/Hgn8wx+bG/Job82t+zHGl/XmFSt9XrrxCp4xN+6VSZ+UN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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saved figure to: images/ReLU-based_activations.pdf\n", + "Saved figure to: images/ReLU-based_activations.png\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAz4AAAHHCAYAAAB+yY0gAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABgjUlEQVR4nO3dd3xUVcL/8e+UTCppBCkJSDP0pguIWBEUFbEgylqwrGBD0NVVsK2s/mzP+vgooKKuirvuqojo4kbsa0FlLSsq0kEEBEIgbdKm3d8fbLIZZjIzSWYyyc3n/Xr5wpy5555zc2bm3m/uvedaDMMwBAAAAAAmZo13BwAAAAAg1gg+AAAAAEyP4AMAAADA9Ag+AAAAAEyP4AMAAADA9Ag+AAAAAEyP4AMAAADA9Ag+AAAAAEyP4AMAAADA9Ag+ANCOjRs3TldddVW8u9Eoq1evVr9+/bR69ep4d0WSNHfuXI0bNy4ubS9YsED9+vWLS9sA0NYQfACgGV577TX169ev7r+BAwfquOOO09y5c7V3794mrbP2wH7lypUNLtOvXz/94Q9/CPraypUrW1UwMIO9e/dqwYIFWrduXYu3XVVVpQULFjCeANBM9nh3AADMYPbs2crLy5PL5dK3336r5cuX6+uvv9abb76pxMTEeHcPzVRYWKiFCxcqNzdXAwYM8HvtnnvukWEYMWu7qqpKCxcu1KxZszR69Gi/16655hrNnDkzZm0DgJkQfAAgCo4//ngNGTJEkjR16lRlZWXp6aef1vvvv6/TTz89zr1DLCUkJMStbbvdLrudXTkARIJL3QAgBn71q19Jknbs2OFXvmXLFs2ePVujRo3SkCFDdO655+r999+PRxf9fPrppzrrrLM0ZMgQnX766XrnnXf8Xi8pKdGDDz6oM888UyNGjNCRRx6pK6+8UuvXrw9Y15///GedccYZGjZsmEaOHKlzzz1XK1as8Ftm7969mjdvno455hgNHjxYZ5xxhl599dWAde3Zs0fXXnuthg8frjFjxui+++6Ty+WKaJt27dqlu+++W6eeeqqGDh2q0aNHa/bs2dq5c2fAsmVlZbrvvvs0btw4DR48WMcff7xuueUWHThwQKtXr9Z5550nSZo3b17dZY2vvfaaJP97fNxut0aNGqV58+YFtOF0OjVkyBA9+OCDkiSXy6VHH31U5557ro466igNHz5cF154ob744ou6Ojt37tSYMWMkSQsXLqxre8GCBZKC3+Pj8Xi0aNEijR8/XoMHD9a4ceP0v//7vwG/t9r7u7766iudd955GjJkiE4++WS9/vrrfsu53W4tXLhQp5xyioYMGaLRo0fr17/+tVatWhXROABAa8GfiQAgBnbt2iVJSk9PryvbtGmTfv3rX6tz586aMWOGUlJS9NZbb+m6667TggULNGHChLj09aefftKNN96oadOm6ZxzztGyZcs0Z84cPfPMMxo7dqykgwHuvffe08SJE5WXl6eioiK9/PLLuvjii/WPf/xDnTt3liS98soruvfee3Xqqadq+vTpqqmp0YYNG7RmzRqdeeaZkqSioiKdf/75slgsuuiii5Sdna2PP/5Yt99+u5xOpy677DJJUnV1tS699FLt3r1bl1xyiQ477DC98cYbfsEglO+//17//ve/dcYZZ6hLly7atWuX/va3v2n69On6xz/+oeTkZElSRUWFLrroIm3ZskVTpkzRwIEDVVxcrA8++EB79+5Vnz59NHv2bD322GO64IILdNRRR0mSjjzyyIA2ExISNH78eL377ruaP3++HA5H3WvvvfeeXC5X3RlAp9OppUuXatKkSZo6daoqKir06quv6sorr9TSpUs1YMAAZWdn6+6779bdd9+tCRMm1L1HQk1ocMcdd2j58uU69dRTdfnll+u7777T4sWLtWXLFi1atMhv2e3bt2vOnDk677zz6sZ+7ty5GjRokI444ghJBwPX4sWLNXXqVA0dOlROp1M//PCD1q5dW/f+AIA2wQAANNmyZcuM/Px847PPPjP2799v7N6921i5cqVx9NFHG4MHDzZ2795dt+yll15qTJo0yaipqakr8/l8xgUXXGCccsopdWVffPGFkZ+fb7z11lsNtpufn2/Mnz8/6GtvvfWWkZ+fb3zxxRdh+3/SSScZ+fn5xttvv11XVl5ebowdO9Y4++yz68pqamoMr9frV3fHjh3G4MGDjYULF9aVXXPNNcYZZ5wRss3bbrvNGDt2rHHgwAG/8htvvNE46qijjKqqKsMwDOP555838vPzjYKCgrplKisrjQkTJkS0fbXrqe/f//63kZ+fbyxfvryu7NFHHzXy8/ONd955J2B5n89nGIZhfPfdd0Z+fr6xbNmygGVuvfVW46STTqr7+ZNPPjHy8/ONDz74wG+5GTNmGCeffHLdzx6Px++9YBiGUVpaahxzzDHGvHnz6sr2799v5OfnG4899lhA24899piRn59f9/O6deuM/Px84/bbb/db7oEHHjDy8/ONzz//vK6sduy//PJLv7YGDx5sPPDAA3VlkydPNmbOnBnQNgC0NVzqBgBRcNlll2nMmDE64YQTNHv2bCUnJ+uJJ55Qly5dJB28VOyLL77QaaedJqfTqQMHDujAgQMqLi7Wscceq59++qnJs8A112GHHeZ3tiktLU1nn322fvzxR+3bt0+S5HA4ZLUe3GV4vV4VFxcrJSVFvXr10o8//lhXNz09XXv27NF3330XtC3DMPTOO+9o3LhxMgyj7vdw4MABHXvssSovL9fatWslSR9//LE6deqkiRMn1tVPTk7W+eefH9F2JSUl1f2/2+1WcXGxevToofT0dL8+v/POO+rfv3/QM24WiyWituo7+uijlZWVpYKCgrqy0tJSffbZZ373e9lstrozQj6fTyUlJfJ4PBo8eLBf/xrjo48+kiRdfvnlfuVXXHGF3+u1+vbtW3dZpiRlZ2erV69efpdopqena9OmTfrpp5+a1CcAaC241A0AouCuu+5Sr169VF5ermXLlunLL7/0u8zp559/lmEYevTRR/Xoo48GXcf+/fvrLhmLhtqD9oqKClVWVtaV22w2ZWdn1/18+OGHBxzg9+zZU9LBS/Y6deokn8+nF154QX/961+1c+dOeb3eumUzMzPr/n/GjBn67LPPNHXqVB1++OEaO3asJk2aVHd52IEDB1RWVqaXX35ZL7/8ctB+HzhwoK7tYH3r1atXRNtfXV2txYsX67XXXtPevXv9Zl4rLy+v+/+ff/5Zp5xySkTrjITdbtcpp5yiN998Uy6XSw6HQ++8847cbnfARBfLly/Xs88+q23btsntdteV5+XlNantXbt2yWq1qkePHn7lnTp1Unp6et0lmLW6du0asI6MjAyVlpbW/Tx79mxde+21OvXUU5Wfn69jjz1WZ511lvr379+kPgJAvBB8ACAKhg4dWjer2/jx43XhhRfqpptu0sqVK5Wamiqfzyfp4F/ejzvuuKDrOPRgNRSHw6Hq6uqgr9WW106j/eyzz2rhwoV1r+fm5uqDDz6IuC1JevLJJ/Xoo49qypQpmjNnjjIyMmS1WnXffff5BYo+ffpo5cqV+uc//6lPPvlE77zzjv7617/quuuu0+zZs+t+D5MnT9Y555wTtK1oPZDznnvu0WuvvaZLL71Uw4cPV4cOHWSxWHTjjTfGdPppSTrjjDP08ssv6+OPP9b48eO1cuVK9e7d2y8svPHGG5o7d67Gjx+v3/zmN+rYsaNsNpsWL14cMClGY0V6pspms4VdZuTIkXr33Xf1/vvva9WqVXr11Ve1ZMkSzZ8/X1OnTm1WPwGgJRF8ACDKbDabfvvb32r69Ol68cUXNXPmTHXv3l3SwZvfjznmmGa30a1bN23bti3oa7Xl3bp1kySdffbZdWdcJAU8V2j79u0yDMPvYLn2sqbc3FxJ0ttvv63Ro0frvvvu86tbVlamrKwsv7KUlBSdfvrpOv300+VyuXT99dfrySef1FVXXaXs7Oy6IBju95Cbm6uNGzcG9K2h7T7U22+/rbPPPltz586tK6upqfE72yMdDJybNm0Kua7GXvI2cuRIderUSQUFBTryyCP1xRdf6Oqrrw7oX/fu3bVw4UK/9T/22GNNbjs3N1c+n0/bt29Xnz596sqLiopUVlZWN56NlZmZqSlTpmjKlCmqqKjQxRdfrAULFhB8ALQp3OMDADEwevRoDR06VEuWLFFNTY06duyoUaNG6eWXX1ZhYWHA8rWXd0XqhBNO0Jo1a/TDDz/4lZeVlWnFihUaMGCAOnXqJEnq3r27jjnmmLr/6ocg6eDDOd999926n51Op15//XW/ddhstoCzJG+99VbAfUnFxcV+PzscDvXp00eGYcjtdstms+nUU0/V22+/rY0bN4b8PRx//PEqLCzUypUr68qqqqr0yiuvhP391Pb5UH/+85/9LtOTpFNOOUXr16/3+x3Uqt3m2hngysrKImrbarVq4sSJ+vDDD/X3v/9dHo8n4DK32v7V/72uWbNG3377rd9yjWn7hBNOkCQtWbLEr/y5557ze70xDh3T1NRU9ejRI+JpxQGgteCMDwDEyG9+8xvNmTNHr732mn7961/r97//vS688EKdeeaZOv/889W9e3cVFRXp22+/1Z49e/T3v//dr/4777yjrVu3Bqz3nHPO0cyZM7Vy5UpdfPHFuuCCC9S7d28VFhZq+fLlKiwsDDgzE0rPnj11++236/vvv1fHjh21bNky7d+/X/fff3/dMieeeKIWLVqkefPmacSIEdq4caNWrFhRdyar/jbn5OToyCOPVMeOHbV161b95S9/0QknnKC0tDRJ0k033aTVq1fr/PPP19SpU9W3b1+VlpZq7dq1+vzzz/Wvf/1LknT++efrxRdf1K233qq1a9eqU6dOeuONN/wmLQjlxBNP1BtvvKG0tDT17dtX3377rT777DO/e5Jq+/z2229rzpw5mjJligYNGqTS0lJ98MEHmj9/vvr37183KcJLL72k1NRUpaSkaOjQoQHbX99pp52mP//5z3rssceUn5/vdwamtn/vvPOOrrvuOp144onauXOnXnrpJfXt29fvnqykpCT17dtXb731lnr27KnMzEwdccQRys/PD2izf//+Ouecc/Tyyy+rrKxMI0eO1Pfff6/ly5dr/PjxOvrooyP63dV3xhlnaNSoURo0aJAyMzP1/fff6+2339bFF1/c6HUBQDwRfAAgRk455RT16NFDzz77rM4//3z17dtXy5Yt08KFC7V8+XKVlJQoOztbAwcO1HXXXRdQ/x//+EfQ9Y4aNUq/+tWvtHTpUi1YsEBvvfWW9u/fr7S0NI0YMUKPPPKIhg0bFnE/e/bsqTvvvFMPPfSQtm3bpry8PD3yyCN+9yJdffXVqqqq0ooVK1RQUKCBAwdq8eLFevjhh/3WdcEFF2jFihV67rnnVFlZqS5duuiSSy7RtddeW7dMTk6Oli5dqkWLFundd9/V3/72N2VmZqpv3766+eab65ZLTk7W888/r3vuuUd/+ctflJSUpDPPPFPHH3+8rrzyyrDbdfvtt8tqtWrFihWqqanRkUceqeeeey6gbmpqql588UUtWLBA7777rpYvX66OHTtqzJgxdZNNJCQk6IEHHtD//u//6u6775bH49H9998fMvgceeSR6tq1q3bv3h1wtkeSzj333LrnIX366afq27ev/ud//kcrV66sC3+17r33Xt1zzz26//775Xa7NWvWrKDBp3bZvLw8LV++XO+9955ycnJ01VVXadasWWF/Z8Fccskl+uCDD7Rq1Sq5XC5169ZNN9xwg37zm980aX0AEC8WI9Z3eAIAAABAnHGPDwAAAADTI/gAAAAAMD2CDwAAAADTI/gAAAAAMD2CDwAAAADTI/gAAAAAMD2CDwAAAADTa7MPMDUMQz5f7B9BZLVaWqQdxA9jbG6Mr7kxvubHGB/C65NxoFLy+A7+bLfKkp0i2drm37IZX3NrqfG1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/EJPa0LwiZDb7daPP/6obt266ZZbbtHw4cM1YsQIzZkzR/v27Yt39xAl//d//6dBgwbppJNOindXEGMej0dr1qxR7969490VNMLWrVsDxiw9PV2dOnXS1q1b49QrxNrXX3+tzp07Ky0tLd5dQZSsXLlSGzdu1HXXXRfvriCK1qxZo/z8fD3++OMaM2aMBg8erGnTpmnNmjXx7pokgk/ESkpK5Ha79fTTT6ukpEQLFy7U/Pnz9c033+j666+Pd/cQBevWrdOrr76qefPmxbsraAHPPPOM9u7dq8suuyzeXUEjlJWVKT09PaA8IyNDpaWlcegRYu2rr75SQUGBrrjiinh3BVFSVVWlBx54QDfeeCNh1mT27dunTz/9VG+88YZ+//vfa9GiRbJYLLriiiu0f//+eHevfd/jU15eHtFlLt27d5fP55MkpaamauHChXI4HJKknJwcXX755fr888+5T6CVacz4JiQkaP78+brwwgvVp0+fFugdmqsx41v7ea21atUqLViwQNdee60GDx4cqy4CaKY9e/boxhtv1OjRozV9+vR4dwdR8sQTT6hjx46aMmVKvLuCKDMMQ5WVlXr00UfVv39/SdKwYcM0btw4/eUvf9GcOXPi2r92HXxWrlypO+64I+xyBQUF6tatmywWi4488ki/g6hRo0bJZrNp8+bNBJ9WpjHju379em3dulUPP/ywysrKJB2culw6+BfmxMREJSYmxrS/aJzGjG/9MLt27Vpdf/31mjRpEjNEtUHp6ekqLy8PKC8tLQ24jwttW1lZmWbMmKHMzEwtWLCASQ1MYteuXXr22We1aNGius9y7b1blZWVqqioUGpqajy7iGZIT09XZmZmXeiRpMzMTA0cOFCbN2+OY88OatfBZ+rUqZo6dWrEy+fm5jb4Wu1BMlqPxoxvQUGBSktLNW7cuIDXRo4cqRkzZujmm2+OdhfRDI39/ErS9u3bNWPGDI0YMUL33ntvjHqGWOrdu3fAvTzl5eXat28f92uZSHV1ta666iqVl5fr5ZdfVocOHeLdJUTJzp075Xa7NXPmzIDXpk+frmHDhumVV16JQ88QDX379tXPP/8c9LXWcKzcroNPY5100klauXKlampq6v76/8UXX8jr9WrQoEFx7h2a45xzztGoUaP8ypYvX66CggI9/fTT6tatW5x6hmgpLCzUFVdcoa5du+qxxx5j1r426vjjj9eTTz7pd6/PypUrZbVaNXbs2Dj3DtHg8Xh0ww03aOvWrXrxxReZotxkBgwYoBdeeMGvbN26dbr//vs1f/58DRkyJE49QzScdNJJeu2117Ru3ToNGDBAklRcXKy1a9e2intqLQaPQo7Y7t27NXnyZA0dOlTTp0/XgQMH9PDDD6tHjx568cUXZbFY4t1FRNGCBQv07LPP6t///ne8u4Jmqq6u1gUXXKAdO3boj3/8o990uQ6HQwMHDoxj79AYpaWlOuOMM9SrVy9dddVVdQ8wPfPMM3mAqUnceeedeuWVVzR37lyNGDHC77WBAwcG3LOHtm/16tWaPn26Xn31VYJPG+fz+XT++eertLRUN954oxITE/XUU0/pp59+0ptvvqlOnTrFtX+c8WmErl276oUXXtB9992n66+/XsnJyTr55JM1d+5cQg/QihUVFWn9+vWSpGuuucbvtdzcXH3wwQfx6BaaICMjQ0uWLNE999yj6667TqmpqTrvvPN04403xrtriJLa5zE98MADAa+9//77ysvLa+kuAYiQ1WrVU089pfvvv1933XWX3G63fvWrX+nFF1+Me+iROOMDAAAAoB1gihQAAAAApkfwAQAAAGB6BB8AAAAApkfwAQAAAGB6BB8AAAAApkfwAQAAAGB6BB8AAAAApkfwAQAAAGB6BB8AAAAApkfwAQAAAGB6BB8AAAAApvf/AWvlFwFpB7v5AAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saved figure to: images/ELU-based_activations.pdf\n", + "Saved figure to: images/ELU-based_activations.png\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAz4AAAHHCAYAAAB+yY0gAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB5tElEQVR4nO3dd3wUZeI/8M/MbE3ZdAIkoQRICL0oGJAWUVAREEWxgJ6KouKhngU89eTnfVW88+48sIENPRsoFhSwoGIDFFCUHnpNL7ubZOvM749Nliy72U3CbjbZfN6vF69NnplnnmfzkGQ+eWaeERRFUUBERERERBTBxHB3gIiIiIiIKNQYfIiIiIiIKOIx+BARERERUcRj8CEiIiIioojH4ENERERERBGPwYeIiIiIiCIegw8REREREUU8Bh8iIiIiIop4DD5ERERERBTxGHyIiNqJ+fPnY/DgweHuRpNlZ2dj8eLF4e4GAGDVqlXIzs7G8ePHW7ztzZs3Izs7G5s3b27xtomIIgGDDxFRCNSdIDf077fffnPvm52djf/3//5fg8eaOXMmJk2a5HNbWVlZqwoGkeLFF1/EV199FZa233rrLaxatSosbRMRRTJVuDtARBTJ/vznPyM9Pd2rvEuXLmHoDTXWSy+9hAkTJmD8+PEe5VOmTMGll14KjUYTsrbfeecdJCQkYNq0aR7l5557Ln7//Xeo1eqQtU1EFMkYfIiIQmj06NHo379/uLtBQSJJEiRJCkvboihCq9WGpW0iokjAS92IiNqZY8eO4eabb8agQYNw/vnnY8mSJVAUxWOfV155BTNmzMDw4cMxYMAATJs2DevWrfM61o8//ohrrrkG55xzDgYPHowJEybgX//6l8c+NpsN//3vf3HhhReiX79+GDNmDJ5++mnYbDav/Z544gmcd955GDx4MObMmYOCgoJGvSebzYZnn30W06ZNw9ChQzFo0CBce+212LRpk9e+sixj+fLluOyyy9C/f3+cd955uPnmm/HHH38AcF16WF1djQ8//NB9aeL8+fMBeN/jc9ttt+GCCy7w2aerr77aY9bmgw8+wKxZs5Cbm4t+/frhkksuwdtvv+1RJy8vD/n5+fj555/dbc+cORNAw/f4rF27FtOmTcOAAQMwfPhw3HfffSgsLPTYp+7+rsLCQtxxxx0YPHgwzjvvPCxatAhOp9Nj388++wzTpk3D4MGDMWTIEFx22WVYvnx5wDEgImrtOONDRBRCZrMZZWVlHmWCICAhISEs/XE6nbjlllswcOBA3H///fj++++xePFiOJ1OzJs3z73fG2+8gby8PFx22WWw2+347LPPMG/ePLz00ksYO3YsACA/Px+33XYbsrOz8ec//xkajQZHjhzBtm3b3MeRZRm33347tm7diquuugo9evTAvn37sHz5chw+fBjPP/+8e9+//vWv+OSTTzBp0iQMGTIEmzZtwq233tqo92U2m7Fy5UpMmjQJ06dPR1VVFd5//33ccsstWLlyJXJycjzaWbVqFUaPHo0rr7wSTqcTW7Zswfbt29G/f388/fTTePjhhzFgwABcddVVABq+NPHiiy/Ggw8+iN9//x0DBgxwl584cQK//fYbHnjgAXfZO++8g169eiEvLw8qlQrffPMNFi5cCEVRcN111wEAHnroITz++OOIiorCnDlzAADJyckNvu9Vq1ZhwYIF6N+/P+69916UlpbijTfewLZt2/DRRx/BYDC493U6nbj55psxYMAAPPDAA9i4cSNeffVVZGRk4NprrwXgCrL33nsvcnNzcd999wEADh48iG3btuGGG25o1FgQEbVaChERBd0HH3ygZGVl+fzXr18/j32zsrKUhQsXNnis66+/Xrn00kt9bistLVWysrKU//73vwH79OCDDypZWVnK448/7i6TZVm59dZblb59+yqlpaXu8pqaGo+6NptNmTRpkjJr1ix32WuvvaZkZWV51DvTRx99pPTu3Vv55ZdfPMrfeecdJSsrS9m6dauiKIqye/duJSsrS3nsscc89rv33nsb9f4cDoditVo9yiorK5URI0YoCxYscJdt3LjR62tQR5Zl98eDBg1SHnzwQa996sb12LFjiqIoislkUvr166c89dRTHvstW7ZMyc7OVk6cOOEuO/NrqiiKctNNNykXXHCBR9mll16qXH/99V77btq0ScnKylI2bdqkKIprTHJzc5VJkyYpFovFvd8333yjZGVlKc8++6y7rG7slyxZ4nHMqVOnKpdffrn787///e/KkCFDFIfD4dU+EVFbx0vdiIhC6NFHH8Vrr73m8W/ZsmVh7VPd7ALgmn267rrrYLfbsXHjRne5Tqdzf1xZWQmTyYShQ4di165d7vK62YT169dDlmWfba1btw49evRA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4b333kNsbGy4u0RBcvz4cdjtdtx6661e22bNmoWBAwdixYoVYegZBUPPnj1x9OhRn9taw7lyuw4+TTVu3DisW7cOVqvV/df/TZs2wel0om/fvmHuHZ2Nyy+/HMOGDfMo+/DDD7FmzRosW7YMnTt3DlPPKFiKiopw0003oVOnTvjvf//LVfvaqNGjR+PFF1/0uNdn3bp1EEURI0eODHPvKBgcDgfuvvtuHDx4EG+99RaXKI8wOTk5eOONNzzKdu/ejSeffBILFy5E//79w9QzCoZx48Zh1apV2L17N3JycgAA5eXl2LlzZ6u4p1ZQ+CjkRjt16hQmT56MAQMGYNasWSgrK8MzzzyDLl264K233oIgCOHuIgXR4sWL8eqrr+LXX38Nd1foLFksFlx99dU4duwY/vnPf3osl6vRaNCnT58w9o6aorKyEpdeeim6d++O2267zf0A08suu4wPMI0QjzzyCFasWIH58+dj8ODBHtv69Onjdc8etX2bN2/GrFmz8P777zP4tHGyLOOqq65CZWUl7rnnHmi1WixduhSHDx/Gp59+ipSUlLD2jzM+TdCpUye88cYbeOKJJ3DXXXdBr9fjggsuwPz58xl6iFqxkpIS7NmzBwBw++23e2xLS0vD119/HY5uUTPExcVh+fLlePzxx3HnnXciOjoaV155Je65555wd42CpO55TE899ZTXtvXr1yM9Pb2lu0REjSSKIpYuXYonn3wSjz76KOx2O8455xy89dZbYQ89AGd8iIiIiIioHeASKUREREREFPEYfIiIiIiIKOIx+BARERERUcRj8CEiIiIioojH4ENERERERBGPwYeIiIiIiCIegw8REREREUU8Bh8iIiIiIop4DD5ERERERBTxGHyIiIiIiCjiMfgQEREREVHE+/+Lvf0r5c7BKAAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saved figure to: images/SELU-based_activations.pdf\n", + "Saved figure to: images/SELU-based_activations.png\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAz4AAAHHCAYAAAB+yY0gAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAACRKklEQVR4nOzdd3wUZf4H8M/M1rRNL5AChJBQA4g0kSoIIipgQUXs7e701DsL2E5Pz8KdP+/Uu7PgWe/sFQRUiog0aaIgLUAgBJKQnu27M8/vjw0Ly24aJLvJ5vN+vTDZZ+aZ+S4jsJ88zzwjCSEEiIiIiIiIwpgc6gKIiIiIiIjaGoMPERERERGFPQYfIiIiIiIKeww+REREREQU9hh8iIiIiIgo7DH4EBERERFR2GPwISIiIiKisMfgQ0REREREYY/Bh4iIiIiIwh6DDxFRJ3X48GHk5eXh9ddfD3UpLfLiiy8iLy8v1GV4TZgwAXPnzg3JuefMmYM5c+aE5NxERB0Ngw8R0RnavXs3fv/732P8+PEYMGAARo8ejRtuuAHvvPOOz34TJkxAXl5ewF833XSTd7/jH+wrKysDnm/Dhg3Iy8vD0qVLA27/85//3K6CQTjYsmULXnzxRdTW1gb93AUFBXjxxRdx+PDhoJ+biCicaENdABFRR7ZlyxZce+216Nq1Ky6//HIkJyfj6NGj2LZtG95++22/n8b36dMHN9xwg99xUlJSglUynYatW7fipZdewowZM2AymXy2LV26FJIktdm5CwoK8NJLL2HYsGHIyMjw2dbRRuuIiEKJwYeI6Ay8/PLLiImJwccff+z3gbiiosJv/9TUVFxyySXBKo+CQK/Xd8pzExF1NJzqRkR0Bg4dOoScnBy/0AMAiYmJIajo9Lz55psYP3488vPzcc0112DPnj0+23ft2oW5c+fivPPOw4ABAzBq1CjMmzcPVVVVPvuZzWb85S9/wYQJE9C/f3+MHDkSN9xwA3bs2OGz37Zt23DTTTdhyJAhGDhwIK655hps3rzZr65Nmzbh0ksvxYABAzBx4kS8//77zX5PmzZtwu9//3uMGzcO/fv3x9ixY/HUU0/Bbrf77btv3z7cddddGDFiBPLz8zF58mQ8//zzADxTD+fPnw8AOO+887zTE49PPTv5Hp9ffvkFeXl5+Oyzz/zOsXr1auTl5WHlypUAgOLiYjz22GOYPHky8vPzMXz4cPz+97/3mdL26aef4q677gIAXHvttd5zb9iwAUDge3wqKirw4IMP4pxzzsGAAQNw8cUX+9Vz8v1dH3zwASZOnIj+/fvj0ksvxc8//+yz77FjxzBv3jyMGTMG/fv3x7nnnovf/OY3nHpHRB0OR3yIiM5Aeno6tm7dij179iA3N7fJ/d1ud8B7dyIjI2E0GtuixCZ9/vnnsFgsuPrqq+FwOPDOO+/guuuuw8KFC5GUlAQAWLt2LYqKijBz5kwkJydj7969+PDDD1FQUIAPP/zQO9XrT3/6E77++mtcc8016NmzJ6qrq7F582bs27cP/fr1AwCsW7cOt9xyC/r374877rgDkiTh008/xXXXXYf//e9/yM/PB+C5d+qmm25CQkIC7rzzTrjdbrz44ovNDpRLly6F3W7HVVddhbi4OPz888949913UVJSghdeeMG7365duzB79mxotVrMmjUL6enpOHToEFasWIF77rkHkyZNQmFhIRYtWoR58+YhPj4eAJCQkOB3zgEDBiAzMxNLlizBjBkzfLYtXrwYsbGxOPfccwF4QtLWrVtx4YUXIi0tDcXFxXjvvfdw7bXX4quvvkJERASGDh2KOXPm4J133sHtt9+O7OxsAEDPnj0Dvme73Y45c+bg0KFDmD17NjIyMrB06VLMnTsXtbW1uO6663z2X7RoESwWC2bNmgVJkrBgwQLceeedWLZsGXQ6HQDgzjvvREFBAa655hqkp6ejsrISa9aswdGjR/2m3hERtWuCiIhO2w8//CD69Okj+vTpI2bNmiXmz58vVq9eLZxOp9++48ePF7m5uQF/vfLKK979XnjhBZGbmysqKioCnnP9+vUiNzdXLFmyJOD2xx9/XOTm5jZZe1FRkcjNzRX5+fmipKTE275t2zaRm5srnnrqKW+bzWbz679o0SKRm5srNm7c6G0bMmSIePzxxxs8p6qq4vzzzxc33nijUFXV5/gTJkwQN9xwg7ftt7/9rRgwYIAoLi72thUUFIg+ffo06/0FqvmVV14ReXl5PsecPXu2GDx4sE/b8VqPW7BggcjNzRVFRUV+xxw/frx44IEHvK+fe+450a9fP1FdXe1tczgc4uyzzxbz5s1rtL6tW7eK3Nxc8dlnn3nblixZInJzc8X69ev99r/mmmvENddc43395ptvitzcXPHF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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# | hide\n", + "\n", + "\n", + "for activation in [\"linear\", \"ReLU\", \"ELU\", \"SELU\"]:\n", + " plot_activation_functions(activation, save_image=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "An example of such activation functions are given in figures below:\n", + "\n", + "![ReLU-based_activations](images/ReLU-based_activations.png) ![ELU-based_activations](images/ELU-based_activations.png) \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Monotonicity indicator\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Our construction is preconditioned on a priori knowledge of (partial) monotonicity of a multivariate, multidimensional function $f$. Let $f: K \\mapsto \\mathbb{R}^m$ be defined on a compact segment $K \\subseteq \\mathbb{R}^n$. Then we define its $n$-dimensional *monotonicity indicator vector* $\\mathbf{t} = [t_1, \\dots, t_n]$ element-wise as follows:\n", + "\n", + "$$\n", + " t_j= \\begin{cases}\n", + " 1 & \\text{if }\\cfrac{\\partial f(\\mathbf{x})_i} {\\partial x_j} \\geq 0 \\ \n", + " \\text{ for each } i \\in \\{1, \\dots , m\\}\\\\\n", + " -1 & \\text{if }\\cfrac{\\partial f(\\mathbf{x})_i} {\\partial x_j} \\leq 0 \\ \n", + " \\text{ for each } i \\in \\{1, \\dots , m\\}\\\\\n", + " 0 & \\text{otherwise}\n", + " \\end{cases} \n", + " \\: \n", + "$$\n", + "\n", + "Given an $(m \\times n)$-dimensional matrix $\\mathbf{M}$ and $n$-dimensional monotonicity indicator vector $\\mathbf{t}$, we define the operation $|.|_{t}$ assigning an $(m \\times n)$-dimensional matrix $\\mathbf{M'} = |\\mathbf{M}|_{t}$ to $\\mathbf{M}$ element-wise as follows:\n", + "\n", + "$$\n", + " m'_{j,i}= \\begin{cases}\n", + " |m_{j,i}| & \\text{if }t_i=1\\\\\n", + " -|m_{j,i}| & \\text{if }t_i=-1\\\\\n", + " m_{j,i} & \\text{otherwise}\n", + " \\end{cases}\n", + "$$" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | hide\n", + "\n", + "\n", + "def display_kernel(\n", + " kernel: Union[tf.Variable, np.typing.NDArray[float]],\n", + " *,\n", + " title: str,\n", + " save_path: Union[Path, str] = \"images\",\n", + " save_image: bool = True,\n", + ") -> None:\n", + " sns.set(font_scale=1.2)\n", + " # colors = [\"#CC3238\", \"#032545\"]\n", + " # colors = [\"#032545\", \"#CC3238\"]\n", + " cm = sns.color_palette([colors[0], colors[1]], as_cmap=True)\n", + " # cm = sns.color_palette(\"vlag\", as_cmap=True)\n", + " cm = sns.diverging_palette(\n", + " 349.35825815417826, 233.30090815690622, s=85, l=55, as_cmap=True\n", + " )\n", + " plt.rcParams[\"figure.figsize\"] = (10, 5)\n", + "\n", + " df = pd.DataFrame(kernel)\n", + "\n", + " # display(\n", + " # df.style.format(\"{:.2f}\").background_gradient(cmap=cm, vmin=-1e-8, vmax=1e-8)\n", + " # )\n", + "\n", + " ax = sns.heatmap(\n", + " df,\n", + " annot=True,\n", + " cmap=cm,\n", + " center=0.0,\n", + " vmin=-0.01,\n", + " vmax=0.01,\n", + " fmt=\".1f\",\n", + " cbar=False,\n", + " xticklabels=False,\n", + " yticklabels=False,\n", + " )\n", + " plt.title(title, loc=\"left\")\n", + "\n", + " if save_image:\n", + " for file_format in [\"pdf\", \"png\"]:\n", + " for s in [\" \", \"\\n \", \"$\", \"{\", \"}\", \"\\\\\", \"^\"]:\n", + " title = title.replace(s, \"_\")\n", + " title = title.replace(\"Γ—\", \"x\")\n", + "\n", + " path = Path(save_path) / f\"{title}.{file_format}\"\n", + " path.parent.mkdir(exist_ok=True, parents=True)\n", + " plt.savefig(path, format=file_format)\n", + " print(f\"Saved figure to: {path}\")\n", + "\n", + " plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saved figure to: images/kernel__W__in__mathbb_R___9_x_12__.pdf\n", + "Saved figure to: images/kernel__W__in__mathbb_R___9_x_12__.png\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# | hide\n", + "\n", + "\n", + "tf.keras.utils.set_random_seed(42)\n", + "\n", + "units = 12\n", + "input_len = 9\n", + "\n", + "layer = tf.keras.layers.Dense(units=units)\n", + "\n", + "input_shape = (input_len,)\n", + "layer.build(input_shape=input_shape)\n", + "\n", + "# print(\"Original kernel:\")\n", + "rr = \"\\mathbb{R}^{9 Γ— 12}\"\n", + "# e =\n", + "display_kernel(layer.kernel, title=f\"kernel $W \\in {rr}$\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saved figure to: images/kernel__(|W_T|_t)_T__after_applying_monotonicity_indicator__t=(-1,_-1,_-1,_0,_0,_0,_1,_1,_1)_.pdf\n", + "Saved figure to: images/kernel__(|W_T|_t)_T__after_applying_monotonicity_indicator__t=(-1,_-1,_-1,_0,_0,_0,_1,_1,_1)_.png\n" + ] + }, + { + "data": { + "image/png": "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Jv/O7KO1/u2NOrfkhhtuwIABA/Cf//wH27dvx7p16xAWFobU1FRcf/317SqjrbELeL9/tubJJ59EcnIyvvjiC7e++3//93/tLqe9bdeZOaWtNvVWnxk9ejSefvppfPbZZ/j8889hs9mwcOFCrydbnVmrO+LgwYNu986dOnUKp06dAtBwdvLiL3J5eXkIDAz02S0Xjbpz3QFp65+YmIiVK1fi3//+NzZu3IgNGzYgMjISt956K+6///6mg+dyKlvK9va3srv0Hbjjr/+ilrz77ruC0WgUcnJymm3v7AuEpdRSne6//37hhRde8Pg3n376qWA0GoUdO3Z4o4qy1NEXanf2b9rS+JK/Rx99VLQyO+PEiROC0WgUfv/73/u0HuRf/KV/UvfU0lrtK9XV1cLAgQOFV155xddV6bDuXHdBkLb+LLvnlC0IXfsO3OV7tui83/zmN4iNjcW///1vX1el0w4dOuTx/ScWiwXvvfceZs6c2eKTCqnn+PDDDwEAN998s1f2V1ZW5vZY7fr6evz1r38FgBZveCd58nb/pJ7F39bqnTt3Qq1W4/bbb/d1VTqsO9cdkLb+LLvnlN3V78CiXUZIgE6nw9///nds27YNZrPZ7YbD7sDpdOL48eMoLS2FwWBousyxqKgI8+bNa/WluNS9HT58GP/v//0/5OTkYMOGDbjsssu89oSiTz75BN9//z3GjBmDyMhInD17FllZWSgpKcGkSZO8epkR+Sdf9k/qWfxtrZ4yZQr279/v0zp0VneuOyBt/Vl2zym7q9+BmWyJbPTo0Rg9erSvq9FpDz/8MF599VUsXrwY8+bNw/PPPw+g4UEjDzzwgI9rR1LKycnB66+/jqCgIFx++eV49tlnvbbvCRMm4NChQ9i8eTOqqqqgVquRnJyMW265BbfddptPHpBB/sWX/ZN6nu6+VhOR93T1O7BCEARBxPqQB9u2bcP27dtx2223SfJ+m87wxzoREREREfUkTLaIiIiIiIgkwAdkEBERERERSYDJFhERERERkQTa/YCMqrFvSFgNIiIiIiLqLsK2PezrKnQLPLNFREREREQkASZbREREREREEmCyRUREREREJAEmW0RERERERBJgskVERERERCQBJltEREREREQSYLJFREREREQkASZbREREREREEmCyRUREREREJAEmW0RERERERBJgskVERERE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IQXaqUYo+4TAseMUlDHB0EwdAKHeDvOLP7u9JTvw2ZlQj4xH3b0r3DpcdyNW/IpgHQLfugbKUAPs209CndYH6rQ+7vtburvFp9z4itzbQKz4laEGBC+7Fc6DpXDlV8B11gRFuAHqkQlQxYXCVWmG+ek17XrrvLexDTgO2Ae4HooZv/2nw7Bd2g/aqUYEf7oA9k3HoQjVQzvNCCiVML+8tuEx4H5GzDZQhOpheHDS+Z/DGh55HvDk9KYyLJ/uaLp0zV9wHLAP9DQ+T7Zgd6Luga+hv20UNDNSoZufDsFkg339MVg+2ArXiQpf11BaIsWvCNJBGWoAAGjGJEIzJtHj79m+z/WrL1gA2AYixe+qscD21R6ohsRAnZkERYgesDvhKqqG5ZMdsC7JhlDpfkmFX2AbcBywD3A9FDl+89Nr4NxXDO3cIdBdPwKCzQHHniJY/rMdzv3FEgXRRSK2gSJAC+2cwW7btVec32b7Ptf/vmhzHLAP9DAKQRDadXyvtRv6iIiIiIhIPsK2PezrKnQLPr9ni4iIiIiIqCdiskVERERERCQBJltEREREREQSYLJFREREREQkASZbREREREREEmCyRUREREREJAEmW0RERERERBJgskVERERERCQBJltEREREREQSYLJFREREREQkASZbREREREREEmCyRUREREREJAEmW0RERERERBJgskVERERERCQBJltEREREREQSUPu6AtR9KJ+b6usq+JzruXW+rgIRERERdRM8s0VERERERCQBJltEREREREQSYLJFREREREQkASZbREREREREEmCyRUREREREJAEmW0RERERERBJgskVERERERCQBJltEREREREQSYLJFREREREQkASZbREREREREEmCyRUREREREJAEmW0RERERERBJQ+7oCAACdCvpbR0Mz3QhlTAgEkw2O7EJYPsiCK7+y3cXo78yE/q7MFj+ve2gVHFsLxKixuESKHwCgVEB3wwho5wyGMiEcgtUBZ04xLP/ZDuf+YmnqLwKLzYpP1v0XP2VvRkllGQL1BozsPwR3Xz4PKTHxHSrL6XJi2YbV+Hbbrzh1tgQ6jRZDkwbgjhnXYnjKQIki6CKR+oBmUj9oZqRCNaA3FBEBUGjVcJXVwnnwDKxf7ILz0BkJg+giuc8DAPsB50KOA7nHD4g7Di6gCNUj+MtboOwdCMfeItTd/ZWIlRaZ3NtA7mtBD+P7ZEujQtCia6AeHgdHbgmsy/ZAGR0EzdQB0ExIQd3vVsKZU9KhIm3f5cJVXOO23VVYJVKlRSRy/AEvzoJ2qhHO/ApYV+yBIkQP7TQjgt69HqYnvoNjw3EJg+kcm8OO+995AXtPHMKghH64cdJslFaVY+2eLGzKzcY79z2LocnGdpUlCAKe/OSfWLd3K5KiYnH9xMtRY67Dz7u34J5Fz+CV2x/F5LQxEkfUQSL2AfXkvlANjoYztxSus3WA3QVlQig0k/tBM82I+pfXwvZNjsQBdYLc5wGA/YBzIceB3OMHJGmDRoYnpkJh0IhcYQnIvQ3kvhb0QD5PtnQ3ZUA9PA62dXkwP7kaEBq2q9fmIegfVyLgqemovemzpu3tYfs+F47sQmkqLDIx49fMSIV2qhGOvadRd/9KwOYEANi+3o+g969HwBPTULNzMWC2SxhRx33x67fYe+IQpg7PxF9v+wOUyoarW6enj8ejH/0df1n6Npb+6fWm7a35KXsz1u3dimEpqXj7vmeh02gBANdMmIG7/vUUXlr2LkYNSEOg3iBpTB0hZh+of+WXpn/3Cyn79ULw4vkwPDgJttUHAYdL5Ci6Ru7zAMB+wLmQ40Du8QPStAEAaGYNgvayATC/8gsCHpsifsVFJPc2kPta0BP5/J4t3dVpAADLok3NOo5jw3E4dhdC1bcX1Bkdu4ysOxEzft0158p6b0uzweU8WAr72jwoIwKgnTJAvMqLQBAEfL3lJwDAA1fe0iyhmpw2Bul9B+FESSGyj+W2q7yVm38EANw7e35TogUAQxL7Y3r6eFTW1WDd3iwRI+g6UceAh0kVAFzHyuHMr4AiWAdFuP8kmo3kPg8A7AdynwsBjgO5xw9I0waK6GAEPHIprP87AEdWvoi1lYbc20Dua0FP5NNkSxkfCmWfEDgLKjye5rdnNVxPrR6V0KFyVcNjoVuQAd0to6CZZoQiVC9KfcUmavxaFVRpsRDq7XDsKepaWV5UeLYEJZVnkRgZi7he0W6fjxuUDgDYcWR/m2VZ7Tbsyz8MvVaHEX0HuX0+flAGAGDnkQNdrLV4pBoDbvtJCIMqKRyuSjOEs6YulSU2uc8DAPsB50KOA7nHD0jXBgHPzIBQZ0X9vzaIUk8pyb0N5L4W9FQ+vYxQmRQOAHCdrPL4uetUw02AyoTwDpVrWDi+2c+C1QHrF7tgec+/zmiIGb8yLhQKtRLO/ArA6X5u2XWyc20ptYIzpwEAiVF9PH6eGNmw/eSZtm9oLzxbCqfLheRe0VCrVG6fJ0TGnCvrdGerKzqpxoB6dALUw+MAjRLK2FBoJqYAAMx/XdvhSy+kJvd5AGA/4FzIcSD3+AFp2kB3YzrUGfEwPfg1YLIBIf6bbAJsA7mvBT2VT5MtRaAOACDUWT1+LtTZGn4vWNeu8pxHymB+4Sc4dhXCVW6CIjwAmrGJ0C8cD/0dYwGlApZ3tohTeRGIGb8i6FxZphbKMjWWpfX4ua/UWcwAgCB9gMfPgwwN2+vq2z7yUmcxtVFWIACgtt7c4XpKRewx0Eg9OhH620Y3/ew6a4L5Lz/Bsc3/nr4l93kAYD/gXMhxIPf4AfHbQJkSAf29E2D7eh8cO06JU0mJyb0N5L4W9FSSJ1v6O90fvWr73vPTgbrKvv5Ys5+F0lrYvsmB8/AZBH10I3QLRsL6ZTaEaovo+26JN+P3V++vWea2bc6YyxDbK8oHtfE+X/QBy9ubYXl7M6BXQ5UYDt2CkQh84ypY3tsC68c7JNtvS+Q+DwDsB5wLOQ7kHj/gxTZQKRHw3Ey4yk2of3OTuGV3kdzbQO5rgRxJn2x5eM+FI7sQruKapiOPjUciL6YIajjyKNR6zvDby3m4DM7cEqiHx0GV1geOTSe6VF5HeCv+xqMgjUdF3MoKbCzL1nalRfbBj+7vsRjZfwhie0U1nYVqPMN1sbpzZ6Eaz0q1Jkgf2EZZDWe+gg2ez3xJxadjwOKAM68M5md/QGCIHvp7xsOx7SScB0s7V14nyX0eANgPOBdyHMg9fsB7baD7zWiojFGou28FUO9fT92UexvIfS2QI8mTraqxb7T4mavg3LWniWEeP2+8JrXxGtWucFXWA4DX36/grfhdRdUQHC4o40IBlcLtXgVlonht2VE73ljR4mdJUbEAWr4n62RZw/aW7um6UHzvaKiUShSVl8LhdLrdt3WqrORcWbHtqrdY/GUM2LfmQzM+GeqMOK9PrP7SBr6aBwD/aQNf9QPOhf7TB3r6etgWOcwD6tQoKJQKBL97vefPh8chbNvDEGqtqJ72TpvliUnubeAv48CX3wnkxqf3bLkKq+EqroEqKQLKPiFup1A145IAAI6dXbzOVqWEOrXhkjVXUXXXyhKRqPHbnHDuPw11ejzUI+Lg2NX8vSKitaXI4nvHICa8N06WnUZReanbEwmzDu4GAIwekNZmWTqNFsOSU7H7+EHsOX4QowYMbfb5loPZAOC23Ze8NgYAKCODGv7Hw0MDfEnu8wDAfsC5kONA7vED4raBfXsBXFX1btsVARpop6fCVW6CfdMJwOI/Z3wAtoHc14Keyufv2bKuanikt/6BiYDi/Hb1pL5Qp8fDebzc7YWEiujghie26C7IFQM0TUcsm1ErYfjD5IZHaZ6o8LvsXbT4AVi/PlfWPeMB7fmzOqpB0dBMM8JVYYbt16MSRdI5CoUC14yfAQBY9M1ncLnOv1hv/f7t2H38IFJi4pHRb3CzvyupLEN+aREstuan0q+dMBMA8M7qJbDaz18mlHPyKH7evQXhQSGYMtz9FL4vidYHNCooB/T2uA/VoGjorkmD4HDB7ofvGJH7PACwH8h9LgQ4DuQePyBeG9hW7EP9X9e6/Wd5azMAwFVY1bDt9fXSB9VBcm8Dua8FPZFPz2wBgPXLbGgmpEA71QhlnxA4dpyCMiYYmqkDINTbYX7xZ7fHUgY+OxPqkfGou3dFU4dThhoQvOxWOA+WwpVfAddZExThBqhHJkAVFwpXpRnmp9f43SMuxYofAOw/HYbt0n7QTjUi+NMFsG86DkWoHtppRkCphPnltQ2PPfUzCy6bi025u7Bu71b85p9PYLQxDaWVZ7F2Txb0Wh2eufG+Zi87BoBnP1+E7GO5ePd3z2HkBWeqZmRMwK/7tmLd3q24+R9/xCVDR6HaVIufd2+BS3DhyXkLW3xaoa+I1QcUOjVCPr8ZziNlcB4rh+tMHRR6NZTJEU3v5LAs2th0mYI/kfs8ALAfcC7kOJB7/IC446C7knsbyH0t6Il8nmzB7kTdA19Df9soaGakQjc/HYLJBvv6Y7B8sBWuExXtKsZVY4Htqz1QDYmBOjMJihA9YHfCVVQNyyc7YF2SDaHS/XSyz4kUfyPz02vg3FcM7dwh0F0/AoLNAceeIlj+sx3O/W2/q8oXtGoN3rr3GXy8dhV+yt6EJf/vOwTqA3Bp2mjcPWse+sa0/+V9CoUCL976ewzbuBrfbPsVyzeugVatQXq/QbhjxrUYnjJQwkg6SaQ+INTbUf/uFqjT46DOiIMi1AAIgKusDvYfDsK6Yh+cOSUSB9NJcp8HAPYDzoUcB3KPHxB9HHRLcm8Dua8FPZBCEIR2Hdtp7YY+kgflc1N9XQWfcz23ztdVICIiIvK5sG0P+7oK3YLP79kiIiIiIiLqiZhsERERERERSYDJFhERERERkQSYbBEREREREUmAyRYREREREZEEmGwRERERERFJgMkWERERERGRBJhsERERERERSYDJFhERERERkQSYbBEREREREUmAyRYREREREZEEmGwRERERERFJgMkWERERERGRBJhsERERERERSYDJFhERERERkQTUvq4AdR+u59b5ugpERERERN0Gz2wRERERERFJgMkWERERERGRBJhsERERERERSYDJFhERERERkQSYbBEREREREUmAyRYREREREZEEmGwRERERERFJgMkWERERERGRBJhsERERERERSYDJFhERERERkQSYbBEREREREUmAyRYREREREZEE1L6uAABAp4L+1tHQTDdCGRMCwWSDI7sQlg+y4Mqv7HSxilA9gr+8BcregXDsLULd3V+JWGkRyT1+QNw2UCqgu2EEtHMGQ5kQDsHqgDOnGJb/bIdzf7E09e8qkeJXJodDOz0VKmMkVMZIKGNCAABV4/8FOAWpai8OtoFobaCZ1A+aGalQDegNRUQAFFo1XGW1cB48A+sXu+A8dEbCILpA7vEDorWB/s5M6O/KbPHzuodWwbG1QIwai4vrIedCgHMBx0GP4vtkS6NC0KJroB4eB0duCazL9kAZHQTN1AHQTEhB3e9WwplT0qmiDU9MhcKgEbnCIpN7/IDobRDw4ixopxrhzK+AdcUeKEL00E4zIujd62F64js4NhyXMJhOEDF+TWYy9HdmQnC44DpVBcHigELv+2HeJraBqG2gntwXqsHRcOaWwnW2DrC7oEwIhWZyP2imGVH/8lrYvsmROKAOknv8gCTrge27XLiKa9y2uwqrRKq0iLgeci4EOBdwHPQ4Ph91upsyoB4eB9u6PJifXA2cO9iiXpuHoH9ciYCnpqP2ps+atreXZtYgaC8bAPMrvyDgsSniV1wkco8fELcNNDNSoZ1qhGPvadTdvxKwOQEAtq/3I+j96xHwxDTU7FwMmO0SRtQxYsZv35IPx/5iOI+WAVYnQlbdAUVsiLQBiIBtIG4b1L/yS1Pfv5CyXy8EL54Pw4OTYFt9EHC4RI6i8+QePyDNemD7PheO7EJpKiwyroecCwHO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jPgPl1Zj+e58DI+LwPiUKIToNbA6XThdZcaXO49jWXY+zngYaP5CrD4QHxaAK869P6JRRKCu2TZ//ZLFcSDGOKjB2kPFGBgdCmNUCAK1aphtDhw7W4t1ecX4796TcPjx05fEaIOYEANUSgUAYG5agsffKa42+2WyxXmA64Hc4wc4FwJsA7mvBT2dT85sERERERFR98UzW+3jf89BJSIiIiIi6gGYbBEREREREUmAyRYREREREZEEmGwRERERERFJgMkWERERERGRBJhsERERERERSYDJFhERERERkQSYbBEREREREUmAyRYREREREZEEmGwRERERERFJgMkWERERERGRBJhsERERERERSYDJFhERERERkQSYbBEREREREUmAyRYREREREZEEmGwRERERERFJgMkWERERERGRBJhsERERERERSYDJFhERERERkQSYbBEREREREUmAyRYREREREZEEmGwRERERERFJgMkWERERERGRBJhsERERERERSYDJFhERERERkQSYbBEREREREUmAyRYREREREZEEmGwRERERERFJQO2rHUcG6XH3hAEYmxyJUL0G5SYrNhwtxUdZR1BrdbSrjAWjUpCR0AspvYIQatBCEASU1FiwveAsluw6gbI6i8RRdJ4Y8V9sRFw43rwhEyqlAou3HsX7m/NErrW42AZsAzHiH53UG5nJvWGMDMGAqBCEGrTYW1SBhUu3Slx7cYjVB0L0GtyR2R+T+kejV6AO1RY7tuWX4f3NR2QxF3bX+IGut4FercKk/tGY0DcKqdEhiArWwyUAJytM+PnQaXy1Ox8Ol+CFSDqHfYBrAcA24HrYc/kk2YoLDcD788chIlCH9UdLUFBhwuCYUMwbmYLMlEjcvSQLNRZ7m+VcNSwRZrsTuwsrUGG2Qq1UwhgVgvmjUjA3LR6/W74NeWdqvBBRx4gV/4UCNCo8PWs4LA4nArU+y6HbjW3ANhAr/mtHJGJy/xhY7U4UVpkRatB6ofbiEKsNQvQavD9/HJIigrCz4Cx+PlyMpIhAzBmagPEpUbhryRacrq73QkQdI/f4AXHaYER8OJ6/YgSq623Ydaoc64+WIkSnwcR+UXjw0kG4dEA0HvhqO2xOl5eiaj/2Aa4FANuA62HP5pPe9+i0IYgI1OG1X3KwYndB0/YHJw/C/FEpWDgxFX9fe6DNchZ8stHj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EREREZEEmGwRERERERFJgMkWERERERGRBJhsERERERERSYDJFhERERERkQSYbBEREREREUmAyRYREREREZEEmGwRERERERFJgMkWERERERGRBJhsERERERERSYDJFhERERERkQSYbBEREREREUmAyRYREREREZEEmGwRERERERFJgMkWERERERGRBJhsERERERERSYDJFhERERERkQSYbBEREREREUmAyRYREREREZEEmGwRERERERFJgMkWERERERGRBJhsERERERERSYDJFhERERERkQSYbBEREREREUmAyRYREREREZEEmGwRERERERFJgMkWERERERGRBNS+2nFkkB53TxiAscmRCNVrUG6yYsPRUnyUdQS1Vke7ylgwKgUZCb2Q0isIoQYtBEFASY0F2wvOYsmuEyirs0gcReeJEf/FRsSF480bMqFSKrB461G8vzlP5FqLS4w2GJ3UG5nJvWGMDMGAqBCEGrTYW1SBhUu3Slz7rhMj/rduGIuMhF4tfj75jR9gc7rEqrLo2AacC+Q+DwBcD+UeP8A2ALgecC7suXySbMWFBuD9+eMQEajD+qMlKKgwYXBMKOaNTEFmSiTuXpKFGou9zXKuGpYIs92J3YUVqDBboVYqYYwKwfxRKZibFo/fLd+GvDM1XoioY8SK/0IBGhWenjUcFocTgVqf5dDtJlYbXDsiEZP7x8Bqd6KwyoxQg9YLte86sfvAh1uOeNzudAliVVl0bAPOBXKfBwCuh3KPH2AbAFwPOBf2bD5ZiR+dNgQRgTq89ksOVuwuaNr+4ORBmD8qBQsnpuLvaw+0Wc6CTzZ6PEJxZVoCnpiRhnsmGPHIqp2i1l0MYsV/od9PGYwgrRqfbTuGhZekil1l0YnVBp9vP473NuWhoKIOUcEGrLrrMimrLRqx+8BHWZ4XFn/GNuBcIPd5AOB6KPf4AbYBwPWAc2HP5vV7tuJCA5CZHInT1WasvKBDAcCHW/Jgtjlw+eBY6NWqNstq6VTwusPFAICE8MCuV1hkYsbf6JJ+UZgzNAGv/5qLMpN/XyYAiNsGB4qrcKK8Dn56sMojKfpAd8M24Fwg93kA4Hoo9/gBtgHA9YBzYc/n9WQrIzECALA9/ywu7gtmuxP7TlfCoFFjaGxYp/cxsV8UAOBoWW2ny5CK2PGHG7R4fEYa1h8pwY8HT4tbWYl4ow/4Mynin5raB7eM6YsbR6YgMzkSGpV/P/uGbcC5QO7zAMD1UO7xA2wDgOsB58Kez+uXESaFBwEATlaaPH5eWGkCkiOREB6InSfL21Xm3LR4RAUZEKBVoW/vYIxO7I3iajPe3nhItHqLRez4H5+RBqVCgVc6eKmRL0nRB7oTKeJ/cU56s58rTFa8ui4Hvx4p6VplJcI24Fwg93kA4Hoo9/gBtgHA9YBzYc/n9WQrUNewyzqb5xv96s49cSVYp2l3mVcOTcDQ2PCmn3OLq/Ds6j0orDJ3oabSEDP+OUPjMal/NJ76NhuVZpt4lZSYFH2gOxEz/o1HS/HlzhPIO1ON6no7YkIMmD0kDvNHpuCFOel4dNUObM0/K17lRcI24Fwg93kA4Hoo9/gBtgHA9YBzYc/n34+qaqe7lmQBAEL0GqRGh2LhBCMW3zwBT327G9sK/GtQiSUmxICHLx2EdYeLsS7P/47UkHcszc5v9vPJShPe3ZSHs3VWPDJ1CO69JNXvFhaxyb0NOBfQheS4Hl5I7vED8m4Dua8H5J+8fhGr6VyGHqT1nKEHncvwa60de9wxANRY7NhRcBYPrdwOq8OFZ2YPh07tX9fpihX/kzPTYHW48I913eOSoQtJ2Qe6A2/E/83+U3A4XTBGhSJA4383FbMNOBfIfR4AuB7KPX6AbQBwPeBc2PN5/cxWQWUdACCxhafixJ/bfqqFa1fbo87qwIHTlZg8IAYpvYJxqLS602WJTaz4U6NCEazX4If7pnv8/PbM/rg9sz/WHy3B4//L7kKNxeeNPuDPvBG/zemC2eZAiEELvUYFs93Z6bKkwDbgXCD3eQDgeij3+AG2AcD1gHNhz+f1ZCv7ZAUAYExybyiAZk9eCdCoMCw2HPV2Bw6crurSfiKD9AAAp8u/3hQuVvxrcoug93B0JiEsAOkJvZB3phqHSmv88gWG3uoD/sob8SeGByLEoIXJakd1vf8dDWMbcC6Q+zwAcD2Ue/wA2wDgesC5sOfz+vnkomoztuaXITY0ANemJzX77M7xRgRo1fgh9zQsjvNHHZIiApEU0Tzjjw7WIzzA85uxrxqWgMF9wlBSU49jZ/3rUadixf/PX3Px8k/73f77LqcQALD5eBle/mk/Vu5p/s4GfyBWG3RXYsXfJ8SAEL37ZQdhBi2eunwYAODnw8VwCv73wg22AecCuc8DANdDuccPsA0ArgecC3s+hSC0r9eNe221aDuNCw3A+/PHISJQh/VHS1BQbsLgPqEYldgbBRV1uHtJFmos5488ZD0y260Ok/pH46U56dhfXIWiKhMqTDaEGDQY2icM/SNDYLI58MdVO7G7sEK0eotFjPhbMntIHJ6+fDgWbz2K9zfnSRZDV4nVBsPiwnHl0AQAgEGrwhRjH1SYrMg6Udb0Oy/+uM8LEXWMGPHPHhKHP00bin1FlSiqNqPGYkdMsAHjUiIRrNcgt6QKD63Y3vQkI3/DNuBcIPd5AOB6KPf4AbYBwPWgu86FjfWg1vnkaYRF1Wbc/sVm3DXeiMzk3hifEoWzJiuW7TqBj7KOoLYdA+FwaTWW787H8LgIjE+JQoheA6vThdNVZny58ziWZefjTK3FC9F0nBjxd3ditUF8WACuGBrfbFtEoK7ZNn/8kiXOGKjB2kPFGBgdCmNUCAK1aphtDhw7W4t1ecX4796TcPjxa+TZBpwL5D4PAFwP5R4/wDYAuB5wLuzZfHJmi4iIiIiIui+e2Wof/3sGKBERERERUQ/AZIuIiIiIiEgCTLaIiIiIiIgkwGSLiIiIiIhIAky2iIiIiIiIJMBki4iIiIiISAJMtoiIiIiIiCTAZIuIiIiIiEgCTLaIiIiIiIgkwGSLiIiIiIhIAky2iIiIiIiIJMBki4iIiIiISAJMtoiIiIiIiCTAZIuIiIiIiEgCCkEQBF9XgoiIiIiIqKfhmS0iIiIiIiIJMNkiIiIiIiKSAJMtIiIiIiIiCTDZIiIiIiIikgCTLSIiIiIiIgkw2SIiIiIiIpIAky0iIiIiIiIJMNkiIiIiIiKSAJMtIiIiIiIiCfx/P0XyRSfBqL8AAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# | hide\n", + "\n", + "monotonicity_indicator = (\n", + " [-1] * (input_len // 3)\n", + " + [0] * (input_len - 2 * (input_len // 3))\n", + " + [1] * (input_len // 3)\n", + ")\n", + "\n", + "with replace_kernel_using_monotonicity_indicator(\n", + " layer,\n", + " get_monotonicity_indicator(\n", + " monotonicity_indicator, input_shape=input_shape, units=units\n", + " ),\n", + "):\n", + " wt = \"$(|W^T|_t)^T$\"\n", + " title = f\"kernel {wt} after applying monotonicity indicator $t={tuple(monotonicity_indicator)}$\"\n", + " display_kernel(layer.kernel, title=title)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Below is an example of a kernel $W\\in \\mathbb{R}^{9 Γ— 12}$ with 12 units and 9 inputs before and after applying the monotonicity indicator $t =(-1, -1, -1, 0, 0, 0, 1, 1, 1)$:\n", + "\n", + "![original kernel](images/kernel__W__in__mathbb_R___9_x_12__.png)\n", + "![replaced kernel](images/kernel__(|W_T|_t)_T__after_applying_monotonicity_indicator__t=(-1,_-1,_-1,_0,_0,_0,_1,_1,_1)_.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Monotonic Dense Layer" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Monotonic Dense Unit (`MonoDense` class) uses weight constrains and activation functions constructed as explained above to construct partially monotonic neural networks. The below is the figure from the paper for reference.\n", + "\n", + "In the constructor of `MonoDense` class:\n", + "\n", + "- the parameter `monotonicity_indicator` corresponds to **t** in the figure below, and\n", + "\n", + "- parameters `is_convex`, `is_concave` and `activation_weights` are used to calculate the activation selector **s** as follows:\n", + "\n", + " - if `is_convex` or `is_concave` is **True**, then the activation selector **s** will be (`units`, 0, 0) and (0, `units`, 0), respectively.\n", + "\n", + " - if both `is_convex` or `is_concave` is **False**, then the `activation_weights` represent ratios between $\\breve{s}$, $\\hat{s}$ and $\\tilde{s}$, respectively. E.g. if `activation_weights = (2, 2, 1)` and `units = 10`, then\n", + " \n", + "$$\n", + "(\\breve{s}, \\hat{s}, \\tilde{s}) = (4, 4, 2)\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![mono-dense-layer-diagram.png](images/mono-dense-layer-diagram.png)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saved figure to: images/input__x__in__mathbb_R___9_x_12___with_batch_size_9_and_12_inputs.pdf\n", + "Saved figure to: images/input__x__in__mathbb_R___9_x_12___with_batch_size_9_and_12_inputs.png\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxoAAAGxCAYAAADlBMBWAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAACz00lEQVR4nOzdd3hUVf748ff0SS+QkJCEJEASCDX0JigoroB9LeiqX/1ZcF27W/zq6rrquutXt7nrWteyriIW1oK4CirSu7QgoQYSEgjpmcn0+f0xJBIykHamhHxez+PzyL2TM+ecOffc+7n3nHM1Xq/XixBCCCGEEEIopA11BoQQQgghhBBnHgk0hBBCCCGEEMpJoCGEEEIIIYRQTgINIYQQQgghhHISaAghhBBCCCGUk0BDCCGEEEIIoZwEGkIIIYQQQgjlJNAQQgghhBBCKCeBhhBCCCGEEEI5CTSEEEIIIYQQykmgIYQQQgghhFBOAo0eoKGhgSeffJJzzjmH4cOHc/XVV7N169Yupbl+/XrmzZvHWWedRV5eHh9++GGrz7z44otcfvnljBo1igkTJjBv3jyKioq69L1CCCGEEKJ7kECjB3j44YdZsWIFv//97/nkk0+YPHkyN954I0eOHGnxuU2bNuFwOFr9/aFDhygpKWmxzWq1kpuby0MPPYTZbPb7vevWreOaa65h/vz5vPHGG+h0Om688UZqamqUlU0IIYQQQoSnDgcaJSUl5OXl8atf/SoQ+RGK2Ww2vvjiC+6//37Gjx9PZmYmd955J5mZmbz99tvNn/N6vTzxxBPcddddOJ3O5u2lpaXccMMNLT4LMG3aNO677z5+9KMfodX6b0avvvoql19+Obm5ueTl5fH0009TVVXFpk2bAlPYk3Smraps393tWAlVfrtbPXUX06dPZ/r06aHORrtIGxBCiDPTGf1EI1xOXqWlpfzpT3/ikksuYfTo0eTl5fn977rrrlP+3S6XC7fbjclkarHdZDK1uODXaDS89NJLHDhwgHvvvReXy0V5eTk33HADI0eO5P777+9yXiwWCx6Ph9jY2C6n1RXh0i5UOJPKEg68Xi8LFizgiiuuoKCggJEjR3LZZZfxzjvv4PF4Qp29gPr88895/PHHueaaaxg1ahR5eXk88MADp/x8dXU17733HnfccQfnnXcew4cPZ/To0cydO5f33nvvjK4vOe6EEKJ99B39gz59+vDZZ58RExMTiPyccV5//XWeeeYZnE4nw4cPZ+bMmURHR/v9bGZmZpvprVixgkceeYS4uDgOHTpEv379mvc5nU60Wi233XYbs2bNAiA6OpqCggL+8Y9/kJubS+/evfn000/57rvvWvwtQO/evXnjjTe47rrruOeee9i9ezeDBw/m6aefRqfTdaEWfJ588kkGDx5MQUFBl9NqD2mr3UM4/U4PPPAAn376Kb169WL27NmYzWZWrVrFb37zGzZv3szTTz8d6iwGzD/+8Q++//57IiMjSUlJYd++faf9/Oeff85vfvMbkpKSGD9+PH379uXYsWN8+eWXPPzwwyxfvpy//OUvaDSaNr87nNqAEEIIdTocaBgMBgYMGBCIvJxx/vSnP/HCCy9QUFDAE088wcCBA7uc5sqVK3nmmWfQ6/V8/vnn/OIXv2ix/6677mLVqlX07t2bcePGAfD000/zv//7v0ydOhWdTkd+fj6zZ89mx44drdLv06cPf/zjH7n88stJSkpq/q6ueuqpp9i4cSPvvPOOkqClPaStdg/h8jt9+eWXfPrpp6Snp/Pee++RmJgIgMPh4K677uKjjz7i3HPPZebMmSHOaWA8+OCDpKSkkJmZybp167j++utP+/msrCz+8Y9/cPbZZ7cYPnnfffdxxRVX8N///pcvvviC888/v83vDpc2IIQQQi0lczRO3FZSUsK9997L+PHjGTZsGJdddhlff/31adPZu3cvP/3pTxk3bhwjR45k7ty5rFixosXn165dS15eHs8995zffJ08Hvm5555jxowZACxcuLDFECV/KySd7KabbiIvL4///ve/LbZ7vV5+9atfkZeXxzPPPHPKv1+7di0vvvgikydP5q233lISZABs27aN4cOHs3LlSiZPntxin8PhwOv1ctttt/HRRx81b+/Xrx9vvfUWmzdv5ptvvuH999/H5XKRkZHRKv2qqioefPBBpkyZgsFg4NFHH+3yEIjf/e53LFq0iDfeeMPvd/pjsVgYOnQoV199dYvtNpuNYcOGkZeXx3/+858W+95++23y8vJ4//33Af9ttSPtor1tuT3a08abfPjhh9x5553MmDGD4cOHM2rUKK6++uoWv2lHy7J161buuecezjrrLIYOHcqUKVO46aab+Oyzz/zmQUXZly5dyg033MCUKVOav/MnP/kJ//73v1t918m/0/Tp0085xPBUQ1a2bNnCXXfdxeTJkxk6dCjTpk3jkUceabXowal8+eWXgO/YbwoyAIxGI3fffTcAb731VrvL397f0V89tLf+vV4vb731FrNnz2bYsGGcddZZ/Pa3v6W+vr7d+WwyYcIEsrKy2vUEAmDixIlMnz691RytpKSk5uN23bp17UrrVEOROlonHT2vQODOLe1t/0IIcSbr+q3qE5SWlnLFFVeQkZHBxRdfTG1tLZ999hk//elPee2115gwYUKrvykpKeHqq68mNzeXq666ioqKCj777DNuueUWnn322eYhQB01btw4rr/+et58800GDRrEueee27xv8ODBbf79L37xCy699FL+8pe/cO655zbfhf/DH/7AwoULueqqq047fvmVV14hIiKCp59+WskTAYDKykri4+PR6/Vs2LCBm266qcX+TZs2MWLECHr16kVFRUWrv4+MjCQyMpLa2lpWrFjBz3/+8xb7a2pquOmmm0hOTuYf//gHR44c4Sc/+QmPPPIIjz/+eLsvQE70xBNPsHjxYt58880O3bGMiopi2LBhbN26lYaGhubhZieujLVmzRouueSS5r9Zs2YN4LsAOpX2tovOtOVT6Wgb/81vfsPAgQMZO3YsSUlJ1NTUsGzZMn7xi1+wf/9+7rnnng6VZcGCBfzmN79Bq9Uyffp0srKyqKysZPv27bzzzjutvl9F2d99910eeeQRkpKSOOecc0hISKCyspJdu3bx4Ycfcu21157276+//nq/F8tff/01O3bsaLXS2fvvv88jjzyC0Whk+vTppKSkUFxczHvvvcdXX33FggUL6Nu372m/89ixYwCkp6e32tcUIG/cuBGHw4HRaDxtWtD+3/FkHan/J598kn/9618kJSVx1VVXodfrWbp0KVu2bGl3PgOhqc9T9fSyo20yUOcVaN9x19X2L4QQZwxvBx06dMibm5vr/eUvf9lqW25urve5555r8flvv/3Wm5ub67355pv9ppObm+v9/e9/32Lf1q1bvfn5+d4xY8Z46+vrvV6v17tmzRpvbm6u969//avffJ1zzjnec845p828dsQvf/lLb25urveDDz7wer1e7z/+8Q9vbm6u9+677/a63e5T/l19fb130KBB3ocffrhT33sqH3/8sfett97yNjQ0eG+55ZZW+5999lnv9u3bvRs3bvQ+/vjjzdu//fZb7zfffOM9ePCgd8WKFd6LLrrIe8UVV3gdDkfzZzwej/fKK6/03nDDDV6bzda8ff/+/d7Jkyd7//jHP7b4roaGBm9hYaG3sLDQO3z4cO9zzz3nLSws9JaWljZ/5je/+Y23oKDAu2rVKu/Ro0eb/2toaGhXef/85z97c3NzvV9//XXztmeeecY7ePBg7/XXX++dOnVq83a32+0dN26cd8aMGc3bTvX7n65ddKYtn0pH23iT4uLiVmnZ7Xbv9ddf783Pz/eWl5e3qyxer9e7e/dub35+vnfs2LHeoqKiVvvLysr85rerZb/00ku9Q4YM8R47dqzVvsrKyhb/bu9xumLFCm9+fr73vPPOa5HGvn37vEOGDPGee+65LerG6/V6V61a5R00aJD3pz/9aZt5vu+++7y5ubnet956q9W+wsLC5rrZs2dPm2l5vR37Hb3ejtf/xo0bvbm5ud5zzz3XW11d3bzdZrN5r7zySm9ubm6rPrG9mvrb+++/v8N/63Q6vXPmzPHm5uZ6v/3223b9TVvHanvrpDPHXCDOLR1p/0IIcSZT+kQjLS2N22+/vcW2s846i759+57yBXExMTHccccdLbYNGzaMCy+8kIULF/Lll19y6aWXqsxmu91999189tln/O1vf8NqtfKnP/2JKVOm8PTTT59ySVfw3U3zeDwcPHiQJ598st3fl5mZyU9+8pNT7l+1ahW33XYb69atY+zYsa3279ixg5/97Gfcfvvt3Hfffc3b6+vr+eMf/0h5eTnx8fHMnDmTe++9F4PB0PwZjUbD3XffTUFBQYsVqrKysnjzzTdbPc3Yvn17izHczz33HM899xyXXnopv//97wGal8T9n//5nxZ/+7Of/Yw777yzzfqYOHEizz//PKtXr+bss88GYPXq1QwZMoSZM2fy29/+lv3795Odnc3OnTupqalRNn6+M235VDraxk+epA++4TvXXnsta9asYfXq1S2e5JzOO++8g8vl4qc//Sk5OTmt9qekpLTapqrser3e79O8E4cltVdRURF33XUX0dHRvPTSSy3SeOedd3A6nTz00EP06dOnxd81De/5+uuvWzwZ82fatGl8+umnvP7668yePZv4+HjAt8jCX//61+bP1dXVtSvPnf0d21v/TcN05s2b15xX8K0od99997U5xyJQnn32WYqKipg2bRpnnXWWkjQ72ibD4byisv0LIUR3pTTQGDRokN9H5SkpKXz33Xd+/yY/P9/vyX/cuHEsXLiQwsLCkAUaqamp3HDDDbz00ks8/vjjFBQU8Le//a3dwxHWrFnTPJynPcaNG3faQKO4uJisrCzeeuutFnXidrs5ePAgR48e5fbbb2f27NkMGTKkef+sWbPaNVRg0qRJfrf379+/1bbx48eza9eu06bX1v62jBw5ErPZzOrVqwFfwFRYWMjNN9/cPFRi9erVZGdnN9dzR4Y0nU5n2vKpdLSNHz58mJdffpnVq1dTVlaGzWZr8XftnXMANOe1Ixd8Ksp+4YUX8vvf/57Zs2cza9Ysxo0bx6hRozp1kXX06FFuu+02HA4HL774IllZWS32N+Vp3bp1bNu2rdXfV1ZW4na7OXDgAEOHDj3l98yePZuPPvqIFStWMHv2bGbMmIHRaGT16tVUVFTQt29fDh8+fNqbDCfq7O/Y3vovLCwEaF704USjR48O2qILJ3rzzTf55z//Sf/+/ZWu0NXRNhnq84rK9i+EEN2Z0kDjVO9H0Ov1p5xQ3Lt379Nub2hoUJO5TjrxxPDkk08SERHR5t+kp6ej0Wi49dZbWzxZ6Iq9e/c2z3HYtGkTW7dupa6ujoaGBlJTU9m7dy833XQTF154YbuWye0OjEYjo0ePZtWqVc0v+nO73UycOJEBAwaQlJTEmjVruOaaa1i9ejUajUZZoNGZtnwqHWnjhw4d4sc//jF1dXWMGTOGKVOmEB0djU6no7S0lIULF/p9e/upNM1zOPlO/+moKPuNN95IQkICb7/9Nv/6179444030Gg0jB07ll/84hcMGzasXelYrVbmzZtHWVkZzzzzDGPGjGn1maY3zb/66qttpnU6Op2OF154gddee41PPvmEhQsXYjKZGDduHH/961+bJ4S352KxK79je+u/6bft1auX388mJCS0mU+V3nrrLZ588kkGDhzI66+/3uIpS1d1tE2G+ryiqv0LIUR3pzTQ6IymCZin2t50V6rpLqLL5fL7+bq6OuUvgvvkk0/4wx/+QFJSEhUVFbz55ps89thjbf5ddHQ0kydP5oMPPmDevHlERkZ2OS8rV65k0qRJlJWVkZmZyZ/+9Cfq6+u59dZbefvtt3n66acpKCg4Y4KMJhMmTGDlypWsXr2azZs3YzKZGDVqVPO+5cuX43A42LhxIzk5OX4vukKtvW0c4LXXXqOmpoannnqKyy67rMXnP/30UxYuXNih7256L8GRI0dOO2woEC655BIuueQS6urq2Lx5M19++SUffPABN998M4sXL27zgt3tdnPfffexY8cO7r33XubMmeP3c03l2rhxY5fLaDAYuPXWW7n11ltbbLfb7Rw4cICEhIR2rZym+nf0p+m3raysbNXHuFwuqqur/Q6NC4TXX3+dp556itzcXF5//fWQH4cdOeYCdW7pavsXQogzQcjfDF5YWOj37lLTsoj5+fnAD3e0ysvLW322uLjY7wo1TY/a3W53h/O1bNkyHnzwQXJycvj444/Jzs7m/fffb/MlVk1uvvlmKisr+fWvf43X6+3w959szZo1TJw4kRUrVjQPcYqJiWHcuHEsXbqUW265hZdffrnL3xNuThwitWbNmhZzSCZOnEhNTQ1vv/02Vqu13U8zutIuOqO9bRx8bRnwO9fE31KhbZVl5MiRACxfvrxjmVYoNjaWadOm8cQTT3DppZdSU1PD+vXr2/y73/3ud3z99ddcfvnlzJs375Sfayrjhg0bVGW5lUWLFuF0Ok8Z7Jyso79jZzS1G3/pbdy4MWjt+6WXXuKpp55i8ODBvPHGGyEPMqBjx1ygzy2dbf9CCHEmCHmgUV9fz9///vcW27Zt28Ynn3xCTEwM5513HuCbJxAdHc3SpUuprKxs/qzNZuOJJ57wm3ZsbCwajYaysrIO5WnDhg3cdddd9OnTh1dffZXExETuueceXC7Xad+dcaKJEydy66238umnn3LzzTc3X3h0htPpxGKxEB8fz6pVq1q8P+OGG27gjTfeIDExkREjRvDVV191+nvC0ZAhQ4iJiWHp0qXs3r27xdK1TYHFSy+91OLfbelsu+is9rZx8E16hdYXj8uXL29+P8iJ2irL3Llz0ev1PP/88+zZs6fVfn8XVyqsWbPGb4BdVVUF0Gp52pO9/vrrvPXWW0yaNKnNp4jXXnstBoOBp556iv3797fa73A42h2E+Ls43blzJ08//TRxcXHccsst7Uqno79jZzTNMXjhhReah4+B7+nLH//4RyXf0Za///3vPPvsswwZMoTXX389bO7Sd+SYC8S5pavtXwghzhQhHzo1duxY3n//fbZu3cqoUaOa1zv3eDz89re/bX7EbTAYuP7663n++ee55JJLOO+883C5XKxatYrk5GSSk5NbpR0VFcWIESPYsGED999/P9nZ2c3vEhg0aJDf/OzcuZN58+YRExPDa6+91pzuj370I4YOHcrSpUvZsGGD37HiJ7v33nuJi4vjT3/6E+effz7Dhw9nwIABpxzecapVp7Zs2cLIkSPxeDyUl5e3eB9AYmIigwYNYsWKFdx000387Gc/45xzzunUOy/CkU6na35qAy3fkZGWlka/fv04ePBg8+fa43TtIhDDi9rbxgGuueYaPvzwQ+6++27OP/98kpOT2b17N8uXL+eCCy5o9YK9ttr4wIEDefTRR3n00Ue55JJLmDFjBllZWVRXV7N9+3aioqL417/+pbzMP/vZz4iMjGTkyJGkpaXh9XrZsGED27ZtY8iQIadceACgoqKCP/zhD2g0GnJycnjhhRdafWbw4MHN7y8YMGAATz75JA899BBz5szhrLPOIisrC5fLxeHDh9m4cSMJCQl8/vnnbeb7xhtvxGw2k5OTQ1RUFHv37mXZsmWYTCZeeOGFds916ejv2BmjR4/muuuu41//+hdz5szhRz/6UfN7NGJjY0lKSupQekuWLGHJkiUAze/h+e6775pfopeQkMAvf/nL5s8vXLiQv/71r+h0OsaMGeO3HaWlpbUaOhYMHTnmAnFu6Ur7F0KIM0nIA4309HQee+wxnnnmGebPn4/D4SA/P5877rij1Uo5d911FxERESxYsIAFCxbQu3dvZs2axZ133sns2bP9pv/000/z1FNPsWLFChYtWoTX6yUlJcVvoFFcXMzNN9+MRqPhlVdeabU85f3338+NN97I008/zYIFC9osm0aj4f/9v//HzJkzeffdd/n222/54osvTjkR8VSrTq1cuZLPPvuM5cuXN89PONH/+3//j7lz55KUlMT+/fv5/PPPueCCC9rMX3cxceJEli5dSnR0dKtVgyZOnMjBgwebn3y016naRXuDlY7oSBsfNGgQb775Jn/+859ZtmwZLpeLQYMG8be//Y2YmBi/F6httfErr7ySnJwc/vnPf7Ju3TqWLl1KfHw8eXl5XHHFFcrLC75jZcWKFezYsaP5Qr1v37488MADzJ07t8XSyiez2+3NE3zfeOMNv5+59NJLW7wo7eKLL2bQoEG89tprrF27lhUrVhAZGUlycjLnn39+u4+H888/n88++4yPP/4Y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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saved figure to: images/kernel__(|W_T|_t)_T__in__mathbb_R___12_x_18___after_applying__t=[1,_1,_1,_1,_0,_0,_0,_0,_-1,_-1,_-1,_-1]__in__mathbb_R___12__.pdf\n", + "Saved figure to: images/kernel__(|W_T|_t)_T__in__mathbb_R___12_x_18___after_applying__t=[1,_1,_1,_1,_0,_0,_0,_0,_-1,_-1,_-1,_-1]__in__mathbb_R___12__.png\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA2oAAAGwCAYAAADYEZZrAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAC3eklEQVR4nOzdd3xUVf7/8de0ZNILpEASkkhIABOagKEICgqK4NeuqLuurmJZbOsW/drWba6ube2L69e6otjW7qroD6WFqnQCQkIakEISMpPMZMrvjxQzySSZTO4k9zqf5+PB47HOJGfeOfu5594z995zdW63240QQgghhBBCCNXQD3YAIYQQQgghhBCeZKImhBBCCCGEECojEzUhhBBCCCGEUBmZqAkhhBBCCCGEyshETQghhBBCCCFURiZqQgghhBBCCKEyMlETQgghhBBCCJWRiZoQQgghhBBCqIxM1IQQQgghhBBCZWSiJoQQQgghhBAqIxM1IYQQQgghhFAZmaj9hKxevZqcnJwe//3nP//5yXyu0jZu3Mj111/PKaecQk5ODu+++26Xn/nnP//JBRdcwKRJk8jPz+f666+nsLAw4J/rdDp5/PHHmTNnDnl5ecyZM4fHHnsMh8PRr88WQgghhBB9M1DHjEalAovBN3nyZFavXt3+3xdddBFnnXUWV199dftrMTExP5nPVZrVaiU7O5tzzz2X3//+915/ZsOGDVx22WXk5eXhdrt54oknuOqqq/j444+JjY1t/7ktW7aQm5tLSEiIx++XlJSg0+lITU3t0+c+//zzvP766/ztb38jOzubvXv3cscddxASEsKvfvWr/v/xQgghhBDCJ0oeM/bI3UclJSXu7Oxs9+9///u+/qpm9Odv/N3vfufOz893WyyW9teeeOIJd3Z2trukpETJmD2qr6935+TkuD///HOv7/c10/bt293Z2dnuFStW9OtztWLChAnud955p9efa2hocI8ePdq9cuXK9tdcLpf7vPPOc1933XVuu93e/nppaan7tNNOcz/44IN9/twlS5a4f/e733m89rvf/c69ZMkSX/4cv7388svus846y52Xl+fOzs52v/jiiwH9vJ8CpcbIYBhr+2r9+vXu7Ozs9n/z588f7EhCCCH8UF1d7TGeZ2dnD3Ykv/XnmLE3ckZNQdu2beP999/n97//PeHh4b3+vMVi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p6ens3r1ag4ePOh1MSxpu29tCxHMAnXM6M/xIih3zNibfk3UysrKuOaaaygpKeGhhx7inHPO8Xh/+fLlNDc3c9ddd3U5UJo2bRpz5szh66+/pqGhweMAZ+jQoR4HIN6kpKRwww03eLx2yimnMHz4cLZt29bvDH1x5MgRnE4nCQkJff7dtoOmtgOZpqYmXnvtNcaOHcspp5yC2+1Gr9d7HOi8/PLLOJ1OfvnLX3q9T2znzp1ERUX1+fSqL6KioggNDaWioqLfn1taWorL5eLQoUP85S9/8TlDeno6V1xxRY8/s3btWq677jo2bNjAlClTvGZdunQpN9xwQ/vEYMeOHR7XVD/55JM8+eSTHqsbvv766wD84he/8Ghv6dKl7ZMWnU7HLbfcwsSJEz02+IyMDF555ZUulwX48rl33303//jHP9rvfUhISODiiy/u0zPUOk9mAEJCQrj88stZv34969at69PErzuB3O698efvioqK6tJ3eXl5LFq0iPfee48vvvii/cxRf36no9NPP52EhATeffddbrvttvZn7NXX1/Ppp58yYsQIpk+f7tPf7Ov4By2XqALccMMNHitNhYSE8Otf/5rLLrvMp89ss3PnTgCfz5y/8sorfbpJ/LzzzpOJmka0XQnS3YI3ba/3ZaIubQshvAnUMaM/x4ug3DFjb/yeqB08eJBLLrmExsZGnn/+ea/fDH333XdAy7e/27dv7/J+dXU1TqeToqIicnNz218fPXp0lwcFdzZ69GivN+MlJye3f25/MvRFbW0tQJ+W22zTedB+5513OHbsGPfeey/QctAfERHR/n5tbS3vvPMOCQkJ3R5UX3nllVx55ZV9zuKrmJgYqqurFfvc9evXe71cqztTp07tdaJWXFxMRkYGr732msfBs9Pp5NChQxw9epQbbriBs88+u/0M4Mknn8zevXt7bLe399t0d8B9wgkndHnNl8+NjIzkrrvu4q677vLp870pLy/n+eefZ926dVRUVHjcRwoodr9mILd7b/z5u8aOHev1i5mpU6fy3nvvsWvXri6TLn9+pyOj0cjFF1/M008/zX//+9/2Ze3ff/99mpqauPjii32+tt/X8Q9aznRDyyMeOpswYUKfLx/ZtWsXJpOpy0qz3fH26BEhhDLmzJnTpy9C1LbUu5bzazk7aDe/0seM/hwvgrLHjD3xe6JWVFREbW0tY8aM6fab1bYJTNvqhN3pfFOtL6c0u5sUGY1Gj/t2/M3QF23349lstj7/bsdLH51OJ//3f//HiBEjmD9/fvvPdFwZ8t///jdWq5UbbrjBr4NaXzz44IMUFhZ222c2m63LqWF/pKamotPpWLJkSZ8vd+tJ27PGoOXa4m3btlFfX09DQwPDhg3jhx9+4Oqrr2bRokU+L/WvdSUlJVx44YXU19czefJkZs6cSWRkJAaDgbKyMt577z3sdrsinxXI7b4zf/+u7j6r7XVvj8zw53c6u+SSS3juued488032ydqK1aswGQyccEFF/T6+218Hf/gxy+BhgwZ0uXnDQYDsbGxPn+uw+GgsLCQkSNHBmz8Edrh7dL8jtpe9+cRE9K2b9LS0vq0LfpyD+xA0nJ+LWcH7eUPxDGjFo4X/Z6onXbaaWRmZvLoo4/yi1/8gv/7v//r8lyQtgFr8+bNfbqsUMkVY/zN0Bfx8fHAjweofdHxjNpnn31GaWkp999/v8e35ZGRkTQ0NGCz2fj3v//dp2e1+WP79u1dbqZs43K5qK+vJzU1td+fExkZyYwZM3jnnXe4/vrr+3x/X3fWrFnD9OnTqaioID09nccee4zjx4+zZMkSXn/9dR566CEmTpwYNJM0aFlFtLa2lgceeIDzzz/f472PPvqo/fI4JQzkdu/v31VVVdXj695y+/M7nSUlJTFnzhy++OILfvjhB+rq6igsLGTBggXt44jS2nJVV1d32cacTie1tbU+P4Jh//792Gy2Pi0YJPeo/XS1XSFQVFTk9f3i4mIAvx7jIG375uWXX1akncGi5fxazg7ayx+IY0YtHC/2a9XH6667jjvvvJNdu3bx85//vMuBzIQJE4CWm9kHy0BkSExMJD4+3utqbr3peEbthRdeICEhocsBZ2RkZPsN/NXV1VxyySUBeQiu3W4nNzeXjRs38uyzz5KTk9PlcQMHDx7E7XZ7rPDXH9dccw3V1dXcc889fq2G6M369euZNm0aq1evbr8EMSoqiqlTp7Jy5cr2RSaCSdvBwbx587q8t2HDhj611fYlgtPp9Pr+QG73/v5du3bt8noGrO13vE1E/Pkdb9ruCXvzzTf7vIiIP9q21c2bN3d577vvvsPhcPjc1p49ewDf/1ZouUftqaee8vnfl19+6XPbYnC1rfS5evXqLmdyGxoa2LJlC2FhYX1eDVnaFkJ4o/QxoxaOF/u9PP8vfvEL/vCHP7Bv3z6uuOIKj/tBLr/8ckwmEw888IDXSYzdbg/4wdxAZNDpdEyZMoVjx461Hzj6qm3C9fnnn7Nz505+/vOfdzkV3Xbp44svvojJZArY/WdGo5E33ngDgLfeeovVq1ezfPlyj59pu/9FqaW4p02bxpIlS/joo4+45ppr+tx/nTU3N2OxWIiNjWXt2rUez8O48sorefnll4mPj2f8+PFBde9M26p+nScv3377LW+//Xaf2oqOjkan03ldUAYGdrv39+86fvx4l1Unt2/fzocffkhUVBRnnHGGIr/jzbRp08jIyOA///kPn376KZmZmR6rNCqt7V7WZ5991uPMlt1u57HHHutTW21XDfTlTOlXX33F3r17ff7XdhP2QLrjjju8PgtQ2u657REjRjBz5kzKysr497//7fHek08+idVq5Zxzzunyzbe07V/baqXl7KDt/FrO7g8ljxm1cryoyEMIFi9eTGhoKHfddRdXXHEFL7/8MsOHD2fkyJH85S9/4a677mLhwoWccsopZGRk4HA4KC8vZ/PmzcTFxfHZZ58pEcOrgcowb948/vvf/7J69eo+nSJtO6O2bds2oqKivK7AFhUVRV1dHXV1dVxwwQU+X6bUV3q9nsrKSiIiIsjLy/N6KdqaNWswGAztDz1Wwm233UZMTAyPPfYY8+fPZ9y4cYwcObLbg8GeVvD5/vvvmTBhAi6Xi8OHD7cvkQotl6iOHj2a1atXc/XVV7N06VJOO+00TT5Ysq8uu+wy3n33XW655Rbmz59PYmIi+/bt49tvv+Wss87q9TlgHUVERDB+/Hg2bdrE7bffTmZmJnq9njlz5jB69OgB3e79/bumTJnC22+/zbZt25g0aRKVlZV88sknuFwu/vjHP3qtPX9+xxudTsfixYt54IEHgMCeTYOWG6kvueQS3nzzTc4++2zmzZuHyWTiq6++IioqisTERJ+3gbYbqR977DEKCwsJDw8nKyuLs846K5B/Qp98+eWX7Wfl2pZC/u6779ofHB4XF9fl8QhtZz68LdAibffc9n333cell17Kn//8Z9atW8fIkSP5/vvvKSgoICMjw+NRJNJ2/9seCH2tFy1nB23n13J2fyl1zKiV40XFnjB8/vnnExISwu9///v2yVpaWhr/8z//w+jRo3nxxRcpKChg9erVhIeHk5iYyPz58wdkBz8QGebNm8eQIUP4z3/+w+WXX+7z73VcFGDx4sVeC63tNZ1Oxy9/+ct+Z+3Jrl27GD16tNdiPH78OF9++SWnnnoqw4YNU+wz2/6uefPm8eabb/LNN9/w+eefd7s4Q08r+KxZs4ZPPvmEb7/9tv3h3B398pe/ZPHixSQkJHDw4EE+++wzVR1kBsro0aN55ZVXePzxx1m1ahUOh4PRo0fz1FNPERUV1aeJGsBDDz3EAw88wOrVq/n4449xu90kJyczevRoYGC2uf78Xampqdx///08/PDDvPHGG9jtdsaOHcuvfvUrTjnlFMV+pzvnnXceDz74ICaTSZFHIvTmD3/4AyeccAJvvPEGb7zxBrGxsZxxxhn8+te/ZtasWV4fceDNlClTuOeee3j11Vd57bXXsNvtXH/99arahnbv3t3l3sSSkhJKSkqAlrOwnQ8WCgsLiYiI4NRTT5W2+9j2iBEjeOedd3jiiSf49ttv+eabb0hISODnP/85S5cubf8yUtpWpu2B0Nd60XJ20HZ+LWf3l1LHjJo5XnQLxTz33HPu7Oxs986dOz1ef+KJJ9zZ2dnukpKSQUrWVXeZli5d6v7Tn/7k9XdeeeUVd3Z2tnvjxo0DEVEIxZWUlLizs7Pdv//97wP6O71Zv369Ozs72/2b3/xGsTb9cfDgQXd2drb7tttuG9QcvmrrtyeeeEKxNuvq6tyjR492P/jgg4q1KW1L22ppO9C0nN3t1nZ+LWfv7IorrnBnZ2cPdgxV6vc9auJHv/jFLxg+fDhPPPHEYEfx2549e7w+H6mpqYl//vOfzJ8/v9sVIYUQvvnXv/4F0OvzAJVSWVnZZWGDxsZG/vrXvwJobpXFp556ipycHM4888x+t7Vp0yaMRiNXXXWVAsmkbWlbXW0Hmpazg7bzazk7QE1NDTk5OeTk5PR5UbNgotiljwJCQ0N56KGHKCgowGq1Krbc/EByOp0cOHCAI0eOEBYW1n5pZllZGZdcckmPD/QVQnRv7969/L//9//YuXMn33zzDaeddtqArfz28ssv8/HHHzN16lQSEhKoqqpi3bp1HD58mFmzZqnq0sWepKSksHTp0vb/7vxIGH/MmTPH64PZlSBtS9uD3XagaTk7aDu/lrMDhIWFeYznwjuZqClsypQpTJkyZbBj+O3WW2/l4Ycf5sUXX+SSSy7h/vvvB1oWZbnpppsGOZ0Q2rVz504effRRIiMjOfPMM7nvvvsG7LNnzJjBnj17WLNmDbW1tRiNRjIyMvjZz37GlVdeqZkFdVJTU2UcEkKIn4CwsDAZz32gc7sVeniV6FZBQQEbNmzgyiuv9Fg8ZDCpMZMQQgghhBCihUzUhBBCCCGEEEJlZDERIYQQQgghhFAZmagJIYQQQgghhMr4vJjItEf69kBcIYQQQgjhu7+dPW6wI/jsjo+3DXYEMcjW3b5gsCP85MkZNSGEEEIIIYRQGZmoCSGEEEIIIYTKyERNCCGEEEIIIVRGJmpCCCGEEEIIoTIyURNCCCGEEEIIlZGJmhBCCCGEEEKojEzUhBBCCCGEEEJlfH6Omi8SIs0smTGKkzMSiDGbqLbY+Gb/EV5Yt4/jNodPbVw+OZNJaUPIHBJJTFgIbrebw/VNbCiuYvnmg1Q2NKkm65T0oeRnDCU7IZpRidHEhIXwfVkN17+xXpGMwZq1swkpcTx1cT4GvY4X1+9n2ZpCySo1oJqsWhqzAKLNJq7Oz2JWVhJDIkKpa2qmoKiSZWv2qSrrQNWrUnk7U3PNgnbqoDPpVzhWVcn7r7/Ezi0bsRyvJyY+ngknz2DhpT8nIjLK53Ysx+v56M1X+a5gDXU1NURERXPipCn8z2W/IG5ogiJZ+9uvZqOBWVlJzDghkZykaBKjzLjccKjGwhd7ynlraxEOl1sVWb1Rc70O1L5L9I9iE7WUmHCWLZ5GfEQoq/YfprjGwtjkGC45KZP8zASWLF9HfVNzr+2cO24E1mYnW0trqLHaMOr1ZCdGs3hyJovyUvnVigIKj9arIusFE0YwOysZW7OT0lorMWEh/colWbsKNxm456zxNDmcRIQo971CMGaVGghMVi2NWdFmE8sWTyM9PpJNxVV8sbeC9PgIFuamMT0zkWuXr6W8rlEVWQeiXpXM25Haa1ZLddCR9CscrSjnwd/fxPG6WsafPJ1hKSM4uG8PKz98lx1bNvL7v/2DyOiYXttpqK/jwd/fzJHyUkaPm8iUmadRUXaItSs/Y/um9dzx0JMkJA/vV1Yl+nVCahz3nz2BukY7m0uqWbX/CNGhJmaOTOTmU8dw6qgkbnprA3ana9Czdqb2eh2IfZfoP8Uq5zenn0h8RCiPfLWTt7cWt79+8+wxLJ6cyfUzc3joyx29tnP5y9963eDOyUvjznl5XDcjm9vf26SKrK9tOMA/VxdSXNNAYlQY7117Wr9ySdaubpszlsgQI68W/MD1p+RIVqkB1WXV0ph1w8wc0uMjeX3TAZ5ctaf99YsmpvPrOSfy27m53PbuRlVkHYh6VTJvR2qvWS3VQUfSr/D6c//geF0tl167lDkLz2t/fcULz/DlB+/wn9f+jytuvK3Xdt577QWOlJdyxv9cyEVX39D++soP3+XNfz3N6889wS1/+Fu/sirRr9UWG/d9/B1fFVZ4nDl7cpWBpy/JZ1xKPBdMSGf55oODnrUztdfrQOy7RP8pco9aSkw4+RkJlNdZeadD0QD8a20hVruDM8cOx2w09NpWd9+KrNxbAUBaXIRqsu6oqOVgdQMKnXWXrJ2cMjKRhblpPPr1Liotyp2CD9asUgOByaqVMSvMZODMsSlY7Q5eWLvP4723txZTUWclPzOB4TFhg54VAl+vEJw1q7U6aCP92nI2bdd3mxiSmMypC/7H471zFv+CULOZ9f/vS2xNPZ+1a2psZP3XXxJqNrPo0is93jvt7HMZkpjEzq0bqTxc7ndWpfp1X+VxPt9T3uXyRmuzk+WbWiZnk9Li/c6pZNaO1F6vEPh9l1CGIhO1SSNaNpINRVV03qdam51sKz9GmMlI7vBYvz9j5shEAPZXHve7DRiYrEoJ5qxxYSHcMS+PVfsO89/d/u8sJOvAkX71pLYxK3dYLGaTgW3lx7A2Oz3ecwMFRVUAnJQ2ZNCzDpRgrFkt1oH0a4u927cCMHbiSej1nodv5vBwRo7OxW5r4sDe3T22c2DvLprtNkaOzsUcHu7xnl6vZ+zEya2f953fWQdiLHC4WiYazn5+mxOM9doTpfZdQhmKTNTS4yIBOHTM4vX90tbX+zI7X5SXyi+njeKm2aN57IIp3HPmeCrqrDzz7Z7ef3mAswZKMGe9Y14eep2OB/t4qYEvgjlrIAV7v6p9zBoR39JOSTftlNT2v5a0VK8QnDWrxTqQfm1xpKwUgKThqV7fTxye0vJz5aW9tFPS0k6K93aShqX61E5PBmIsWJjbknN9UaXfbUBw1mtHgdp3CWUoco9aRGhLMw127zcvNrSuQBMVavK5zXNy08gdHtf+37sqarnvk+8orbX2I2lgsgZKsGZdmJvKrKwk7v5wC8esduVCtgrWrIEW7P2q9jErsvVm9oZuVgRTopa0VK8QnDWrtTqQfv1Ro7XlIDws3PtBeNvrjZaG/rUT0fK6tZd2ehLoseDCCelMy0yk8GgdH+7wf0IJwVmvHQVq3yWUoejy/Eq6dvk6oGUVpZykGK6fkc2LV8zg7g+3UlBcNcjpRKAkR4dx66ljWLm3gpWFhwc7To+0lFVLtNqvMmYFL63WrNpJvwpvZmclcctpY6hqaOLOD7b0+9JHpWi1XmXfpW6KXPpoaZ3BR4Z4n8FHtn4DcNzWt6VNAeqbmtlYXMUt72zA5nBx74LxhBr9jx3IrEoLxqx3zc/D5nDx95XKXzLQJhizDgTp1xZqHbMa7A6Pn/e3nZ5oqV4hOGtWS3Ug/eqp/YyZ1ftlb+1nyiIi+9eOpeX18F7a6UmgxoJZWUn8aeFEjlnt/GpFQb8fdwDBWa/eKL3vEspQ5Ixa8bGW0+MjurkmNrX19e6u3fZFg83BjvJjzB6VTOaQKPYcqfOrnYHIqpRgzJqTGEOU2cRnN57h9f2r8rO4Kj+LVfsPc8f7WySr1MCgZu2J2sasQzUt7XR370JabP//Zi3VKwRnzWqpDqRfPbXdU9bdvWNHy8tafq6be9h+bCetpZ0y7+0cqej5XjhfBGIsmJOdzP0LJlBttbF0RYFil+YFY732RKl9l1CGIhO1LYdqAJiaMRQdeKxEE24yMG54HI3NDnaU1/brcxIizQA4Xf4/2HCgsiohGLN+uqsMs6nrsrJpseFMTBtC4dE69hyp79dDGIMx60CQfu1KTWPWjopampqdjBseR7jJ4LEyna61fYDNJdWDnnWgBGPNaqkOpF895eRNBGDX1s24XC6PlR+brFZ+2LODkFAzJ+SM6bGdE3LGYgoJ5Yc9O2iyWj1WfnS5XOzaurn18yb4nVXpsWDe6OHcc9Y4KhtsLF2xXpEzaUpn1VK99kaJfZdQhiITtbI6K+uLKsnPSOCCiekeD+C7Zno24SFG3vv+EE2OHweu9PiWWX9xzY+z/qQoM3any+sNmOeOS2PssFgO1zfyQ5X/S4YqlXUgBGPWx77e5bX9BSemMDFtCGsOVLJsTaFk7WPWgRCM/aqlMaux2clnu8o4d/wIfjl9lMcDeS+cmM7wmHDWH6zs1wGQlupVybxaqlkt1YH0q6fEYcMZO2Eyu77bxP/75H2PB15/sPwlbE1NzJq/kFDzj89qqyg9BMCw1BHtr5nDwsg/7XS+/e/HfPjGyx4PvP764/9QffQwJ06cQkLycL+zKjkWLBibwv/OH8fh+kaWrljP4ePKPZdMyaxaqteB2HcJZSi2mMjDX+5k2eJp3D7nRCaPGEJxtYWxw2KYPGIoxTUNPLd6r8fPv3HVbACmPfJJ+2s5STH8ZeFEtlfUUlZrocZiJzrMRO6wWLISorHYHfzx0+/7/QBUJbICjEuJ45zclksIwkJavkVJi43g7vnj2n/mz//dJln7mHUgBGNWqQHls2ptzHp29V4mpsVz2eQTyE6IZtfhOtKHRDA7K5kai42HV+7sX1AFsw5EvSqZdyAEYx0MBC3162XX38KDv7+JN55/it3btjAsNZ2DhbvZu/07koancu4VV3v8/H2/ugqAZe+v9Hj9vCt+SeH27/ni/bcpOfgDGaNGU1FazPcFa4mKiWXxdTf3O6sS/TopLZ7/nT8Og17HlpJqzm4dEzpqsDXz5paiQc86ULS07xL9p9hErazOylX/XsO107PJzxjK9MxEqiw23tx8kBfW7eN4N0vWdrT3SB0rthYxPiWe6ZmJRJtN2JwuymutvL7pAG9uKeKoAt+kKJEVIDU2nLNzPa/hjo8I9XitvwcSwZh1IARjVqkBT8E4ZtU3NbNk+TqunpbFrKxkxqfGU9do56MdJSxbs4/KBvVkHYh6VTLvQAjGOhgIWurXxGHDueuRZ/ng9ZfYsXUjOzZvICYunrmLzmfhpT8nIjLKp3Yio2O446En+fCNV/iuYA37dm0nIiqa6XPP5H8u+wVxQxP6nVWJfk2ODsOg1wGwKK/rJA2gos7a74lasNXrQO27RP/p3G63T/PlwfjWQAghhBAiWPzt7HG9/5BK3PFx/78oEdq27vYFgx3hJ0/W3RRCCCGEEEIIlZGJmhBCCCGEEEKojEzUhBBCCCGEEEJlZKImhBBCCCGEECojEzUhhBBCCCGEUBmZqAkhhBBCCCGEyshETQghhBBCCCFURiZqQgghhBBCCKEyMlETQgghhBBCCJUxDnYAIYQQQggBd3y8bbAjCCFURM6oCSGEEEIIIYTKyERNCCGEEEIIIVRGJmpCCCGEEEIIoTIyURNCCCGEEEIIlZGJmhBCCCGEEEKojEzUhBBCCCGEEEJlZKImhBBCCCGEECqj6HPUEiLNLJkxipMzEogxm6i22Phm/xFeWLeP4zaHz+1Em01cnZ/FrKwkhkSEUtfUTEFRJcvW7KOyoUlVWTuakBLHUxfnY9DreHH9fpatKZSsfmS9fHImk9KGkDkkkpiwENxuN4frm9hQXMXyzQelBvzIajYamJWVxIwTEslJiiYxyozLDYdqLHyxp5y3thbhcLlVkRW0VQNaygraGV+npA8lP2Mo2QnRjEqMJiYshO/Larj+jfWKZNRq3mCrWS1l7Uyt+wPQVr9qZduS/awIBJ3b7fapaqY98kmP76fEhLNs8TTiI0JZtf8wxTUWxibHMHnEUIprGliyfB31Tc29fk602cSyxdNIj49kU3EVu47UkR4fweysZGosNq5dvpbyukbf/roAZ+0o3GTg1StPISYshIgQo2KDcjBmfevq2VibneyvrKfGasOo15OdGM2ktCE02Jr51YoCCo/WqyJrR2ru1/yMoTx2wVTqGu1sLqmmtNZKdKiJmSMTGRppZltZDTe9tQG70zXoWUFbNaClrFoaX//2P5OYnZWMrdlJaa2VkQlRATk401LeYKxZLWXtSM37A9BWv2pl2wrG/ey62xf0628RvVPsjNpvTj+R+IhQHvlqJ29vLW5//ebZY1g8OZPrZ+bw0Jc7em3nhpk5pMdH8vqmAzy5ak/76xdNTOfXc07kt3Nzue3djarI2tFtc8YSGWLk1YIfuP6UnH7lC/asl7/8rdeB7Jy8NO6cl8d1M7K5/b1NqsjakZr7tdpi476Pv+OrwgqPb/SeXGXg6UvyGZcSzwUT0lm++eCgZwVt1YCWsmppfH1twwH+ubqQ4poGEqPCeO/a0/qV66eQNxhrVktZO1Lz/gC01a9a2bZkPysCQZF71FJiwsnPSKC8zso7HYoG4F9rC7HaHZw5djhmo6HHdsJMBs4cm4LV7uCFtfs83nt7azEVdVbyMxMYHhM26Fk7OmVkIgtz03j0611UWpQ7VRysWbv7tmnl3goA0uIiVJO1jdr7dV/lcT7fU97lsgtrs5Plm1p2GpPS4lWRFbRVA1rJqrXxdUdFLQerG1DoSiGvtJQ3GGtWa1nbqH1/ANrqV61sW7KfFYGgyERt0oiWwttQVEXn7cja7GRb+THCTEZyh8f22E7usFjMJgPbyo9hbXZ6vOcGCoqqADgpbcigZ20TFxbCHfPyWLXvMP/dXe53Lsnau5kjEwHYX3nc7zZA+rUzh6tlsHb2cy8YzDXgjdqyanF8DTQt5Q3Gmu2JWrNqfX+g1n4NJNnPelKqBoQyFLn0MT0uEoBDxyxe3y89ZoGMBNLiIth0qLrbdkbEt7RT0k07JbUtr/dnlq9U1jZ3zMtDr9PxYB8vi/BFMGcFWJSXSmJkGOEhBk4YGsWUEUOpqLPyzLd7ev/lAcyqtX7tbGFuKgDriyr9C9kqmGtAC1m1OL4GmpbyBmPNajGr1vYHWunXQJL9bGBqQChDkYlaRGhLMw127zcvNrSuQBMVauqxncgQo8fP+9tOT5TKCi0b3qysJO7+cAvHrHa/M3UnWLO2OSc3jdzhce3/vauilvs++Y7SWms/kkq/dnThhHSmZSZSeLSOD3eU+heyVbDWQBu1Z9Xa+DoQtJQ3GGu2Iy1k1eL+QAv9Gmiynw1MDQhlKLo8fzBJjg7j1lPHsHJvBSsLDw92nB5pKWtH1y5fB7SsVJeTFMP1M7J58YoZ3P3hVgqKqwY5nXb7tc3srCRuOW0MVQ1N3PnBln5fkhEIaq+BjrSUVQjQVs2qPatW9wdq71etk/2s6C9F7lGztM7gI0O8z+AjW78BOG7rebnQBrvD4+f9bacnSmW9a34eNoeLv69U/vKGNsGY1Zv6pmY2FldxyzsbsDlc3LtgPKFG/0tX+hVmZSXxp4UTOWa186sVBf1ekh2Cswa0lFVL4+tA0VLeYKxZLWXV8v4A1NuvA0H2sy2UrgGhDEXOqBUfawBgRDf3NqS2vt7dvRFtDtW0tNPdPRJpsb610xOlsuYkxhBlNvHZjWd4ff+q/Cyuys9i1f7D3PH+FsnqY9aeNNgc7Cg/xuxRyWQOiWLPkTq/2gn2fp2Tncz9CyZQbbWxdEWBYpc3BGMN9ERtWbU0vg4ULeUNxprtidqyanV/0Jna+nUgyH7Wk1I1IJShyERty6EaAKZmDEUHHivRhJsMjBseR2Ozgx3ltT22s6OilqZmJ+OGxxFuMnisTKZrbR9gc4n/N54qlfXTXWWYTV2XP02LDWdi2hAKj9ax50h9vx4YGYxZe5MQaQbA6fL/gZHB3K/zRg/nnrPGUdlgY+mK9Yp8wxeorN1RUw30Rk1ZtTS+DhQt5Q3Gmu2NmrJqcX/QHTX160CQ/WxXStSAUIYiE7WyOivriyrJz0jggonpHg/gu2Z6NuEhRt77/hBNjh8PDNLjW2b9xTU/zvobm518tquMc8eP4JfTR3k8kPXCiekMjwln/cHKfhW9Ulkf+3qX1/YXnJjCxLQhrDlQybI1hX7nDNasSVFm7E6X1xuxzx2XxthhsRyub+SHKv+XjQ3GfgVYMDaF/50/jsP1jSxdsZ7Dx5V7vo+SWbVUA1rKqqXxdaBoKW8w1qyWsmppf6Clfh0Isp/1pFQNCGXo3G63T3c2Tnvkkx7fT4kJZ9niacRHhLJq/2GKqy2MHRbD5BFDKa5pYMnyddQ3/XjN7LrbF3htN9psYtniaaTHR7KpuIpdh+tIHxLB7Kxkaiw2lixfR1ld/04hK5XVmwUnpnDPmeN5cf3+fg/KwZh1VlYSf1k4ke0VtZTVWqix2IkOM5E7LJashGgsdge/fW8TW0trBj1rd9TYr5PS4nniwpMx6HV8uL2EI152Hg22Zt7cUjToWbVUA1rKCtoaX8elxHFObhoAYSEG5mQPo8ZiY93BH5e3/vN/t/Urq9byBlvNailrd9S4P9Bav2pl2wrG/Wxb2yJwFFv1sazOylX/XsO107PJzxjK9MxEqiw23tx8kBfW7eN4N0tCd1bf1MyS5eu4eloWs7KSGZ8aT12jnY92lLBszT4qG/r/7YRSWQdCsGXde6SOFVuLGJ8Sz/TMRKLNJmxOF+W1Vl7fdIA3txRxVIFvqIKtX5OjwzDodQAsykvz+jMVddZ+70CCrQa0lBW0Nb6mxoZzduuzh9rER4R6vKbERE1LeYOtZrWUdaAEY79qZduS/awIBMXOqAkhhBBCCCGCg5xRCzxZd1MIIYQQQgghVEYmakIIIYQQQgihMjJRE0IIIYQQQgiVkYmaEEIIIYQQQqiMTNSEEEIIIYQQQmVkoiaEEEIIIYQQKiMTNSGEEEIIIYRQGZmoCSGEEEIIIYTKyERNCCGEEEIIIVTGONgBhBBCCCGEtkxOix/sCD7bVFIz2BGE8IucURNCCCGEEEIIlZGJmhBCCCGEEEKojEzUhBBCCCGEEEJlZKImhBBCCCGEECojEzUhhBBCCCGEUBmZqAkhhBBCCCGEyshETQghhBBCCCFURtHnqCVEmlkyYxQnZyQQYzZRbbHxzf4jvLBuH8dtjl5/32w0MCsriRknJJKTFE1ilBmXGw7VWPhiTzlvbS3C4XKrIivA5ZMzmZQ2hMwhkcSEheB2uzlc38SG4iqWbz5IZUOTKrJqrV+npA8lP2Mo2QnRjEqMJiYshO/Larj+jfWKZFQya2cTUuJ46uJ8DHodL67fz7I1harJqqV+layBydqZ1Kty/RptNnF1fhazspIYEhFKXVMzBUWVLFuzT7F9gRJ5tbY/kP2s8llh4Lav2LAQFuSmMjY5lvAQI/VNzWwrq+HTnaU0Njt9bic8xMCZY1MZlxJPtNmE1e5g1+FaPtlRSm2jXZGswTbGDtS2JfpHsYlaSkw4yxZPIz4ilFX7D1NcY2FscgyXnJRJfmYCS5avo76pucc2JqTGcf/ZE6hrtLO5pJpV+48QHWpi5shEbj51DKeOSuKmtzZgd7oGPSvAueNGYG12srW0hhqrDaNeT3ZiNIsnZ7IoL5VfrSig8Gj9oGfVWr9eMGEEs7OSsTU7Ka21EhMW0q9cgczaUbjJwD1njafJ4SQiRLnvQIKxXyVrYLJ2JPWqXNZos4lli6eRHh/JpuIqvthbQXp8BAtz05iemci1y9dSXteoirxa2x/Iflb5rDAw29fQiFBum3si0eYQtpXVcKS+kfT4SE7LHsbY5Fge/WonVnvvk4rwECO/nnMiSdFh7D1Sx5ZDVSRFhzEtM5ETh8Xy6MqdVFts/coajGPsQGxbov8Uq5zfnH4i8RGhPPLVTt7eWtz++s2zx7B4cibXz8zhoS939NhGtcXGfR9/x1eFFR7fPD25ysDTl+QzLiWeCyaks3zzwUHPCnD5y996HXTPyUvjznl5XDcjm9vf2zToWbXWr69tOMA/VxdSXNNAYlQY7117Wr9yBTJrR7fNGUtkiJFXC37g+lNyVJdVS/0qWQOTtSOpV+Wy3jAzh/T4SF7fdIAnV+1pf/2iien8es6J/HZuLre9u1EVebW2P5D9rPJZYWC2r4tPyiTaHMJbWw7yzf4j7a+fNz6dOTnDWJSXxps+9MeivDSSosP4am85731/qP312aOSuXBiBhdPyuTZb/f00ELvgnGMHYhtS/SfIveopcSEk5+RQHmdlXc6FA3Av9YWYrU7OHPscMxGQ4/t7Ks8zud7yrtcHmBtdrJ8U8vGPCktXhVZgW6/GVu5twKAtLgIVWTVWr/uqKjlYHUDCl0lEtCsbU4ZmcjC3DQe/XoXlRblLhcI1n6VrIHJ2kbqVbmsYSYDZ45NwWp38MLafR7vvb21mIo6K/mZCQyPCVNFXq3tD2Q/q3xWCPz2NTQilDHJsVQ3NPFth0kawCc7S7A1O5mSPpQQQ8+HoSFGPVPTh2JrdvLJzlKP977Zd5hqi42xw2IZEhHqd9ZgHWMDvW0JZSgyUZs0omXw2VBURedt3trsZFv5McJMRnKHx/r9GQ5XS0E5+zmqDETWmSMTAdhfedzvNkD6NVCUzhoXFsId8/JYte8w/91druqsgSRZA0PqNTCUypo7LBazycC28mNYO91z4wYKiqoAOCltiCry9kRL+wPZz3pS2/Y1KjEagN1H6rpktTlcHKg+TqjRQMaQyB7byYyPJMRo4ED1cWwOz4mFG9h9uNbj8/whY6wnpbYtoQxFJmrpcS0b2qFjFq/vl7a+3p/Z+cLcVADWF1X63QYEJuuivFR+OW0UN80ezWMXTOGeM8dTUWflmX6eig/2fg0UpbPeMS8PvU7Hg328LMIXwdyvgRTMWaVeWyiVdUR8Szsl3bRTUqvM3xzs+wPZz2pr+0qMajmDXHnc+9mkttfbfq7bdqJb3j/aXTsNvrXTk2AfYwO1bQllKHKPWkRoSzMNdu83Lza0rkATFWryq/0LJ6QzLTORwqN1fLijtPdf6EEgsp6Tm0bu8Lj2/95VUct9n3xHaa21H0mlXwNFyawLc1OZlZXE3R9u4ZhVmZWnOgrWfg20YM0q9fojpbJGti4S0NDNSmtK/c3Bvj+Q/ay2tq8wU8uld43N3reLthUf237O33aafGynJ8E+xgZq2xLKUHR5/kCYnZXELaeNoaqhiTs/2NLvSwcC4drl64CWlb9ykmK4fkY2L14xg7s/3EpBcdUgp/NOC/2qdsnRYdx66hhW7q1gZeHhwY4jRI+kXkV3tLA/kP2sUDutjrFa3LaCiSKXPlpaZ/CRId5n8JGt3wAct/VtadNZWUn8aeFEjlnt/GpFgSLLGwcqK0B9UzMbi6u45Z0N2Bwu7l0wnlCj/10s/RoYSmW9a34eNoeLv69U/vKGNsHYrwMhGLNKvXpSKmtD6/LibT/vbzu9kf1BC9nPamP7+vGMmfft4sczZT0/S623dsw+ttMTGWNbKL1tCWUockat+FgDACO6uSY2tfX17q7h92ZOdjL3L5hAtdXG0hUFip2CDUTWzhpsDnaUH2P2qGQyh0Sx50idX+1IvwaGUllzEmOIMpv47MYzvL5/VX4WV+VnsWr/Ye54f8ugZh0IkjUwpF4DQ6msh2pa2ununpC0WGX+ZtkfeJL9bFdq2r6OHm+ZmCZEmb2+3/Z628912059y/uJ3bUT6Vs7PZEx1pNS25ZQhiITtS2HagCYmjEUHXisRBNuMjBueByNzQ52lNf61N680cO556xxVDbYWLpivSLfRAUqa3faBg+ny/+HW0q/BoZSWT/dVdb+bV5HabHhTEwbQuHROvYcqe/XAyODsV8HQjBmlXr1pFTWHRW1NDU7GTc8jnCTwWPlR11r+wCbS6pVkbfNT2F/IPvZ/mUNpH2t48iYpJguWUONek4YEoXN4aSouqHHdg7WNGB3ODlhSBShRr3Hyo+61vY7fp4/ZIztSoltSyhDkXOaZXVW1hdVMjwmnAsmpnu8d830bMJDjHy2q5wmx487sPT4CNLju34jsGBsCveeNZ4j9U3c+MY6RQc5JbMmRZmJCw/x+hnnjktj7LBYDtc38kOV/8ubBmO/DgSlsj729S4e+Hx7l38ftT7rZc2BSh74fDvvfOf5rJPByDoQJGtgSL0GhlJZG5udfLarjPAQI7+cPsrjvQsnpjM8Jpz1Byv7PeYG4/5A9rOByxpoVRYbuw/XMiTSzClZSR7vLTgxjVCTgY3FVR7P8kqKMpPU6cyZ3eFiQ3EVoSYDC05M9Xhv1qhkhkSa2VVRS7XF5nfWYBxjB2LbEsrQud1un+5unfbIJz2+nxITzrLF04iPCGXV/sMUV1sYOyyGySOGUlzTwJLl66hv+vGa2XW3L+jS7qS0eJ648GQMeh0fbi/hiJflWBtszby5pciXyAHNOisrib8snMj2ilrKai3UWOxEh5nIHRZLVkI0FruD3763ia2lNYOeVUv9CjAuJY5zctMACAsxMCd7GDUWG+sO/ri08Z//u00VWb1ZcGIK95w5nhfX72fZmsJ+5VQyq5b6VbIGJqs3Uq/9zxptNrFs8TTS4yPZVFzFrsN1pA+JYHZWMjUWG0uWr6Osrv+XvwXb/kD2s4HJCspsX5N7eYD30IhQbpt7ItHmELaV1XC4vpGM+Eiyk2I4Ut/Io1/txGr/cTXHJy/OB+CmFes92gkPMfLrOSeSFB3G3iN1FNc0kBwdxriUeOqb7Dy2cidVvUzUNpX0XCPBNsYqtW21tS0CR7FVH8vqrFz17zVcOz2b/IyhTM9MpMpi483NB3lh3T6Od7N0cUfJ0WEY9DoAFuWlef2Zijprvwc6JbLuPVLHiq1FjE+JZ3pmItFmEzani/JaK69vOsCbW4q6fe7HQGfVUr8CpMaGc3au5zdn8RGhHq/19wBNqawDIRj7VbIGJutACMZ+rW9qZsnydVw9LYtZWcmMT42nrtHORztKWLZmX/uznvor2PYHsp8NTFYYmO2rymLj71/s4OzcVMYkxzI2OZb6pma+Lqzg052lPi8AYrU7ePSrHZw1NpVxKfGMHBqFxe5g3cGjfLKjlNrG/i+DH2xj7EBtW6L/FDujJoQQQgghgkNvZ9TUpLczasI/ckYt8GTdTSGEEEIIIYRQGZmoCSGEEEIIIYTKyERNCCGEEEIIIVRGJmpCCCGEEEIIoTIyURNCCCGEEEIIlZGJmhBCCCGEEEKojEzUhBBCCCGEEEJlZKImhBBCCCGEECojEzUhhBBCCCGEUBnjYAcQQgghhBDasqmkZrAjCPGTJ2fUhBBCCCGEEEJlZKImhBBCCCGEECojEzUhhBBCCCGEUBmZqAkhhBBCCCGEyshETQghhBBCCCFURiZqQgghhBBCCKEyMlETQgghhBBCCJVR9DlqCZFmlswYxckZCcSYTVRbbHyz/wgvrNvHcZvDpzYun5zJpLQhZA6JJCYsBLfbzeH6JjYUV7F880EqG5okqx9Zp6QPJT9jKNkJ0YxKjCYmLITvy2q4/o31imRUKqvZaGBWVhIzTkgkJymaxCgzLjccqrHwxZ5y3tpahMPlVkVWbyakxPHUxfkY9DpeXL+fZWsKJetPvAZkHFA+60DWgNbySlZ1ZgXtbF+grXFLK1m1Vq+dBeqYQPSPzu12+1Q10x75pMf3U2LCWbZ4GvERoazaf5jiGgtjk2OYPGIoxTUNLFm+jvqm5l4/562rZ2NtdrK/sp4aqw2jXk92YjST0obQYGvmVysKKDxa79tfJ1nb/e1/JjE7Kxlbs5PSWisjE6IU34EokTU/YyiPXTCVukY7m0uqKa21Eh1qYubIRIZGmtlWVsNNb23A7nQNetbOwk0GXr3yFGLCQogIMSo20AVbVq3VgIwDymcdqBrQWl7Jqt6soJ3tC7Q1bmklq9bqtSN/jwnW3b7A3z9D+EixidpjF0whPyOBR77aydtbi9tfv3n2GBZPzuS97w/x0Jc7ev2cEIPeaxGfk5fGnfPyWHvgKLe/t8mXyJK1g9xhsVjsDoprGkiMCuO9a09TfAeiRNZRCVFkDoniq8IKj2+ewk0Gnr4kn9FJMTzx/3azfPPBQc/a2V3z85g1MonXNx3k+lNyFJv8BFtWrdWAjAPKZx2oGtBaXsmq3qygne0LtDVuaSWr1uq1I3+PCWSiFniK3KOWEhNOfkYC5XVW3ulQNAD/WluI1e7gzLHDMRsNvbbV3TcNK/dWAJAWFyFZ/ci6o6KWg9UNKHi1UECy7qs8zud7yrtcHmBtdrJ8U8vgNiktXhVZOzplZCILc9N49OtdVFqUuQwjWLNqrQZkHFA+60DUgNbySlZ1ZwXtbF+grXFLK1m1Vq9tAnVMIJShyERt0oiWwttQVEXn8cna7GRb+THCTEZyh8f6/RkzRyYCsL/yuN9tgGQNlIHI6nC1DNbOfu4Flc4aFxbCHfPyWLXvMP/dXd6vbJK1Z2qtAW9kHPCkthoAbeWVrJ60lFUpMm550lJWtdZrII8JhDIUWUwkPS4SgEPHLF7fLz1mgYwE0uIi2HSo2qc2F+WlkhgZRniIgROGRjFlxFAq6qw88+0eydqPrIEyEFkX5qYCsL6o0r+QrZTOese8PPQ6HQ/28VIDXwRzVm/UWgMg4wBoqwZAW3klqyctZVVKsI9bWsramVrrNZDHBEIZikzUIkJbmmmwe795saF1BZqoUJPPbZ6Tm0bu8Lj2/95VUct9n3xHaa21H0kla6AEOuuFE9KZlplI4dE6PtxR6l/IVkpmXZibyqysJO7+cAvHrPZ+5fImWLN6o9YaaCPjgLZqALSVV7L+SEtZlRTs45aWsnak1noN9DGBUIaiy/Mr6drl6wCINpvISYrh+hnZvHjFDO7+cCsFxVWDnM6TlrJq0eysJG45bQxVDU3c+cEWRS55UkJydBi3njqGlXsrWFl4eLDj9EhLWb1Raw10JONAYGmhBjrSUl7JGry0NG5pKWsbtdar1o8Jgoki96hZWmfwkSHeZ/CRrd8AHLf1bblQgPqmZjYWV3HLOxuwOVzcu2A8oUb/Y0vWwAhU1llZSfxp4USOWe38akUB5XWN/QuKclnvmp+HzeHi7ysDd8lAMGbtTM014I2MA9qoAdBWXsmqrayBIOOWtrKquV4H4phAKEORM2rFxxoAGNHNyjupra+XdHNNrS8abA52lB9j9qhkModEsedInV/tSNbACETWOdnJ3L9gAtVWG0tXFPT78oY2SmXNSYwhymzisxvP8Pr+VflZXJWfxar9h7nj/S2S9SdYAz2RcaArNdUAaCuvZNVO1kCRccuTmrOqvV4H4phAKEORidqWQzUATM0Yig48VqIJNxkYNzyOxmYHO8pr+/U5CZFmAJwu/x8WKFkDQ+ms80YP556zxlHZYGPpivWKfYOuZNZPd5VhNnVdAjctNpyJaUMoPFrHniP1/XoQZzBmbaOFGuiNjAM/UlsNaC2vZNVG1kCScasrNWbVQr0OxDGBUIYilz6W1VlZX1TJ8JhwLpiY7vHeNdOzCQ8x8tmucpoczvbX0+MjSI/3/EYgKcpMXHiI1884d1waY4fFcri+kR+q/F+KNRizDgQlsy4Ym8K9Z43nSH0TN76xTvGDM6WyPvb1Lh74fHuXfx/tbLlZeM2BSh74fDvvfOf5rBPJ+tOpARkHPGmpBrSWV7KqP2ugBeO4paWsoJ16HYhjAqEMndvt9unOxmmPfNLj+ykx4SxbPI34iFBW7T9McbWFscNimDxiKMU1DSxZvo76ph+vmW17mnnHdmdlJfGXhRPZXlFLWa2FGoud6DATucNiyUqIxmJ38Nv3NrG1tMafvzVoswKMS4njnNw0AMJCDMzJHkaNxca6gz8uFfvn/24b9KyT0uJ54sKTMeh1fLi9hCPHuz58scHWzJtbigY9a3cWnJjCPWeO58X1+1m2prBfOYMxq5ZqQMaBwGQdqBrQWl7Jqt6soJ3tS0vjlpayaq1evenrMUFb2yJwFFv1sazOylX/XsO107PJzxjK9MxEqiw23tx8kBfW7eN46w2QPdl7pI4VW4sYnxLP9MxEos0mbE4X5bVWXt90gDe3FHHUS+FL1t6lxoZzdutzPNrER4R6vNbfHYgSWZOjwzDodQAsykvz+jMVddZ+D3RK9etACLasWqoBGQcCk3WgakBreSWrerOCdrYvLY1bWsqqtXoV2qDYGTUhhBBCCCFEcJAzaoGnyD1qQgghhBBCCCGUIxM1IYQQQgghhFAZmagJIYQQQgghhMrIRE0IIYQQQgghVEYmakIIIYQQQgihMjJRE0IIIYQQQgiVkYmaEEIIIYQQQqiMTNSEEEIIIYQQQmVkoiaEEEIIIYQQKmMc7ACB8OmKwsGO4LOzLs4e7Ag+k34VWqKletUSrW1bUgdCS7S2fQkhAkvOqAkhhBBCCCGEyshETQghhBBCCCFURiZqQgghhBBCCKEyMlETQgghhBBCCJWRiZoQQgghhBBCqIxM1IQQQgghhBBCZWSiJoQQQgghhBAqo+hz1BIizSyZMYqTMxKIMZuottj4Zv8RXli3j+M2h09tXD45k0lpQ8gcEklMWAhut5vD9U1sKK5i+eaDVDY0KRm5RagB88+nYDojG31yNG6LHceWUpqeX4er6JjPzRjz0zHNyMQ4IQVdchS6UCOuw/U41hXT9PJG3DVWv+Ip0a9T0oeSnzGU7IRoRiVGExMWwvdlNVz/xnq/MvlEoX7tTBdjJur1n6EfGoHj+zIalrzlVztK9GtnE1LieOrifAx6HS+u38+yNco8w6m/Wc1GA7OykphxQiI5SdEkRplxueFQjYUv9pTz1tYiHC63KrKCtuvVNGskpnk5GEYNRRcfji7EiKvyOM7dR7H9ezPOPUeDIquWti8PKh+3ApE1UPuuYM8aqO1LS8dawZZ1oPZdSo2v0WYTV+dnMSsriSERodQ1NVNQVMmyNfsCc7wt+kyxiVpKTDjLFk8jPiKUVfsPU1xjYWxyDJeclEl+ZgJLlq+jvqm513bOHTcCa7OTraU11FhtGPV6shOjWTw5k0V5qfxqRQGFR+uVig0mA5FPno9xfAqOXYexvfkd+qRITHNHYZqRScOv3sG583Dv7YQYiPzHebjtDhxby3BuPAR6HabJaYReOhHTGdk0XPcWrpLaPsVTql8vmDCC2VnJ2JqdlNZaiQkL6VOOPlOqX70Iu3MuujBTv+Ip1a8dhZsM3HPWeJocTiJClPsORImsE1LjuP/sCdQ12tlcUs2q/UeIDjUxc2QiN586hlNHJXHTWxuwO12DnhW0Xa/G2SdgGJuEc9cRXFUN0OxCnxaDafZITKdn0/jAl9g/2PmTzqql7cuDysetgGQN0L4r6LMSmO1LS8dawZh1IPZdSmWNNptYtnga6fGRbCqu4ou9FaTHR7AwN43pmYlcu3wt5XWNiucXfaPY3u43p59IfEQoj3y1k7e3Fre/fvPsMSyenMn1M3N46MsdvbZz+cvfej1YPCcvjTvn5XHdjGxuf2+TUrEJvWwSxvEp2FcWYr3rE2g9qWD8spDIv59D+N1ncPyyV9tf75bTTeOza7C/sw33cVv7y006CPvdHELPH0fYLbOw/OaDPuVTql9f23CAf64upLimgcSoMN679rQ+5egrxfq1E9NZYwg5bRTWB78i/Pdz/M6nVL92dNucsUSGGHm14AeuPyXH72yByFptsXHfx9/xVWGFx5mzJ1cZePqSfMalxHPBhHSWbz446FlB2/Xa+OBXYHd2eV0/cghRLy4m7OZZ2D/ZDQ7/JsVayKql7asjtY9bAckaoH1X0GclMNuXlo61gjHrQOy7lMp6w8wc0uMjeX3TAZ5ctaf99YsmpvPrOSfy27m53PbuRsXzi75R5B61lJhw8jMSKK+z8k6HogH419pCrHYHZ44djtlo6LWt7r7RX7m3AoC0uIj+B+4g9Lw8AJqeXO0x8Dq+OYBjaymGE4ZgnJTae0NOF7aXNnrsPABwQ9MLBQC+tdOBkv26o6KWg9UNKHR1W68U69cOdElRhN9+Krb3d+BYV+R3NiX7tc0pIxNZmJvGo1/votKi3OUCSmXdV3mcz/eUd7m80drsZPmmlsnZpLR4VWQFjderlwMzANcP1TiLatBFhaKLC/vJZtXS9tWZmsetgGUNwL5LsrZSePvS0rFWsGYN9L5LqaxhJgNnjk3Banfwwtp9Hu+9vbWYijor+ZkJDI/xf18llKHIRG3SiJYDvA1FVV2+ZLI2O9lWfowwk5Hc4bF+f8bMkYkA7K887ncbnelTY9APi8ZZXIOroutp8+Z1LRuBcXJa/z6o9dsydx8vKxuIfg2EQPVr+L3zcDfYaPzHN/3Kp3S/xoWFcMe8PFbtO8x/d5f3K1ugs3rjcLXUpbOfexap114+Jy0WQ3ocrmNW3FWWn2xWLW1fHal93OpI7fuujiSrl8/xc/vS0rGWZA0MpbLmDovFbDKwrfwY1mbPLxTcQEFRFQAnpQ1RKLnwlyKXPqbHRQJw6Jj3Aaf0mAUyEkiLi2DToWqf2lyUl0piZBjhIQZOGBrFlBFDqaiz8sy3e3r/ZR/p0+MAcB2q9fq+q6TlpmF9Wly/Pidk0YkAONYX9/KTngLRrwMhEP0aeulEjJNSsdz8LljsEG32O5/S/XrHvDz0Oh0P9vFSLl8MRA0szG35dnh9UaV/IVtJvXoyTknDOD4FTHr0w2MwzcwEwPrXL/t86ZyWsmpp++pI7eNWR2rfd3UkWZXbvrR0rBXsWQNFqawj4lvaKemmnZLalteVvopN9J0iE7WI0JZmGuzeb15saF2BJirU9xupz8lNI3f4j4Phropa7vvkO0prFVjRqZUuIhQAd4PN6/vuBnvLz0WF+v0ZhjFJmK85GbfFRtNza/v0u4Ho14GgdL/qM+Mx3zAD+7vbcGws6Xc+Jft1YW4qs7KSuPvDLRyz2vudrbNA18CFE9KZlplI4dE6PtxR6l/IVlKvnoxTRmC+ckr7f7uqLFj/+DmOAv8PJLWQVUvbV0dqH7c6Uvu+qyPJqtz2paVjrWDPGihKZY1sXZCpoZsVItX0Nwe7AC2d1X/XLl8HtKxKk5MUw/Uzsnnxihnc/eFWCoqrfG7HfE1+l9fsH+/yelmD0vRpsUQ8cg4Y9Vju/hRXWV3AP3OgDFi/GvSE/2E+rmoLjU+tVrbtfkqODuPWU8ewcm8FKwv9WwluMM3OSuKW08ZQ1dDEnR9s6felj2o2GONA0zNraHpmDZiNGEbEEXr5SUQ8fi5N/1yL7aXub9DWUtZACsT2paVxS0v7LsnaMzVuX22UOtYaCFrKKoRSFJmoWVpn3pEh3mfeka3fABy39W05ZoD6pmY2Flex+3Atb1w1m3sXjOf857/G5uMqSeZruw7Kji2luCrqcVtavjXTRXr/dkwX2bKsapcbl32gT4sl8pkL0UWbsd79KY5vD/S5jUD2a38NVL+G/mIKhuxEGm58GxqV+TuV6te75udhc7j4+8rAXZIVqBqYlZXEnxZO5JjVztIVBYoswSv12o0mB87CSqz3fUZEtBnzddNxFBzCufuI5rN6o+btS0vjlpb2XZLVR/3cvtR8rCVZB4ZSWRvsDo+f97cdEXiKTNSKjzUAMKKba1lTW1/v7lpYXzTYHOwoP8bsUclkDolizxHfzk7Vnvx4t++5iluvNx8R6/X9tuvQ265L95U+I47Ipy5AF2PG8r8f4/im75M0GJh+9ddA9asxJxGdXkfUcxd5f398CrEFt+I+bqPu9Gd7bQ+U69ecxBiizCY+u/EMr+9flZ/FVflZrNp/mDve3+JTtkBl7WhOdjL3L5hAtdXG0hUFil1OLPXau+b1RZimZ2CclNLtwZmWsnqj5u1LS+OWlvZdkrXv/Nm+1Hys1ZlkDQylsh6qaWmnu3vQ0mLV8zcHO0UmalsO1QAwNWMoOjzvjQ03GRg3PI7GZgc7ymv79TkJkS03Yjtd/XsobxtXaR2uinoM6fHoh0V3ufTBNC0dAMcm3+8v0I8cQuRT56OLCMVyx0c41hT5nW+g+lVpSvZr84ZiXLVdz/bowk2EnJGDq9pC8+qD0IeH5yrVr5/uKsNs6roEblpsOBPThlB4tI49R+r79SBOpWtg3ujh3HPWOCobbCxdsV7Rh1lKvfZOn9ByAzdO/y4z1UJWLW1fHal93ApU1jZK7rska+/82b60dKwlWQNDqaw7KmppanYybngc4SaDx8qPutb2ATaXqGfhr2ClyPL8ZXVW1hdVMjwmnAsmpnu8d830bMJDjHy2q5wmx4+FkB4fQXq850w+KcpMXLj3p7ifOy6NscNiOVzfyA9Vyi3Rb3tvOwDmm2a2VGcr46wTME5MxXmgGscWz0UWdElRLatDdTplbBiV0HIZRngIlt9+2O+dh1L9OhiU6lf729to/OuXXf41Pb0GAFdpbctrj67yOZtS/frY17t44PPtXf59tLPl71pzoJIHPt/OO9/5v3iEkjWwYGwK9541niP1Tdz4xjpFJ2lKZx1oio0DJgP6UUO9foZhTBKh5+fhdrho7sfztNSeVUvbV2dqHrcClRWU33dJVgKyfWnpWCsYsw4EpbI2Njv5bFcZ4SFGfjl9lMd7F05MZ3hMOOsPVip+nCD6TrHFRB7+cifLFk/j9jknMnnEEIqrLYwdFsPkEUMprmngudV7PX7+jatmAzDtkU/aX8tJiuEvCyeyvaKWsloLNRY70WEmcofFkpUQjcXu4I+ffq/ogwRtr2/BNCOTkLnZ6IdF49hYgj45CtPcUbgbm7H++Ysuy+dG3Dcf40mpNNzwdvuArYsKJeLp89HHhNG84RDGvGEY84Z1/bw3tna7opQ3SvQrwLiUOM7JbXn2S1hIy7fUabER3D1/XPvP/Pm/23zO1Rul+jVQlOrXgaBE1klp8fzv/HEY9Dq2lFRzdm7X5wA12Jp5c0vRoGcF7darLtRI9GtX4NxXifOHalxHG9CZjegz4tufvdT05Lftl1j9VLNqafvqSO3jViCyBmrfFfRZA7R9aelYK9iywsDsu5TK+uzqvUxMi+eyySeQnRDNrsN1pA+JYHZWMjUWGw+v3NmvnEIZik3UyuqsXPXvNVw7PZv8jKFMz0ykymLjzc0HeWHdPo53swRoR3uP1LFiaxHjU+KZnplItNmEzemivNbK65sO8OaWIo4eb1IqcotmJw03vYv5ysmY5uUQungiboud5lU/0PT8elwHa3xqRhcZir71Ce6mqSMwTR3h9efsH+/q0w5EiX4FSI0N5+zW52W1iY8I9XhNyQNfpfo1UJTq14GgRNbk6DAM+pavhxfleX9Ya0Wdtd8TtWCvV3djM43PrcU4MQXjpBR0MWHgBldlA82f7cb29jacO/u5gqEGsmpp+/Kg8nHLg8r3XcGeNVDbl5aOtYItKwzMvkuprPVNzSxZvo6rp2UxKyuZ8anx1DXa+WhHCcvW7KOyQeHjbeEXndvt9ul7iMH+prMvPl1RONgRfHbWxdmDHcFn0q9CS7RUr1qitW1L6kBoida2LxHc1t2+YLAj/OQpco+aEEIIIYQQQgjlyERNCCGEEEIIIVRGJmpCCCGEEEIIoTIyURNCCCGEEEIIlZGJmhBCCCGEEEKojEzUhBBCCCGEEEJlZKImhBBCCCGEECojEzUhhBBCCCGEUBmZqAkhhBBCCCGEyujcbrfblx+c9sgngc4SlD5dUTjYEX6Szro4e7Aj+ExLNaClftUSLdWA1kjNCtm+AkNL25bUQGDEFtw62BF+8uSMmhBCCCGEEEKojEzUhBBCCCGEEEJlZKImhBBCCCGEECojEzUhhBBCCCGEUBmZqAkhhBBCCCGEyshETQghhBBCCCFURiZqQgghhBBCCKEyRiUbS4g0s2TGKE7OSCDGbKLaYuOb/Ud4Yd0+jtscPrcTbTZxdX4Ws7KSGBIRSl1TMwVFlSxbs4/KhiZVZDUbDczKSmLGCYnkJEWTGGXG5YZDNRa+2FPOW1uLcLh8ekRd34QaMP98CqYzstEnR+O22HFsKaXp+XW4io71rS29jtCLJxCycCz6tDjcNgfOnRU0/d8GnNsrVJPVNGskpnk5GEYNRRcfji7EiKvyOM7dR7H9ezPOPUf9iqdUvXY0ISWOpy7Ox6DX8eL6/SxbE4BntyjUr/qMOELOyMGQnYAhOwF9cjQAtdP/AU7/a1eJfr18ciaT0oaQOSSSmLAQ3G43h+ub2FBcxfLNB1UzDgxkVg8qr4FA5e1MF2Mm6vWfoR8ageP7MhqWvOVXO1oaC7RUs0pknZI+lPyMoWQnRDMqMZqYsBC+L6vh+jfWK5LRK5Xvu7SUVY61PCk1ZgUi64DtD0SfKDZRS4kJZ9niacRHhLJq/2GKayyMTY7hkpMyyc9MYMnyddQ3NffaTrTZxLLF00iPj2RTcRVf7K0gPT6ChblpTM9M5Nrlaymvaxz0rBNS47j/7AnUNdrZXFLNqv1HiA41MXNkIjefOoZTRyVx01sbsDtd/crqwWQg8snzMY5PwbHrMLY3v0OfFIlp7ihMMzJp+NU7OHce9rm58D+fRcjcbJxFNdje/g5dtJmQ07OJfO4iLHd+hOObA6rIapx9AoaxSTh3HcFV1QDNLvRpMZhmj8R0ejaND3yJ/YOdfYqnVL12FG4ycM9Z42lyOIkIUfQ7kB8p2K+m/AzM1+TjdrhwldTibnKgM/cvt1L9eu64EVibnWwtraHGasOo15OdGM3iyZksykvlVysKKDxaHzRZPai8BgKZt7OwO+eiCzP1K56WxgIt1axSWS+YMILZWcnYmp2U1lqJCQvpV65eqXzfpaWscqzVlRJjVqCyDsj+QPSZYv8P/Ob0E4mPCOWRr3by9tbi9tdvnj2GxZMzuX5mDg99uaPXdm6YmUN6fCSvbzrAk6v2tL9+0cR0fj3nRH47N5fb3t046FmrLTbu+/g7viqs8Pg258lVBp6+JJ9xKfFcMCGd5ZsP9itrR6GXTcI4PgX7ykKsd30CrR9r/LKQyL+fQ/jdZ3D8slfbX++JaV4OIXOzcXxfTsPSd8DuBMD+7nYil11E+J2nU7/pRbD27QAlEFkbH/yqPV9H+pFDiHpxMWE3z8L+yW5w+D5QK1WvHd02ZyyRIUZeLfiB60/J6dPv+krJfm1eW4RjewXO/ZVgcxL93tXohkf3K59S/Xr5y9963fGek5fGnfPyuG5GNre/tylosnak9hoIZN6OTGeNIeS0UVgf/Irw38/xO5+WxgIt1axSWV/bcIB/ri6kuKaBxKgw3rv2tH7l6o3a911ayirHWp6UGrMClXUg9gei7xS5Ry0lJpz8jATK66y802FjBPjX2kKsdgdnjh2O2WjosZ0wk4Ezx6ZgtTt4Ye0+j/fe3lpMRZ2V/MwEhseEDXrWfZXH+XxPeZdT7tZmJ8s3tQwYk9Li/c7pTeh5eQA0PbnaY6NzfHMAx9ZSDCcMwTgp1be2zm9t659rPQZn5+4jNH9ZiD4+nJA5o1SR1dvOA8D1QzXOohp0UaHo4nyvCaVqoKNTRiayMDeNR7/eRaUlAJe6tVKyX12HjrV802bz3r99pWS/dvft6Mq9LZfkpsVFBE3WztRcA94oOha00iVFEX77qdje34FjXZHf2bQ0FmipZpXMuqOiloPVDQTi6jZv1Lzv0lJWOdbypNSYFcisA7E/EH2nyERt0oiWjWRDUVWXSbu12cm28mOEmYzkDo/tsZ3cYbGYTQa2lR/D2uxZKG6goKgKgJPShgx61p44XC07QaeCexZ9agz6YdE4i2twVXS9JKV5XctAaJyc1ntjIQYMecNxNzbj+K6sf20FOmtPn5MWiyE9DtcxK+4qi8+/p3QNxIWFcMe8PFbtO8x/d5f7nKOvBqpf/TUQ29bMkYkA7K887ncboK2sHam9BjoLVN7we+fhbrDR+I9v+pVPS2OBlmp2ILIGgtr3XVrKKsdanpQaszrS2v5A+EeRSx/T4yIBOHTM+0ZceswCGQmkxUWw6VB1t+2MiG9pp6SbdkpqW17vz7d9SmXtycLclm8v1hdV+hfSC316HACuQ7Ve33eVtNwwqk+L672tlBh0Rj3OohqvN4i6DvneVqCzdmSckoZxfAqY9OiHx2CamQmA9a9f9ukSBKVr4I55eeh1Oh7s4+VRfRWoflVKILatRXmpJEaGER5i4IShUUwZMZSKOivPfLun91/+iWTtSO010Fkg8oZeOhHjpFQsN78LFjtEm/3Op6WxQEs1OxD72UBQ+75LS1nlWOtHSo5ZHWltfyD8o8hELSK0pZkGu/f7mRpaV/aJCu35BsrI1puuG7pZCcjXdnqiVNbuXDghnWmZiRQerePDHaX+hfRCFxEKgLvB5vV9d4O95eeiQntvK7K1LUs3bVna2vLvpm0ls3ZknDIC85VT2v/bVWXB+sfPcRQU9/BbXSlZAwtzU5mVlcTdH27hmNXepxx9Fah+VUogtq1zctPIHf7jTmZXRS33ffIdpbXWfiTVVtaO1F4DnSmdV58Zj/mGGdjf3YZjY0m/82lpLNBSzQZ6Pxsoat93daT2rHKs1ULpMasjre0PhH9kORcFzc5K4pbTxlDV0MSdH2zp8+l48zX5XV6zf7zL6yntwTYYWZueWUPTM2vAbMQwIo7Qy08i4vFzafrnWmwv9W+BGX8kR4dx66ljWLm3gpWF/q0A1ZmWamAgXLt8HdCyGmxOUgzXz8jmxStmcPeHWykorhrkdJ6Uyqq1GhiwvAY94X+Yj6vaQuNTq5Vtu58CMRYMBC1tX0rR0r5LS1kHkmaOtRQYs7S2PxDKU2SiZmn9ZiQyxPs3I5Gt36wct/W8gmCD3eHx8/620xOlsnY2KyuJPy2cyDGrnaUrCvx6hID52q4bpGNLKa6K+vazX21nwzrTRbac/XIf9/7NSkdt3760fRvTpa2Itra6/1Z4oLJ61eTAWViJ9b7PiIg2Y75uOo6CQzh3H/Hp15Wqgbvm52FzuPj7SuUucxrUfu2nQG1bAPVNzWwsrmL34VreuGo29y4Yz/nPf43Nz9XS1JxVazUwUHlDfzEFQ3YiDTe+DY3+7wM6UvNY0Jmaa3Ygs/aXlvZdWsramRxrKTNmaW1/IJSnyESt+FgDACO6uXcstfX17u49a3OopqWd7u5BS4v1rZ2eKJW1oznZydy/YALVVhtLVxT4fdlI7cmPd/ueq7j1WuMRsV7fb7sGue2a5J64yupwO1zoU2LAoOtyn5p+RO9tDVTW3jSvL8I0PQPjpBSfdyBK1UBOYgxRZhOf3XiG1/evys/iqvwsVu0/zB3vb/Epm1r61R+B2LY6a7A52FF+jNmjkskcEsWeI3V+taPmrFqrgYHKa8xJRKfXEfXcRd7fH59CbMGtuI/bqDv92V7bA3WPBYHK2hMtbV/+Usv25cu+S0tZO5NjLWXGLLXUgBg8ikzUthyqAWBqxlB0eN5vGm4yMG54HI3NDnaU1/bYzo6KWpqanYwbHke4yeCx8qOutX2AzSX+33ysVNY280YP556zxlHZYGPpivX9fhh3d1yldbgq6jGkx6MfFt3ltLdpWjoAjk0+XANtd+LcXo5xYirGCSk4Nnte392ntgKdtRf6hJYblr0titIdpWrg011lmE1dlxZOiw1nYtoQCo/WsedIvWIPOx7IfvWH0ttWdxIiW27Edrr8f8CplrJ2pPYa6EzJvM0binHVdh1fdeEmQs7IwVVtoXn1QejDw6m1NBZoqWYHKqvS1L7v6kjtWeVYKzBjVqCyCvVSZHn+sjor64sqGR4TzgUT0z3eu2Z6NuEhRj7bVU6T48eJV3p8BOnxnt+0NDY7+WxXGeEhRn453fMZXhdOTGd4TDjrD1b2awNVKivAgrEp3HvWeI7UN3HjG+sCNnC0sb23HQDzTTNbZq6tjLNOwDgxFeeBahxbPCdduqSolpWBOl1Oanu3ta3rpkPIjwcYhjFJmE7PxlVjxf71/sHPajKgHzXU62cYxiQRen4eboeL5j48l0SpGnjs61088Pn2Lv8+2tnyd605UMkDn2/nne/8v2G8MyVrQGlK9WtSlJm4cO8L2Zw7Lo2xw2I5XN/ID1X+LyGupaydqbkGvFEqr/3tbTT+9csu/5qeXgOAq7S25bVHV/mcTUtjgZZqVsn97EBT875LS1nlWCswY1agsgr1Uuz/pYe/3MmyxdO4fc6JTB4xhOJqC2OHxTB5xFCKaxp4bvVej59/46rZAEx75BOP159dvZeJafFcNvkEshOi2XW4jvQhEczOSqbGYuPhlTtVkXVSWjz/O38cBr2OLSXVnJ3b9TkVDbZm3txS1O+8bWyvb8E0I5OQudnoh0Xj2FiCPjkK09xRuBubsf75iy7L50bcNx/jSak03PC2x8ba/Ple7KeOJGRuNlGvXE7z6gPoYsyEnJ4Nej3WB75sWUZ2kLPqQo1Ev3YFzn2VOH+oxnW0AZ3ZiD4jvv3ZIE1Pftt+CYCvlKrXgaZkDehizITdPOvH/45t+SY9/K4z2ttoemVjn/pWiX7NSYrhLwsnsr2ilrJaCzUWO9FhJnKHxZKVEI3F7uCPn37f7wfgailrR2qvgUDmDQQtjQVaqlml+nVcShzntO5fw1q/VEyLjeDu+ePaf+bP/93Wv7AdqH3fpaWscqwVeFrbH4i+U2yiVlZn5ap/r+Ha6dnkZwxlemYiVRYbb24+yAvr9nG8myX3O6tvambJ8nVcPS2LWVnJjE+Np67Rzkc7Sli2Zh+VDU2qyJocHYZB3/L1xaI87w8TrKizKjp40Oyk4aZ3MV85GdO8HEIXT8RtsdO86geanl+P62BNn5qz3vMpzm0VhCw6kdCLJuC2O3B8V0bT/23Aub1CFVndjc00PrcW48QUjJNS0MWEgRtclQ00f7Yb29vbcO7s+yprStXrgFOwBnThIYQsHNvl9ZCzf3zN/vGuPg3KSvTr3iN1rNhaxPiUeKZnJhJtNmFzuiivtfL6pgO8uaWIo8fVMQ4MVFYPKq+BQOYNBC2NBVqqWaX6NTU2nLNbn5fVJj4i1OM1JSdqat93aSmrHGsNAK3tD0Sf6dxut0/fmw32mYSfqk9XFA52hJ+ksy7OHuwIPtNSDWipX7VESzWgNVKzQravwNDStiU1EBixBbcOdoSfPEXuURNCCCGEEEIIoRyZqAkhhBBCCCGEyshETQghhBBCCCFURiZqQgghhBBCCKEyMlETQgghhBBCCJWRiZoQQgghhBBCqIxM1IQQQgghhBBCZWSiJoQQQgghhBAqIxM1IYQQQgghhFAZ42AHCAR5An1gnHVx9mBH8JmWakD6VUgNBI7W8mqFlmpWCC3Vq4xZoiM5oyaEEEIIIYQQKiMTNSGEEEIIIYRQGZmoCSGEEEIIIYTKyERNCCGEEEIIIVRGJmpCCCGEEEIIoTIyURNCCCGEEEIIlZGJmhBCCCGEEEKojEzUhBBCCCGEEEJlFH3gdUKkmSUzRnFyRgIxZhPVFhvf7D/CC+v2cdzm8KmNyydnMiltCJlDIokJC8HtdnO4vokNxVUs33yQyoYmJSO3CDVg/vkUTGdko0+Oxm2x49hSStPz63AVHetbW3odoRdPIGThWPRpcbhtDpw7K2j6vw04t1eoJqtp1khM83IwjBqKLj4cXYgRV+VxnLuPYvv3Zpx7jvoVr781YDYamJWVxIwTEslJiiYxyozLDYdqLHyxp5y3thbhcLn9ytYjldeAbFtoZtsy5qdjmpGJcUIKuuQodKFGXIfrcawrpunljbhrrH7FU6IGOpuQEsdTF+dj0Ot4cf1+lq0J0INWlayDDnQxZqJe/xn6oRE4vi+jYclbqskaqDE2EFnVXrPRZhNX52cxKyuJIRGh1DU1U1BUybI1+9Q/bnWg5noNVFYtjVvBvp8N1Dgg+kfndrt9Ouqd9sgnPb6fEhPOssXTiI8IZdX+wxTXWBibHMPkEUMprmlgyfJ11Dc19/o5b109G2uzk/2V9dRYbRj1erITo5mUNoQGWzO/WlFA4dH6Htvo01PdTQYinz4f4/gUHLsO49hUij4pEtPcUdDsouFX7+Dcedjn5sL/uoCQudk4i2poXn0AXbSZkNOzIcSI5c6PcHxzwPdsAcwads8ZGCem4tx1BFdVAzS70KfFYJqeCSYDjQ98if2DnR6/c9bF2T22qUQN5GcM5bELplLXaGdzSTWltVaiQ03MHJnI0Egz28pquOmtDdidrh7b0VINDES/gmxbA5I1xEDstzfhtjtwbC3Dub8K9DpMk9MwjErAVW2h4bq3cJXUevzaQNVAR+EmA69eeQoxYSFEhBh9PuDpUw2A4nXg8Tf87WxMU9PRRYQoc+A7yGPsoGRVec1Gm00sWzyN9PhINhVXsetIHenxEczOSqbGYuPa5Wspr2vssY3BHLc6UnO9+pNVS+NWb4J+P+vnOBBbcKvvWYVfFDuj9pvTTyQ+IpRHvtrJ21uL21+/efYYFk/O5PqZOTz05Y5e27n85W+9HoSfk5fGnfPyuG5GNre/t0mp2IReNgnj+BTsKwux3vUJtE5bjV8WEvn3cwi/+wyOX/Zq++s9Mc3LIWRuNo7vy2lY+g7YnQDY391O5LKLCL/zdOo3vQjWvg1Mgcja+OBX7fk60o8cQtSLiwm7eRb2T3aDo+cJUUdK1EC1xcZ9H3/HV4UVHmfOnlxl4OlL8hmXEs8FE9JZvvmgz7l6o/YakG1LQ9uW003js2uwv7MN93Fb+8tNOgj73RxCzx9H2C2zsPzmgz7lU6oGOrptzlgiQ4y8WvAD15+S06ff7Qsl66Aj01ljCDltFNYHvyL893NUlzUQY2xAsqq8Zm+YmUN6fCSvbzrAk6v2tL9+0cR0fj3nRH47N5fb3t3Yp2w9CdZ6DURWLY1bQb+fDdA4IPpPkXvUUmLCyc9IoLzOyjsdChzgX2sLsdodnDl2OGajode2ujtTsnJvy6VNaXER/Q/cQeh5eQA0Pbnao5Ad3xzAsbUUwwlDME5K9a2t81vb+udajx20c/cRmr8sRB8fTsicUarI6u0AAsD1QzXOohp0UaHo4sJ8zqZUDeyrPM7ne8q7XN5obXayfFPL5GxSWrzPuXyh5hqQbau1La1sW04Xtpc2euzoAHBD0wsFAL5vo62UrIE2p4xMZGFuGo9+vYtKSwAuxelA0XGrlS4pivDbT8X2/g4c64rUmVXhMTZgWVVcs2EmA2eOTcFqd/DC2n0e7729tZiKOiv5mQkMj/G/HzsL2npVOKuWxi3ZzxKQcUAoQ5GJ2qQRLQfOG4qqukzarc1OtpUfI8xkJHd4rN+fMXNkIgD7K4/73UZn+tQY9MOicRbX4Kroeiq6eV3LBmucnNZ7YyEGDHnDcTc24/iurH9tBTprT5+TFoshPQ7XMSvuKovPvzcQNeBwtQyATgXvUVN7Dci2xU9m22o7c+Lu5bLdzpSugbiwEO6Yl8eqfYf57+7yPmXpq0D1bfi983A32Gj8xzeK5AT1j7GDkXWwazZ3WCxmk4Ft5cewNntOfN1AQVEVACelDelTvu5IvSqXVUvjluxne+HnOCCUocilj+lxkQAcOuZ9p1N6zAIZCaTFRbDpULVPbS7KSyUxMozwEAMnDI1iyoihVNRZeebbPb3/so/06XEAuA7Ven3fVdJyE6Y+La73tlJi0Bn1OItqwNl1IuE65Htbgc7akXFKGsbxKWDSox8eg2lmJgDWv37Zp8slAlEDnS3Mbfk2Z31RpV+/743aa0C2Le1uW52FLDoRAMf64l5+0pPSNXDHvDz0Oh0P9vGSI38Eom9DL52IcVIqlpvfBYsdos39zgnqH2MHImtng12zI+Jb2inppp2S2pbXlTpLEez1qmRWLY1bsp/tmb/jgFCGIhO1iNCWZhrs3u8PaWhdLScq1ORzm+fkppE7/Mfi2lVRy32ffEdprXKrzugiQgFwN9i8vu9usLf8XFRo721FtrZl6aYtS1tbIX3OCcpm7cg4ZQTmK6e0/7eryoL1j5/jKOjbBhmIGujowgnpTMtMpPBoHR/uKPWrDW/UXgOybWl32+rIMCYJ8zUn47bYaHpubZ9+V8kaWJibyqysJO7+cAvHrPY+5fCH0n2rz4zHfMMM7O9uw7GxRJmQrdQ+xnYULDUbGWL0+Hl/2/FVMNer0lm1NG7JfrZ7/RkHhDIUXZ5fSdcuXwe0rPiUkxTD9TOyefGKGdz94VYKiqt8bsd8TX6X1+wf7/J6mniwDUbWpmfW0PTMGjAbMYyII/Tyk4h4/Fya/rkW20vK3aDdH7OzkrjltDFUNTRx5wdb+nzpo5ZqYCDIttVioLLq02KJeOQcMOqx3P0prrK6gH+mN8nRYdx66hhW7q1gZaF/K8F5M2B9a9AT/of5uKotND612q8mtDTGSs0GhtSrFwpkDZRAjVuB9lPYz/6UxwEtUWSiZmn9tiEyxPu3DZGt31Yct/V9Rbb6pmY2Flex+3Atb1w1m3sXjOf857/G5uNKWeZruxa5Y0spror69m/o276x70wX2fINfZebK71o+0aj7RuOLm1FtLXV/bdBA5XVqyYHzsJKrPd9RkS0GfN103EUHMK5+4hPvx6oGpiVlcSfFk7kmNXO0hUFvS7D7I2WaqAz2ba0vW3p02KJfOZCdNFmrHd/iuPbvj9CQKkauGt+HjaHi7+vVPbSoYHq29BfTMGQnUjDjW9Do3+re2ppjJWahQa7w+Pn/W2nI6nXwGTtTO3jVkeyn+1KiXFAKEORiVrxsQYARnRznXhq6+vdXWfuiwabgx3lx5g9KpnMIVHsOeLbzL725Me7fc9V3Hr97ohYr++3Xdfbdp1vT1xldbgdLvQpMWDQdbmXRj+i97YGKmtvmtcXYZqegXFSis8TtUDUwJzsZO5fMIFqq42lKwr8vmRASzXQmWxb2t229BlxRD51AboYM5b//djv57wpVQM5iTFEmU18duMZXt+/Kj+Lq/KzWLX/MHe8v8XnfAPVt8acRHR6HVHPXeT9/fEpxBbcivu4jbrTnx3UrL3xZYyVmoVDNS3tdHcPWlps38c/qdfAZO1M7eNWILL2RO37WY/fU2gcEMpQZKK25VANAFMzhqLD8/7ocJOBccPjaGx2sKO8tl+fkxDZcmOr06XMyjOu0jpcFfUY0uPRD4vucirZNC0dAMcmH67Xtjtxbi/HODEV44QUHJs976PqU1uBztoLfULLjbXeFm7ojtI1MG/0cO45axyVDTaWrljv15k0X6i9BmTbQpPbln7kECKfOh9dRCiWOz7CsabIr2ygXA18uqsMs6nr8tJpseFMTBtC4dE69hyp7/VhrH2hZN82byjGVdt1HNCFmwg5IwdXtYXm1Qehjw/QDUTW3vgzxnYULDW7o6KWpmYn44bHEW4yeKz8qGttH2BziX8LVHUWrPUaiKxaGrdkP/sjJccBoQxFlucvq7OyvqiS4THhXDAx3eO9a6ZnEx5i5LNd5TQ5fhxk0+MjSI/3/PYiKcpMXLj3BQHOHZfG2GGxHK5v5Icq5ZY3tb23HQDzTTNbRv5WxlknYJyYivNANY4tngeGuqSoltV2Ol2OYXu3ta3rpkPIjwOLYUwSptOzcdVYsX+9f/CzmgzoRw31+hmGMUmEnp+H2+GiuQ/PUFGqBgAWjE3h3rPGc6S+iRvfWBewSVobNdeAbFutbWll2wIMoxJaLhkJD8Hy2w/7vaNTqgYe+3oXD3y+vcu/j3a2/F1rDlTywOfbeec7ZVf2Uqpv7W9vo/GvX3b51/T0GgBcpbUtrz26atCzBmKMDVhW1Fuzjc1OPttVRniIkV9O93xO4oUT0xkeE876g5WK7iOCsV4DkVVL45bsZ1soPQ4IZSi2mMjDX+5k2eJp3D7nRCaPGEJxtYWxw2KYPGIoxTUNPLd6r8fPv3HVbACmPfJJ+2s5STH8ZeFEtlfUUlZrocZiJzrMRO6wWLISorHYHfzx0+9R8DFa2F7fgmlGJiFzs9EPi8axsQR9chSmuaNwNzZj/fMXXZZQjrhvPsaTUmm44W2PDaD5873YTx1JyNxsol65nObVB9DFmAk5PRv0eqwPfNmy5O0gZ9WFGol+7Qqc+ypx/lCN62gDOrMRfUZ8+/M2mp78tv20uq+UqIFJafH87/xxGPQ6tpRUc3Zu1+d/NNiaeXNLUZ+y9UTtNSDbloa2rahQIp4+H31MGM0bDmHMG4Yxb1jXz3tja7crdXmjRA0MFiXrQCtZAzXGBiSrymv22dV7mZgWz2WTTyA7IZpdh+tIHxLB7Kxkaiw2Hl650+dMvgjGeg0ULY1bwb6fDdQ4IPpPsYlaWZ2Vq/69hmunZ5OfMZTpmYlUWWy8ufkgL6zbx/FultftaO+ROlZsLWJ8SjzTMxOJNpuwOV2U11p5fdMB3txSxNHjyj2NHoBmJw03vYv5ysmY5uUQungiboud5lU/0PT8elwHa/rUnPWeT3FuqyBk0YmEXjQBt92B47symv5vA87tFarI6m5spvG5tRgnpmCclIIuJgzc4KpsoPmz3dje3oZzZ99XV1KiBpKjwzDoW74WWpTn/SGNFXVWRSdqaq8B2bZaaGHb0kWGoo8JA8A0dQSmqSO8/pz941192tkpUQODRuE6CCiVj7GByKr2mq1vambJ8nVcPS2LWVnJjE+Np67Rzkc7Sli2Zh+VDeoetwJK5Vm1NG4F+342UOOA6D+d2+32aW6vhm9mffXpisLBjvCTdNbF2YMdwWdaqgHpVyE1ILRGalZoqQa0REv1Gltw62BH+MlT5B41IYQQQgghhBDKkYmaEEIIIYQQQqiMTNSEEEIIIYQQQmVkoiaEEEIIIYQQKiMTNSGEEEIIIYRQGZmoCSGEEEIIIYTKyERNCCGEEEIIIVRGJmpCCCGEEEIIoTIyURNCCCGEEEIIlTEOdoBgd9bF2YMdwWefrigc7Ag+k34NDC31q5ZoqQa0RmpWiMDQ0rilpXFAS1nXDXaAICBn1IQQQgghhBBCZWSiJoQQQgghhBAqIxM1IYQQQgghhFAZmagJIYQQQgghhMrIRE0IIYQQQgghVEYmakIIIYQQQgihMjJRE0IIIYQQQgiVUfQ5agmRZpbMGMXJGQnEmE1UW2x8s/8IL6zbx3Gbw6c2Lp+cyaS0IWQOiSQmLAS3283h+iY2FFexfPNBKhualIzcItSA+edTMJ2RjT45GrfFjmNLKU3Pr8NVdMznZkyzRmKal4Nh1FB08eHoQoy4Ko/j3H0U278349xz1K94SvTrlPSh5GcMJTshmlGJ0cSEhfB9WQ3Xv7Her0w++Yn3q9loYFZWEjNOSCQnKZrEKDMuNxyqsfDFnnLe2lqEw+X2K1uPFOpXY346phmZGCekoEuOQhdqxHW4Hse6Yppe3oi7xupXPC3Vq5ayelB5DQQqb2e6GDNRr/8M/dAIHN+X0bDkrT63oUQNAESbTVydn8WsrCSGRIRS19RMQVEly9bsU3S/paWaVapvO5qQEsdTF+dj0Ot4cf1+lq0JwLO8tLR9qXjbClRWtR4TtBmIsUCzx9uizxSbqKXEhLNs8TTiI0JZtf8wxTUWxibHcMlJmeRnJrBk+Trqm5p7befccSOwNjvZWlpDjdWGUa8nOzGaxZMzWZSXyq9WFFB4tF6p2GAyEPnk+RjHp+DYdRjbm9+hT4rENHcUphmZNPzqHZw7D/vUlHH2CRjGJuHcdQRXVQM0u9CnxWCaPRLT6dk0PvAl9g929imeUv16wYQRzM5KxtbspLTWSkxYSJ9y9FkQ9OuE1DjuP3sCdY12NpdUs2r/EaJDTcwcmcjNp47h1FFJ3PTWBuxOV5+y9Uipfg0xEPmP83DbHTi2luHceAj0OkyT0wi9dCKmM7JpuO4tXCW1fYqnpXrVUlYPKq+BgOX1IuzOuejCTH5HU6oGos0mli2eRnp8JJuKq/hibwXp8REszE1jemYi1y5fS3ldo985lc6rpe2ro3CTgXvOGk+Tw0lEiKLfM/9IS9uXiretQGZV6zEBDMxYoNnjbeEXxUa635x+IvERoTzy1U7e3lrc/vrNs8eweHIm18/M4aEvd/TazuUvf+v1wPacvDTunJfHdTOyuf29TUrFJvSySRjHp2BfWYj1rk+g9QSI8ctCIv9+DuF3n8Hxy15tf70njQ9+BXZnl9f1I4cQ9eJiwm6ehf2T3eDw/cBdqX59bcMB/rm6kOKaBhKjwnjv2tN8zuCPYOjXaouN+z7+jq8KKzzOnD25ysDTl+QzLiWeCyaks3zzQZ9z9UaxfnW6aXx2DfZ3tuE+bmt/uUkHYb+bQ+j54wi7ZRaW33zQp3xaqlctZe1I7TUQsLydmM4aQ8hpo7A++BXhv5/jVzalauCGmTmkx0fy+qYDPLlqT/vrF01M59dzTuS3c3O57d2NfmUMRF4tbV8d3TZnLJEhRl4t+IHrT8lROjKgre1LzdtWILOq9ZgABmYs0OrxtvCPIveopcSEk5+RQHmdlXc6FA3Av9YWYrU7OHPscMxGQ69tdXf2YeXeCgDS4iL6H7iD0PPyAGh6crXHAOH45gCOraUYThiCcVKqb415GTgAXD9U4yyqQRcVii4uzOdsSvbrjopaDlY3EIgr8bwJhn7dV3mcz/eUd7m80drsZPmmlsnZpLR4n3P5QrF+dbqwvbTR4wACADc0vVAA4Pv/P620VK9aytqZmmsgoHk70CVFEX77qdje34FjXZFfuZSqgTCTgTPHpmC1O3hh7T6P997eWkxFnZX8zASGx/g+RgUyL2hr+2pzyshEFuam8ejXu6i0BO6SLC1tX2rdtgKeVaXHBAMxFmj5eFv4R5GJ2qQRLQejG4qqunwZYm12sq38GGEmI7nDY/3+jJkjEwHYX3nc7zY606fGoB8WjbO4BldF19O7zetaNgLj5LT+fU5aLIb0OFzHrLirLD7/3kD0ayBIv4LD1TIAOhU8Ehqofm37FtLdx0s2tVSvWsrakdproLNA5Q2/dx7uBhuN//jG72xK1UDusFjMJgPbyo9hbfY8gHQDBUVVAJyUNsTvrErmHQhKZ40LC+GOeXms2neY/+4uVzZsB1ravtS8bXUWLMcEAzEWaPV4W/hPkUsf0+MiATh0zPuGUXrMAhkJpMVFsOlQtU9tLspLJTEyjPAQAycMjWLKiKFU1Fl55ts9vf+yj/TpcQC4DtV6fd9V0nJzqz4trk/tGqekYRyfAiY9+uExmGZmAmD965d9ugQhEP06EKRfYWFuyzeD64sq/fp9bwLVr52FLDoRAMf64l5+0pOW6lVLWTtSew10Foi8oZdOxDgpFcvN74LFDtFmv7IpVQMj4lvaKemmnZLaltf7++20lmpW6ax3zMtDr9PxYB8vlewrLW1fat62OguWY4KBGAu0erwt/KfIRC0itKWZBrv3mxcbWlegiQr1/cbUc3LTyB3+40a7q6KW+z75jtJahVYhA3QRoQC4G2xe33c32Ft+Liq0T+0ap4zAfOWU9v92VVmw/vFzHAV9G5QD0a8DIdj79cIJ6UzLTKTwaB0f7ij1qw1vAtWvHRnGJGG+5mTcFhtNz63t0+9qqV61lLUjtddAZ0rn1WfGY75hBvZ3t+HYWNKvbErVQGTrohYN3ay0plQtaalmlcy6MDeVWVlJ3P3hFo5Z7cqF9EJL25eat63OguWYYCDGAq0ebwv/BWjZpP67dvk6oGUFnZykGK6fkc2LV8zg7g+3UlBc5XM75mvyu7xm/3iX19PvSml6Zg1Nz6wBsxHDiDhCLz+JiMfPpemfa7G91P8bytVA+tW72VlJ3HLaGKoamrjzgy19vvRxMPq1jT4tlohHzgGjHsvdn+Iqqwv4Z4qutFYDA5bXoCf8D/NxVVtofGq1sm0LVUqODuPWU8ewcm8FKwv9W72wMy1tX1ratuSYQLuUOt4WgaHIRM3SOoOPDPE+g49s/QbguK1vS/EC1Dc1s7G4it2Ha3njqtncu2A85z//NTYfV/MxX9t18HBsKcVVUY/b0vLtji7S+7c4usiWJYu73AzsqyYHzsJKrPd9RkS0GfN103EUHMK5+4hPvx7Ifu0v6deuZmUl8aeFEzlmtbN0RYFfS/AOVr/q02KJfOZCdNFmrHd/iuPbA31uQ8312pmas2qtBgYqb+gvpmDITqThxrehsf//vyhVAw12h8fP+9tOb9Rcs50plfWu+XnYHC7+vlK5Sx61tH1paduSY4KBGQvUfLwtAkORiVrxsQYARnRz3W1q6+vdXbfriwabgx3lx5g9KpnMIVHsOeLbt/21Jz/e7Xuu4tbrokfEen2/7Xrptuun+6N5fRGm6RkYJ6X4PHgMRL/6S/rV05zsZO5fMIFqq42lKwr8vmRgMPpVnxFH5FMXoIsxY/nfj3F80/dJGqi7XjtTc1at1cBA5TXmJKLT64h67iLv749PIbbgVtzHbdSd/myv7SlVA4dqWtrp7r6TtFhlaknNNduZUllzEmOIMpv47MYzvL5/VX4WV+VnsWr/Ye54f4tP2bS0fWlp25JjgoEZC9R8vC0CQ5GJ2pZDNQBMzRiKDs97OMNNBsYNj6Ox2cGO8tp+fU5CZMuNrU6XMrN7V2kdrop6DOnx6IdFdzlFb5qWDoBjU/+v19YntNwAitP3S+EGql+VFmz9Om/0cO45axyVDTaWrlivyINtvQlEv+pHDiHyqfPRRYRiueMjHGuK/M6npXrVUtaO1F4DgczbvKEYV23XbUsXbiLkjBxc1RaaVx8EHx+irFQN7KiopanZybjhcYSbDB6rvela2wfYXNK/BT60VLNKZf10VxlmU9dlxtNiw5mYNoTCo3XsOVKv2EN5tbR9qXnbCmTW3gzmMcFAjAVaPd4W/lNkef6yOivriyoZHhPOBRPTPd67Zno24SFGPttVTpPjx6JNj48gPd7zG4GkKDNx4SFeP+PccWmMHRbL4fpGfqhSbslQ23vbATDfNLNlS2plnHUCxompOA9U49jiuSCELimqZRWjjqe3TQb0o4Z6/QzDmCRCz8/D7XDR3IfnkijVr4MhWPp1wdgU7j1rPEfqm7jxjXUBm6S1UaxfAcOohJZLccJDsPz2w34fQGipXrWUtTM110Ag89rf3kbjX7/s8q/p6TUAuEprW157dJVPuZSqgcZmJ5/tKiM8xMgvp4/yeO/CiekMjwln/cHKfo8NWqpZpbI+9vUuHvh8e5d/H+1sqZc1Byp54PPtvPNd/1Yn7UhL25dat61AZlXzMcFAjAVaPt4W/lFsMZGHv9zJssXTuH3OiUweMYTiagtjh8UwecRQimsaeG71Xo+ff+Oq2QBMe+ST9tdykmL4y8KJbK+opazWQo3FTnSYidxhsWQlRGOxO/jjp98r+pBO2+tbMM3IJGRuNvph0Tg2lqBPjsI0dxTuxmasf/6iyzKvEffNx3hSKg03vN0+sOhCjUS/dgXOfZU4f6jGdbQBndmIPiO+/dkgTU9+234JgK+U6FeAcSlxnJPbkiMspOUbyrTYCO6eP679Z/783219ytaTYOjXSWnx/O/8cRj0OraUVHN2btdnwDTYmnlzS1GfsvVEsX6NCiXi6fPRx4TRvOEQxrxhGPOGdf28N7Z2u1KXN1qqVy1l7UjtNRCovIGgVA08u3ovE9PiuWzyCWQnRLPrcB3pQyKYnZVMjcXGwyt3qiqvlravgaal7UvN21agsqr5mAAGZizQ6vG28I9iE7WyOitX/XsN107PJj9jKNMzE6my2Hhz80FeWLeP490sV9rR3iN1rNhaxPiUeKZnJhJtNmFzuiivtfL6pgO8uaWIo8eblIrcotlJw03vYr5yMqZ5OYQunojbYqd51Q80Pb8e18Ean5pxNzbT+NxajBNTME5KQRcTBm5wVTbQ/NlubG9vw7mz76tWKdGvAKmx4Zzd+myvNvERoR6vKXkwGQz9mhwdhkHf8tXgojzvD+qsqLMqOlFTql91kaHoY8IAME0dgWnqCK8/Z/94V58OIrRUr1rK6kHlNRCovIGgVA3UNzWzZPk6rp6WxaysZManxlPXaOejHSUsW7OPygZl9ltaqlmlsg44LW1fKt62ugiCYwIYmLFAs8fbwi86t9vt03x5sL/l6otPVxQOdgSfnXVx9mBH8Jn0a2BIvwot1YDWSM0K2b6EjAOBse72BYMd4SdPkXvUhBBCCCGEEEIoRyZqQgghhBBCCKEyMlETQgghhBBCCJWRiZoQQgghhBBCqIxM1IQQQgghhBBCZWSiJoQQQgghhBAqIxM1IYQQQgghhFAZmagJIYQQQgghhMrIRE0IIYQQQgghVEbndrvdvvxg7cmPBziKEEIIIYQQQgtiC24d7Ag/eXJGTQghhBBCCCFURiZqQgghhBBCCKEyMlETQgghhBBCCJWRiZoQQgghhBBCqIxM1IQQQgghhBBCZWSiJoQQQgghhBAqIxM1IYQQQgghhFAZY8BaDjVg/vkUTGdko0+Oxm2x49hSStPz63AVHfO5GdOskZjm5WAYNRRdfDi6ECOuyuM4dx/F9u/NOPccVU1WfUYcIWfkYMhOwJCdgD45GoDa6f8Ap0+PqxuwrC2BdYRePIGQhWPRp8Xhtjlw7qyg6f824Nxeoa6sHehizES9/jP0QyNwfF9Gw5K3VJPVmJ+OaUYmxgkp6JKj0IUacR2ux7GumKaXN+Kusaomq5bqVUtZO1Nzvcr4Gri8WhoLOpOaDb4a0FK/aimrlvZdAzbGij4JzAOvTQYinz4f4/gUHLsO49hUij4pEtPcUdDsouFX7+DcedinpsLuOQPjxFScu47gqmqAZhf6tBhM0zPBZKDxgS+xf7DT92wBzBp66UTCbpuN2+HCVVKLflg0OrNRuSJXMCtA+F8XEDI3G2dRDc2rD6CLNhNyejaEGLHc+RGObw6oJqtH7r+djWlqOrqIEGUOIpTKGmIg9tubcNsdOLaW4dxfBXodpslpGEYl4Kq20HDdW7hKagc/K9qqVy1l7Uy19YqMrwHLq7GxoDOp2eCrAc30q8ayamnf5U9WeeB14AVkohZ65RTCbpyBfWUh1rs+gdZPMM46gci/n4PzQDXHL3u1/fUehRjA7uzysn7kEKJeXAx2J3Vn/hMcLp/zBSqrfkQcuqhQnPsrweYk+r2r0Q+PVmyDVDKraV4OEX86C8f35TQsfae9jw1jkohcdhHuBjv1F7wI1uZBz+qR+6wxRPxhPtYHvyL893MUOYhQLKtBT+jPTsL+zjbcx20/vq6DsN/NIfT8cTR/ewDLbz4Y/Kxoq161lLUjVdcryPgaqLwaGws6kpoN0hrQSr9qLKuW9l3+ZJWJWuAF5B610PPyAGh6crVHcTi+OYBjaymGE4ZgnJTqW2NeNkYA1w/VOItq0EWFoosLU0VW16FjLd9c2Lxn7i8ls4ae39rWP9d69LFz9xGavyxEHx9OyJxRqsjaRpcURfjtp2J7fweOdUV+ZwtYVqcL20sbPXfKAG5oeqEAoM9/c8Cyoq161VLWNqqvV5DxtZNgHQvaSM0GcQ1opV81llVL+66BGGNF3yk+UdOnxqAfFo2zuAZXRX2X95vXFQNgnJzWv89Ji8WQHofrmBV3lUXVWZWgaNYQA4a84bgbm3F8V9a/tgKdtYPwe+fhbrDR+I9v/MrlzYDVQOs3e26nf9/wQRDXa4BJvXr5nCAbX0HGApCalRrw8jka6lctZVWClrIK/ym+mIg+PQ4A16Far++7SlpubNSnxfWpXeOUNIzjU8CkRz88BtPMTACsf/2yz5d2BDprICiZVZ8Sg86ox1lU4/V0tutQ//7uQPRr6KUTMU5KxXLzu2CxQ7TZr2ydDVQNhCw6EQDH+mK/2wjWeg00qVcZX0HGAqlZqQHQVr9qKWsgaCmr8J/iEzVdRCgA7gab1/fdDfaWn4sK7VO7xikjMF85pf2/XVUWrH/8HEeB/wNdoLIGgpJZdZGtbVm6acvS1lZIn3OC8v2qz4zHfMMM7O9uw7GxxK9M3RmIGjCMScJ8zcm4LTaanlvrdzvBWq+BJvUq4ysE91ggNdsimGugjZb6VUtZA0FLWYX//Jqoma/J7/Ka/eNdXk+9KqXpmTU0PbMGzEYMI+IIvfwkIh4/l6Z/rsX20kZVZfWXZPXCoCf8D/NxVVtofGq1X00MZr/q02KJeOQcMOqx3P0prrK6Hn9eaiAwpF57FgzjK8hY4JXUrNRAB1rqVy1l9ZeWsorA8G+idm3XwnFsKcVVUd9+lqbtrE1nusiWszRdbrD1VZMDZ2El1vs+IyLajPm66TgKDuHcfUR9WftooLK2ffvS9m1Ml7Yi2tqyD3rW0F9MwZCdSMONb0OjfytQDlYN6NNiiXzmQnTRZqx3f4rj294fdyD1GhhSrz76CY+vIGOBN1KzUgNeaaRfNZe1j7SUVQSGXxO1npbqdxW3XhM7Itbr+23XyrZdO9sfzeuLME3PwDgppdsNUi1ZfTFQWV1ldbgdLvQpMWDQdblPTT+i97YGKqsxJxGdXkfUcxd5f398CrEFt+I+bqPu9GcHNavH72XEEfnUBehizFj+92Ofn0kn9RoYUq9991MbX0HGAm+kZn8UrDXQG7X2qzdayuoLLWUVgaH4PWqu0jpcFfUY0uPRD4vucnrWNC0dAMem/l8Hr0+IbPkffj6LYiCz9peiWe1OnNvLMU5MxTghBcfmUv/bCnDW5g3FuGobu7yuCzcRckYOrmoLzasPQpN/3wQHogb0I4cQ+dT56CJCsdzxEY41RX5lG4isgRKsWbVYr90JpvEVgncskJr9UbDWQG/U2K/d0VLW/tJSVuG/gDxHzfbedgDMN80E3Y+vG2ed0PI0+QPVOLZ4Tg50SVEtK9iEdpg7mgzoRw31+hmGMUmEnp+H2+GiuR/Pe1Es6wBQMqvt3da2rpve8vDIVoYxSZhOz8ZVY8X+9f5Bz2p/exuNf/2yy7+mp9cA4CqtbXnt0VWDnhXAMCqh5fKW8BAsv/1QsZ1yILIGWjBm1VS9yvjaRTCOBVKzAcqKdmpAU/2qpawDQEtZhX8C8v+S7fUtmGZkEjI3G/2waBwbS9AnR2GaOwp3YzPWP3/RZenUiPvmYzwplYYb3m4vKl2okejXrsC5rxLnD9W4jjagMxvRZ8S3Pxei6clv20//DmZWAF2MmbCbZ/3437EtyxuH33VGextNr2z0O6+SWZs/34v91JGEzM0m6pXLaV59AF2MmZDTs0Gvx/rAly1LNPtJyayBpli9RoUS8fT56GPCaN5wCGPeMIx5w7p+3htbu12laaCygrbqVUtZA03G19b/VrgGlMyrtbEg0IKxZrVUA5rqVw1lBW3tuwZijBV9F5jpdLOThpvexXzlZEzzcghdPBG3xU7zqh9oen49roM1PjXjbmym8bm1/P/27jw6qvL+H/j73rmzJJMVxQDZWJpQUISwaYEfWjbreiqW/rTW6rFaftrq155utq7f2mI9Pe3RCoj1W0Vt/fn7CvitFbEasLIvyhIEWqohkMQE2QLMTGa5y++PyUKYCZnc3Du5D/N+neM55k7yzHsePs9z55m5i1JVDGV8MaT8LMAA9CMBxN7dh8iymvhd1B2QFQCkbA88141O2O65tnNbdOVe80VuYVYACD2yClpNEzzXXwzvvHEwoirUnY0Iv7gV2u4mcxltymori7JKOV7I+VkAAPfkMrgnlyX9vejKvaZ3zJlaryJltR3n1y4sqwEL84o2F9guA2tWpBoQqV9FygqIte9KyxxLvSYZhpHSgbznOqGRiIiIiIgyR8GWB/o7wnnPlnPUiIiIiIiIyDwu1IiIiIiIiByGCzUiIiIiIiKH4UKNiIiIiIjIYbhQIyIiIiIichgu1IiIiIiIiByGCzUiIiIiIiKH4UKNiIiIiIjIYbhQIyIiIiIichgu1IiIiIiIiByGCzUiIiIiIiKH4UKNiIiIiIjIYbhQIyIiIiIichgu1IiIiIiIiByGCzUiIiIiIiKH4UKNiIiIiIjIYbhQIyIiIiIichjFtpa9Lvi+Mwnu2ZWQB+XBCEahbm9A+IVN0OtOmG5Wyvch97XbIF/oh7qrEYHvveGYrO7pI+CeMxKuigshDciG5FGgHzkNbd8XiPzlY2j//MIxWc/m5H4VKatINSAPLYRn9ki4KgfCVTkQ8qA8AEDLlGcAzeh7TguzitSvImVVLi+He+owKOOKIQ3KheRVoDefgrrpIMIvb4NxPOSYrAAAWYL3m+PguW405NJCGBEV2p4mhF/cCm13U9+zWphXpPElUlbhavYMTt53AbB/fHGOZb1Sr0mGYaQ0C7dc9nTqrbpdyFk0F8rYYqh7m6F+1AC5KAfumRVATEfg+8uh7Wk2FTj7N9fCPbkckt9jTeFYmDXrkdlQqkqg7T0M/WgAiOmQS/PhnjIMcLvQ+mQ1om/tcUTWszm5X0XKKlINeG+uQtYPr4Ch6tDrWyAPzoPkU6x7c5ah/SpMVo8LBevugxFVoe5ohPbpUUCW4J5YClfFQOjHggjMfwN6fUv/Z22TveAaeGZWQqs7jtj6Wkh5PnhmVQIeBcGfvw11ba35rBbnFWl8CZNVwJo9k5P3XYDN44tz7HlZrwVbHjCfnVJiy0LNe/skZN07FdHV+xF66B2g7RmU6cOR89sboNUew+lvvdqxPVXuq0fB//hVCD21Btk/m2HJRGdpVo8LiGoJm+URFyD3pVuAqIaTX3seUPX+z3oGx/erSFkFqgG5rBBSrhfap0eAiIa8N++EPCTPsjdnmdqvwmR1yfDeNgHR5TUwTkc6t0tA1k9nwDv3UsTW1SL447dM5bQ0KwD3nJHwP3E11F2fI/CD5R197BpVhJw/zoMRiOLUTS8BoZgj8oo0voTJKljNnsnp+y67xxfn2POzXrlQs58t56h5bxwDAAg/u75Lcahra6HuaIBr+AVQxpf0qk2pKBfZP7oSkb9+AnVTnTOzJpk4AED/7Bi0uuOQcr2QCrOckbWNEP0qUlaBakA/dCL+SVskeea+ytR+FSarpiOydFvXNxAAYADhP20BgF6PUduyAvDObWvr+Y1d+ljbdxix6v2QB2TDM6PCMXlFGl/CZBWsZtuJsO+ye3xxjj1DhtYrmWP5Qk0uyYc8OA/awePQm04lPB7bdBAAoEws7VW72Y/OgRGIoPWZtZbkBOzLmvA8pQVwlRdCPxGCcTToqKwi9atIWROex8E1YAf2q9hZ2z+JNjRzn0gDFmf1uOAaMwRGawzqzsa+tZWOvDZj1iScVrNncPy+y+bxxTk2iQyrVzLP8ouJyOWFAAD9UEvSx/X6+ImNcmlhym16b66CMr4EwftXAMEokOfrc07AnqwAoEwqhTK2GHDLkIfkwz1tGAAgtKC6118/25lVpH4VKSsgTg3Yhf0qVtazea6/GACgbj5oug0rs8rF+ZAUGVrd8aSH4umH+v66Ob7skak1206EfZfd44tzbKJMq1cyz/KFmuT3AgCMQCTp40YgGv+9XG9K7cnDBsB3z1REV9RA3VZvTcg2Vmdtp0wqg+/2SR0/60eDCP3yPahbzA/ITO5XkbK2E6EG7MR+FSvrmVyjiuC76zIYwQjCSzaabsfKrFJOW1vBbtoKtrfl6XXOjufg+LJFptYsIM6+y+7xxTm2q0ysVzLP1ELNd9flCduiK/cm/eq1T1wysh+/CvqxIFoXrjfVRNqyniG8eAPCizcAPgWuskJ4b50A/9NfR/j5jYgs3db/WUXqV5GynsHxNWAB9uv5k7WdXFoA/+9uABQZwYdXQW88ec7fF6leAbHyMmtqHFuzgu67zOIcm5rzuV7JHuYWancnFo66vQF606mOT2TaP6E5m5QT/0Qm4eTKJLx3TIKr8iIE7l0GtJq70lC6siYVVqHtP4LQY+/Cn+eDb/4UqFsOQdt3uF+zitSvImVNyqE1YAX26/mVVS4tQM7ib0DK8yH08Cqo63q+FHe6srZ/Ytz+CXJCW/72tqKOyGsFZu2Zk2tWpH2XFeOLc2zPzvd6JXuYWqid61L9+sG2Y2LLCpI+3n6sbPuxs+eijLwIkiwhd8m85I+PLUbBlgdgnI7g5Kzn+jVrT2Kb6+CeMhTK+OJuJw/2q9hZe+KkGrCCU7KK1K9OzSoPLUTOwpsg5fsQ/MXKlO+XlK6seuNJGKoOuTgfcEkJ59HIZam15ZQ6SAWznpvTa1akfZcV48sp9co51lxWK+qV7GH5OWp6w0noTafgKh8AeXBewtez7q+UAwDUj3o+/jW29SD0ltaE7VK2G57ZI6EfCyK2/gAQNrf6tzJrT+SBOfH/MXlPmkztV5Gy9sRJNWA39mtyTswqj7gAOQvnQvJ7EXzwbagb6kxlszVrVIO2+3MoVSVQxhVD/bjBfFvpyGuzTM8qQs0Kte+yeXxxjmW9knm23Ect8uZuAIDvvmmA1LldmT48fjf52mNQt3edCKSi3PgVbLyda8foshq0LqhO+C+8aAMAQG9oiW/7/Yf9nhVuF+SKC5M+h2tUEbxzx8BQdcT6cE+KTOxXkbKKVAPpkJH9KlJWAK6KgfFDcbI9CP7kb5a9gbAja2RFW1vzp8RveNv+GkYVwT2rEvrxEKIffOqYvHbL1Kyi1KxQ+y7YP744x7JeyRxbZuvIa9vhnjoMnpmVkAfnQd1WD3lQLtwzK2C0xhD61fsJl071P3YVlAklCNyzLKGo7GRVVsmrIO/P34b27yPQPjsG/YsAJJ8CeeiAjntYhJ9d1/FVdX9mTYdMzCpaDUj5PmTdP73z54L4ZXizH5rd0Ub4lW2m82ZivwqVNdcL/6K5kPOzENt6CMqYwVDGDE58vtd3dHtVsXRlBYDYe/9C9MoR8MysRO4rtyK2vhZSvg+eWZWALCP0ZHX8ctJ9kInjS6SsotWs3UQaX5xjWa9kjj0fq8U0BO5bAd/tE+GeMxLeW6pgBKOIffgZwi9shn7guC1Pa4pFWY3WGFqXbIRSVQxlfDGk/CzAAPQjAcTe3YfIshpoe5odkTUtMjCraDUgZXvguW50wnbPtZ3boiv3mt/hZWC/ipRVyvFCzs8CALgnl8E9uSzp70VX7jX9JsLqeSD0yCpoNU3wXH8xvPPGwYiqUHc2IvziVmi7m8xltCmvKONLpKwi1qytRBpfnGNZr2SKZBhGSgfynuuERiIiIiIiyhwFWx7o7wjnPVvOUSMiIiIiIiLzuFAjIiIiIiJyGC7UiIiIiIiIHIYLNSIiIiIiIofhQo2IiIiIiMhhuFAjIiIiIiJyGC7UiIiIiIiIHIYLNSIiIiIiIofhQo2IiIiIiMhhlP4OQETicL1zR39HSJl2zdL+jkBERERkGr9RIyIiIiIichgu1IiIiIiIiByGCzUiIiIiIiKH4UKNiIiIiIjIYbhQIyIiIiIichgu1IiIiIiIiByGCzUiIiIiIiKHse8+al4XfN+ZBPfsSsiD8mAEo1C3NyD8wibodSdSbkYeWgjP7JFwVQ6Eq3Ig5EF5AICWKc8AmuGorGeT8n3Ife02yBf6oe5qROB7bzDreZ5Vubwc7qnDoIwrhjQoF5JXgd58Cuqmgwi/vA3G8ZBjsqZjbIUjYbz86iv4e/X7aG5uhj/bjwnjx2P+XXdj2NBhvWpL0zS8/sZ/428r30Z9fT28Xi8uueRifPeOOzF2zKV9D2tRv7qnj4B7zki4Ki6ENCAbkkeBfuQ0tH1fIPKXj6H98wvHZBWpXtOS1cK83HfZk1WkfhVpfJ3NyTXAOdaerAAAWYL3m+PguW405NJCGBEV2p4mhF/cCm13U9+zUq9JhmGkNLO1XPZ06q26XchZNBfK2GKoe5uhftQAuSgH7pkVQExH4PvLoe1pTqkp781VyPrhFTBUHXp9C+TBeZB8inWTsoVZz5b9m2vhnlwOye+xZqJjVmdn9bhQsO4+GFEV6o5GaJ8eBWQJ7omlcFUMhH4siMD8N6DXt/R/VpgbW7254XU0GsU9938fu2pqMPrLozBxwkQc/uIwqteshtvtxpJnF+GSiy9JqS3DMPDgw7/A6g/WoLysHNOnTcPJU6fw/upqRKNRPPXrJ3Hl9Cu6/E2vbnhtYb9mPTIbSlUJtL2HoR8NADEdcmk+3FOGAW4XWp+sRvStPalnsyurSPWajqxW5gX3XXZlFaZfRRpfSTi5BjjH2pC1TfaCa+CZWQmt7jhi62sh5fngmVUJeBQEf/421LW1XX6/YMsD5rNTSmz5Rs37rfFQxhYjuno/Qg+9A7TNnUr1fuT89gZkPzwbp7/1asf2c4ltrIO6uwnap0eAiIa8N++ENCTPkVnP5L56FDxfrUDoqTXI/tkMZs2ErJqB1uc2ILq8BsbpSMfmsARk/XQGvHMvRdZ/TEfwx2/1f1bYP7b+8vpr2FVTg5lfnYEnn/g1ZDl+pPXsmbPw4wd/il8u+BVef/W1ju3n8vf338PqD9bg0jGX4rk/LITX6wUA3PT1ubjrnu/h1795EpMmTITf7zeV1cp+bX1qDRDVErbLIy5A7ku3IOv+6Yi+sw9Q9f7NKlK9piGrpXnBfZddWYXpV5HG11mcXgOcY23ICsA9ZyQ8Myuh7vocgR8s7+jj6IrdyPnjPGT/fBZOffQSEIqZzku9Z8s5at4bxwAAws+u71Ic6tpaqDsa4Bp+AZTxJSm1pR86Ef80IJI4KK1gZdZ2UlEusn90JSJ//QTqpjpmzZSsmo7I0m1dJmQAgAGE/7QFAHr9mm3LCnvHlmEYWP7mmwCA+79/X5fF2JXTr0DV2HGoPXAA23dsT6m95W+uAADc+735HYs0ALh49GjMnjkLJ1pOYPUHa0zntbRek7yBAAD9s2PQ6o5DyvVCKszq/6wi1WsaslqaF9x32ZVVmH4VaXydQYQa4BxrQ1YA3rltbT2/sUsfa/sOI1a9H/KAbHhmVPQpL/We5Qs1uSQf8uA8aAePQ286lfB4bNNBAIAysdTqp+41u7JmPzoHRiCC1mfWWpITYFZArKwJ2j7ZMzRzn/ABYo2thsYGNB9uRllZGYqHDEl4fMpXvgIA2PbxRz22FYlEUPPJbvh8PowbOy6xrctTbyuZdPWrXFoAV3kh9BMhGEeDjs4qVL1akBUQa3xxjrWHSDXLGkjyPJxju+hVVo8LrjFDYLTGoO5s7FtbZCnLD32UywsBAPqhlqSP6/XxExvl0kKrn7rX7MjqvbkKyvgSBO9fAQSjQJ6vzzkBZhUpazKe6y8GAKibD5puQ6SxdfBg/HWWl5Ylfby0JD7ZH6qv77GthsZGaJqGoeVDoSiJU1ZZ23Ok0lYydvWrMqkUythiwC1DHpIP97T4xVNCC6p7fSiS3VnPJlK9WpEVEGt8cY61h0g1yxrgHGtlVrk4H5IiQ6s7nvRcT/2Qc8ZpprF8oSb544clGYFI0seNQDT+e7nepI+nk9VZ5WED4LtnKqIraqBuM/emsTvMKkbWZFyjiuC76zIYwQjCSzaabkeksRUIxj/NzPHnJH08Jye+/fTp0ym0FWj7m+Tnn7VvPx3oua1k7OpXZVIZfLdP6vhZPxpE6JfvQd1ifsfMeu3KqqyAWOOLc6w9RKpZ1gDnWCuzSjltbQW7aSvY3pan1zmpb0wt1Hx3XZ6wLbpyb9KvXvtb2rK6ZGQ/fhX0Y0G0LlxvqglmTUKkrEnIpQXw/+4GQJERfHgV9MaT5/x9kcbW8//1QsK266+9FkMGJx7q2N/6o1/DizcgvHgD4FPgKiuE99YJ8D/9dYSf34jI0m2OytpOpHrtbVZArPHFOdYeItUsa+DcOMdSJjC3ULs7sXDU7Q3Qm051rMbbV+dnk3Liq/GEkyttkq6s3jsmwVV5EQL3LgNazV0Rh1nFzno2ubQAOYu/ASnPh9DDq6Cuq+3xb0QaWy+8+F8J2yaMH48hg4cgp+3qi+3fhp0tEIhvz83N7fF52r+VCwSSn3PQvj03p/u2+rVfwyq0/UcQeuxd+PN88M2fAnXLIWj7Djsqq0j1aiZrf+Y1g3OsPUSqWdZAijjH9jlr+7dy7d/SJbTlb28r2mNbZC1TC7Vz3VNNP9h2HGtZQdLH249vbT921m7pyqqMvAiSLCF3ybzkj48tRsGWB2CcjuDkrOeY9TzM2uXvhhYiZ+FNkPJ9CP5iZcK9R7oj0tj6aOOWbh8rLy8HABysP5T08fqG+KE1ZaU9n5hcUlwMl8uFxs8boapqwnlqh9qe41xtOaVfY5vr4J4yFMr44m7fRLBe7ckKOKcOUsE51h4i1SxroPc4x5rLqjeehKHqkIvzAZeUcJ6aXJbecUqdLD9HTW84Cb3pFFzlAyAPzkv4etb9lfgbOPUja4+BNsPKrLGtB6G3tCZsl7Ld8MweCf1YELH1B4CwuU+rmNX5WdvJIy5AzsK5kPxeBB98G+qGOlPZ0pHVLiXFJRhUNAiHDh1C4+efJ1z5ceOmTQCASRMm9tiW1+vFpZeMwY5dO7Fz105MPOtvNm5Ova1k0tmv8sC2c/ZM3pg30+vVrqx25bVLps+xdhGpZlkDyXGONZk1qkHb/TmUqhIo44qhftxgvi2ylC33UYu8uRsA4LtvGiB1blemD4/fTb72GNTtXYtAKsqNX8HGa8s9uLtlVdboshq0LqhO+C+8aAMAQG9oiW/7/YfMep5mBQBXxcD4oQ3ZHgR/8jdL30handVOkiThphtvBAD8YdGz0PXOSxD/Y+2H2LFrJ4YPG4bxVeO7/F1zczPq6uoQDoe7bL/pxrkAgMV/fB6RSOdhHHv27sX7q6tRWFCIGV/9qum8lvWr2wW54sKkz+EaVQTv3DEwVB2xPtyfKFPr1e6sVue1W6bOsXYTqWYzsgY4x9qWNbKira35UwCPq/M1jCqCe1Yl9OMhRD/41NL81DNbZsDIa9vhnjoMnpmVkAfnQd1WD3lQLtwzK2C0xhD61fsJl071P3YVlAklCNyzrEtRSfk+ZN0/vfPngvjlYrMfmt3RRviVbR1fAfdnVrsxq7OzSrle+BfNhZyfhdjWQ1DGDIYyZnDi872+o9urNKUrK2D/2Lr15m9h3YYNWP3BGtxx152YNHESmg83o3rNavh8Pjz6i4e73AgbAB594j+xfcd2LFm4GBPHT+jYftXsOfjgw39g9QdrcOsd38H/mjYNJ0+exPurq6HrOh568OfdXmEyFZbVgFdB3p+/De3fR6B9dgz6FwFIPgXy0AEd958JP7vOdJ9amlWgek1HVivzAtx32ZVVlH4VaXylA+dY59dA7L1/IXrlCHhmViL3lVsRW18LKd8Hz6xKQJYRerI6ftsGSit7PqqKaQjctwK+2yfCPWckvLdUwQhGEfvwM4Rf2Az9wPGUm5KyPfBcNzphu+fazm3RlXvND0oLs9qOWe1hUVYpxws5PwsA4J5cBvfk5PcQi67ca/7NpEBjy+PxYPEzz2Lpqy/j7++/h9f+3/+F3+/HldOvwPy77sbwYcNTzypJ+PV/PoFLx1yKt97+G/77jTfg8XpQNW4cvnvHnRg75lJTGTtY1K9GawytSzZCqSqGMr4YUn4WYAD6kQBi7+5DZFkNtD3NjsgqUr2mJauFeQHuu7rIwH4VaXylBedYIWog9MgqaDVN8Fx/MbzzxsGIqlB3NiL84lZou5vMZaQ+kQzDSOlA3nOd0EhEmcH1zh39HSFl2jVL+zsCERHReatgywP9HeG8Z8s5akRERERERGQeF2pEREREREQOw4UaERERERGRw3ChRkRERERE5DBcqBERERERETkMF2pEREREREQOw4UaERERERGRw3ChRkRERERE5DBcqBERERERETmM0t8BSCCKQOt6Ve/vBOcl7Zql/R2BiIiIKCMI9M6biIiIiIgoM3ChRkRERERE5DBcqBERERERETkMF2pEREREREQOw4UaERERERGRw3ChRkRERERE5DBcqBERERERETmMffdR87rg+84kuGdXQh6UByMYhbq9AeEXNkGvO5F6wMvL4Z46DMq4YkiDciF5FejNp6BuOojwy9tgHA85Jqs8tBCe2SPhqhwIV+VAyIPyAAAtU54BNKPvOS3M6p4+Au45I+GquBDSgGxIHgX6kdPQ9n2ByF8+hvbPL/qe1eOC77aJcM+qhFyUCyMUhbq9EeE/bYZ+MPWsAABZgnfeWHiuGQ25tABGRIW2pxnhpVuhfdLc96wW9WtH1m+Og+e60ZBLC9uyNiH84lZou5sck1WksZWWes3ArGeT8n3Ife02yBf6oe5qROB7bzgma1rmV9HyZmrNCjLHns3J40ukrNx3CZyVek0yDCOlPUbLZU+n3qrbhZxFc6GMLYa6txnqRw2Qi3LgnlkBxHQEvr8c2p4U3lx7XChYdx+MqAp1RyO0T48CsgT3xFK4KgZCPxZEYP4b0OtbUs9mV1YA3purkPXDK2CoOvT6FsiD8yD5FOt2zBZmzXpkNpSqEmh7D0M/GgBiOuTSfLinDAPcLrQ+WY3oW3u6/lFvbnjtdiHnmRuhjB0Cdd9hqB/XQ74oF+4ZX4pnvX8FtL2HU24u+4mr4ZlRAe3gccQ2HICU64NnZgXgURB86B2o62u7/kFvbnhtYb8CQPaCa+CZWQmt7jhi62sh5fngmVUZz/rzt6Gure25EbuzCja2TNUrs/Za9m+uhXtyOSS/x5o3ZyLNr6LlzeCaFWKOTZbbweNLmKzcdzkqa8GWB8xnp5TYslDz3j4JWfdORXT1foQeegdoewZl+nDk/PYGaLXHcPpbr3Zs75ZLhve2CYgur4FxOnJGaiDrpzPgnXspYutqEfzxWylnsy0rALmsEFKuF9qnR4CIhrw374Q8JM+yHbOVWeFxAVEt8TWMuAC5L90CRDWc/NrzXRc8vVioeW+biKz/MwXRNf9G6NFVnVmnDUfOU9dBO3AMp2/7S0pZ3bMq4f/Pr0Gt+RyB/3izI7fryxch57l5MIIRnPrmy0Ao1vlHvVioWdmv7jkj4X/iaqi7PkfgB8s7s44qQs4f58EIRHHqppe6Zu2FTB1bpuqVWXvFffUo+B+/CqGn1iD7ZzMseXMm0vwqWt5MrVlh5tizczt8fAmTlfsuR2XlQs1+tpyj5r1xDAAg/Oz6LsWhrq2FuqMBruEXQBlf0nNDmo7I0m1dByMAGED4T1sAILV20pEVgH7oRPyTi0hioVvByqzJBiMA6J8dg1Z3HFKuF1JhlvmsX78knnXxhq5Z19dC3dkI17ALoFSllrXjdb+wuUtu7Z9fILZ6P+TCbHiu/JL5rBb2q3duW1vPb+yadd9hxKr3Qx6QDc+Miv7PKtjYsr1eMzVrG6koF9k/uhKRv34CdVOd6Wx2ZrV7fgXEypupNSvMHHsGEcaXMFm57xI2K5lj+UJNLsmHPDgP2sHj0JtOJTwe23QQAKBMLO3bE7Wt6A3N3KcQQBqzWiBdWeXSArjKC6GfCME4GjTXRnE+5EF50A6dSJ51c1vWCSlMHh4XXJcMhtEag7qr8RxtmXvdlvarxwXXmCHxrDuTZO3jvxHHVpLnsaJemRXZj86BEYig9Zm1pnIlI9L8CoiVN2NrVtA5VqTxJVLWBNx3OTYrmWf5xUTk8kIAgH6oJenjen38xEa5tLBPz+O5/mIAgNr2Rt2MdGW1gl1ZlUmlUMYWA24Z8pB8uKcNAwCEFlT3+nCJjqxlPWVtacta0HNbxfmQFBnaweNJDxfSG1JvK2n7FvZrR9a6brIe6ls9cWzZVK8ZntV7cxWU8SUI3r8CCEaBPJ+5cGcRaX4FxMqbqTUr4hwr0vgSKWsy3Hc5NyuZZ/lCTfJ7AQBGIJL0cSMQjf9ertf0c7hGFcF312UwghGEl2w03U46slrFrqzKpDL4bp/U8bN+NIjQL9+DusX8RCfleOKZgt1kbdsu5fScVfK3tdX2+hLaausPs/9GVvZr++vp/nW3t+XpdU6AYwuwqV4zOKs8bAB890xFdEUN1G31pnMlI9L8CoiVN1NrVrQ5VqTxJVLWZLjvSuSkrGSeqYWa767LE7ZFV+5N+tWr1eTSAvh/dwOgyAg+vAp648lz/n5/Zu2t/sgaXrwhfh6ZT4GrrBDeWyfA//TXEX5+IyJLt3Wf9c7LErO+sxd682nbsprFGkiNCGPLdL0yayKXjOzHr4J+LIjWhetNNSHS2ALEysuatQfHVxIiZU2C+y5nZCV7mFuo3Z1YOOr2BuhNp3r8tqTj25azTwRNgVxagJzF34CU50Po4VVQ1/V8Cd7+ympGv2YNq9D2H0HosXfhz/PBN38K1C2HoO1Lfgl933cTF2rqjgbozac7P8Xxd5O1h0+BztTxCWlO8k9IOz5hPcfrTle/dny71+3rbm8r+beD6cx6NuHGVm/rlVkTeO+YBFflRQjcuwxoNXeFPJHmV0CsvKzZRCLNsSKNL5Gyno37LudkJXuYWqid61L97TcylssKkj7efqxs+7GzqZKHFiJn4U2Q8n0I/mJlyvdJ6Y+sZjkla2xzHdxThkIZX9ztgGyZ+odu/77jPIFus8a3p3KfE73xJAxVhzwkH3BJCeclyCU9t5Wufu3IWtxN1rKe2+LY6r2U6pVZEygjL4IkS8hdMi/542OLUbDlARinIzg567l+zWoVkfI6JauTalakOVak8SVS1i5/x31XPJNDspI9LD9HTW84Cb3pFFzlAyAPzkv4etb9lXIAgPpR6sdAyyMuQM7CuZD8XgQffBvqhjrHZrVLOrPKA3Pi/2PyXj9640nozafgKitMnvXytqwfN/TcWFSD9kkTlHHF8Rs6bu/6N51tmXvdlvZrVIO2+3MoVSVQxhUnvL6+/htxbCXX53rN0KyxrQeht7QmbJey3fDMHgn9WBCx9QeAsLlP2EWaXwGx8mZqzYo0x4o0vkTK2o77LrGyknm23Ect8uZuAIDvvmmA1LldmT48ftfz2mMJb7ilotz4FWy8XdeOroqB8a+1sz0I/uRvlg1GO7LazbKsbhfkiguTPodrVBG8c8fAUHXE+nAPlcj/fBLPeu/UrlmnDYcyrhjagWNQd5ydNSf+iehZ/drxuu++PH5DxvasX74I7pmV0E+EEP3HZ+azWlgDkRVtbc2f0jXrqCK4Z1VCPx5C9INPHZFVmLGVjnrNwKzRZTVoXVCd8F940QYA8Suqti6oRuvvP+z3rOkiUt5MrFlAnDlWpPElUlaA+y5Rs5I5tuxZIq9th3vqMHhmVkIenAd1Wz3kQblwz6yA0RpD6FfvJ1zi0//YVVAmlCBwz7KOopJyvfAvmgs5PwuxrYegjBkMZczgxOd7fUdK5zvZmRUApHwfsu6f3vlzQfzSttkPze5oI/zKto6vq/srq+RVkPfnb0P79xFonx2D/kUAkk+BPHRAx/02ws+uM50TiP+buKcMhWdGRTzrR/WQi3LhnvGleNYkl3n1PzwHyvgSBH6wHOqOznvkxKr3I3rFCHhmVCD3pVsQ23AAUp4PnpkVgCwh9Js1QKj7cxJ6zGphDcTe+xeiV46AZ2Ylcl+5FbH1tZDyffDMqgRkGaEnq+OXPe7nrCKNrbTUawZmTQeR5lfR8mZqzYoyx6ZDJmblvkvcrGSOPR8BxjQE7lsB3+0T4Z4zEt5bqmAEo4h9+BnCL2yGfuB4Ss1IOV7I+fG7oLsnl8E9uSzp70VX7jU9IK3KCgBStgee60YnbPdc27ktunKv+UK3KKvRGkPrko1QqoqhjC+GlJ8FGIB+JIDYu/sQWVYDbU+zuYxnZn3gf+C7bQLcs0bC+7/bsq6tRfhPW6DXpd6vABB6/F1onzTBc+1oeL8xFkZEhbrrc4SXboX2iQVZLaoBAAg9sgpaTRM8118M77xxMKIq1J2NCL+4FdruJkdkFWlspa1eMyxrWog0v4qWN4NrVoQ5Ni0yMCv3XQJnJVMkwzBSOuD0XCc0UoZQbDlS1h6q3t8JiIiIiM5bBVse6O8I5z2B3nkTERERERFlBi7UiIiIiIiIHIYLNSIiIiIiIofhQo2IiIiIiMhhuFAjIiIiIiJyGC7UiIiIiIiIHIYLNSIiIiIiIofhQo2IiIiIiMhhuFAjIiIiIiJyGMkwDKO/QxAREREREVEnfqNGRERERETkMFyoEREREREROQwXakRERERERA7DhRoREREREZHDcKFGRERERETkMFyoEREREREROQwXakRERERERA7DhRoREREREZHDcKFGRERERETkMP8fNt54EnIWwtkAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saved figure to: images/batched_output__y__in__mathbb_R___9_x_18__.pdf\n", + "Saved figure to: images/batched_output__y__in__mathbb_R___9_x_18__.png\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxoAAAGxCAYAAADlBMBWAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAADSk0lEQVR4nOzdeXxU1f3/8ddsmcm+sCRkD0vQQAiBIItCEAQrgrVSEaRqDbJptdraX91qv7W1inVpS2UVLVYRUaQVRRGiIEtAIBCWWFmTEELYsi+TySy/PyaJGTJJJpObZern+Xj4aLl3cuY9Z87ce8+9556rstlsNoQQQgghhBBCQequDiCEEEIIIYT43yMdDSGEEEIIIYTipKMhhBBCCCGEUJx0NIQQQgghhBCKk46GEEIIIYQQQnHS0RBCCCGEEEIoTjoaQgghhBBCCMVJR0MIIYQQQgihOOloCCGEEEIIIRQnHQ0hhBBCCCGE4qSjIYQQQgghhFCcdDSE6EIVFRU8//zz3HjjjQwZMoSZM2dy+PBht8vbt28fCxYsYOzYsQwcOJCPPvqoyWssFgt//etfmTBhAomJiUyYMIHXXnsNs9ncno8ihBBCCOFAOhpCdKFnnnmGnTt38uKLL7Jx40auv/567r//fi5cuODwuszMTEwmU5O/P3v2LPn5+Q3/rqqqIj4+nqeffhqDweD0PVeuXMmaNWt45pln+Oyzz3j66adZs2YNy5cvV/bDCSGEEOIHrc0djfz8fAYOHMgTTzzREXkU1R2yTpgwgQkTJnTZ+4vuy2g08sUXX/DrX/+akSNHEhMTw8MPP0xMTAxr1qxpeJ3NZuNPf/oTjzzyCLW1tQ3Lz507x3333efw2tTUVH71q1/xox/9CLXa+c/74MGD3HjjjUyYMIHIyEgmTpzIhAkT2nUlRQghhBDiat3uikZ36Bz8L+sO9dsdMoD9QP21117j9ttvZ/jw4QwcONDpf/fcc0+HvL/ZbMZisaDX6x2W6/V6MjMzG/6tUqlYsWIFOTk5PPbYY5jNZgoLC7nvvvsYOnQov/71r9v0vsOHD2fv3r2cOnUKgJMnT7Jnzx7GjRvX/g8lhBBCCFFH29UBhOgK//znP3n55Zepra1lyJAhTJ48GT8/P6evjYmJcanMnTt38uyzzxIYGMjZs2eJjo5uWFdbW4tarWb+/PlMmTIFAD8/P5KTk1m6dCnx8fH07NmTTz75hEOHDjn8LUDPnj1ZvXo199xzD48++ignTpzg2muv5aWXXkKj0bTps8+dO5fKykpuvfVWNBoNZrOZBQsWMHv27DaVI4QQQgjREuloiB+c1157jWXLlpGcnMyf/vQn+vfvr0i5u3bt4uWXX0ar1fL555/z//7f/3NY/8gjj7B792569uzJddddB8BLL73EU089xbhx49BoNCQkJHDrrbdy7NixJuWHhoby6quvMn36dHr16tXwXm21adMm/v3vf/PKK6/Qv39/vv32W/785z8TGRnJnXfe6d6HF0IIIYS4SruGTp06dYoHH3yQ6667jqFDhzJr1ix27tzZ5HUfffQRDz/8MBMnTmTIkCEMGzaMmTNn8p///MfhdYsXL2bixIkAbNiwwWH4ytWz5xw+fJhHH32UsWPHMnjwYG644QbS0tLYtGmT06z5+fk89thjjBw5ksTERO644w6++uqrZj9bVlYWjzzyCNdffz2DBw8mNTWVZ599tslNumAfQ//OO+9w6623kpiYyNixY3nuuecoLy9vtQ6d2bRpE7Nnz2b48OEMGTKEadOmsXz5cqc3A+/du5eBAweyePFip2U1vkfElfptPKzJ1e9X6Qwteeuttxg4cCBvvvmm0/WnT59m8ODBzZ6d37t3L8uXL+f666/nnXfeUayTAXDkyBGGDBnCrl27uP766x3WmUwmbDYb8+fPd2j30dHRvPPOOxw8eJBt27bx4YcfYjabiYqKalJ+UVERTz75JDfccAM6nY7f//73WK3WNud86aWXSEtL49Zbb2XgwIHcfvvt/PznP2fFihVt/9BCCCGEEM1w+4pGfn4+M2fOJD4+nrvuuotLly6xadMm5s6dyyuvvNIwPATg//7v/+jfvz8jRoygV69elJSUsH37dv7f//t/nDlzhkcffRSA6667jnvvvZe3336ba665hptuuqmhjGuvvbbh/69bt47/+7//Q61WM2HCBGJjY7ly5QpHjx7lvffec3hvsI/Fv/POO4mKiuLHP/4xpaWlbNq0iQcffJC33nqLUaNGObz+ww8/5Nlnn8XLy4sJEyYQFhZGbm4uH3zwAV9++SXr1q0jPDy84fXPP/88//rXv+jVqxd33XUXWq2W9PR0srKyMJlMeHl5uVyvr776KsuXLyc4OJipU6fi4+PDjh07ePXV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/Zurp9htrX7rufr9dmSG5gQGBtKvXz+OHTvGxo0bycjI4K677nLI1JwHHniAK1eu8Lvf/Q6bzebW+19tz549jB49mp07dzYMcfL39+e6664jPT2duXPnsnLlSkXeSwghhBDCU7jd0SgvL+f11193WHbkyBE2btyIv78/kyZNAuw3YkPTA/EdO3bw4YcfNik3ICAAlUrF+fPnnb7vrFmz0Gq1LFmyhJMnTzZZ7+xgty1mz56NTqfjhRde4MyZM03Wm0wmh05I/VCdZcuWNQy7AqipqeHVV19t03tPnz4dgKVLl1JUVNSw3GKxsGjRIqxWKz/96U8d/qZv3774+fmRnp7OlStXGpYbjUb+9Kc/NXmP1uq3nqvfb0dmaMnw4cOpqqri2WefJTg4mMcee8ylvxs9ejTz5s3jk08+4YEHHmjoCLurtraWyspKgoKC2L17t8PzM+677z5Wr15NSEgISUlJfPnll+16LyGEEEIIT+L20KkRI0bw4YcfcvjwYYYNG9bwnAWr1cpzzz3XMLTm7rvv5qOPPuKXv/wlN998M7179+bEiRPs2LGDW265pckD9nx9fUlKSmL//v38+te/Ji4uruF5Gddccw39+/fn97//Pb///e+5/fbbmThxIrGxsRQXF3P06FF8fX3517/+5XaF9OvXj+eff56nn36aqVOnMnbsWGJjYzGbzRQUFHDgwAGCg4P5/PPPAfsB7z333MO//vUvpk6dyo9+9KOG52gEBAQ0e7+FM8OGDeOBBx7gjTfeYOrUqdx88814e3uzY8cOjh8/zvDhw5kzZ47D3+h0Ou69916WLFnC7bffzqRJkzCbzezevZvevXs3zMrkav3Wc/X77cgMrdXV+++/T1VVFU899RSBgYEu1/Njjz1GYGAgr732GjfffDNDhgyhX79+zQ6Va2nWqaysLIYOHYrVaqWwsNDh+SohISFcc8017Ny5k7S0NH7xi19w4403tumZF0IIIYQQnsrtjkZkZCR/+MMfePnll1m7di0mk4mEhAQeeughhxmhrrnmGt5++23++te/sn37dsxmM9dccw3/+Mc/8Pf3d/ok75deeokXXniBnTt38umnn2Kz2QgLC2s4CJ0xYwYDBgzgzTff5JtvviE9PZ2goCAGDhzInXfe6e5HavDjH/+Ya665hrfeeou9e/eyc+dOfHx86N27NzfffDO3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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# | hide\n", + "\n", + "units = 18\n", + "activation = \"relu\"\n", + "batch_size = 9\n", + "x_len = 12\n", + "\n", + "x = np.random.default_rng(42).normal(size=(batch_size, x_len))\n", + "\n", + "tf.keras.utils.set_random_seed(42)\n", + "\n", + "monotonicity_indicator = [1] * 4 + [0] * 4 + [-1] * 4\n", + "\n", + "mono_layer = MonoDense(\n", + " units=units,\n", + " activation=activation,\n", + " monotonicity_indicator=monotonicity_indicator,\n", + " activation_weights=(6, 6, 6),\n", + ")\n", + "display_kernel(\n", + " x, title=\"input $x \\in \\mathbb{R}^{9 Γ— 12}$ with batch size 9 and 12 inputs\"\n", + ")\n", + "\n", + "y = mono_layer(x)\n", + "# print(f\"monotonicity_indicator = {monotonicity_indicator}\")\n", + "# display_kernel(mono_layer.monotonicity_indicator, title=\"monotonicity_indicator\")\n", + "\n", + "with replace_kernel_using_monotonicity_indicator(\n", + " mono_layer, mono_layer.monotonicity_indicator\n", + "):\n", + " ww = \"\\in \\mathbb{R}^{12 Γ— 18}\"\n", + " tt = \"\\in \\mathbb{R}^{12}\"\n", + " display_kernel(\n", + " mono_layer.kernel,\n", + " title=f\"kernel $(|W^T|_t)^T {ww}$ after applying $t={monotonicity_indicator} {tt}$\",\n", + " )\n", + "\n", + "display_kernel(y, title=\"batched output $y \\in \\mathbb{R}^{9 Γ— 18}$\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Below is an example of a batched input to `MoneDense` layer with batch size 9 and 12 inputs features.\n", + "\n", + "![](images/input__x__in__mathbb_R___9_Γ—_12___with_batch_size_9_and_12_inputs.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The figure below is an example of a kernel with 18 units and 12 input features.\n", + "\n", + "![kernel](images/kernel__(|W_T|_t)_T__in__mathbb_R___12_x_18___after_applying__t=[1,_1,_1,_1,_0,_0,_0,_0,_-1,_-1,_-1,_-1]__in__mathbb_R___12__.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The input $x$ is multiplied with kernel $(|W^T|_t)^T \\in \\mathbb{R}^{12 Γ— 18}$ after applying monotonicity indicator $t \\in \\mathbb{R}^{12}$ to it and then the bias $b$ (initially set to 0) is added to it:\n", + "\n", + "![output](images/batched_output__y__in__mathbb_R___9_x_18__.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Architecture types" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The main advantage of our proposed monotonic dense unit is its simplicity. We can build deep neural nets with different architectures by plugging in our monotonic dense blocks. We have two functions for building neural networks using `MonoDense` layer. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Type-1 architecture" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The first example shown in the figure below corresponds to the standard MLP type of neural network architecture used in general, where each of the input features is concatenated to form one single input feature vector $\\mathbf{x}$ and fed into the network, with the only difference being that instead of standard fully connected or dense layers, we employ monotonic dense units throughout. For the first (or input layer) layer, the indicator vector $\\mathbf{t}$, is used to identify the monotonicity property of the input feature with respect to the output. Specifically, $\\mathbf{t}$ is set to $1$ for those components in the input feature vector that are monotonically increasing and is set to $-1$ for those components that are monotonically decreasing and set to $0$ if the feature is non-monotonic. For the subsequent hidden layers, monotonic dense units with the indicator vector $\\mathbf{t}$ always being set to $1$ are used in order to preserve monotonicity. Finally, depending on whether the problem at hand is a regression problem or a classification problem (or even a multi-task problem), an appropriate activation function (such as linear activation or sigmoid or softmax) to obtain the final output.\n", + "\n", + "![type-1](images/type-1.png)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: \"model_7\"\n", + "__________________________________________________________________________________________________\n", + " Layer (type) Output Shape Param # Connected to \n", + "==================================================================================================\n", + " a (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " b (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " c (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " d (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " concatenate (Concatenate) (None, 4) 0 ['a[0][0]', \n", + " 'b[0][0]', \n", + " 'c[0][0]', \n", + " 'd[0][0]'] \n", + " \n", + " mono_dense_0 (MonoDense) (None, 64) 320 ['concatenate[0][0]'] \n", + " \n", + " dropout (Dropout) (None, 64) 0 ['mono_dense_0[0][0]'] \n", + " \n", + " mono_dense_1_increasing (MonoD (None, 64) 4160 ['dropout[0][0]'] \n", + " ense) \n", + " \n", + " dropout_1 (Dropout) (None, 64) 0 ['mono_dense_1_increasing[0][0]']\n", + " \n", + " mono_dense_2_increasing (MonoD (None, 10) 650 ['dropout_1[0][0]'] \n", + " ense) \n", + " \n", + " tf.nn.softmax (TFOpLambda) (None, 10) 0 ['mono_dense_2_increasing[0][0]']\n", + " \n", + "==================================================================================================\n", + "Total params: 5,130\n", + "Trainable params: 5,130\n", + "Non-trainable params: 0\n", + "__________________________________________________________________________________________________\n" + ] + } + ], + "source": [ + "inputs = {name: Input(name=name, shape=(1,)) for name in list(\"abcd\")}\n", + "\n", + "outputs = MonoDense.create_type_1(\n", + " inputs=inputs,\n", + " units=64,\n", + " final_units=10,\n", + " activation=\"elu\",\n", + " n_layers=3,\n", + " final_activation=\"softmax\",\n", + " monotonicity_indicator=dict(a=1, b=0, c=-1, d=0),\n", + " dropout=0.1,\n", + ")\n", + "\n", + "model = Model(inputs=inputs, outputs=outputs)\n", + "model.summary()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Type-2 architecture" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The figure below shows another example of a neural network architecture that can be built employing proposed monotonic dense blocks. The difference when compared to the architecture described above lies in the way input features are fed into the hidden layers of neural network architecture. Instead of concatenating the features directly, this architecture provides flexibility to employ any form of complex feature extractors for the non-monotonic features and use the extracted feature vectors as inputs. Another difference is that each monotonic input is passed through separate monotonic dense units. This provides an advantage since depending on whether the input is completely concave or convex or both, we can adjust the activation selection vector $\\mathbf{s}$ appropriately along with an appropriate value for the indicator vector $\\mathbf{t}$. Thus, each of the monotonic input features has a separate monotonic dense layer associated with it. Thus as the major difference to the above-mentioned architecture, we concatenate the feature vectors instead of concatenating the inputs directly. The subsequent parts of the network are similar to the architecture described above wherein for the rest of the hidden monotonic dense units, the indicator vector $\\mathbf{t}$ is always set to $1$ to preserve monotonicity.\n", + "\n", + "![type-2](images/type-2.png)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: \"model_8\"\n", + "__________________________________________________________________________________________________\n", + " Layer (type) Output Shape Param # Connected to \n", + "==================================================================================================\n", + " a (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " b (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " c (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " d (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " mono_dense_a_increasing_convex (None, 8) 16 ['a[0][0]'] \n", + " (MonoDense) \n", + " \n", + " dense_b (Dense) (None, 8) 16 ['b[0][0]'] \n", + " \n", + " mono_dense_c_decreasing (MonoD (None, 8) 16 ['c[0][0]'] \n", + " ense) \n", + " \n", + " dense_d (Dense) (None, 8) 16 ['d[0][0]'] \n", + " \n", + " preprocessed_features (Concate (None, 32) 0 ['mono_dense_a_increasing_convex[\n", + " nate) 0][0]', \n", + " 'dense_b[0][0]', \n", + " 'mono_dense_c_decreasing[0][0]',\n", + " 'dense_d[0][0]'] \n", + " \n", + " mono_dense_0_convex (MonoDense (None, 32) 1056 ['preprocessed_features[0][0]'] \n", + " ) \n", + " \n", + " dropout_2 (Dropout) (None, 32) 0 ['mono_dense_0_convex[0][0]'] \n", + " \n", + " mono_dense_1_increasing_convex (None, 32) 1056 ['dropout_2[0][0]'] \n", + " (MonoDense) \n", + " \n", + " dropout_3 (Dropout) (None, 32) 0 ['mono_dense_1_increasing_convex[\n", + " 0][0]'] \n", + " \n", + " mono_dense_2_increasing_convex (None, 10) 330 ['dropout_3[0][0]'] \n", + " (MonoDense) \n", + " \n", + " tf.nn.softmax_1 (TFOpLambda) (None, 10) 0 ['mono_dense_2_increasing_convex[\n", + " 0][0]'] \n", + " \n", + "==================================================================================================\n", + "Total params: 2,506\n", + "Trainable params: 2,506\n", + "Non-trainable params: 0\n", + "__________________________________________________________________________________________________\n" + ] + } + ], + "source": [ + "inputs = {name: Input(name=name, shape=(1,)) for name in list(\"abcd\")}\n", + "outputs = MonoDense.create_type_2(\n", + " inputs,\n", + " units=32,\n", + " final_units=10,\n", + " activation=\"elu\",\n", + " final_activation=\"softmax\",\n", + " n_layers=3,\n", + " dropout=0.2,\n", + " monotonicity_indicator=dict(a=1, b=0, c=-1, d=0),\n", + " is_convex=dict(a=True, b=False, c=False, d=False),\n", + ")\n", + "model = Model(inputs=inputs, outputs=outputs)\n", + "model.summary()" + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "python3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.18" + } }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdMAAAHHCAYAAADkubIgAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAACMS0lEQVR4nOzdd3yTVdvA8d+d1aYj3YNVoGWWvUGgIIIIDhRRcIGKir4gKvqo4ELlcT1OcKGC4t4LZLjZ4ABE9mihzNLSkbRNmnW/fxTShg5a2nRe388H5T73yMlpyZWzFVVVVYQQQghxzjS1nQEhhBCivpNgKoQQQlSRBFMhhBCiiiSYCiGEEFUkwVQIIYSoIgmmQgghRBVJMBVCCCGqSIKpEEIIUUUSTIUQQogqkmAqhDirBx98kGHDhtXKa3/99de0b9+ew4cP18rrC1EREkxFgzNv3jzat29PZmZmqecvueQSbrjhhhrOlW+lpaUxb948du7cWdtZqTWnf+6n/3Tq1Ilhw4YxZ84czGbzOT3zdCD/999/Sz1/+PBh2rdvz4IFC0o9v2DBAvki0EjoajsDQoiqO3HiBK+++irNmjWjY8eO1f78J598kvqyjPfs2bMJCAjAarWyfv16PvjgA7Zv384nn3xS21kTDZgEUyEaIavVitForPD1er3eh7mpXiNHjiQ8PByACRMmcM8997B06VK2bt1K165dazl3oqGSZl7R6G3cuJH27duzdOlS3njjDZKSkujSpQuTJk3i4MGDJa7/559/uPXWW+nTpw/du3fn0ksvZdGiRV7XrF+/nmuvvZbu3bvTu3dv7rjjDvbv3+91zelmyYMHD/Lggw/Su3dvevXqxcyZM7FarV7Xrl27lmuuuYbevXvTo0cPRo4cyYsvvujJ/7hx4wCYOXOmp5nz66+/BuCGG27gkksuYdu2bVx33XV069bNc+/PP//MbbfdxqBBg+jcuTPDhw/ntddew+Vyeb3+mX2mxZs3P/vsM4YPH07nzp258sor2bp1a4ky279/P9OnT6dv37506dKFsWPH8ssvv5S4bu/evUycOJGuXbuSlJTE66+/jtvtLv0HV0G9e/cGIDU11Sv9n3/+YfLkyfTq1Ytu3bpx/fXX8/fff1fptUTjJTVTIU55++23URSFm2++mdzcXN555x3uu+8+vvjiC881a9euZcqUKURHRzNx4kQiIyPZv38/v//+O5MmTQJg3bp13HrrrTRv3pxp06Zhs9n48MMPueaaa/j6669p3ry51+vefffdNG/enBkzZrBjxw6++OILwsPD+c9//gMUBpgpU6bQvn17pk+fjsFg4ODBg2zatAmAhIQEpk+fzty5cxk/fjy9evUCoGfPnp7XyM7O5tZbb+Xiiy/msssuIyIiAoBvvvmGgIAAbrrpJgICAtiwYQNz584lNzeXBx544KxltmTJEvLy8hg/fjyKovDOO+9w55138vPPP3tqs3v37uWaa64hJiaGW2+9lYCAAJYtW8bUqVOZN28eI0aMACA9PZ2JEyficrm47bbbMBqNfP755/j5+Z3Tz/O00/2VJpPJk7Z+/XpuvfVWOnfuzLRp01AUha+//ppJkybx8ccfSw1WVJoEUyFOKSgo4Ntvv8VgMACFH77//e9/2bNnD+3atcPlcvHoo48SHR3Nt99+6/XhXLw/8bnnniMkJITPPvuM0NBQAIYPH84VV1zBvHnzePbZZ71et2PHjjz11FOe4+zsbL788ktPMF27di0Oh4O3337b03xZXGRkJElJScydO5fu3bszZsyYEtekp6fz+OOPM2HCBK/0F154AX9/f8/xNddcw6OPPsonn3zCPffc4ymLshw9epQff/yRkJAQAFq3bs3//d//sWbNGs4//3wA/vvf/9KkSRO++uorz/OuvfZarrnmGp5//nlPMH377bfJzMzkiy++8ASzK664ggsvvLDcPJwpJycHKGzK3rBhAx9//DHh4eH06dMHKPxZzZ49m379+vHOO++gKApQ2CR88cUX8/LLL7Nw4cJKvaYQ0swrxCljx471Ch6nmwcPHToEwI4dOzh8+DATJ070CqSA5wP5xIkT7Ny5kyuuuMITSAE6dOjAeeedx8qVK0u87pkBrnfv3mRnZ5ObmwsU1ah++eWXc27yNBgMjB07tkR68UCam5tLZmYmvXv3xmq1kpycfNbnjh492hNIT+cdisosOzubDRs2MGrUKM/zMzMzycrKYtCgQRw4cIC0tDQAVq5cSffu3b1qheHh4Vx66aWVeq8XXXQRAwYMYNiwYcyaNYu4uDjefvttTx/xzp07OXDgAJdeeilZWVmePOXn5zNgwAD+/PPPKjcti8ZHaqZCnNK0aVOv49NB7PS0itMBol27dmU+4+jRo0BhDe1M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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "7/7 [==============================] - 0s 992us/step\n", - "7/7 [==============================] - 0s 1ms/step\n", - "Saved figure to: images/Constrained_ReLU.pdf\n", - "Saved figure to: images/Constrained_ReLU.png\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdMAAAHHCAYAAADkubIgAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAACNtElEQVR4nOzdd3hURdvA4d/Zlr4ppFBCgAQSaug19CqooBRFfRUVFP1QxPJasCHy2js2VBDsvQBSpXdEei8JHRJCyqZvdvd8fwQ2WZJA2mZTnvu6csGZM+fs7KQ8O3OmKKqqqgghhBCizDSuLoAQQghR3UkwFUIIIcpJgqkQQghRThJMhRBCiHKSYCqEEEKUkwRTIYQQopwkmAohhBDlJMFUCCGEKCcJpkIIIUQ5STAVohaLiopi5syZLnntO++8kzvvvNMlry1ERZNgKmq9kydP8sILLzBgwADatGlDhw4dGDt2LPPmzSM7O9ulZVuzZo3Lgl1V0b9/f6Kiouxf7dq1Y/To0fzxxx9lvuedd97JDTfcUOz5mTNnEhUVRVJSUpHnb7jhBvkgIBzoXF0AIVxp9erVPPLIIxgMBkaMGEFkZCS5ubn8+++/vPnmmxw9epSXX37ZZeVbs2YN3377LQ8//LBT7r979260Wq1T7l2RWrRowT333APAhQsX+Pnnn3nqqacwm83ccsstLi6dEBJMRS126tQpHn30UerXr8+8efMIDg62n7vjjjs4ceIEq1evdl0BS8lisWCz2TAYDCW+xs3NzYklqjghISGMGDHCfjxy5EgGDBjA3LlzJZiKKkG6eUWt9cUXX5CZmcn//vc/h0B6WaNGjRg3bpz92GKx8NFHHzFw4EBat25N//79eeeddzCbzQ7X9e/fn4kTJ7Jt2zZGjx5NmzZtGDBgQKFuydzcXD788EMGDx5MmzZt6Nq1K7fddhsbNmwA4Omnn+bbb78FcOjmBDh9+jRRUVHMnj2buXPnMnDgQNq0acOxY8cwm828//77jBw5ko4dO9KuXTtuv/12Nm/eXOg9XvnM9HL35okTJ3j66afp1KkTHTt25JlnniErK6vQ9X/++ScjR44kOjqaLl268Oijj3Lu3LlC+X788UcGDhxIdHQ0o0ePZtu2bcV9W0okICCA8PBwTp486ZBus9mYO3cu119/PW3atKFHjx688MILpKamluv1hLgWaZmKWmvVqlU0bNiQDh06lCj/c889x++//86QIUO455572L17N7NmzeLYsWN89NFHDnlPnDjBI488wujRo7n55pv59ddfefrpp2nVqhXNmjUD4MMPP2TWrFmMGTOG6Oho0tPT2bt3L/v27SMmJoZbb72VhIQENmzYwBtvvFFkmX777TdycnK45ZZbMBgM+Pr6kp6ezs8//8wNN9zAmDFjyMjI4JdffmHChAn8/PPPtGjR4prvdcqUKYSGhvLYY4+xf/9+fv75ZwICAvjvf/9rz/PJJ5/w/vvvM3ToUEaPHk1SUhLffPMNd9xxB3/88QdGoxGAn3/+mRdeeIH27dszbtw4Tp06xYMPPoivry/16tUrUd1fyWKxEB8fj6+vr0P6Cy+8wO+//87IkSO58847OX36NN9++y379+/n+++/R6/Xl+n1hLgWCaaiVkpPTyc+Pp4BAwaUKP/Bgwf5/fffGTNmDDNmzADyuoIDAgKYM2cOmzdvplu3bvb8cXFxfPvtt3Tq1AmAoUOH0qdPH3777TeeeuopIO95bZ8+fYp9Jtu+fXsaN27Mhg0bHLo4Czp//jzLly8nICDAnma1Wlm5cqVDd+8tt9zC0KFD+frrr3nllVeu+X5btGjhkC8lJYVffvnFHkzPnDnDzJkzmTJlCg888IA93+DBg7n55pv57rvveOCBB8jNzeXdd9+lRYsWfPXVV/YyNW3alOeff77EwdRisdgHAyUmJvLFF19w4cIF7rjjDnuebdu28fPPP/PWW29x44032tO7du3KhAkTWLJkiUO6EBVJunlFrZSeng6Al5dXifKvWbMGwD4I5rJ7773X4fxlTZs2tQdSyOuWbNKkCadOnbKnGY1Gjhw5wvHjx0td/ssGDx7sEEgBtFqtPWjZbDZSUlKwWCy0bt2a/fv3l+i+Y8eOdTju1KkTKSkp9npbvnw5NpuNoUOHkpSUZP8KDAykUaNGbNmyBYC9e/dy8eJFxo4d6xDcb775Znx8fEr8PtevX0/37t3p3r07N954o717+cknn7TnWbJkCT4+PsTExDiUqVWrVnh6etrLJIQzSMtU1Ere3t4AZGRklCj/mTNn0Gg0hIWFOaQHBQVhNBo5c+aMQ3pRLS5fX1+HZ3eTJ0/m//7v/xgyZAiRkZH07NmTESNG0Lx58xK/j9DQ0CLTf//9d+bMmUNcXBy5ubnXzH+l+vXrOxxf7rJNTU3F29ub48ePo6oqgwcPLvJ6nS7vT8vZs2eBvOfPBen1eho2bFiisgC0bduWKVOmYLVaOXLkCJ988gkmk8mh2/bEiROkpaXRvXv3Iu9x8eLFEr+eEKUlwVTUSt7e3gQHB3PkyJFSXacoSonylWS6SefOnVm+fDkrVqxgw4YN/PLLL8ybN4+XXnqJMWPGlOh13N3dC6X9+eefPP300wwcOJDx48dTp04dtFots2bNcmgZX41GU3SnlaqqQF6LV1EUPv/88yLfq6enZ4lep6T8/f3p0aMHAL169SI8PJyJEyfy1Vdf2XsLbDYbderU4a233iryHle24K/m8ijnnJycIs9nZWVRt27d0rwFUcNJMBW1Vr9+/fjxxx/ZsWMH7du3v2reBg0aYLPZOHHiBBEREfb0xMRETCYTDRo0KFMZ/Pz8GDVqFKNGjSIjI4P//Oc/zJw50x5MSxq8C1q6dCkNGzbkww8/dLj+gw8+KFMZixIWFoaqqoSGhtKkSZNi811u4Z44ccKhxZibm8vp06dL1QovqG/fvnTp0oVPP/2UW2+9FU9PT8LCwti0aRMdOnQo8kNGaVwud1xcXKFehqysLM6fP09MTEy5XkPULPLMVNRaEyZMwNPTk+eee47ExMRC50+ePMm8efMA6NOnD4D9+LIvv/zS4XxpJCcnOxx7eXkRFhbmMNXGw8MDAJPJVOL7Xm4pXm5FAuzatYudO3eWuozFGTx4MFqtlg8//NDhdS6/7uX31rp1awICAvjhhx8c3tfvv/9eqvdUlAkTJpCSksJPP/0E5A3yslqtfPzxx4XyWiyWUr1e9+7d0ev1fP/999hsNodzP/74IxaLhd69e5er/KJmkZapqLXCwsJ46623ePTRRxk2bJh9BSSz2cyOHTtYsmQJI0eOBKB58+bcfPPN/Pjjj5hMJjp37syePXv4/fffGThwoMNI3pK6/vrr6dKlC61atcLPz489e/awdOlS/vOf/9jztGrVCoAZM2bQs2dPtFot119//VXv27dvX5YtW8akSZPo27cvp0+f5ocffqBp06ZkZmaWupxFCQsLY8qUKbz99tucOXOGgQMH4uXlxenTp/n777+55ZZbGD9+PHq9nilTpvDCCy8wbtw4hg0bxunTp/ntt99K9cy0KH369CEyMpK5c+dyxx130KVLF2699VZmzZrFgQMHiImJQa/Xc/z4cZYsWcKzzz7LddddZ78+KSmpyMAbGhrK8OHDmTRpEu+99x533HEH/fv3x8PDgx07drBw4UJ69uxJ//79y1V+UbNIMBW12oABA5g/fz6zZ89mxYoVfP/99xgMBqKionj66acdVteZMWMGoaGh/P777/z9998EBgYyceJEHnrooTK99p133snKlSvZsGEDZrOZ+vXrM2XKFMaPH2/PM3jwYO68807++usv5s+fj6qq1wymI0eOJDExkR9//JH169fTtGlT3nzzTZYsWcLWrVvLVNai3H///TRu3Ji5c+fa59nWrVuXmJgYh0Bz6623YrVamT17Nm+88QaRkZH2Oarlde+99/L000+zYMECRo4cyfTp02ndujU//PAD7777LlqtlgYNGjB8+PBC84kvXrxYZBm6d+/O8OHDefDBB2nQoAHffvstH3/8MRaLhdDQUB5++GHuv//+Yp8ri9pJUa/soxFCCCFEqchHKyGEEKKcJJgKIYQQ5STBVAghhCgnCaZCCCFEOUkwFUIIIcpJgqkQQghRThJMhRBCiHKSRRuKoaoqNlv5p+BqNEqF3EcUTerXeaRunUvq13kc6lZVURPS4fKxhx7Fz6PE9ynp+tgSTIths6kkJZVse67i6HQa/P29MJkysVhs175AlIrUr/NI3TqX1K/zXFm36tYT2F5cbD+vPDUQTd+mJbpXQIAXWm3Jgql08wohhKix1E3H8w90GpTO5VsTujgSTIUQQtQ4GVnZ2Kw21C3HAVABouujeLk55fWkm1cIIUSN8+38v9m1eR894tPooQvgXFRj4ns1p3uWhUCPig99EkyFEELUKDlmM1t2HSDz1AUWWlKZb00gMz2b+ud92LfHg9YhRroFe1RoUJVgWg42mxWr1XqV8wrZ2VrM5hysVhm1V9FqWv1qtVo0Gq2riyFEtbd550Gys81waRCpydONpJxULmxaz95tm9HcPZ4jqWaa+RoqLKhKMC0DVVUxmZLIysrgUk98sRITNdhsMlrPWWpW/Sp4eHhhNAaUeDi+EKKwVZt2omaaIceCTVFI9XIDfd4H1eDQhuj0elQVDqeYSTXbuL2psdy/cxJMyyArK4OsrHS8vf1wc3MHiv8maLVKjWg1VVU1p35VcnKySU9PQa93w9PT29UFEqJaSk5NY+eBow6tUqtGQbkUTMOi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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "7/7 [==============================] - 0s 1ms/step\n", - "7/7 [==============================] - 0s 1ms/step\n", - "Saved figure to: images/Constrained_with_ReLU-based_activations.pdf\n", - "Saved figure to: images/Constrained_with_ReLU-based_activations.png\n" - ] - }, - { - "data": { - "image/png": "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9CjTpk1j/Pjx7vfrAw88wMcff0yfPn2AvC8Fv//+O1dddRWRkZEkJSUxf/58brnlFn777TciIiIA+O6775g5cyZDhw7ltttuIzc3l/3797N9+3auvfZaAJKSkhg3bhyKonDzzTcTEhLCmjVrePLJJ8nMzHTfirdarUyYMIHTp09z6623Eh4ezq+//lrkF8Oi7Ny5k61bt3L11VdTv359Tp48yTfffMNtt93Gb7/9ho+PDwBZWVncfPPNHD58mNGjR9OmTRtSU1NZuXIlCQkJxMTEMHXqVN59911uuOEG9/usqM8OvV7P4MGDWbFiBc8995zHnaLff/8dm83mvlNRmr/VkJAQZsyYwYwZMxgyZIj7PVLSoKOq/qyqEVRRLTIyMtTY2Fj1vvvuK1X+vXv3qrGxseqTTz7pkf7yyy+rsbGx6oYNG9xpV1xxhRobG6tu3rzZnZacnKy2a9dOffnll91p1113nXrPPfeU+LzPPfecGhsbWyj9xIkTamxsrNqlSxc1OTnZ45jD4VBzc3M90tLT09XLLrtMnT59ukd6bGys+u6777ofv/vuu2psbGyhfJMnT1Z79OjhfhwfH6+2bt1aff/99z3y7d+/X23Tpo073Wazqb1791ZHjBjhUab58+ersbGx6i233FLi69+xY4caGxurrlq1SlVVVd23b58aGxurTp06VR07dqw737333quOHDnS/Xjjxo1qbGysunHjRnfaPffco15xxRWFniM/77BhwzzKOG/ePDU2Nlbdv39/iWX88ccf1djYWHX9+vVqcnKyevr0aXXp0qVqr1691Hbt2qmnT592550wYYJ6zTXXeDyPy+VSb7jhBvXKK68sVKYlS5YU+7yxsbHqc889V+SxJUuWFHr9xcl/vy5btsydlpGRofbp08ejTnNzc1Wn0+lx7okTJ9R27dqps2fPdqfdd9996tVXX13icz7xxBNqnz591JSUFI/0adOmqV27dlVzcnJUVVXVuXPnqrGxserixYvdebKzs9UhQ4aU6vXlX+d8W7duVWNjY9Wff/7ZnfbOO++osbGx6vLlywvld7lcqqoWvBd//PHHQnkee+wxj/fWX3/9pcbGxqorV670yHf33XergwYNcj8u7d9qcnJyob/VfPl/s/mq67Oquslt3mqSmZkJFG6dFCf/9uEdd9zhkX7nnXd6HM/XvHlz920+gJCQEJo1a+Zxy89sNnPw4EGOHj1a5vLnu/LKKwkJCfFI02q17m/DLpeLtLQ0HA4H7dq1Y8+ePaW67vjx4z0ed+vWjbS0NHe9rVixApfLxbBhw0hJSXH/q1evHk2bNnXfXt21axfJycmMHz/e4xv69ddfT0BAwEXL0aZNG3x9fd23hbds2UL9+vUZOXIke/bsIScnx91aLa5VWlqjRo3yKGNxt2mLc/vtt9O7d2/69+/P1KlT8fHx4f3336d+/fpA3m3SjRs3MmzYMDIzM911lpqaSt++fTl69Gi5R/9WVHh4uEer2N/f313HZ8+eBcBgMKDR5H1kOZ1OUlNT8fX1pVmzZh7vK7PZzJkzZ9ixY0eRz6WqKsuXL2fgwIGoqurx/unbty8ZGRns3r0bgDVr1hAWFsZVV13lPt/Hx4dx48aV6nWZTCb3z3a7ndTUVJo0aYLZbPYo8/Lly2nVqlWRdwYURSnVc52vV69eBAcHs3jxYndaeno669ev9+g/r4y/1QvV1M8qb5PbvNXE398fyLu9UxonT55Eo9HQpEkTj/SwsDDMZrP7ll6+om5fBgYGkp6e7n48depU/vOf/zB06FBiY2Pp27cvI0aMoFWrVqV+HZGRkUWm//zzz3z66accOXIEu91+0fwXatiwocfj/FuV6enp+Pv7c/ToUVRV5corryzy/PwBEadOnQLy+p/Pp9frady48UXLodVq6dy5szuY/vPPP+5+XKfTybZt26hXrx5paWkeHwjlUdxrtlgspTr/mWeeoVmzZmRkZPDjjz+yefNmj+B8/PhxVFXlnXfe4Z133inyGsnJye7bpZUhPxBkZWWRnZ3tTtdqtR5fwpo2bVooaERFRQF57/2wsDBcLheff/45X3/9NfHx8TidTnfeoKAg9893330369evZ+zYsTRt2pQ+ffpwzTXXuL/spKSkYLFYmD9/PvPnzy+y3CkpKe7nLqpszZo1K9Xrt1qtzJkzh59++omEhASPEbcZGRnun48fP17se7k8dDodV155JYsWLcJms2EwGFi+fDl2u73QYLSK/q1eqKZ+VnmbBNNq4u/vT3h4OAcPHizTeaX9llqa6Sbdu3dnxYoV/PHHH6xbt44ffviBefPm8dxzzzF27NhSPc/537zz/frrrzz++OMMHjyYiRMnEhoailarZc6cOaVuZeW3QC6U/2HkcrlQFIWPPvqoyNfq6+tbqucpjS5duvDBBx+Qm5vLli1buPfeezGbzbRo0YJ//vmH0NBQgAoH04u95ovp0KGDezTv4MGDuemmm3j44YdZunQpfn5+uFwuIK+FcPnllxd5jQs/AEtiMBiKnQedn54/ovnTTz9l9uzZ7uONGjVi5cqVpX4ugA8++IB33nmH0aNH88ADDxAYGIhGo+HFF1/0qKOYmBiWLl3KqlWr+Ouvv1i+fDlff/01kydPZurUqe56uO666woNLstXWYsQvPDCC/z0009MmDCBTp06ERAQgKIoTJs2zatTWQCuvvpq5s+fz5o1axg8eDBLly4lOjraIwBVxt9qcWraZ5W3STCtRldccQXz589n69atdO7cucS8jRo1wuVycezYMWJiYtzpSUlJWCwWGjVqVK4yBAUFMXr0aEaPHk1WVha33HILs2bNcr9By3OLadmyZTRu3JjZs2d7nP/uu++Wq4xFadKkCaqqEhkZWWIrIb+1d+zYMfeIRMi75RYfH1+qb7bdunXDbrezaNEiEhIS3EGze/fubNmyhdDQUKKioqhXr16J1ylPXZaXVqvloYce4rbbbuOrr77innvucbfE9Xo9l112WYWfo2HDhhw5cqTIY/np+fU/cuRIj9vgF04bOnbsGKqqetRR/i29/Pf2smXL6NmzJy+++KLHuRaLheDgYI80X19fhg8fzvDhw7HZbNx///188MEHTJo0iZCQEPeXi4vVQ6NGjThw4EChshX3ui+0bNkyRo4cyeOPP+5Oy83N9WiVQt77+WJfrMv6/unevTthYWEsXryYLl26sHHjRu69995C5SvN32pZnru6Pquqm/SZVqO77roLX19fnnrqKZKSkgodP378OPPmzQOgf//+AO7H+T777DOP42WRmprq8djPz48mTZp4DF/PH21Y2luNUPBN8/xv3tu3b2fbtm1lLmNxrrzySrRaLbNnzy70DV9VVfdra9euHSEhIXz77bcer+vnn38u9Wvq2LEjer2ejz76iKCgIPcIw65du7J9+3Y2b95cqlapj49PoQ9Rb+rZsycdOnRg3rx55ObmEhoaSo8ePZg/fz6JiYmF8uff2iyt/v37s337dnbt2uWRbrFYWLhwIa1btyYsLAyAxo0bc9lll7n/Xdi/nJiYyIoVK9yPMzMz+eWXXzyuodVqC/2ulyxZUqif98L3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4u8nulwqTqfnB2B+MHWpZfulXnidgvTK/8NzOp04HA6OHj3CZ599TN++/Urcfs3hcLB7985S95k+//zTXHvtSMaPv4kFC37hxRefo3Xrtu6tzf7883eeffYJhg+/lokTJ5GcnMQHH8wmI8PCc8+9VOx1i7u1m5SUxNtvv86ECROJiKhPRER91q5dzVNPPcagQVdy771TOH78KHPmvEdCwhlmznzV4/zXXnuJoUOH8+KLr/HXX6t4//1ZxMS0oFevywB47LGHCAkJ4fHHn8bf35/4+BOcPZtYqrooraK+rFUHp9NVI8pxqZL6LeBavs89iheAoa0JDQwkNDCwXHVU1XXr9WAaHR1dqG80IyODs2fPekxlKcnChQvRaDQMHz7cG0Ws88aMudYdDHr2vIxnn/1vifm//vpzkpLOMm7cTaW6/qhR4xg1aiwA7dp1ZMOGtaxa9Qe3334Xqqry3nvvMHDgEB5//Gn3OaGh9fi//3uACRPuIjo6pkyvJyPDwuuvv0vbtu3cac888zht27Znxoy819ar12UYjSZee+1FDh8+RExMc3feAQMGMnHiJAC6devBhg3rWLXqD3r1uoy0tDROnz7JAw88TN++eVO0unTpVqbyCSE8qS4V9bc9BQmhftC9SfUVqBy83pnXr18/1q9fj8VicactXboUjUZDnz59SnWN3377jR49ehAeHl7q/IBMlSml1157hw8++JTHHnuKY8eO8Nhj04ptGW/evJFPPpnD7bffRatWrUt1/R49erl/9vHxoX79Bu7gfeLEMc6cOc3AgUNwOBzuf507d0Gj0bB//94yv57AwECPQJqdnc3BgwcYMGCgR75Bg64EYMeObR7p3bsXlFdRFJo2jSIxMdF97fr1GzBnzmyWLFlEYmJCmcsnhLjA1niIT3M/VIa2QqmhY02K4/WW6fjx4/niiy+YPHkykyZNIiEhgVdffZXx48d7zDGdMGECp06dYsWKFR7n79mzx72CUlEeeeQRmjZtSps2bdwDkObOncvgwYMlmJZS8+YtAGjXrgOtWrXhjjtuYs2aP7niisEe+fbv38eTTz7GkCFXcccdpe+39fcP8His0+ndK2ClpaUB8MQTjxR5bkLCmVI/T77g4FCPx5mZGaiqSkiIZ7q/vz8GgwGLxXMgXECAZ3n1er27q0JRFN58czYffvg/3nzzFXJycmjZ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O+aw77WGhgY88MADzna9Xo+EhARe4r3G3fySfHw1drkAKUDk5OTAYDCgtrbW2dbQ0ICTJ08iJyfHj5EFBrVajczMTPzwww8u7X1XBMaPHz+k9ztw4AC6urowefJkb4YZ8HJycvDzzz87z+iB3isESqXSZSX5zaZOnYpRo0Zhz549zrbu7m7s3buX4/MG7ub3VlpaWnDo0KG7box6m6/GLs9MvaypqQm///47AMBsNuP8+fOoqqoCAJevdUycOBHPPvss1q5dCwBIT09HdnY2iouLsWrVKoSEhGDjxo3QarWYO3eu7z9IAHr11Vfx0ksvoaysDLm5uairq8OuXbuwceNGl/1uzu369euhUCiQlpYGSZJw7NgxbNmyBZMmTcKcOXP88VH8ZuHChfjss8+wbNkyLF26FC0tLdiwYQMWLlyI+Ph4536LFi3CxYsXsW/fPgBASEgIli5dis2bNyMmJgbJycnYsWMHOjo6sGTJEn99nIDjbn537dqFAwcOYNasWYiLi0NjYyO2bt0KlUqFxYsX++vjBByz2YyDBw8C6D3WXr161Xl8zcjIQExMjN/GLoupl9XV1WH16tXObZ1OB51OBwAuy9ztdjscDodL3/Lycqxbtw6lpaXo6elBdnY2SkpKePeja6ZPn47NmzejvLwcX3/9NRISEvDBBx+4fH8M6J/bpKQk7NixA19++SUsFgvi4+Mxf/58FBUV3XW5jYqKwvbt2/H+++9j2bJliIiIwPz58/HGG2+47OdwOGC3213aCgsLIYTAtm3b0NbWhpSUFFRWVnKl6Q3cze/48ePR2tqKtWvXwmQyITIyEg8++CCKioqY3xtcuXIFr7/+uktb3/ann36KzMxMv41dhRCDvB8TERER3RLnTImIiDzEYkpEROQhFlMiIiIPsZgSERF5iMWUiIjIQyymREREHmIxJSIi8hCLKRERkYdYTImIiDzEYkpEROQhFlMiIiIP/T96KBJuclFwogAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# | hide\n", - "\n", - "\n", - "for kind in kinds:\n", - " plot_model(kind, save_image=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - " \n", - "\n", - "\n", - "\n", - "\n", - " \n", - "\n", - "\n", - "\n", - "\n", - " \n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - "
\n", - "\n", - "\"Unconstrained\n", - "\n", - "\n", - "The plot to the left shows two fully-connected neural networks with one hidden layer with 2 and 32 neurons and ReLU activations approximating the qubic function on the interval $[-1, 1]$.\n", - " \n", - "An unconstrained ReLU network with n neurons can approximate both concave and convex segments of the cubic function using at most $n + 1$ piecewise linear segments. Increasing the number of neurons will provide a better fit with the function being approximated. Notice that even though the cubic function is monotonic, there is no guarantee that the trained model will be monotonic as well.\n", - " \n", - "
\n", - "\n", - "\"Constrained\n", - "\n", - " \n", - "\n", - "\n", - "If we constrain the weights of the network to be non-negative while still employing ReLU activation, the resulting model is monotone and convex. We can no longer approximate non-convex segments such as the cubic function on $[βˆ’1, 0]$ in the figure, and increasing the number of neurons from 2 to 32 does not yield any\n", - "significant improvement in the approximation.\n", - "\n", - "
\n", - "\n", - "\"Constrained\n", - " \n", - "\n", - "\n", - "Our proposed solution uses a combination of three activation functions in the hidden layer in order to gain the ability to model non-convex, monotone continuous functions. Notice that increasing the number of neurons increases the number of piecewise linear segments to approximate the cubic function. The resulting net-\n", - "work is monotone by construction even when trained on noisy data.\n", - "\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Activation Functions" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Our construction is based on generating two additional activation functions from a typical non-saturated activation function such as ReLU, ELU and SELU.\n", - "\n", - "We use $\\breve{\\mathcal{A}}$ to denote the set of all zero-centred, monotonically increasing, convex, lower-bounded functions. Let $\\breve{\\rho} \\in \\breve{\\mathcal{A}}$. Then\n", - "\n", - "$$\n", - "\\hat{\\rho}(x) = -\\breve{\\rho}(-x)\n", - "$$\n", - "\n", - "$$\n", - "\\tilde{\\rho}(x) = \\begin{cases}\n", - " \\breve{\\rho}(x+1)-\\breve{\\rho}(1) & \\text{if }x < 0\\\\\n", - " \\hat{\\rho}(x-1)+\\breve{\\rho}(1) & \\text{otherwise}\n", - " \\end{cases} \n", - "$$" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | hide\n", - "\n", - "\n", - "def plot_activation_functions(\n", - " activation: Optional[Union[str, Callable[[TensorLike], TensorLike]]] = None,\n", - " *,\n", - " font_size: int = 16,\n", - " save_image: bool = False,\n", - " save_path: Union[Path, str] = \"images\",\n", - " alpha=0.7,\n", - ") -> None:\n", - " font = {\"size\": font_size}\n", - " # sns.set_palette(\"hls\", 3)\n", - " sns.set_palette(three_color_palette, 3)\n", - " matplotlib.rc(\"font\", **font)\n", - " (\n", - " convex_activation,\n", - " concave_activation,\n", - " saturated_activation,\n", - " ) = get_activation_functions(activation)\n", - " plt.rcParams[\"figure.figsize\"] = (10, 5)\n", - "\n", - " x = np.arange(-6.6, 6.6, 0.1)\n", - " plt.plot(\n", - " x,\n", - " convex_activation(x),\n", - " label=r\"$\\breve{\\rho}(x)$\",\n", - " linestyle=\"-\",\n", - " linewidth=2.0,\n", - " alpha=1.0,\n", - " )\n", - " plt.plot(\n", - " x,\n", - " concave_activation(x),\n", - " label=r\"$\\hat{\\rho}(x)$\",\n", - " linestyle=\"--\",\n", - " linewidth=4.0,\n", - " alpha=0.7,\n", - " )\n", - " plt.plot(\n", - " x,\n", - " saturated_activation(x),\n", - " label=r\"$\\tilde{\\rho}(x)$\",\n", - " linestyle=\":\",\n", - " linewidth=4.0,\n", - " alpha=0.7,\n", - " )\n", - " plt.legend()\n", - "\n", - " title = f\"{activation.__name__ if hasattr(activation, '__name__') else activation}-based activations\"\n", - " plt.title(title)\n", - " plt.axis(\"equal\")\n", - " plt.xlim(-5.6, 5.6)\n", - " plt.ylim(-3.2, 3.2)\n", - "\n", - " if save_image:\n", - " for file_format in [\"pdf\", \"png\"]:\n", - " path = Path(save_path) / (title.replace(\" \", \"_\") + f\".{file_format}\")\n", - " path.parent.mkdir(exist_ok=True, parents=True)\n", - " plt.savefig(path, format=file_format)\n", - " print(f\"Saved figure to: {path}\")\n", - "\n", - " plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Saved figure to: images/linear-based_activations.pdf\n", - "Saved figure to: images/linear-based_activations.png\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAz4AAAHHCAYAAAB+yY0gAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABfaklEQVR4nO3dd3hUZf738c/MpJdJp4MSkBB6UaqIRFhFERUXxVWKBUXEjgKujdWfiqu7qyAWsOCuZUWxbuRZK6ICCigq0qO0UELapCczc54/wmQzhJKQTCZz8n5dlxfmzDlzfyd3pnzmlK/FMAxDAAAAAGBiVn8XAAAAAAC+RvABAAAAYHoEHwAAAACmR/ABAAAAYHoEHwAAAACmR/ABAAAAYHoEHwAAAACmR/ABAAAAYHoEHwAAAACmR/ABgJOwbNkypaSkaM+ePVXLJk6cqIkTJ/qxqpM3e/Zs9e3b199l1FlKSormz5/v7zIkHf1vorGsWbNGKSkpWrNmTaOPDQCBguADAEAdPPfcc/r000/9MvZrr72mZcuW+WVsAAh0Qf4uAADM4sUXX/R3CWgEzz//vM4991yNHDnSa/lFF12kCy64QCEhIT4b+4033lBcXJzGjRvntfyMM87QTz/9pODgYJ+NDQCBjuADAA3Elx94G0JxcbEiIiL8XYZp2Ww22Ww2v4xttVoVGhrql7EBIFBwqBsANJAjz/HxnHeRnp6uZ599VmeddZZ69uypyZMna+fOnTW237Bhg6699lr1799fvXv31lVXXaV169Z5rbN37149+OCDOvfcc9WrVy8NHDhQt9xyS43zSjznm3z33Xd68MEHNXjwYA0fPvyEj2H37t269tpr1adPH5155plasGCBDMPwWufFF1/UhAkTNHDgQPXq1Uvjxo3T8uXLa9zXN998oyuuuEKnn366+vbtq3PPPVd/+9vfvNYpLy/X008/rVGjRqlHjx4aPny4Hn/8cZWXl9dY75FHHtGgQYPUt29fTZs2Tfv37z/h4/Fs+9RTT2ncuHHq37+/+vTpoz/96U9avXp1jXXdbreWLFmiCy+8UD179tSgQYN07bXX6ueff5ZUeU5RcXGx3n33XaWkpCglJUWzZ8+WVPMcnxtuuEHnnHPOUWu6/PLLvfbavPPOO5o0aZIGDx6sHj166Pzzz9frr7/utU1aWpq2bdum7777rmpsz9/bsc7x+fjjjzVu3Liqv5WZM2fqwIEDXut4zu86cOCApk+frr59+2rQoEGaN2+eXC6X17r/+c9/NG7cOPXt21f9+vXThRdeqCVLlpxwDgCgKWCPDwD42KJFi2SxWHTNNdeosLBQixcv1syZM7V06dKqdVatWqWpU6eqR48emjFjhiwWi5YtW6bJkyfr9ddfV69evSRJP//8s3744QddcMEFatWqlfbu3as33nhDkyZN0n/+8x+Fh4d7jT137lzFx8frpptuUnFx8XHrdLlcuu6669S7d2/dddddWrlypebPny+Xy6Vbb721ar1XX31VaWlpuvDCC1VRUaH//Oc/uvXWW/X888/r7LPPliRt27ZNN9xwg1JSUnTLLbcoJCREO3fu1Pr166vux+1268Ybb9S6det02WWXqVOnTtq6dauWLFmi33//XQsXLqxa989//rM++OADjRkzRv369dPq1at1/fXX1+r3X1hYqKVLl2rMmDEaP368ioqK9Pbbb+u6667T0qVLlZqa6jXOsmXLdNZZZ+mPf/yjXC6X1q5dqw0bNqhnz556/PHHde+996pXr1667LLLJEkdOnQ46rijR4/WrFmz9NNPP1XNn1QZXn/88UfdfffdVcveeOMNnXbaaUpLS1NQUJC++OILzZ07V4Zh6Morr5Qk3XPPPXrooYcUERGhadOmSZISExOP+biXLVumOXPmqGfPnrrjjjuUnZ2tV199VevXr9d7770nu91eta7L5dK1116rXr166e6779aqVav00ksvqX379vrTn/4kqTLI3nHHHRo8eLBmzpwpScrIyND69es1efLkWs0FAPiVAQCos3feecfo0qWLsXv37qplV111lXHVVVdV/bx69WqjS5cuxujRo42ysrKq5UuWLDG6dOlibNmyxTAMw3C73cYf/vAH45prrjHcbnfVeiUlJUZaWppx9dVXey070g8//GB06dLFePfdd2vUd8UVVxhOp/OEj2fWrFlGly5djIceeqhqmdvtNq6//nqje/fuRnZ29jFrKC8vN8aMGWNMmjSpatnLL79sdOnSxWu7I7333ntG165dje+//95r+RtvvGF06dLFWLdunWEYhrFp0yajS5cuxoMPPui13h133GF06dLFePrpp4/72JxOp9fv3zAMIz8/3xgyZIgxZ86cqmWrVq2q8TvwqD4vffr0MWbNmlVjnSP/JgoKCowePXoYjz32mNd6ixYtMlJSUoy9e/dWLTvavF5zzTXGOeec47Xsggsu8Pob8/D8ra1evdowjMo5GTx4sDFmzBijtLS0ar0vvvjC6NKli/HUU09VLfPM/YIFC7zu8+KLLzYuueSSqp8ffvhho1+/frX6ewKApohD3QDAx8aNG+d1/s/pp58uqfKwMknatGmTfv/9d1144YXKzc1VTk6OcnJyVFxcrMGDB+v777+X2+2WJIWFhVXdT0VFhXJzc9WhQwfZ7Xb9+uuvNca+7LLL6nTeiWfvgiRZLBZdeeWVqqio0KpVq6qWV68hPz9fBQUF6t+/v9f4nr0Jn332WVXtR1q+fLk6deqk5OTkqseck5OjQYMGSVLVYVsrVqyQpBqXCq/tXgabzVb1+3e73crLy5PT6VSPHj28av7vf/8ri8WiGTNm1LgPi8VSq7Gqi4qK0llnnaWPP/7Y63DB9PR09enTR23atKlaVv13WlBQoJycHA0YMEC7d+9WQUFBncf+5ZdflJ2drSuuuMLr3J+zzz5bycnJ+vLLL2tsc8UVV3j93L9/f69DKO12u0pKSvTNN9/UuR4AaAo41A0AfKz6B1zpf6HA4XBIkn7//XdJ0qxZs455HwUFBYqJiVFpaamef/55LVu2TAcOHPD6QH20D8jt2rWr+v/y8nLl5+d73R4fH18VjKxWq9q3b+91e8eOHSVVHp7l8cUXX+jZZ5/Vpk2bvM7FqR4Ozj//fC1dulT33nuvnnzySQ0ePFijRo3SeeedJ6u18ju3nTt3aseOHRo8ePBRH3N2dnbV2FartcYhZcnJyUfd7mjeffddvfTSS/rtt99UUVFRtbz672fXrl1q0aKFYmNja32/J3L++efr008/1Q8//KB+/fpp165d2rhxo+655x6v9datW6f58+frxx9/VElJiddtBQUFio6OrtO4mZmZkv43f9UlJyfXOHcsNDRU8fHxXstiYmK8/l7+9Kc/6eOPP9bUqVPVsmVLDR06VKNHj9ZZZ51Vp9oAwF8IPgDgY54P+kfyhBbPv3fffbfX+SbVea7G9tBDD1Wd+9OnTx9FR0fLYrHo9ttvr3ERAkle3/b/8MMPmjRpktftn332mdeH/xNZu3atbrzxRp1xxhl64IEHlJSUpODgYL3zzjv66KOPqtYLCwvTa6+9pjVr1ujLL7/UypUrlZ6ern//+9966aWXZLPZ5Ha71aVLF82ZM+eoY7Vq1arWdR3P+++/r9mzZ2vkyJG69tprlZCQIJvNpueff75qr5uvjBgxQuHh4fr444/Vr18/ffzxx7JarTrvvPOq1tm1a5emTJmi5ORkzZ49W61bt1ZwcLBWrFihV1555Zh7zBpSbfYKJiQk6L333tPXX3+tr776Sl999ZWWLVumiy++WPPmzfN5jQBQXwQfAPAzz16WqKgoDRky5Ljr/r//9/908cUXV11JTJLKyspqdThU165d9fLLL3stS0pKqvp/t9ut3bt3e+0l+O233yRJbdu2rRo/NDRUL774otfhe++8806N8axWqwYPHqzBgwdrzpw5eu655/T3v/9da9as0ZAhQ9ShQwdt3rxZgwcPPu6hZG3btpXb7dauXbu89vJkZGSc8DF7am7fvr0WLFjgNc7TTz/ttV6HDh309ddfKy8vr8H2+kREROjss8/W8uXLNWfOHKWnp+v0009Xy5Ytq9b5/PPPVV5ermeffdZr7+CRV2iTan/Ined+fvvttxp71H777bcaeyFrKyQkRGlpaUpLS5Pb7daDDz6of//735o+fbpOOeWUk7pPAGgsnOMDAH7Wo0cPdejQQS+99JKKiopq3J6Tk1P1/0f7Zv6f//xnjcsOH01MTIyGDBni9d+RvV9ee+21qv83DEOvvfaagoODqz4822w2WSwWr/H27Nmjzz77zOt+8vLyaozv2ZvlOTxu9OjROnDggN56660a65aWllZdhc5zKNU///lPr3Vqexllz++s+h6xDRs26Mcff/Ra7w9/+IMMw9CCBQtq3Ef1bSMiIqoOU6yN888/XwcPHtTSpUu1efNmjR49+oT1FRQUHDVMhoeH12rsHj16KCEhQW+++abX4YgrVqzQjh07qq6+Vxe5ubleP1utVqWkpEhSjcuPA0BTxB4fAPAzq9Wqhx9+WFOnTtWYMWM0btw4tWzZUgcOHNCaNWsUFRWl5557TlLlyenvv/++oqKi1LlzZ/3444/69ttvG2QPRWhoqFauXKlZs2apV69eWrlypb788ktNmzat6vyP4cOH6+WXX9Z1112nMWPGKDs7W6+//ro6dOigLVu2VN3XM888o7Vr12r48OFq27Zt1XqtWrVS//79JUkXXXSRPv74Yz3wwANas2aN+vXrJ5fLpYyMDC1fvlyLFy9Wz549lZqaqjFjxuj1119XQUGB+vbtq9WrVx+1F9LRnH322frvf/+rm266SWeffbb27NmjN998U507d/a6xPegQYN00UUX6Z///Kd27typYcOGye12a926dRo4cKCuuuoqSVL37t21atUqvfzyy2rRooXatWun3r17H3P84cOHKzIyUvPmzZPNZtO5557rdfvQoUMVHBysadOmacKECSoqKtLSpUuVkJCgrKwsr3W7d++uN954QwsXLtQpp5yi+Pj4o54jFRwcrJkzZ2rOnDm66qqrdMEFF1Rdzrpt27aaMmVKrX531d17773Kz8/XoEGD1LJlS2VmZupf//qXUlNT1alTpzrfHwA0NoIPADQBAwcO1L///W8tXLhQ//rXv1RcXKykpCT16tVLl19+edV6f/7zn2W1WvXhhx+qrKxM/fr1qwoi9WWz2bR48WI9+OCD+utf/6rIyEjNmDFDN910U9U6gwcP1v/93/9p0aJFeuSRR9SuXTvNnDlTe/fu9Qo+aWlp2rt3r9555x3l5uYqLi5OAwYM0M0331x1or7VatUzzzyjV155Re+//74++eQThYeHq127dpo4caLXIXePPPKI4uLi9OGHH+qzzz7TwIED9cILL9SqKeu4ceN06NAh/fvf/9bXX3+tzp07669//auWL1+u7777zmvdRx99VCkpKXr77bf1+OOPKzo6Wj169FDfvn2r1pk9e7buv/9+/eMf/1BpaakuueSS4waf0NBQpaWl6cMPP9SQIUOUkJDgdXtycrKefvpp/eMf/9C8efOUmJioK664QvHx8TUugnDTTTcpMzNTixcvVlFRkQYMGHDMi0OMGzdOYWFhWrRokZ544glFRERo5MiRuuuuu7x6+NTW2LFj9dZbb+n111+Xw+FQUlKSRo8erZtvvvmY57EBQFNiMY52NiwAAAAAmAhf0QAAAAAwPYIPAAAAANMj+AAAAAAwPYIPAAAAANMj+AAAAAAwPYIPAAAAANMj+AAAAAAwvYBtYGoYhtxu37cgslotjTIO/Ic5Njfm19yYX/Njjiu5DanI6Zbbbcgod0meNowWiywhNlmtFkUGWWW1+LfOumJ+za2x5tdqtchiOfEff8AGH7fbUE5OkU/HCAqyKi4uUg5HsZxOt0/Hgn8wx+bG/Job82t+zHGl/XmFSt9XrrxCp4xN+6VSZ+UN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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Saved figure to: images/ReLU-based_activations.pdf\n", - "Saved figure to: images/ReLU-based_activations.png\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAz4AAAHHCAYAAAB+yY0gAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABgjUlEQVR4nO3dd3xUVcL/8e+UTCppBCkJSDP0pguIWBEUFbEgylqwrGBD0NVVsK2s/mzP+vgooKKuirvuqojo4kbsa0FlLSsq0kEEBEIgbdKm3d8fbLIZZjIzSWYyyc3n/Xr5wpy5555zc2bm3m/uvedaDMMwBAAAAAAmZo13BwAAAAAg1gg+AAAAAEyP4AMAAADA9Ag+AAAAAEyP4AMAAADA9Ag+AAAAAEyP4AMAAADA9Ag+AAAAAEyP4AMAAADA9Ag+ANCOjRs3TldddVW8u9Eoq1evVr9+/bR69ep4d0WSNHfuXI0bNy4ubS9YsED9+vWLS9sA0NYQfACgGV577TX169ev7r+BAwfquOOO09y5c7V3794mrbP2wH7lypUNLtOvXz/94Q9/CPraypUrW1UwMIO9e/dqwYIFWrduXYu3XVVVpQULFjCeANBM9nh3AADMYPbs2crLy5PL5dK3336r5cuX6+uvv9abb76pxMTEeHcPzVRYWKiFCxcqNzdXAwYM8HvtnnvukWEYMWu7qqpKCxcu1KxZszR69Gi/16655hrNnDkzZm0DgJkQfAAgCo4//ngNGTJEkjR16lRlZWXp6aef1vvvv6/TTz89zr1DLCUkJMStbbvdLrudXTkARIJL3QAgBn71q19Jknbs2OFXvmXLFs2ePVujRo3SkCFDdO655+r999+PRxf9fPrppzrrrLM0ZMgQnX766XrnnXf8Xi8pKdGDDz6oM888UyNGjNCRRx6pK6+8UuvXrw9Y15///GedccYZGjZsmEaOHKlzzz1XK1as8Ftm7969mjdvno455hgNHjxYZ5xxhl599dWAde3Zs0fXXnuthg8frjFjxui+++6Ty+WKaJt27dqlu+++W6eeeqqGDh2q0aNHa/bs2dq5c2fAsmVlZbrvvvs0btw4DR48WMcff7xuueUWHThwQKtXr9Z5550nSZo3b17dZY2vvfaaJP97fNxut0aNGqV58+YFtOF0OjVkyBA9+OCDkiSXy6VHH31U5557ro466igNHz5cF154ob744ou6Ojt37tSYMWMkSQsXLqxre8GCBZKC3+Pj8Xi0aNEijR8/XoMHD9a4ceP0v//7vwG/t9r7u7766iudd955GjJkiE4++WS9/vrrfsu53W4tXLhQp5xyioYMGaLRo0fr17/+tVatWhXROABAa8GfiQAgBnbt2iVJSk9PryvbtGmTfv3rX6tz586aMWOGUlJS9NZbb+m6667TggULNGHChLj09aefftKNN96oadOm6ZxzztGyZcs0Z84cPfPMMxo7dqykgwHuvffe08SJE5WXl6eioiK9/PLLuvjii/WPf/xDnTt3liS98soruvfee3Xqqadq+vTpqqmp0YYNG7RmzRqdeeaZkqSioiKdf/75slgsuuiii5Sdna2PP/5Yt99+u5xOpy677DJJUnV1tS699FLt3r1bl1xyiQ477DC98cYbfsEglO+//17//ve/dcYZZ6hLly7atWuX/va3v2n69On6xz/+oeTkZElSRUWFLrroIm3ZskVTpkzRwIEDVVxcrA8++EB79+5Vnz59NHv2bD322GO64IILdNRRR0mSjjzyyIA2ExISNH78eL377ruaP3++HA5H3WvvvfeeXC5X3RlAp9OppUuXatKkSZo6daoqKir06quv6sorr9TSpUs1YMAAZWdn6+6779bdd9+tCRMm1L1HQk1ocMcdd2j58uU69dRTdfnll+u7777T4sWLtWXLFi1atMhv2e3bt2vOnDk677zz6sZ+7ty5GjRokI444ghJBwPX4sWLNXXqVA0dOlROp1M//PCD1q5dW/f+AIA2wQAANNmyZcuM/Px847PPPjP2799v7N6921i5cqVx9NFHG4MHDzZ2795dt+yll15qTJo0yaipqakr8/l8xgUXXGCccsopdWVffPGFkZ+fb7z11lsNtpufn2/Mnz8/6GtvvfWWkZ+fb3zxxRdh+3/SSScZ+fn5xttvv11XVl5ebowdO9Y4++yz68pqamoMr9frV3fHjh3G4MGDjYULF9aVXXPNNcYZZ5wRss3bbrvNGDt2rHHgwAG/8htvvNE46qijjKqqKsMwDOP555838vPzjYKCgrplKisrjQkTJkS0fbXrqe/f//63kZ+fbyxfvryu7NFHHzXy8/ONd955J2B5n89nGIZhfPfdd0Z+fr6xbNmygGVuvfVW46STTqr7+ZNPPjHy8/ONDz74wG+5GTNmGCeffHLdzx6Px++9YBiGUVpaahxzzDHGvHnz6sr2799v5OfnG4899lhA24899piRn59f9/O6deuM/Px84/bbb/db7oEHHjDy8/ONzz//vK6sduy//PJLv7YGDx5sPPDAA3VlkydPNmbOnBnQNgC0NVzqBgBRcNlll2nMmDE64YQTNHv2bCUnJ+uJJ55Qly5dJB28VOyLL77QaaedJqfTqQMHDujAgQMqLi7Wscceq59++qnJs8A112GHHeZ3tiktLU1nn322fvzxR+3bt0+S5HA4ZLUe3GV4vV4VFxcrJSVFvXr10o8//lhXNz09XXv27NF3330XtC3DMPTOO+9o3LhxMgyj7vdw4MABHXvssSovL9fatWslSR9//LE6deqkiRMn1tVPTk7W+eefH9F2JSUl1f2/2+1WcXGxevToofT0dL8+v/POO+rfv3/QM24WiyWituo7+uijlZWVpYKCgrqy0tJSffbZZ373e9lstrozQj6fTyUlJfJ4PBo8eLBf/xrjo48+kiRdfvnlfuVXXHGF3+u1+vbtW3dZpiRlZ2erV69efpdopqena9OmTfrpp5+a1CcAaC241A0AouCuu+5Sr169VF5ermXLlunLL7/0u8zp559/lmEYevTRR/Xoo48GXcf+/fvrLhmLhtqD9oqKClVWVtaV22w2ZWdn1/18+OGHBxzg9+zZU9LBS/Y6deokn8+nF154QX/961+1c+dOeb3eumUzMzPr/n/GjBn67LPPNHXqVB1++OEaO3asJk2aVHd52IEDB1RWVqaXX35ZL7/8ctB+HzhwoK7tYH3r1atXRNtfXV2txYsX67XXXtPevXv9Zl4rLy+v+/+ff/5Zp5xySkTrjITdbtcpp5yiN998Uy6XSw6HQ++8847cbnfARBfLly/Xs88+q23btsntdteV5+XlNantXbt2yWq1qkePHn7lnTp1Unp6et0lmLW6du0asI6MjAyVlpbW/Tx79mxde+21OvXUU5Wfn69jjz1WZ511lvr379+kPgJAvBB8ACAKhg4dWjer2/jx43XhhRfqpptu0sqVK5Wamiqfzyfp4F/ejzvuuKDrOPRgNRSHw6Hq6uqgr9WW106j/eyzz2rhwoV1r+fm5uqDDz6IuC1JevLJJ/Xoo49qypQpmjNnjjIyMmS1WnXffff5BYo+ffpo5cqV+uc//6lPPvlE77zzjv7617/quuuu0+zZs+t+D5MnT9Y555wTtK1oPZDznnvu0WuvvaZLL71Uw4cPV4cOHWSxWHTjjTfGdPppSTrjjDP08ssv6+OPP9b48eO1cuVK9e7d2y8svPHGG5o7d67Gjx+v3/zmN+rYsaNsNpsWL14cMClGY0V6pspms4VdZuTIkXr33Xf1/vvva9WqVXr11Ve1ZMkSzZ8/X1OnTm1WPwGgJRF8ACDKbDabfvvb32r69Ol68cUXNXPmTHXv3l3SwZvfjznmmGa30a1bN23bti3oa7Xl3bp1kySdffbZdWdcJAU8V2j79u0yDMPvYLn2sqbc3FxJ0ttvv63Ro0frvvvu86tbVlamrKwsv7KUlBSdfvrpOv300+VyuXT99dfrySef1FVXXaXs7Oy6IBju95Cbm6uNGzcG9K2h7T7U22+/rbPPPltz586tK6upqfE72yMdDJybNm0Kua7GXvI2cuRIderUSQUFBTryyCP1xRdf6Oqrrw7oX/fu3bVw4UK/9T/22GNNbjs3N1c+n0/bt29Xnz596sqLiopUVlZWN56NlZmZqSlTpmjKlCmqqKjQxRdfrAULFhB8ALQp3OMDADEwevRoDR06VEuWLFFNTY06duyoUaNG6eWXX1ZhYWHA8rWXd0XqhBNO0Jo1a/TDDz/4lZeVlWnFihUaMGCAOnXqJEnq3r27jjnmmLr/6ocg6eDDOd999926n51Op15//XW/ddhstoCzJG+99VbAfUnFxcV+PzscDvXp00eGYcjtdstms+nUU0/V22+/rY0bN4b8PRx//PEqLCzUypUr68qqqqr0yiuvhP391Pb5UH/+85/9LtOTpFNOOUXr16/3+x3Uqt3m2hngysrKImrbarVq4sSJ+vDDD/X3v/9dHo8n4DK32v7V/72uWbNG3377rd9yjWn7hBNOkCQtWbLEr/y5557ze70xDh3T1NRU9ejRI+JpxQGgteCMDwDEyG9+8xvNmTNHr732mn7961/r97//vS688EKdeeaZOv/889W9e3cVFRXp22+/1Z49e/T3v//dr/4777yjrVu3Bqz3nHPO0cyZM7Vy5UpdfPHFuuCCC9S7d28VFhZq+fLlKiwsDDgzE0rPnj11++236/vvv1fHjh21bNky7d+/X/fff3/dMieeeKIWLVqkefPmacSIEdq4caNWrFhRdyar/jbn5OToyCOPVMeOHbV161b95S9/0QknnKC0tDRJ0k033aTVq1fr/PPP19SpU9W3b1+VlpZq7dq1+vzzz/Wvf/1LknT++efrxRdf1K233qq1a9eqU6dOeuONN/wmLQjlxBNP1BtvvKG0tDT17dtX3377rT777DO/e5Jq+/z2229rzpw5mjJligYNGqTS0lJ98MEHmj9/vvr37183KcJLL72k1NRUpaSkaOjQoQHbX99pp52mP//5z3rssceUn5/vdwamtn/vvPOOrrvuOp144onauXOnXnrpJfXt29fvnqykpCT17dtXb731lnr27KnMzEwdccQRys/PD2izf//+Ouecc/Tyyy+rrKxMI0eO1Pfff6/ly5dr/PjxOvrooyP63dV3xhlnaNSoURo0aJAyMzP1/fff6+2339bFF1/c6HUBQDwRfAAgRk455RT16NFDzz77rM4//3z17dtXy5Yt08KFC7V8+XKVlJQoOztbAwcO1HXXXRdQ/x//+EfQ9Y4aNUq/+tWvtHTpUi1YsEBvvfWW9u/fr7S0NI0YMUKPPPKIhg0bFnE/e/bsqTvvvFMPPfSQtm3bpry8PD3yyCN+9yJdffXVqqqq0ooVK1RQUKCBAwdq8eLFevjhh/3WdcEFF2jFihV67rnnVFlZqS5duuiSSy7RtddeW7dMTk6Oli5dqkWLFundd9/V3/72N2VmZqpv3766+eab65ZLTk7W888/r3vuuUd/+ctflJSUpDPPPFPHH3+8rrzyyrDbdfvtt8tqtWrFihWqqanRkUceqeeeey6gbmpqql588UUtWLBA7777rpYvX66OHTtqzJgxdZNNJCQk6IEHHtD//u//6u6775bH49H9998fMvgceeSR6tq1q3bv3h1wtkeSzj333LrnIX366afq27ev/ud//kcrV66sC3+17r33Xt1zzz26//775Xa7NWvWrKDBp3bZvLw8LV++XO+9955ycnJ01VVXadasWWF/Z8Fccskl+uCDD7Rq1Sq5XC5169ZNN9xwg37zm980aX0AEC8WI9Z3eAIAAABAnHGPDwAAAADTI/gAAAAAMD2CDwAAAADTI/gAAAAAMD2CDwAAAADTI/gAAAAAMD2CDwAAAADTa7MPMDUMQz5f7B9BZLVaWqQdxA9jbG6Mr7kxvubHGB/C65NxoFLy+A7+bLfKkp0i2drm37IZX3NrqfG1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/EJPa0LwiZDb7daPP/6obt266ZZbbtHw4cM1YsQIzZkzR/v27Yt39xAl//d//6dBgwbppJNOindXEGMej0dr1qxR7969490VNMLWrVsDxiw9PV2dOnXS1q1b49QrxNrXX3+tzp07Ky0tLd5dQZSsXLlSGzdu1HXXXRfvriCK1qxZo/z8fD3++OMaM2aMBg8erGnTpmnNmjXx7pokgk/ESkpK5Ha79fTTT6ukpEQLFy7U/Pnz9c033+j666+Pd/cQBevWrdOrr76qefPmxbsraAHPPPOM9u7dq8suuyzeXUEjlJWVKT09PaA8IyNDpaWlcegRYu2rr75SQUGBrrjiinh3BVFSVVWlBx54QDfeeCNh1mT27dunTz/9VG+88YZ+//vfa9GiRbJYLLriiiu0f//+eHevfd/jU15eHtFlLt27d5fP55MkpaamauHChXI4HJKknJwcXX755fr888+5T6CVacz4JiQkaP78+brwwgvVp0+fFugdmqsx41v7ea21atUqLViwQNdee60GDx4cqy4CaKY9e/boxhtv1OjRozV9+vR4dwdR8sQTT6hjx46aMmVKvLuCKDMMQ5WVlXr00UfVv39/SdKwYcM0btw4/eUvf9GcOXPi2r92HXxWrlypO+64I+xyBQUF6tatmywWi4488ki/g6hRo0bJZrNp8+bNBJ9WpjHju379em3dulUPP/ywysrKJB2culw6+BfmxMREJSYmxrS/aJzGjG/9MLt27Vpdf/31mjRpEjNEtUHp6ekqLy8PKC8tLQ24jwttW1lZmWbMmKHMzEwtWLCASQ1MYteuXXr22We1aNGius9y7b1blZWVqqioUGpqajy7iGZIT09XZmZmXeiRpMzMTA0cOFCbN2+OY88OatfBZ+rUqZo6dWrEy+fm5jb4Wu1BMlqPxoxvQUGBSktLNW7cuIDXRo4cqRkzZujmm2+OdhfRDI39/ErS9u3bNWPGDI0YMUL33ntvjHqGWOrdu3fAvTzl5eXat28f92uZSHV1ta666iqVl5fr5ZdfVocOHeLdJUTJzp075Xa7NXPmzIDXpk+frmHDhumVV16JQ88QDX379tXPP/8c9LXWcKzcroNPY5100klauXKlampq6v76/8UXX8jr9WrQoEFx7h2a45xzztGoUaP8ypYvX66CggI9/fTT6tatW5x6hmgpLCzUFVdcoa5du+qxxx5j1r426vjjj9eTTz7pd6/PypUrZbVaNXbs2Dj3DtHg8Xh0ww03aOvWrXrxxReZotxkBgwYoBdeeMGvbN26dbr//vs1f/58DRkyJE49QzScdNJJeu2117Ru3ToNGDBAklRcXKy1a9e2intqLQaPQo7Y7t27NXnyZA0dOlTTp0/XgQMH9PDDD6tHjx568cUXZbFY4t1FRNGCBQv07LPP6t///ne8u4Jmqq6u1gUXXKAdO3boj3/8o990uQ6HQwMHDoxj79AYpaWlOuOMM9SrVy9dddVVdQ8wPfPMM3mAqUnceeedeuWVVzR37lyNGDHC77WBAwcG3LOHtm/16tWaPn26Xn31VYJPG+fz+XT++eertLRUN954oxITE/XUU0/pp59+0ptvvqlOnTrFtX+c8WmErl276oUXXtB9992n66+/XsnJyTr55JM1d+5cQg/QihUVFWn9+vWSpGuuucbvtdzcXH3wwQfx6BaaICMjQ0uWLNE999yj6667TqmpqTrvvPN04403xrtriJLa5zE98MADAa+9//77ysvLa+kuAYiQ1WrVU089pfvvv1933XWX3G63fvWrX+nFF1+Me+iROOMDAAAAoB1gihQAAAAApkfwAQAAAGB6BB8AAAAApkfwAQAAAGB6BB8AAAAApkfwAQAAAGB6BB8AAAAApkfwAQAAAGB6BB8AAAAApkfwAQAAAGB6BB8AAAAApvf/AWvlFwFpB7v5AAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Saved figure to: images/ELU-based_activations.pdf\n", - "Saved figure to: images/ELU-based_activations.png\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAz4AAAHHCAYAAAB+yY0gAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB5tElEQVR4nO3dd3wUZeI/8M/MbE3ZdAIkoQRICL0oGJAWUVAREEWxgJ6KouKhngU89eTnfVW88+48sIENPRsoFhSwoGIDFFCUHnpNL7ubZOvM749Nliy72U3CbjbZfN6vF69NnplnnmfzkGQ+eWaeERRFUUBERERERBTBxHB3gIiIiIiIKNQYfIiIiIiIKOIx+BARERERUcRj8CEiIiIioojH4ENERERERBGPwYeIiIiIiCIegw8REREREUU8Bh8iIiIiIop4DD5ERERERBTxGHyIiNqJ+fPnY/DgweHuRpNlZ2dj8eLF4e4GAGDVqlXIzs7G8ePHW7ztzZs3Izs7G5s3b27xtomIIgGDDxFRCNSdIDf077fffnPvm52djf/3//5fg8eaOXMmJk2a5HNbWVlZqwoGkeLFF1/EV199FZa233rrLaxatSosbRMRRTJVuDtARBTJ/vznPyM9Pd2rvEuXLmHoDTXWSy+9hAkTJmD8+PEe5VOmTMGll14KjUYTsrbfeecdJCQkYNq0aR7l5557Ln7//Xeo1eqQtU1EFMkYfIiIQmj06NHo379/uLtBQSJJEiRJCkvboihCq9WGpW0iokjAS92IiNqZY8eO4eabb8agQYNw/vnnY8mSJVAUxWOfV155BTNmzMDw4cMxYMAATJs2DevWrfM61o8//ohrrrkG55xzDgYPHowJEybgX//6l8c+NpsN//3vf3HhhReiX79+GDNmDJ5++mnYbDav/Z544gmcd955GDx4MObMmYOCgoJGvSebzYZnn30W06ZNw9ChQzFo0CBce+212LRpk9e+sixj+fLluOyyy9C/f3+cd955uPnmm/HHH38AcF16WF1djQ8//NB9aeL8+fMBeN/jc9ttt+GCCy7w2aerr77aY9bmgw8+wKxZs5Cbm4t+/frhkksuwdtvv+1RJy8vD/n5+fj555/dbc+cORNAw/f4rF27FtOmTcOAAQMwfPhw3HfffSgsLPTYp+7+rsLCQtxxxx0YPHgwzjvvPCxatAhOp9Nj388++wzTpk3D4MGDMWTIEFx22WVYvnx5wDEgImrtOONDRBRCZrMZZWVlHmWCICAhISEs/XE6nbjlllswcOBA3H///fj++++xePFiOJ1OzJs3z73fG2+8gby8PFx22WWw2+347LPPMG/ePLz00ksYO3YsACA/Px+33XYbsrOz8ec//xkajQZHjhzBtm3b3MeRZRm33347tm7diquuugo9evTAvn37sHz5chw+fBjPP/+8e9+//vWv+OSTTzBp0iQMGTIEmzZtwq233tqo92U2m7Fy5UpMmjQJ06dPR1VVFd5//33ccsstWLlyJXJycjzaWbVqFUaPHo0rr7wSTqcTW7Zswfbt29G/f388/fTTePjhhzFgwABcddVVABq+NPHiiy/Ggw8+iN9//x0DBgxwl584cQK//fYbHnjgAXfZO++8g169eiEvLw8qlQrffPMNFi5cCEVRcN111wEAHnroITz++OOIiorCnDlzAADJyckNvu9Vq1ZhwYIF6N+/P+69916UlpbijTfewLZt2/DRRx/BYDC493U6nbj55psxYMAAPPDAA9i4cSNeffVVZGRk4NprrwXgCrL33nsvcnNzcd999wEADh48iG3btuGGG25o1FgQEbVaChERBd0HH3ygZGVl+fzXr18/j32zsrKUhQsXNnis66+/Xrn00kt9bistLVWysrKU//73vwH79OCDDypZWVnK448/7i6TZVm59dZblb59+yqlpaXu8pqaGo+6NptNmTRpkjJr1ix32WuvvaZkZWV51DvTRx99pPTu3Vv55ZdfPMrfeecdJSsrS9m6dauiKIqye/duJSsrS3nsscc89rv33nsb9f4cDoditVo9yiorK5URI0YoCxYscJdt3LjR62tQR5Zl98eDBg1SHnzwQa996sb12LFjiqIoislkUvr166c89dRTHvstW7ZMyc7OVk6cOOEuO/NrqiiKctNNNykXXHCBR9mll16qXH/99V77btq0ScnKylI2bdqkKIprTHJzc5VJkyYpFovFvd8333yjZGVlKc8++6y7rG7slyxZ4nHMqVOnKpdffrn787///e/KkCFDFIfD4dU+EVFbx0vdiIhC6NFHH8Vrr73m8W/ZsmVh7VPd7ALgmn267rrrYLfbsXHjRne5Tqdzf1xZWQmTyYShQ4di165d7vK62YT169dDlmWfba1btw49evRA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4b333kNsbGy4u0RBcvz4cdjtdtx6661e22bNmoWBAwdixYoVYegZBUPPnj1x9OhRn9taw7lyuw4+TTVu3DisW7cOVqvV/df/TZs2wel0om/fvmHuHZ2Nyy+/HMOGDfMo+/DDD7FmzRosW7YMnTt3DlPPKFiKiopw0003oVOnTvjvf//LVfvaqNGjR+PFF1/0uNdn3bp1EEURI0eODHPvKBgcDgfuvvtuHDx4EG+99RaXKI8wOTk5eOONNzzKdu/ejSeffBILFy5E//79w9QzCoZx48Zh1apV2L17N3JycgAA5eXl2LlzZ6u4p1ZQ+CjkRjt16hQmT56MAQMGYNasWSgrK8MzzzyDLl264K233oIgCOHuIgXR4sWL8eqrr+LXX38Nd1foLFksFlx99dU4duwY/vnPf3osl6vRaNCnT58w9o6aorKyEpdeeim6d++O2267zf0A08suu4wPMI0QjzzyCFasWIH58+dj8ODBHtv69Onjdc8etX2bN2/GrFmz8P777zP4tHGyLOOqq65CZWUl7rnnHmi1WixduhSHDx/Gp59+ipSUlLD2jzM+TdCpUye88cYbeOKJJ3DXXXdBr9fjggsuwPz58xl6iFqxkpIS7NmzBwBw++23e2xLS0vD119/HY5uUTPExcVh+fLlePzxx3HnnXciOjoaV155Je65555wd42CpO55TE899ZTXtvXr1yM9Pb2lu0REjSSKIpYuXYonn3wSjz76KOx2O8455xy89dZbYQ89AGd8iIiIiIioHeASKUREREREFPEYfIiIiIiIKOIx+BARERERUcRj8CEiIiIioojH4ENERERERBGPwYeIiIiIiCIegw8REREREUU8Bh8iIiIiIop4DD5ERERERBTxGHyIiIiIiCjiMfgQEREREVHE+/+Lvf0r5c7BKAAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Saved figure to: images/SELU-based_activations.pdf\n", - "Saved figure to: images/SELU-based_activations.png\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAz4AAAHHCAYAAAB+yY0gAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAACRKklEQVR4nOzdd3wUZf4H8M/M1rRNL5AChJBQA4g0kSoIIipgQUXs7e701DsL2E5Pz8KdP+/Uu7PgWe/sFQRUiog0aaIgLUAgBJKQnu27M8/vjw0Ly24aJLvJ5vN+vTDZZ+aZ+S4jsJ88zzwjCSEEiIiIiIiIwpgc6gKIiIiIiIjaGoMPERERERGFPQYfIiIiIiIKeww+REREREQU9hh8iIiIiIgo7DH4EBERERFR2GPwISIiIiKisMfgQ0REREREYY/Bh4iIiIiIwh6DDxFRJ3X48GHk5eXh9ddfD3UpLfLiiy8iLy8v1GV4TZgwAXPnzg3JuefMmYM5c+aE5NxERB0Ngw8R0RnavXs3fv/732P8+PEYMGAARo8ejRtuuAHvvPOOz34TJkxAXl5ewF833XSTd7/jH+wrKysDnm/Dhg3Iy8vD0qVLA27/85//3K6CQTjYsmULXnzxRdTW1gb93AUFBXjxxRdx+PDhoJ+biCicaENdABFRR7ZlyxZce+216Nq1Ky6//HIkJyfj6NGj2LZtG95++22/n8b36dMHN9xwg99xUlJSglUynYatW7fipZdewowZM2AymXy2LV26FJIktdm5CwoK8NJLL2HYsGHIyMjw2dbRRuuIiEKJwYeI6Ay8/PLLiImJwccff+z3gbiiosJv/9TUVFxyySXBKo+CQK/Xd8pzExF1NJzqRkR0Bg4dOoScnBy/0AMAiYmJIajo9Lz55psYP3488vPzcc0112DPnj0+23ft2oW5c+fivPPOw4ABAzBq1CjMmzcPVVVVPvuZzWb85S9/wYQJE9C/f3+MHDkSN9xwA3bs2OGz37Zt23DTTTdhyJAhGDhwIK655hps3rzZr65Nmzbh0ksvxYABAzBx4kS8//77zX5PmzZtwu9//3uMGzcO/fv3x9ixY/HUU0/Bbrf77btv3z7cddddGDFiBPLz8zF58mQ8//zzADxTD+fPnw8AOO+887zTE49PPTv5Hp9ffvkFeXl5+Oyzz/zOsXr1auTl5WHlypUAgOLiYjz22GOYPHky8vPzMXz4cPz+97/3mdL26aef4q677gIAXHvttd5zb9iwAUDge3wqKirw4IMP4pxzzsGAAQNw8cUX+9Vz8v1dH3zwASZOnIj+/fvj0ksvxc8//+yz77FjxzBv3jyMGTMG/fv3x7nnnovf/OY3nHpHRB0OR3yIiM5Aeno6tm7dij179iA3N7fJ/d1ud8B7dyIjI2E0GtuixCZ9/vnnsFgsuPrqq+FwOPDOO+/guuuuw8KFC5GUlAQAWLt2LYqKijBz5kwkJydj7969+PDDD1FQUIAPP/zQO9XrT3/6E77++mtcc8016NmzJ6qrq7F582bs27cP/fr1AwCsW7cOt9xyC/r374877rgDkiTh008/xXXXXYf//e9/yM/PB+C5d+qmm25CQkIC7rzzTrjdbrz44ovNDpRLly6F3W7HVVddhbi4OPz888949913UVJSghdeeMG7365duzB79mxotVrMmjUL6enpOHToEFasWIF77rkHkyZNQmFhIRYtWoR58+YhPj4eAJCQkOB3zgEDBiAzMxNLlizBjBkzfLYtXrwYsbGxOPfccwF4QtLWrVtx4YUXIi0tDcXFxXjvvfdw7bXX4quvvkJERASGDh2KOXPm4J133sHtt9+O7OxsAEDPnj0Dvme73Y45c+bg0KFDmD17NjIyMrB06VLMnTsXtbW1uO6663z2X7RoESwWC2bNmgVJkrBgwQLceeedWLZsGXQ6HQDgzjvvREFBAa655hqkp6ejsrISa9aswdGjR/2m3hERtWuCiIhO2w8//CD69Okj+vTpI2bNmiXmz58vVq9eLZxOp9++48ePF7m5uQF/vfLKK979XnjhBZGbmysqKioCnnP9+vUiNzdXLFmyJOD2xx9/XOTm5jZZe1FRkcjNzRX5+fmipKTE275t2zaRm5srnnrqKW+bzWbz679o0SKRm5srNm7c6G0bMmSIePzxxxs8p6qq4vzzzxc33nijUFXV5/gTJkwQN9xwg7ftt7/9rRgwYIAoLi72thUUFIg+ffo06/0FqvmVV14ReXl5PsecPXu2GDx4sE/b8VqPW7BggcjNzRVFRUV+xxw/frx44IEHvK+fe+450a9fP1FdXe1tczgc4uyzzxbz5s1rtL6tW7eK3Nxc8dlnn3nblixZInJzc8X69ev99r/mmmvENddc43395ptvitzcXPHF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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# | hide\n", - "\n", - "\n", - "for activation in [\"linear\", \"ReLU\", \"ELU\", \"SELU\"]:\n", - " plot_activation_functions(activation, save_image=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "An example of such activation functions are given in figures below:\n", - "\n", - "![ReLU-based_activations](images/ReLU-based_activations.png) ![ELU-based_activations](images/ELU-based_activations.png) \n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Monotonicity indicator\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Our construction is preconditioned on a priori knowledge of (partial) monotonicity of a multivariate, multidimensional function $f$. Let $f: K \\mapsto \\mathbb{R}^m$ be defined on a compact segment $K \\subseteq \\mathbb{R}^n$. Then we define its $n$-dimensional *monotonicity indicator vector* $\\mathbf{t} = [t_1, \\dots, t_n]$ element-wise as follows:\n", - "\n", - "$$\n", - " t_j= \\begin{cases}\n", - " 1 & \\text{if }\\cfrac{\\partial f(\\mathbf{x})_i} {\\partial x_j} \\geq 0 \\ \n", - " \\text{ for each } i \\in \\{1, \\dots , m\\}\\\\\n", - " -1 & \\text{if }\\cfrac{\\partial f(\\mathbf{x})_i} {\\partial x_j} \\leq 0 \\ \n", - " \\text{ for each } i \\in \\{1, \\dots , m\\}\\\\\n", - " 0 & \\text{otherwise}\n", - " \\end{cases} \n", - " \\: \n", - "$$\n", - "\n", - "Given an $(m \\times n)$-dimensional matrix $\\mathbf{M}$ and $n$-dimensional monotonicity indicator vector $\\mathbf{t}$, we define the operation $|.|_{t}$ assigning an $(m \\times n)$-dimensional matrix $\\mathbf{M'} = |\\mathbf{M}|_{t}$ to $\\mathbf{M}$ element-wise as follows:\n", - "\n", - "$$\n", - " m'_{j,i}= \\begin{cases}\n", - " |m_{j,i}| & \\text{if }t_i=1\\\\\n", - " -|m_{j,i}| & \\text{if }t_i=-1\\\\\n", - " m_{j,i} & \\text{otherwise}\n", - " \\end{cases}\n", - "$$" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | hide\n", - "\n", - "\n", - "def display_kernel(\n", - " kernel: Union[tf.Variable, np.typing.NDArray[float]],\n", - " *,\n", - " title: str,\n", - " save_path: Union[Path, str] = \"images\",\n", - " save_image: bool = True,\n", - ") -> None:\n", - " sns.set(font_scale=1.2)\n", - " # colors = [\"#CC3238\", \"#032545\"]\n", - " # colors = [\"#032545\", \"#CC3238\"]\n", - " cm = sns.color_palette([colors[0], colors[1]], as_cmap=True)\n", - " # cm = sns.color_palette(\"vlag\", as_cmap=True)\n", - " cm = sns.diverging_palette(\n", - " 349.35825815417826, 233.30090815690622, s=85, l=55, as_cmap=True\n", - " )\n", - " plt.rcParams[\"figure.figsize\"] = (10, 5)\n", - "\n", - " df = pd.DataFrame(kernel)\n", - "\n", - " # display(\n", - " # df.style.format(\"{:.2f}\").background_gradient(cmap=cm, vmin=-1e-8, vmax=1e-8)\n", - " # )\n", - "\n", - " ax = sns.heatmap(\n", - " df,\n", - " annot=True,\n", - " cmap=cm,\n", - " center=0.0,\n", - " vmin=-0.01,\n", - " vmax=0.01,\n", - " fmt=\".1f\",\n", - " cbar=False,\n", - " xticklabels=False,\n", - " yticklabels=False,\n", - " )\n", - " plt.title(title, loc=\"left\")\n", - "\n", - " if save_image:\n", - " for file_format in [\"pdf\", \"png\"]:\n", - " for s in [\" \", \"\\n \", \"$\", \"{\", \"}\", \"\\\\\", \"^\"]:\n", - " title = title.replace(s, \"_\")\n", - " title = title.replace(\"Γ—\", \"x\")\n", - "\n", - " path = Path(save_path) / f\"{title}.{file_format}\"\n", - " path.parent.mkdir(exist_ok=True, parents=True)\n", - " plt.savefig(path, format=file_format)\n", - " print(f\"Saved figure to: {path}\")\n", - "\n", - " plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Saved figure to: images/kernel__W__in__mathbb_R___9_x_12__.pdf\n", - "Saved figure to: images/kernel__W__in__mathbb_R___9_x_12__.png\n" - ] - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# | hide\n", - "\n", - "\n", - "tf.keras.utils.set_random_seed(42)\n", - "\n", - "units = 12\n", - "input_len = 9\n", - "\n", - "layer = tf.keras.layers.Dense(units=units)\n", - "\n", - "input_shape = (input_len,)\n", - "layer.build(input_shape=input_shape)\n", - "\n", - "# print(\"Original kernel:\")\n", - "rr = \"\\mathbb{R}^{9 Γ— 12}\"\n", - "# e =\n", - "display_kernel(layer.kernel, title=f\"kernel $W \\in {rr}$\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Saved figure to: images/kernel__(|W_T|_t)_T__after_applying_monotonicity_indicator__t=(-1,_-1,_-1,_0,_0,_0,_1,_1,_1)_.pdf\n", - "Saved figure to: images/kernel__(|W_T|_t)_T__after_applying_monotonicity_indicator__t=(-1,_-1,_-1,_0,_0,_0,_1,_1,_1)_.png\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1sAAAGwCAYAAABfIH9tAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAACEF0lEQVR4nO3dd3hUZfo38O/0mfQEUkgPZUILkNBCEZQqCP7siFhW14KubVd31bWvuq676rqLvSx2iiC7FrCAvtRQQ02A0BJISEJIz0ymn/ePkECYST9nZpLz/VyX12XOJM957oenzH2qQhAEAURERERERCQqpa8rQERERERE1BMx2SIiIiIiIpIAky0iIiIiIiIJMNkiIiIiIiKSAJMtIiIiIiIiCTDZIiIiIiIikgCTLSIiIiIiIgkw2SIiIiIiIpIAky0iIiIiIiIJMNkiIiIiIiKSAJMtIiIiIiIiCah9XQESz6ZNm/Db3/621d955ZVXcNVVV/WI/RIRERER+TOFIAiCrytB4rBYLKitrW36+frrr8esWbNwxx13NG0LDQ2FVqvtEfslIiIiIvJnHb6MsLCwEKmpqXj88celqI9f6EqMjz32GMaNGwez2dy0bdGiRUhNTUVhYaGY1XSj1+sRGRmJyMhI6PV6lJSUICMjo2lbZGRkU8LT0TodOHAAqamp+Oqrr7q0X7F9+umnmD17NoYNG4bU1FR8/PHHkuynJxFrDMthLiB3Yvy7+7rveGv/U6ZMwZQpU7y+X2qbp7WaiMiT1r4Dtwfv2RLRvn378L///Q933303AgIC2vx9k8mE1NTUZovxhQ4ePIjU1FSkpqYiKyvL4+/MnTsXqampOHz4cLPtOTk5EAQBQ4YM6XggHgwdOhTTpk3Dv/71L5hMphZ/T+z9tub777/HSy+9BJ1Oh9tuuw33338/RowYwS801KP15P7dk2PzFX9s048//hipqan49ttvfbL/jq7VHfXDDz/ghRdewE033YSMjAykpqbi0UcfFX0/UujOdQekr39JSQmeeOIJTJw4EUOHDsWUKVPw0ksvobq6WpZlS9ne/lR2e78Dt4T3bInojTfeQFBQEObPn9+u3w8MDIRarUZdXZ3Hzz/88MOm/7/wMr1GGzZsQF5eHiZPnozU1NRmn+Xk5CA8PByxsbEdiKB199xzD66//np89tlnWLhwocffkWK/Lfn1118BAO+++y6io6Obtkt9BpEaREdHY/Xq1QgODvZ1VciLxPh393Xf8dX+fR23vzhw4AAAeOWgnCcdXas76p133sGhQ4cQEBCAmJgYHD9+XJL9SKE71x2Qtv4nT57EjTfeiPLyckydOhV9+/bFvn378Omnn2Ljxo1YsmQJwsPDZVW2lO3tb2W35ztwS5hsieTEiRPYsmULrr/+euj1+nb/XXBwMGpqaty2FxUV4YcffkBsbCxOnz7t8Xc++ugjAMCdd97p9llubi4GDx7cgQjaNmzYMPTt2xfLli3D3XffDaXS/cSoFPttyZkzZwCgWaJF3qPRaNCvXz9fV4O8TIx/d1/3HV/t39dx+4ucnBwEBAQgJSXF6/vu7FrdEU888QRiYmKQlJSE7du349Zbb5VkP1LoznUHpK3/888/j/Lycjz11FO45ZZbmra//PLL+Pjjj/HPf/4Tf/nLX2RVtpTt7W9lt+c7cEtEu4zQ5XLhxRdfRGpqKu6//35YLJamz/bu3YsHH3wQEyZMwNChQzF58mQ888wzKC0tbVbGhZc7nDhxAg8//DDGjRuHgQMHYtu2bW6/U1hYiN///vcYO3Ys0tLScM011zSd7bhYe+vQWStXroQgCJg9e3aH/i40NBROp9PttOTixYvhcDjwu9/9DgDczn7l5ORg69atGD58OMaMGeNWbk5OjiRHDa+44gqcPn0amzdv9vh5V/b79ddf44EHHsDUqVMxbNgwZGRk4MYbb8T//ve/Zr/XeL9ZY59ovNQyNTUVixYtwtSpUwEAq1atavbZ119/3awcMfulGHFdvK9jx47hvvvuw5gxYzBixAjMnz8fmzZtEuVvLnbs2DGkpqY2m4gvNnfuXAwZMqQpyfV0eVJnx6cgCPjkk08we/ZspKWl4ZJLLsFf/vIX1NbWut330poL93/y5Ek8+OCDGDt2LNLT03HHHXcgLy8PAFBRUYGnn34aEydORFpaGq699lps3brVY5mrV6/GggULMHLkSAwbNgxz587Fe++9B5vN1ur+OxJ/e/fR3v4tZZ3buixt3759ePjhh3HJJZdg6NChmDhxIu644w6sXr261TJai23JkiUd7p+tEbvvfv7557jiiivc+m579nuh9rQd0LG5sr3zYXv7TFfmw1dffRWpqak4fvw4zGYzBg4c2FSf//73v63+rVg6u1Z3RGZmJpKTk6FQKCTbh1S6c90B6ep/8uRJbNq0CXFxcViwYEGzzx544AEEBATgm2++6dQ9gN21bEDa/uKPZbf1HbglopzZslqtePTRR/HTTz9hwYIFeOqpp5oyvhUrVuCZZ56BVqvFlClTEBMTg4KCAnz11Vf45ZdfsHz5crdLzk6ePIkbbrgBycnJmDt3LiwWC4KCgpr9TlFREa6//nokJCTg//7v/1BdXY3Vq1fjvvvuw+LFi5GZmdn0u52pQ0dt2bIFKpUKw4cP79DfNV5OUldXh8DAQABAZWUlVqxYgTFjxmDixIkA4HZmq/ESQ09ntUwmE/Lz8yU5w5SRkQGgId5LLrlE1P0+99xz6N+/P0aPHo3IyEhUVVVh/fr1+NOf/tS0qAPAmDFjcP/992PVqlUoKirC/fff31TGmDFjcOutt+LTTz/FwIEDMW3atKbPBg0a1PT/UvXLrsR1ocLCQtx4440wGo2YN28eysrKsHr1atx111147bXXPH5R6MzfNOrXrx/Gjh2Lbdu24cSJE25HnLOzs5GXl4eZM2ciKiqqzZg7Mj6BhiNvS5YsQVRUFObNmweNRoNffvkF+/btg91uh0ajaXOfnvbfr18/XH311SgqKsLPP/+MW265BcuWLcOdd96JoKAgzJo1q6lud911F3788cdm/+6vv/463nvvPYSHh2POnDkICAjAxo0b8frrr2PTpk346KOPPD78pSPxd2Qf7enf3qhzS5YvX47nnnsOSqUSU6ZMQXJyMsrLy3HgwAEsWbKk1T7YWmwjRowQtX+2pqPt8NJLL+Gzzz5DZGQk5s2bB7VajXXr1mHv3r2w2WztfjhQR9quI3Nle+bDzvSZzsyHgwcPxtVXX41Vq1YhPT0dEyZMaPps7Nix7WqnrursWk3y1nggYeLEiW5nNIKCgpCRkYFNmzZh7969GDdunCzKlqPWvgO3SuigU6dOCUajUXjssccEQRCEyspK4cYbbxRSU1OF9957r9nvHj9+XBgyZIgwbdo0oaSkpNlnW7ZsEQYOHCjcd999bmUbjUbhtddea3X/RqNRWLRoUbPPNmzYIBiNRuHOO+/sdB08xdgWk8kkDBo0SJgzZ47Hz//9738LRqNROHXqlNtnd9xxh2A0GoUjR440bVu0aJFgNBqFDRs2CLW1tYLRaBRefPHFps9PnjwpDBo0SJgxY4bgdDrdytyxY4dgNBqFgoKCFuvcWp1aU1NTIxiNRuHaa6/t1H5b4+nvrFarcOuttwqDBw92+/e7+eabBaPR6PY3bf37SdEvxYrrwn397W9/a/Y3+/btEwYPHiyMGjVKqK2t7fTftNQ+a9as8ViGIAjCY489JhiNRmHTpk1u+72wnI6OT0E4329mzJghVFdXN2ujm266STAajcJll13mVidPLtz/22+/3eyzN998UzAajcLo0aOFp59+utnYWbVqlWA0GoWXXnqpaVt2drZgNBqFyZMnC2fOnGnabrfbhXvuuUcwGo3CO++80+L+2xN/V/bhqX97o84t7f/IkSPC4MGDhdGjRwt5eXludSsuLm6zjNZi62j/bI1YfXfXrl2C0WgUpk2bJlRWVjZtt1gswg033ODWd8VoO0Ho3JzS0nzY0T7T1flw6dKlgtFoFJYuXdqu31+8eLHw73//u93//fzzzy2W1dZaLYWtW7cKRqNReOSRR7y2T7F057oLgrj1/9vf/iYYjUbho48+8vj5888/LxiNRuGLL76QTdkXk7K/+EvZrX0Hbk2XLiMsKirC/PnzsX//fvz973/H3Xff3ezzJUuWwG6348knn3S7r2bcuHGYMmUKfv31V7dL5Hr37t3sbIUncXFxuPfee5ttu+SSSxAbG4t9+/Z1uQ4dUVpaCqfTicjIyA7/bUhICIDzD8CwWCz4/PPPMXjwYFxyySUIDAyEUqlsdknKJ598AqfTid/+9rcerxnNyclBcHAwEhISOhlRy4KDg6HT6VBcXCz6fhMTE922abVaLFiwAA6Ho8UnMnaUlP3Sk87EFRwc3HQJaaO0tDTMnTsXNTU1+Pnnn0X5mwtNmzYNkZGR+Prrr5tdOlRTU4M1a9YgMTER48ePb7WMRu0dn0DD5U0AcO+99zaNB6Chjf7whz+0a3+e9n/xfHT11VcDAGw2G/70pz81Gztz586FWq3GwYMHm7atXLmyqV4Xjm21Wo3HHnsMSqWyxcfAtjf+ruzDE2/UuSVLliyBw+HAfffdhwEDBrh9HhMT0+44PBGzf7amI+3QeCnewoULERYW1rRdp9N1qO92tO3EnCs722c6Ox/m5OQAQLuvgPj000/x5ptvtvu/tWvXtlhWV9ZqkrfG7wMtPdymcbuny4d7atly1Np34NZ0+jLCEydOYN68eaivr8cHH3zg8fTjnj17AADbt2/H/v373T4vLy+H0+lEfn4+hg4d2rR94MCBbV56MXDgQKhUKrftMTExTfvtSh06oqqqCgCafVFsr4s7+sqVK1FZWYlnnnkGAKBQKBAYGNj0eVVVFVauXInIyEhcddVVHsu87bbbcNttt3W4Lu0VGhqK8vJy0fd7+vRpfPDBB8jKykJxcXGz+/4AiHZ/nZT90pPOxDV48GCPl+SMGTMGq1atQm5ublPy0JW/uZBarcYNN9yAt956Cz/++CPmzp0LAPjf//4Hi8WCG264od3XN7d3fAJoSnBGjhzp9vsjRoyAWt3xaWrQoEFu+2+8vCw5OdmtnVQqFXr16tXs3yI3NxcAPF4+l5KSgpiYGBQWFqK2ttZtIWtv/F3ZhyfeqHNLGn+nQ5dWdICY/bM1HWmHxvb2dN/syJEjPZbjSUfbTsy5srN9prPzYW5uLjQajdsTdFvyyy+/dHgfLWnPWj1lyhQUFRW1u8y5c+fi1Vdf7WrVOq271fdC3bnuJF8tfQduTaeTrfz8fFRVVWHQoEEtHqFqnNgan5rXkotvzOvdu3eb+29pslSr1XC5XF2uQ0c0PtHIarV2+G9DQ0MBNCRbTqcT//nPf5CYmIiZM2c2/c6FTyz84osvYDabce+990r2ouBXXnkFeXl5LbaZ1WqFTqcTdZ+nTp3Cddddh5qaGowaNQoTJ05EUFAQVCoVioqKsGrVKo8393eGlP3yYp2Nq6V9NW73dCa2M39zsXnz5uHdd9/FsmXLmr7MLl++HBqNBtdee22bf9+oveMTOH+goVevXm6/r1Kpmp0xaC9PiUlj0tZS0qJWq+FwONzq1dJR8MjIyKYnhV5cZnvj78o+PPFGndvat5RPBxWrf7ZGrL6rVqvb/TjljrSd2HNlZ/tMZ+ZDh8OBvLw89OvXT7L1qzXtWasTEhI6VLeu3iPYVd2tvhfqTnVvPEDX0hmgxu2dea1Ddy1brjrzHbjTydZll12GlJQUvP766/jNb36D//znP24LS+M/8q5du9r1IIFGYj55pLN16IiIiAgA57/Ed8SFZ7Z++OEHFBYW4vnnn292RDQoKAh1dXWwWq344osvJH0/CADs378fo0aN8viZy+VCTU0N4uPjRd3n4sWLUVVVhZdffhnXXHNNs8++++67pkvNxODNftnZuM6ePdvqdk/17szfXCw6OhpTpkzBzz//jGPHjqG6uhp5eXmYPXt2Uz8XW2O9ysvL3V4w6nQ6UVVV5ZPH+zeOzbNnz3q8bKusrKzZ7/nDPrxR57b2XVpaKtlc64v+2ZrGmD31XYfDgcrKynZdPtmRthN7ruxsn+nMfHj06FFYrdYOPUTp448/7tAlToMGDWr2IJALtWet/uSTT9q9L3/Q3ep7oe5U9759+wJoONHgSUFBAQB06nUG3bVsOersd+AuPY3wnnvugU6nw8svv4xbb70Vixcvbna0a8SIEcjJycHOnTtx6aWXdmVXneaNOkRFRSEiIgInTpzo8N9eeGZr+fLliIyMdFtAg4KCUFZWhlWrVqG8vBy//e1vJfmyZLPZkJGRAbvdjh07duCdd95Bv379mj12+MSJExAEodmTrMTQOOBnzJjh9tn27ds7VFZjoup0Oj1+7s1+2dm4cnNzUVdX5/bFq/FvPH1Z6czfeHLTTTfh559/xrJly5rOqM6bN69df9sZgwYNQm5uLnbt2uV2v9+ePXuanW3ypkGDBiEnJwfbtm1z+xJaUFCAkpISxMfHd+ry4a7so7X+7Y06t2TEiBE4cOAANm7c2Ol3SbU1dgHv98/WDB48GDk5Odi+fbtb3921a1ercVyoI23X0TmlrTb1Zp85dOgQgPbPRUDDPVsdudTs6quvbjHZ6spaTfLW+LTMTZs2weVyNbvnt66uDtnZ2TAYDJ16ymV3LVuOOvsduMvv2frNb36D5557DkeOHMHNN9/c7FrxBQsWQKPR4OWXX/Y4udlsNuzcubOrVWiVN+qgUCgwevRoVFZWNi2E7dWYNP3000/IycnBrbfe6nZavfEywsWLF0Oj0Uh2P5ZarcbSpUsBAF999RU2bdqEJUuWNPudxnsLxH5Mb1xcHAD3LwsbN27EihUrOlRWSEgIFApFizcwerNfdjau2tpavPXWW8227d+/H99++y2Cg4Mxffp0Uf7Gk3HjxiE5ORn//e9/sWbNGqSkpLTrsd+d1Xjv4TvvvNPsCLbNZsM///lPyfbblsbL0t555x1UVFQ0bXc6nXjllVfgcrlw3XXXeX0frfVvb9S5JfPnz4darcbbb7+No0ePun1eUlLSZhltjV3A+/2zNY33QL777rvNzpZYrVa8/vrr7S6nI23X0TmlrTb1Zp9pbKOOnPn85ZdfcPjw4Xb/97e//a3FsrqyVkvt8ccf9/j+s+6gO9cdaF/9ExMTMXHiRBQVFeGLL75o9tmiRYtgNptx5ZVXup3h7slld1Z3LRvo/HdgUd6zNX/+fOh0Ojz55JO4+eab8cknnyA2Nhb9+vXDSy+9hCeffBJz5szBJZdcguTkZDgcDpw+fRq7du1CeHg4fvjhBzGq4ZG36jBjxgz8+OOP2LRpE5KSktr9d41ntvbt24fg4GDcdNNNbr8THByM6upqVFdX49prr5XskiqlUomysjIEBgYiLS3N42UimzdvhkqlanpRplhuuukmfP3113jooYea3pVz5MgRbNy4EbNmzXJ7qWdrAgMDMXz4cOzcuROPPPIIUlJSmt5dM3DgQK/2y87GNXr0aKxYsQL79u1DRkZG0zuzXC4X/vKXv3j8stKZv/FEoVBg/vz5ePnllwFIf9ZgzJgxmDdvHpYtW4YrrrgCM2bMaHrPVnBwMKKionzygs2MjAzceeed+PDDDzFnzhzMnDkTBoMBGzduRF5eHkaOHInf/va3Xt9Ha/3bG3VuSf/+/fHss8/i2WefxVVXXYWpU6ciOTkZlZWVOHDgAAIDA/HZZ5+1WkZbYxfwfv9szciRI3HLLbfgs88+w5w5c3D55Zc3vWcrJCSk3U+960jbdXROaatNvdlnGl94/89//hN5eXkICAhA//79MWvWLFHKb4/OrtUdsXbt2qanIjZehrlnz56ml1mHh4fjsccea/Y3jfcDtvehKlLpznUHpK3/s88+ixtvvBEvvvgisrKy0K9fP+zduxfbtm1DcnIyfv/737v9TU8vW8r29reygc5/BxYl2QKAa665BlqtFo899lhTwtX4UsiBAwdi8eLF2LZtGzZt2oSAgABERUVh5syZXplkvVGHGTNmoFevXvjvf//r9pbu1lx4acb8+fM9fiFu3KZQKCT7otQoNzcXAwcO9Pjltra2FmvXrsWll16KPn36iLrfgQMH4tNPP8Ubb7yB9evXw+FwYODAgXjzzTcRHBzcoWQLAP7+97/j5ZdfxqZNm/D9999DEATExMQ0fWHzVr/sbFzx8fF4/vnn8eqrr2Lp0qWw2WwYPHgwfve737X4xLLO/E1Lrr76arzyyivQaDQtPvVSTM899xz69u2LpUuXYunSpQgLC8P06dPxhz/8AZMmTfJ4L4k3/PGPf8TgwYPx+eef47///S8cDgcSExPx8MMP44477hDlJv/O7KO1/u2NOrfkhhtuwIABA/Cf//wH27dvx7p16xAWFobU1FRcf/317SqjrbELeL9/tubJJ59EcnIyvvjiC7e++3//93/tLqe9bdeZOaWtNvVWnxk9ejSefvppfPbZZ/j8889hs9mwcOFCrydbnVmrO+LgwYNu986dOnUKp06dAtBwdvLiL3J5eXkIDAz02S0Xjbpz3QFp65+YmIiVK1fi3//+NzZu3IgNGzYgMjISt956K+6///6mg+dyKlvK9va3srv0Hbjjr/+ilrz77ruC0WgUcnJymm3v7AuEpdRSne6//37hhRde8Pg3n376qWA0GoUdO3Z4o4qy1NEXanf2b9rS+JK/Rx99VLQyO+PEiROC0WgUfv/73/u0HuRf/KV/UvfU0lrtK9XV1cLAgQOFV155xddV6bDuXHdBkLb+LLvnlC0IXfsO3OV7tui83/zmN4iNjcW///1vX1el0w4dOuTx/ScWiwXvvfceZs6c2eKTCqnn+PDDDwEAN998s1f2V1ZW5vZY7fr6evz1r38FgBZveCd58nb/pJ7F39bqnTt3Qq1W4/bbb/d1VTqsO9cdkLb+LLvnlN3V78CiXUZIgE6nw9///nds27YNZrPZ7YbD7sDpdOL48eMoLS2FwWBousyxqKgI8+bNa/WluNS9HT58GP/v//0/5OTkYMOGDbjsssu89oSiTz75BN9//z3GjBmDyMhInD17FllZWSgpKcGkSZO8epkR+Sdf9k/qWfxtrZ4yZQr279/v0zp0VneuOyBt/Vl2zym7q9+BmWyJbPTo0Rg9erSvq9FpDz/8MF599VUsXrwY8+bNw/PPPw+g4UEjDzzwgI9rR1LKycnB66+/jqCgIFx++eV49tlnvbbvCRMm4NChQ9i8eTOqqqqgVquRnJyMW265BbfddptPHpBB/sWX/ZN6nu6+VhOR93T1O7BCEARBxPqQB9u2bcP27dtx2223SfJ+m87wxzoREREREfUkTLaIiIiIiIgkwAdkEBERERERSYDJFhERERERkQTa/YCMqrFvSFgNIiIiIiLqLsK2PezrKnQLPLNFREREREQkASZbREREREREEmCyRUREREREJAEmW0RERERERBJgskVERERERCQBJltEREREREQSYLJFREREREQkASZbREREREREEmCyRUREREREJAEmW0RERERERBJgskVERERE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IQXaqUYo+4TAseMUlDHB0EwdAKHeDvOLP7u9JTvw2ZlQj4xH3b0r3DpcdyNW/IpgHQLfugbKUAPs209CndYH6rQ+7vtburvFp9z4itzbQKz4laEGBC+7Fc6DpXDlV8B11gRFuAHqkQlQxYXCVWmG+ek17XrrvLexDTgO2Ae4HooZv/2nw7Bd2g/aqUYEf7oA9k3HoQjVQzvNCCiVML+8tuEx4H5GzDZQhOpheHDS+Z/DGh55HvDk9KYyLJ/uaLp0zV9wHLAP9DQ+T7Zgd6Luga+hv20UNDNSoZufDsFkg339MVg+2ArXiQpf11BaIsWvCNJBGWoAAGjGJEIzJtHj79m+z/WrL1gA2AYixe+qscD21R6ohsRAnZkERYgesDvhKqqG5ZMdsC7JhlDpfkmFX2AbcBywD3A9FDl+89Nr4NxXDO3cIdBdPwKCzQHHniJY/rMdzv3FEgXRRSK2gSJAC+2cwW7btVec32b7Ptf/vmhzHLAP9DAKQRDadXyvtRv6iIiIiIhIPsK2PezrKnQLPr9ni4iIiIiIqCdiskVERERERCQBJltEREREREQSYLJFREREREQkASZbREREREREEmCyRUREREREJAEmW0RERERERBJgskVERERERCQBJltEREREREQSYLJFREREREQkASZbREREREREEmCyRUREREREJAEmW0RERERERBJgskVERERERCQBJltEREREREQSUPu6AtR9KJ+b6usq+JzruXW+rgIRERERdRM8s0VERERERCQBJltEREREREQSYLJFREREREQkASZbREREREREEmCyRUREREREJAEmW0RERERERBJgskVERERERCQBJltEREREREQSYLJFREREREQkASZbREREREREEmCyRUREREREJAEmW0RERERERBJQ+7oCAACdCvpbR0Mz3QhlTAgEkw2O7EJYPsiCK7+y3cXo78yE/q7MFj+ve2gVHFsLxKixuESKHwCgVEB3wwho5wyGMiEcgtUBZ04xLP/ZDuf+YmnqLwKLzYpP1v0XP2VvRkllGQL1BozsPwR3Xz4PKTHxHSrL6XJi2YbV+Hbbrzh1tgQ6jRZDkwbgjhnXYnjKQIki6CKR+oBmUj9oZqRCNaA3FBEBUGjVcJXVwnnwDKxf7ILz0BkJg+giuc8DAPsB50KOA7nHD4g7Di6gCNUj+MtboOwdCMfe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B3KPHxB9HHRLcm8Dua8FPZBCEIR2Hdtp7YY+kgflc1N9XQWfcz23ztdVICIiIvK5sG0P+7oK3YLP79kiIiIiIiLqiZhsERERERERSYDJFhERERERkQSYbBEREREREUmAyRYREREREZEEmGwRERERERFJgMkWERERERGRBJhsERERERERSYDJFhERERERkQSYbBEREREREUmAyRYREREREZEEmGwRERERERFJgMkWERERERGRBJhsERERERERSYDJFhERERERkQTUvq4AdR+u59b5ugpERERERN0Gz2wRERERERFJgMkWERERERGRBJhsERERERERSYDJFhERERERkQSYbBEREREREUmAyRYREREREZEEmGwRERERERFJgMkWERERERGRBJhsERERERERSYDJFhERERERkQSYbBEREREREUmAyRYREREREZEE1L6uAABAp4L+1tHQTDdCGRMCwWSDI7sQlg+y4Mqv7HSxilA9gr+8BcregXDsLULd3V+JWGkRyT1+QNw2UCqgu2EEtHMGQ5kQDsHqgDOnGJb/bIdzf7E09e8qkeJXJodDOz0VKmMkVMZIKGNCAABV4/8FOAWpai8OtoFobaCZ1A+aGalQDegNRUQAFFo1XGW1cB48A+sXu+A8dEbCILpA7vEDorWB/s5M6O/KbPHzuodWwbG1QIwai4vrIedCgHMBx0GP4vtkS6NC0KJroB4eB0duCazL9kAZHQTN1AHQTEhB3e9WwplT0qmiDU9MhcKgEbnCIpN7/IDobRDw4ixopxrhzK+AdcUeKEL00E4zIujd62F64js4NhyXMJhOEDF+TWYy9HdmQnC44DpVBcHigELv+2HeJraBqG2gntwXqsHRcOaWwnW2DrC7oEwIhWZyP2imGVH/8lrYvsmROKAOknv8gCTrge27XLiKa9y2uwqrRKq0iLgeci4EOBdwHPQ4Ph91upsyoB4eB9u6PJifXA2cO9iiXpuHoH9ciYCnpqP2ps+atreXZtYgaC8bAPMrvyDgsSniV1wkco8fELcNNDNSoZ1qhGPvadTdvxKwOQEAtq/3I+j96xHwxDTU7FwMmO0SRtQxYsZv35IPx/5iOI+WAVYnQlbdAUVsiLQBiIBtIG4b1L/yS1Pfv5CyXy8EL54Pw4OTYFt9EHC4RI6i8+QePyDNemD7PheO7EJpKiwyroecCwHO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jPgPl1Zj+e58DI+LwPiUKIToNbA6XThdZcaXO49jWXY+zngYaP5CrD4QHxaAK869P6JRRKCu2TZ//ZLFcSDGOKjB2kPFGBgdCmNUCAK1aphtDhw7W4t1ecX4796TcPjx05fEaIOYEANUSgUAYG5agsffKa42+2WyxXmA64Hc4wc4FwJsA7mvBT2dT85sERERERFR98UzW+3jf89BJSIiIiIi6gGYbBEREREREUmAyRYREREREZEEmGwRERERERFJgMkWERERERGRBJhsERERERERSYDJFhERERERkQSYbBEREREREUmAyRYREREREZEEmGwRERERERFJgMkWERERERGRBJhsERERERERSYDJFhERERERkQSYbBEREREREUmAyRYREREREZEEmGwRERERERFJgMkWERERERGRBJhsERERERERSYDJFhERERERkQSYbBEREREREUmAyRYREREREZEEmGwRERERERFJgMkWERERERGRBJhsERERERERSYDJFhERERERkQSYbBEREREREUmAyRYREREREZEEmGwRERERERFJQO2rHUcG6XH3hAEYmxyJUL0G5SYrNhwtxUdZR1BrdbSrjAWjUpCR0AspvYIQatBCEASU1FiwveAsluw6gbI6i8RRdJ4Y8V9sRFw43rwhEyqlAou3HsX7m/NErrW42AZsAzHiH53UG5nJvWGMDMGAqBCEGrTYW1SBhUu3Slx7cYjVB0L0GtyR2R+T+kejV6AO1RY7tuWX4f3NR2QxF3bX+IGut4FercKk/tGY0DcKqdEhiArWwyUAJytM+PnQaXy1Ox8Ol+CFSDqHfYBrAcA24HrYc/kk2YoLDcD788chIlCH9UdLUFBhwuCYUMwbmYLMlEjcvSQLNRZ7m+VcNSwRZrsTuwsrUGG2Qq1UwhgVgvmjUjA3LR6/W74NeWdqvBBRx4gV/4UCNCo8PWs4LA4nArU+y6HbjW3ANhAr/mtHJGJy/xhY7U4UVpkRatB6ofbiEKsNQvQavD9/HJIigrCz4Cx+PlyMpIhAzBmagPEpUbhryRacrq73QkQdI/f4AXHaYER8OJ6/YgSq623Ydaoc64+WIkSnwcR+UXjw0kG4dEA0HvhqO2xOl5eiaj/2Aa4FANuA62HP5pPe9+i0IYgI1OG1X3KwYndB0/YHJw/C/FEpWDgxFX9fe6DNchZ8stHj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EREREZEEmGwRERERERFJgMkWERERERGRBJhsERERERERSYDJFhERERERkQSYbBEREREREUmAyRYREREREZEEmGwRERERERFJgMkWERERERGRBJhsERERERERSYDJFhERERERkQSYbBEREREREUmAyRYREREREZEEmGwRERERERFJgMkWERERERGRBJhsERERERERSYDJFhERERERkQSYbBEREREREUmAyRYREREREZEEmGwRERERERFJgMkWERERERGRBJhsERERERERSYDJFhERERERkQSYbBEREREREUmAyRYREREREZEEmGwRERERERFJgMkWERERERGRBNS+2nFkkB53TxiAscmRCNVrUG6yYsPRUnyUdQS1Vke7ylgwKgUZCb2Q0isIoQYtBEFASY0F2wvOYsmuEyirs0gcReeJEf/FRsSF480bMqFSKrB461G8vzlP5FqLS4w2GJ3UG5nJvWGMDMGAqBCEGrTYW1SBhUu3Slz7rhMj/rduGIuMhF4tfj75jR9gc7rEqrLo2AacC+Q+DwBcD+UeP8A2ALgecC7suXySbMWFBuD9+eMQEajD+qMlKKgwYXBMKOaNTEFmSiTuXpKFGou9zXKuGpYIs92J3YUVqDBboVYqYYwKwfxRKZibFo/fLd+GvDM1XoioY8SK/0IBGhWenjUcFocTgVqf5dDtJlYbXDsiEZP7x8Bqd6KwyoxQg9YLte86sfvAh1uOeNzudAliVVl0bAPOBXKfBwCuh3KPH2AbAFwPOBf2bD5ZiR+dNgQRgTq89ksOVuwuaNr+4ORBmD8qBQsnpuLvaw+0Wc6CTzZ6PEJxZVoCnpiRhnsmGPHIqp2i1l0MYsV/od9PGYwgrRqfbTuGhZekil1l0YnVBp9vP473NuWhoKIOUcEGrLrrMimrLRqx+8BHWZ4XFn/GNuBcIPd5AOB6KPf4AbYBwPWAc2HP5vV7tuJCA5CZHInT1WasvKBDAcCHW/Jgtjlw+eBY6NWqNstq6VTwusPFAICE8MCuV1hkYsbf6JJ+UZgzNAGv/5qLMpN/XyYAiNsGB4qrcKK8Dn56sMojKfpAd8M24Fwg93kA4Hoo9/gBtgHA9YBzYc/n9WQrIzECALA9/ywu7gtmuxP7TlfCoFFjaGxYp/cxsV8UAOBoWW2ny5CK2PGHG7R4fEYa1h8pwY8HT4tbWYl4ow/4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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# | hide\n", - "\n", - "monotonicity_indicator = (\n", - " [-1] * (input_len // 3)\n", - " + [0] * (input_len - 2 * (input_len // 3))\n", - " + [1] * (input_len // 3)\n", - ")\n", - "\n", - "with replace_kernel_using_monotonicity_indicator(\n", - " layer,\n", - " get_monotonicity_indicator(\n", - " monotonicity_indicator, input_shape=input_shape, units=units\n", - " ),\n", - "):\n", - " wt = \"$(|W^T|_t)^T$\"\n", - " title = f\"kernel {wt} after applying monotonicity indicator $t={tuple(monotonicity_indicator)}$\"\n", - " display_kernel(layer.kernel, title=title)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Below is an example of a kernel $W\\in \\mathbb{R}^{9 Γ— 12}$ with 12 units and 9 inputs before and after applying the monotonicity indicator $t =(-1, -1, -1, 0, 0, 0, 1, 1, 1)$:\n", - "\n", - "![original kernel](images/kernel__W__in__mathbb_R___9_x_12__.png)\n", - "![replaced kernel](images/kernel__(|W_T|_t)_T__after_applying_monotonicity_indicator__t=(-1,_-1,_-1,_0,_0,_0,_1,_1,_1)_.png)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Monotonic Dense Layer" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Monotonic Dense Unit (`MonoDense` class) uses weight constrains and activation functions constructed as explained above to construct partially monotonic neural networks. The below is the figure from the paper for reference.\n", - "\n", - "In the constructor of `MonoDense` class:\n", - "\n", - "- the parameter `monotonicity_indicator` corresponds to **t** in the figure below, and\n", - "\n", - "- parameters `is_convex`, `is_concave` and `activation_weights` are used to calculate the activation selector **s** as follows:\n", - "\n", - " - if `is_convex` or `is_concave` is **True**, then the activation selector **s** will be (`units`, 0, 0) and (0, `units`, 0), respecively.\n", - "\n", - " - if both `is_convex` or `is_concave` is **False**, then the `activation_weights` represent ratios between $\\breve{s}$, $\\hat{s}$ and $\\tilde{s}$, respecively. E.g. if `activation_weights = (2, 2, 1)` and `units = 10`, then\n", - " \n", - "$$\n", - "(\\breve{s}, \\hat{s}, \\tilde{s}) = (4, 4, 2)\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "![mono-dense-layer-diagram.png](images/mono-dense-layer-diagram.png)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Saved figure to: images/input__x__in__mathbb_R___9_x_12___with_batch_size_9_and_12_inputs.pdf\n", - "Saved figure to: images/input__x__in__mathbb_R___9_x_12___with_batch_size_9_and_12_inputs.png\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxoAAAGxCAYAAADlBMBWAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAACz00lEQVR4nOzdd3hUVf748ff0SS+QkJCEJEASCDX0JigoroB9LeiqX/1ZcF27W/zq6rrquutXt7nrWteyriIW1oK4CirSu7QgoQYSEgjpmcn0+f0xJBIykHamhHxez+PzyL2TM+ecOffc+7n3nHM1Xq/XixBCCCGEEEIopA11BoQQQgghhBBnHgk0hBBCCCGEEMpJoCGEEEIIIYRQTgINIYQQQgghhHISaAghhBBCCCGUk0BDCCGEEEIIoZwEGkIIIYQQQgjlJNAQQgghhBBCKCeBhhBCCCGEEEI5CTSEEEIIIYQQykmgIYQQQgghhFBOAo0eoKGhgSeffJJzzjmH4cOHc/XVV7N169Yupbl+/XrmzZvHWWedRV5eHh9++GGrz7z44otcfvnljBo1igkTJjBv3jyKioq69L1CCCGEEKJ7kECjB3j44YdZsWIFv//97/nkk0+YPHkyN954I0eOHGnxuU2bNuFwOFr9/aFDhygpKWmxzWq1kpuby0MPPYTZbPb7vevWreOaa65h/vz5vPHGG+h0Om688UZqamqUlU0IIYQQQoSnDgcaJSUl5OXl8atf/SoQ+RGK2Ww2vvjiC+6//37Gjx9PZmYmd955J5mZmbz99tvNn/N6vTzxxBPcddddOJ3O5u2lpaXccMMNLT4LMG3aNO677z5+9KMfodX6b0avvvoql19+Obm5ueTl5fH0009TVVXFpk2bAlPYk3Smraps393tWAlVfrtbPXUX06dPZ/r06aHORrtIGxBCiDPTGf1EI1xOXqWlpfzpT3/ikksuYfTo0eTl5fn977rrrlP+3S6XC7fbjclkarHdZDK1uODXaDS89NJLHDhwgHvvvReXy0V5eTk33HADI0eO5P777+9yXiwWCx6Ph9jY2C6n1RXh0i5UOJPKEg68Xi8LFizgiiuuoKCggJEjR3LZZZfxzjvv4PF4Qp29gPr88895/PHHueaaaxg1ahR5eXk88MADp/x8dXU17733HnfccQfnnXcew4cPZ/To0cydO5f33nvvjK4vOe6EEKJ99B39gz59+vDZZ58RExMTiPyccV5//XWeeeYZnE4nw4cPZ+bMmURHR/v9bGZmZpvprVixgkceeYS4uDgOHTpEv379mvc5nU60Wi233XYbs2bNAiA6OpqCggL+8Y9/kJubS+/evfn000/57rvvWvwtQO/evXnjjTe47rrruOeee9i9ezeDBw/m6aefRqfTdaEWfJ588kkGDx5MQUFBl9NqD2mr3UM4/U4PPPAAn376Kb169WL27NmYzWZWrVrFb37zGzZv3szTTz8d6iwGzD/+8Q++//57IiMjSUlJYd++faf9/Oeff85vfvMbkpKSGD9+PH379uXYsWN8+eWXPPzwwyxfvpy//OUvaDSaNr87nNqAEEIIdTocaBgMBgYMGBCIvJxx/vSnP/HCCy9QUFDAE088wcCBA7uc5sqVK3nmmWfQ6/V8/vnn/OIXv2ix/6677mLVqlX07t2bcePGAfD000/zv//7v0ydOhWdTkd+fj6zZ89mx44drdLv06cPf/zjH7n88stJSkpq/q6ueuqpp9i4cSPvvPOOkqClPaStdg/h8jt9+eWXfPrpp6Snp/Pee++RmJgIgMPh4K677uKjjz7i3HPPZebMmSHOaWA8+OCDpKSkkJmZybp167j++utP+/msrCz+8Y9/cPbZZ7cYPnnfffdxxRVX8N///pcvvviC888/v83vDpc2IIQQQi0lczRO3FZSUsK9997L+PHjGTZsGJdddhlff/31adPZu3cvP/3pTxk3bhwjR45k7ty5rFixosXn165dS15eHs8995zffJ08Hvm5555jxowZACxcuLDFECV/KySd7KabbiIvL4///ve/LbZ7vV5+9atfkZeXxzPPPHPKv1+7di0vvvgikydP5q233lISZABs27aN4cOHs3LlSiZPntxin8PhwOv1ctttt/HRRx81b+/Xrx9vvfUWmzdv5ptvvuH999/H5XKRkZHRKv2qqioefPBBpkyZgsFg4NFHH+3yEIjf/e53LFq0iDfeeMPvd/pjsVgYOnQoV199dYvtNpuNYcOGkZeXx3/+858W+95++23y8vJ4//33Af9ttSPtor1tuT3a08abfPjhh9x5553MmDGD4cOHM2rUKK6++uoWv2lHy7J161buuecezjrrLIYOHcqUKVO46aab+Oyzz/zmQUXZly5dyg033MCUKVOav/MnP/kJ//73v1t918m/0/Tp0085xPBUQ1a2bNnCXXfdxeTJkxk6dCjTpk3jkUceabXowal8+eWXgO/YbwoyAIxGI3fffTcAb731VrvL397f0V89tLf+vV4vb731FrNnz2bYsGGcddZZ/Pa3v6W+vr7d+WwyYcIEsrKy2vUEAmDixIlMnz691RytpKSk5uN23bp17UrrVEOROlonHT2vQODOLe1t/0IIcSbr+q3qE5SWlnLFFVeQkZHBxRdfTG1tLZ999hk//elPee2115gwYUKrvykpKeHqq68mNzeXq666ioqKCj777DNuueUWnn322eYhQB01btw4rr/+et58800GDRrEueee27xv8ODBbf79L37xCy699FL+8pe/cO655zbfhf/DH/7AwoULueqqq047fvmVV14hIiKCp59+WskTAYDKykri4+PR6/Vs2LCBm266qcX+TZs2MWLECHr16kVFRUWrv4+MjCQyMpLa2lpWrFjBz3/+8xb7a2pquOmmm0hOTuYf//gHR44c4Sc/+QmPPPIIjz/+eLsvQE70xBNPsHjxYt58880O3bGMiopi2LBhbN26lYaGhubhZieujLVmzRouueSS5r9Zs2YN4LsAOpX2tovOtOVT6Wgb/81vfsPAgQMZO3YsSUlJ1NTUsGzZMn7xi1+wf/9+7rnnng6VZcGCBfzmN79Bq9Uyffp0srKyqKysZPv27bzzzjutvl9F2d99910eeeQRkpKSOOecc0hISKCyspJdu3bx4Ycfcu21157276+//nq/F8tff/01O3bsaLXS2fvvv88jjzyC0Whk+vTppKSkUFxczHvvvcdXX33FggUL6Nu372m/89ixYwCkp6e32tcUIG/cuBGHw4HRaDxtWtD+3/FkHan/J598kn/9618kJSVx1VVXodfrWbp0KVu2bGl3PgOhqc9T9fSyo20yUOcVaN9x19X2L4QQZwxvBx06dMibm5vr/eUvf9lqW25urve5555r8flvv/3Wm5ub67355pv9ppObm+v9/e9/32Lf1q1bvfn5+d4xY8Z46+vrvV6v17tmzRpvbm6u969//avffJ1zzjnec845p828dsQvf/lLb25urveDDz7wer1e7z/+8Q9vbm6u9+677/a63e5T/l19fb130KBB3ocffrhT33sqH3/8sfett97yNjQ0eG+55ZZW+5999lnv9u3bvRs3bvQ+/vjjzdu//fZb7zfffOM9ePCgd8WKFd6LLrrIe8UVV3gdDkfzZzwej/fKK6/03nDDDV6bzda8ff/+/d7Jkyd7//jHP7b4roaGBm9hYaG3sLDQO3z4cO9zzz3nLSws9JaWljZ/5je/+Y23oKDAu2rVKu/Ro0eb/2toaGhXef/85z97c3NzvV9//XXztmeeecY7ePBg7/XXX++dOnVq83a32+0dN26cd8aMGc3bTvX7n65ddKYtn0pH23iT4uLiVmnZ7Xbv9ddf783Pz/eWl5e3qyxer9e7e/dub35+vnfs2LHeoqKiVvvLysr85rerZb/00ku9Q4YM8R47dqzVvsrKyhb/bu9xumLFCm9+fr73vPPOa5HGvn37vEOGDPGee+65LerG6/V6V61a5R00aJD3pz/9aZt5vu+++7y5ubnet956q9W+wsLC5rrZs2dPm2l5vR37Hb3ejtf/xo0bvbm5ud5zzz3XW11d3bzdZrN5r7zySm9ubm6rPrG9mvrb+++/v8N/63Q6vXPmzPHm5uZ6v/3223b9TVvHanvrpDPHXCDOLR1p/0IIcSZT+kQjLS2N22+/vcW2s846i759+57yBXExMTHccccdLbYNGzaMCy+8kIULF/Lll19y6aWXqsxmu91999189tln/O1vf8NqtfKnP/2JKVOm8PTTT59ySVfw3U3zeDwcPHiQJ598st3fl5mZyU9+8pNT7l+1ahW33XYb69atY+zYsa3279ixg5/97Gfcfvvt3Hfffc3b6+vr+eMf/0h5eTnx8fHMnDmTe++9F4PB0PwZjUbD3XffTUFBQYsVqrKysnjzzTdbPc3Yvn17izHczz33HM899xyXXnopv//97wGal8T9n//5nxZ/+7Of/Yw777yzzfqYOHEizz//PKtXr+bss88GYPXq1QwZMoSZM2fy29/+lv3795Odnc3OnTupqalRNn6+M235VDraxk+epA++4TvXXnsta9asYfXq1S2e5JzOO++8g8vl4qc//Sk5OTmt9qekpLTapqrser3e79O8E4cltVdRURF33XUX0dHRvPTSSy3SeOedd3A6nTz00EP06dOnxd81De/5+uuvWzwZ82fatGl8+umnvP7668yePZv4+HjAt8jCX//61+bP1dXVtSvPnf0d21v/TcN05s2b15xX8K0od99997U5xyJQnn32WYqKipg2bRpnnXWWkjQ72ibD4byisv0LIUR3pTTQGDRokN9H5SkpKXz33Xd+/yY/P9/vyX/cuHEsXLiQwsLCkAUaqamp3HDDDbz00ks8/vjjFBQU8Le//a3dwxHWrFnTPJynPcaNG3faQKO4uJisrCzeeuutFnXidrs5ePAgR48e5fbbb2f27NkMGTKkef+sWbPaNVRg0qRJfrf379+/1bbx48eza9eu06bX1v62jBw5ErPZzOrVqwFfwFRYWMjNN9/cPFRi9erVZGdnN9dzR4Y0nU5n2vKpdLSNHz58mJdffpnVq1dTVlaGzWZr8XftnXMANOe1Ixd8Ksp+4YUX8vvf/57Zs2cza9Ysxo0bx6hRozp1kXX06FFuu+02HA4HL774IllZWS32N+Vp3bp1bNu2rdXfV1ZW4na7OXDgAEOHDj3l98yePZuPPvqIFStWMHv2bGbMmIHRaGT16tVUVFTQt29fDh8+fNqbDCfq7O/Y3vovLCwEaF704USjR48O2qILJ3rzzTf55z//Sf/+/ZWu0NXRNhnq84rK9i+EEN2Z0kDjVO9H0Ov1p5xQ3Lt379Nub2hoUJO5TjrxxPDkk08SERHR5t+kp6ej0Wi49dZbWzxZ6Iq9e/c2z3HYtGkTW7dupa6ujoaGBlJTU9m7dy833XQTF154YbuWye0OjEYjo0ePZtWqVc0v+nO73UycOJEBAwaQlJTEmjVruOaaa1i9ejUajUZZoNGZtnwqHWnjhw4d4sc//jF1dXWMGTOGKVOmEB0djU6no7S0lIULF/p9e/upNM1zOPlO/+moKPuNN95IQkICb7/9Nv/6179444030Gg0jB07ll/84hcMGzasXelYrVbmzZtHWVkZzzzzDGPGjGn1maY3zb/66qttpnU6Op2OF154gddee41PPvmEhQsXYjKZGDduHH/961+bJ4S352KxK79je+u/6bft1auX388mJCS0mU+V3nrrLZ588kkGDhzI66+/3uIpS1d1tE2G+ryiqv0LIUR3pzTQ6IymCZin2t50V6rpLqLL5fL7+bq6OuUvgvvkk0/4wx/+QFJSEhUVFbz55ps89thjbf5ddHQ0kydP5oMPPmDevHlERkZ2OS8rV65k0qRJlJWVkZmZyZ/+9Cfq6+u59dZbefvtt3n66acpKCg4Y4KMJhMmTGDlypWsXr2azZs3YzKZGDVqVPO+5cuX43A42LhxIzk5OX4vukKtvW0c4LXXXqOmpoannnqKyy67rMXnP/30UxYuXNih7256L8GRI0dOO2woEC655BIuueQS6urq2Lx5M19++SUffPABN998M4sXL27zgt3tdnPfffexY8cO7r33XubMmeP3c03l2rhxY5fLaDAYuPXWW7n11ltbbLfb7Rw4cICEhIR2rZym+nf0p+m3raysbNXHuFwuqqur/Q6NC4TXX3+dp556itzcXF5//fWQH4cdOeYCdW7pavsXQogzQcjfDF5YWOj37lLTsoj5+fnAD3e0ysvLW322uLjY7wo1TY/a3W53h/O1bNkyHnzwQXJycvj444/Jzs7m/fffb/MlVk1uvvlmKisr+fWvf43X6+3w959szZo1TJw4kRUrVjQPcYqJiWHcuHEsXbqUW265hZdffrnL3xNuThwitWbNmhZzSCZOnEhNTQ1vv/02Vqu13U8zutIuOqO9bRx8bRnwO9fE31KhbZVl5MiRACxfvrxjmVYoNjaWadOm8cQTT3DppZdSU1PD+vXr2/y73/3ud3z99ddcfvnlzJs375Sfayrjhg0bVGW5lUWLFuF0Ok8Z7Jyso79jZzS1G3/pbdy4MWjt+6WXXuKpp55i8ODBvPHGGyEPMqBjx1ygzy2dbf9CCHEmCHmgUV9fz9///vcW27Zt28Ynn3xCTEwM5513HuCbJxAdHc3SpUuprKxs/qzNZuOJJ57wm3ZsbCwajYaysrIO5WnDhg3cdddd9OnTh1dffZXExETuueceXC7Xad+dcaKJEydy66238umnn3LzzTc3X3h0htPpxGKxEB8fz6pVq1q8P+OGG27gjTfeIDExkREjRvDVV191+nvC0ZAhQ4iJiWHp0qXs3r27xdK1TYHFSy+91OLfbelsu+is9rZx8E16hdYXj8uXL29+P8iJ2irL3Llz0ev1PP/88+zZs6fVfn8XVyqsWbPGb4BdVVUF0Gp52pO9/vrrvPXWW0yaNKnNp4jXXnstBoOBp556iv3797fa73A42h2E+Ls43blzJ08//TRxcXHccsst7Uqno79jZzTNMXjhhReah4+B7+nLH//4RyXf0Za///3vPPvsswwZMoTXX389bO7Sd+SYC8S5pavtXwghzhQhHzo1duxY3n//fbZu3cqoUaOa1zv3eDz89re/bX7EbTAYuP7663n++ee55JJLOO+883C5XKxatYrk5GSSk5NbpR0VFcWIESPYsGED999/P9nZ2c3vEhg0aJDf/OzcuZN58+YRExPDa6+91pzuj370I4YOHcrSpUvZsGGD37HiJ7v33nuJi4vjT3/6E+effz7Dhw9nwIABpxzecapVp7Zs2cLIkSPxeDyUl5e3eB9AYmIigwYNYsWKFdx000387Gc/45xzzunUOy/CkU6na35qAy3fkZGWlka/fv04ePBg8+fa43TtIhDDi9rbxgGuueYaPvzwQ+6++27OP/98kpOT2b17N8uXL+eCCy5o9YK9ttr4wIEDefTRR3n00Ue55JJLmDFjBllZWVRXV7N9+3aioqL417/+pbzMP/vZz4iMjGTkyJGkpaXh9XrZsGED27ZtY8iQIadceACgoqKCP/zhD2g0GnJycnjhhRdafWbw4MHN7y8YMGAATz75JA899BBz5szhrLPOIisrC5fLxeHDh9m4cSMJCQl8/vnnbeb7xhtvxGw2k5OTQ1RUFHv37mXZsmWYTCZeeOGFds916ejv2BmjR4/muuuu41//+hdz5szhRz/6UfN7NGJjY0lKSupQekuWLGHJkiUAze/h+e6775pfopeQkMAvf/nL5s8vXLiQv/71r+h0OsaMGeO3HaWlpbUaOhYMHTnmAnFu6Ur7F0KIM0nIA4309HQee+wxnnnmGebPn4/D4SA/P5877rij1Uo5d911FxERESxYsIAFCxbQu3dvZs2axZ133sns2bP9pv/000/z1FNPsWLFChYtWoTX6yUlJcVvoFFcXMzNN9+MRqPhlVdeabU85f3338+NN97I008/zYIFC9osm0aj4f/9v//HzJkzeffdd/n222/54osvTjkR8VSrTq1cuZLPPvuM5cuXN89PONH/+3//j7lz55KUlMT+/fv5/PPPueCCC9rMX3cxceJEli5dSnR0dKtVgyZOnMjBgwebn3y016naRXuDlY7oSBsfNGgQb775Jn/+859ZtmwZLpeLQYMG8be//Y2YmBi/F6httfErr7ySnJwc/vnPf7Ju3TqWLl1KfHw8eXl5XHHFFcrLC75jZcWKFezYsaP5Qr1v37488MADzJ07t8XSyiez2+3NE3zfeOMNv5+59NJLW7wo7eKLL2bQoEG89tprrF27lhUrVhAZGUlycjLnn39+u4+H888/n88++4yPP/4Y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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Saved figure to: images/kernel__(|W_T|_t)_T__in__mathbb_R___12_x_18___after_applying__t=[1,_1,_1,_1,_0,_0,_0,_0,_-1,_-1,_-1,_-1]__in__mathbb_R___12__.pdf\n", - "Saved figure to: images/kernel__(|W_T|_t)_T__in__mathbb_R___12_x_18___after_applying__t=[1,_1,_1,_1,_0,_0,_0,_0,_-1,_-1,_-1,_-1]__in__mathbb_R___12__.png\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA2oAAAGwCAYAAADYEZZrAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAC3eklEQVR4nOzdd3xUVf7/8de0ZNILpEASkkhIABOagKEICgqK4NeuqLuurmJZbOsW/drWba6ube2L69e6otjW7qroD6WFqnQCQkIakEISMpPMZMrvjxQzySSZTO4k9zqf5+PB47HOJGfeOfu5594z995zdW63240QQgghhBBCCNXQD3YAIYQQQgghhBCeZKImhBBCCCGEECojEzUhhBBCCCGEUBmZqAkhhBBCCCGEyshETQghhBBCCCFURiZqQgghhBBCCKEyMlETQgghhBBCCJWRiZoQQgghhBBCqIxM1IQQQgghhBBCZWSiJoQQQgghhBAqIxM1IYQQQgghhFAZmaj9hKxevZqcnJwe//3nP//5yXyu0jZu3Mj111/PKaecQk5ODu+++26Xn/nnP//JBRdcwKRJk8jPz+f666+nsLAw4J/rdDp5/PHHmTNnDnl5ecyZM4fHHnsMh8PRr88WQgghhBB9M1DHjEalAovBN3nyZFavXt3+3xdddBFnnXUWV199dftrMTExP5nPVZrVaiU7O5tzzz2X3//+915/ZsOGDVx22WXk5eXhdrt54oknuOqqq/j444+JjY1t/7ktW7aQm5tLSEiIx++XlJSg0+lITU3t0+c+//zzvP766/ztb38jOzubvXv3cscddxASEsKvfvWr/v/xQgghhBDCJ0oeM/bI3UclJSXu7Oxs9+9///u+/qpm9Odv/N3vfufOz893WyyW9teeeOIJd3Z2trukpETJmD2qr6935+TkuD///HOv7/c10/bt293Z2dnuFStW9OtztWLChAnud955p9efa2hocI8ePdq9cuXK9tdcLpf7vPPOc1933XVuu93e/nppaan7tNNOcz/44IN9/twlS5a4f/e733m89rvf/c69ZMkSX/4cv7388svus846y52Xl+fOzs52v/jiiwH9vJ8CpcbIYBhr+2r9+vXu7Ozs9n/z588f7EhCCCH8UF1d7TGeZ2dnD3Ykv/XnmLE3ckZNQdu2beP999/n97//PeHh4b3+vMVi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p6ens3r1ag4ePOh1MSxpu29tCxHMAnXM6M/xIih3zNibfk3UysrKuOaaaygpKeGhhx7inHPO8Xh/+fLlNDc3c9ddd3U5UJo2bRpz5szh66+/pqGhweMAZ+jQoR4HIN6kpKRwww03eLx2yimnMHz4cLZt29bvDH1x5MgRnE4nCQkJff7dtoOmtgOZpqYmXnvtNcaOHcspp5yC2+1Gr9d7HOi8/PLLOJ1OfvnLX3q9T2znzp1ERUX1+fSqL6KioggNDaWioqLfn1taWorL5eLQoUP85S9/8TlDeno6V1xxRY8/s3btWq677jo2bNjAlClTvGZdunQpN9xwQ/vEYMeOHR7XVD/55JM8+eSTHqsbvv766wD84he/8Ghv6dKl7ZMWnU7HLbfcwsSJEz02+IyMDF555ZUulwX48rl33303//jHP9rvfUhISODiiy/u0zPUOk9mAEJCQrj88stZv34969at69PErzuB3O698efvioqK6tJ3eXl5LFq0iPfee48vvvii/cxRf36no9NPP52EhATeffddbrvttvZn7NXX1/Ppp58yYsQIpk+f7tPf7Ov4By2XqALccMMNHitNhYSE8Otf/5rLLrvMp89ss3PnTgCfz5y/8sorfbpJ/LzzzpOJmka0XQnS3YI3ba/3ZaIubQshvAnUMaM/x4ug3DFjb/yeqB08eJBLLrmExsZGnn/+ea/fDH333XdAy7e/27dv7/J+dXU1TqeToqIicnNz218fPXp0lwcFdzZ69GivN+MlJye3f25/MvRFbW0tQJ+W22zTedB+5513OHbsGPfeey/QctAfERHR/n5tbS3vvPMOCQkJ3R5UX3nllVx55ZV9zuKrmJgYqqurFfvc9evXe71cqztTp07tdaJWXFxMRkYGr732msfBs9Pp5NChQxw9epQbbriBs88+u/0M4Mknn8zevXt7bLe399t0d8B9wgkndHnNl8+NjIzkrrvu4q677vLp870pLy/n+eefZ926dVRUVHjcRwoodr9mILd7b/z5u8aOHev1i5mpU6fy3nvvsWvXri6TLn9+pyOj0cjFF1/M008/zX//+9/2Ze3ff/99mpqauPjii32+tt/X8Q9aznRDyyMeOpswYUKfLx/ZtWsXJpOpy0qz3fH26BEhhDLmzJnTpy9C1LbUu5bzazk7aDe/0seM/hwvgrLHjD3xe6JWVFREbW0tY8aM6fab1bYJTNvqhN3pfFOtL6c0u5sUGY1Gj/t2/M3QF23349lstj7/bsdLH51OJ//3f//HiBEjmD9/fvvPdFwZ8t///jdWq5UbbrjBr4NaXzz44IMUFhZ222c2m63LqWF/pKamotPpWLJkSZ8vd+tJ27PGoOXa4m3btlFfX09DQwPDhg3jhx9+4Oqrr2bRokU+L/WvdSUlJVx44YXU19czefJkZs6cSWRkJAaDgbKyMt577z3sdrsinxXI7b4zf/+u7j6r7XVvj8zw53c6u+SSS3juued488032ydqK1aswGQyccEFF/T6+218Hf/gxy+BhgwZ0uXnDQYDsbGxPn+uw+GgsLCQkSNHBmz8Edrh7dL8jtpe9+cRE9K2b9LS0vq0LfpyD+xA0nJ+LWcH7eUPxDGjFo4X/Z6onXbaaWRmZvLoo4/yi1/8gv/7v//r8lyQtgFr8+bNfbqsUMkVY/zN0Bfx8fHAjweofdHxjNpnn31GaWkp999/v8e35ZGRkTQ0NGCz2fj3v//dp2e1+WP79u1dbqZs43K5qK+vJzU1td+fExkZyYwZM3jnnXe4/vrr+3x/X3fWrFnD9OnTqaioID09nccee4zjx4+zZMkSXn/9dR566CEmTpwYNJM0aFlFtLa2lgceeIDzzz/f472PPvqo/fI4JQzkdu/v31VVVdXj695y+/M7nSUlJTFnzhy++OILfvjhB+rq6igsLGTBggXt44jS2nJVV1d32cacTie1tbU+P4Jh//792Gy2Pi0YJPeo/XS1XSFQVFTk9f3i4mIAvx7jIG375uWXX1akncGi5fxazg7ayx+IY0YtHC/2a9XH6667jjvvvJNdu3bx85//vMuBzIQJE4CWm9kHy0BkSExMJD4+3utqbr3peEbthRdeICEhocsBZ2RkZPsN/NXV1VxyySUBeQiu3W4nNzeXjRs38uyzz5KTk9PlcQMHDx7E7XZ7rPDXH9dccw3V1dXcc889fq2G6M369euZNm0aq1evbr8EMSoqiqlTp7Jy5cr2RSaCSdvBwbx587q8t2HDhj611fYlgtPp9Pr+QG73/v5du3bt8noGrO13vE1E/Pkdb9ruCXvzzTf7vIiIP9q21c2bN3d577vvvsPhcPjc1p49ewDf/1ZouUftqaee8vnfl19+6XPbYnC1rfS5evXqLmdyGxoa2LJlC2FhYX1eDVnaFkJ4o/QxoxaOF/u9PP8vfvEL/vCHP7Bv3z6uuOIKj/tBLr/8ckwmEw888IDXSYzdbg/4wdxAZNDpdEyZMoVjx461Hzj6qm3C9fnnn7Nz505+/vOfdzkV3Xbp44svvojJZArY/WdGo5E33ngDgLfeeovVq1ezfPlyj59pu/9FqaW4p02bxpIlS/joo4+45ppr+tx/nTU3N2OxWIiNjWXt2rUez8O48sorefnll4mPj2f8+PFBde9M26p+nScv3377LW+//Xaf2oqOjkan03ldUAYGdrv39+86fvx4l1Unt2/fzocffkhUVBRnnHGGIr/jzbRp08jIyOA///kPn376KZmZmR6rNCqt7V7WZ5991uPMlt1u57HHHutTW21XDfTlTOlXX33F3r17ff7XdhP2QLrjjju8PgtQ2u657REjRjBz5kzKysr497//7fHek08+idVq5Zxzzunyzbe07V/baqXl7KDt/FrO7g8ljxm1cryoyEMIFi9eTGhoKHfddRdXXHEFL7/8MsOHD2fkyJH85S9/4a677mLhwoWccsopZGRk4HA4KC8vZ/PmzcTFxfHZZ58pEcOrgcowb948/vvf/7J69eo+nSJtO6O2bds2oqKivK7AFhUVRV1dHXV1dVxwwQU+X6bUV3q9nsrKSiIiIsjLy/N6KdqaNWswGAztDz1Wwm233UZMTAyPPfYY8+fPZ9y4cYwcObLbg8GeVvD5/vvvmTBhAi6Xi8OHD7cvkQotl6iOHj2a1atXc/XVV7N06VJOO+00TT5Ysq8uu+wy3n33XW655Rbmz59PYmIi+/bt49tvv+Wss87q9TlgHUVERDB+/Hg2bdrE7bffTmZmJnq9njlz5jB69OgB3e79/bumTJnC22+/zbZt25g0aRKVlZV88sknuFwu/vjHP3qtPX9+xxudTsfixYt54IEHgMCeTYOWG6kvueQS3nzzTc4++2zmzZuHyWTiq6++IioqisTERJ+3gbYbqR977DEKCwsJDw8nKyuLs846K5B/Qp98+eWX7Wfl2pZC/u6779ofHB4XF9fl8QhtZz68LdAibffc9n333cell17Kn//8Z9atW8fIkSP5/vvvKSgoICMjw+NRJNJ2/9seCH2tFy1nB23n13J2fyl1zKiV40XFnjB8/vnnExISwu9///v2yVpaWhr/8z//w+jRo3nxxRcp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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Saved figure to: images/batched_output__y__in__mathbb_R___9_x_18__.pdf\n", - "Saved figure to: images/batched_output__y__in__mathbb_R___9_x_18__.png\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxoAAAGxCAYAAADlBMBWAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAADSk0lEQVR4nOzdeXxU1f3/8ddsmcm+sCRkD0vQQAiBIItCEAQrgrVSEaRqDbJptdraX91qv7W1inVpS2UVLVYRUaQVRRGiIEtAIBCWWFmTEELYsi+TySy/PyaJGTJJJpObZern+Xj4aLl3cuY9Z87ce8+9556rstlsNoQQQgghhBBCQequDiCEEEIIIYT43yMdDSGEEEIIIYTipKMhhBBCCCGEUJx0NIQQQgghhBCKk46GEEIIIYQQQnHS0RBCCCGEEEIoTjoaQgghhBBCCMVJR0MIIYQQQgihOOloCCGEEEIIIRQnHQ0hhBBCCCGE4qSjIYQQQgghhFCcdDSE6EIVFRU8//zz3HjjjQwZMoSZM2dy+PBht8vbt28fCxYsYOzYsQwcOJCPPvqoyWssFgt//etfmTBhAomJiUyYMIHXXnsNs9ncno8ihBBCCOFAOhpCdKFnnnmGnTt38uKLL7Jx40auv/567r//fi5cuODwuszMTEwmU5O/P3v2LPn5+Q3/rqqqIj4+nqeffhqDweD0PVeuXMmaNWt45pln+Oyzz3j66adZs2YNy5cvV/bDCSGEEOIHrc0djfz8fAYOHMgTTzzREXkU1R2yTpgwgQkTJnTZ+4vuy2g08sUXX/DrX/+akSNHEhMTw8MPP0xMTAxr1qxpeJ3NZuNPf/oTjzzyCLW1tQ3Lz507x3333efw2tTUVH71q1/xox/9CLXa+c/74MGD3HjjjUyYMIHIyEgmTpzIhAkT2nUlRQghhBDiat3uikZ36Bz8L+sO9dsdMoD9QP21117j9ttvZ/jw4QwcONDpf/fcc0+HvL/ZbMZisaDX6x2W6/V6MjMzG/6tUqlYsWIFOTk5PPbYY5jNZgoLC7nvvvsYOnQov/71r9v0vsOHD2fv3r2cOnUKgJMnT7Jnzx7GjRvX/g8lhBBCCFFH29UBhOgK//znP3n55Zepra1lyJAhTJ48GT8/P6evjYmJcanMnTt38uyzzxIYGMjZs2eJjo5uWFdbW4tarWb+/PlMmTIFAD8/P5KTk1m6dCnx8fH07NmTTz75hEOHDjn8LUDPnj1ZvXo199xzD48++ignTpzg2muv5aWXXkKj0bTps8+dO5fKykpuvfVWNBoNZrOZBQsWMHv27DaVI4QQQgjREuloiB+c1157jWXLlpGcnMyf/vQn+vfvr0i5u3bt4uWXX0ar1fL555/z//7f/3NY/8gjj7B792569uzJddddB8BLL73EU089xbhx49BoNCQkJHDrrbdy7NixJuWHhoby6quvMn36dHr16tXwXm21adMm/v3vf/PKK6/Qv39/vv32W/785z8TGRnJnXfe6d6HF0IIIYS4SruGTp06dYoHH3yQ6667jqFDhzJr1ix27tzZ5HUfffQRDz/8MBMnTmTIkCEMGzaMmTNn8p///MfhdYsXL2bixIkAbNiwwWH4ytWz5xw+fJhHH32UsWPHMnjwYG644QbS0tLYtGmT06z5+fk89thjjBw5ksTERO644w6++uqrZj9bVlYWjzzyCNdffz2DBw8mNTWVZ599tslNumAfQ//OO+9w6623kpiYyNixY3nuuecoLy9vtQ6d2bRpE7Nnz2b48OEMGTKEadOmsXz5cqc3A+/du5eBAweyePFip2U1vkfElfptPKzJ1e9X6Qwteeuttxg4cCBvvvmm0/WnT59m8ODBzZ6d37t3L8uXL+f666/nnXfeUayTAXDkyBGGDBnCrl27uP766x3WmUwmbDYb8+fPd2j30dHRvPPOOxw8eJBt27bx4YcfYjabiYqKalJ+UVERTz75JDfccAM6nY7f//73WK3WNud86aWXSEtL49Zbb2XgwIHcfvvt/PznP2fFihVt/9BCCCGEEM1w+4pGfn4+M2fOJD4+nrvuuotLly6xadMm5s6dyyuvvNIwPATg//7v/+jfvz8jRoygV69elJSUsH37dv7f//t/nDlzhkcffRSA6667jnvvvZe3336ba665hptuuqmhjGuvvbbh/69bt47/+7//Q61WM2HCBGJjY7ly5QpHjx7lvffec3hvsI/Fv/POO4mKiuLHP/4xpaWlbNq0iQcffJC33nqLUaNGObz+ww8/5Nlnn8XLy4sJEyYQFhZGbm4uH3zwAV9++SXr1q0jPDy84fXPP/88//rXv+jVqxd33XUXWq2W9PR0srKyMJlMeHl5uVyvr776KsuXLyc4OJipU6fi4+PDjh07ePXV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/Zurp9htrX7rufr9dmSG5gQGBtKvXz+OHTvGxo0bycjI4K677nLI1JwHHniAK1eu8Lvf/Q6bzebW+19tz549jB49mp07dzYMcfL39+e6664jPT2duXPnsnLlSkXeSwghhBDCU7jd0SgvL+f11193WHbkyBE2btyIv78/kyZNAuw3YkPTA/EdO3bw4YcfNik3ICAAlUrF+fPnnb7vrFmz0Gq1LFmyhJMnTzZZ7+xgty1mz56NTqfjhRde4MyZM03Wm0wmh05I/VCdZcuWNQy7AqipqeHVV19t03tPnz4dgKVLl1JUVNSw3GKxsGjRIqxWKz/96U8d/qZv3774+fmRnp7OlStXGpYbjUb+9Kc/NXmP1uq3nqvfb0dmaMnw4cOpqqri2WefJTg4mMcee8ylvxs9ejTz5s3jk08+4YEHHmjoCLurtraWyspKgoKC2L17t8PzM+677z5Wr15NSEgISUlJfPnll+16LyGEEEIIT+L20KkRI0bw4YcfcvjwYYYNG9bwnAWr1cpzzz3XMLTm7rvv5qOPPuKXv/wlN998M7179+bEiRPs2LGDW265pckD9nx9fUlKSmL//v38+te/Ji4uruF5Gddccw39+/fn97//Pb///e+5/fbbmThxIrGxsRQXF3P06FF8fX3517/+5XaF9OvXj+eff56nn36aqVOnMnbsWGJjYzGbzRQUFHDgwAGCg4P5/PPPAfsB7z333MO//vUvpk6dyo9+9KOG52gEBAQ0e7+FM8OGDeOBBx7gjTfeYOrUqdx88814e3uzY8cOjh8/zvDhw5kzZ47D3+h0Ou69916WLFnC7bffzqRJkzCbzezevZvevXs3zMrkav3Wc/X77cgMrdXV+++/T1VVFU899RSBgYEu1/Njjz1GYGAgr732GjfffDNDhgyhX79+zQ6Va2nWqaysLIYOHYrVaqWwsNDh+SohISFcc8017Ny5k7S0NH7xi19w4403tumZF0IIIYQQnsrtjkZkZCR/+MMfePnll1m7di0mk4mEhAQeeughhxmhrrnmGt5++23++te/sn37dsxmM9dccw3/+Mc/8Pf3d/ok75deeokXXniBnTt38umnn2Kz2QgLC2s4CJ0xYwYDBgzgzTff5JtvviE9PZ2goCAGDhzInXfe6e5HavDjH/+Ya665hrfeeou9e/eyc+dOfHx86N27NzfffDO3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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# | hide\n", - "\n", - "units = 18\n", - "activation = \"relu\"\n", - "batch_size = 9\n", - "x_len = 12\n", - "\n", - "x = np.random.default_rng(42).normal(size=(batch_size, x_len))\n", - "\n", - "tf.keras.utils.set_random_seed(42)\n", - "\n", - "monotonicity_indicator = [1] * 4 + [0] * 4 + [-1] * 4\n", - "\n", - "mono_layer = MonoDense(\n", - " units=units,\n", - " activation=activation,\n", - " monotonicity_indicator=monotonicity_indicator,\n", - " activation_weights=(6, 6, 6),\n", - ")\n", - "display_kernel(\n", - " x, title=\"input $x \\in \\mathbb{R}^{9 Γ— 12}$ with batch size 9 and 12 inputs\"\n", - ")\n", - "\n", - "y = mono_layer(x)\n", - "# print(f\"monotonicity_indicator = {monotonicity_indicator}\")\n", - "# display_kernel(mono_layer.monotonicity_indicator, title=\"monotonicity_indicator\")\n", - "\n", - "with replace_kernel_using_monotonicity_indicator(\n", - " mono_layer, mono_layer.monotonicity_indicator\n", - "):\n", - " ww = \"\\in \\mathbb{R}^{12 Γ— 18}\"\n", - " tt = \"\\in \\mathbb{R}^{12}\"\n", - " display_kernel(\n", - " mono_layer.kernel,\n", - " title=f\"kernel $(|W^T|_t)^T {ww}$ after applying $t={monotonicity_indicator} {tt}$\",\n", - " )\n", - "\n", - "display_kernel(y, title=\"batched output $y \\in \\mathbb{R}^{9 Γ— 18}$\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Bellow is an example of a batched input to `MoneDense` layer with batch size 9 and 12 inputs features.\n", - "\n", - "![](images/input__x__in__mathbb_R___9_Γ—_12___with_batch_size_9_and_12_inputs.png)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The figure below is an example of a kernel with 18 units and 12 input features.\n", - "\n", - "![kernel](images/kernel__(|W_T|_t)_T__in__mathbb_R___12_x_18___after_applying__t=[1,_1,_1,_1,_0,_0,_0,_0,_-1,_-1,_-1,_-1]__in__mathbb_R___12__.png)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The input $x$ is multiplied with kernel $(|W^T|_t)^T \\in \\mathbb{R}^{12 Γ— 18}$ after applying monotonicity indicator $t \\in \\mathbb{R}^{12}$ to it and then the bias $b$ (initially set to 0) is added to it:\n", - "\n", - "![output](images/batched_output__y__in__mathbb_R___9_x_18__.png)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Architecture types" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The main advantage of our proposed monotonic dense unit is its simplicity. We can build deep neural nets with different architectures by plugging in our monotonic dense blocks. We have two functions for building neural networks using `MonoDense` layer. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Type-1 architecture" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The first example shown in the figure below corresponds to the standard MLP type of neural network architecture used in general, where each of the input features is concatenated to form one single input feature vector $\\mathbf{x}$ and fed into the network, with the only difference being that instead of standard fully connected or dense layers, we employ monotonic dense units throughout. For the first (or input layer) layer, the indicator vector $\\mathbf{t}$, is used to identify the monotonicity property of the input feature with respect to the output. Specifically, $\\mathbf{t}$ is set to $1$ for those components in the input feature vector that are monotonically increasing and is set to $-1$ for those components that are monotonically decreasing and set to $0$ if the feature is non-monotonic. For the subsequent hidden layers, monotonic dense units with the indicator vector $\\mathbf{t}$ always being set to $1$ are used in order to preserve monotonicity. Finally, depending on whether the problem at hand is a regression problem or a classification problem (or even a multi-task problem), an appropriate activation function (such as linear activation or sigmoid or softmax) to obtain the final output.\n", - "\n", - "![type-1](images/type-1.png)\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Model: \"model_7\"\n", - "__________________________________________________________________________________________________\n", - " Layer (type) Output Shape Param # Connected to \n", - "==================================================================================================\n", - " a (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " b (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " c (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " d (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " concatenate (Concatenate) (None, 4) 0 ['a[0][0]', \n", - " 'b[0][0]', \n", - " 'c[0][0]', \n", - " 'd[0][0]'] \n", - " \n", - " mono_dense_0 (MonoDense) (None, 64) 320 ['concatenate[0][0]'] \n", - " \n", - " dropout (Dropout) (None, 64) 0 ['mono_dense_0[0][0]'] \n", - " \n", - " mono_dense_1_increasing (MonoD (None, 64) 4160 ['dropout[0][0]'] \n", - " ense) \n", - " \n", - " dropout_1 (Dropout) (None, 64) 0 ['mono_dense_1_increasing[0][0]']\n", - " \n", - " mono_dense_2_increasing (MonoD (None, 10) 650 ['dropout_1[0][0]'] \n", - " ense) \n", - " \n", - " tf.nn.softmax (TFOpLambda) (None, 10) 0 ['mono_dense_2_increasing[0][0]']\n", - " \n", - "==================================================================================================\n", - "Total params: 5,130\n", - "Trainable params: 5,130\n", - "Non-trainable params: 0\n", - "__________________________________________________________________________________________________\n" - ] - } - ], - "source": [ - "inputs = {name: Input(name=name, shape=(1,)) for name in list(\"abcd\")}\n", - "\n", - "outputs = MonoDense.create_type_1(\n", - " inputs=inputs,\n", - " units=64,\n", - " final_units=10,\n", - " activation=\"elu\",\n", - " n_layers=3,\n", - " final_activation=\"softmax\",\n", - " monotonicity_indicator=dict(a=1, b=0, c=-1, d=0),\n", - " dropout=0.1,\n", - ")\n", - "\n", - "model = Model(inputs=inputs, outputs=outputs)\n", - "model.summary()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Type-2 architecture" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The figure below shows another example of a neural network architecture that can be built employing proposed monotonic dense blocks. The difference when compared to the architecture described above lies in the way input features are fed into the hidden layers of neural network architecture. Instead of concatenating the features directly, this architecture provides flexibility to employ any form of complex feature extractors for the non-monotonic features and use the extracted feature vectors as inputs. Another difference is that each monotonic input is passed through separate monotonic dense units. This provides an advantage since depending on whether the input is completely concave or convex or both, we can adjust the activation selection vector $\\mathbf{s}$ appropriately along with an appropriate value for the indicator vector $\\mathbf{t}$. Thus, each of the monotonic input features has a separate monotonic dense layer associated with it. Thus as the major difference to the above-mentioned architecture, we concatenate the feature vectors instead of concatenating the inputs directly. The subsequent parts of the network are similar to the architecture described above wherein for the rest of the hidden monotonic dense units, the indicator vector $\\mathbf{t}$ is always set to $1$ to preserve monotonicity.\n", - "\n", - "![type-2](images/type-2.png)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Model: \"model_8\"\n", - "__________________________________________________________________________________________________\n", - " Layer (type) Output Shape Param # Connected to \n", - "==================================================================================================\n", - " a (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " b (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " c (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " d (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " mono_dense_a_increasing_convex (None, 8) 16 ['a[0][0]'] \n", - " (MonoDense) \n", - " \n", - " dense_b (Dense) (None, 8) 16 ['b[0][0]'] \n", - " \n", - " mono_dense_c_decreasing (MonoD (None, 8) 16 ['c[0][0]'] \n", - " ense) \n", - " \n", - " dense_d (Dense) (None, 8) 16 ['d[0][0]'] \n", - " \n", - " preprocessed_features (Concate (None, 32) 0 ['mono_dense_a_increasing_convex[\n", - " nate) 0][0]', \n", - " 'dense_b[0][0]', \n", - " 'mono_dense_c_decreasing[0][0]',\n", - " 'dense_d[0][0]'] \n", - " \n", - " mono_dense_0_convex (MonoDense (None, 32) 1056 ['preprocessed_features[0][0]'] \n", - " ) \n", - " \n", - " dropout_2 (Dropout) (None, 32) 0 ['mono_dense_0_convex[0][0]'] \n", - " \n", - " mono_dense_1_increasing_convex (None, 32) 1056 ['dropout_2[0][0]'] \n", - " (MonoDense) \n", - " \n", - " dropout_3 (Dropout) (None, 32) 0 ['mono_dense_1_increasing_convex[\n", - " 0][0]'] \n", - " \n", - " mono_dense_2_increasing_convex (None, 10) 330 ['dropout_3[0][0]'] \n", - " (MonoDense) \n", - " \n", - " tf.nn.softmax_1 (TFOpLambda) (None, 10) 0 ['mono_dense_2_increasing_convex[\n", - " 0][0]'] \n", - " \n", - "==================================================================================================\n", - "Total params: 2,506\n", - "Trainable params: 2,506\n", - "Non-trainable params: 0\n", - "__________________________________________________________________________________________________\n" - ] - } - ], - "source": [ - "inputs = {name: Input(name=name, shape=(1,)) for name in list(\"abcd\")}\n", - "outputs = MonoDense.create_type_2(\n", - " inputs,\n", - " units=32,\n", - " final_units=10,\n", - " activation=\"elu\",\n", - " final_activation=\"softmax\",\n", - " n_layers=3,\n", - " dropout=0.2,\n", - " monotonicity_indicator=dict(a=1, b=0, c=-1, d=0),\n", - " is_convex=dict(a=True, b=False, c=False, d=False),\n", - ")\n", - "model = Model(inputs=inputs, outputs=outputs)\n", - "model.summary()" - ] - }, - { - "cell_type": "raw", - "metadata": {}, - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "python3", - "language": "python", - "name": "python3" - } - }, - "nbformat": 4, - "nbformat_minor": 1 + "nbformat": 4, + "nbformat_minor": 1 } diff --git a/nbs/MonoDenseLayer.ipynb b/nbs/MonoDenseLayer.ipynb index f1e6308..2d06b9f 100644 --- a/nbs/MonoDenseLayer.ipynb +++ b/nbs/MonoDenseLayer.ipynb @@ -1,6550 +1,6548 @@ { - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | default_exp _components.mono_dense_layer" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Monotonic dense layer\n", - "\n", - "> Implementation of the MonoDense layer" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Imports" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2023-06-09 08:47:34.156608: I tensorflow/core/platform/cpu_feature_guard.cc:182] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.\n", - "To enable the following instructions: AVX2 FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.\n" - ] - } - ], - "source": [ - "# | export\n", - "\n", - "from contextlib import contextmanager\n", - "from datetime import datetime\n", - "from functools import lru_cache\n", - "from typing import *\n", - "\n", - "import numpy as np\n", - "import tensorflow as tf\n", - "from numpy.typing import ArrayLike, NDArray\n", - "from tensorflow.keras.layers import Concatenate, Dense, Dropout\n", - "from tensorflow.types.experimental import TensorLike\n", - "\n", - "from airt._components.helpers import export" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from os import environ\n", - "from pathlib import Path\n", - "\n", - "import matplotlib\n", - "import matplotlib.pyplot as plt\n", - "import pandas as pd\n", - "import pytest\n", - "import seaborn as sns\n", - "from tensorflow.keras import Model\n", - "from tensorflow.keras.layers import Input" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "environ[\"TF_FORCE_GPU_ALLOW_GROWTH\"] = \"true\"" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Monotonic Dense Layer\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Actvation Functions" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We use $\\breve{\\mathcal{A}}$ to denote the set of all zero-centred, monotonically increasing, convex, lower-bounded functions.\n", - "\n", - "Let $\\breve{\\rho} \\in \\breve{\\mathcal{A}}$. Then\n", - "\\begin{align}\\label{eq:activation_concave}\n", - " \\hat{\\rho}(x) & = -\\breve{\\rho}(-x) \\\\\n", - " \\label{eq:activation_saturated}\n", - " \\tilde{\\rho}(x) & = \\begin{cases}\n", - " \\breve{\\rho}(x+1)-\\breve{\\rho}(1) & \\text{if }x < 0\\\\\n", - " \\hat{\\rho}(x-1)+\\breve{\\rho}(1) & \\text{otherwise}\n", - " \\end{cases} \n", - "\\end{align}\n", - " \n", - " In the code below, the following names are used for denotation of the above functions:\n", - " \n", - " - `convex_activation` denotes $\\breve{\\rho}$,\n", - " \n", - " - `concave_activation` denotes $\\hat{\\rho}$, and\n", - " \n", - " - `saturated_activation` denotes $\\tilde{\\rho}$. \n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | export\n", - "\n", - "\n", - "def get_saturated_activation(\n", - " convex_activation: Callable[[TensorLike], TensorLike],\n", - " concave_activation: Callable[[TensorLike], TensorLike],\n", - " a: float = 1.0,\n", - " c: float = 1.0,\n", - ") -> Callable[[TensorLike], TensorLike]:\n", - " @tf.function\n", - " def saturated_activation(\n", - " x: TensorLike,\n", - " convex_activation: Callable[[TensorLike], TensorLike] = convex_activation,\n", - " concave_activation: Callable[[TensorLike], TensorLike] = concave_activation,\n", - " a: float = a,\n", - " c: float = c,\n", - " ) -> TensorLike:\n", - " cc = convex_activation(tf.ones_like(x) * c)\n", - " ccc = concave_activation(-tf.ones_like(x) * c)\n", - " return a * tf.where(\n", - " x <= 0,\n", - " convex_activation(x + c) - cc,\n", - " concave_activation(x - c) + cc,\n", - " )\n", - "\n", - " return saturated_activation # type: ignore\n", - "\n", - "\n", - "@lru_cache\n", - "def get_activation_functions(\n", - " activation: Optional[Union[str, Callable[[TensorLike], TensorLike]]] = None\n", - ") -> Tuple[\n", - " Callable[[TensorLike], TensorLike],\n", - " Callable[[TensorLike], TensorLike],\n", - " Callable[[TensorLike], TensorLike],\n", - "]:\n", - " convex_activation = tf.keras.activations.get(\n", - " activation.lower() if isinstance(activation, str) else activation\n", - " )\n", - "\n", - " @tf.function\n", - " def concave_activation(x: TensorLike) -> TensorLike:\n", - " return -convex_activation(-x)\n", - "\n", - " saturated_activation = get_saturated_activation(\n", - " convex_activation, concave_activation\n", - " )\n", - " return convex_activation, concave_activation, saturated_activation" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | hide\n", - "\n", - "\n", - "for activation in [None, \"relu\", tf.keras.activations.elu]:\n", - " f, g, h = get_activation_functions(activation)\n", - " hasattr(f, \"__call__\")\n", - " hasattr(g, \"__call__\")\n", - " hasattr(h, \"__call__\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | hide\n", - "\n", - "\n", - "def plot_activation_functions(\n", - " activation: Optional[Union[str, Callable[[TensorLike], TensorLike]]] = None,\n", - " *,\n", - " font_size: int = 20,\n", - " save_pdf: bool = False,\n", - " save_path: Union[Path, str] = \"plots\",\n", - " linestyle=\"--\",\n", - " alpha=0.7,\n", - " linewidth=4.0,\n", - ") -> None:\n", - " font = {\"size\": font_size}\n", - " matplotlib.rc(\"font\", **font)\n", - " (\n", - " convex_activation,\n", - " concave_activation,\n", - " saturated_activation,\n", - " ) = get_activation_functions(activation)\n", - " plt.rcParams[\"figure.figsize\"] = (6, 4)\n", - "\n", - " x = np.arange(-3.5, 3.5, 0.1)\n", - " plot_kwargs = dict(linestyle=linestyle, alpha=alpha, linewidth=linewidth)\n", - " plt.plot(x, convex_activation(x), label=r\"$\\breve{\\rho}(x)$\", **plot_kwargs)\n", - " plt.plot(x, concave_activation(x), label=r\"$\\hat{\\rho}(x)$\", **plot_kwargs)\n", - " plt.plot(x, saturated_activation(x), label=r\"$\\tilde{\\rho}(x)$\", **plot_kwargs)\n", - " plt.legend()\n", - "\n", - " title = f\"{activation.__name__ if hasattr(activation, '__name__') else activation}-based activations\"\n", - " plt.title(title)\n", - " if save_pdf:\n", - " for file_format in [\"pdf\", \"png\"]:\n", - " path = Path(save_path) / (title.replace(\" \", \"_\") + f\".{file_format}\")\n", - " path.parent.mkdir(exist_ok=True, parents=True)\n", - " plt.savefig(path, format=file_format)\n", - " print(f\"Saved figure to: {path}\")\n", - "\n", - " plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2023-06-09 08:47:40.032380: E tensorflow/compiler/xla/stream_executor/cuda/cuda_driver.cc:266] failed call to cuInit: CUDA_ERROR_COMPAT_NOT_SUPPORTED_ON_DEVICE: forward compatibility was attempted on non supported HW\n", - "2023-06-09 08:47:40.032419: I tensorflow/compiler/xla/stream_executor/cuda/cuda_diagnostics.cc:168] retrieving CUDA diagnostic information for host: 777faa4633a1\n", - "2023-06-09 08:47:40.032427: I tensorflow/compiler/xla/stream_executor/cuda/cuda_diagnostics.cc:175] hostname: 777faa4633a1\n", - "2023-06-09 08:47:40.032546: I tensorflow/compiler/xla/stream_executor/cuda/cuda_diagnostics.cc:199] libcuda reported version is: NOT_FOUND: was unable to find libcuda.so DSO loaded into this program\n", - "2023-06-09 08:47:40.032572: I tensorflow/compiler/xla/stream_executor/cuda/cuda_diagnostics.cc:203] kernel reported version is: 470.182.3\n" - ] + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | default_exp _components.mono_dense_layer" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Monotonic dense layer\n", + "\n", + "> Implementation of the MonoDense layer" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Imports" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2023-06-09 08:47:34.156608: I tensorflow/core/platform/cpu_feature_guard.cc:182] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.\n", + "To enable the following instructions: AVX2 FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.\n" + ] + } + ], + "source": [ + "# | export\n", + "\n", + "from contextlib import contextmanager\n", + "from datetime import datetime\n", + "from functools import lru_cache\n", + "from typing import *\n", + "\n", + "import numpy as np\n", + "import tensorflow as tf\n", + "from numpy.typing import ArrayLike, NDArray\n", + "from tensorflow.keras.layers import Concatenate, Dense, Dropout\n", + "from tensorflow.types.experimental import TensorLike\n", + "\n", + "from airt._components.helpers import export" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from os import environ\n", + "from pathlib import Path\n", + "\n", + "import matplotlib\n", + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", + "import pytest\n", + "import seaborn as sns\n", + "from tensorflow.keras import Model\n", + "from tensorflow.keras.layers import Input" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "environ[\"TF_FORCE_GPU_ALLOW_GROWTH\"] = \"true\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Monotonic Dense Layer\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Activation Functions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We use $\\breve{\\mathcal{A}}$ to denote the set of all zero-centred, monotonically increasing, convex, lower-bounded functions.\n", + "\n", + "Let $\\breve{\\rho} \\in \\breve{\\mathcal{A}}$. Then\n", + "\\begin{align}\n", + " \\hat{\\rho}(x) & = -\\breve{\\rho}(-x) \\\\\n", + " \\tilde{\\rho}(x) & = \\begin{cases}\n", + " \\breve{\\rho}(x+1)-\\breve{\\rho}(1) & \\text{if }x < 0\\\\\n", + " \\hat{\\rho}(x-1)+\\breve{\\rho}(1) & \\text{otherwise}\n", + " \\end{cases} \n", + "\\end{align}\n", + " \n", + " In the code below, the following names are used for denotation of the above functions:\n", + " \n", + " - `convex_activation` denotes $\\breve{\\rho}$,\n", + " \n", + " - `concave_activation` denotes $\\hat{\\rho}$, and\n", + " \n", + " - `saturated_activation` denotes $\\tilde{\\rho}$. \n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | export\n", + "\n", + "\n", + "def get_saturated_activation(\n", + " convex_activation: Callable[[TensorLike], TensorLike],\n", + " concave_activation: Callable[[TensorLike], TensorLike],\n", + " a: float = 1.0,\n", + " c: float = 1.0,\n", + ") -> Callable[[TensorLike], TensorLike]:\n", + " @tf.function\n", + " def saturated_activation(\n", + " x: TensorLike,\n", + " convex_activation: Callable[[TensorLike], TensorLike] = convex_activation,\n", + " concave_activation: Callable[[TensorLike], TensorLike] = concave_activation,\n", + " a: float = a,\n", + " c: float = c,\n", + " ) -> TensorLike:\n", + " cc = convex_activation(tf.ones_like(x) * c)\n", + " ccc = concave_activation(-tf.ones_like(x) * c)\n", + " return a * tf.where(\n", + " x <= 0,\n", + " convex_activation(x + c) - cc,\n", + " concave_activation(x - c) + cc,\n", + " )\n", + "\n", + " return saturated_activation # type: ignore\n", + "\n", + "\n", + "@lru_cache\n", + "def get_activation_functions(\n", + " activation: Optional[Union[str, Callable[[TensorLike], TensorLike]]] = None\n", + ") -> Tuple[\n", + " Callable[[TensorLike], TensorLike],\n", + " Callable[[TensorLike], TensorLike],\n", + " Callable[[TensorLike], TensorLike],\n", + "]:\n", + " convex_activation = tf.keras.activations.get(\n", + " activation.lower() if isinstance(activation, str) else activation\n", + " )\n", + "\n", + " @tf.function\n", + " def concave_activation(x: TensorLike) -> TensorLike:\n", + " return -convex_activation(-x)\n", + "\n", + " saturated_activation = get_saturated_activation(\n", + " convex_activation, concave_activation\n", + " )\n", + " return convex_activation, concave_activation, saturated_activation" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | hide\n", + "\n", + "\n", + "for activation in [None, \"relu\", tf.keras.activations.elu]:\n", + " f, g, h = get_activation_functions(activation)\n", + " hasattr(f, \"__call__\")\n", + " hasattr(g, \"__call__\")\n", + " hasattr(h, \"__call__\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | hide\n", + "\n", + "\n", + "def plot_activation_functions(\n", + " activation: Optional[Union[str, Callable[[TensorLike], TensorLike]]] = None,\n", + " *,\n", + " font_size: int = 20,\n", + " save_pdf: bool = False,\n", + " save_path: Union[Path, str] = \"plots\",\n", + " linestyle=\"--\",\n", + " alpha=0.7,\n", + " linewidth=4.0,\n", + ") -> None:\n", + " font = {\"size\": font_size}\n", + " matplotlib.rc(\"font\", **font)\n", + " (\n", + " convex_activation,\n", + " concave_activation,\n", + " saturated_activation,\n", + " ) = get_activation_functions(activation)\n", + " plt.rcParams[\"figure.figsize\"] = (6, 4)\n", + "\n", + " x = np.arange(-3.5, 3.5, 0.1)\n", + " plot_kwargs = dict(linestyle=linestyle, alpha=alpha, linewidth=linewidth)\n", + " plt.plot(x, convex_activation(x), label=r\"$\\breve{\\rho}(x)$\", **plot_kwargs)\n", + " plt.plot(x, concave_activation(x), label=r\"$\\hat{\\rho}(x)$\", **plot_kwargs)\n", + " plt.legend()\n", + "\n", + " title = f\"{activation.__name__ if hasattr(activation, '__name__') else activation}-based activations\"\n", + " plt.title(title)\n", + " if save_pdf:\n", + " for file_format in [\"pdf\", \"png\"]:\n", + " path = Path(save_path) / (title.replace(\" \", \"_\") + f\".{file_format}\")\n", + " path.parent.mkdir(exist_ok=True, parents=True)\n", + " plt.savefig(path, format=file_format)\n", + " print(f\"Saved figure to: {path}\")\n", + "\n", + " plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2023-06-09 08:47:40.032380: E tensorflow/compiler/xla/stream_executor/cuda/cuda_driver.cc:266] failed call to cuInit: CUDA_ERROR_COMPAT_NOT_SUPPORTED_ON_DEVICE: forward compatibility was attempted on non supported HW\n", + "2023-06-09 08:47:40.032419: I tensorflow/compiler/xla/stream_executor/cuda/cuda_diagnostics.cc:168] retrieving CUDA diagnostic information for host: 777faa4633a1\n", + "2023-06-09 08:47:40.032427: I tensorflow/compiler/xla/stream_executor/cuda/cuda_diagnostics.cc:175] hostname: 777faa4633a1\n", + "2023-06-09 08:47:40.032546: I tensorflow/compiler/xla/stream_executor/cuda/cuda_diagnostics.cc:199] libcuda reported version is: NOT_FOUND: was unable to find libcuda.so DSO loaded into this program\n", + "2023-06-09 08:47:40.032572: I tensorflow/compiler/xla/stream_executor/cuda/cuda_diagnostics.cc:203] kernel reported version is: 470.182.3\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saved figure to: plots/linear-based_activations.pdf\n", + "Saved figure to: plots/linear-based_activations.png\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saved figure to: plots/ReLU-based_activations.pdf\n", + "Saved figure to: plots/ReLU-based_activations.png\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saved figure to: plots/ELU-based_activations.pdf\n", + "Saved figure to: plots/ELU-based_activations.png\n" + ] + }, + { + "data": { + "image/png": "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//6HXq9n4MCBtG7dGqPRyC+//OJ4na1bt47p06fz9ttvV1nPzJkzeffddx2/x8XFOVpAbTYb2dnZHD582PHauSrVd3Yjroy0XHjG+THp9XoFUCZNmqTk5+dXKJeTk6OMGzfOUVatVitbtmypsk6TyaRMmTJF2bBhg1JWVlZlGaPRqMyfP1/RarWOb1qFhYVVlnVuZXjssceU4uLiKssVFhYqn3/+ufLUU09VuT8jI0OJiopy1DV58mTl7NmzlcqdO3dOGTt2rKNcly5dFIvFUmWd1113XYVvxt9++22lMt9//70SHh7uaEGo6d+/Kg8//LDy3XffVftt0mKxKEuXLlUCAwMd5z916lS19X333XeKSqVyxDh8+HDl8OHDVZY9deqU8vzzz1f5DdldK0RV3B1TXFysBAUFOcocOnTIZX0Wi6XC33vDhg2VyqSkpCh//etflR07dihWq7XKevLz85UnnnjCUU+7du2qLasonrdCXO4xr732WoVyTz/9tGIymSqUycjIUG688UZHGa1Wq2zfvr3K+pyfb4PBoADKTTfdpKSlpVUoZzablRkzZjjKqlSqKl+7WVlZjvezRqNRli1bpthstirPffbsWeWf//yn8v7777t5ZhofSS4aOOcP4j59+iiPPvqox7fs7Owq62zsyQWg3HzzzdX+4zSbzcq1117rKDtkyJArPv+rr77qqG/x4sWV9hcWFjr2N2/evNp/Vp647777HHU9/vjjLstaLBZl+PDhjvIrV66sVOaHH36o8A/3p59+qra+TZs2VfjQ9lZy4amVK1c6zvvkk09WWcZsNistW7Z0lLvlllsUs9lco/PVRnKhKIoyefLkCh+urqxdu9ZRNiEh4YpeO4qiKFOnTnXU9/3331dbrjaSi/z8/AqJ1YwZM6qty2g0VrhcNmzYsCrLOT/f5e/n6v7eNputQp2vvvpqpTLffvutY/+kSZM8eNRXJ0kuGjjnD+LLvVX3T7+xJxcqlUo5ceKEy/IHDhyo8Bh+//33Kzr/+fPnHXWNGzeu0v709HTH/u7du9f4PJmZmY6WmZiYmErX3quybds2x7lHjx5daf+ECRMc+2+//Xa39d155531llxYLBbHh1PPnj2rLOOcgAQGBioXLlyo8flqK7lwTujcJQyTJk3yOBHxhHP/jenTp1dbrjaSi7ffftuxPzo62mW/h0tj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HX5+fsrp06fdPp6azOp52223OY4ZP368YzsmJqba9WDK5eTkKAEBAY5jJk2apOTm5lYok5+frzzwwAOVXqstWrSott4RI0Y4ynm6equr90C5S9cWee655yqtLXLu3Dll5MiRjjKeri3iyfPtPMNwVY9/9uzZSrdu3ZTFixcrGRkZVdZRWFioPPPMM456NBqNcubMGbfnbkxkKGoj8v33319WE29AQADz5893Weabb76he/fuHtc5depUpk6dCsD8+fM5cOAAGzZsQFEU/v73v/P666/Tv39/EhISMBgMZGVlsWPHjgrffMLCwli1apVHY9JrYtasWbz11lv8+9//ZvXq1QwfPpyoqCjOnTvHTz/9VKH3+axZsxg8eHClOtRqNS+//DL33XcfAOvXr6ddu3YMHDiQFi1akJ2dzc8//+zoXPjuu+8yadIkl3GVf1ObM2cOMTExdO/enZiYGLRaLefPn2fPnj0Vrp8PGTKEP//5z5XqiY2N5euvv+bmm28mKyuLo0ePMmLEiAorN5rNZrKysjh06JBHnRo/+OADBgwYwPnz58nNzWXUqFF07tzZsSrqvn37HM3T06dP58svv/Rax8CXX36ZG2+8EZvNxr59++jSpQuDBg2iVatWFBUV8csvvzhWa33llVd499133Z77lltuYd68eTz99NOAve9Fp06d6NatW4VVUQ8cOOBY2dK5Va1cTEwMAwcOZOvWrRiNRrp168bIkSNp1qyZ43JE69atefjhh6/oObjrrrsc/S2cO/FOnDix0nDkS4WHhzNjxgzH6r4ff/wxa9eupV+/fsTFxZGRkcHPP/9McXExWq2WxYsXc88997iNafz48Y5+BE899RRr164lKSmpwhwszz77bKV5RtyZMWMGmzdv5ttvvwXg73//O2+//TbDhg0jPDzcsSqq85D1BQsWVOhvVNt+/fVXHnnkER599FFat25N586dadKkCWazmYyMDLZu3Vqh79jTTz9dYWbPq0J9ZzfiylzJ2iKhoaFV1nnpIl+Xc7u09aSsrEyZPn26o7XA3a1///7KsWPHvP48OT+mpUuXKlu2bKnw7f7Sm0ajUZ599lm39Tp/O6nq5ufnp7zzzjuKorj+1rZ9+3bHSoue3G677bZqW4HKpaSkVFjN1N0tOjpaWbduXbX1HTp0SGnbtq3LOh544AGlrKxMadGihdda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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saved figure to: plots/SELU-based_activations.pdf\n", + "Saved figure to: plots/SELU-based_activations.png\n" + ] + }, + { + "data": { + "image/png": "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rKwsPD09+b//+z+nh6BWVHMRHR1NTk4O/v7ODW0yGAwkJCTQvHlzPD09r+gaxNU7cuQIXbp0ITAwkKCgIE6cOMEvv/zC0KFD67poLiWvN+GOis3F/HLmF34791uZeSpUqHix14tE+EZgMlv44eAFfjx0ocJJsGzHqGB4hybc2jkCD626NoovXCQ3N5eAgIAqv0PdvuYiISGBm266iaysLDQaDUuWLKnW3BZ6vR69Xl+DJRS15YknnsBkMvHxxx8TGRlJ//79efLJJzl06JBMBS9EDVEUhV0Xd/Hdqe8qnFFTQeGH0z8wNGISC7YkkJRV5DC/JoGe3NevOS1DZTKshsytg4vk5GRuvPFGkpOTUalUfP7554waNaquiyXqwOLFi9m4cSMTJ07ktttuA+C5555j1qxZvPXWW/z73/+u4xIK0fCcyz3HsuPLOJN7ptI0FkXh/07uYOO+CDyVxpWmU6lU3NIxnJGdI9BppLaioXPb/3B6ejpDhw7l9GnrgjZz587lnnvuqeNSibqQk5PDs88+S0REBB988IHt8enTp9OpUydef/11zpw54zAPo9FIq1atUKlUrFixwuVlfOKJJ1CpVEyePLnqxEK4uWJzMStPrOStXW85DCwKjSZOpxox516HhxJcabrIIC+mjmjL2OuiJLC4Rrhln4ucnByGDBnC3r17AXjjjTd4/vnnXZK3s+1F9qQNvP576623eO655+jQoQMHDx50+Zj6c+fO0apVK0pKSti1a5dTI5kqI683UZeOZRzjmz+/IdOQWWkai6KQkluMMS+OEKU3GrwqTKdWqxjRsQl/69QErQQVDYKz36Fu998uLCxkxIgRtsDi3//+t8sCC3FtysvL48033wRg6tSpNTJZT0xMDJMnT0ZRFF5++WWX5y9ETSsoKeDLI1/yv/3/cxhYFBSbuJgWiFfubYQpgysNLKKDvXl5RDtGd42UwOIa5Fb/caPRyJgxY9iyZQsATz/9NP/5z3/quFSivvvoo4/IyMggJiaGO+64o8bO869//QuAtWvXsmfPnho7jxCutidlD69tf42dF3c6TKfFj8K0QQQWj0JPowrTqNUqRnWNZOqItsSEeFeYRjR8btWh88477+SXX34BYMiQITzwwAMcPny40vQeHh7ExcXVVvFEPWQ2m239NO68807U6pqLp1u3bs11113H3r17mTt3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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# | hide\n", + "\n", + "\n", + "for activation in [\"linear\", \"ReLU\", \"ELU\", \"SELU\"]:\n", + " plot_activation_functions(activation, save_pdf=True)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | export\n", + "\n", + "\n", + "@tf.function\n", + "def apply_activations(\n", + " x: TensorLike,\n", + " *,\n", + " units: int,\n", + " convex_activation: Callable[[TensorLike], TensorLike],\n", + " concave_activation: Callable[[TensorLike], TensorLike],\n", + " saturated_activation: Callable[[TensorLike], TensorLike],\n", + " is_convex: bool = False,\n", + " is_concave: bool = False,\n", + " activation_weights: Tuple[float, float, float] = (7.0, 7.0, 2.0),\n", + ") -> TensorLike:\n", + " if convex_activation is None:\n", + " return x\n", + "\n", + " elif is_convex:\n", + " normalized_activation_weights = np.array([1.0, 0.0, 0.0])\n", + " elif is_concave:\n", + " normalized_activation_weights = np.array([0.0, 1.0, 0.0])\n", + " else:\n", + " if len(activation_weights) != 3:\n", + " raise ValueError(f\"activation_weights={activation_weights}\")\n", + " if (np.array(activation_weights) < 0).any():\n", + " raise ValueError(f\"activation_weights={activation_weights}\")\n", + " normalized_activation_weights = np.array(activation_weights) / sum(\n", + " activation_weights\n", + " )\n", + "\n", + " s_convex = round(normalized_activation_weights[0] * units)\n", + " s_concave = round(normalized_activation_weights[1] * units)\n", + " s_saturated = units - s_convex - s_concave\n", + "\n", + " x_convex, x_concave, x_saturated = tf.split(\n", + " x, (s_convex, s_concave, s_saturated), axis=-1\n", + " )\n", + "\n", + " y_convex = convex_activation(x_convex)\n", + " y_concave = concave_activation(x_concave)\n", + " y_saturated = saturated_activation(x_saturated)\n", + "\n", + " y = tf.concat([y_convex, y_concave, y_saturated], axis=-1)\n", + "\n", + " return y" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def plot_applied_activation(\n", + " activation: str = \"relu\",\n", + " *,\n", + " save_pdf: bool = False,\n", + " save_path: Union[Path, str] = \"plots\",\n", + " font_size: int = 20,\n", + " linestyle=\"--\",\n", + " alpha=0.7,\n", + " linewidth=2.0,\n", + "):\n", + " font = {\"size\": font_size}\n", + " matplotlib.rc(\"font\", **font)\n", + " plt.rcParams[\"figure.figsize\"] = (18, 3)\n", + "\n", + " x = np.arange(-1.5, 1.5, step=3 / 256)\n", + " h = 3 * np.sin(2 * np.pi * x)\n", + "\n", + " (\n", + " convex_activation,\n", + " concave_activation,\n", + " saturated_activation,\n", + " ) = get_activation_functions(activation)\n", + "\n", + " y = apply_activations(\n", + " h,\n", + " convex_activation=convex_activation,\n", + " concave_activation=concave_activation,\n", + " saturated_activation=saturated_activation,\n", + " units=x.shape[0],\n", + " activation_weights=(1.0, 1.0, 1.0),\n", + " )\n", + "\n", + " plot_kwargs = dict(linestyle=linestyle, alpha=alpha, linewidth=linewidth)\n", + "\n", + " plt.plot(np.arange(x.shape[0]), h, label=\"$h$\", **plot_kwargs)\n", + " plt.plot(np.arange(x.shape[0]), y, label=r\"${\\rho}(h)$\", **plot_kwargs)\n", + " title = (\n", + " \"Applying \"\n", + " + (activation.__name__ if hasattr(activation, \"__name__\") else activation)\n", + " + f\"-based activations to {x.shape[0]}-dimensional vector\"\n", + " + r\" $h$\"\n", + " )\n", + " plt.title(title)\n", + "\n", + " plt.legend()\n", + "\n", + " if save_pdf:\n", + " path = Path(save_path) / (title.replace(\" \", \"_\") + \".pdf\")\n", + " path.parent.mkdir(exist_ok=True, parents=True)\n", + " plt.savefig(path, format=\"pdf\")\n", + " # print(f\"Saved figure to: {path}\")\n", + "\n", + " plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABbkAAAFFCAYAAADB3eDIAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAC/2klEQVR4nOzdd3wT9f8H8Fd20j0YpaWlrFJmyyyIbFAUmSqKA9xb8ev2+3X89OtXxYlbcICyFFBBmYLsPdsyWmaB0lKgpbvZd78/Ys8GOlKa9NL09Xw8eJBLPnd55XqXXN753OcUoiiKICIiIiIiIiIiIiJqgJRyByAiIiIiIiIiIiIiuloschMRERERERERERFRg8UiNxERERERERERERE1WCxyExEREREREREREVGDxSI3ERERERERERERETVYLHITERERERERERERUYPFIjcRERERERERERERNVgschMRERERERERERFRg8UiNxERERERERERERE1WCxyExEREREREREREVGDxSI3ERERERERERERETVYLHITkc+IjY2FQqGAQqHAqVOnfPY5vYErr7uxrhtvUr7+FQqF3FEahcGDB0vre8OGDXLH8TqN9T2hsb5uIndz5T2W+5v34d+kalw35CqbzQaDwQCFQgGNRgOTySR3JCKvxCI3kY+76667nApd06ZNkzsSERERkU86deoUvvnmG9x1111ISEhAaGgoNBoNwsLC0K1bNzz88MPYuHGjy8ubPXu203GcK/8eeOCBq8q+b98+vPTSS+jVqxdatGgBnU6HyMhI9OjRA/fddx/mzJmDnJycq1o2ERFdvbS0NKmwHR8fD71eL3MiIu/EIjeRDysuLsZvv/3mdN8PP/wgUxoiIvIVjbX3WWN93XJpSOt7//79SEpKQuvWrfHQQw9h3rx5SE1NRUFBAWw2G/Lz83HgwAHMnDkTgwcPxpAhQ3DmzBm5YwMALly4gLvuugs9e/bEtGnTsHfvXuTk5MBiseDcuXPYv38/Zs2ahcmTJ+Ott96SOy4RUYP6fHCH/fv3S7cTExPlC0Lk5dRyByAiz1m0aBHKysqc7ktLS8Pu3bvRu3dvmVIRERER+ZYjR45g165dTvfFxcWhS5cuaNKkCQoKCrBt2zacPXsWALBhwwb069cPmzdvRps2bVx6jvj4eAwbNqzGdtdcc43Luc+cOYPB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SdDpdEhLS8POnTuxdOlS3HfffXXOXR/ctW7KPf300/jkk0+k6SZNmqBfv36IiIiAyWTC/v37cfDgQYiiiO+//x7Z2dlYvnw5lMorT3LKzMyEKIpQKBTo0KEDOnTogPDwcGg0GuTl5WH//v04ceIEAOCnn35CUVERli1b5tKFxADg/fffl/aBtm3bok+fPvDz88OpU6eg0WhcWkZN3LmfuXN9LFmyBA8//LA0Xd4LpWXLllCr1SgsLMTRo0dx8ODBGq8l4M6/OQAUFBRg6NChSEtLk+5r3bo1+vXrB51Oh0OHDmHXrl347bffqlxGXXhiu3vqqafw2WefSdMqlQq9e/dG+/btodfrcfHiRSQnJ0u97Uwmk9Q2KChI6un1448/Shegmzx5cqW9QCsbk7gqd9xxB15++WUIgoA///wTFy9elIbYqsqKFSuQn58PwLFN9+vX74o27liHnnzd5crKyjB06FDs2rVLui8yMhIDBgxAQEAAjh8/ji1btsBut+PcuXMYM2YMFixYgFtuucWl5bvj/dWd+2p16rq+Pb0u3eXAgQPS7ejoaJfmKSgowKJFi3Do0CEUFhYiKCgIkZGR6NevH7p27eryZ87BgwelM3eCg4PRtm1b2Gw2zJkzB3PnzsWhQ4eQn5+PJk2aoFu3bhgzZgzuu+8+6HS62r/QGl6PnO+xADBjxgy8+OKLABy9YRMTE6FSqbBz504cPnwYALB69Wo89dRTmDFjBh577DHMnDkTSqUSvXv3RseOHSEIAjZv3ixdwPOnn35CQkICXnrppWqf292fWeXcdTxVX/s80DDeAwHPHw9eLU99hgLu307lPA7x5HbmyWP5ij25DQYDkpKScOHCBQQHB2PAgAGIiIjAuXPnsH79eum766JFizBu3DjccccddXpuogZHjso6EXlOWVmZU++cZcuWOT3+v//9T3qse/fuNS4PFX4R1mq1ol6vF+fOnXtFuy1btohRUVFS265du4oWi6Vel1tTb4gpU6ZIj7/22ms1vvbevXtL7b/77rures7LX6tOpxObNm3q1Cuh3MaNG53+dm+88UaV2e666y6pXVXrbt++fWK7du2k5y1v7609ud21bkRRFL/77jupbVBQkPjNN99Uut2sW7fOafuaNm1apct77733xFmzZokXL16s8jk3bdokrW8A4pw5c6rNWPG1q9VqMTg4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oz///HOp/dChQ8WQkBBp+uDBgzXO74l16KnX/eijj0pt1Gq1+Pnnn4t2u92pzbFjx8TevXtL7YKCgqpdj+58f3XnvlobV7O+PbEuXSEIgjhlyhRpmUqlUlywYEGdljlr1iyxd+/e4g8//CAWFBRU2sZoNIqffPKJaDAYpOcOCQkRs7Oza1z+1KlTpXn8/f3FX3755Yo2GzZsEJs2bSq169u3rygIQp1eVzlPvMe6+9gjIyNDatuqVasa269fv15qP2jQoCrbufszy93HU+7c533hPVAUPfOZcjXfXVxV189QUXT/dir3cYi7t7PabmO1cejQIWnZHTt2dGmemJgYaZ6q/k5Evk4hig34/CgiQo8ePaRfbadMmYLZs2fXehmDBg3Cpk2bAACTJ092Gv6k4q/806dPl351b9++PZKSkqDRaHDw4EGnMcsCAgKwYcOGasee9MRyY2NjpTG1MzIyEBsbW+Nrf//9951+qQccp6eNHTu2xnldfc6Kr9WVt9zBgwdj48aNAID169c7DU9SLjc3F0lJSTh58qR0X3mvDa1Wi/T0dGzfvh2iKOKWW27BxYsXpWVu3Lixzqcau/K65Vo35V577TX897//laZVKhUSExMRHx+PgIAAlJSU4OzZs0hOTkZhYaHUrri42Okq7BcuXECXLl2cxjXv0aMHOnXqBIVCgX379uHQoUMAgOuvvx7NmjXDnDlzAACzZs2qssdbbV/71fDEfubO9bFhwwanU9YjIiKQmJiIiIgIqNVqnD9/Hnv37nUaB3PAgAHYsGGD02nD5dz1Ny+Xn5+Pfv364ciRI9J9bdq0Qb9+/aDT6XDo0CHs2rULoihiwoQJyMvLc3n7rImntrvHHnsMX331ldM66t27N+Li4qDX63Hx4kXs379futjSb7/9hnHjxl2xnDVr1uC6666TppOSktCjRw/4+flJ9z366KNo27atNF3b9+jc3FxERkZecRpy9+7dsW/fvmrnBTyzDj31usvKyjB48GCnfbFly5a49tprERAQgBMnTmDTpk1Szzi1Wo0FCxbglltuqfL1u/P91d37qquuZn17Yl264ssvv8Tjjz8uTbdv394pe00qnklTbvbs2dKZZWq1GvHx8YiPj0doaCjsdjuysrKwfft2p3G4DQYDVq1a5dLnvNlsxogRI7B582bpvo4dO6J3795QqVRITU2VLpwJAC1atMDOnTsRHR3t8uuqjifeY9197HHq1Clp/PJWrVo5XYiuMhX3lUGDBmHDhg1VtnXnZ5a7j6fcuc/7wnsg4JnPlKv57uKqun6GlnP3sZWcxyHu3s48eSw/b9486YzrO+64o8YhKi9duiT1bg8LC/OZaxgQ1ZospXUicovU1FSnX5DXrFlzVcuZOXOmU0+eir+847JfqF999VWnnt+X/4uMjBS3bNlS43N6YrlX0xviwoULTj2DWrRoIVqtVpfmdfU5L3+tNXG1t/Lp06fFxMTEKtcZAHHs2LFiUVGReM0110j37d+/3+XXVxVv78ld7ueff5Z61Ljyr0+fPqLJZLpiOdu2bRObNGlS7bzjxo0TCwoKnHryeVNPblF03/7rrvWxY8cOUa1Wu/z3ueWWW8SioqJqs7nrb14uKytL7NWrV7XLGDNmjFhUVFTr7bO+1vPlpk+fLgYFBdW4bhQKRZU9qERRFCdNmlTt/Jevg6t5j77pppuuWO6HH37o0ryi6Jl16KnXXVxcLE6cOLHGv0uLFi3EFStW1Pjaa/seU93264l91VW1Xd+i6P516YrXX3/d5fVT2b/KXN6L0pX3s8OHD9cqd0FBQY3rGICYlJQknjlzxh2ryom732MbSk/ucu76zHLn/i6K7t3nfeE9sJy7P1M82ZNbFOv+GVrO3cdWch2HiKJ7t7PabmO18dxzz0nLfv/992tsv3btWqn9sGHD3J6HqKFgkZuoAXv22WedPogvP93KVZcuXXIazqLigVhlH97bt28X7733XrFdu3ain5+fGBwcLPbs2VP83//+V+XptJfzxHKv9kBx6NCh0nwvvfSSy/O5+pyeOMguZ7VaxZkzZ4pDhgwRmzZtKmq1WjEmJkYcPXq0+Msvv0inFMfHx7v1ILqhFLlFURRNJpM4e/ZscdKkSWK7du3E4OBgUaVSiUFBQWLHjh3FCRMmiB9//LF45MiRapdz/vx58eWXXxa7dOki+vn5iX5+fmLbtm3FiRMnir///rvUzpuL3KLonv1XFN23Pi5duiQuXLhQfOqpp8QBAwaIkZGRok6nE9VqtRgWFib27t1bfPLJJ8WdO3e6nM1df/NyNptN/P7778Vhw4ZJ+1l0dLR40003iYsWLZL2M3cXuUXR/dtdudzcXPGDDz4QR4wYIUZFRYk6nU7U6XRiVFSUOHz4cPG///2vePTo0WqXIQiCOG/ePPGmm24SW7Zs6XTKemXr4Greo3/++WenZapUKpeGYajI3evQ069727Zt4qOPPip27NhRDA4OFrVarRgZGSled9114qeffiqWlJS49Lrd/f7qiX3VFbVd3xW5a126whNFbpPJJG7dulV8//33xZtvvllMTEwUW7ZsKRoMBlGn04nNmjUTk5KSxKlTp4qbN2+uU/6NGzeK999/v9ihQwcxICBANBgMYmxsrHj77beLv/76q9uGKKmMO99jG1qRWxTd85nlieMpd+3zvvIeWM6dnymeLnK74zO0nLuPreQ4DqnIHduZJ4/lhw0bJi3blY5s77//vtT+2WefdXseooaCw5UQUbU8dRpWfQzV4IrS0lJERESgpKQECoUCR48eRbt27WTL4wllZWUIDg6GzWaDv78/ioqK6nT6OBERERERERGRN2GVg4gatZ9//hklJSUAHGPx+VqBGwB+/fVX2Gw2AI6xA1ngJiIiIiIiIiJfwkoHETVaoijis88+k6YfeeQRGdN4Rn5+Pl555RVp+o477pAxDRERERERERGR+7HITUSN1ueff47k5GQAjqubjx8/Xt5AtXTbbbdh8eLFMJlMlT6+detW9O/fX7pqe1RUFO688876jEhERERERERE5HFquQMQEdWXXbt2Yf78+bBYLEhNTcXWrVulx958801oNBoZ09Xezp07sXDhQgQEBKB79+5o3bo1DAYD8vPzsW/fPhw/flxqq9FoMGvWLAQGBsqYmIiIiIiIiIjI/XjhSSKqli9deHL27Nm49957r7j/1ltvxcKFC+slgzvFxsZKvbSr06JFC/z4448YPnx4PaQiIiIiIiIiIqpf7MlNRI2SXq9HXFwc7r33Xjz55JNyx7kq69evx2+//YbNmzfjxIkTyM3NRV5eHjQaDZo0aYLu3btj5MiRmDx5MgwGg9xxiYiIiIiIiIg8otH15BYEAdnZ2QgMDHTqSUpERERERERERERE3kMURRQXFyMyMhJKZdWXl2x0Pbmzs7MRHR0tdwwiIiIiIiIiIiIickFmZiZatmxZ5eONrshdftG1zMxMBAUFyZyGiIiIiIiIiIiIiCpTVFSE6OhoqaZblUZX5C4foiQoKIhFbiIiIiIiIiIiIiIvV9Ow01UPZEJERERERERERERE5OVY5CYiIiIiIiIiIiKiBotF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/tS+ffta6/XynwkTJsiFhYW17sdut8v33HPPFfdx7733yna7veneHFEzMG3atDrVcOVPbZxVw3l5eXJCQkKt+9DpdPKSJUuc/c9A5JEaWt+bNm2q0+u8vLzkxYsXXzVPenq63Llz51r34+vrK2/YsKEx/imIPE59ahuA3L59+1r3xWM4ketxRo3zOO76eCV3M3Dq1Cn85z//wffff4+srCxotVpERkbitttuw8MPPwwvLy+lIxLRn7Zs2YItW7Zgx44dOHHiBPLz81FcXAwfHx+Eh4dj4MCBmDZtGgYMGFCn/f3www/48MMPsWfPHuTn5yMwMBAJCQmYNWsWr/ggagTTp0/HJ598Uuftr/YxzBk1bLPZsGTJEqxYsQJHjx5FWVkZQkJCcP311+Oxxx5Dt27d6pyXqDlraH2XlJRg/fr12LFjB5KSknD27Fnk5+fDZrOhVatW6NatG66//nrMmDHDcWXY1ZSVleHdd9/F6tWrkZGRAYvFgvDwcNx000147LHH0L59+3q9R6Lmqr7z07Rv3x4nT5684jY8hhO5DmfUOI/jro9NbiIiIiIiIiIiIiJyW6LSAYiIiIiIiIiIiIiIrhWb3ERERERERERERETkttjkJiIiIiIiIiIiIiK3xSY3EREREREREREREbktNrmJiIiIiIiIiIiIyG2xyU1EREREREREREREbotNbiIiIiIiIiIiIiJyW2xyExEREREREREREZHbYpObiIiIiIiIiIiIiNwWm9xERERERERERERE5LbY5CYiIiIiIiIiIiIit8UmNxERERERERERERG5LTa5iYiIiIiIiIiIiMhtsclNRERERERERERERG7r/wESMGuEljGIzQAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABbkAAAFFCAYAAADB3eDIAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAADRSElEQVR4nOzdd3wUZf4H8M/2Td00AukJCaH3EnovVpqAHbCLnuXUU7k7z/N3nuXUE0/uFBsIqAgWVEBEpPfea0J6SE82dbPZ3fn9sWbIQpLdhN3MbvJ5v155vXZmn5n57mTqd555HpkgCAKIiIiIiIiIiIiIiDyQXOoAiIiIiIiIiIiIiIhaikluIiIiIiIiIiIiIvJYTHITERERERERERERkcdikpuIiIiIiIiIiIiIPBaT3ERERERERERERETksZjkJiIiIiIiIiIiIiKPxSQ3EREREREREREREXksJrmJiIiIiIiIiIiIyGMxyU1EREREREREREREHotJbiIiIiIiIiIiIiLyWExyExEREREREREREZHHYpKbiNqs2NhYyGQyyGQypKWltdllEtVXt/3JZDKpQ2nzxo4dK67rbdu2SR2O22nPx8P2/NuJnMWRYyz3NffD/0nTuH7IESaTCV5eXpDJZFCpVDAYDFKHROQRmOQmamfuuecemyTYm2++KXVI1AbUvxFt6M/Pzw/R0dG44YYb8NprryE7O9tt4v373//eonmkpaXZ/Mbm3qg4IwYiIpJWWloaPv74Y9xzzz3o27cvAgMDoVKpEBQUhD59+uCRRx7B9u3bmzXPZcuWNXlObejvwQcfbHbsR44cwYsvvohBgwYhLCwMGo0G4eHhGDBgAO6//36sWLECubm5zZ4vERFdn7Nnz4qJ7W7dukGr1UocEZFnYJKbqB0pLy/H999/bzPu888/lygaak8qKiqQmZmJX375BX/5y18QFxeHV155BYIgSB0aETmgvdY8a6+/WyqetL6PHj2KpKQkxMXF4eGHH8YXX3yBEydOoLS0FCaTCSUlJTh58iQ++ugjjB07FuPGjUNGRobUYQMA8vPzcc8992DgwIF48803cfjwYeTm5sJoNOLy5cs4evQoli5dirlz5+LVV1+VOlwiIo86PzjD0aNHxc/9+vWTLhAiD6OUOgAiaj1r1qxBVVWVzbizZ8/i4MGDGDx4sERRUVszePBg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uSdMmCDO15GKam+99ZZY/tlnn3VqLESejM2VEFGzuOoVLVfNt7kqKyvRqVMnVFRUQCaT4cKFC0hISJAsHleoqqqCTqeDyWSCj48PysrKruv1ciIiIiIiIiIiKTGrQURUz9dff42KigoA1rb62lqCGwC+++47mEwmANa2BZngJiIiIiIiIiJPxswGEdHvBEHA+++/Lw4/+uijEkbjGiUlJfjrX/8qDt91110SRkNEREREREREdP2Y5CYi+t3ixYtx7NgxANaez2fMmCFtQM10++2345tvvoHBYGjw+927d2PEiBFij+4RERG4++67WzNEIiIiIiIiIiKnU0odABGRVA4cOIAvv/wSRqMRJ06cwO7du8Xv/u///g8qlUrC6Jpv//79WL16NXx9fdG/f3/ExcXBy8sLJSUlOHLkCJKTk8WyKpUKS5cuhZ+fn4QRExERERERERFdP3Y8SUTN0pY6nly2bBnuu+++a8bPnj0bq1evbpUYnCk2Nlaspd2UsLAwLF++HBMnTmyFqIiIiIiIiIiIXIs1uYmIAGi1WiQmJuK+++7DE088IXU4LbJ161Z8//332LlzJ1JSUlBYWIiioiKoVCqEhISgf//+uOGGGzB37lx4eXlJHS4RERERERERkVO0u5rcFosFOTk58PPzs6k5SkRERERERERERETuQxAElJeXIzw8HHJ5491Ltrua3Dk5OYiKipI6DCIiIiIiIiIiIiJyQGZmJiIjIxv9vt0lues6WcvMzIS/v7/E0RARERERERERERFRQ8rKyhAVFSXmdBvT7pLcdU2U+Pv7M8lNRERERERERERE5ObsNTvdeEMmRERERERERERERERujkluIiIiIiIiIiIiIvJYTHITERERERERERERkcdikpuIiIiIiIiIiIiIPBaT3ERERERERERERETksZjkJiIiIiIiIiIiIiKPpZQ6ACIioutlqK5EQVYyyosuw1RdAVOtAWkhY2GotcBksUCrVCC4JgOdkYO48A6A2g/QRQA+oYCcz3uJiMh18soMKK40oqy6FqXVtdBX16LWbIFCJoNCfuUvLsQHfSIDpA6XiIjaCUEQkF5UhYKKGhRV1MBQa4FFEGCyCLBYBJgFAV4qBQK8VUjs6IfIQG+pQyZqEpPcRETkUYRaA2T5p4GCC4A+EyjNQPqlS6g2msUycgA/hybAIlOI45IqdqILdgMZ9S7OFCocL/dDtXc4NCFx6Jg4GGHRXSBj4puIiJrJbBFQUWOCzktlM/693y4iT2+wO/2Unp1sktyCIGDR5ouID/VF145+6NzBByoFz09ERNR8lTUm1JgsCPJR24x//eezMJkFu9PfOSTaJsltMlvw3ZFsxAR7I66DDzr4aiCTyZweN1FzMMlNRERuTRAE5JYZcDJLj/zz+zAkcykSO2htynipFDZJbgBQCzUwyLxthhUK2wsvi8kIFF+CtugSkLkL+UdX4IJ3DNIGLETvSB26h/nDW81TJRERNcxosuBUjh5H0ktwLLMUMcHe+NOUbjZlArxUDiW5O/hpbIZLqmpxKluPU9l6AIBSIUPnDr7oGe6PpLjga8oTERHVEQQBlworcTC1GOdyy5FVUoVh8SF4YGScWEYmkyHEV4NcB85RAd62D3CzSqrxy+lccTjYV42BMYEYGBOI+A6+THiTJHjnTkREbqmyvBQHLhVhW1o1skqqAQA+Zj/0NhhgsmiglP9+4aTUQBkaCYM5CJqgSCi9/KHS+ODx8B7QaL2gkstRYzLDVKSByjQC0FqA6hJAn4nqgjQIKANwpfZCthCCnRcLsfNiIRRyGQbEBGJ8WC26JCSyhjcREcFsEXAsswT7U4txMksPo8kifpdWWAVBEGxu7gfHBiE2xAc6LxUCvFTw91JBq1LAbLHAbAFMFgssFiAy0MtmOUUVNTbDJrOAC7nluJBbju+PZCOhoy+Gdg7G4Ngg+Gp4W0dERNYmsvZdKsK+S0XIL7M9j5zPLbum/LiuoTCaLQjx1cBLpbBpRksuA6qMZuira9G5g6/NdKlFlTbDRRVGbDqdh02n86DzVqF/dCCGxwejc4gPE97UamSCINh/L6ENKSsrg06ng16vh7+/f4vnIwgCamtrYbFY7BcmskMul0OlUvHgT+2eYLEg/fwR5B5ZD3XOQRzxGoa9vpNtysyp/BIDu8cjJGEwENQZ8AkBrmPfqTFUoTAnFQWXTsCQfgjbLP1xUdVV/F5tqcaDhW+ia1wMfHtMBjqPAbwCW7w8IiLyTBU1Juy4UIAt5/JRUmm85nutSoFeETrMGx7jlLeABEFAYYURF/LKce735HbhVYlvAFAp5Pj37X355hERUTtlsQg4nFGCX8/kISW/4prvZTIgMtAbXTv5YfbASCid0PRVRY0JlwoqkFpYiYt5FTiXW46G0osJob54/oZuUMiZ66CWczSXyyR3M1VVVUGv16O8vBxms9n+BEQOUigU8PPzg06ng7c3O3SgdkYQUJF6AKc2fgJteYY4ukrui6Uhf0JcRx0GRAeid6QO4TqtSx8IGU0WnM8tx4nsUhxMLUZs8W7cVLMBiR39rAVkCiB+HIQe0yHz7eCyOIiIyH1c1lfjlR/PoNZsW8HFR6NE/+gADIwJRPcwf5e3mV1QXoODacXYk1KIy6XW18t7RujwzKREly6XiIjc16G0YnywLcVmnEwGdOvkj6Gdg9E/OgA+Ln7jp6LGhOOZpTicXoLTOXqxne9BsUFYMDbepcumto9J7kZcT5K7vLwcWVlZUKlU8Pf3h4+PD+RyOWvf0nURBAEWiwWVlZUoKytDbW0tIiMj4efnJ3VoRK4nCEDOEeDktxCKk3ExrwJVv7etbVZ6wxwzCpFj5iK8Q4gk4ZnMFpw7tgehmb8gtOrClbAhILnAgOKwkUgcdy8CO4RJEh8REbUOQRDwtx9OI6e0GjIZ0DsiABO6h6J7mL8ktdMEQUBmcTX2XSpCQkdfDIgOtPluyY5LGBwbiAHRgbxXISJq48wWAQu/O4GiCiMiAr0wPD4ESXFBCLyqk8nWYqg141BaCTafzcM9Q6OREHoltyEIAradL8Cw+GBoVQpJ4iPPwyR3I1qa5K6qqkJ6ejr8/f0RHh7Oi0VyCUEQkJOTg7KyMsTExLBGN7VpRSlHEJz8LVCULI4rq67FGUMQ/PrNQJdBE6DWaJuYQysrzwNSfgMu/IKyinJcKrC2QyfIFDDGjUePyffDTxckcZBERHS9KmpMOJmlx7D4YJvxe1IKkVZYhYndQxHq70bnp6scySjBf7dYz61dOvrhriHRiA7mNSURkacTBAGH00uQozdgat9wm++OZZZCpZChR5i/2+Sr6tKN9ePZk1KIT3emQuelwtR+4RjVpQObMiG7mORuREuT3JcvX0ZlZSXi4+Pd5oBBbZMgCEhJSYGPjw/Cwlg7lNoefXUt1u47g14H/4xuoVr41LUhGhADofdsIGKge3fwWFOO89u+QuXJnyA3X2mT9Zz/CERMXICRCSE8TxAReSCzRcCvZ/Kw7kQOqo1mvHRLD8SG+EgdVrMt3Z2KXRcLxWGZDBiZEIKZAyPhr1VJGBkREbVURlEVvjqYgQu55ZDJgJdv7YmoIM96gCkIAv78/UmbDjE76rS4fVAU+kYFSBcYuT0muRvRkiS3IAi4ePEiAgICEBoa6uIIiYD8/HyUlpaiS5cuTJZRm2GxCNh+oQDfHslCtdGMIRVbMda4DV269oC892wgash1dSDZ2sr1xTi39Usokn+BUVBiRfDTMMi9kRDqi3uGxnjcRScRUXuWUVSFz3anIrO4ShzXK0KHP3pgW9eCIOB4lh5fH8xEfplBHK9VKzC1bzgmde8IOWvNERF5hMoaE749koUdFwpQP3t3U+8w3DYwUrrAWihXb8C3R7JwJL3EZvyQuCDcmRTNh7HUICa5G9GSJLfRaERKSgqio6Ph4+N5tTnI81RUVCAzMxPx8fFQq6VpR4vImbIvncPnp6qRUmwSx/mqgfsiL6PvyFvcu+a2HfqiPGzadxQbC6681i6TyTAzqgIThg+BRstkNxGRuzKaLPjpeA5+PpVb77VqYFh8CGb0j0CQRO2ZOoPJbMHms/n46UQODL/3dwEACaG+eGBknFs3uUJERMCpbD2W7k5DadWVt0dD/TW4fXA0+kbqPLpCXHJ+BdYczkRyXoU4zkejxF1J0UiKC/Lo30bOxyR3I1qS5DYYDEhNTUVsbCy8vLxcHCERUF1djbS0NMTFxUGr5Q0IeS7BYsHRX7+A7PhXOOw9Ant9JwMAhieEYPagtvXa9OkcPb7Yn4E8vQFe5grMLVqE2KhIhE55DgiKkzo8IiK6ysW8cizdk4Y8/ZXazhGBXpg/PBadO/hKGJlzlRlq8f2RbOy8eKUWoFopxyvTeiLUj9eZRETuxlBrxupDmdh+vkAcp1UpcGvfcEzsHgqlwnMrCNUnCAL2phThq4OZqKq5UhmqT2QAHhsXD1Ub+Z10/RzN5SpbMSaPxydJ1Fq4rVFboC/Kw5nv34BX0RkAwICq3SgOHY7pYwYhsaOfnak9T89wHV6Z2hMbT+WiesdidPQyo4NQAGz6K9DvLqDrTR7VHAsRUVtlsQhYd/IyfjyWLSZ9FXIZbukbjpt6dWozyYM6/loV5g2PxYiEYHy6KxX5ZTXoGxXABDcRkRvKLzPg379eQEH5lXare4b7Y/6IOI9+u6ghMpkMwxNC0DNChy/3Z+BQWjEAwEstZ4KbWoRJbiIicr6sQ8j+/k14VZVZh2UymBNvwjM3j4BS1bYuzupTKeS4tW848oIfQNCxDyErywAsJuDIciDnGKoHPgovXbD9GRERkcsYzRbsv1QkJrg7d/DB/BFxiAho229sJoT64eVbe+Kn4zm4sTc7NycickdBPmpolNYEr1opx5zBURib2KFNV4TTeamwYGw8jmQE4Yej2bhjSLTUIZGHYnMlDqhrroRNR1Br4TZHHstsAo6uAC5sRLXRjAv55TCqdAie9Cw690qSOrrWZa4Fjq8Czq0DAJRWG5GslyNo8vPtb10QEbmZrJIqvLbhLG7oFYZbeoe1+44YT2XrkZxfgal9w9v9uiAiklpmcRVWHczAvGGx7a7/BEEQrknoJ+eXI8BbjRBfjURRkdTYJncjmOQmT8BtjjySoQzYvQjIOy2OuuzXG35jHoevf6B0cUnt8gnU7HofF9IyYbYIEGRyyAbOQ99xczy6w00iIk8hCAJqTBZoVQqb8eWGWvi1ob4hWqqwogb/99MZVNaY0CtCh4dGd4avhi/8EhG1hsziKmhVCnTwYwK3IaVVRvz9x9MwC8CDI+PQNypA6pBIAo7mcnl3TURE1y074xIuLH8CQu4p6wi5Ehj8EMJu+Uv7TnADQFgfGCe/iYqgXgAAmWABDi3F3tVvo9ZskTg4IqK2zWiy4MPtl7Bo88VrjrlMcFtdyCtHldHa4depbD3+76fTyCiqkjgqIqK2b29KEf65/iz+ty0ZRhPvCxryzeEslBtMqKox4f0tF/HL6Vy0s7q61AxMcpNbMxgMUKlUkMlkePXVV6UOh4gacDi9GP/anouscgty9AZAqwMmvAx0mciOFn/npwtC0vw3Udv1VnHc7pIAvP3LeeirayWMjIio7dJX1+KtX87hUFoxLuaVY/nedKlDckvD40Pw7OSu8NNaa28XVRjx2oazOJpRInFkRERtkyAI+O5IFj7ZeQm1Zgsyiqqw8XSu1GG5pbuSojEgxlppShCA1QczsWJfOkysLEQNYJKb3NqpU6dgMllrlvTt21fiaIioPkEQsO5EDv63NQUVZhV+0t2DFEU8aia+CnRIlDo8tyNXKDB4+h+gGv00jvqNxTmv/kjOr8A/1p1BZjFrzBEROVNWSRX+uf4MLhVUAgA0KjkGxrTzN4ua0D3MH3+7tSfiQnwAALVmC/67NRlbzuVJHBkRUdtiMlvwyc5UrD9xWRw3qksIbujZScKo3Je3WonHxsbj1r7h4rjt5wvw3m8XxbeQiOowyU1u7fjx4+JnJrmJ3IfFbMaqPefx/ZFscVyPxC4Y+sA70PiHShiZ++s57EaMm/MkAn3UAICSSiPe3HgOyRlZEkdGRNQ2nMzS4/UN51BUYQQABPqo8eIN3dGP7Xg2KchHjRdu7IahnYMBWGvMfbEvA2sOZfLVcCIiJ6gymvDu5gvYd6kIgPWl1zuHRGP+iDiolUzPNUYmk2F6/wg8MCoOit87Rz6TU4bXNpxFfrlB4ujInXAvIrd27NgxAEBAQACio6OlDYaIAAC1xhrs/+LvCNr/NpQWawLhtoGReHAUL84cFRvig5du7iHWmIssO4aK1QtQk7Zf4siIiDzbvktFeO+3izDUmgFYj7d/vbk7ooO9JY7MM6gUcjw4Kg439Q4Tx208lYvPdqdJFxQRURtQXGnEGz+fw7nL5QCsx9vHxiVgYo+OEkfmOYbHh+BPU7rC5/fOkS+XGvDGhnN8K5ZEzEaQW6tLcrMWN5F7MFRV4NDnL8Dr8gF0rM3EjeVr8MDIWNzUOwwytr/dLDpvFZ6b0hUjg/SYXPYNOgeqoNnzLpCyRerQiIg80tbz+fhk5yWx1vGAmEA8f0NXBHirJY7Ms8hkMtw2MBL3DIsRu9boHaGTNigiIg+WU1qNV9efQXZJNQDAV6vEn27oigHRbEarubp09MNfb+6OTjotAGv/G8n5FRJHRe5CKXUARI0RBAEnTpwAwCQ3kTsoKy3CmS8Xwqvc2nGXRa5Cr9EzkZDQQeLIPJdWpcC9N45GseYY/IsOAhCA/UsAgx7oMZ0ddxIROehwejFW1utYcmzXDrhnaAwfwF6HcV1DEeitRkF5DYbEBUkdDhGRx9p2vgD6Kmtn86H+GvxxYiJC/bUSR+W5Qv21WHhTdyz69QJ6R+owrhubyyQr1uQmt5WamoqysjIAV5LcmzZtwpw5cxAdHQ2NRoOIiAg8+uijKCoqkjJUoravugTeO15FUI213Wiz0hvBU19FQv/REgfm+ZQqNUInPwt0venKyOOrcHnnMggW9hpOROSI3hEB6BbmBwC4sXcYE9xO0i8qAJMaeJXebGEb3UREjrp9cBQGxQYhJtgHC2/qzgS3E/hqlHj+hm6YWq9DSiLW5Ca3VddUCQB07twZs2fPxjfffGNTJicnB0uWLMHOnTtx8OBBeHuzvUUip6suAX77B5QVOYgL8cH5MhXCbn0FHaO7SB1Z2yGTAQPmAlodcPwr5JcZkLd3FbJKqjHo1kchk/OZNBFRU9RKOZ4Y3wWH00swIiFE6nDatN3Jhfj1TB6emZwIf61K6nCIiNyeQi7DQ6PiUGsW4KVWSB1Om9FQf1BHM0pgNFmQ9HsnytS+8K6Z3Nbx48fFz3/5y1/www8/4KGHHsL69etx6NAhfPXVV+jRowcA4MyZM1i+fLlUoRK1Xb8nuFGWDQBQ+YWi17xFTHC7gkwG9JyO/MS7kaO39hKuOvcDDv30IWt0ExFdRRAEVBlNNuO0KgUT3C52OL0YS3enIrO4Cv/aeE58/Z6IiK64mFeOnNJqm3FKhZwJbhc7k1OGD7al4OOdqTiUVix1OCQBJrnJbdWvyX3u3Dns3LkTH330EW666SYMHDgQd9xxBzZt2gSNRgMA2L17t0SRErVN+pIinFn5J5hLrU2UwDsEmPgy4Ms2z1wpdNBUyAbfJw6rzv2Ag+s+FjtSIyJq7wRBwJpDWfjn+rMorTJKHU67EhHgDZ2XtSPPy6UGvPnLOeirmegmIqpzIa8c//71At7+5TzyygxSh9OuHM8qhdkiQBAELNlxCUczSqQOiVoZk9zkturX5F69ejWSkpKuKRMREYEuXaw1Sisq2KMukbPoq2rx763puFihRUpBBUzaICa4W1Hf8XeIiW6zTIn1uTp8fzSbiW4iIgBrj2Xjl9O5yNUb8K9fzsNo4tsuraWTTosXbuyKYF9rojtPb8C/N51HZY3JzpRERG1famEl3tt8EUaTBfrqWmw4eVnqkNqVOwZHiW90WSwCPtiWgpNZeomjotbkdm1yHzp0CBs2bMCuXbtw5swZFBQUQKVSITw8HCNGjMADDzyAkSNHSh2mXb+czsWm03l2y8UEe+PJCbav/f/nt4tIL6qyO+3knh0xpWcncdhQa8Zfvj/lUHxPjE9AbIiPOHw8sxTL6/VI3xiNSo7XZvR2aBnXo7S0FOnp1nimT5+OCRMmNFq2LrkdHMw2l4icoaLGhHd+PY/sMjMuB9wFoWYjgkc8hGAmuFtV3/F34Jggw48pArLU8cg6cRlqpRy39GHnKkTUfv10PAfrjl9JGkzu0bHBNjnJdUL9tHj+hm544+dzKKk0IqukGos2X8Czk7tCq+Kr+ETUPmWXVuPdXy/AUGsGAPSM0OGeoTESR9W+yGQyzB8eC7NFwL5LRTBbBPx3azKemtgF3cP8pQ6PWoFbJblHjx6NnTt3XjPeaDTi4sWLuHjxIpYtW4a5c+fi448/hlqtliBKxxhqzQ69Phnkc21nLeWGWoemrTt41hEEOPzKpumqHtGNZotD07bWhWv9pkrmzZvXaLnq6mpkZGQAAOLj410dFlGbZ6g14z+/XUR2ibUNOZ2vD0bM+guC/TQSR9Y+9ZtwO4rC8/Dlfutx7vsj2fDVKDG2Kx84EFH7s/FULtYezRaH70qK5vFQIiG+GvxpSle88fM5lFXX4lJBJd7fchFPTUjkQwcianfyywx4p95bLV06+uHxcfFQKXg8bG1yuQz3j4yDySLgUFoxas0W/Oe3i/jjpEQkdvSTOjxyMbdKcufk5AAAwsPDMXv2bIwaNQrR0dEwm83Yu3cv3nnnHWRnZ2P58uWora3Fl19+KXHEjdOqFAjwtp+E92ugR3I/rcqhaa9OOMtkcGg6AFDKZTbDaoXcoWk1qtY5SNdvqmTUqFGNljtx4gQsv3fI1qdPH5fHRdSWmWqN2LXq38g1DgIUOvhplXhuSld0YIJbUhO6d0SNyYJvD1vbRj/z20p00vdEtyFTJI6MiKj17E4uxJpDmeLw7EFRmNC9o4QRUUd/LZ6ZlIh//XIeVTUmnLtcjg+2peDxcfFQMrFDRO1EcaURb286L3bEGxvig6cmdIFGyTdbpKKQy/DQqDiYzBYcyyyF0WRNdL9wQzdEBXlLHR65kExwowY+b7nlFsydOxe33XYbFIprDwiFhYUYMWIELly4AADYvn07Ro8e3axllJWVQafTQa/Xw9/fsdcVDAYDUlNTERcXB61W26zlUcvcd999WLZsGaKjo8VmSxqyZMkSPProowCA7OxshIe3jdf4uc1RaxMsFuz/4u/Q5uxHuSIAP4c+gEdvHonoYF4EuANBELDmYCYq9n+OIYbd6NxRB+9JfwHC+HCPiNq+45mleH9LstgvwfT+Ebi1b9u45msLUgoq8M6m86iptUCtlGPhjd15/UBE7UK5oRZv/HwOuXprB5PhAV544cZu8NW4VX3SdqvWbMHiLck4lW1tlzvQR41/zujFBxAeyNFcrls9Yl+3bh3mzJnTYIIbAEJCQvDOO++Iw998801rhUatrK65kn79+jVZ7ujRowCA0NDQNpPgJmptgsWCA9/+G9qc/QAAH6ESDw0K4g2qG5HJZJg9KBIDOqmQEOoLbyWAnW8DhclSh0ZE5FIpBRX4YFuKmOCe0L0jbukTJnFUVF98B188OaELdF4qPDs5kdcPRNQuGE0WvL8lWUxwh/pr8OzkRCa43YhKIceCsfGIC/GBQi7DHYOjmOBu49wqye2IcePGiZ9TUlIkjIRcpba2FmfOnAHgeJLbXjkiatz53z6H5tKvAABBJofPuGcQ12OQxFHR1WRyOfrd9ido45KsI0w1wLbXgbIcaQMjInKhfZeKUGu2Nk03KDYIdw6JgkwmszMVtbZunfzxxm19kBDK9k6JqH1QKWTo1sl6zNN5q/Ds5K4ONx9LrUerUuCpiV3wpyldMSg2SOpwyMU87hFTTU2N+LmxGt/k2c6ePQuj0doJZlPJa7PZjJMnT9otR0RNSN2BxPyfkeGtQmlVLVTDF6DroPFSR0WNkSuA4U9Zk9v5ZyAYy5H53d8QMP1N+AcESx0dEZHT3TUkGiq5HOnFlXhwVBwT3G6soQ4nCytqEOLLvj2IqO2RyWSYOSASIb4axAb78Fjnxvy0qgb7w6O2x+Nqcm/fvl383L17dwkjIVepa6oEAPr3799oufPnz6O6uhoAk9xELZJ/Fti/BHKZDDHB3ugw6j70GjlV6qjIHqUaGP0nmP2jkFZYheK8TJxZ9RKMNQapIyMicjqZTIY5g6Pw9MREqNiZoccQBAFrDmXir9+fQnJ+hdThEBG5zOjEDmymyQNtPZ+PFfvS4UbdFJITeNSVosViwRtvvCEOz5kzx+40NTU1KCsrs/kj93b8+HEAQEBAAGJjYxstV9dUCdB0MpyIGlB2GdjxNmAxAQBkCZMQMex2iYMih6m9UZ70LArN1gtqrT4Fh1e/BsFikTgwIqLrY7EIKK0yXjOeCW7Psu1CATaeykWt2YL//HYReWV8EEtEnu9wegku5pVLHQZdpx+P52Dl3nRsO5ePX8/kSR0OOZFHXS2+++67OHDgAABg5syZGDhwoN1pXn/9deh0OvEvKirK1WHSdaqryd23b1+Hynl7eyMxMdHFURG1HRXlpTj15ULUVFl7mUZYX2DQ/QBfAfcoAR3CED7tZVjk1rb/vHL24+D6TySOiojo+nxzJAt///E0kvOZRPBkoxJC0C3M2lZtZY0JizZfQEWNSeKoiIhaLqWgAh/tSMHbm87jYFqx1OHQdehQr2mZ1YcycTyzVLpgyKk8Jsm9fft2vPjiiwCA0NBQfPDBBw5Nt3DhQuj1evEvMzPTlWGSE9TV5Ha008nevXtDLveYTZlIUrVmC97fmY3DtbG4mFcBvSYMGPG0ta1n8jgRnXvCd/wzgEyGCoUO3+SFY9fFQqnDIiJqkZ0XC/DLqVyUG0z4968XUGaolTokaiGlQo7HxyUgItALAJBfVoMPtiXDZOYbR0TkeYorjVi8JRkmswCTWcCpbL3UIdF1GBYfjFv6hgEABAFYsiMFmcVVEkdFzuARHU+ePn0aM2bMgMlkglarxZo1axAaGurQtBqNBhoNOwDwJIWFjiVoNm/e7OJIiNoWQRDw+Z40JOdXIdnvZtR4h2HWqFsANduQ82SJA8fhUEUlvk72RpXCD5/vTUMHPw26/t7bOxGRJzifW47le9PF4dkDo+DPTqI8mrdaiacmdME/1p1BucGEc5fL8fWhTNydFCN1aEREDqsxmfH+losoq7Y+eO3ayQ/3DuVxzNNN7xeBXH0NDqUVo6bWgve3XMRfbu4BnRevPTyZ21d/TU1NxeTJk1FSUgKFQoFVq1Zh9OjRUodFRORxfj2Th70pRQCsbZtOmnYPgkIjJI6KnGHQmFswtFc8AGt7th9sS0ZRRY3EUREROSa/zID/bk2GxWLt/GlC944Y182xCi3k3oJ9NfjD+AQo5NYm0baczce28/kSR0VE5BhBELB0dxoyiqy1fEN8NVgwNh5K9hPh8WQyGe4fGYvYEB8AQFGFEf/dmgyjiW8ceTK33jNzcnIwceJE5OTkQCaT4bPPPsO0adOkDouIyOMkn9qP3/YeFIcfHBWHuN9P6NQ23DE4Gj3D/QEAldU12PztJ6gx8LU7InJv1UYz3vvtIip/b6+5V4QOtw9mHzptSUKoH+YNjxWHv9ifgfO5bHOdiNzfuhOXcTDV2v62RiXHkxO7wI9vGbUZGqUCT4xPQKCPtY+jlPwKLN+bBkEQJI6MWsptk9yFhYWYNGkSLl26BAB4//33MXfuXImjIiLyPIWX06H/5Q3MLl6CBMNJ3NwnDINig6QOi5xMIZfh4THxiPQ2YVrp5+hXtB7mvR9aG5ojInJDgiDg012XkKs3AADCArR4ZExnsdYvtR0jEkIwuWdHANY3jlbuS2cSgYjc2uH0Eqw9mg0AkMmAh0fHIyLAS+KoyNkCvNV4cnwXqJXW9OjelCL8dpZvHHkqt0xy6/V6TJkyBWfOnAEAvPHGG3j88ccljoqIyPMYqiuR8u3foTBVQSnUYqz6PGb0C5c6LHIRX40SjyYFo4cmHwmhvvC+vB84+5PUYRERNWj9ycs4mlEKAPBSK/Dk+C7wVntEl0HUArMGRqFnhA5RQd54emIXyGR8mEFE7imrpAqf7rokDs8cEIl+UQHSBUQuFR3sjQdGxgEAdN4qsQkT8jxudxVZVVWFm2++GUeOHAEA/OUvf8ELL7wgcVRERJ5HsFhwdPU/4VWZAwCo8e6IvnP+DJncLZ9vkpOExSQCt74A7HzHOuLYl0BANBDeT9K4iIjqyymttqkh98joeIT6ayWOilxJIZfh0TGdIZfJoFUppA6HiKhR2SXVMJmtb5sM7RyMG3t1kjgicrVBsUGYO9yMfpEB0HmzSRpP5VaZDqPRiBkzZmD37t0AgKeeegqvvvqqxFEREXmoM2sRW3UKAGBWaBE38xV4++okDopaRdQQoNdtvw8IMO9aBH1+hqQhERHVFx7ghftHxkGlkGN6/wj0juT5qT3wViuZ4CYit5fUORgv3NgNfaMCMG94LN88aSfGJHZggtvDuVVN7jvvvBObNm0CAIwfPx4PPPAATp061Wh5tVqNxMTE1gqPiMhzXD4B2YnVCNN5wUutRMGApxEaESd1VNSaes8GStJhTD+AtLx8FK/5Pwx4cDHUGtaUJCL3MDw+BAkdfNHBTyN1KCQRQ60Zy/emYXy3UCSE+kkdDhGRKL6DL56c0EXqMEhCFouAY1mlGBAdKHUo5CCZ4EY9fjT36VhMTAzS0tKaNU1ZWRl0Oh30ej38/f0dmsZgMCA1NRVxcXHQapkcINfjNkfXpbII2PgCUFNuHe49G+g9S9qYSBKCsRJHP34M8opcAIAhegyG3vlniaMiIiICSquMeHvTeVwuNUDnrcLLt/RkDToikkyV0cR+IUhUWWPCRzsu4VS2HnOHx2JMYgepQ2rXHM3lulVzJUREdH1MtUaU/fb2lQR3WL96zVZQeyNT+6DTzX+GRW5NGmgztuPUzh8kjoqI2qsdFwpwILVY6jDITfhpVfDXWs9P+qpafLgjBSazReKoiKg9Kq404s/fncR3R7JgsbhNPVCS0LncMpzK1gMAvtyfjoyiKokjIke4VZJbEIRm/TW3FjcRUVu3ecd2pJ47isKKGgjewcDwP1h79KJ2Kzy2K9TDHxGHsw5vQGZRpYQREVF7lFpYiZX70rFkewpW7kuHG71MShJRyGV4ZEw8ArzVAIALueX49kiWxFERUXtjMlvwwbZklBtMWH/iMn46kSN1SOQGBsYEYUL3jgAAk1nAB9uTUWU0SRwV2eNWSW4iImq5w+nFWJMZgG8D7sP5Mg2K+/8B0LB9SwJ6jbgVNbHjcMprML7TzcP/tqfwIo2IWk2V0YQPt6XA/HvtOKVcxk68CACg81Jhwdh4KOTW7WHT6TwczSiROCoiak/WHM7CpQJrBZBgX7WY2CSaPSgSsSE+AID8shos25PGh/RujkluIqI2IK/MgM92pQEAstWdYbzp3wiO6SFtUORW+s/8E1Li7oRZpkJ+WQ2W7uZFGhG5niAI+GxXKgoragAAnTv4YNbASImjIneSEOqL2wdHicOf1tteiIhc6UhGCTafyQNgfbvk8XEJ8NWwXW6yUinkWDA2Hl5qBQDgcFoJfjubL3FU1BQmuYmIPJzRZMEH21JgqDUDAIbEBWFs93CJoyJ3o1Yp8NjYBPEi7Uh6CbaczZM4KiJq6349k4ejGaUAAB+NEo+OiYdSwVsQsjW+WygGxAQCAKqNZizZzva5ici1Citq8NmuVHH4jiFRiAn2kTAickchvho8MDJOHF59KBOXCiokjIiawitMIiIPd3TtewjJ3AQIAjrptJg3PJavgVODOvhp8OCozgCAQFM+LL/8Gbnp5ySOiojaqpSCCqw5fKWN5QdGxiHYVyNhROSuZDIZ7hsRi5Dft49LBZX47mi2xFERUVtlMluwZHsKqo3WSkIDYwMxrmuoxFGRu+ofHYgpPTsBAMwWAR9uT0FlDZt+dEdMchMRebDzh36DJmUjRlZsxK3lX+HR0Z2hVSmkDovcWL+oAMyMrsIdxR+gp7YQocf/B9RWSx0WEbUxlTXWdrgtv7fDfWPvMPSNCpA2KHJr3molHq3XPvflUoPYjjsRkTN9dzRbbIc7xFeD+awkRHbMHBCB+FBfAEBRhRFrj/FBrDtikpuIyEOVFOSgYvticTiu93BE8RU7csCUkUPROb4rwnVekFfkAYc+kzokImpDBEHAsj1pKK40AgASOvpiRv8IiaMiTxAX4oM5g6Iwe1AUnpyQICa8iYic5URWKX45lQvA2g73o2Pj4a1mO9zUNKVCjkfHxMNHo8TwhBDcNoD9i7gjJrmJiDyQYDbhwvevQWGqAgBUdxqIPmNukzgq8hRKtQZBk/8EKH9vNiB1h/WPiMgJiiuNOJ9bDgDw1ijxyOh4JivJYRN7dMQNvTqxViURuUSonxZRQd4AgNmDohAXwkpC5JggHzX+b1pPPDAyjm9PuykmuYmIPJDs9HfopboMtVIOoyYIfWY+D5mch3RqBr9OwJCHxcGq3UtQkJ3axARERI4J9tXglak90S3MD/OHxyLIRy11SOTh2AklETlLJ50Wf76pO+4dFoOJ3dkONzVPgDevadwZMyJERJ4m9xRw6jv4aJRI7OSPmKkL4eMXIHVU5IliR0KIG4OCihok5xQiZe0/UWuskToqImoDAn3UeG5yVwyMCZQ6FPJwZy+X4c/fn0RKQYXUoRBRG6FWyjG2ayjfGKHrVlhRg1/P5EkdBv2OSW4iIk9SUw7s/S8Aa0dMyn53omPnPtLGRB6ttv98pNb4wyIA2opMHFv3odQhEVEbweQBXa/TOXq8s+k8iiqM+HjHJVQbzVKHREQeqKC8BkYT3wgh5zqUVoy//3gaqw5k4EhGidThEJjkJiLyGILFgqxN/4FQVWQd0bEX0GOatEGRx1NrvRF5y58hyKztyqkubkDKyX0SR0VEnuZ4Zik+2JaCKqNJ6lCoDenWyR/xHXwBWJNUX+xPlzgiIvI0hloz3t18Af9cfwY5pdVSh0NtSEWNSXz4umz3lQ63STpMclO7YDQa0aVLF8hkMnzzzTeNljMYDFCpVJDJZHj11VebvZzHH38cMpkM8+bNu55wiRq0/1w6Us6fQkpBJWrk3sCwxwHWkiMnCI/rBvS76/chGXbsP4iKGiaqiMgx+qpafLY7FYfSivHyD6dRWsWbPHIOhVyGB0d1hlZtfRC7N6UI+y4VSRwVEXmSVQcykKc3IKukGsv3pkMQBKlDojZiTGIHDPi9WbbKGhM+3XWJ25fEmOSmduG9995DcnIyevXqhdtuu63RcqdOnYLJZE3s9O3bt9nLeeGFF6BWq7FixQocPny4xfESXS2/zIDlR4vxZdAfcEDeF6md7wK8g6QOi9qQfhPvQnHH4fg28AHsUg7F8r1pvEgjIrsEQcDSPamoMFivn6KDvKHzUkkcFbUlHfw0uHdojDi8Yl86CsrZfwQR2Xc4vRg7LxYCADQqOe4bEcumtMhpZDIZ5g2PReDvHWyfu1yOX06zfW4pMclNbV55eTnefPNNAMBf//rXJk9qx48fFz+3JMkdHR2NefPmQRAEvPTSS80PlqgBZouAj3deQk2tBSa5GjUDH0K3IZOkDovaGJlcjv6zF0LvlwAAOJxWgj0prC1HRE3bdqEAJ7P0AAB/LxXmMYFALjC0czCGxQcDAAxGMz7ZeQkWCx/EElHjiiuNWLbnShNHdw2JQUd/rYQRUVvkq1HigZFx4gvW3x3JQmZxlbRBtWNMclOb98EHH6CoqAjR0dGYPXt2k2WPHTsGAAgICEB0dHSLlvfss88CAH7++WfW5ianWHc8G5cKKgEAof4a3DmkZdsmkT2BPmrMG36lttwX+9ORr2fbhUTUsFy9AasPZorD84fHwl/LWtzkGncnxSDEVwMASM6vwMbTuRJHRETuShAELN2diqrfm98bFBuEEQnBEkdFbVX3MH9M7tEJgLWC2ic7L7GjU4kwyU1tmtlsxuLFiwEAd955J+Typjf5uiR3S2px1+natSsGDBgAAHj//fdbPB8iAEg/fwyqbf+Av7kEMtnv7VKqFFKHRW3YwJggjOwSAggCepZuR/Kq5yGY2T43EdkymS34uN5N3NhuoegbFSBtUNSmeakVeGj0ldpya49ms7YcETXot7P5OJNTBgAI8Fbj3mExfMuIXGrGgAhEBnoBALJKqrH2aLbEEbVPTHJTm/brr78iM9Naw+juu+9usqwgCDhx4gSA60ty11/WmjVrUF5efl3zovbLUF2JvF/eRrgxDXcVvY87ulgQ38FX6rCoHbhzSDSm167DeMOv6KPOgezsj1KHRERuZt2Jy0grtL5l1FGnxZxBkRJHRO1BQqgfpvS01pZTyGXILTNIHBERuZvL+mp8czhLHL5/ZCx8NUoJI6L2QKWQ48FRnaGQWx+mbDqTi1w9z1GtjUlu8hgmkwnvv/8+hgwZgsDAQCiVSgQEBGDMmDFYu3Ztg9OsXr0aANClSxf07t27yfmnpqairMz6tLcuyb1p0ybMmTMH0dHR0Gg0iIiIwKOPPoqioqbbqa3r3LKqqgo//PBDc34mkejET/+DuroAAGD2i8C4IQMkjojaC61KgWGT5yCxk7/1puDUt0BJmtRhEZGbSM6vwLoTOQAAuVyGh0Z1hkbJt4yodUzvH4ERCSH4+9SeGBzLTriJ6AqT2YJPdqai1mx9y2hC947oGa6TOCpqL6KCvHHbwEj4aZV4YnwXdNKxDfjWxiQ3eYSzZ89i0KBBePLJJ3Hw4EGUlpbCbDZDr9djx44dmDFjBt5+++1rptu6dSsAYOjQoXaXUddUCQB07twZs2fPxpQpU7BmzRpkZmbCaDQiJycHS5YswejRo1FV1fjrkTExMejUyVrL5Oeff27mryUC0k7ugTp1MwDAIlej89QXoVCyBgK1npDYXlD0nG4dsJiAvf8F2GwJEQHYk1II4fc+/6b2DUdciI+0AVG7olLIcf/IOHYgR0QN6h2hg0xmfcvotoERUodD7czkHh3x6ozebMJNIkxyk9vbv38/hg0bhuPHj6Nz5854//33sW/fPuzYsQN/+tOfoFBYaw69+OKLuHDhgjhdVlYW0tLSAACDBw+2u5zjx4+Ln//yl7/ghx9+wEMPPYT169fj0KFD+Oqrr9CjRw8AwJkzZ7B8+fIm5zdkyBAAwPbt25v1e4lQU4GoC58j2FcNAJANuAehEbHSxkTtU+9ZQIC1o1OhNB25e1ZKHBARuYN7h8Zg7vBY9IzQ4abeYVKHQwTA2vQgEbVvSoUc0/tH4MUbu+OR0XzLiFqfTCZj8zgS4pont5afn49p06ZBr9fjhhtuwLfffgtvb2/x+1GjRiEyMhJPPfUUzGYzPvnkE/zrX/8CAOzZs0cs179/f7vLql+T+9y5c9i5cyeSkpLEcQMHDsSoUaMQHx+Pmpoa7N69G48++mij8xs4cCB+/PFHZGdnIy8vDx07dmzOT6f27NBnUNSUIirQGz7R/RE4brbUEVF7pVABQx9DzfoXkVlUifKsr1HbqT+iulxfvwVE5NlkMhnGJHbA6C4h7MiLJFdjMuPbw9mQyax9ShARJSATuLgduGinoNoHGHCv7bgLm4DiS/YXEtoN6DzWdtzBTwFzrf1pu0wCguOvDJfnAqfX2p8OAAbdDyjVV4azDln/7PENBXrNtB136jugIt/+tJGDrH91TEbg0GeOxdtzOuDX6cpwUQpw8Vf70ylUwOAHbMdd2gbkn7M/bVBnIHGy7bgjKwBjpf1pO48BQrtfGa4qBk6stj8dAPS/G9D42YwSLBbsTytBz3B/+GlVjs2HWoxJblc5uw44t95+uaA4YMzztuO2/wsoTrU/bbebge63XBmurQbWPeNYfKOfsz2oZh8GDnxifzqlBrh1kWPLcIJnnnkGeXl5iIuLw+rVq20S3HUefvhh/PnPf0ZlZSX27dsnjs/KutLZRGhoqN1l1a/JvXr1apsEd52IiAh06dIFp06dQkVFRZPzq7/MS5cuMclNjknfC6Tvtn5WeSNo/FOAnC/dkISC4nA6aCLkOd9ABiBn47/RMXoJ1Bq+Jk7U3jHBTVKzWAS8vuEcMoutzQj2iwpA9zB/iaMiotZWZqiFf/0EYlkOcGmr/Qm9gq5NcuedAjL3O7bgq5PcqTsAkwOdDYb1tc3HGMocixcABswFUC/JXZzq2LTBCdcmubMPA0XJ9qf1DrZNcltMjscbP942yV2R79i0Su21Se78c45NW1t1bZI7fQ9QXWx/2pAutkluY6Xjv7X3bEBzZbAs9xJSf3gd3yqm4ViX7nh0THzj05JTMHPiKrXV1h3I3p9Bf+20Br1j09ZW204nCI5NV10MWMy205qMDk5b4rp1dpWUlBR89dVXAIB//OMf8PPza7CcVqtFYmIiAKC4+MpBq6CgQPwcGBjY5LJKS0uRnp4OAJg+fTomTJjQaNm65HZwcHCT8wwKutIRTm5ubpNliQCgsrQAhr0fXRkx6H7Ap+ntjKg19Jk8Dwa/GACApioXx9cvkTgiImptPxzLxqnsBq5biSQkl8swPP7KtdJnu1JRZWT/EUTtSXJ6Bl76ej/Wn7gMs4XNFpGbqCiAducbUJRlYlbJJ8g6fxQH0xxIstN1YU1uV1F5WZ8K2qNtoKdfrc6xaVVetsMymWPTAYD8qraplGrHplVq7JdxkpUrV8JisSAgIACzZs1qsmxdu9wq1ZWnt/UT3vaS3PWbKpk3b16j5aqrq5GRkQEAiI9v+ilc/WVWVjrwWgy1ezu3bkBEZg7CdV4I6j4astiRUodEBABQqtSIveVPuPz105BZTKhK3YeLOXejS3iI1KERUSs4naPHj8dyAACTenTEHWwSgtzIpB4dcSyzFOdzy1FcacSqA5m4f2Sc1GERUSswGGuRte4NzK4uxKZ9sxDgPR4jEkKAqCQgJNH+DK7OiwDAgHnWGrn2qBvodHnKPwFH+gfwvir3EhgD3PS2/ekAaw3n+hInA9FD7U+nUF87bviTgNlof1rtVW/IKLWOx+t71Vv1YX0cm7aht8X6zLG2aGCP6toWADDhpWsrezbE66rckW9Hx39r/fyeUg21XwgiAguQXlSFGaVLsW1rLbreOcv2rQNyKia5XaX7LbZNiTTH1c2XOErlBcz4oGXTRgwEZgxs2bQusnHjRgDA2LFjodE0nVzPzs4GAMTExIjjtNorB//q6upGa4IDtk2VjBo1qtFyJ06cgMViAQD06dOnyZiqq6/UtK+ffCdqyOH0YqzR90C0/zyMqvoNg/rMhz9fAyc30im6C3L63IFT5y9gl+8NCNybg79PDYRWxQ59iNqyaqMZS3enicMd/dlUEbkXmUyG+0fG4eUfTsNQa8bu5EIMiAlEv6gAqUMjIhc7uOFzBFSkAABuM/6I3rEzrF9ofK1/LeETDKCFb9PqIls2nVIDBES1bFqtruHKk47wa2GTqnJ5y+NV+zT8gMAR3kHXPiBwlH94y6ZTqlv2W7U6YMJLCNjxNkqr9kNfXYvx+Z9j6wYBU2fcySbfXITNlZBbqqmpweHDhwEAAwYMaLJsbm4uLl++fE3ZDh06iJ/r1+puSF1N7ujo6CabIalf49teZ5b1lxkQENBkWWrfygy1WLHX2lxOhqYLtLe8AX9dC0/eRC7Ub9I9yEq4Cya5GgXlNVhzOMv+RETk0VYdzEBJpbWWV7cwP4zt2sHOFEStL8RXgzuGXElCfL4nDeUGBzp/IyKPden8Cfie/xaA9WFXxI3PQq5k5TJyIyovyMYuRFjf8VDKZZBBQMzFz3Fuz09SR9ZmMclNbunUqVOorbVemEZFNf3U7OeffxY/T5w4UfxcP8ldUtJ0W+J1yet+/fo1We7o0aMArJ1Khoc3/SSw/jKjo/laLzVMEASs2JuOcoO1/cj+0QEYFs8mIMg9yeUyPDAyDmql9fJh27l8nM5hG71EbdXJLD12XSwEAGhUctw3Io41j8htjUwIQZ/IAABAWXUtVuxLh+BIswFE5HEM1ZXI/+VtyGB9y1reczpC4puuhEYkCYUS2tF/hG+fKy09GPZ+An1BtoRBtV1McpNbql9juq55kMZ89JG1o74uXbpg2LBh4vjevXuLny9cuNDo9LW1tThz5gwAx5Pc9srVX6ZGo0FCQoLd8tQ+nd6/CYZzmwFBgK9WiXuHxTKBQG4t1F+LWQOtr2L6m4qR+sPrqKpgopuoramsMWHpnlRx+PbB0Qjxbb2+WYiaSyaTYf7wWPhorC1yHk4rwf5UdvJF1Bad/GkxtNV5AACjfyx6TnlA4oiImiCTIXby46iItDaNKzPX4PyP70Cwk+ui5mOSm9xS/ST3iRMnGi335ZdfYt++fQCA5557ziY5OGjQILFd7oMHDzY6j7Nnz8JotL6G21Ty2mw24+TJk3bL1albZv/+/dkmNzVIX1wAw+4PMaHse0wrXY65g8Og8+K2Qu5vfLdQjPXLxN3Fi9HPchqq4yulDomInGzVwUzoq6xv1fUM98foLnzLiNyfzluFe4dd6aNnT0oRa3MTtTFpJ3dDlboFAGCRqxE39UU2U0LuTyZDv6lPoEYdAABQF57GyYNbpY2pDWKSm9xS/ST3ypUrkZ+ff02ZHTt24JFHHgEADBkyBA8++KDN92q1GklJSQCAAwcOOLSsptrZPn/+vNiZpL0kd01NjZicnzx5cpNlqX0SLBacXPtvKE1VAIDQ4EAMjO8kcVREjpHJZLhp5BB06eiHyEBvqNJ3ANmHpQ6LiJzkaEYJ9iRbmynRqhWYz2ZKyIMMjg3CyC4hmD0oCk9N6MJtl6gNMVRVoHDLYnFYGHAvOkTESRgRkeN8/XTQjXkMtTI1shLuRmyfUVKH1OYwyU1uRxAEMUE8cOBAFBUVYeTIkVi5ciWOHDmCTZs24dFHH8WECRNQUVGB8PBwfPvtt5DLr92cp02bBsCa5C4vL29wecePHwdg7RwyNja20bjqmioB7Hc6uWPHDrFN8RkzZjRZltqnE3s3wrfgCADArPJDr2l/lDgiouYJ7hgJ3ch6Dxf3fwTUNHycJSLPYbEIWH0oUxy+a0g0gnzUEkZE1Hz3jYjDDb06QSFngpuoLak59AV8zKUAgMrAbhgwbpa0ARE1U7cBYxB898e45ba58Pfi9ZWzMclNbufSpUsoKysDALz00ku48cYbcfHiRdx7770YOHAgpkyZgiVLlsBkMqFv377Yu3cvIiMjG5zX3LlzodFoYDAY8P333zdYpq4md9++fZuMq66ct7c3EhMTmyz75ZdfAgB69uzpUNMm1M4Y9Ii+9BVUCuuNl//oR+CrC5I4KKIW6DwOCP/9oZ+hFDUHPpc2HiK6bnK5DH+clIjETn7oExmA4fHBUodEREQEANB1jEbX8BAE6/yQeOuzkDVQ0Y3I3XWO4BvcrsIjArmd+s2H9O3bF2vXrsVrr72Gnj17wtvbGwEBARg1ahSWLFmCQ4cOITo6utF5BQcHY+bMmQCuJJ6vVleT29FOJ3v37t1grfE6BoMB3333HQDgsccea3Ke1E4d/BSBCiO6dfJHQLfR6DJoktQREbWMTAYMeRiCyguFFTW4sG8dLh7bKXVURHSdQv20eH5KVzw8ujObeqA2IaWgAt8dyZI6DCK6Xl1vhPyWdxB18/PoENZ4HoDIk1SkH4W+KE/qMNoEpdQBEF2tLpms0+nE5kMWLlyIhQsXtmh+Tz31FL766its3rwZ6enpiImJsfm+sLDQofls3rzZoXLffPMNysrKEBwcjLlz5zY7Xmrj0vcCmfsBAAovf8RO+YPEARFdJ+8gpETOQMWl/wEASrf9F9Vd+sHLx0/iwIjoeshkMnipFVKHQXTdfjqegx+OZUMQgLgQH/SPDpQ6JCJqJkEQrjx09Q21/hF5OmMV0n/7COWnNqI0uC9GzH+dbydcJ649cjt1Nbl79+7tlPklJSVh5syZMJvNeP31150yz8ZYLBa89tprAIA//elP8PX1denyyLPUVpZAOPTZlRGDHgC0OukCInKS+KRbUR3UHQCgqinBifUfSBwRETXX/ktFMNSapQ6DyOmCfdUQBOvnFfvSUVljkjYgImqWs1lFeOPnc8jVG6QOhcipamprUHhuF0wWAb4Fx3Bq70apQ/J4THKT26lLcvfp08dp83zttdegVCqxdOlSZGW57lXFNWvW4OzZs4iOjsaTTz7psuWQZzrww4dIzboMo9kCRA0BoodKHRKRU8jkcnS59VlY5NbOUzSpvyE5+bzEURGRo05l6/HRjkt4+YfTOHu5TOpwiJxqWOdg9I60VirQV9Xi64OZdqYgIndhqKlB4fcvIDxlFV5dexQZRVVSh0TkNBqfQPiPekQcrtn3CfQlRRJG5PmY5Ca3UlhYiOzsbADOTXJ37doVn332GRYuXIiMjAynzfdqZrMZL7/8MlasWAEvLy+XLYc8z8ksPb40DMdB9MTpQgtMA+63tmdM1EaEdIqCvP9dqFDo8EPAPHx6ogY1JtYKJXJ3hlozPt+TBgAorKhBQXmNtAEROZlMJsPcYbHQ/t78zu7kQpzK1kscFRE54vDG5fCrykTfqn24vfZbRAXxHpvali6DJqEmbDAAQGmqxOkf35U4Is/GNrnJrdTvdNKZSW4AuPfee506v4bcddddLl8GeR5DrRnL96bBIPfGJt0sRA8KhNKH7UFS29N3/O14y9AdGYW1QFkNfjiagzmDo6QOi4ia8N2RbBRXGgEA3cL8MKpLiMQRETlfkI8acwZFYfnvD3SW7UnDP6b1YrvzRG4sLfUCvM6vBWB9WNVj0v3sDJnapB5T/4gLnz0ERW0lvHMP4tyBX9FtyCSpw/JIrMlNbqUuyS2TyZzWJjeR1L49kmWTQBjaM17iiIhcQyaXY+6oblAqrDcgm87kIqWgQuKoiKgxyfnl2HIuDwCgUsgxb1gsEwjUZo3uEoLuYf4AgJJKI7454romDIno+tSazMj8+V3IBWsb+vIetyA4pofEURG5hl9AMLyGPSQOV+xagoqyYgkj8lxMcpNbee655yAIAiwWCzttpDYh/cJx7D+dAuD3BMJwJhCobeuk02JavwgAgGARsOWXtag1svkDIndjNFmwdHea2CHf9P4RCPXXShsUkQvJZDLMGx4Ljcp6C7ztXD7O5bINeiJ3dHjz1/ArvwQAMPt0RI/JD0ocEZFrdU+agurQfgAAZW05Tv/4H2kD8lBMchMRuYixugKFP7+Bu4v+g+7VRzCjfzhC/ZhAoLZvSs9O6O5vxLTSzzE8dyUqjqyROiQiusr6kznI1RsAALEhPpjUo6PEERG5Xgc/DW4bECkOr9ibDqHuSQ8RuYXLORlQnfwKgLULo4jJT0Gh5j0UtW0yuRw9pj4Ds9La7rwmey+Sj2yTNigPxCQ3EZGLnN7wIRSGYmgs1UiSn8Gk7kwgUPugkMtwV/9g9NNko1snfwSmbgBK0qQOi4h+l1lchQ0ncwEAcrkM84fHQiHnW0bUPozvFoqEjr6IDvbGo2Pi+YYdkRuxmC1IXvcuFBZrU49C/AR0ShwocVRErUMX3BHqIfcBAPK9OqNKGypxRJ6HHU8SEbnA5QtHIU/5FQIAs1yF+JufgVzB54rUfoTHdQNG3gWc+hYQzMD+JcDkVwE5O/kikpLZImDZnjRYLNbaqzf3DkNUkLfEURG1HplMhsfHJcBHreTDHSI3k3FkI/xKzgAAzNpA9L5xgcQREbWuXiNuxS6TGklDJkDno5Y6HI/DjAsRkbOZjDDs+Z/Yzqmp1+0Ij4yRNiYiKfScAfhb2+dG8SXg7E/SxkNEAIDBsUFQKeQIC9Di5j5hUodD1Or8tSomuIncUGzFccR38IVGKUeH8Y9D7e0ndUhErUoml2PUuBuZ4G4h1uQmInK2U98iTl0GfYgPLpo7YcCkO6WOiEgaChUwdAGw6SUYzWZkbl0Gv4C+CI2IkzoyonZLIZfhhl6dMCA6AIZaC1R8y4gIJrMFyQUV6NbJX+pQiNq3MS/Ar9MGdNVnQd57lNTRELkHUw0EADKlRupI3B6vaomInKk4FTj7IwBA5+OFQXMWQqXk80Rqx0K6ID9iIs7nlqO8shqXfnoLgsUidVRE7V6ovxbRwWymhCi1sBL/WHcG72y6gIyiKqnDIWrf5HKg+y2QD31U6kiI3EJV5gmc++xRHP5pidSheAQmuZuBPW9Ta+G25qHMJmD/h4DwewKv5wwgIEramIjcgC7pLlRrQgAAWn0KDu3ZLHFERO1PldEkdQhEbulEVimySqphsQhYuicVZguvw4lak76qFtvO5/MemOgqxooSpKz+CwwlOVBe3ICs5JNSh+T2mOR2gEJh7STLZOLNAbWOum2tbtsjz3B++1coyb4AAQKgiwJ6TJc6JCK3oNF6o+OYh8XhskNfo7DcIGFERO1LSaURL357EqsPZqLGZJY6HCK3clPvMIQHeAEAMoqqsOl0rsQREbUv+3/6CJt27MK/fjmPoooaqcMhchtq30AYu8+wDggCsje+C1OtUdqg3JxbJ7nT09Px7LPPolu3bvDx8UFQUBAGDx6Mt956C1VVrfcqmVKphEajgV6vb7VlUvum1+uh0WigZDMXHqO40oj1lyw4VyJDamEVTIMfBhT8/xHViekzCpoO1ra4y+GDr3ZfYI0dolYgCAJW7ktHZY0Jv5zOxQ9Hc6QOicitqBRyzB8RC9nv/VD+cCwHeWV8EEvUGs4c2YXQtB8xp/gjhKf/ALXSrVNURK2u76R7YPCteztcQFlJgaTxuDu3PYL89NNP6NOnD/7973/j/PnzqKqqQklJCQ4dOoTnn38e/fv3R3JycqvEIpPJEBAQgPLycpSUlLTKMqn9KikpQXl5OQICAiCTsdd3TyAIAlbsTcdpZQ+sDH4S5zrPhzI0UeqwiNyLTIbYG57A+oin8VPAvTiWW4O9l4qkjoqozTuUXoJjmaUAAD+tEjf1CZM2ICI3FN/BFxO7dwQA1JotWLYnjQ9iiVyssrIC5dv/+/uQgME9usBPq5I0JiJ3o1SpEXnDH2HqMRMDH1mCoNAIqUNya25ZzfDo0aO4/fbbUV1dDV9fXyxcuBDjxo1DdXU1Vq1ahY8//hgXLlzAzTffjEOHDsHPz8/lMQUGBsJoNCI3NxdlZWXw9fWFVquFXC5nIpKuiyAIsFgsMBgMqKioQFVVFQIDAxEYGCh1aOSgA6nFOJFVCgDQ+AZg7OSR0gZE5Ka8wnvi5jEReP+3iwCAVQcy0StCB3/e0BC5REWNCV/sSxeH7xkaA1+NW17+E0luev8IHM0oha7wCBLPHcWhgNsweOhoqcMiarOOrfsQPsZiAEBtcHf0HTFd2oCI3FRkfE9ExveUOgyP4JZXuU899RSqq6uhVCqxadMmDBs2TPxu/Pjx6NKlC55//nlcuHAB77zzDv7+97+7PCaZTIZOnTrBy8sLZWVlKCwshMVicflyqf2Qy+Xw9vZGeHg4dDqd1OGQg8orq/DlgQxx+J6hMfBWu+Whlcgt9IsKwOC4IBxMLUZljQlf7c/AI2PipQ6LqE1adSAD5QZrPx8DYgIxMIYP0Ikao1Up8GhsNvQpq1Al98G20xmI721EkI9a6tCI2pzkM0fgk2btiFyQq5Bw6zOQyd22oQEi8hAywc3ewzpw4ACSkpIAAI888gg+/PDDa8pYLBb06tULZ8+eRUBAAPLz86FSOVYLrKysDDqdDnq9Hv7+/i2O02KxwGQyMdFNTiGXy6FUKiHnid2zCAIOLX8RaaUmbPO9BT3io/DY2ASpoyJye2WGWrz03Ql0KjuOUkUwHpk+AZ07+EodFlGbcjJLj0WbLwAAvNQKvDq9FwK8mawjalT6XmD3e8gorsQ2YQCOeI9AXEwcnpyQwDd3iZyopsaAI0segVe1tZNXxcB70XviPRJHRUTuzNFcrttVN1y7dq34+b777muwjFwux9y5c7Fw4UKUlpZi69atmDx5citFeCUGtZo3CkTtlj4Ll3cuhzL3GBIAhAqF6Dv4Y6mjIvII/sZCLBQ+RlFFGgK6DEdEh2lSh0TUphhqzVi+N00cvn1wFBPcRE3JOgTseR+AgPAAL3hVyFGhCERkoBcsAqBgjpvIaY7+vFRMcNfq4tB33B0SR0REbYXbJbl37doFAPDx8cHAgQMbLTdmzBjx8+7du1s9yU1E7VR5HnDqG5gv7UDJ5TJxdEDSXdDxdVYix/iEoKOPDB06+UNReRooSQcCY6SOiqjN+O5INoorjQCAbmF+GJkQInFERG4s5xiw611AMAMAlAnj0TPqTiRpVYgO9gYEATCbAIXb3ToTeZzMS+egufCjdUAmR+xNz0DGfYuInMTtjiZnz54FACQkJECpbDy8bt26XTMNOWD/EuuFmj1db7RNOJRmAufWO7aMpEeA+q/0pe8FLh+3P50uEuh+i+24E6uBqmL700YPBcL7XRmuqQCOrnQoXPSZA3gHXRnOPwdc2mZ/OrUPMOBe23EXNwNFyfan7dAViB9nO+7QZ4DJaH/ahIlASL0mMcrzgNPf258OAAbdByg1V4azDgNZB+1P5xsK9JppO+7099Zl2xMxEIgafGXYZLT+Vkf0nA74dboyXJQCXPzV/nQKJTD4Qdtxl7ZZ/7f2BHUGEq96aHZ0pXWbMlUDmQcBwYxcfTWMZguq5T7IjpmO24byQRuRwxQqyLpPheLwMuvw6e+AkX+UNCSitqK2NBv+Z1ZiQnkFFDIZborrBNn+bYBXAND3qtpy5zYApRkNzcZWp95A7AjbcS29ptRnAWfX2Z8OuI5rygig+622406sAaqK7E8bnQSE978ybKwEjqxwLN7eswGf4CvDBeeBlK32p1N7AwPm2o5z+JoyEYgfbzvu0FLAVGN/2oQJQEiXK8MV+cCp7+xPBwAD5wMq7ZVhh68pOwC9brMdd3otUJ5rf9qrrynNtcDBTx2JFugxDfAPuzJcfAm4sAmAAKTvBizWtusRMwIY8jB61DUhWFUMHPoUUPsCQxc4tiwiapggoOP5lRC8ldYHsT1noEN0otRREVEb4lZJboPBgMLCQgBAZGRkk2UDAwPh4+ODyspKZGZmNlqupqYGNTVXLvLKysoaLdvW1ZjMKDy8AUo50NFf23Th6CTbG5LqEuCSAxfpgPWGpL6ii45N26n3tUnuzP3WmyF7dBG2SW6z0fF4u91km+Quz3FsWq/Aa5PceSeBjH0OLFS4NsmduhOorbI/aVgf2yR3TZnjv3XAvQDqJblLUh2bNjjh2iR39hGg8IL9ab2DbG9IBLPj8caPs01yVxY4Nq1Sc22Su+C8Y9PWVl6b5E7fc82NcYegIJwMGYoNNX3xt5sGsK1GouaKH29NptSUARn7IFz8FUc1g9ArXAe1kv0TELWIyQjVjjdxszoXBeoayOUy+GX/nij1C7s2yX35OHD5mP35KjXXJrlTtgJwIMkdNcT2mrKq2PHrgCEP2ya5i5Idm7Zjr2uT3FkHHEvo+4fbJrlNNY7H2/VG2yR3+WXHptUGXJvkzj9tvf6wR7Bcm+RO3eHYNWWn3rZJbkMzrin7X9V+rqPXlEHx1ya5sw87dk3pFWh7TWlpxjVl57G2Se6KBq4po4YAwx4H6hLcZhOw6SWgynp/aooaDmVEX8eWR0TXksmgHvoQomVLoCsvh8+keVJHRERtjFvdRZaXl4uffX3td0Dl4+MDAKioqGi0zOuvvw6dTif+RUVFXX+gHshosuCVn86goLwGuWUGGGrNUodE5JmUGqDXbVDP/C9umPMoXpo+ACG+GvvTEZEtpcZa6xFArdmC1J/fw5b1q/Hj8RyJAyPyYCfXABV5kMlkCPXX8vxE5KjoYcDwpwC54so4hRLoOQMWQUBemQFHv3kT1VWV0sVI1BYExgCT/wHdTX+HUs1zFBE5l0wQHHnPsHVkZmYiOjoaAHDvvfdi+fLlTZaPjo5GZmYm4uPjkZzc8Ot8DdXkjoqKstsjZ1u05lAmDhyzvuIZE+yDx8bGQ95Y7VOfEEDldWW41mCtResIXaRtrZvqEmtTD/YotdZXGOsrz7W+imiPVgdo6/0/zSZr7RlH+HYElPXaUq6psMZsj1xhre1TX2WRYzVn1D62tccBa411R3ZH7yDr9HVMNdbXSx3hH3GldgoAGPTWWjv2KNSAX0fbceV51hrz9mj9rf+fOhYLUJbtWLy+obbNqxgrHWu+Riazbof1VRVbp7dH5W1bCwsAynKstYUaiomIWk4QgGNfwHBiLc7nlUMQZPglYA7umHU7YoJ97E9PRFcUXwJ++Yu1Zq9cCYxdaHv+lStta7IC1tqsJoP9eTd03VLa+JuUNnhNaX+69n5NWZHvWPMqGj9rszt1BMGxNz4BwKeDbfMqxqorb+mpvKzbaUMEAadXPIvay6cBANWdp2DY7GccWyYRAQAsFgFlhlp2gExELVZWVgadTmc3l+tWSe6CggKEhoYCAG6//XasWrWqyfIdO3ZEfn4+evXqhZMnTzq0DEdXTFtkNFnw8o+nkF9mvYi8c0g0JvboaGcqIqqTV2aAj0YJX41btfRE5NkEATi8DLmH1iJXb4AAGQ5H34f5c2ZDqXCrF86I3JbZVIuzy55AZ2UBvNVKoM/t1zYzRkQtUnw5Dekr/wCZpRaADP7T3kTnbmy2hMhRu/fvx6pkOW4bFIMxiR3YzCMRNZujuVy3unv08/MTPzfVBEmdykprrUxHmjYhQK2UY/7wOHH4u6NZKKxwoNYEEcFktuCDbSn46/cncTCtGG70fJDIs8lkwMD56ND3RnipFJBBgLLwHH457UDHtkQEANh6MhXp5QIu5lUgwxICdJ8qdUhEbUZQWCwUfWb/PiQg79dFMBodeJuRiFCUnwPtzn9ieu772LRjN9KLHHhDhYiohdwqya3VahEcbG0mICur6VfPSkpKxCR3e21nuyW6dvLD2K7W1zdrai1YvieNyToiB2w8nYvM4iqUG0xYdzwHFu42RM4jk0GR9DBCek/EUZ+R2Ol7I348no1cvQPNKBC1c/llBnxzqhzfBTyALf5TrR2AK/jGEZEz9ZpwN2r9rR2oelXl4MjGZdIGROQBBIsF5396FwpzDYJNeZjudxaxIWyOjohcx62S3ADQo0cPAEBycjJMJlOj5c6dOyd+7t69u8vjaktmDYxCoI+1PazTOWXYk1IkcURE7u2yvho/HrN2hieTAfeNiINCztfsiJxKLkfwhKfhM2QeIJPBZBawdE8qH8QSNUEQBCzdk4ZaswWQyRA28FZEd+kjdVhEbY5cqUT0Tc8AMuvts/rcWmSmXpA4KiL3dnrvz/AuPAEAqFXr0PuWP0gcERG1dW6X5B45ciQAa1Mkhw8fbrTc9u3bxc8jRoxweVxtiZdagXuHxojDqw5mQl/lQEc8RO2QIAhYtjsN5t+rbk/p2Yk1EIhcRS7HtAERCPW3du6anFeBbecc7ASNqB3afj4fF3LLAQDBvmpM7x8hcUREbVfHmG5A91sBAHLBjAPb18FktkgcFZF70pcWwbDvU3FYN3oBvHzbV59oRNT63C7JPX36dPHz0qVLGyxjsViwfPlyAEBAQADGjRvXGqG1KX2jApDU2doTe1WNCZvO5EocEZF72no+H8n51j4CQv01mNaPCQQiV9IoFZg7LBYAEF1zEfjlRZQUsn1uoquVFFyGZeNCRBgvAQDmDY+FVqWQOCqitq3XlPtR7p+ADbo7sQGjsPE076GIGnLmx/egNFmblzWEDUHiQOZsiMj13C7JPWTIEIwaNQoA8Omnn2Lv3r3XlHnnnXdw9uxZAMBTTz0FlUrVqjG2FXcMiUagjxqzBkZi5oBIqcMhcjuFFTX45vCV/gHmD4+DWul2h02iNqd7mD9uD7qAaaWfI1ZeAK8Ty6UOicitCBYLzv30LoJqsjGz5DPcFpSKnuE6qcMiavOUai2iZr2JS149AQAHU4vFt/2IyOr8oS3wurwfAGBS+qDH1KelDYiI2g237JXmvffew4gRI1BdXY3Jkyfjz3/+M8aNG4fq6mqsWrUKH330EQAgMTERzz77rMTRei5/rQqvz+wNlYJJO6KrCYKAFXvTUVNrfQ11bNcO6NrJT+KoiNqPkeNuhEG/CUEKA5B7CMjYD0QnSR0WkVs4s28jvAqOAwBq1f4YM26yxBERtR+xHXxxU+8wWARgat9w9tNCVE9VhR5lOz9EXTVE7dD74B8QLGlMRNR+uGWSu3///vj6669xzz33oKysDH/+85+vKZOYmIj169fDz49Jp+vBBDdRw/ZeKsKpbD0A/P7GQ5TEERG1L95+QfAe/Siwe5F1xKFPgY49AA3P+9S+1VaWoGbfJ+LrmH4jH4GPX4CUIRG1OzZvwWZYa6zyQSwRUH1gObzNZagFUB3SG0OH3Sx1SETUjrhthvPWW2/FiRMn8Mc//hGJiYnw9vZGQEAABg0ahDfffBNHjx5FQkKC1GG2OWmFlUjOL5c6DCLJKWQyeKmtbZveOzRG/ExErSh6KBAxyPrZoEftoc+ljYfIDaiOLUf3IDm8VApUhw1Bt8ETpQ6JqH0ym4AdbwO7/g0c+Agw6KWOiEhagoDgkI7oGhaAQH8/dL31j5DJ3TblRERtkEwQhHbViFhZWRl0Oh30ej38/dm7bx2T2YLvj2bjl9O5CPJR4/+m9WLnRdTulVYZcSitBBN7dJQ6FKL2q6oYwvpnodeXIqukGuqJf0Vi/5FSR0UkjaxDwI63AAAWlQ8MU96Ctz9fAyeSzO73gPQ9MNSacUHbG73n/A0yGZsvoXauJA0oz+PbDUTkNI7mcvlYjQAACrkMlworIQhAUYURa49mSx0SkeQCvNVMcBNJzTsI6TEzkVZUBZNFQMn2/6K6qlLqqIhan7ESOPiJOCgfNJ8JbiKpDZyPvBolLuSVw5K2BycPbJE6IiLpBcYywU1EkmCSmwAAMpkM84fHim10bz6bh5SCComjImpdZku7erGFyGPEDLoZhqBuAABNTTGOr/9Q4oiIWl/2lo9gqSq2DoT1A2JHSRoPEQHQ6lDe427UXUJW714Cvb5U0pCIWltybikWb7mI0iqj1KEQUTvHJDeJOvprMb1/BABAEIClu1NRa7ZIHBVR61m6OxWf7kpFZY1J6lCIqB6ZXI4utz4LQa4CAChTtyE5g28cUftx/lI6ck9sxsW8ClRalMCQhwA2iUDkFhKG3AhTxz4AAE2tHsfX/U/iiIhaj9FoRN43z0F15nv87fvjyCyukjokImrHmOQmG5N6dERsiA8A4HKpAetPXJY4IqLWcTyzFHtTirAnuRCv/3wWFtbqJnIrwZ2iIet3B7LUnfFF0B/w2eFiGE18EEttn6HWjM+O6PFl0B+Qgkgkh08DfEKkDouI6shk6HrrHyEoNAAA/6ztOHN8n8RBEbWOoxuXwqcyE0mVv+HW6h8REeAldUhE1I4xyU02FHJrsyVyubV20PqTl/k0ltq8KqMJn+9NE4dv7BUm7gNE5D76jL8Lx7v8AWXKIOTpDVh3IkfqkIhcbu3RbBRW1KBUGYKT3f+IPmNnSR0SEV3FLzgcXkPuEYf1W99HFfuPoDYuK/UcVOd+sA7I5Og96W7eQxGRpJjkpmtEBXnj5t5hAACLRcCyPWlsq5jatNUHM6GvqgUA9IzQYXg8O/IickdyhRzzR3aG4vcbqJ9P5SKjiA9iqe1Kzq/A5rN5AACVQo75I+Igk/PyncgddR05C6agLgAAr5pCHF7/iZ0piDyXqdaIzA1vQy6YAQCW7lPRKaabxFERUXvHq2Rq0M19whAWoAUApBVW4tczeRJHROQap3P02HmxEACgVSkwb1gMZGznlMhtRQR44eY+1gexclMN9q5fClMtOzqitqfWWIMDG5ZCbrE+hJ3ePxwd/bUSR0VEjZHJ5Yi/9U8Q5CqkarphdVlvnMkpkzosIpc4tmkFvCoyAQBGnzD0mXK/xBERETHJTY1QKeSYPzwOMpm1ZnePMH+pQyJyOkOtGZ/vSROHZw+KRLCvRrqAiMghN/cOQz9tLu4p/g965P2E0sPfSR0SkdMd3/gZeuStw11Fi9HfpwiTenSSOiQisiOwUwyqJr6Gdbq7UaXww4p9aTCZ2X8EtS25GRegOP2tdUAmQ/gNz0Kp5j0UEUlPKXUA5L4SQn3xx0mJ6NrRD0oFn4dQ2/PtkSwUVVhrgHYL88OYxA4SR0REjlAq5Jg+MAam/EpEBvpBlfYT0HUYEBgjdWhETpGTeg6Kcz8CAHSWEswcHCc200NE7m14v97YlXcepVVGzB8ex/soalMsJhPS170Nze/NlNQm3oLIhN4SR0VEZMUkNzWpZ7hO6hCIXOJCXjm2nM0H/r+9+46Tqrz3OP45M9s7y+4CW1hgl2Vp0hVQpNuIEiS2xIjGFjWaaxI1uYmae1M0mmJuikYlliQGhajYO0WadJW+DXbZ3nuZcu4fAwMIyy6wy5nZ/b5fr31lzplzznzH8Mw585vnPA8QFGBj0ZRBGqZExI+kDD0HGr8Ju5aD2wkbnoSLfgl2XdqIf3M62sh/57eEmJ7en67M+SQOGmZxKhHpLMMwuP3CIYQFBRAUYIPWemiphehkq6OJnLEDa18muP4AAC1h/Rl/6S0WJxIROUI/K8spcbrc1LU4rI4hcsY25FZ6H185PpkEjXMq4n9GXwVRSZ7H1Xmwe7m1eUS6gLHrdVJtZRhAa1h/xlxyk9WRROQUxYQFeQrcBZvg7R/C6t+CU/NHiJ9zuxjc9AWD4sIIsNsYcNG9BAXrO5SI+A4VuaXT8iub+MVbu3hyZQ6maVodR+SMfHtyKjeeP4hRSdHMzkywOo6InA57IEy5CwwbTrfJ/lX/oGj/XqtTiZy+qjzsu15nQHQo6f2iSLnsPgI1zqmIfzJN2PU6tNRi1hVRtvZFqxOJnBmbHeb+gpgJV5E569ukDhtrdSIRkWOoyC2d4nabPLkqh4PVzewrqefjQ8M8iPgrwzCYNjSe/5ozFJvGORXxX33TqEq9hL0lddQ0NJP/9uM4HeotJ37I5YQNf4VD45yGj/sGiWmjLA4lIqfNMGDyHbS4beSUN1L02TIKs7ZbnUrkzAQEwdhvEjD+m1YnERE5jorc0ik2m8ENU45M6LVsy0HK6losTCTSNTQOt4j/i5x4LQ0hAwAIaShg+wcvWJxI5NS1bHsZavI9CzEDYdRCawOJyJmLTuaLPnNpaHWCaVL43u9xtOk7lPiXktoWPsut1N3cIuLzVOSWThs+IIqZh4Z1cLjcLF6Th9utE534j/d2lLCjsNbqGCLSxQKDgkm65AeYhueyxr7zNYoOZFucSqTzCnL3sHfFPymta/H8O558pyZRFekhxl/0bZojPZ2FgppK2f7OMxYnEuk8t8vF9lcfZ+knG/jryhwaW51WRxIRaZeK3HJKvjEhmfhIz9iQ2WUNfLi71OJEIp2TXVbPsi0F/OHDfbz0Wb7VcUSkiyWnj8Y57HJcRgBrIi7ime3NOF1uq2OJdMjhcvP05y2sDZtDYZ2D3X3nQuxgq2OJSBcJCAwkdd6PMA07AIH73ubAvs8tTiXSOds+/Bf9y9bwzaq/EJK/CruGeRQRH6Yit5ySkEA737lgMIdHeHhtayHFtc3WhhLpQIvDxeI1eRy+wy46NNDaQCLSLcZeejMfD7mP7WHnk1/dwttfFlsdSaRDy7cXUVTrYEv4haxMu4+MmddbHUlEulhiagbmqG94FkyT4vd/T2urvkOJbyvOz8b44mUAbLiZc944QgLtFqcSEWmfitxyyjL6RTJneD/A0/vo7xq2RHzc0i0HKatrBWBIfDiXjOpvcSIR6Q6BQcFcPWOSd6z9t74oJr+yyeJUIu3LKW/gvR2eH2PsNoOrZ51HQGCQxalEpDuMuegGWg8NWxLSVMLWtxdbnEikfU6nk9y3fofN9AxP4ky/mNTM8RanEhE5ORW55bQsGJ9EQlQIALnljby/s8TiRCIntrOolpV7ygAItNu4ZdoQ3WYn0oMNigtn3jmeH7LcbpPXP16N09FmcSqR47W1tvD6x6u9dxnNH5tEcp8wa0OJSLexBwQw+Gs/BJudNiOEtaWB7C6uszqWyPEczXz59l8Jr8/1LIbFc85l37U4lIhIx1TkltMSHGDn5gsGYRhgGAYO9eQWH9TU5uTva/Z7l6+amEy/Qz/OiEjPdfk5iaRG25lW/w4X5j1Bzsp/Wh1J5Djb33qK2Qf+jykNHzAkNlh3GYn0AgkDh9F27p38q+/d7A4dz3Nr82hxuMA0oUWTo4vFagpg07M0LrkF2563PesMg8SLfkBQSKi12UREOkHTtstpS0+I5NpJA0lLiGBwXLjVcUSO89Jn+dQ0eXpwjkiMYlZmgsWJRORsCLDbuHlMCFU5n5EYG0JsxYdQNVOT+YnPOLB7C0E57wEmE5rXMWD8dbrLSKSXmHThPFY072VfST2jk2M8K4u3w+rfQuI4CIpof+f4DEibdey6zc+Bs7XjF06fDXFDjyw3lMGOVzsXesKNEHhUR5HCLVCwqeP9IuJh1MJj1+18Heo7cRdw0nhIOffIsssBmzo5xMuIKyAq8chyVS7s+6Dj/ewBMOmWY9flroKy3R3vGzsYMi4+dt22f0Frfcf7Dr4Q+o04stxcDZ+/3PF+AGO/CSFRR5aLv4AD6zreLzQGxlx7ZLm+FN75EW7TpKC8gcNd2BzDF5I0TMOUiIh/UJFbzsicEf2sjiByQlsOVLM+pxKA0CA7N50/2DtOr4j0fElDRhA/+waCdr8Gphs2/BUu/jXYNfGsWKuluZHSD/9A0KFxSsxzrqV/8hCLU4nI2WIYBjedP4jy+lZGJkZ7Vu77ANxOONhB4dh0H1/k3v8ptDV2/ML9Rx9b5G6th9wVnQs97lvAUUXu6v2d2zc27fgid9FWKN/b8b6hMccWud2uzucdMv3YIndDeef2tQcdX+Su2Ne5fdsaji9y56+DxoqO9+2bfmyR29Hc+ff61f++dYWd2zdywLFF7sh+EJ9JWfZ2Gpx29oSOp2LAdL532ezO5RAR8QEqckuXc7tNbOqNJBZyuU2Wbi7wLn/z3IHEhmsiL5HeJuicb0DxFqjJ9/x9udTT40nEQm1b/kWks5JWoCU6jXPn6N+kSG+TEBlCQuShorFpQsxATzG1rcHaYNK7jfw6Uf0nsrkkla3FbTw4ewQBdo1wKyL+wzBNs1cNplxXV0d0dDS1tbVERUV1vIN0mstt8u6OYrbn1/DjSzN1QhRLlde38ve1eYQH2blrZrp6cYv0VtX74f2fgttJbYuTmqn/TWrmBKtTSW9Vugs+/h9cpklxvYugy39LQpKG0RERqGtsIspZBSf7eh4UDmGxx66rLfT08O5IWKxn/8OcbdBQ2rlwUYlgsx9ZbqmFlk5MmmkPhMivzDfQUNa54VWCIz29uQ8zTag92Km4hMcfO7xKWxM0VXa8n2FAdPKx65qqOtdTPjAUwuOOXVdX5OmB3pHQGM/7Pczl6NyQLuDpkW0/qu9iaz0013S8ny0Aogac8CnTNCmubSExRuNwi4hv6GwtV0Vu6TLPfprrHR7istEDWDghuYM9RLqXaZq0Ot2EBNo73lhEeizHl69RsvrvVDa00RbSl3NufZqQsJOMeSrSHdoa4Z37oenQrevjF0HmZdZmEhHLmabJyn3lLN1cwC3ThjB+YB+rI4mIiPiUztZy1dVWuszcEf28w5S8u6OYrNJOTLIh0o0Mw1CBW0Swj7iCwoBUAIJaKtm+/I8WJ5LeyL3p70cK3AnDYdil1gYSEZ+wo7COf64/QKvDzYvr9lPf4rA6kvQy+ZVN+ncnIj2CitzSZVL7hvP1sUmA526yZz7NpbmtE7dniXQB0zT5YGcJLQ79mxORY9nsdtLn34/b7hmbPyR/NXs3f2JxKulNdn/2Ptkb3/WcowJDYfJdntviRaTXG5UUxdiUGADqW5y8uP4Avexma7FQU5uTP6/I4sHXd7Atv9rqOCIiZ0RFbulSl47qT3o/zy3glQ1tvLQx3+JE0lus2FvGy5sKeHj5TrLLdBeBiBwrrv9AAs/9DgClgcm8tNtJnXotyVlQ1djGS3sh353AvtJ6qodfDxHxVscSER9hGAY3TBlEeLBnXOWtB6pZk11hcSrpLf61IZ/KhjbqW5x8sKtUP7CIiF9TkVu6lM1mcMsFQ7xDRKzLrmDLgSqLU0lPV1LbwiubPBPRVDS00uLoxOQ7ItLrjLpgPjnpN7G0z60cdPXhhbX79WVOupVpmvx9TR5F7lhejv0ueUO/Q8yIWVbHEhEfEx0WyI3nD/Iu/3tjPmV1LdYFkl5hQ24lG3I9c2qFBtm55YLBGLrLSET8mIrc0uXiI4P55nkDvcsvrDtATVObhYmkJ3O63Dy9OheHy1PYnpGZwKikaItTiYgvMmw25ly2kIjQYAC2F9Swal+5xamkJ/twVym7i+sAiAoPZfZlCzFsuvwWkeONH9iHaUPjAGh1eK5vnS513JDuUdHQyj82HPAuf3tyKn0jgi1MJCJy5nSVLd1ialpfxqd6ZgZvbHXyd/WWk27y2rZCDlQ2AtAvOoSrJiRbnEhEfFl0aCA3nj/Yu7xsQw4lRQUWJpKeqrj4IK9vyfMu33zBYCIODUcgInIi1547kIQoT6Exr6KRt74otjiR9ERut8mzn+bRcmj+rMlD+nLekL4WpxIROXMqcku3MAyDRVMHER0WCEBNUxv1rU6LU0lPs7u4jvd3lgBgtxncfuGRoXJERNozNiWGGZkJxDmK+Eb5nyl843/BpfG5peu0tbaQ/5+HWFj+JH0dJcwd0Y8RiVFWxxIRHxcSaOfWaUO8Q0a89UWR5pqRLvfujhKySj3/rvpGBPGtyQM72ENExD+oyC3dJiI4gO+cP5iZmQn8bN4IokICrY4kPUhDq5NnPs3l8A0CV45PIrVvuLWhRMRvXD0hifmtb5AcUMPo8Br4/N9WR5IeZNsbfya4sZC+zlK+3vYGV45LsjqSiPiJIfERzB+bCEBMWBC6GVa6Ul5FI69vLwTAMOCWaUMIC9JdRiLSM+jTTLrVqKRojY8sXc40TV5Yt5/aJk/Py+EDorh4ZH+LU4mIPwkODGDUwp8QufIhDNMFe96GAWM8fyJnYO/mTwjO/RAAty2QIZffT5DuMhKRUzBv9ABMYHZmAuEa5ki6iOPQXEZut+eXk8tGDyCjX6TFqUREuo56cstZ53KrO4KcmS8O1rL1QDUA4cEB3DJNM4GLyKmLGpCOMe76IyvW/xVaaq0LJP6vqYrIz5/l8BnJPnER/QcOtTSSiPgfm83gijGJKnBLlwq021gwLomQIDuD4sK5Ykyi1ZFERLqUitxyVpXUtvCLt3axaX+V1VHEj52THM01k1IIsBvcdP4gYsKCrI4kIv5q2KUwYCwArqZqst98HNPttjaT+Ce3G9b/mcRQF0PiIzCTJnLO9IVWpxKRHsLtNqlr0fwRcmbOHRzLw5eP4PbpQwiwqxwkIj2LPtXkrCmra+F/3txJQVUTL6zbT0VDq9WRxE8ZhsFFI/vz6JXnMG5gH6vjiIg/MwyYfAf1hLG3tJ6G3E1s/+glq1OJP9q9HEp3AhAZ249xV/0Yw6ZLbRE5czVNbfz+w338/oN9tDn1Q6ycmYTIEBIiQ6yOISLS5XTlLWdNfGQw4wbGANDc5uLp1bk4XbpIk9PXJ1w9uEWkC4TGUDLiO0cKB9v/Rf6+7ZZGEv/iKN0LX7xyaMmAKd+DYI1zKiJd4+nVuewurqOgqomlWwqsjiN+xOFysy2/2uoYIiJnhYrcctYYhsG3Jw8iLiIYgJyyBl7bVmhxKvEXWw5UsaNQY+WKSPcYOnYajmGXA2CYbkre+Q2N9frMkY411Nfy+ZKfU17XjIkJo66EfiOsjiUiPch15w4k8NDQEp/sLmOripbSSUs3H+TPn2Tz9zV5tDhcVscREelWKnLLWRUaZOe26UOw2TxTMr23o4TPC2qsDSU+r6S2hcVr8njio328uvUgpqnJS0Wk642bdxst0WmY2NgYeC7PbyrT542clGmaLN5QyqaA8RTWtJDtToJRGodbRLpWSmwY156b4l1+bu1+KjX0o3RgW341H+8uBeCzvEoNFyoiPZ6K3HLWpcVHcNWEZO/ys2vydMKVdrU53Ty1KodWhxvThKrGNgzDsDqWiPRAAYFBZFz5U97q/122hV/A1vwaPt5dZnUs8WHv7Sjhi8JaNofP4L3+txJ/yQNgs1sdS0R6oOkZ8UwY5JmLpqnVyVOrcjT0o7SrvL6VxWvyvMvXThpIcp8wCxOJiHQ/FbnFEnNH9GN86pGLtL/pIk3a8fLmAgqqmgDoHx3C9ZNTLU4kIj1ZbEISl8+a7l1+ZXMB+ysaLUwkviqrtJ7/bPUMu2YY8LU5c4iJ629xKhHpqQzD4Mapg+gb4ZmTJre8kVc2H7Q4lfiiNqebv67MprnNMzzJ+NQ+zBgWb3EqEZHupyK3WMIwDG46/8j43LnljSzboos0OdZnuZWs3OPpRRlot/Hd6WmEBKqHnIh0r7EpMVw0sh8ALrfJ6+++R2N9jbWhxKfU1VTy6gcfe4ezmXfOAEYlRVucSkR6urCgAO6YkY790NCPH+8uZWNelcWpxNcs2ZRPfqWnk1BCVDA3nT9Id8KKSK+gIrdYxnORlobdZmAYEBYcoLFPxauwppnn1+33Ll933kBSYnWLnYicHQvHJzO4bxjnNqxgRtEzFL/3W9A5SgDT7WbXsl9xUdFTTGhcTWb/COaPSbI6loj0EoPjwvnmeQO9y8+vy6OktsXCROJL1uVUsGpvOeDpJHTnjHTCggIsTiUicnbo004sNSgunEVTB9EnLIgRiVFWxxEf0dTm5C8rsmlzeoawmZoex4VD4yxOJSK9SYDdxp1T4tiftYGkmBDiHPtgx39g9DesjiYW2/rOYkIqdwJwbut6hp53k3dCbRGRs2F6RjzZZQ2sz6lk8pC+xIYHWR1JfMDB6iZeXHfAu3z95FR1EhKRXkVFbrHc+ekqXsoRpmny3Nr9lB7qkZISG8a3J6fqFjsROeti4/oRftVDBH/6KGDCl8ugbxokjrM6mlhk39ZVBOxchglgGMRedB/RfWKtjiUivYxhGFw/OZVxA2OYkKrPIPFYsrEAx6F5ri4YGscF6iQkIr2MhisRn1RQ1aShS3qpsvpWdhfXARAaZOfOmWkEBeijSkSsEZwyFs65+tCSCev+jNlQZmUksUpdMcl7FnvPSe7R1zBk1HkWhxKR3iok0K4CtxzjtulDGJEYRUpsGN86L9XqOCIiZ50qR+JTTNPk/Z0l/M+bu3h/Z4nVccQC/aJCeOhrI0iJDePWaUNIiAyxOpKI9HYjF0DSRADqaqvZ+q8HaWvV+Ke9iqMFVj9OGK1k9IskLG0K4y5eZHUqEZFjFFQ1kV3WYHUMsUhUSCD3zsngBxdlqJOQiPRKPvfJt3//fv70pz+xcOFChg4dSlhYGCEhISQnJ/P1r3+dJUuW4HQ6rY4p3eRAZROvbCrANE2WbTnIzqJaqyOJBRIOFbrHpMRYHUVEBAwDptxJkTOavIpG7DX72fqf32K63VYnk7PBNGHDX6GuEAB7TDIZ8x/AsPncZbSI9GJbDlTxyLu7+fMnWVQ1tlkdRyxisxlEhQRaHUNExBI+dXX+4IMPMmTIEO655x5effVVsrOzaW5uprW1lcLCQpYvX851113H1KlTyc/PtzqudINBceFcMTYR8Hyn/NuqXCoaWi1OJd3N4XIfNzyNJvESEZ8SFA4X/hCXzfPFMaTgU7Z/9JLFoeRsyF+7BHf+Bs9CYChc+CPP/4qI+AjTNFm1r4JWh5v6Fid/+iSLVqfL6ljSzUpqW/jTx1nUtTisjiIi4hN8qshdXFyMaZqEh4dz/fXX89xzz7FmzRo2b97MP/7xDyZNmgTApk2bmDNnDg0NuhWrJ7piTCLnJMcA0Njq5M+fZNPi0EVaT2WaJk+vzuXp1bm0OdUrUkR8V+KgYYRccJd3ufXz/7Bzf7GFiaS77corpHT9v8kpa/BM5jX1bohKtDqWiMgxDMPgtguHEB8ZDEB+ZRMvrNuvOY56sKY2J//3SRbbC2r4xZu7KKnVMGoiIj5V5O7bty+/+c1vKC4u5h//+Ac33ngj559/PhMmTOD6669n/fr1XH21Z/KnrKwsfv/731ucWLqDYRjceuFgEqI8YzEXVDWxeE2eLtJ6qDc+L2LrgWo25lXxfx9n6f9nEfFpI6ZciiNzPtUBcSztcxtPrivWF8seqqimmb+uL+WVPrdR6IphZ+xcSJpgdSwRkROKCA7ge7PSCQ70fMX/LLeK93eWWpxKuoPbbfLM6jxKD11/hAXZiQnTECUiIobpZxWlyspKEhMTaWtrY/To0XzxxRentH9dXR3R0dHU1tYSFRXVTSmlKxTVNPOrd3bT0ubpxT3vnAFcOT7Z4lTSlTbtr+KplTmAZ8jbe2YP9fbiFxHxVabbzZMf7WRLkefLZb/oEH42bzhhQQEWJ5OuUt/i4Fdv76a83jNk2sTEEL47Z6TG4RYRn7flQBV/XXHk+vr7szMYnRxtcSrpSv/ZcpB3vvTcSRYeHMCDXxvh7cUvItITdbaW63dX6n379uWcc84BICcnx+I00p0SY0L57oVpGIeGZn77i2LWZVdYG0q6TH5lE4s/zfMuf2NCsgrcIuIXDJuN78wcQVIfz7jMpbUtPLUyB5dLQ2v1BE6Hg7+uyPYWuFNiw7hp5ggVuEXEL0xIjeXyMUfmOHpqVQ4FVU0Wp5KusiarwlvgNgyD705PU4FbROQQv7xab231fOmw2+0WJ5HuNjo5mmsnDfQuv7K5QONz9wA1TW383ydZnvFNgSlpfbl4ZH+LU4mIdF5IoJ27Zw0lIiQAu+kgefezbH39CatjyRky3W42L32UgVkvYjNdRIcGcs/soYQE6ppTRPzH/LGJjE/tA0CLw8UfP86ipqnN4lRypnYX1/HC+v3e5WsnpTAiUXeni4gc5ndF7rKyMnbv3g3A8OHDLU4jZ8Ps4QnMyEwgLiKY+y/J1BdNP9ficPHER1lUN3outIfEh3PDlEEYh7vsi4j4ifjIYO6cnsaVNc8xvO1LMmvXwZ63rY4lZ2DbBy8SUrCG4c1bmV/3L+6elU5seJDVsURETolhGNwybTCD4sIBqG12kFPeaHEqORNFNc38ZUU2brdntNnZw/sxZ0Q/i1OJiPgWvxs88vHHH8fpdAJ4J6E8mdbWVm/Pb/CM4yL+xTAMrpuUQsu4JCKC/e6frBzF6XLz5Mojt0zGhgdx18x0ggL87vc2EREAhg2Iwj1pHoNy/klooB22/gPC4mDgeVZHk1O0Z+OH2L5Y4l1Om/w1BsdHWJhIROT0BQfYuWfWUH7/4V6unpTCyESNy+2v6lscPPHRPpoPzVU1JiWGayelWJxKRMT3+FVl6bPPPuOJJ54AIDk5mTvuuKPDfR555BGio6O9fykpOhn4owC77bgCt2ma3uEuxD+8u6OEHYW1AIQG2bl3bgYxYeohJyL+bfgFXyd03OEf3k1Y/yco32tpJjlFpbsI2vgXzwC2gHPUNxh+3sUWhxIROTPRYYH8/IqRKnD7ubCgAEYnef4/TIkN47YLh2Cz6S5YEZGvMkzz0NW8jystLWXixIkcPHgQwzD46KOPmDVrVof7nagnd0pKSoczcopvc7rcPL9uPy0OF3fOSNdJ3k+0OFz8dWUOe4rr+OFFwxjWP9LqSCIiXcM0YcOTkLcKE5Pi5gACLvkVCUmDrU4mHak+AB/9HLOtkYPVzRT2mcR51/1ME02KSI9VWNNMUkyo1THkFJimycq95YxNiaGPhtESkV6mrq6O6OjoDmu5p3X1bhjGGf89//zznX69+vp65s2bx8GDBwF49NFHO1XgBggODiYqKuqYP/F/T3+ay/qcSrbl1/DPzw7gJ7/V9HohgXbumZXOA5dmqsAtIj2LYcC5t+FOGEVBVTNlFZXsX/Yz6moqrU4mJ9NYASsfBUcThmGQPHIKk675iQrcItIjmabJW18U8fDyHazP0fnJnxiGwczMBBW4RUROwuev4FtaWpg/fz5btmwB4Ec/+hH333+/xanEatMz4r29t1ftLefNL4otTiTt+eoPEAF2G2ka41REeiJ7AG1T/4ti4gEIaqlg10s/oamh1uJgciINddU0f/ALaK7yrIhNw7jgB9gDAq0NJiLSTXYU1vHa1kJME/6+No/PC2qsjiTteOuLIvIqNFmoiMipOK3hSvbs2XPGLzxgwACio08+NpjT6eTKK6/kzTffBOCWW27hmWeeOaPX7WwXd/F963MqefbTXO/yDVMHMT0j3sJE8lV7SupYsrGAe2YPJVa9DkSkl6ipKCHrn/9FYGs1AMX9ZzDrW/cTHGC3OJkc1up0sfrFX5BYtYEhcRGExibCRb+AEI1bKyI9l2ma/POzfFbuKQMg0G7jRxdnkJ6gOyx9yXs7Sli6uYDgQBvfmzmUEYmqW4hI79bZWq7Pjsntdrv51re+xZIlnlnur7nmGl566SVsZ3j7qIrcPcvhCwDw3Cl+67QhnDekr8WpBCCnvIHffbCXVoebvhFB/PjS4Sp0i0ivUVKQzcGlD1BiJPBm9PUMS47j7tlDCbT7/E10PV6b082fP8ki62ApX6v9F4m2asbc9H/YovpbHU1EpNu53SZPf5rLpjzPXSyhQXYeuCSTlNgwi5MJwJqsCp5bm+ddvn5KKjOHJViYSETEet06JvfZcPvtt3sL3Jdffjn//Oc/z7jALT3PJaP6c9HIfoBnzq9nPs1jy4Eqi1NJQVUTT3yURavDDUBSTBhRIQEWpxIROXv6p6TTf+Fv+CDhRpy2IHYW1fH06lxcbp/sW9BrOF1unlyZw86iOtpsobwf/x0Svv6ICtwi0mvYbAa3XDCYkYd6Bze3ufjDh/soq2uxOJlsOVDN8+uOFLjnj0tSgVtE5BT4ZNX4Bz/4Ac8++ywAs2fPZunSpQQEqEAmJ3b1xBSmD/MMU2KaJk+tymW7xpezTEltC7//cB9NrU4AhvWP5I4ZaQSo96KI9DLJqencM3cEQQGez7+tB6r5x+pdmG63xcl6J6ejjcUrdvLFwRoAggNt3D13BEmpadYGExE5ywLsNu6cmc6Q+HAAapsdPPb+XhW6LbQtv5q/rcrh8H32s4f34/JzBlgbSkTEz/hc1ennP/85f/jDHwCYOnUqy5cvJzg42OJU4ssMw+Dbk1OZmh4HeG7Be/fL4uMmPJTuV1bXwm8/2EtdswOAwXHh3DN7qLfAIyLS26QnRHLXzHTsNoNwVx2pWx7hy+W/A52jziq3y8XmJb8k/fPHCXU3EGi3cfesoQztp3FoRaR3Cgm08/05GST1CQWgurFNhW6LbMuv5smVOd67vaak9eW6c1MwDMPiZCIi/sWnxuT+05/+xD333ANAUlISL7/8coeTUw4bNozAwMBOv4bG5O653G6TZz7NpaKhlXvnZhAWpN7/Z1NJbQuPvb+H2iZPgTu5Tyj3XZJJRLD+fxAR2ZJXTv2r/0U/o4r0+AgC02fCed8FDcXW7Uy3m8+W/IqQgjUAVAYOoN/Vf2BUch+Lk4mIWK+uxcFv399LYXUz0aGB3HfJMAZEh1odq9f4aoF78pC+3HzBYGw2FbhFRA7zy4knZ8yYwapVq05pn7y8PAYNGtTp7VXk7tlcbhOHy01IoN3qKL1KYU0zv33/SA/uATEh3HdxJtGhnf8BSkSkp9v72XsMznqOoMN17dTzYcpdYNM5q7uYLgcb//0rggvXe5YNO+FzHiBj/HSLk4mI+I66FgfPrs7lm+el0j86xOo4vUZNUxsP/OcLnC4VuEVETsbvJ54UOR12m3FcgbuuxcHnGqO7W23eX+UtcKfEhnH/JSpwi4h81bDzLiHownvBOHSeOrAWx6dP4HS0WRusp3K2Yax5giGN2wEwDRuhM+5VgVtE5CuiQgL5wUXDVOA+y2LCglg0dRCGoQK3iEhX8Kme3GeDenL3Lk1tTh57by8Hq5u4cepgLhgaZ3WkHsk0Tf69sYCc8gbunZuhIUpERE7m4GZY8wdcLgd55Y2UR49i4rf+l8AgzUHSZRwtsPpxKN0BQHGDk7rxdzFs4iyLg4mI+Aeny80L6w8wKzOBwXHhVsfp0faW1DM0IUIFbhGRdvjlcCVng4rcvcu7XxazbMtB7/K15w5k7oh+FibquUzTpNWpoWJERDqlaBs5r/4P9Y3NADTHDmfMdf9DWMTJ5yKRjrlb6rGt/g1UZHlWBATDhfdB/9HWBhMR8ROmabJ4TR7rcyoJDrRx18x0Ribq/HSmTNMkt6KRtPgIq6OIiPgVDVciAlwyqj9zjipqL9mYz/LthfSy33a63LqcCnYW1R6zzjCOHypGRETakTgOY8aPMW2eoZ1Cq3bz5fP3UlVbZ20uP1dTV8emxfdSW7DLsyIwDGY9qAK3iMgpaHW6qWjwDKXV6nDzx4+y2JhXZXEq/3b4ztdfv72bNVkVVscREemRVOSWHs0wDK6dlMIVYxO9697YXsTiNXk4XG4Lk/kn0zR564siFn+ax19X5FBQ1WR1JBERvzVk1GRir/glzgDPbeC7zEH86v08fbaepvzKJn75fh57XYnsr2yk1gyDOT+HuKFWRxMR8SshgXZ+MDeDsSkxALjcJk+vzuHj3aXWBvNTTpebp1fnev/7vbB+P2X1LRanEhHpeVTklh7PMAzmj03imkkp3nXrcyr57ft7qWtxWJjMv7jcJi+s289rWwsBaHG42HKg2uJUIiL+LXXYWAZe+zuyY6ezJuISapraePS9PewqUo/uU7G9oIZH39tNdWMbqyMvIy/6PFpnPAR9Uq2OJiLil4ICbNw5M51ph+Y0Mk146bN8lmzMx+XWXbGdVdfi4Hcf7vP2hDcMgxunDiIhUpN8ioh0NY3JLb3KlgNVPLP6SC/u+Mhg7pk9lMSYUIuT+bbGVidPr85lR+GRIUq+MSGZS0b1xzA0QYqIyJmqa3Hwx4+y2F/RCIDNZnDLmGDOG6NhNk7GdLtZuXUH/9rZyuEr2iHx4Xxv1lCiQwOtDSci0gOYpslr2wp5+4ti77oRiVHcPj1Nk813oKCqiT99kkXloaFfAu02vjsjzdtDXkREOkdjcoucwITUWB64NJPoMM8X3/L6VjarN/JJFVQ18Yu3dnkL3HabwW0XDuHS0QNU4BYR6SJRIYHcd/Ewxhz64hvfmk/g+w9Q8N4T4GyzNJuvcjra2Lj0MSI/+Sl924oAOHdwLPddnKkCt4hIFzEMgyvHJ3PD1EHYbZ5r/11Fdfzq7V1UNer81J7N+6v49Tu7vQXu6LBA7rtkmArcIiLdSD25pVeqamzj/z7OIiEqmDump6lY2451ORW8uO6At+d7eHAAd85MI7O/2o6ISHdwu01e2ZBNytr/ZkBQE4PjwjH6psO0H0B4nNXxfEZl6UGyXv0lIXV5ADTYo6ma8SiXTxisc7qISDfJKq3nLyuyqW9xktE/kh/OzSDArn5zRzNNk9e3F/LW50d6vg+KC+fuWenEhAVZmExExH91tparIrf0Wi0OF4YBwQH2Y9a3Od0EBehi7bVtB4+7OLtjRhpxEcEWphIR6R12r3uboQdeIsB0elYERcD534cB51gbzAeYBZvY8Z9HcLV6hnYxDTtB59/FyPPnWZxMRKTnq2xoZcmmAr49JZWoEN0181UtDhc/f2Mn5fWtAExJ68sNUwbp+6WIyBnQcCUiHQgJtB9X4N5dXMePX/1CE34Bmf2jONwZ7sKMeB64JFMFbhGRs2T41HkEXPIriEjwrGhroPH9/2XzG0/hdPTS28NdTtjyAsanv2VItIEBtIXGkfCNx1XgFhE5S/pGBHPXzPTjCtw55Q2U1LZYlMp3hATaufXCIdhtBldNTOHmCwarwC0icpaoJ7fIIbVNDn7+5k7qmh0YBlw2egCXj0kksBffgvfBzhJCg+xMGxpvdRQRkd6ptQHW/wVHwWb2ldbjcJm0RKSQ+rX7GJA6zOp0Z41ZU4Cx4UmoyvGuK4waQ58ZdxEWEW1hMhERaWh18vDynTS1Obn23IFcODSu1wwd1eZ00+xwHTcXRFVjG7HhGp5ERKQraLiSdqjILe2pa3Hw7Opcdh7Vi3tATAg3Th1EekKkhcm6X0VDKx/vLuWqCSnYbL3jglRExG+YJlkr/kHD5n9jmJ45EkzDTtvE25g0Y36P/tx2utxsXLGcuJ3PMTQuxFM0sQXA+EUwdC70kiKKiIgvW7Ixnw93lXqXx6f24frzUokO69nDmeRVNLJ4TS4RwYHcf/GwHn0+FhGxkorc7VCRW07GNE3e/rKY5duLcLs9TcMwYFZmP64cn0RIoL2DI/gX0zRZnVXBK5sKaHG4uGpiMpeMGmB1LBEROYGD2TsofPe3BDcV4zIC+HfsXfRNHMyiqYNIjAm1Ol6Xy6to5Pm1eTSX7+faqr+SHB1EQmKqZ2zy2CFWxxMRkUNanS5e3lTAqr3l3nUhQXauHJfEzGEJPa7429Tm5D9bC1m1t4zD1ZQF45P42jmJ1gYTEemhVORuh4rc0hkFVU08v24/+ysavev6RgRx3bkDGZsS0yNuv8sqreeljfnkVzZ51yVEhfCL+SM1S7qIiI9qa21h+ztP81mxyfawqQAYhsGszASuGDOAiB4wCVhTq4O3vijhg10l3uLBuY0rmZQcyvh5t0GAbv8WEfFFW/OreX7tfhpbnd51A/uGccOUQQyOC7cwWdcwTZP1uZW8sqmA+pYj7zElNozbLhzSI39wFhHxBSpyt0NFbuksl9vkw12lvL6tEIfL7V1/1cQULhnV38JkZ6ayoZVlWw6yMa/qmPVT0+O47twUwoICLEomIiKdlV1Wz+I1eZTVtQIQ4G7jm3XPMHjK1xk46XKw+d+dR462VnasXErdro95KfoWnIanmJ0SG8aNUwcxqAcUSEREerr6FgfLthxkTVaFd51heCayXzg+mfBg//yucaCykVc2F7CnuN67LjjQxhVjkpgzPEGdhEREupGK3O1QkVtOVVldCy+s38+e4nqCA208suAcvxxfrq7FwYc7S/lwV+kxRfuU2DCuO3cgw/r37HHHRUR6mjanm/d3lvDOl8VMqHmf85pXk9k/ksDYVBh9FSRPApvvf+k23W52rX+Xxk3/JKjV8wPs+oi5bI+awRVjkrh4ZD8VD0RE/Ex2WT3/WH+Ag9XNAESGBPDownP8bvjHsroWXt5UwPaCmmPWj0/tw3XnDtTkkiIiZ4GK3O1QkVtOh2mabM2vpq7ZyczMhGOe25BbyYDoEFL7+m4PM6fLzf3LvqC22eFdFxESwIJxSVw4NL7HjZMnItKbVDW0smf54wxt2Ex8ZPCRJyIHUJh4EQmjZxMYFNz+AazibIP8dTR/+Qb79u7k6CvShpSZDLv83mPfj4iI+BWny81Hu8t44/NCrhiTdNzdsG1ON0EBvv0jZlldC//92g4Ol036RgTxrfNSGZMSY20wEZFeREXudqjILV2puc3Fj5Z+TovDRXq/COYM78f4gX2wW1w0Nk3zuHHD/7PlIO98WYzddmjs1rGJGppERKQHMcv3Ymx9ESqzAXC43OwurqM1MBr7iMsZOnkekdGxFqeE1voKgvM+gawPobUOgMKaZsrrW2npO5KUWbeSNGS4xSlFRKSr1DY7CAm0ERxwpBd3VWMbDy3fwdiUGKYNjSejX4Tl8x45XG6KapqP67z03No8viys5WvnDGDa0HgCdXeRiMhZpSJ3O1Tklq700a5S/r0x/5h1fcKDmJrWlwmpfRgYG3ZWL9bK61vZkFvJhtxKvj9nKAmRId7napsdvLejmLkj+uu2OhGRnso0ofhz2LWc4qwtlB4asxvANGzszPwvhp0ziTHJMWe191yLw8WOwlqydm5l5O7fM7J/xDE/CLdGD+JgynzSzpl61jKJiIh1/rHhACv3lHmX+0WHcOHQeKam9yXqLE+iXFTTzKdZ5azNrsRtmvz+6rHHnCMbWp0E2W0+3+tcRKSnUpG7HSpyS1dqcbjYkFvJR7tLKa5pOe75vhFBTEjtw8RBsaTFR3T56ztdbg5UNbGvpJ7tBTVklzV4n5s/LokrxiR2+WuKiIh/KNi3nYPrlhBaug2ANiOEZ+MfwGUEEhJoZ3xqH8ZG1jEkMYE+8QO6/PUb6qrZnV/KhlI7O4vqcLjcBLjbuK3i1wyMDiQ+KhRSzoNhl0JchmdmMhER6RWWbTnIqn3lNLU6j1lvGDA4LpxRSdGMTopmcFx4l3caanO62VtSz5eFtXxZWOOdxPmwm6cNZmpaXJe+poiInD4VuduhIrd0B9M02VVcx0e7yviysIavtqrRydH815yMY9ZVNbYRERxwyj0C9lc0srOojr2l9WSX1dPqcJ9wu/PT4/jOBYNP6dgiItLzlBRkk7/5HbLLW/g4aOYxz329+jnOCcgnNXUwJIyA+GGYEf2oscUS07cfRmcmrjRNaGuEukJ279hK7cHd2KpzCWouJytkNO9FX3PM5pc0vcHwQUmMmn4VhPftyrcqIiJ+pM3pZmt+Nav2lbOvpP6E28wZ0Y/rzh3oXTZNE7fJaQ0P+cbnRWSV1pNV2oDDdfx3KLvNYEJqHy4e2Z9Bcb4735KISG/T2VquBuQV6QKGYTAyMZqRidHUNjnYVlDNlgPV7Cmpx+02GfyViyS32+Rnr39Jq8NNWHAA0aEBRIcGEhEciImJ223icoPL7ebmC4YQHXbklr3NB6p598viE+ZIjAllSlpfzhscS98ITdYlIiLQPyWd/in3MNFtMq60ng25lWw+UE1baxuJjgOEhwdCQ5nnL3clDqebA8V17LcF0BYShzskhj39Lqc+PBW7zcBmGPSp2Ul62XtM7GdAcw24PT3xQioaaT1qkuPBrXuxmw7CQkMZn9qHCal9GNbvfwjQeKYiIr1eUICNyUP6MnlIX0pqW1iTXcHnBTUU1TR7t8nsH3nMPgerm/nFW7voExZEaJDd8xdoJyzIjstt0tTmosXhIiTQzr1zj+1ktLu47rhiumEYDO0XwbiUGKak9SXyLA+VIiIiXUdFbpEuFh0WyIxhCcwYlkBDq5MvCmpI7hN2zDZFtc3eHthNrU6aWp0nHO4EoNXpAo5cbMVHHileR4cFMqxfJBn9I8nsH0n/qBDLJ2wRERHfZLMZDB8QxfABUXzrvFRyi8pp2H45YQGFUJfrLVS3HerdZridBDeVQFMJB9yTKQiO9h4rraWazNoc3OHR2I4674QH2altduC2BdIWORBbfAb3nTuYtKT+2CyelFlERHxX/+gQvjEhmW9MSKaqsY0vC2vZUVjL8AHH9tg7WN2My21S0dDazpE8woOPL3UkxYSyr6SemLAgRidFMTo5muEDoggLUllERKQn0Ke5SDeKCA5gavrx47m53TBhUB9qmxzUtTioaXLQ5jzxsCNO97FjnwzvH8nNFwwmLSGChMhgFbVFROSUBQXYyBzYDwZ+17PC2QaV2VBzgKaSAprJwdZYRmBzOTa3A7dhP2b/RptnnglHQATBkX0hJBrC4wkNH0h82CD6paQREKhJjkVE5NTFhgcxPSOe6Rnxxz1nGDAgJoT6FifNbS5c7hOPvupym5imecx3pctGD2De6AHEhAXqO5SISA+kMblFfIBpmrQ63dS3OLEZnvHgDv+FBNjV+01ERCxhut20tjbjIgCXYcPlMnGZJnZMIoNtKmSLiIhlTNPE4TJpdrhobnNhs0FYUAAhATYNiyUi0oNoTG4RP2IYBiGBdkIC7R1vLCIicpYYNhshoZp8S0REfI9hGAQFGAQF2IgO1VjaIiK9nX7eFBERERERERERERG/pSK3iIiIiIiIiIiIiPgtFblFRERERERERERExG+pyC0iIiIiIiIiIiIifktFbhERERERERERERHxWypyi4iIiIiIiIiIiIjfCrA6wNlmmiYAdXV1FicRERERERERERERkfYcruEerum2p9cVuevr6wFISUmxOImIiIiIiIiIiIiIdKS+vp7o6Oh2nzfMjsrgPYzb7aaoqIjIyEgMw7A6zllVV1dHSkoKBQUFREVFWR1HRLqY2rhIz6X2LdKzqY2L9Gxq4yI9l9p39zNNk/r6ehITE7HZ2h95u9f15LbZbCQnJ1sdw1JRUVFqeCI9mNq4SM+l9i3Ss6mNi/RsauMiPZfad/c6WQ/uwzTxpIiIiIiIiIiIiIj4LRW5RURERERERERERMRvqcjdiwQHB/Pwww8THBxsdRQR6QZq4yI9l9q3SM+mNi7Ss6mNi/Rcat++o9dNPCkiIiIiIiIiIiIiPYd6couIiIiIiIiIiIiI31KRW0RERERERERERET8lorcIiIiIiIiIiIiIuK3VOQWEREREREREREREb+lIreIiIiIiIiIiIiI+C0VuXuBAwcO8MMf/pDMzEzCw8OJjY1l0qRJPP744zQ1NVkdT0S+wjCMTv3NmDGjw2O9++67LFiwgOTkZIKDg0lOTmbBggW8++673f9GRHqhsrIy3nrrLR566CEuvfRS4uLivG32xhtvPOXjdUUbdjqdPPXUU0ybNo34+HhCQ0NJS0vj9ttvZ+fOnaecSaS36or2/fzzz3f6PP/88893eLympiYee+wxJk2aRGxsLOHh4WRmZvLDH/6QAwcOnNkbFullNm/ezP/+7/9y0UUXec+7ERERZGRkcNNNN7FmzZpTOp7O4SK+pSvauM7jPs6UHu2NN94wo6KiTOCEfxkZGWZWVpbVMUXkKO2116/+TZ8+vd1juFwu8+abbz7p/rfccovpcrnO3hsT6QVO1uYWLVrU6eN0VRsuLy83J02a1O4xgoODzWeeeeYM37VI79AV7fu5557r9Hn+ueeeO+mxsrKyzKFDh7a7f1RUlPnmm2+e+RsX6QWmTZvWqXZ5ww03mK2trSc9ls7hIr6nq9q4zuO+LeC4qrf0GNu2beOaa66hubmZiIgIfvKTnzBz5kyam5tZsmQJzzzzDPv27WPevHls3ryZyMhIqyOLyFHuuOMO7rzzznafDw8Pb/e5n/70pyxevBiAcePGcf/995OWlkZOTg6PPfYY27Zt49lnnyU+Pp5f//rXXZ5dRGDgwIFkZmbywQcfnPK+XdGGXS4XCxYsYNOmTQBceeWV3HrrrcTGxvLZZ5/xy1/+krKyMm6//XaSkpK49NJLT//NivQyZ9K+D3v//fdJTExs9/nk5OR2n6uvr2fevHlkZWUBcOutt3LttdcSGhrKihUreOSRR6irq+Oaa65h7dq1jB079rRzivQGRUVFACQmJnLVVVcxbdo0Bg4ciMvlYv369fzud7+jsLCQF198EYfDwUsvvdTusXQOF/E9XdnGD9N53AdZXWWX7nP4l6qAgABz3bp1xz3/2GOPeX8hevjhh89+QBE5oTNtl3v37jUDAgJMwJw4caLZ1NR0zPONjY3mxIkTvZ8PuptDpOs89NBD5ptvvmmWlJSYpmmaeXl5p9zTs6va8OLFi72vfeeddx73fFZWlvdur/T0dNPhcJzamxXpZbqifR/dAywvL++0szz44IPe4zz22GPHPb927Vrv58jJ7vwSEY958+aZL7/8sul0Ok/4fHl5uZmRkeFtd6tWrTrhdjqHi/imrmrjOo/7NhW5e6jPPvvM22Buv/32E27jcrnM4cOHm4AZExNjtrW1neWUInIiZ1rkvuOOO7zHWL9+/Qm3Wb9+/UkvnEWka5xOEayr2vDhc3xsbKzZ2Nh4wm0eeeQR73FeeeWVTuUTEQ+ritxtbW1mdHS0CZjDhw9vd8iD22+/3ftaGzduPK3XEpEj3nzzTW+buvvuu0+4jc7hIv6rM21c53Hfpokne6jXX3/d+/imm2464TY2m40bbrgBgJqaGlasWHE2oolINzJNk+XLlwOQmZnJ5MmTT7jd5MmTGTZsGADLly/HNM2zllFE2tdVbXjfvn3s3r0bgKuvvpqwsLATHufoyfJee+21M40vImfBihUrqK2tBWDRokXYbCf+Sqf2LdK1Zs6c6X2ck5Nz3PM6h4v4t47aeFfRebz7qMjdQx2eFTY8PJwJEya0u9306dO9j9euXdvtuUSke+Xl5XnHGzu6fZ/I4ecLCwvZv39/d0cTkU7oqjZ89OzwJztO//79ycjIAHQdIOIvOtu+J06c6C2OqX2LnLnW1lbvY7vdftzzOoeL+LeO2nhX0Xm8+6jI3UMd/uU3PT2dgID25xfNzMw8bh8R8Q1Lly5lxIgRhIWFERkZydChQ1m0aNFJ77rYtWuX9/HR7ftE1P5FfE9XteHTOU5BQQGNjY2dzioiZ+amm24iMTGRoKAg4uLimDx5Mj/72c8oLCw86X6dbd8BAQGkp6cDOs+LdIVVq1Z5Hw8fPvy453UOF/FvHbXxr9J53PeoyN0DtbS0UFFRAZx8NleAPn36EB4eDnhOjCLiO3bt2sXu3btpbm6moaGB7OxsXnzxRWbNmsWCBQu8tzgd7eDBg97HHbX/lJQU72O1fxHf0FVt+HSOY5rmMfuJSPdauXIlxcXFOBwOKisr+eyzz/jVr35Feno6f/vb39rd73A7DQ8PJyYm5qSvcbh9l5eXH9NDTUROjdvt5tFHH/UuX3311cdto3O4iP/qTBv/Kp3HfU/7XXzFb9XX13sfR0REdLh9eHg4jY2NNDQ0dGcsEemksLAwrrjiCmbPnk1mZiYRERGUl5ezatUqnnrqKSorK3n99deZP38+H374IYGBgd59T6X9H/6BC1D7F/ERXdWG9Vkg4ruGDBnClVdeyZQpU7xfXnNzc/nPf/7DsmXLaGlp4bvf/S6GYXDbbbcdt//h9t3Z6/zDGhoaCA4O7qJ3IdK7/OEPf2Djxo0AXHnllSccElTncBH/1Zk2fpjO475LRe4eqKWlxfs4KCiow+0PN5Lm5uZuyyQinVdYWHjCX3Tnzp3L3XffzaWXXsq2bdtYtWoVTz75JPfcc493m1Np/0efINX+RXxDV7VhfRaI+KYFCxawaNEiDMM4Zv2kSZO45ppreOutt7jyyitxOBzce++9XHHFFfTv3/+YbQ+371O5zge1b5HTtWrVKn784x8DkJCQwJNPPnnC7XQOF/FPnW3joPO4r9NwJT1QSEiI93FbW1uH2x++5SE0NLTbMolI553slqV+/fqxbNkyb+/tP/3pT8c8fyrt/+jbndT+RXxDV7VhfRaI+Kbo6Ojjvhgf7Wtf+xoPPfQQAE1NTSxevPi4bQ6371O5zge1b5HTsXPnThYsWIDT6SQkJISlS5eSkJBwwm11DhfxP6fSxkHncV+nIncPFBkZ6X3cmVuWDk9Q0ZlbJUTEekOGDGHu3LkAZGdne2dxh1Nr/0dPTqP2L+IbuqoN67NAxH/ddttt3i/QR0+Cddjh9n0q1/mg9i1yqvLy8rjooouorq7GbrezZMkSLrzwwna31zlcxL+cahvvLJ3HraMidw8UEhJC3759ATqcfKK6utrbaI6e/EJEfNuIESO8j4+evfnoyWk6av9HT3Kj9i/iG7qqDZ/OcQzD6HCCKxHpfgkJCd5r+aPP8YcdbqeNjY3U1NSc9FiH23d8fLzG8RQ5BUVFRcyZM4eioiIMw+Dvf/878+fPP+k+OoeL+I/TaeOdpfO4dVTk7qEOF8Cys7NxOp3tbrdnzx7v4+HDh3d7LhHpGu3dInV08fvo9n0iav8ivqer2vDpHCclJeWYyW1ExDonuxW6s+3b6XSSk5MD6DwvcioqKiqYO3cuubm5gGd4wBtuuKHD/XQOF/EPp9vGT4XO49ZQkbuHuuCCCwDPL0Nbtmxpd7ujb504//zzuz2XiHSNXbt2eR8nJiZ6Hw8ePNi7fKJbo462evVqAJKSkhg0aFDXhxSRU9ZVbfjwdUBHxykpKWHfvn2ArgNEfEV5eTkVFRXAsef4wzrbvjdv3uy9Y1PtW6Rzamtrufjii73X2o8++ih33XVXp/bVOVzE951JG+8sncetoyJ3D/X1r3/d+/i555474TZut5sXX3wR8Ex0N3PmzLMRTUTOUF5eHh9++CEAaWlpJCUleZ8zDMN7m9WePXvYsGHDCY+xYcMG76/G8+fPP+kvzSJy9nRVG87IyPD2+HjllVdoamo64XGef/557+MFCxacaXwR6QJPP/00pmkCMH369OOenzFjBtHR0QC88MIL3m2/Su1b5NQ0NTUxb948tm7dCsBPf/pTHnjggU7vr3O4iG870zbeWTqPW8iUHmvatGkmYAYEBJjr1q077vnHHnvMBEzAfPjhh89+QBE5zhtvvGE6HI52ny8pKTHHjRvnbbu/+93vjttm7969pt1uNwFz4sSJZlNT0zHPNzU1mRMnTvR+Puzbt6/L34eIeOTl5Xnb66JFizq1T1e14cWLF3tf+6677jru+ezsbDMqKsoEzPT09JN+9ojI8U61fefl5Zlbt2496TZvvvmmGRQUZAJmaGioefDgwRNu9+CDD3pf+7HHHjvu+XXr1pkBAQEmYE6fPr0zb0ekV2ttbTUvuugib7v6/ve/f1rH0TlcxDd1RRvXedz3GabZzk8G4ve2bdvG+eefT3NzMxEREfz3f/83M2fOpLm5mSVLlvD0008Dnl+KN2/efMwsziJijUGDBuFwOFi4cCFTpkxh0KBBhIaGUlFRwcqVK/nb3/7mvfXpggsu4KOPPjrhBBQ/+clPePTRRwEYN24cDzzwAGlpaeTk5PCb3/yGbdu2ebf79a9/ffbeoEgPt2bNGrKzs73LFRUV3HfffYDnNsNbbrnlmO1vvPHGEx6nK9qwy+Vi+vTprF27FoCFCxdy66230qdPHzZu3MgvfvELysrKsNlsvPXWW1x66aVn9N5Ferozbd8rV65k5syZTJkyhcsvv5wxY8aQkJAAQG5uLsuWLWPZsmXeHl1/+ctfuPPOO0+Ypb6+nokTJ3qHKrjtttu49tprCQ0NZcWKFfz617+moaGB0NBQ1q1bx9ixY7viP4FIj7Vw4UJeffVVAGbNmsUTTzxx0jsdg4KCyMjIOOFzOoeL+J6uaOM6j/sBa2vs0t3eeOMN7y+8J/rLyMgws7KyrI4pIoekpqa2216P/lu4cKFZXV3d7nFcLpf5ne9856THuPnmm02Xy3X23pxIL7Bo0aJOteHDf+3pqjZcXl5uTpo0qd1jBAcHm88880xX/2cQ6ZHOtH2vWLGiU/uFhYWZf/vb3zrMk5WVZQ4dOrTd40RFRZlvvvlmd/ynEOlxTqVtA2Zqamq7x9I5XMT3dEUb13nc96kndy9w4MAB/vjHP/L2229z8OBBgoKCSE9P56qrruJ73/seYWFhVkcUkUNWrVrFqlWrWL9+Pbm5uVRUVFBXV0dERAQpKSlMnTqVRYsWMWXKlE4d75133uHpp59m06ZNVFRUEBcXx6RJk7j99tvV40OkG9x444288MILnd6+o8uwrmjDTqeTZ555hpdeeondu3fT2NhIYmIis2fP5vvf/z4jR47sdF6R3uxM23d9fT1vvPEG69evZ/PmzRQXF1NRUYHT6aRPnz6MHDmS2bNnc8stt3h7hnWksbGRv/zlLyxdupTs7Gza2tpISUnhsssu4/vf/z6pqamn9B5FeqtTnZ8mNTWV/fv3n3QbncNFfEdXtHGdx32fitwiIiIiIiIiIiIi4rdsVgcQERERERERERERETldKnKLiIiIiIiIiIiIiN9SkVtERERERERERERE/JaK3CIiIiIiIiIiIiLit1TkFhERERERERERERG/pSK3iIiIiIiIiIiIiPgtFblFRERERERERERExG+pyC0iIiIiIiIiIiIifktFbhERERERERERERHxWypyi4iIiIiIiIiIiIjfUpFbRERERERERERERPyWitwiIiIiIiIiIiIi4rdU5BYRERERERERERERv6Uit4iIiIiIiIiIiIj4rf8H6deaCVBgSMEAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABbkAAAFFCAYAAADB3eDIAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAADdk0lEQVR4nOzdd3wb5f3A8Y+WJe8Zx3Fsx44Tx9l775DFCAl7J+xZRgtllZbyK22hQIECZZOUvQkzIUAm2XtPx45XlveUZUn3+0NYsRwP2ZZ8sv19v156WXd67u6r882vnnsejaIoCkIIIYQQQgghhBBCCCFEO6RVOwAhhBBCCCGEEEIIIYQQoqUkyS2EEEIIIYQQQgghhBCi3ZIktxBCCCGEEEIIIYQQQoh2S5LcQgghhBBCCCGEEEIIIdotSXILIYQQQgghhBBCCCGEaLckyS2EEEIIIYQQQgghhBCi3ZIktxBCCCGEEEIIIYQQQoh2S5LcQgghhBBCCCGEEEIIIdotSXILIYQQQgghhBBCCCGEaLckyS2EEEIIIYQQQgghhBCi3ZIktxBCCCGEEEIIIYQQQoh2S5LcQggBJCYmotFo0Gg0ZGRkdNhlivanZhvRaDRqh9IpTJkyxbm+V65cqXY4PqUzH7M683cXwpPcOcbK/uZ75H/SMFk3wh1WqxV/f380Gg0GgwGz2ax2SEJ0SJLkFkI06Nprr3VJsD399NNqhyQ6gNo3uM19XX/99U3O869//WuLY8vIyHBZXnNvVjwVhxBCCPVkZGTw5ptvcu211zJ48GDCw8MxGAxEREQwaNAgbrvtNlatWuX2/BYtWtTs893NN9/c7Li3bdvGww8/zIgRI+jWrRtGo5HY2FiGDRvGjTfeyHvvvceJEyeaPV8hhBCts3//fmdiOzU1FZPJpHJEQnRMkuQWQtSrtLSUr776ymXc//73P5WiEUII4UmdueZZZ/7uamhP63v79u2MHj2apKQkbr31Vj744AN27dpFUVERVquVwsJCdu/ezRtvvMGUKVOYOnUqmZmZaofNqVOnuPbaaxk+fDhPP/00W7du5cSJE1gsFo4fP8727dtZuHAh8+fP58knn1Q7XCGEaFfnBk/Yvn278/2QIUPUC0SIDk6vdgBCCN/02WefUVFR4TJu//79bN68mZEjR6oUlehoRo4cyahRo9wuP2bMGC9GI4QQojM7ePAgmzZtchmXkpLCgAEDiIqKoqioiHXr1pGdnQ3AypUrGTt2LGvWrKFnz55uLSM1NZVzzjmnyXLjxo1za36ZmZlMmTKF9PR057g+ffowcOBAIiMjqaioIC0tjR07dpx1XSeEEKJt7Nixw/lektxCeI8kuYUQ9apda9vf35/KykrneElye0ZnqLXQlPPOO0+a9RCinejMx6zO/N07o169enHzzTdz7bXX0r17d5fP7HY7ixYt4u6776aiooLc3FyuueYa1q1b51bfCaNHj+bll1/2SJzFxcVMnTrVmeCeOnUqL7zwAoMGDTqrrMViYfny5ZSWlnpk2d4k+5vvkf+JEK0jNbmFaBvSXIkQ4izp6emsWbMGcHR69+yzzzo/++ijj7BYLGqFJoQQQgjhFd26dWPhwoUcOHCAhx566KwEN4BWq+XGG2/k/fffd47bsGEDy5Yta8tQAXjggQc4evQoAFdccQU//fRTvQluAD8/P2bPns1ll13WliEKIYTAtSb30KFD1QtEiA5OktxCiLO8++67KIoCwOTJk7n11lvp0qULAAUFBXz33XdqhieEEEII4XGTJ0/m+uuvR6fTNVn2oosucmlu6/vvv/dmaGfZsWMHb731FgDx8fG8+eabbsUthBCibWVkZFBUVAQ4jtcRERHqBiREByZJbiGEC0VRePfdd53D1113HXq9niuvvNI5zt0OKGs6E6n9+O7mzZu5+eabSUlJITAwkIiICEaNGsU///lPSkpKVJ1vQwYPHuxc3kcffeT2dAsWLHBO94c//OGsz93pcKW+73rw4EHuu+8++vbtS1BQECEhIQwePJhHHnmEvLw8t+Oz2Wy8/fbbTJ8+na5du2IymUhMTGTu3Ll89dVXzh86pkyZ4oxh5cqVbs9feI8ntvdjx47x6quvctVVVzFgwABCQ0MxGAxERkYycOBA7rjjDjZs2NCsuLKysnjiiSeYNGkSXbt2xWg04ufnR2RkJIMHD+bqq6/m1Vdf5cSJE03OKz8/n+eee44ZM2YQHx+PyWQiLCyMfv36cdddd7Fly5ZmxWa32/nf//7HjBkziImJcdneFy9e3Kx5NYc31nONkpISXnrpJebMmUNiYiJBQUEYjUZiY2M555xzeOKJJ9i7d6+zfEZGhnNfPnbsmHN8UlKSy7Gmof29qWPWoEGDWnSsvPXWW53T3XXXXWd97ol16O3vXteGDRv43e9+R//+/QkPD8dkMhEXF8fs2bN5+eWXKS8vd2vdeOsc4Ml9tT6tXd+1eWpdesP48eOd79u6OYfXXnvN+f6uu+4iODi4TZdflyePsS29PtqxYwd33HEHffr0ISgoiKCgIEaPHs1///tfrFbrWfPYsmUL119/PX379iUwMJDIyEimTp3KBx980Kx4wTPnLF/e39U4BnprfXjzvNwa3jqH1ubpa6u2vg6py1vb2c6dO7n33nsZMGAAERERaDQa5s2b16x1U1tDTZX88ssvXH/99aSmphIYGEhISAhjx47l9ddfx263t3h5QnRqihBC1LJ69WoFUADFZDIpxcXFiqIoyqZNm5zjDQaDcurUqSbnVVO+5lDz+OOPK1qt1mV87Vf37t2VdevWqTLfHj16OMunp6e7fPbSSy85P5s+fXqT8SmKohQXFysBAQHO6fbu3dusZTb0XV999VXFaDQ2+F0jIyOVzZs3NxlfVlaWMmzYsAbnAyhz585VSkpKlMmTJzvHrVixwq3v35ja83v88cdbPT9PzjM9Pd1lHTT0f/F2HLV5Y3t/4IEHFI1G0+j/v+Z15ZVXKuXl5U3G+frrryv+/v5uzXP8+PGNzuvll19WQkNDG52HRqNRbrzxRqWqqqrJ2I4fP66MHj260flddNFFHt/evbGea7z66qtKeHi4W/NesmSJoihnb99Nvep+/6aOWU8//bTz8/POO8+t72E2m12+R91t11Pr0NvfvUZZWZlyxRVXNDn/bt26KT/88EOT66fu/u+Jc4An99WGtHZ9e2NdesMf/vAHt7b5hQsXOsstWLCg1cu1Wq1KSEiIc56HDx9u9Txbw9PH2JZcHz399NOKTqdrcPmzZs1SzGazoiiO9XfHHXc0eTyxWq1ufX9PnbN8eX9X4xjojfXhjfOyu+umKd44h9bm6WsrNa5DanhzO3v88cfrPZbMnTu3yXXSkL/85S/O+fz5z39W0tPTlenTpzca+2WXXabY7fYWL1OIzko6nhRCuKhdS3vu3LmEhIQAMHLkSFJTUzlw4ADV1dV8+OGH3HvvvW7P9z//+Q9PPPEE4OjQafTo0fj5+bF7925nrYGcnBxmz57NqlWr3O6Qw1vzre3aa6/lwQcfpLKykl9++YWMjAwSExMbneajjz6ioqICgLFjx9KvX79mL7euRYsWcccddwDQp08fRowYgb+/PwcOHGDt2rUoikJ+fj4XXngh+/fvJzQ0tN755OfnM23aNA4fPuwcl5yczOjRozEajezfv5+NGzfy9ddfc+ONN7Y6buE5ntres7KyUBQFjUZDnz596NOnD5GRkRgMBvLz89m+fTtpaWkAfPzxx5SUlPDdd9812Kna4sWLue2225zDNTVR4uLi0Ov1FBcXc+jQIfbs2dNkm/733XcfL774onM4KiqKsWPHEhMTg9lsZvv27ezZswdFUXjnnXfIzc3l+++/R6ut/+G0oqIipk2bxv79+53jkpKSGDt2LEajkb1797Jp0ya++uqrBufRUp5ezzXuueceXnrpJeewTqdj5MiR9O7dG5PJxOnTp9mxY4eztp3ZbAYc/5eaWl7vvvuuswO6+fPn11sLtL72iBtz9dVX88gjj2C321m2bBmnT592NnXVkB9++IHCwkLAsU2PHTvW5XNPrUNvf3eAiooKpk2bxqZNm5zjYmNjmThxIkFBQRw5coRff/0Vm83G8ePHufDCC/noo4+49NJL3Zq/J84BntxXG9Pa9e3tdekpu3fvdr6Pj493a5qioiI+++wz9u7dS3FxMSEhIcTGxjJ27FgGDhzoVueVe/bscT61ExoaSnJyMlarlffee4/333+fvXv3UlhYSFRUFIMGDeLCCy/kxhtvxGg0tuyLNvF91DrG1nj99dd56KGHAEdt2CFDhqDT6di4cSP79u0D4Mcff+See+7h9ddf58477+SNN95Aq9UycuRI+vbti91uZ82aNc5OPD/++GMGDx7Mww8/3OiyPX3OqtGe9vca3txvPXUN7K3zsid44xxaw9PbqZrXId7czp555hnndXZycjKjRo0iICCAjIwMDAZDk9M3pHZNbn9/f0aPHs2pU6cIDQ1l4sSJxMTEcPz4cVasWOG8f/zss8+YN28eV199dYuXK0SnpFJyXQjhgyoqKlxqBn333Xcun//97393fjZ06NAm50etX6P9/PwUk8mkvP/++2eV+/XXX5Xu3bs7yw4cOFCxWCxtOt+mamEsWLDA+flf/vKXJr/7yJEjneXffvvtFi2z7nc1Go1Kly5dnLUhalu1apXL/+6JJ55oMLZrr73WWa6hdbdt2zalV69ezuXWlJea3G0TR23e2N7/9a9/KQsXLlROnz7d4HJXr17t3AYA5b333muw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ux3iXE5inHacjhOb90hERMKXanKLRBCbzUZMlIOYKPV6ExGR8GGz24mJ1eRbIiISfmw2Gy6nDZfTTnKsammLiPR1ur0pIiIiIiIiIiIiIhFLSW4RERERERERERERiVhKcouIiIiIiIiIiIhIxFKSW0REREREREREREQilpLcIiIiIiIiIiIiIhKxlOQWERERERERERERkYjltDqAnmYYBgCNjY0WRyIiIiIiIiIiIiIiHTmYwz2Y0+1In0tyNzU1AZCdnW1xJCIiIiIiIiIiIiJyPE1NTSQnJ3e43mYcLw3eywSDQfbu3UtiYiI2m83qcHpUY2Mj2dnZlJaWkpSUZHU4ItLF1MZFei+1b5HeTW1cpHdTGxfpvdS+u59hGDQ1NZGZmYnd3nHl7T7Xk9tutzN48GCrw7BUUlKSGp5IL6Y2LtJ7qX2L9G5q4yK9m9q4SO+l9t29jtWD+yBNPCkiIiIiIiIiIiIiEUtJbhERERERERERERGJWEpy9yHR0dHcc889REdHWx2KiHQDtXGR3kvtW6R3UxsX6d3UxkV6L7Xv8NHnJp4UERERERERERERkd5DPblFREREREREREREJGIpyS0iIiIiIiIiIiIiEUtJbhERERERERERERGJWEpyi4iIiIiIiIiIiEjEUpJbRERERERERERERCKWktx9QElJCXfccQejRo0iPj6e1NRUpk6dyq9//WvcbrfV4YnIp9hstk49zj333OMe64033mDBggUMHjyY6OhoBg8ezIIFC3jjjTe6/4OI9EGVlZW8+uqr3H333cybN4/09PRQm73uuutO+Hhd0Yb9fj8PP/wwZ599Nv379yc2Npbhw4dz8803s2XLlhOOSaSv6or2/dRTT3X6PP/UU08d93hut5sHHniAqVOnkpqaSnx8PKNGjeKOO+6gpKTk1D6wSB+zZs0afvaznzF37tzQeTchIYH8/Hyuv/56li9ffkLH0zlcJLx0RRvXeTzMGdKrvfLKK0ZSUpIBHPWRn59v7Nq1y+owReQwHbXXTz9mzZrV4TECgYBxww03HHP/G2+80QgEAj33wUT6gGO1uYULF3b6OF3VhquqqoypU6d2eIzo6Gjj0UcfPcVPLdI3dEX7fvLJJzt9nn/yySePeaxdu3YZI0aM6HD/pKQkY/Hixaf+wUX6gLPPPrtT7fLaa6812trajnksncNFwk9XtXGdx8Ob84ist/Qa69ev5/Of/zytra0kJCTwwx/+kNmzZ9Pa2sqiRYt49NFH2blzJ/Pnz2fNmjUkJiZaHbKIHOaWW27h1ltv7XB9fHx8h+t+/OMf8/jjjwMwceJEvve97zF8+HB2797NAw88wPr163nsscfo378/9957b5fHLiIwZMgQRo0axdtvv33C+3ZFGw4EAixYsIDVq1cDcPnll/PVr36V1NRUPvroI37xi19QWVnJzTffTFZWFvPmzTv5DyvSx5xK+z7orbfeIjMzs8P1gwcP7nBdU1MT8+fPZ9euXQB89atf5eqrryY2NpYlS5Zw33330djYyOc//3lWrFjBhAkTTjpOkb5g7969AGRmZnLVVVdx9tlnM2TIEAKBAKtWreKhhx6ivLycv//97/h8Pp555pkOj6VzuEj46co2fpDO42HI6iy7dJ+Dd6qcTqexcuXKI9Y/8MADoTtE99xzT88HKCJHdartcseOHYbT6TQAY8qUKYbb7W63vqWlxZgyZUro+0GjOUS6zt13320sXrzYqKioMAzDMIqKik64p2dXteHHH3889N633nrrEet37doVGu2Vl5dn+Hy+E/uwIn1MV7Tvw3uAFRUVnXQsd911V+g4DzzwwBHrV6xYEfoeOdbILxExzZ8/33j22WcNv99/1PVVVVVGfn5+qN0tW7bsqNvpHC4Snrqqjes8Ht6U5O6lPvroo1CDufnmm4+6TSAQMEaPHm0ARkpKiuH1ens4ShE5mlNNct9yyy2hY6xateqo26xateqYF84i0jVOJgnWVW344Dk+NTXVaGlpOeo29913X+g4zz33XKfiExGTVUlur9drJCcnG4AxevToDkse3HzzzaH3+vjjj0/qvUTkkMWLF4fa1De+8Y2jbqNzuEjk6kwb13k8vGniyV7qv//9b+j59ddff9Rt7HY71157LQD19fUsWbKkJ0ITkW5kGAYvv/wyAKNGjWLatGlH3W7atGmMHDkSgJdffhnDMHosRhHpWFe14Z07d7Jt2zYAPve5zxEXF3fU4xw+Wd5LL710quGLSA9YsmQJDQ0NACxcuBC7/eg/6dS+RbrW7NmzQ8937959xHqdw0Ui2/HaeFfRebz7KMndSx2cFTY+Pp7Jkyd3uN2sWbNCz1esWNHtcYlI9yoqKgrVGzu8fR/NwfXl5eUUFxd3d2gi0gld1YYPnx3+WMcZOHAg+fn5gK4DRCJFZ9v3lClTQskxtW+RU9fW1hZ67nA4jlivc7hIZDteG+8qOo93HyW5e6mDd37z8vJwOjueX3TUqFFH7CMi4eH5559nzJgxxMXFkZiYyIgRI1i4cOExR11s3bo19Pzw9n00av8i4aer2vDJHKe0tJSWlpZOxyoip+b6668nMzMTl8tFeno606ZN484776S8vPyY+3W2fTudTvLy8gCd50W6wrJly0LPR48efcR6ncNFItvx2vin6TwefpTk7oU8Hg/V1dXAsWdzBejXrx/x8fGAeWIUkfCxdetWtm3bRmtrK83NzRQUFPD3v/+d8847jwULFoSGOB2urKws9Px47T87Ozv0XO1fJDx0VRs+meMYhtFuPxHpXkuXLmXfvn34fD5qamr46KOP+OUvf0leXh5/+9vfOtzvYDuNj48nJSXlmO9xsH1XVVW166EmIicmGAzyq1/9KrT8uc997ohtdA4XiVydaeOfpvN4+Om4i69ErKamptDzhISE424fHx9PS0sLzc3N3RmWiHRSXFwcl156KXPmzGHUqFEkJCRQVVXFsmXLePjhh6mpqeG///0vl112Ge+88w5RUVGhfU+k/R+8wQWo/YuEia5qw/ouEAlfw4YN4/LLL2f69OmhH6+FhYX85z//4YUXXsDj8fC1r30Nm83GTTfddMT+B9t3Z6/zD2pubiY6OrqLPoVI3/Lb3/6Wjz/+GIDLL7/8qCVBdQ4XiVydaeMH6TwevpTk7oU8Hk/oucvlOu72BxtJa2trt8UkIp1XXl5+1Du6F1xwAd/4xjeYN28e69evZ9myZfz1r3/lm9/8ZmibE2n/h58g1f5FwkNXtWF9F4iEpwULFrBw4UJsNlu716dOncrnP/95Xn31VS6//HJ8Ph+33347l156KQMHDmy37cH2fSLX+aD2LXKyli1bxg9+8AMAMjIy+Otf/3rU7XQOF4lMnW3joPN4uFO5kl4oJiYm9Nzr9R53+4NDHmJjY7stJhHpvGMNWRowYAAvvPBCqPf2H//4x3brT6T9Hz7cSe1fJDx0VRvWd4FIeEpOTj7ih/HhLr74Yu6++24A3G43jz/++BHbHGzfJ3KdD2rfIidjy5YtLFiwAL/fT0xMDM8//zwZGRlH3VbncJHIcyJtHHQeD3dKcvdCiYmJoeedGbJ0cIKKzgyVEBHrDRs2jAsuuACAgoKC0CzucGLt//DJadT+RcJDV7VhfReIRK6bbrop9AP68EmwDjrYvk/kOh/UvkVOVFFREXPnzqWurg6Hw8GiRYs455xzOtxe53CRyHKibbyzdB63jpLcvVBMTAxpaWkAx518oq6uLtRoDp/8QkTC25gxY0LPD5+9+fDJaY7X/g+f5EbtXyQ8dFUbPpnj2Gy2405wJSLdLyMjI3Qtf/g5/qCD7bSlpYX6+vpjHutg++7fv7/qeIqcgL1793L++eezd+9ebDYbTzzxBJdddtkx99E5XCRynEwb7yydx62jJHcvdTABVlBQgN/v73C77du3h56PHj262+MSka7R0RCpw5Pfh7fvo1H7Fwk/XdWGT+Y42dnZ7Sa3ERHrHGsodGfbt9/vZ/fu3YDO8yInorq6mgsuuIDCwkLALA947bXXHnc/ncNFIsPJtvETofO4NZTk7qVmzpwJmHeG1q5d2+F2hw+dOOuss7o9LhHpGlu3bg09z8zMDD0fOnRoaPloQ6MO9/777wOQlZVFbm5u1wcpIiesq9rwweuA4x2noqKCnTt3AroOEAkXVVVVVFdXA+3P8Qd1tn2vWbMmNGJT7VukcxoaGrjwwgtD19q/+tWv+PrXv96pfXUOFwl/p9LGO0vncesoyd1Lffaznw09f/LJJ4+6TTAY5O9//ztgTnQ3e/bsnghNRE5RUVER77zzDgDDhw8nKysrtM5ms4WGWW3fvp0PP/zwqMf48MMPQ3eNL7vssmPeaRaRntNVbTg/Pz/U4+O5557D7XYf9ThPPfVU6PmCBQtONXwR6QKPPPIIhmEAMGvWrCPWn3vuuSQnJwPw9NNPh7b9NLVvkRPjdruZP38+69atA+DHP/4x3//+9zu9v87hIuHtVNt4Z+k8biFDeq2zzz7bAAyn02msXLnyiPUPPPCAARiAcc899/R8gCJyhFdeecXw+Xwdrq+oqDAmTpwYarsPPfTQEdvs2LHDcDgcBmBMmTLFcLvd7da73W5jypQpoe+HnTt3dvnnEBFTUVFRqL0uXLiwU/t0VRt+/PHHQ+/99a9//Yj1BQUFRlJSkgEYeXl5x/zuEZEjnWj7LioqMtatW3fMbRYvXmy4XC4DMGJjY42ysrKjbnfXXXeF3vuBBx44Yv3KlSsNp9NpAMasWbM683FE+rS2tjZj7ty5oXZ12223ndRxdA4XCU9d0cZ1Hg9/NsPo4JaBRLz169dz1lln0draSkJCAj/60Y+YPXs2ra2tLFq0iEceeQQw7xSvWbOm3SzOImKN3NxcfD4fV1xxBdOnTyc3N5fY2Fiqq6tZunQpf/vb30JDn2bOnMm777571AkofvjDH/KrX/0KgIkTJ/L973+f4cOHs3v3bu6//37Wr18f2u7ee+/tuQ8o0sstX76cgoKC0HJ1dTXf/e53AXOY4Y033thu++uuu+6ox+mKNhwIBJg1axYrVqwA4IorruCrX/0q/fr14+OPP+bnP/85lZWV2O12Xn31VebNm3dKn12ktzvV9r106VJmz57N9OnTueSSSxg/fjwZGRkAFBYW8sILL/DCCy+EenT9+c9/5tZbbz1qLE1NTUyZMiVUquCmm27i6quvJjY2liVLlnDvvffS3NxMbGwsK1euZMKECV3xn0Ck17riiit48cUXATjvvPP43e9+d8yRji6Xi/z8/KOu0zlcJPx0RRvXeTwCWJtjl+72yiuvhO7wHu2Rn59v7Nq1y+owReSAnJycDtvr4Y8rrrjCqKur6/A4gUDA+MpXvnLMY9xwww1GIBDouQ8n0gcsXLiwU2344KMjXdWGq6qqjKlTp3Z4jOjoaOPRRx/t6v8MIr3SqbbvJUuWdGq/uLg4429/+9tx49m1a5cxYsSIDo+TlJRkLF68uDv+U4j0OifStgEjJyenw2PpHC4Sfrqijes8Hv7Uk7sPKCkp4fe//z2vvfYaZWVluFwu8vLyuOqqq/i///s/4uLirA5RRA5YtmwZy5YtY9WqVRQWFlJdXU1jYyMJCQlkZ2czY8YMFi5cyPTp0zt1vNdff51HHnmE1atXU11dTXp6OlOnTuXmm29Wjw+RbnDdddfx9NNPd3r7412GdUUb9vv9PProozzzzDNs27aNlpYWMjMzmTNnDrfddhtjx47tdLwifdmptu+mpiZeeeUVVq1axZo1a9i3bx/V1dX4/X769evH2LFjmTNnDjfeeGOoZ9jxtLS08Oc//5nnn3+egoICvF4v2dnZfOYzn+G2224jJyfnhD6jSF91ovPT5OTkUFxcfMxtdA4XCR9d0cZ1Hg9/SnKLiIiIiIiIiIiISMSyWx2AiIiIiIiIiIiIiMjJUpJbRERERERERERERCKWktwiIiIiIiIiIiIiErGU5BYRERERERERERGRiKUkt4iIiIiIiIiIiIhELCW5RURERERERERERCRiKcktIiIiIiIiIiIiIhFLSW4RERERERERERERiVhKcouIiIiIiIiIiIhIxFKSW0REREREREREREQilpLcIiIiIiIiIiIiIhKxlOQWERERERERERERkYilJLeIiIiIiIiIiIiIRCwluUVEREREREREREQkYv0/Rmf4zem2TL4AAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABbkAAAFFCAYAAADB3eDIAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAADq70lEQVR4nOzddXgU1/rA8e9aduOuxEhCcJfgVqRCoVBX6nort+2vcq1Xe+u3vaXtrdIWalCh3gLF3V0DCZBA3GWT7O78/hiyZCGyCRs28n6eZ5/s7J6ZeWcy+u6ZczSKoigIIYQQQgghhBBCCCGEEO2Q1t0BCCGEEEIIIYQQQgghhBAtJUluIYQQQgghhBBCCCGEEO2WJLmFEEIIIYQQQgghhBBCtFuS5BZCCCGEEEIIIYQQQgjRbkmSWwghhBBCCCGEEEIIIUS7JUluIYQQQgghhBBCCCGEEO2WJLmFEEIIIYQQQgghhBBCtFuS5BZCCCGEEEIIIYQQQgjRbkmSWwghhBBCCCGEEEIIIUS7JUluIYQQQgghhBBCCCGEEO2WJLmFEEIIIYQQQgghhBBCtFuS5BZCdGjx8fFoNBo0Gg3p6ekddp5CAPbtTqPRuDuUTmH8+PH29b1ixQp3h9PmdNZjYWddbiFczZljrOxvbY/8Txom60Y4w2Kx4OnpiUajwWAwYDab3R2SEO2GJLmF6IRuuukmh2TY888/7+6QRAezYsUK7r//foYMGUJoaCgeHh54enoSFhbGkCFDuOGGG/jPf/7Dli1bUBSlwenUvcFt7uvWW29tcpp//etfW7yM6enpDvNr7s2Kq+IQQgjhPunp6bz77rvcdNNN9O/fn8DAQAwGA0FBQfTr14977rmHlStXOj29Dz/8sNnnuzvvvLNFsW/bto2nnnqKIUOGEBkZidFoJCoqikGDBnH77bczb948srKyWjRtIYQQLbN//357YrtHjx6YTCY3RyRE+6F3dwBCiAurtLSUb775xuGzjz76iCeffNJNEYmOZP/+/dx+++1s2LDhnO9qamowm83k5uaydetWPvvsMwB69+7Nnj17LnSoQggnxcfHc+zYMQDS0tKIj493b0AXUGdedndoT+t7+/bt3HvvvWzatKne7wsLCyksLGT37t288847jB8/no8++ojY2NgLHOm5cnJyePTRR/nkk0/O+e7UqVOcOnWK7du3M3fuXB544AHmzJnjhiiFEOKM9nR+OF/bt2+3vx8wYID7AhGiHZIktxCdzMKFC6moqHD4bP/+/WzevJmhQ4e6KSrREWzfvp2JEydSVFRk/yw8PJwhQ4YQERGBRqMhPz+fPXv2kJqaaq/BXbd8Y4YOHcqwYcOcjmf48OHNCV8IIYRw2sGDB89JcCcnJ9OnTx9CQkIoKipi3bp1ZGRkAOoTTiNGjGD16tUkJCQ4NY8ePXpw0UUXNVlu5MiRTsd9/Phxxo8fT1pamv2z7t2707dvX4KDg6moqODIkSPs2LHjnOtFIYQQrW/Hjh3295LkFqJ5JMktRCfz0Ucf2d97enpSWVlp/1yS3K7RGdvYq6mp4YYbbrAnrKOionjjjTeYPn06Wu25LWPl5uby7bffMm/ePI4ePerUPC699FJp1kOIdqQzHguh8y53Z5WUlMSdd97JTTfdRJcuXRy+s9lsfPjhhzz44INUVFRw8uRJbrzxRtatW+dU3wkpKSkurUVdXFzMhAkT7AnuCRMm8Oqrr9KvX79zylZXV7Ns2TJKS0tdNv/WIPtb2yP/EyHOj9TkFqLlpE1uITqRtLQ0Vq9eDagd1L300kv27z777DOqq6vdFZpo5xYtWsSBAwcA9ceT5cuXc8UVV9Sb4AYIDQ3lzjvvZOXKldJhnxBCiHYnMjKSuXPncuDAAZ588slzEtwAWq2W22+/nfnz59s/27BhA4sXL76Qodo9/vjj9h+Wr732WpYsWVJvghvAw8ODiy++mKuvvvpChiiEEJ1e3ZrcAwcOdF8gQrRDkuQWohP5+OOP7U1EjBs3jrvvvpvQ0FAACgoK+OGHH9wZnmjH6t6wz5gxg+TkZKfHTUxMbI2QhBBCiFYzbtw4br31VnQ6XZNlZ86c6dDc1o8//tiaodVrx44dvPfeewDExMTw7rvvOhW7EEKICyc9Pd3+ZGxMTAxBQUHuDUiIdkaS3EJ0Eoqi8PHHH9uHb775ZvR6Pdddd539s7pNmTRGo9HYX7U2b97MnXfeSXJyMt7e3gQFBTFs2DD+/e9/U1JS4tbpNqR///72+dV2guiM2bNn28d79NFHz/k+Pj7e/n1Dj2zWt6wHDx7kkUceoWfPnvj4+ODn50f//v15+umnycvLczo+q9XK+++/z6RJkwgPD8dkMhEfH8+MGTP45ptv7D90jB8/3h7D+damzszMtL+Pi4s7r2kJ13LFPnTs2DHeeustrr/+evr06YO/vz8Gg4Hg4GD69u3LfffdV29no405ceIEf/vb3xg7dizh4eEYjUY8PDwIDg6mf//+3HDDDbz11ltkZWU1Oa38/HxefvllJk+eTExMDCaTiYCAAHr16sUDDzzAli1bmhWbzWbjo48+YvLkyURERDjsQ4sWLWrWtJqrNdY1QElJCa+//jqXX3458fHx+Pj4YDQaiYqK4qKLLuJvf/sbe/futZdPT0+3Hx9qO3oC6Nq1q8Pxq7FjSGPHwn79+rXo+Hv33Xfbx3vggQfqLXO+6/B8l92Zc0BdGzZs4He/+x29e/cmMDAQk8lEdHQ0F198MXPmzKG8vNypddNa5xVX7qv1ccW2VstV67I1jBo1yv7eHc05/O9//7O/f+CBB/D19b3gMdRy5TG2pddcO3bs4L777qN79+74+Pjg4+NDSkoKb775JhaL5ZxpbNmyhVtvvZWePXvi7e1NcHAwEyZMqLfzzqa44pzVlvf3jnYMbK3z8vlozXNoLVdfWzX3OgTa3vmhvm1s586dPPzww/Tp04egoCA0Gg1XXHFFs9ZNXQ01VfLbb79x66230qNHD7y9vfHz82PEiBG8/fbb2Gy2Fs9PiA5HEUJ0CqtWrVIABVBMJpNSXFysKIqibNq0yf65wWBQcnJympxWbfnaQ8gzzzyjaLVah8/rvrp06aKsW7fOLdONi4uzl09LS3P47vXXX7d/N2nSpCbjUxRFKS4uVry8vOzj7d27t1nzbGhZ33rrLcVoNDa4rMHBwcrmzZubjO/EiRPKoEGDGpwOoMyYMUMpKSlRxo0bZ/9s+fLlTi1/Qy677DL7tK655przmlZddWN85pln2tQ009LSHNZrQ//r1o6jrtbYhx5//HFFo9E0uk3Vvq677jqlvLy8yTjffvttxdPT06lpjho1qtFpzZkzR/H39290GhqNRrn99tuVqqqqJmM7deqUkpKS0uj0Zs6c6fJ9SFFaZ10rinp8CQwMdGq6P//8s6Io527fTb3qW/7GjoXPP/+8/btLL73UqeUwm80Oy1HftuuKdXi+y+7MOUBRFKWsrEy59tprm5x+ZGSk8tNPPzW5fs7e/11xXnHlvtoQV2xrrl6XreHRRx91apufO3euvdzs2bNdMm+LxaL4+fnZp3v48GGXTLclXH2Mbck11/PPP6/odLoG5z916lTFbDYriqKuu/vuu6/JY4nFYnFq+V11zmrL+3tHOga6+rzs7LppSmudQ2u5+tqqJdchitL2zg9nb2PPPPNMvceSGTNmNLlOGvKXv/zFPp0///nPSlpamjJp0qRGY7/66qsVm83W4nkK0ZFIx5NCdBJ1a2nPmDEDPz8/AIYOHUqPHj04cOAANTU1fPrppzz88MNOT/e///0vf/vb3wC186WUlBQ8PDzYvXu3/Rf+zMxMLr74YlauXOl05xmtNd26brrpJp544gkqKyv57bffSE9PJz4+vtFxPvvsMyoqKgAYMWIEvXr1avZ8z/bhhx9y3333AdC9e3eGDBmCp6cnBw4cYO3atSiKQn5+PtOnT2f//v34+/vXO538/HwmTpzI4cOH7Z8lJiaSkpKC0Whk//79bNy4kW+//Zbbb7/9vOOuq26TI99//z379u1zyboRLeeqfejEiRMoioJGo6F79+50796d4OBgDAYD+fn5bN++nSNHjgDw+eefU1JSwg8//NBgp2qLFi3innvusQ/X1kSJjo5Gr9dTXFzMoUOH2LNnT5P9BDzyyCO89tpr9uGQkBBGjBhBREQEZrOZ7du3s2fPHhRF4YMPPuDkyZP8+OOPDbYVX1RUxMSJE9m/f7/9s65duzJixAiMRiN79+5l06ZNfPPNNw1O43y4el0DPPTQQ7z++uv2YZ1Ox9ChQ+nWrRsmk4nc3Fx27Nhhr21nNpsB9f9SW8vr448/tnc+d8stt9RbA7S+9ogbc8MNN/D0009js9lYvHgxubm59uazGvLTTz9RWFgIqNv0iBEjzinjinXY2ssOUFFRwcSJE9m0aZP9s6ioKMaMGYOPjw+pqamsWbMGq9XKqVOnmD59Op999hlXXXWVU9N3xXnFlftqY853fbf2unSV3bt329/HxMQ4NU5RURELFy5k7969FBcX4+fnR1RUFCNGjKBv375OdV4JsGfPHvuTO/7+/iQmJmKxWJg3bx7z589n7969FBYWEhISQr9+/Zg+fTq33347RqOx+QvaxPK48xgL8Pbbb/Pkk08Cam3YAQMGoNPp2LhxI/v27QPg119/5aGHHuLtt9/m/vvv55133kGr1TJ06FB69uyJzWZj9erV9g48P//8c/r3789TTz3V6Lxdfc6q1Z7291rt4RgIrXNedoXWOoeC67fTll6HQNs+P7z44ov26+zExESGDRuGl5cX6enpGAyGJsdvSN2a3J6enqSkpJCTk4O/vz9jxowhIiKCU6dOsXz5cvs96cKFC7niiiu44YYbWjxfIToMNyXXhRAXUEVFhUMNnh9++MHh+3/961/27wYOHNjk9Kjzy7GHh4diMpmU+fPnn1NuzZo1SpcuXexl+/btq1RXV1/Q6TZVY2L27Nn27//yl780uexDhw61l3///fdbNM+zl9VoNCqhoaEONRdqrVy50uF/97e//a3B2G666SZ7uYbW3bZt25SkpCT7fGvLn28t1GXLlp1TO+aFF15QMjIyzmu6UpO7eVpjH3rhhReUuXPnKrm5uQ3Od9WqVfbtClDmzZvXYNkBAwbYy/3ud79rsNZTaWmpsmDBAuXJJ5+s9/v333/fPh0/Pz/l3XffrXcZli1b5rCszz//fIOx3X777Q7rr759fOPGjfZ93MPDw2X7kKK4fl2/9dZbDtvENddcoxw/frzesrt371Yeeugh5ddffz3nu5bWPGtqvAkTJti/f/3115uc3qxZs5rcZ1y9Dluy7M6MU7dmqE6nU1599VXFarU6lDl06JAyePBgh+28sRhcfV5x1b7aHC1Z362xLl3t2LFjDrX9Fi5c2GDZujW5G3t169ZNee+995yqvffuu+/ax+vTp49y/PhxZdiwYY1OPzY2Vtm0aZMrV0OrHGNbcs0VERFR7/Reeuklezm9Xq+88sorCqD07NlT2bFjh0NZi8WiPPLII/byPj4+SllZWYPL7upzVlve3zvKMVBR2sY5pSGtcQ519XbqqusQRWkb54e6y6LX6xV/f3/lm2++Oadc7ZMgLREdHW2fh8lkUjw8PJTnn39eqaysdCiXkZGhdO/e3V728ssvb/E8hehIJMktRCfwySef2E+AoaGhSk1NjcP36enpDo/i7dq1q9HpnX0j9PnnnzdYds+ePQ7J1IYSw6013aYuiNauXetwQ3f2hU9du3btspf19fVt8GamJTdcO3fubHC+c+bMsZft0aNHvWX27dvnMM3PPvuswemlp6c7XNw3dvPYHJdffvk5/0ONRqN0795dufnmm5XXXntN2bhx4znbX2PqJoKHDh2qPPDAA06/8vPzm5xmR05yu3LfdEZaWppiMpkUQBk2bFi9ZUpLS+3zi4mJafGjlSUlJUpAQIA9CbJhw4ZGy+/bt88eW3BwcL037wcPHnQ4Dn744YcNTu/gwYMOzRa5ah9yljPruqCgQPH19bXHd++997Z4fq2V5P7ggw/s3w8fPrzRaRUVFTlsr+fb3IIz69CZZWjJOKmpqQ7NCM2ZM6fBaRUUFCjx8fH2srfddluDZV15XnHVvtpczV3frbUuXe3KK690uNZoLAHibJK79jVt2rRGk6uK4vj4e58+fZTevXs7/P9vvvlm5dZbbz2nuTMvLy9ly5YtLlkHrXWMbe41l8lkUvbs2dPgvM9uFiAsLEzJzs6ut6zFYnFIMn3xxRf1lmuNc1Zb3t87wjGwuVrznNIQV59DXb2duvI6RFHaxvmh7jam1WqVlStXtnRx6pWXl3fOdrxs2bIGyy9atMheNjk52aWxCNFeSZJbiE5gypQp9hPgQw89VG+Zugm3xx57rNHp1T35jhkzpsn5122HsrGLsNaYrjMXRHVv9n755ZcG5/fwww/by911110NlmvuDdeDDz7Y4LQURb3o1Ov1CqhJ49r21Ot6/PHH7dMbOXJko9NTFEX529/+5tTNY3OUlpYqM2fObPKG3NvbW7n22msbvWirVXe7bO6roXXfWZLcrtw3nXXJJZc0up1mZmba5zdgwIAWz+fVV1+1T+eRRx5xapx77rnHPs5XX311zvdPPPGE/fvGblBr/eEPf3D5PtQcTa3r5557zh5bXFzcedUqaq0kd3FxsUP7r6mpqQ1Oq25NVFdsq4rS9Dp0ZhlaMs6TTz7psB80lVD64osvHG54i4qK6i3nyvOKq/bV5mru+m6tdelKH374ocP/5pNPPmm0/Ny5c5XY2FjlscceU3766SflxIkTitlsVsrLy5WDBw8qb775ptKjRw+HaU6fPr3RH+kfeuihc86RXl5eyoIFC84pu2zZMiUkJMReLjEx0ak2d5vSWsfY5l5zPfzww43Ot25NVkB59dVXGy3/5z//2V62oevn1jhnteX9vSMcA1uitc4pDXH1OdTV26krr0MUpW2cH+puY67sg6jWkiVLHObx5ptvNlr+8OHDDsdqIYSitE5jZ0KINiMzM5OlS5fah2+++eZ6y91yyy3295988glWq9Wp6dcdryGzZ8+2v9+8ebNTvVe31nTrc9ddd9nfv//++/WWqa6uZv78+fbhO++8s0Xzqs/VV1/d6Pe+vr72Nq8VRXHoXbxW3d7Eb7rppibn6UyZ5vLx8eHrr7/mxx9/ZPLkyQ22zVdeXs4XX3zBxIkTmTFjhr19QOFarbEPHT9+nC+//JJnn32WJ554ggcffJDf/e539ldt+6SKorBz585zxg8JCcFkMgFqG7Fr165tziLZ/fTTT/b3zrY/OHHiRPv7NWvWnPP98uXL7e8bOk7WVXfdtYbzXde//PKL/f1dd93l8rZ1XcHPz4/LL7/cPvzJJ580WLbud84ev853HbaWZcuW2d/feuutTbbdOnPmTIKCggCoqqpi/fr1Tc7jfM8rrtpXW9uFWJfnY8uWLdx777324euvv77JY9YVV1xBWloaL730EpdccgnR0dEYjUa8vLxITk7mvvvuY+fOndx22232cb777js+/fTTBqdZ37F9/vz59W4nEyZM4LvvvrOfw48cOdLovumstnKMbaqt3b59+zarfJ8+fezva48pZ2uNc1Zd7W1/bw/HwPq0tXOKq8+hrt5O3X0d0trb2XXXXXf+QZ5lx44d9vc9evRwOH/Up7i42P4+JCTE5fEI0R5Jx5NCdHDz58/HZrMB6slyyJAh9Za76qqreOCBBzCbzWRlZfHrr79y6aWXNjn9hjotqatv3774+PhQVlaG1Wpl165dTY7XWtOtzy233MJTTz2F2Wzm22+/JT8/n+DgYIcyixYtIj8/3z7fYcOGNXs+DTn7hqo+deOp7TyqlqIo7Nq1yz6ckpLS5PQSEhIICQkhLy+vGZE659JLL+XSSy8lNzeXFStWsG7dOrZu3cr27dspKytzKPvdd98xZswY1q9fX28HMnU988wz/PWvf3V5vB2VK/eh9evX89RTT7F69WoURXFq/vVtWx4eHlxxxRV8/vnnWCwWJk6cyLXXXstVV13F2LFjCQgIcGradW883nnnHYeOdRuSkZFhf3/ixAmH786+IXVm3SUnJxMUFERBQYEzITvNVet648aN9vcTJkxwWXyudtNNN7FgwQJAvQn/y1/+ck6ZjIwMVq5cCYDBYODaa69tdJquWoetQVEUh5vYkSNHNjmOwWBg2LBh9oTBtm3buPjiixsd53zPK67aV1vThVqXLZWWlsbll19u70StX79+/O9//2tyPGfWrYeHB++99x6pqamsXr0agOeff77B5FVtArPWiBEjmDlzZoPTHzFiBLNmzeLLL78E4IsvvnBIqjdXWzrG1k1K1ycwMND+3t/fv8mOZWuTYnDuflTL1eess7Wn/b29HAPrasvnFFeeQ129nbrzOuRCbGeDBw8+7zjPVrfTyTvuuKPJxHzdTnyTk5NdHo8Q7ZEkuYXo4OpeoDRWc8bPz48ZM2bwxRdf2MdzJskdGxvbZBmNRkN0dDQHDhwAIDc3123TrU9gYCBXXXUV8+fPp7q6mnnz5vHII484lKlbw9uVtbiBBnt0r6tuL901NTUO3xUXFzv0dB8TE+PUfKOjo1v1Ijw0NJSrr77aXpvGYrGwYcMG5s6dy8cff4zFYgFg7969/PGPf+S///1vq8XS3mzcuJF58+Y1Wubmm29u9AcNV+1DH3zwAXfeeafTN3a1SktL6/38P//5D1u3buXw4cP2/W3evHlotVp69+7NmDFjmDx5Mpdcckm9tX7Kysocpv3ee+81Ky7gnKcHzt6HnFl3teVcmYBx1bouKSmhsrLSPpyQkOCS+FrDxRdfbP/B7dChQ2zevJmhQ4c6lPn000/t66S2fENcvb26WnFxscMxPC4uzqnx4uPj7e+dOW6f73kFzn9fbW0Xal22xKlTp5g8eTJZWVmAug/+8ssv+Pn5uWweWq2WZ555hkmTJgFqDdyMjAyio6PPKevj4+Mw3FiCu26Z2iT3unXrHL5r7jmqrRxjoel9Q68/c3vszH5Ut3x9+1FrnLPO1p729/Z0DIS2f05x1TnU1dupu69DLsR2Fhoa2qLYGlM3yT158uQmy9f98dCZH3aE6AykuRIhOrDNmzfbf+HVaDTceOONjZavmwT/7rvvKCoqanIeXl5eTsXi7e1tf+/MhV9rTbchd999t/392U2WHD9+3N7ki9FodHlTH039St+Us2tHO7vuzr7pbW16vZ7Ro0fz/vvvs3LlSof5v/vuuw4Xw+1B3RtbwOEG3hlVVVX293VvtECtmfHGG280+qpbe6M+rtiH9u3bxz333GO/OerduzevvfYamzZtIjs7m8rKShS1fw8URXF4vLz2CZKzRUREsGXLFv70pz8RHh7uUH737t28+eabzJw5k8jISJ577rlzmk6q+2hmS9X+wFKrpftQ3XV3vly5rs/+P17ofb05zq5VVrdZqPo+a+zH2tbYXl3t7G3N2W2ouee68z2vwPnvq63tQq3L5srPz2fy5MkcOXIEgMjISJYuXUpkZKTL5zV27FiH80dD54Wzn07r1atXk9Pu2bOn/X1paanDumruOaotHGNrNWffcMV+1BrnrLO1p/29PR0D28M5xVXnUFdvp+6+DrkQ25mnp2fzA2tEZWUlhw4dAtSnb5p66gQck+IDBw50aTxCtFeS5BaiA6tbi1tRFOLj49FoNA2+pk2bZi9vNpvttbobU1FR4VQsdduDbKpZitacbkPGjBlDjx49ALU21KZNm+zfzZ07136xOmvWLIdHU9uCsy8cW7LuLrSRI0fyhz/8wT5sNpvZvHmz2+JpibNrCZ19Qd2UuuVb49F/V+xDr776qv2mZerUqWzbto2HHnqIoUOHEhYWds4j8M4mjPz8/PjHP/5BZmYmGzZs4MUXX+SKK65wqF1UWFjI008/zZVXXulQg+rsG5WCggKHm0xnXnXbsIe2sQ+5cl2f/X9s7rZ5odX94fCLL75wSJ7s3r2b3bt3A+o+V7f90bO11vbqSmdva85uQ6461zXX+eyrra0trsuSkhKmTp3K3r17AbWN1KVLl9K1a1eXzqeWwWBw+F80VPOw9vqmljMJp7PXzfnsL23hGOsurXHOai0XYn9vi/ttQ9rDOQVccw519Xbq7uuQ9rSd1dq1a5f9f9e3b190Ol2T49RtkkWS3EKoJMktRAdVXV3NZ599dl7TcKYttuPHjzdZRlEUMjMz7cPOdIzRWtNtTH0dUCqKwty5c+2fu7qpElfw9/d3qMlVt328xjhbrrWc3c7dqVOn3BRJy/j6+jrc4DTU4VR9FEUhPT3dPnz2I4+33nprkzcTt956a6PzcMU+9Ntvv9nf//Of/8TDw6PR6TnTcVNdOp2OlJQUHn/8cb755huys7NZvXo106dPt5f59ttv+eqrr+zDAQEBDo9K1zYHcD78/f0dls2ZdQdNt5PaHK5c135+fg41jJqzbbrD8OHDSUpKAiA7O5slS5bYv6tbA+2qq646J6lQV2tvr65w9vHa2W2t7vHCHZ1LtWRfbW1tbV2Wl5dz6aWXsnXrVnt8v/zyi1O1ps93vrUaqq14do1AZxJOZyfs6v6w29xzVFs4xrpLa5yzWltr7u9tbb9tTHs4p4BrzqGu3k7dfR3SnrazWs2tlX3ixAl7f1ExMTHnPLEjRGclSW4hOqgffvjB3o6hXq8nJSXFqVfddtzWr19vf2yqIRs2bGgylj179thvlnQ6Hf37929ynNaabmNmz55tv8D7/PPPqaioYOnSpfaL1oSEhDbZgZtGo6Ffv3724bodvTQkPT29xW2Yu8rZF9ruaNP1fA0aNMj+fsuWLU6Pd+DAAYckQ2t0XuOKfejkyZP290219VdcXOzQAWpLaLVaRo8ezaJFixzaIvzuu+8cytXt+HXt2rXnNU9Q96G6y+7Mujt8+LD95sIVXL2u67bXvmzZsvOKzRWPfTelbnNan3zyCaD+CFP3x9qmmopqje3V1cuu0WgYMGCAffjsto7rY7FYHJ50qXvccRdn99Xmam5TEm1lXZrNZqZPn24/Hnl5efHjjz+2yrG9rqNHjzp0mBcVFVVvua5duzrUJt+3b1+T067b3EhQUNB5NR3SFo6x7uTqc9aF5sr9vS3tt0250NdA58MV51BXb6euvA6B9nt+cFZza2VLUyVC1E+S3EJ0UHVrYV9yySVs2LDBqdemTZscavx8/PHHjc6nvrbfzlZ3GkOHDnXqRqm1ptuY4OBgZs2aBaiPHC9cuNChfe7bb7/9giR7WmL8+PH297UXt41xZv22trqdpYDzHVG1JXV/9Fi4cKHTbVR++umn9vfR0dEkJia6PDZX7ENa7ZnLhKYeL3/vvfca7LipuTQajcMjtdnZ2Q7f121a6a233nJJEwl1/5fNXXeu4Op1fckll9jfv/vuuw5twDdX3R+kXPU/Plvdm+9FixZRUVHBypUr7TU5Y2JiGDduXKPTaI3ttTWWfeLEifb3H330UZPb76JFi+zJPpPJxIgRI1wShys0ta82V3PXd1tYlzU1NVx55ZX2JI7RaOTbb79l1KhR5z3tpnzwwQf29/7+/g5JnbPVXt+Auh6aUrfM2LFjWxKeA3cfY92pNc5Z7uCq/b0t7LfOcNc1UEu44hzq6u3Uldch0D7PD83R3KS1JLmFqJ8kuYXogHJzc/n555/tw83tKLFu+Xnz5jV6UbBixQq+/PLLBr/fv38/c+bMsQ8729xHa023KXU7oHz11VftN3k6nY7bbrvNJfNoDbfffrv9/Zo1a1i4cGGDZU+cOMFLL73k0vm/8sor9s45nVFRUcGzzz5rHw4PD2/05rytuvvuu+1t5h05coRXX321yXGOHDnCf/7zH/vw/fff3yqxuWIfSkhIsL9vrMbW4cOH+dvf/tZkTKWlpU530Fn3MfWwsDCH7+655x57O+bbtm1zat618vLy6v0x4o477rC/37BhQ6NJmNTUVIf/oSu4el3fdddd9jYpjx07xiOPPNLi2Oo+Alu3eRtXSkpKYvjw4YDalMKiRYscfrC78cYbm/yR0dXrEFpn2e+66y578mTbtm288847DZYtKiriiSeesA9ff/315/QH0Bpcta82V3PXt7vXpdVq5YYbbuCnn34C1CfnFixYwKRJk1o0vea0W7tu3Tpefvll+/B11113TofIdd133332x/fXrVvX6D6yadMmvv76a/twU81jOcPdx1h3ao1zlitd6P3d3futs1rjnNJaXHEOdfV26srrEGh/54fmsFqt9rbTtVptk08OgCS5hWiQIoTocF599VUFUADF19dXqaioaNb4x44dUzQajX0av/32m8P3tZ8DioeHh+Lp6al8+umn50xn3bp1SkxMjL1s7969laqqqgbn2xrTjYuLs5dLS0tzavm7devmEAugTJs2zalxnZ1n3Wk7Y9y4cfbyy5cvr7fMDTfcYC/T0LrbsWOHkpycrACK0WhscprOuvbaaxVAGTJkiPLGG28oWVlZDZbdsGGDMmTIEId18Morr9Rbtu5yP/PMM+cVY2tN8+GHH7ZPT6PRKH/605+UkpKSesv+8MMPSlRUlL18fHy8UlRUdN4x1HL1PvT000/bywQFBSm//PLLOWWWLl1qXyZvb297+blz555Tdvny5UpkZKTyzDPPKHv37q13GSwWi/L5558rJpPJPq1PPvnknHJz5851WN5bbrlFOXbsWL3TtNlsypo1a5T77rtP8fT0VEpLS+std+utt9qnZzQalQ8//PCcMps3b1bi4+Pt69hV+5Cr17WiKMobb7zhsI6uueYa5cSJE/WW3bNnj/LQQw8pv/766znf3XPPPfZp3H///U4vU3OPv3PmzLGXnzhxohIQEGAf3rNnT5Pjt8Y6bMmyO7Pc9913n72MXq9X5syZo1itVocyhw8fVoYOHWov5+fn1+h6dOV5xZX7anO0ZH23xrp0hs1mU2bPnm2fplarVT777LPzmubcuXOVoUOHKh999FGD54bKykrltddeUzw9Pe3zDggIUE6ePNnk9Ouer7y9vZWvvvrqnDIrVqxQQkND7eWGDx+u2Gy281quWq1xjHX1NVdaWpq9bFxcXJPlly9fbi8/bty4Bsu5+pzVlvf3jnAMVJTWOae05L7EWed7DlUU12+nrroOUZS2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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "for activation in [\"linear\", \"ReLU\", \"ELU\", \"SELU\"]:\n", + " plot_applied_activation(activation, save_pdf=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Monotonicity indicator\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | export\n", + "\n", + "\n", + "def get_monotonicity_indicator(\n", + " monotonicity_indicator: ArrayLike,\n", + " *,\n", + " input_shape: Tuple[int, ...],\n", + " units: int,\n", + ") -> TensorLike:\n", + " # convert to tensor if needed and make it broadcastable to the kernel\n", + " monotonicity_indicator = np.array(monotonicity_indicator)\n", + " if len(monotonicity_indicator.shape) < 2:\n", + " monotonicity_indicator = np.reshape(monotonicity_indicator, (-1, 1))\n", + " elif len(monotonicity_indicator.shape) > 2:\n", + " raise ValueError(\n", + " f\"monotonicity_indicator has rank greater than 2: {monotonicity_indicator.shape}\"\n", + " )\n", + "\n", + " monotonicity_indicator_broadcasted = np.broadcast_to(\n", + " monotonicity_indicator, shape=(input_shape[-1], units)\n", + " )\n", + "\n", + " if not np.all(\n", + " (monotonicity_indicator == -1)\n", + " | (monotonicity_indicator == 0)\n", + " | (monotonicity_indicator == 1)\n", + " ):\n", + " raise ValueError(\n", + " f\"Each element of monotonicity_indicator must be one of -1, 0, 1, but it is: '{monotonicity_indicator}'\"\n", + " )\n", + " return monotonicity_indicator" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "input_shape = (13, 2)\n", + "units = 3\n", + "\n", + "layer = Dense(units=units)\n", + "layer.build(input_shape=input_shape)\n", + "\n", + "for monotonicity_indicator in [\n", + " 1,\n", + " [1],\n", + " [1, 1],\n", + " np.ones((2,)),\n", + " np.ones((2, 1)),\n", + " np.ones((2, 3)),\n", + "]:\n", + " expected = np.ones((2, 3))\n", + " actual = get_monotonicity_indicator(\n", + " monotonicity_indicator, input_shape=(13, 2), units=3\n", + " )\n", + "\n", + " # rank is 2\n", + " assert len(actual.shape) == 2\n", + " # it is broadcastable to the kernel shape of (input_shape[-1], units)\n", + " np.testing.assert_array_equal(np.broadcast_to(actual, (2, 3)), expected)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "expected = [[1], [0], [-1]]\n", + "actual = get_monotonicity_indicator([1, 0, -1], input_shape=(13, 3), units=4)\n", + "np.testing.assert_array_equal(actual, expected)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "with pytest.raises(ValueError) as e:\n", + " get_monotonicity_indicator([0, 1, -1], input_shape=(13, 2), units=3)\n", + "assert e.value.args == (\n", + " \"operands could not be broadcast together with remapped shapes [original->remapped]: (3,1) and requested shape (2,3)\",\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | export\n", + "\n", + "\n", + "def apply_monotonicity_indicator_to_kernel(\n", + " kernel: tf.Variable,\n", + " monotonicity_indicator: ArrayLike,\n", + ") -> TensorLike:\n", + " # convert to tensor if needed and make it broadcastable to the kernel\n", + " monotonicity_indicator = tf.convert_to_tensor(monotonicity_indicator)\n", + "\n", + " # absolute value of the kernel\n", + " abs_kernel = tf.abs(kernel)\n", + "\n", + " # replace original kernel values for positive or negative ones where needed\n", + " xs = tf.where(\n", + " monotonicity_indicator == 1,\n", + " abs_kernel,\n", + " kernel,\n", + " )\n", + " xs = tf.where(monotonicity_indicator == -1, -abs_kernel, xs)\n", + "\n", + " return xs\n", + "\n", + "\n", + "@contextmanager\n", + "def replace_kernel_using_monotonicity_indicator(\n", + " layer: tf.keras.layers.Dense,\n", + " monotonicity_indicator: TensorLike,\n", + ") -> Generator[None, None, None]:\n", + " old_kernel = layer.kernel\n", + "\n", + " layer.kernel = apply_monotonicity_indicator_to_kernel(\n", + " layer.kernel, monotonicity_indicator\n", + " )\n", + " try:\n", + " yield\n", + " finally:\n", + " layer.kernel = old_kernel" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def display_kernel(kernel: Union[tf.Variable, np.typing.NDArray[float]]) -> None:\n", + " cm = sns.color_palette(\"coolwarm_r\", as_cmap=True)\n", + "\n", + " df = pd.DataFrame(kernel)\n", + "\n", + " display(\n", + " df.style.format(\"{:.2f}\").background_gradient(cmap=cm, vmin=-1e-8, vmax=1e-8)\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Original kernel:\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 01234567891011121314151617
00.350.16-0.140.44-0.410.150.46-0.330.020.13-0.41-0.050.46-0.030.000.26-0.47-0.30
10.01-0.42-0.450.340.41-0.230.35-0.36-0.040.060.07-0.29-0.280.48-0.38-0.06-0.23-0.37
20.23-0.310.180.15-0.450.06-0.16-0.110.45-0.090.03-0.24-0.370.210.110.01-0.46-0.37
30.290.36-0.07-0.18-0.46-0.450.250.32-0.120.22-0.180.27-0.18-0.070.350.320.180.39
40.35-0.270.13-0.400.440.210.06-0.31-0.300.46-0.44-0.18-0.26-0.340.360.330.120.04
50.040.21-0.02-0.360.39-0.130.300.35-0.12-0.430.440.320.06-0.30-0.290.24-0.44-0.13
60.38-0.04-0.300.17-0.030.37-0.03-0.180.42-0.39-0.33-0.190.02-0.41-0.440.420.38-0.21
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Kernel after applying monotocity indicator 1 for all values:\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 01234567891011121314151617
00.350.160.140.440.410.150.460.330.020.130.410.050.460.030.000.260.470.30
10.010.420.450.340.410.230.350.360.040.060.070.290.280.480.380.060.230.37
20.230.310.180.150.450.060.160.110.450.090.030.240.370.210.110.010.460.37
30.290.360.070.180.460.450.250.320.120.220.180.270.180.070.350.320.180.39
40.350.270.130.400.440.210.060.310.300.460.440.180.260.340.360.330.120.04
50.040.210.020.360.390.130.300.350.120.430.440.320.060.300.290.240.440.13
60.380.040.300.170.030.370.030.180.420.390.330.190.020.410.440.420.380.21
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tf.keras.utils.set_random_seed(42)\n", + "\n", + "units = 18\n", + "input_len = 7\n", + "\n", + "layer = tf.keras.layers.Dense(units=units)\n", + "\n", + "input_shape = (input_len,)\n", + "layer.build(input_shape=input_shape)\n", + "\n", + "print(\"Original kernel:\")\n", + "display_kernel(layer.kernel)\n", + "\n", + "print(\"Kernel after applying monotocity indicator 1 for all values:\")\n", + "monotonicity_indicator = get_monotonicity_indicator(\n", + " 1, input_shape=input_shape, units=units\n", + ")\n", + "with replace_kernel_using_monotonicity_indicator(layer, monotonicity_indicator):\n", + " display_kernel(layer.kernel)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Monotocity indicator:\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 0
01.00
11.00
2-1.00
3-1.00
40.00
50.00
60.00
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Kernel after applying the monotocity indicator:\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 01234567891011121314151617
00.350.160.140.440.410.150.460.330.020.130.410.050.460.030.000.260.470.30
10.010.420.450.340.410.230.350.360.040.060.070.290.280.480.380.060.230.37
2-0.23-0.31-0.18-0.15-0.45-0.06-0.16-0.11-0.45-0.09-0.03-0.24-0.37-0.21-0.11-0.01-0.46-0.37
3-0.29-0.36-0.07-0.18-0.46-0.45-0.25-0.32-0.12-0.22-0.18-0.27-0.18-0.07-0.35-0.32-0.18-0.39
40.35-0.270.13-0.400.440.210.06-0.31-0.300.46-0.44-0.18-0.26-0.340.360.330.120.04
50.040.21-0.02-0.360.39-0.130.300.35-0.12-0.430.440.320.06-0.30-0.290.24-0.44-0.13
60.38-0.04-0.300.17-0.030.37-0.03-0.180.42-0.39-0.33-0.190.02-0.41-0.440.420.38-0.21
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "monotonicity_indicator = [1] * 2 + [-1] * 2 + [0] * (input_shape[0] - 4)\n", + "monotonicity_indicator = get_monotonicity_indicator(\n", + " monotonicity_indicator, input_shape=input_shape, units=units\n", + ")\n", + "\n", + "print(\"Monotocity indicator:\")\n", + "display_kernel(monotonicity_indicator)\n", + "\n", + "print(\"Kernel after applying the monotocity indicator:\")\n", + "with replace_kernel_using_monotonicity_indicator(layer, monotonicity_indicator):\n", + " display_kernel(layer.kernel)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Monotonic Dense Layer" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is an implementation of our Monotonic Dense Unit or Constrained Monotone Fully Connected Layer. The below is the figure from the paper for reference.\n", + "\n", + "In the code, the variable `monotonicity_indicator` corresponds to **t** in the figure and the variable `activation_selector` corresponds to **s**. \n", + "\n", + "Parameters `convexity_indicator` and `epsilon` are used to calculate `activation_selector` as follows:\n", + "- if `convexity_indicator` is -1 or 1, then `activation_selector` will have all elements 0 or 1, respectively.\n", + "- if `convexity_indicator` is `None`, then `epsilon` must have a value between 0 and 1 and corresponds to the percentage of elements of `activation_selector` set to 1." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![mono-dense-layer-diagram.png](images/mono-dense-layer-diagram.png)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | export\n", + "\n", + "\n", + "@export\n", + "class MonoDense(Dense):\n", + " \"\"\"Monotonic counterpart of the regular Dense Layer of tf.keras\n", + "\n", + " This is an implementation of our Monotonic Dense Unit or Constrained Monotone Fully Connected Layer. The below is the figure from the paper for reference.\n", + "\n", + " - the parameter `monotonicity_indicator` corresponds to **t** in the figure below, and\n", + "\n", + " - parameters `is_convex`, `is_concave` and `activation_weights` are used to calculate the activation selector **s** as follows:\n", + "\n", + " - if `is_convex` or `is_concave` is **True**, then the activation selector **s** will be (`units`, 0, 0) and (0, `units`, 0), respectively.\n", + "\n", + " - if both `is_convex` or `is_concave` is **False**, then the `activation_weights` represent ratios between $\\\\breve{s}$, $\\\\hat{s}$ and $\\\\tilde{s}$,\n", + " respectively. E.g. if `activation_weights = (2, 2, 1)` and `units = 10`, then\n", + "\n", + " $$\n", + " (\\\\breve{s}, \\\\hat{s}, \\\\tilde{s}) = (4, 4, 2)\n", + " $$\n", + "\n", + " ![mono-dense-layer-diagram.png](../../../../../images/nbs/images/mono-dense-layer-diagram.png)\n", + "\n", + " \"\"\"\n", + "\n", + " def __init__(\n", + " self,\n", + " units: int,\n", + " *,\n", + " activation: Optional[Union[str, Callable[[TensorLike], TensorLike]]] = None,\n", + " monotonicity_indicator: ArrayLike = 1,\n", + " is_convex: bool = False,\n", + " is_concave: bool = False,\n", + " activation_weights: Tuple[float, float, float] = (7.0, 7.0, 2.0),\n", + " **kwargs: Any,\n", + " ):\n", + " \"\"\"Constructs a new MonoDense instance.\n", + "\n", + " Params:\n", + " units: Positive integer, dimensionality of the output space.\n", + " activation: Activation function to use, it is assumed to be convex monotonically\n", + " increasing function such as \"relu\" or \"elu\"\n", + " monotonicity_indicator: Vector to indicate which of the inputs are monotonically increasing or\n", + " monotonically decreasing or non-monotonic. Has value 1 for monotonically increasing,\n", + " -1 for monotonically decreasing and 0 for non-monotonic.\n", + " is_convex: convex if set to True\n", + " is_concave: concave if set to True\n", + " activation_weights: relative weights for each type of activation, the default is (1.0, 1.0, 1.0).\n", + " Ignored if is_convex or is_concave is set to True\n", + " **kwargs: passed as kwargs to the constructor of `Dense`\n", + "\n", + " Raise:\n", + " ValueError:\n", + " - if both **is_concave** and **is_convex** are set to **True**, or\n", + " - if any component of activation_weights is negative or there is not exactly three components\n", + " \"\"\"\n", + " if is_convex and is_concave:\n", + " raise ValueError(\n", + " \"The model cannot be set to be both convex and concave (only linear functions are both).\"\n", + " )\n", + "\n", + " if len(activation_weights) != 3:\n", + " raise ValueError(\n", + " f\"There must be exactly three components of activation_weights, but we have this instead: {activation_weights}.\"\n", + " )\n", + "\n", + " if (np.array(activation_weights) < 0).any():\n", + " raise ValueError(\n", + " f\"Values of activation_weights must be non-negative, but we have this instead: {activation_weights}.\"\n", + " )\n", + "\n", + " super(MonoDense, self).__init__(units=units, activation=None, **kwargs)\n", + "\n", + " self.units = units\n", + " self.org_activation = activation\n", + " self.monotonicity_indicator = monotonicity_indicator\n", + " self.is_convex = is_convex\n", + " self.is_concave = is_concave\n", + " self.activation_weights = activation_weights\n", + "\n", + " (\n", + " self.convex_activation,\n", + " self.concave_activation,\n", + " self.saturated_activation,\n", + " ) = get_activation_functions(self.org_activation)\n", + "\n", + " def get_config(self) -> Dict[str, Any]:\n", + " \"\"\"Get config is used for saving the model\"\"\"\n", + " return dict(\n", + " units=self.units,\n", + " activation=self.org_activation,\n", + " monotonicity_indicator=self.monotonicity_indicator,\n", + " is_convex=self.is_convex,\n", + " is_concave=self.is_concave,\n", + " activation_weights=self.activation_weights,\n", + " )\n", + "\n", + " def build(self, input_shape: Tuple, *args: List[Any], **kwargs: Any) -> None:\n", + " \"\"\"Build\n", + "\n", + " Args:\n", + " input_shape: input tensor\n", + " args: positional arguments passed to Dense.build()\n", + " kwargs: keyword arguments passed to Dense.build()\n", + " \"\"\"\n", + " super(MonoDense, self).build(input_shape, *args, **kwargs)\n", + " self.monotonicity_indicator = get_monotonicity_indicator(\n", + " monotonicity_indicator=self.monotonicity_indicator,\n", + " input_shape=input_shape,\n", + " units=self.units,\n", + " )\n", + "\n", + " def call(self, inputs: TensorLike) -> TensorLike:\n", + " \"\"\"Call\n", + "\n", + " Args:\n", + " inputs: input tensor of shape (batch_size, ..., x_length)\n", + "\n", + " Returns:\n", + " N-D tensor with shape: `(batch_size, ..., units)`.\n", + "\n", + " \"\"\"\n", + " # calculate W'*x+y after we replace the kernel according to monotonicity vector\n", + " with replace_kernel_using_monotonicity_indicator(\n", + " self, monotonicity_indicator=self.monotonicity_indicator\n", + " ):\n", + " h = super(MonoDense, self).call(inputs)\n", + "\n", + " y = apply_activations(\n", + " h,\n", + " units=self.units,\n", + " convex_activation=self.convex_activation,\n", + " concave_activation=self.concave_activation,\n", + " saturated_activation=self.saturated_activation,\n", + " is_convex=self.is_convex,\n", + " is_concave=self.is_concave,\n", + " activation_weights=self.activation_weights,\n", + " )\n", + "\n", + " return y\n", + "\n", + " @classmethod\n", + " def create_type_1(\n", + " cls,\n", + " inputs: Union[TensorLike, Dict[str, TensorLike], List[TensorLike]],\n", + " *,\n", + " units: int,\n", + " final_units: int,\n", + " activation: Union[str, Callable[[TensorLike], TensorLike]],\n", + " n_layers: int,\n", + " final_activation: Optional[\n", + " Union[str, Callable[[TensorLike], TensorLike]]\n", + " ] = None,\n", + " monotonicity_indicator: Union[int, Dict[str, int], List[int]] = 1,\n", + " is_convex: Union[bool, Dict[str, bool], List[bool]] = False,\n", + " is_concave: Union[bool, Dict[str, bool], List[bool]] = False,\n", + " dropout: Optional[float] = None,\n", + " ) -> TensorLike:\n", + " \"\"\"Builds Type-1 monotonic network\n", + "\n", + " Type-1 architecture corresponds to the standard MLP type of neural network architecture used in general, where each\n", + " of the input features is concatenated to form one single input feature vector $\\mathbf{x}$ and fed into the network,\n", + " with the only difference being that instead of standard fully connected or dense layers, we employ monotonic dense units\n", + " throughout. For the first (or input layer) layer, the indicator vector $\\mathbf{t}$, is used to identify the monotonicity\n", + " property of the input feature with respect to the output. Specifically, $\\mathbf{t}$ is set to $1$ for those components\n", + " in the input feature vector that are monotonically increasing and is set to $-1$ for those components that are monotonically\n", + " decreasing and set to $0$ if the feature is non-monotonic. For the subsequent hidden layers, monotonic dense units with the\n", + " indicator vector $\\mathbf{t}$ always being set to $1$ are used in order to preserve monotonicity. Finally, depending on\n", + " whether the problem at hand is a regression problem or a classification problem (or even a multi-task problem), an appropriate\n", + " activation function (such as linear activation or sigmoid or softmax) to obtain the final output.\n", + "\n", + " ![mono-dense-layer-diagram.png](../../../images/nbs/images/type-1.png)\n", + "\n", + " Args:\n", + " inputs: input tensor or a dictionary of tensors\n", + " units: number of units in hidden layers\n", + " final_units: number of units in the output layer\n", + " activation: the base activation function\n", + " n_layers: total number of layers (hidden layers plus the output layer)\n", + " final_activation: the activation function of the final layer (typically softmax, sigmoid or linear).\n", + " If set to None (default value), then the linear activation is used.\n", + " monotonicity_indicator: if an instance of dictionary, then maps names of input feature to their monotonicity\n", + " indicator (-1 for monotonically decreasing, 1 for monotonically increasing and 0 otherwise). If int,\n", + " then all input features are set to the same monotinicity indicator.\n", + " is_convex: set to True if a particular input feature is convex\n", + " is_concave: set to True if a particular inputs feature is concave\n", + " dropout: dropout rate. If set to float greater than 0, Dropout layers are inserted after hidden layers.\n", + "\n", + " Returns:\n", + " Output tensor\n", + "\n", + " \"\"\"\n", + " return _create_type_1(\n", + " inputs,\n", + " units=units,\n", + " final_units=final_units,\n", + " activation=activation,\n", + " n_layers=n_layers,\n", + " final_activation=final_activation,\n", + " monotonicity_indicator=monotonicity_indicator,\n", + " is_convex=is_convex,\n", + " is_concave=is_concave,\n", + " dropout=dropout,\n", + " )\n", + "\n", + " @classmethod\n", + " def create_type_2(\n", + " cls,\n", + " inputs: Union[TensorLike, Dict[str, TensorLike], List[TensorLike]],\n", + " *,\n", + " input_units: Optional[int] = None,\n", + " units: int,\n", + " final_units: int,\n", + " activation: Union[str, Callable[[TensorLike], TensorLike]],\n", + " n_layers: int,\n", + " final_activation: Optional[\n", + " Union[str, Callable[[TensorLike], TensorLike]]\n", + " ] = None,\n", + " monotonicity_indicator: Union[int, Dict[str, int], List[int]] = 1,\n", + " is_convex: Union[bool, Dict[str, bool], List[bool]] = False,\n", + " is_concave: Union[bool, Dict[str, bool], List[bool]] = False,\n", + " dropout: Optional[float] = None,\n", + " ) -> TensorLike:\n", + " \"\"\"Builds Type-2 monotonic network\n", + "\n", + " Type-2 architecture is another example of a neural network architecture that can be built employing proposed\n", + " monotonic dense blocks. The difference when compared to the architecture described above lies in the way input\n", + " features are fed into the hidden layers of neural network architecture. Instead of concatenating the features\n", + " directly, this architecture provides flexibility to employ any form of complex feature extractors for the\n", + " non-monotonic features and use the extracted feature vectors as inputs. Another difference is that each monotonic\n", + " input is passed through separate monotonic dense units. This provides an advantage since depending on whether the\n", + " input is completely concave or convex or both, we can adjust the activation selection vector $\\mathbf{s}$ appropriately\n", + " along with an appropriate value for the indicator vector $\\mathbf{t}$. Thus, each of the monotonic input features has\n", + " a separate monotonic dense layer associated with it. Thus as the major difference to the above-mentioned architecture,\n", + " we concatenate the feature vectors instead of concatenating the inputs directly. The subsequent parts of the network are\n", + " similar to the architecture described above wherein for the rest of the hidden monotonic dense units, the indicator vector\n", + " $\\mathbf{t}$ is always set to $1$ to preserve monotonicity.\n", + "\n", + " ![mono-dense-layer-diagram.png](../../../images/nbs/images/type-2.png)\n", + "\n", + " Args:\n", + " inputs: input tensor or a dictionary of tensors\n", + " input_units: used to preprocess features before entering the common mono block\n", + " units: number of units in hidden layers\n", + " final_units: number of units in the output layer\n", + " activation: the base activation function\n", + " n_layers: total number of layers (hidden layers plus the output layer)\n", + " final_activation: the activation function of the final layer (typically softmax, sigmoid or linear).\n", + " If set to None (default value), then the linear activation is used.\n", + " monotonicity_indicator: if an instance of dictionary, then maps names of input feature to their monotonicity\n", + " indicator (-1 for monotonically decreasing, 1 for monotonically increasing and 0 otherwise). If int,\n", + " then all input features are set to the same monotinicity indicator.\n", + " is_convex: set to True if a particular input feature is convex\n", + " is_concave: set to True if a particular inputs feature is concave\n", + " dropout: dropout rate. If set to float greater than 0, Dropout layers are inserted after hidden layers.\n", + "\n", + " Returns:\n", + " Output tensor\n", + "\n", + " \"\"\"\n", + " return _create_type_2(\n", + " inputs,\n", + " input_units=input_units,\n", + " units=units,\n", + " final_units=final_units,\n", + " activation=activation,\n", + " n_layers=n_layers,\n", + " final_activation=final_activation,\n", + " monotonicity_indicator=monotonicity_indicator,\n", + " is_convex=is_convex,\n", + " is_concave=is_concave,\n", + " dropout=dropout,\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "************************************************************************************************************************\n", + "input:\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 012345678910
00.30-1.040.750.94-1.95-1.300.13-0.32-0.02-0.850.88
10.780.071.130.47-0.860.37-0.960.88-0.05-0.18-0.68
21.22-0.15-0.43-0.350.530.370.410.432.14-0.41-0.51
3-0.810.621.13-0.11-0.84-0.820.650.740.54-0.670.23
40.120.220.870.220.680.070.290.63-1.46-0.32-0.47
5-0.64-0.281.49-0.870.97-1.68-0.330.160.590.710.79
6-0.35-0.460.86-0.19-1.28-1.13-0.920.500.140.69-0.43
70.160.63-0.310.46-0.66-0.36-0.38-1.200.49-0.470.01
80.480.450.67-0.10-0.42-0.08-1.69-1.45-1.32-1.000.40
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "WARNING:tensorflow:5 out of the last 5 calls to triggered tf.function retracing. Tracing is expensive and the excessive number of tracings could be due to (1) creating @tf.function repeatedly in a loop, (2) passing tensors with different shapes, (3) passing Python objects instead of tensors. For (1), please define your @tf.function outside of the loop. For (2), @tf.function has reduce_retracing=True option that can avoid unnecessary retracing. For (3), please refer to https://www.tensorflow.org/guide/function#controlling_retracing and https://www.tensorflow.org/api_docs/python/tf/function for more details.\n", + "monotonicity_indicator = [1, 1, 1, 1, 0, 0, 0, 0, -1, -1, -1]\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 0
01.00
11.00
21.00
31.00
40.00
50.00
60.00
70.00
8-1.00
9-1.00
10-1.00
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "kernel:\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 01234567891011121314151617
00.330.150.130.410.380.140.430.300.020.120.380.050.420.030.000.240.440.28
10.010.390.420.320.380.220.330.340.030.060.060.270.260.450.350.050.210.34
20.210.290.160.140.420.060.150.100.410.080.030.220.340.200.110.010.430.35
30.270.330.060.170.420.420.240.300.110.200.170.250.170.070.320.300.170.36
40.32-0.250.12-0.370.410.200.06-0.28-0.270.43-0.41-0.17-0.24-0.310.330.310.110.03
50.040.19-0.02-0.340.36-0.120.280.32-0.11-0.400.410.300.06-0.28-0.270.23-0.41-0.12
60.35-0.04-0.280.16-0.030.35-0.03-0.160.39-0.36-0.31-0.180.02-0.38-0.400.390.35-0.19
70.33-0.340.11-0.290.25-0.210.110.08-0.19-0.390.010.100.39-0.25-0.37-0.270.040.34
8-0.27-0.09-0.02-0.45-0.16-0.12-0.09-0.43-0.36-0.09-0.23-0.42-0.28-0.24-0.30-0.31-0.07-0.07
9-0.38-0.34-0.44-0.42-0.32-0.06-0.27-0.28-0.22-0.05-0.08-0.07-0.21-0.39-0.01-0.26-0.24-0.42
10-0.09-0.45-0.41-0.36-0.19-0.09-0.00-0.34-0.17-0.18-0.05-0.39-0.06-0.20-0.40-0.33-0.18-0.01
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "output:\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 01234567891011121314151617
00.010.400.001.380.000.100.00-0.00-0.00-0.13-0.00-0.26-0.00-0.00-0.55-0.520.790.64
10.451.020.960.711.220.000.86-0.00-0.00-0.09-0.00-0.00-0.00-0.000.26-0.170.541.00
20.300.000.330.000.410.000.42-0.53-0.89-0.29-0.23-0.84-0.16-0.93-0.900.080.370.08
30.210.260.330.420.000.000.00-0.16-0.00-0.61-0.53-0.07-0.00-0.00-0.55-0.660.830.78
41.380.490.700.821.470.540.63-0.00-0.00-0.00-0.00-0.00-0.00-0.000.730.970.940.91
50.000.000.000.000.000.000.00-1.86-0.25-0.00-1.57-1.19-0.61-0.230.13-1.000.50-0.06
60.000.000.000.170.000.000.00-0.15-0.00-0.00-0.00-0.00-0.00-0.000.06-1.000.000.12
70.000.960.350.930.000.320.17-0.00-0.00-0.00-0.00-0.00-0.17-0.000.670.060.120.17
80.001.330.921.630.520.000.66-0.00-0.00-0.00-0.00-0.00-0.00-0.001.000.230.180.81
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "************************************************************************************************************************\n", + "input:\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 012345678910
00.30-1.040.750.94-1.95-1.300.13-0.32-0.02-0.850.88
10.780.071.130.47-0.860.37-0.960.88-0.05-0.18-0.68
21.22-0.15-0.43-0.350.530.370.410.432.14-0.41-0.51
3-0.810.621.13-0.11-0.84-0.820.650.740.54-0.670.23
40.120.220.870.220.680.070.290.63-1.46-0.32-0.47
5-0.64-0.281.49-0.870.97-1.68-0.330.160.590.710.79
6-0.35-0.460.86-0.19-1.28-1.13-0.920.500.140.69-0.43
70.160.63-0.310.46-0.66-0.36-0.38-1.200.49-0.470.01
80.480.450.67-0.10-0.42-0.08-1.69-1.45-1.32-1.000.40
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "monotonicity_indicator = 1\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 0
01.00
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "kernel:\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 01234567891011121314151617
00.440.020.240.220.290.350.180.030.390.170.250.020.100.130.000.420.210.31
10.350.060.260.420.050.410.160.330.030.260.110.030.230.040.370.270.320.40
20.370.300.360.140.210.400.010.280.160.440.430.230.270.220.230.250.430.05
30.320.250.050.450.080.180.260.240.340.070.070.140.040.190.290.230.430.09
40.360.050.200.410.380.290.010.440.170.040.310.340.290.160.250.180.010.28
50.340.310.380.340.080.400.150.160.140.250.150.200.100.060.440.190.420.21
60.010.380.430.180.000.430.450.280.250.180.030.260.220.260.080.230.450.42
70.040.120.280.170.110.000.150.240.050.050.270.320.330.110.090.400.190.06
80.300.170.210.420.210.290.190.380.030.340.320.300.340.150.280.110.440.19
90.100.100.350.320.240.280.300.280.100.120.300.410.150.000.100.400.180.24
100.000.220.210.090.100.130.180.370.240.290.250.230.320.140.270.340.250.10
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "output:\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 01234567891011121314151617
00.000.010.000.000.000.000.00-0.93-0.00-0.07-0.58-0.88-0.58-0.00-0.87-0.49-0.05-1.00
10.730.100.220.180.180.160.00-0.23-0.00-0.00-0.00-0.09-0.00-0.000.160.470.53-0.27
21.150.360.821.200.801.060.61-0.00-0.00-0.00-0.00-0.00-0.00-0.000.530.611.000.94
30.000.450.280.000.000.110.14-0.00-0.21-0.00-0.00-0.00-0.00-0.000.150.080.72-0.08
40.340.190.360.050.150.300.00-0.00-0.00-0.08-0.00-0.00-0.00-0.000.060.380.040.14
50.000.000.260.000.670.050.00-0.00-0.16-0.00-0.00-0.00-0.00-0.00-0.080.30-0.17-0.17
60.000.000.000.000.000.000.00-0.76-0.68-0.28-0.11-0.37-0.42-0.40-0.88-0.41-0.67-1.00
70.010.000.000.000.000.000.00-0.45-0.17-0.04-0.57-0.82-0.50-0.22-0.07-0.62-0.13-0.18
80.000.000.000.000.000.000.00-1.32-0.35-0.39-0.77-1.63-1.12-0.60-0.47-0.99-1.00-1.00
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "************************************************************************************************************************\n", + "input:\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 012345678910
00.30-1.040.750.94-1.95-1.300.13-0.32-0.02-0.850.88
10.780.071.130.47-0.860.37-0.960.88-0.05-0.18-0.68
21.22-0.15-0.43-0.350.530.370.410.432.14-0.41-0.51
3-0.810.621.13-0.11-0.84-0.820.650.740.54-0.670.23
40.120.220.870.220.680.070.290.63-1.46-0.32-0.47
5-0.64-0.281.49-0.870.97-1.68-0.330.160.590.710.79
6-0.35-0.460.86-0.19-1.28-1.13-0.920.500.140.69-0.43
70.160.63-0.310.46-0.66-0.36-0.38-1.200.49-0.470.01
80.480.450.67-0.10-0.42-0.08-1.69-1.45-1.32-1.000.40
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "monotonicity_indicator = [1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 0
01.00
11.00
21.00
31.00
41.00
51.00
61.00
71.00
81.00
91.00
101.00
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "kernel:\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 01234567891011121314151617
00.310.020.110.290.100.330.370.060.390.350.150.130.150.450.070.190.030.06
10.120.020.060.410.320.240.340.280.220.060.330.270.250.230.430.090.450.27
20.190.110.190.250.070.420.320.350.150.050.000.240.220.390.440.110.190.10
30.150.370.210.410.250.040.370.040.050.220.310.350.350.080.380.010.250.29
40.170.450.240.320.010.000.190.340.170.190.180.340.020.240.030.410.260.00
50.290.100.070.340.040.300.390.270.390.160.330.450.060.190.230.040.360.04
60.130.150.220.400.140.300.110.450.140.170.260.160.360.100.170.320.140.08
70.250.250.240.450.170.450.300.350.410.400.110.260.320.080.220.340.050.09
80.160.270.100.230.080.210.190.160.060.040.170.050.390.110.260.250.130.05
90.170.170.000.130.120.030.390.110.010.290.430.200.210.430.390.180.190.27
100.260.230.430.040.250.360.210.360.370.360.080.140.250.240.300.330.040.07
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "output:\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 01234567891011121314151617
00.000.000.080.000.000.000.00-0.82-0.58-0.32-1.07-1.09-0.00-0.63-0.21-0.74-1.00-0.15
10.360.000.000.510.110.720.76-0.12-0.00-0.00-0.05-0.00-0.00-0.000.56-0.340.130.22
20.720.680.321.100.100.840.68-0.00-0.00-0.00-0.00-0.00-0.00-0.000.200.970.33-0.07
30.000.000.360.350.360.820.00-0.00-0.00-0.19-0.29-0.13-0.00-0.200.670.20-0.000.14
40.180.140.260.680.090.380.36-0.00-0.00-0.00-0.00-0.00-0.07-0.000.140.150.330.10
50.010.550.500.000.000.210.00-0.00-0.27-0.00-0.44-0.25-0.00-0.000.440.83-0.24-0.01
60.000.000.000.000.000.000.00-0.89-0.85-0.48-0.77-0.90-0.21-0.30-0.09-0.69-0.83-0.03
70.000.000.000.000.010.000.00-0.78-0.59-0.65-0.21-0.55-0.19-0.37-0.17-0.71-0.100.03
80.000.000.000.000.000.000.00-1.24-0.48-0.95-1.13-0.71-1.40-0.30-0.76-1.00-0.47-0.39
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "************************************************************************************************************************\n", + "input:\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 012345678910
00.30-1.040.750.94-1.95-1.300.13-0.32-0.02-0.850.88
10.780.071.130.47-0.860.37-0.960.88-0.05-0.18-0.68
21.22-0.15-0.43-0.350.530.370.410.432.14-0.41-0.51
3-0.810.621.13-0.11-0.84-0.820.650.740.54-0.670.23
40.120.220.870.220.680.070.290.63-1.46-0.32-0.47
5-0.64-0.281.49-0.870.97-1.68-0.330.160.590.710.79
6-0.35-0.460.86-0.19-1.28-1.13-0.920.500.140.69-0.43
70.160.63-0.310.46-0.66-0.36-0.38-1.200.49-0.470.01
80.480.450.67-0.10-0.42-0.08-1.69-1.45-1.32-1.000.40
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "monotonicity_indicator = -1\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 0
0-1.00
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "kernel:\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 01234567891011121314151617
0-0.29-0.12-0.00-0.17-0.33-0.17-0.33-0.36-0.28-0.16-0.24-0.22-0.10-0.13-0.02-0.38-0.23-0.02
1-0.36-0.13-0.05-0.07-0.41-0.30-0.38-0.06-0.40-0.42-0.44-0.03-0.27-0.03-0.32-0.31-0.35-0.40
2-0.30-0.07-0.40-0.06-0.10-0.21-0.16-0.22-0.06-0.36-0.40-0.42-0.23-0.22-0.20-0.33-0.45-0.06
3-0.05-0.08-0.07-0.30-0.44-0.23-0.40-0.25-0.13-0.31-0.11-0.13-0.13-0.34-0.15-0.05-0.36-0.13
4-0.45-0.34-0.41-0.39-0.15-0.10-0.40-0.32-0.19-0.13-0.29-0.39-0.43-0.29-0.13-0.05-0.39-0.01
5-0.09-0.38-0.00-0.12-0.07-0.42-0.01-0.12-0.26-0.28-0.16-0.06-0.08-0.43-0.23-0.28-0.28-0.07
6-0.34-0.38-0.15-0.44-0.41-0.19-0.25-0.41-0.34-0.22-0.43-0.36-0.25-0.28-0.06-0.12-0.15-0.16
7-0.17-0.39-0.40-0.26-0.40-0.20-0.10-0.14-0.42-0.21-0.18-0.25-0.15-0.21-0.13-0.41-0.14-0.14
8-0.38-0.03-0.10-0.21-0.13-0.04-0.19-0.00-0.09-0.38-0.01-0.27-0.24-0.24-0.13-0.18-0.37-0.21
9-0.43-0.08-0.20-0.29-0.10-0.27-0.08-0.43-0.22-0.37-0.27-0.24-0.15-0.22-0.01-0.45-0.35-0.31
10-0.38-0.44-0.20-0.31-0.42-0.23-0.03-0.31-0.11-0.35-0.01-0.00-0.00-0.39-0.45-0.14-0.03-0.10
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "output:\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 01234567891011121314151617
01.050.880.590.610.000.700.64-0.00-0.00-0.00-0.00-0.00-0.00-0.000.240.741.000.55
10.270.260.000.410.000.000.00-0.00-0.23-0.34-0.21-0.20-0.00-0.02-0.04-0.82-0.52-0.02
20.000.000.000.000.000.000.00-0.36-0.77-0.71-0.39-1.00-0.82-0.67-0.11-0.74-0.97-0.31
30.000.000.000.000.000.010.00-0.00-0.16-0.50-0.38-0.33-0.20-0.00-0.39-0.20-0.12-0.36
40.000.000.000.000.000.000.00-0.45-0.46-0.00-0.84-0.48-0.36-0.13-0.08-0.28-0.330.13
50.000.020.000.000.120.330.00-0.41-0.00-0.44-0.33-0.90-0.56-0.04-0.24-0.27-0.48-0.16
60.741.200.110.900.840.650.87-0.00-0.00-0.00-0.00-0.00-0.00-0.000.600.010.530.12
70.470.890.910.620.260.370.01-0.00-0.00-0.00-0.00-0.00-0.00-0.000.070.610.290.01
81.301.170.981.611.090.590.65-0.00-0.00-0.00-0.00-0.00-0.00-0.000.090.930.950.81
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "************************************************************************************************************************\n", + "input:\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 012345678910
00.30-1.040.750.94-1.95-1.300.13-0.32-0.02-0.850.88
10.780.071.130.47-0.860.37-0.960.88-0.05-0.18-0.68
21.22-0.15-0.43-0.350.530.370.410.432.14-0.41-0.51
3-0.810.621.13-0.11-0.84-0.820.650.740.54-0.670.23
40.120.220.870.220.680.070.290.63-1.46-0.32-0.47
5-0.64-0.281.49-0.870.97-1.68-0.330.160.590.710.79
6-0.35-0.460.86-0.19-1.28-1.13-0.920.500.140.69-0.43
70.160.63-0.310.46-0.66-0.36-0.38-1.200.49-0.470.01
80.480.450.67-0.10-0.42-0.08-1.69-1.45-1.32-1.000.40
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "monotonicity_indicator = [-1. -1. -1. -1. -1. -1. -1. -1. -1. -1. -1.]\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 0
0-1.00
1-1.00
2-1.00
3-1.00
4-1.00
5-1.00
6-1.00
7-1.00
8-1.00
9-1.00
10-1.00
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "kernel:\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 01234567891011121314151617
0-0.45-0.28-0.30-0.41-0.17-0.39-0.22-0.45-0.28-0.40-0.18-0.20-0.16-0.18-0.10-0.13-0.14-0.35
1-0.09-0.27-0.09-0.14-0.02-0.36-0.21-0.05-0.05-0.01-0.02-0.45-0.03-0.09-0.01-0.05-0.39-0.05
2-0.17-0.15-0.37-0.35-0.32-0.03-0.24-0.31-0.35-0.41-0.00-0.37-0.18-0.26-0.09-0.44-0.09-0.17
3-0.42-0.17-0.11-0.31-0.32-0.11-0.20-0.10-0.34-0.15-0.24-0.22-0.22-0.08-0.40-0.02-0.23-0.38
4-0.13-0.17-0.06-0.13-0.32-0.42-0.28-0.44-0.03-0.26-0.38-0.45-0.08-0.06-0.04-0.33-0.27-0.38
5-0.32-0.38-0.19-0.19-0.33-0.01-0.15-0.08-0.31-0.27-0.07-0.11-0.21-0.22-0.18-0.27-0.19-0.15
6-0.30-0.16-0.09-0.25-0.23-0.44-0.25-0.16-0.05-0.13-0.20-0.09-0.14-0.18-0.15-0.22-0.37-0.38
7-0.20-0.14-0.12-0.10-0.42-0.42-0.14-0.04-0.44-0.11-0.10-0.17-0.06-0.29-0.22-0.24-0.01-0.45
8-0.31-0.11-0.16-0.21-0.16-0.39-0.12-0.36-0.36-0.29-0.24-0.24-0.20-0.18-0.33-0.39-0.20-0.02
9-0.41-0.14-0.12-0.21-0.01-0.37-0.03-0.22-0.38-0.22-0.09-0.22-0.19-0.17-0.13-0.32-0.30-0.21
10-0.31-0.05-0.02-0.36-0.04-0.15-0.03-0.12-0.36-0.21-0.40-0.03-0.04-0.03-0.23-0.01-0.02-0.41
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "output:\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 01234567891011121314151617
00.200.840.110.000.551.240.55-0.00-0.02-0.00-0.00-0.00-0.00-0.00-0.200.981.000.30
10.000.000.000.000.000.190.00-0.14-0.87-0.50-0.00-0.34-0.28-0.53-0.24-0.340.23-0.09
20.000.000.000.000.000.000.00-1.34-0.82-1.02-0.75-0.74-0.56-0.68-0.71-1.00-0.65-0.56
30.230.180.000.000.000.000.00-0.00-0.27-0.00-0.00-0.21-0.00-0.28-0.21-0.250.020.00
40.090.000.000.000.000.000.00-0.08-0.00-0.14-0.00-0.50-0.01-0.250.23-0.20-0.14-0.66
50.180.490.000.000.030.000.00-0.79-0.36-0.49-0.39-0.69-0.00-0.090.08-0.840.10-0.25
60.640.770.080.500.620.790.68-0.00-0.06-0.00-0.00-0.00-0.00-0.000.280.240.860.87
70.320.240.230.180.760.620.28-0.00-0.00-0.00-0.00-0.00-0.00-0.000.130.730.090.87
81.230.500.270.511.082.000.60-0.00-0.00-0.00-0.00-0.00-0.00-0.001.001.001.001.00
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ok\n" + ] + } + ], + "source": [ + "units = 18\n", + "activation = \"relu\"\n", + "batch_size = 9\n", + "x_len = 11\n", + "\n", + "x = np.random.default_rng(42).normal(size=(batch_size, x_len))\n", + "\n", + "tf.keras.utils.set_random_seed(42)\n", + "\n", + "for monotonicity_indicator in [\n", + " [1] * 4 + [0] * 4 + [-1] * 3,\n", + " 1,\n", + " np.ones((x_len,)),\n", + " -1,\n", + " -np.ones((x_len,)),\n", + "]:\n", + " print(\"*\" * 120)\n", + " mono_layer = MonoDense(\n", + " units=units,\n", + " activation=activation,\n", + " monotonicity_indicator=monotonicity_indicator,\n", + " activation_weights=(7, 7, 4),\n", + " )\n", + " print(\"input:\")\n", + " display_kernel(x)\n", + "\n", + " y = mono_layer(x)\n", + " print(f\"monotonicity_indicator = {monotonicity_indicator}\")\n", + " display_kernel(mono_layer.monotonicity_indicator)\n", + "\n", + " print(\"kernel:\")\n", + " with replace_kernel_using_monotonicity_indicator(\n", + " mono_layer, mono_layer.monotonicity_indicator\n", + " ):\n", + " display_kernel(mono_layer.kernel)\n", + "\n", + " print(\"output:\")\n", + " display_kernel(y)\n", + "print(\"ok\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: \"model\"\n", + "_________________________________________________________________\n", + " Layer (type) Output Shape Param # \n", + "=================================================================\n", + " input_1 (InputLayer) [(None, 5, 7, 8)] 0 \n", + " \n", + " mono_dense_5 (MonoDense) (None, 5, 7, 12) 108 \n", + " \n", + "=================================================================\n", + "Total params: 108\n", + "Trainable params: 108\n", + "Non-trainable params: 0\n", + "_________________________________________________________________\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 0
01.00
11.00
21.00
3-1.00
4-1.00
5-1.00
60.00
70.00
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "x = Input(shape=(5, 7, 8))\n", + "\n", + "layer = MonoDense(\n", + " units=12,\n", + " activation=activation,\n", + " monotonicity_indicator=[1] * 3 + [-1] * 3 + [0] * 2,\n", + " is_convex=False,\n", + " is_concave=False,\n", + ")\n", + "\n", + "y = layer(x)\n", + "\n", + "model = Model(inputs=x, outputs=y)\n", + "\n", + "model.summary()\n", + "\n", + "display_kernel(layer.monotonicity_indicator)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Mono blocks" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | export\n", + "\n", + "\n", + "def _create_mono_block(\n", + " *,\n", + " units: List[int],\n", + " activation: Union[str, Callable[[TensorLike], TensorLike]],\n", + " monotonicity_indicator: TensorLike = 1,\n", + " is_convex: bool = False,\n", + " is_concave: bool = False,\n", + " dropout: Optional[float] = None,\n", + ") -> Callable[[TensorLike], TensorLike]:\n", + " def create_mono_block_inner(\n", + " x: TensorLike,\n", + " *,\n", + " units: List[int] = units,\n", + " activation: Union[str, Callable[[TensorLike], TensorLike]] = activation,\n", + " monotonicity_indicator: TensorLike = monotonicity_indicator,\n", + " is_convex: bool = is_convex,\n", + " is_concave: bool = is_concave,\n", + " ) -> TensorLike:\n", + " if len(units) == 0:\n", + " return x\n", + "\n", + " y = x\n", + " for i in range(len(units)):\n", + " y = MonoDense(\n", + " units=units[i],\n", + " activation=activation if i < len(units) - 1 else None,\n", + " monotonicity_indicator=monotonicity_indicator if i == 0 else 1,\n", + " is_convex=is_convex,\n", + " is_concave=is_concave,\n", + " name=f\"mono_dense_{i}\"\n", + " + (\"_increasing\" if i != 0 else \"\")\n", + " + (\"_convex\" if is_convex else \"\")\n", + " + (\"_concave\" if is_concave else \"\"),\n", + " )(y)\n", + " if (i < len(units) - 1) and dropout:\n", + " y = Dropout(dropout)(y)\n", + "\n", + " return y\n", + "\n", + " return create_mono_block_inner" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: \"model_1\"\n", + "_________________________________________________________________\n", + " Layer (type) Output Shape Param # \n", + "=================================================================\n", + " input_2 (InputLayer) [(None, 5, 7, 8)] 0 \n", + " \n", + " mono_dense_0 (MonoDense) (None, 5, 7, 16) 144 \n", + " \n", + " dropout (Dropout) (None, 5, 7, 16) 0 \n", + " \n", + " mono_dense_1_increasing (Mo (None, 5, 7, 16) 272 \n", + " noDense) \n", + " \n", + " dropout_1 (Dropout) (None, 5, 7, 16) 0 \n", + " \n", + " mono_dense_2_increasing (Mo (None, 5, 7, 16) 272 \n", + " noDense) \n", + " \n", + " dropout_2 (Dropout) (None, 5, 7, 16) 0 \n", + " \n", + " mono_dense_3_increasing (Mo (None, 5, 7, 3) 51 \n", + " noDense) \n", + " \n", + "=================================================================\n", + "Total params: 739\n", + "Trainable params: 739\n", + "Non-trainable params: 0\n", + "_________________________________________________________________\n" + ] + } + ], + "source": [ + "x = Input(shape=(5, 7, 8))\n", + "\n", + "# monotonicity indicator must be broadcastable to input shape, so we use the vector of length 8\n", + "monotonicity_indicator = [1] * 3 + [0] * 2 + [-1] * 3\n", + "\n", + "# this mono block has 4 layers with the final one having the shape\n", + "mono_block = _create_mono_block(\n", + " units=[16] * 3 + [3],\n", + " monotonicity_indicator=monotonicity_indicator,\n", + " activation=\"elu\",\n", + " dropout=0.1,\n", + ")\n", + "y = mono_block(x)\n", + "model = Model(inputs=x, outputs=y)\n", + "model.summary()\n", + "\n", + "mono_layers = [layer for layer in model.layers if isinstance(layer, MonoDense)]\n", + "assert not (mono_layers[0].monotonicity_indicator == 1).all()\n", + "for mono_layer in mono_layers[1:]:\n", + " assert (mono_layer.monotonicity_indicator == 1).all()\n", + "\n", + "for mono_layer in mono_layers[:-1]:\n", + " assert mono_layer.org_activation == \"elu\"\n", + "assert mono_layers[-1].org_activation == None" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | export\n", + "\n", + "T = TypeVar(\"T\")\n", + "\n", + "\n", + "def _prepare_mono_input_n_param(\n", + " inputs: Union[TensorLike, Dict[str, TensorLike], List[TensorLike]],\n", + " param: Union[T, Dict[str, T], List[T]],\n", + ") -> Tuple[List[TensorLike], List[T], List[str]]:\n", + " if isinstance(inputs, list):\n", + " if isinstance(param, int):\n", + " param = [param] * len(inputs) # type: ignore\n", + " elif isinstance(param, list):\n", + " if len(inputs) != len(param):\n", + " raise ValueError(f\"{len(inputs)} != {len(param)}\")\n", + " else:\n", + " raise ValueError(f\"Incompatible types: {type(inputs)=}, {type(param)=}\")\n", + " sorted_feature_names = [f\"{i}\" for i in range(len(inputs))]\n", + "\n", + " elif isinstance(inputs, dict):\n", + " sorted_feature_names = sorted(inputs.keys())\n", + "\n", + " if isinstance(param, int):\n", + " param = [param] * len(inputs) # type: ignore\n", + " elif isinstance(param, dict):\n", + " if set(param.keys()) != set(sorted_feature_names):\n", + " raise ValueError(f\"{set(param.keys())} != {set(sorted_feature_names)}\")\n", + " else:\n", + " param = [param[k] for k in sorted_feature_names]\n", + " else:\n", + " raise ValueError(f\"Incompatible types: {type(inputs)=}, {type(param)=}\")\n", + "\n", + " inputs = [inputs[k] for k in sorted_feature_names]\n", + "\n", + " else:\n", + " if not isinstance(param, int):\n", + " raise ValueError(f\"Incompatible types: {type(inputs)=}, {type(param)=}\")\n", + " inputs = [inputs]\n", + " param = [param] # type: ignore\n", + " sorted_feature_names = [\"inputs\"]\n", + "\n", + " return inputs, param, sorted_feature_names" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "inputs = Input(name=\"a\", shape=(1,))\n", + "param = 0\n", + "\n", + "actual = _prepare_mono_input_n_param(inputs, param)\n", + "expected = [inputs], [0], [\"inputs\"]\n", + "assert actual == expected, actual" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + ", type(param)=\") tblen=2>" + ] + }, + "execution_count": null, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "inputs = Input(name=\"a\", shape=(1,))\n", + "param = {\"a\": 1}\n", + "\n", + "with pytest.raises(ValueError) as e:\n", + " actual = _prepare_mono_input_n_param(inputs, param)\n", + "\n", + "e" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a = Input(name=\"a\", shape=(1,))\n", + "actual = _prepare_mono_input_n_param({\"a\": a}, -1)\n", + "assert actual == ([a], [-1], [\"a\"])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a = Input(name=\"a\", shape=(1,))\n", + "b = Input(name=\"b\", shape=(1,))\n", + "\n", + "actual = _prepare_mono_input_n_param({\"a\": a, \"b\": b}, {\"a\": -1, \"b\": 1})\n", + "assert actual == ([a, b], [-1, 1], [\"a\", \"b\"])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": null, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "with pytest.raises(ValueError) as e:\n", + " actual = _prepare_mono_input_n_param(\n", + " {\"a\": Input(name=\"a\", shape=(1,)), \"b\": Input(name=\"b\", shape=(1,))}, {\"a\": -1}\n", + " )\n", + "e" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a = Input(name=\"a\", shape=(1,))\n", + "b = Input(name=\"b\", shape=(1,))\n", + "\n", + "actual = _prepare_mono_input_n_param([a, b], [1, -1])\n", + "assert actual == ([a, b], [1, -1], [\"0\", \"1\"])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a = Input(name=\"a\", shape=(1,))\n", + "b = Input(name=\"b\", shape=(1,))\n", + "\n", + "actual = _prepare_mono_input_n_param([a, b], -1)\n", + "assert actual == ([a, b], [-1, -1], [\"0\", \"1\"])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | export\n", + "\n", + "\n", + "def _check_convexity_params(\n", + " monotonicity_indicator: List[int],\n", + " is_convex: List[bool],\n", + " is_concave: List[bool],\n", + " names: List[str],\n", + ") -> Tuple[bool, bool]:\n", + " ix = [\n", + " i for i in range(len(monotonicity_indicator)) if is_convex[i] and is_concave[i]\n", + " ]\n", + "\n", + " if len(ix) > 0:\n", + " raise ValueError(\n", + " f\"Parameters both convex and concave: {[names[i] for i in ix]}\"\n", + " )\n", + "\n", + " has_convex = any(is_convex)\n", + " has_concave = any(is_concave)\n", + " if has_convex and has_concave:\n", + " print(\"WARNING: we have both convex and concave parameters\")\n", + "\n", + " return has_convex, has_concave" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "monotonicity_indicator = [-1, 0, 1]\n", + "is_convex = [True] * 3\n", + "is_concave = [False] * 3\n", + "names = list(\"abc\")\n", + "has_convex, has_concave = _check_convexity_params(\n", + " monotonicity_indicator, is_convex, is_concave, names\n", + ")\n", + "assert (has_convex, has_concave) == (True, False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Type-1 architecture" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | export\n", + "\n", + "\n", + "@export\n", + "def _create_type_1(\n", + " inputs: Union[TensorLike, Dict[str, TensorLike], List[TensorLike]],\n", + " *,\n", + " units: int,\n", + " final_units: int,\n", + " activation: Union[str, Callable[[TensorLike], TensorLike]],\n", + " n_layers: int,\n", + " final_activation: Optional[Union[str, Callable[[TensorLike], TensorLike]]] = None,\n", + " monotonicity_indicator: Union[int, Dict[str, int], List[int]] = 1,\n", + " is_convex: Union[bool, Dict[str, bool], List[bool]] = False,\n", + " is_concave: Union[bool, Dict[str, bool], List[bool]] = False,\n", + " dropout: Optional[float] = None,\n", + ") -> TensorLike:\n", + " \"\"\"Builds Type-1 monotonic network\n", + "\n", + " Type-1 architecture corresponds to the standard MLP type of neural network architecture used in general, where each\n", + " of the input features is concatenated to form one single input feature vector $\\mathbf{x}$ and fed into the network,\n", + " with the only difference being that instead of standard fully connected or dense layers, we employ monotonic dense units\n", + " throughout. For the first (or input layer) layer, the indicator vector $\\mathbf{t}$, is used to identify the monotonicity\n", + " property of the input feature with respect to the output. Specifically, $\\mathbf{t}$ is set to $1$ for those components\n", + " in the input feature vector that are monotonically increasing and is set to $-1$ for those components that are monotonically\n", + " decreasing and set to $0$ if the feature is non-monotonic. For the subsequent hidden layers, monotonic dense units with the\n", + " indicator vector $\\mathbf{t}$ always being set to $1$ are used in order to preserve monotonicity. Finally, depending on\n", + " whether the problem at hand is a regression problem or a classification problem (or even a multi-task problem), an appropriate\n", + " activation function (such as linear activation or sigmoid or softmax) to obtain the final output.\n", + "\n", + " ![mono-dense-layer-diagram.png](../../../images/nbs/images/type-1.png)\n", + "\n", + " Args:\n", + " inputs: input tensor or a dictionary of tensors\n", + " units: number of units in hidden layers\n", + " final_units: number of units in the output layer\n", + " activation: the base activation function\n", + " n_layers: total number of layers (hidden layers plus the output layer)\n", + " final_activation: the activation function of the final layer (typically softmax, sigmoid or linear).\n", + " If set to None (default value), then the linear activation is used.\n", + " monotonicity_indicator: if an instance of dictionary, then maps names of input feature to their monotonicity\n", + " indicator (-1 for monotonically decreasing, 1 for monotonically increasing and 0 otherwise). If int,\n", + " then all input features are set to the same monotinicity indicator.\n", + " is_convex: set to True if a particular input feature is convex\n", + " is_concave: set to True if a particular inputs feature is concave\n", + " dropout: dropout rate. If set to float greater than 0, Dropout layers are inserted after hidden layers.\n", + "\n", + " Returns:\n", + " Output tensor\n", + "\n", + " \"\"\"\n", + " _, is_convex, _ = _prepare_mono_input_n_param(inputs, is_convex)\n", + " _, is_concave, _ = _prepare_mono_input_n_param(inputs, is_concave)\n", + " x, monotonicity_indicator, names = _prepare_mono_input_n_param(\n", + " inputs, monotonicity_indicator\n", + " )\n", + " has_convex, has_concave = _check_convexity_params(\n", + " monotonicity_indicator, is_convex, is_concave, names\n", + " )\n", + "\n", + " y = tf.keras.layers.Concatenate()(x)\n", + "\n", + " y = _create_mono_block(\n", + " units=[units] * (n_layers - 1) + [final_units],\n", + " activation=activation,\n", + " monotonicity_indicator=monotonicity_indicator,\n", + " is_convex=has_convex,\n", + " is_concave=has_concave and not has_convex,\n", + " dropout=dropout,\n", + " )(y)\n", + "\n", + " if final_activation is not None:\n", + " y = tf.keras.activations.get(final_activation)(y)\n", + "\n", + " return y" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: \"model_2\"\n", + "__________________________________________________________________________________________________\n", + " Layer (type) Output Shape Param # Connected to \n", + "==================================================================================================\n", + " a (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " b (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " c (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " d (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " concatenate (Concatenate) (None, 4) 0 ['a[0][0]', \n", + " 'b[0][0]', \n", + " 'c[0][0]', \n", + " 'd[0][0]'] \n", + " \n", + " mono_dense_0_convex (MonoDense (None, 64) 320 ['concatenate[0][0]'] \n", + " ) \n", + " \n", + " dropout_3 (Dropout) (None, 64) 0 ['mono_dense_0_convex[0][0]'] \n", + " \n", + " mono_dense_1_increasing_convex (None, 64) 4160 ['dropout_3[0][0]'] \n", + " (MonoDense) \n", + " \n", + " dropout_4 (Dropout) (None, 64) 0 ['mono_dense_1_increasing_convex[\n", + " 0][0]'] \n", + " \n", + " mono_dense_2_increasing_convex (None, 64) 4160 ['dropout_4[0][0]'] \n", + " (MonoDense) \n", + " \n", + " dropout_5 (Dropout) (None, 64) 0 ['mono_dense_2_increasing_convex[\n", + " 0][0]'] \n", + " \n", + " mono_dense_3_increasing_convex (None, 10) 650 ['dropout_5[0][0]'] \n", + " (MonoDense) \n", + " \n", + " tf.nn.softmax (TFOpLambda) (None, 10) 0 ['mono_dense_3_increasing_convex[\n", + " 0][0]'] \n", + " \n", + "==================================================================================================\n", + "Total params: 9,290\n", + "Trainable params: 9,290\n", + "Non-trainable params: 0\n", + "__________________________________________________________________________________________________\n" + ] + } + ], + "source": [ + "n_layers = 4\n", + "\n", + "inputs = {name: Input(name=name, shape=(1,)) for name in list(\"abcd\")}\n", + "outputs = _create_type_1(\n", + " inputs=inputs,\n", + " units=64,\n", + " final_units=10,\n", + " activation=\"elu\",\n", + " n_layers=n_layers,\n", + " final_activation=\"softmax\",\n", + " monotonicity_indicator=dict(a=1, b=0, c=-1, d=0),\n", + " is_convex=True,\n", + " dropout=0.1,\n", + ")\n", + "\n", + "model = Model(inputs=inputs, outputs=outputs)\n", + "model.summary()\n", + "\n", + "mono_layers = [layer for layer in model.layers if isinstance(layer, MonoDense)]\n", + "assert len(mono_layers) == n_layers\n", + "\n", + "# check monotonicity indicator\n", + "np.testing.assert_array_equal(\n", + " mono_layers[0].monotonicity_indicator, np.array([1, 0, -1, 0]).reshape((-1, 1))\n", + ")\n", + "for i in range(1, n_layers):\n", + " assert mono_layers[i].monotonicity_indicator == 1\n", + "\n", + "# check convexity and concavity\n", + "for i in range(n_layers):\n", + " assert mono_layers[i].is_convex\n", + " assert not mono_layers[i].is_concave" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Type-2 architecture" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[1, 1, 0, 0, 1, 1]" + ] + }, + "execution_count": null, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "monotonicity_indicator = [1, 0, -1]\n", + "input_units = 2\n", + "monotonicity_indicator = sum(\n", + " [[abs(x)] * input_units for x in monotonicity_indicator], []\n", + ")\n", + "monotonicity_indicator" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | export\n", + "\n", + "\n", + "@export\n", + "def _create_type_2(\n", + " inputs: Union[TensorLike, Dict[str, TensorLike], List[TensorLike]],\n", + " *,\n", + " input_units: Optional[int] = None,\n", + " units: int,\n", + " final_units: int,\n", + " activation: Union[str, Callable[[TensorLike], TensorLike]],\n", + " n_layers: int,\n", + " final_activation: Optional[Union[str, Callable[[TensorLike], TensorLike]]] = None,\n", + " monotonicity_indicator: Union[int, Dict[str, int], List[int]] = 1,\n", + " is_convex: Union[bool, Dict[str, bool], List[bool]] = False,\n", + " is_concave: Union[bool, Dict[str, bool], List[bool]] = False,\n", + " dropout: Optional[float] = None,\n", + ") -> TensorLike:\n", + " \"\"\"Builds Type-2 monotonic network\n", + "\n", + " Type-2 architecture is another example of a neural network architecture that can be built employing proposed\n", + " monotonic dense blocks. The difference when compared to the architecture described above lies in the way input\n", + " features are fed into the hidden layers of neural network architecture. Instead of concatenating the features\n", + " directly, this architecture provides flexibility to employ any form of complex feature extractors for the\n", + " non-monotonic features and use the extracted feature vectors as inputs. Another difference is that each monotonic\n", + " input is passed through separate monotonic dense units. This provides an advantage since depending on whether the\n", + " input is completely concave or convex or both, we can adjust the activation selection vector $\\mathbf{s}$ appropriately\n", + " along with an appropriate value for the indicator vector $\\mathbf{t}$. Thus, each of the monotonic input features has\n", + " a separate monotonic dense layer associated with it. Thus as the major difference to the above-mentioned architecture,\n", + " we concatenate the feature vectors instead of concatenating the inputs directly. The subsequent parts of the network are\n", + " similar to the architecture described above wherein for the rest of the hidden monotonic dense units, the indicator vector\n", + " $\\mathbf{t}$ is always set to $1$ to preserve monotonicity.\n", + "\n", + " ![mono-dense-layer-diagram.png](../../../images/nbs/images/type-2.png)\n", + "\n", + " Args:\n", + " inputs: input tensor or a dictionary of tensors\n", + " input_units: used to preprocess features before entering the common mono block\n", + " units: number of units in hidden layers\n", + " final_units: number of units in the output layer\n", + " activation: the base activation function\n", + " n_layers: total number of layers (hidden layers plus the output layer)\n", + " final_activation: the activation function of the final layer (typically softmax, sigmoid or linear).\n", + " If set to None (default value), then the linear activation is used.\n", + " monotonicity_indicator: if an instance of dictionary, then maps names of input feature to their monotonicity\n", + " indicator (-1 for monotonically decreasing, 1 for monotonically increasing and 0 otherwise). If int,\n", + " then all input features are set to the same monotinicity indicator.\n", + " is_convex: set to True if a particular input feature is convex\n", + " is_concave: set to True if a particular inputs feature is concave\n", + " dropout: dropout rate. If set to float greater than 0, Dropout layers are inserted after hidden layers.\n", + "\n", + " Returns:\n", + " Output tensor\n", + "\n", + " \"\"\"\n", + " _, is_convex, _ = _prepare_mono_input_n_param(inputs, is_convex)\n", + " _, is_concave, _ = _prepare_mono_input_n_param(inputs, is_concave)\n", + " x, monotonicity_indicator, names = _prepare_mono_input_n_param(\n", + " inputs, monotonicity_indicator\n", + " )\n", + " has_convex, has_concave = _check_convexity_params(\n", + " monotonicity_indicator, is_convex, is_concave, names\n", + " )\n", + "\n", + " if input_units is None:\n", + " input_units = max(units // 4, 1)\n", + "\n", + " y = [\n", + " (\n", + " MonoDense(\n", + " units=input_units,\n", + " activation=activation,\n", + " monotonicity_indicator=monotonicity_indicator[i],\n", + " is_convex=is_convex[i],\n", + " is_concave=is_concave[i],\n", + " name=f\"mono_dense_{names[i]}\"\n", + " + (\"_increasing\" if monotonicity_indicator[i] == 1 else \"_decreasing\")\n", + " + (\"_convex\" if is_convex[i] else \"\")\n", + " + (\"_concave\" if is_concave[i] else \"\"),\n", + " )\n", + " if monotonicity_indicator[i] != 0\n", + " else (\n", + " Dense(\n", + " units=input_units, activation=activation, name=f\"dense_{names[i]}\"\n", + " )\n", + " )\n", + " )(x[i])\n", + " for i in range(len(inputs))\n", + " ]\n", + "\n", + " y = Concatenate(name=\"preprocessed_features\")(y)\n", + " monotonicity_indicator_block: List[int] = sum(\n", + " [[abs(x)] * input_units for x in monotonicity_indicator], []\n", + " )\n", + "\n", + " y = _create_mono_block(\n", + " units=[units] * (n_layers - 1) + [final_units],\n", + " activation=activation,\n", + " monotonicity_indicator=monotonicity_indicator_block,\n", + " is_convex=has_convex,\n", + " is_concave=has_concave and not has_convex,\n", + " dropout=dropout,\n", + " )(y)\n", + "\n", + " if final_activation is not None:\n", + " y = tf.keras.activations.get(final_activation)(y)\n", + "\n", + " return y" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "************************************************************************************************************************\n", + "\n", + "dropout=False\n", + "\n", + "Model: \"model_3\"\n", + "__________________________________________________________________________________________________\n", + " Layer (type) Output Shape Param # Connected to \n", + "==================================================================================================\n", + " a (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " b (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " c (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " d (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " mono_dense_a_increasing_convex (None, 8) 16 ['a[0][0]'] \n", + " (MonoDense) \n", + " \n", + " dense_b (Dense) (None, 8) 16 ['b[0][0]'] \n", + " \n", + " mono_dense_c_decreasing (MonoD (None, 8) 16 ['c[0][0]'] \n", + " ense) \n", + " \n", + " dense_d (Dense) (None, 8) 16 ['d[0][0]'] \n", + " \n", + " preprocessed_features (Concate (None, 32) 0 ['mono_dense_a_increasing_convex[\n", + " nate) 0][0]', \n", + " 'dense_b[0][0]', \n", + " 'mono_dense_c_decreasing[0][0]',\n", + " 'dense_d[0][0]'] \n", + " \n", + " mono_dense_0_convex (MonoDense (None, 32) 1056 ['preprocessed_features[0][0]'] \n", + " ) \n", + " \n", + " mono_dense_1_increasing_convex (None, 32) 1056 ['mono_dense_0_convex[0][0]'] \n", + " (MonoDense) \n", + " \n", + " mono_dense_2_increasing_convex (None, 10) 330 ['mono_dense_1_increasing_convex[\n", + " (MonoDense) 0][0]'] \n", + " \n", + " tf.nn.softmax_1 (TFOpLambda) (None, 10) 0 ['mono_dense_2_increasing_convex[\n", + " 0][0]'] \n", + " \n", + "==================================================================================================\n", + "Total params: 2,506\n", + "Trainable params: 2,506\n", + "Non-trainable params: 0\n", + "__________________________________________________________________________________________________\n", + "************************************************************************************************************************\n", + "\n", + "dropout=True\n", + "\n", + "Model: \"model_4\"\n", + "__________________________________________________________________________________________________\n", + " Layer (type) Output Shape Param # Connected to \n", + "==================================================================================================\n", + " a (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " b (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " c (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " d (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " mono_dense_a_increasing_convex (None, 8) 16 ['a[0][0]'] \n", + " (MonoDense) \n", + " \n", + " dense_b (Dense) (None, 8) 16 ['b[0][0]'] \n", + " \n", + " mono_dense_c_decreasing (MonoD (None, 8) 16 ['c[0][0]'] \n", + " ense) \n", + " \n", + " dense_d (Dense) (None, 8) 16 ['d[0][0]'] \n", + " \n", + " preprocessed_features (Concate (None, 32) 0 ['mono_dense_a_increasing_convex[\n", + " nate) 0][0]', \n", + " 'dense_b[0][0]', \n", + " 'mono_dense_c_decreasing[0][0]',\n", + " 'dense_d[0][0]'] \n", + " \n", + " mono_dense_0_convex (MonoDense (None, 32) 1056 ['preprocessed_features[0][0]'] \n", + " ) \n", + " \n", + " dropout_6 (Dropout) (None, 32) 0 ['mono_dense_0_convex[0][0]'] \n", + " \n", + " mono_dense_1_increasing_convex (None, 32) 1056 ['dropout_6[0][0]'] \n", + " (MonoDense) \n", + " \n", + " dropout_7 (Dropout) (None, 32) 0 ['mono_dense_1_increasing_convex[\n", + " 0][0]'] \n", + " \n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " mono_dense_2_increasing_convex (None, 10) 330 ['dropout_7[0][0]'] \n", + " (MonoDense) \n", + " \n", + " tf.nn.softmax_2 (TFOpLambda) (None, 10) 0 ['mono_dense_2_increasing_convex[\n", + " 0][0]'] \n", + " \n", + "==================================================================================================\n", + "Total params: 2,506\n", + "Trainable params: 2,506\n", + "Non-trainable params: 0\n", + "__________________________________________________________________________________________________\n" + ] + } + ], + "source": [ + "for dropout in [False, True]:\n", + " print(\"*\" * 120)\n", + " print()\n", + " print(f\"{dropout=}\")\n", + " print()\n", + " inputs = {name: Input(name=name, shape=(1,)) for name in list(\"abcd\")}\n", + " outputs = _create_type_2(\n", + " inputs,\n", + " units=32,\n", + " final_units=10,\n", + " activation=\"elu\",\n", + " final_activation=\"softmax\",\n", + " n_layers=3,\n", + " dropout=dropout,\n", + " monotonicity_indicator=dict(a=1, b=0, c=-1, d=0),\n", + " is_convex=dict(a=True, b=False, c=False, d=False),\n", + " is_concave=False,\n", + " )\n", + " model = Model(inputs=inputs, outputs=outputs)\n", + " model.summary()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "python3", + "language": "python", + "name": "python3" + } }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Saved figure to: plots/linear-based_activations.pdf\n", - "Saved figure to: plots/linear-based_activations.png\n" - ] - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Saved figure to: plots/ReLU-based_activations.pdf\n", - "Saved figure to: plots/ReLU-based_activations.png\n" - ] - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Saved figure to: plots/ELU-based_activations.pdf\n", - "Saved figure to: plots/ELU-based_activations.png\n" - ] - }, - { - "data": { - "image/png": "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//6HXq9n4MCBtG7dGqPRyC+//OJ4na1bt47p06fz9ttvV1nPzJkzeffddx2/x8XFOVpAbTYb2dnZHD582PHauSrVd3Yjroy0XHjG+THp9XoFUCZNmqTk5+dXKJeTk6OMGzfOUVatVitbtmypsk6TyaRMmTJF2bBhg1JWVlZlGaPRqMyfP1/RarWOb1qFhYVVlnVuZXjssceU4uLiKssVFhYqn3/+ufLUU09VuT8jI0OJiopy1DV58mTl7NmzlcqdO3dOGTt2rKNcly5dFIvFUmWd1113XYVvxt9++22lMt9//70SHh7uaEGo6d+/Kg8//LDy3XffVftt0mKxKEuXLlUCAwMd5z916lS19X333XeKSqVyxDh8+HDl8OHDVZY9deqU8vzzz1f5DdldK0RV3B1TXFysBAUFOcocOnTIZX0Wi6XC33vDhg2VyqSkpCh//etflR07dihWq7XKevLz85UnnnjCUU+7du2qLasonrdCXO4xr732WoVyTz/9tGIymSqUycjIUG688UZHGa1Wq2zfvr3K+pyfb4PBoADKTTfdpKSlpVUoZzablRkzZjjKqlSqKl+7WVlZjvezRqNRli1bpthstirPffbsWeWf//yn8v7777t5ZhofSS4aOOcP4j59+iiPPvqox7fs7Owq62zsyQWg3HzzzdX+4zSbzcq1117rKDtkyJArPv+rr77qqG/x4sWV9hcWFjr2N2/evNp/Vp647777HHU9/vjjLstaLBZl+PDhjvIrV66sVOaHH36o8A/3p59+qra+TZs2VfjQ9lZy4amVK1c6zvvkk09WWcZsNistW7Z0lLvlllsUs9lco/PVRnKhKIoyefLkCh+urqxdu9ZRNiEh4YpeO4qiKFOnTnXU9/3331dbrjaSi/z8/AqJ1YwZM6qty2g0VrhcNmzYsCrLOT/f5e/n6v7eNputQp2vvvpqpTLffvutY/+kSZM8eNRXJ0kuGjjnD+LLvVX3T7+xJxcqlUo5ceKEy/IHDhyo8Bh+//33Kzr/+fPnHXWNGzeu0v709HTH/u7du9f4PJmZmY6WmZiYmErX3quybds2x7lHjx5daf+ECRMc+2+//Xa39d155531llxYLBbHh1PPnj2rLOOcgAQGBioXLlyo8flqK7lwTujcJQyTJk3yOBHxhHP/jenTp1dbrjaSi7ffftuxPzo62mW/h0tj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HX5+fsrp06fdPp6azOp52223OY4ZP368YzsmJqba9WDK5eTkKAEBAY5jJk2apOTm5lYok5+frzzwwAOVXqstWrSott4RI0Y4ynm6equr90C5S9cWee655yqtLXLu3Dll5MiRjjKeri3iyfPtPMNwVY9/9uzZSrdu3ZTFixcrGRkZVdZRWFioPPPMM456NBqNcubMGbfnbkxkKGoj8v33319WE29AQADz5893Weabb76he/fuHtc5depUpk6dCsD8+fM5cOAAGzZsQFEU/v73v/P666/Tv39/EhISMBgMZGVlsWPHjgrffMLCwli1apVHY9JrYtasWbz11lv8+9//ZvXq1QwfPpyoqCjOnTvHTz/9VKH3+axZsxg8eHClOtRqNS+//DL33XcfAOvXr6ddu3YMHDiQFi1akJ2dzc8//+zoXPjuu+8yadIkl3GVf1ObM2cOMTExdO/enZiYGLRaLefPn2fPnj0Vrp8PGTKEP//5z5XqiY2N5euvv+bmm28mKyuLo0ePMmLEiAorN5rNZrKysjh06JBHnRo/+OADBgwYwPnz58nNzWXUqFF07tzZsSrqvn37HM3T06dP58svv/Rax8CXX36ZG2+8EZvNxr59++jSpQuDBg2iVatWFBUV8csvvzhWa33llVd499133Z77lltuYd68eTz99NOAve9Fp06d6NatW4VVUQ8cOOBY2dK5Va1cTEwMAwcOZOvWrRiNRrp168bIkSNp1qyZ43JE69atefjhh6/oObjrrrsc/S2cO/FOnDix0nDkS4WHhzNjxgzH6r4ff/wxa9eupV+/fsTFxZGRkcHPP/9McXExWq2WxYsXc88997iNafz48Y5+BE899RRr164lKSmpwhwszz77bKV5RtyZMWMGmzdv5ttvvwXg73//O2+//TbDhg0jPDzcsSqq85D1BQsWVOhvVNt+/fVXHnnkER599FFat25N586dadKkCWazmYyMDLZu3Vqh79jTTz9dYWbPq0J9ZzfiylzJ2iKhoaFV1nnpIl+Xc7u09aSsrEyZPn26o7XA3a1///7KsWPHvP48OT+mpUuXKlu2bKnw7f7Sm0ajUZ599lm39Tp/O6nq5ufnp7zzzjuKorj+1rZ9+3bHSoue3G677bZqW4HKpaSkVFjN1N0tOjpaWbduXbX1HTp0SGnbtq3LOh544AGlrKxMadGihdda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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Saved figure to: plots/SELU-based_activations.pdf\n", - "Saved figure to: plots/SELU-based_activations.png\n" - ] - }, - { - "data": { - "image/png": "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rKwsPD09+b//+z+nh6BWVHMRHR1NTk4O/v7ODW0yGAwkJCTQvHlzPD09r+gaxNU7cuQIXbp0ITAwkKCgIE6cOMEvv/zC0KFD67poLiWvN+GOis3F/HLmF34791uZeSpUqHix14tE+EZgMlv44eAFfjx0ocJJsGzHqGB4hybc2jkCD626NoovXCQ3N5eAgIAqv0PdvuYiISGBm266iaysLDQaDUuWLKnW3BZ6vR69Xl+DJRS15YknnsBkMvHxxx8TGRlJ//79efLJJzl06JBMBS9EDVEUhV0Xd/Hdqe8qnFFTQeGH0z8wNGISC7YkkJRV5DC/JoGe3NevOS1DZTKshsytg4vk5GRuvPFGkpOTUalUfP7554waNaquiyXqwOLFi9m4cSMTJ07ktttuA+C5555j1qxZvPXWW/z73/+u4xIK0fCcyz3HsuPLOJN7ptI0FkXh/07uYOO+CDyVxpWmU6lU3NIxnJGdI9BppLaioXPb/3B6ejpDhw7l9GnrgjZz587lnnvuqeNSibqQk5PDs88+S0REBB988IHt8enTp9OpUydef/11zpw54zAPo9FIq1atUKlUrFixwuVlfOKJJ1CpVEyePLnqxEK4uWJzMStPrOStXW85DCwKjSZOpxox516HhxJcabrIIC+mjmjL2OuiJLC4Rrhln4ucnByGDBnC3r17AXjjjTd4/vnnXZK3s+1F9qQNvP576623eO655+jQoQMHDx50+Zj6c+fO0apVK0pKSti1a5dTI5kqI683UZeOZRzjmz+/IdOQWWkai6KQkluMMS+OEKU3GrwqTKdWqxjRsQl/69QErQQVDYKz36Fu998uLCxkxIgRtsDi3//+t8sCC3FtysvL48033wRg6tSpNTJZT0xMDJMnT0ZRFF5++WWX5y9ETSsoKeDLI1/yv/3/cxhYFBSbuJgWiFfubYQpgysNLKKDvXl5RDtGd42UwOIa5Fb/caPRyJgxY9iyZQsATz/9NP/5z3/quFSivvvoo4/IyMggJiaGO+64o8bO869//QuAtWvXsmfPnho7jxCutidlD69tf42dF3c6TKfFj8K0QQQWj0JPowrTqNUqRnWNZOqItsSEeFeYRjR8btWh88477+SXX34BYMiQITzwwAMcPny40vQeHh7ExcXVVvFEPWQ2m239NO68807U6pqLp1u3bs11113H3r17mTt3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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# | hide\n", - "\n", - "\n", - "for activation in [\"linear\", \"ReLU\", \"ELU\", \"SELU\"]:\n", - " plot_activation_functions(activation, save_pdf=True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | export\n", - "\n", - "\n", - "@tf.function\n", - "def apply_activations(\n", - " x: TensorLike,\n", - " *,\n", - " units: int,\n", - " convex_activation: Callable[[TensorLike], TensorLike],\n", - " concave_activation: Callable[[TensorLike], TensorLike],\n", - " saturated_activation: Callable[[TensorLike], TensorLike],\n", - " is_convex: bool = False,\n", - " is_concave: bool = False,\n", - " activation_weights: Tuple[float, float, float] = (7.0, 7.0, 2.0),\n", - ") -> TensorLike:\n", - " if convex_activation is None:\n", - " return x\n", - "\n", - " elif is_convex:\n", - " normalized_activation_weights = np.array([1.0, 0.0, 0.0])\n", - " elif is_concave:\n", - " normalized_activation_weights = np.array([0.0, 1.0, 0.0])\n", - " else:\n", - " if len(activation_weights) != 3:\n", - " raise ValueError(f\"activation_weights={activation_weights}\")\n", - " if (np.array(activation_weights) < 0).any():\n", - " raise ValueError(f\"activation_weights={activation_weights}\")\n", - " normalized_activation_weights = np.array(activation_weights) / sum(\n", - " activation_weights\n", - " )\n", - "\n", - " s_convex = round(normalized_activation_weights[0] * units)\n", - " s_concave = round(normalized_activation_weights[1] * units)\n", - " s_saturated = units - s_convex - s_concave\n", - "\n", - " x_convex, x_concave, x_saturated = tf.split(\n", - " x, (s_convex, s_concave, s_saturated), axis=-1\n", - " )\n", - "\n", - " y_convex = convex_activation(x_convex)\n", - " y_concave = concave_activation(x_concave)\n", - " y_saturated = saturated_activation(x_saturated)\n", - "\n", - " y = tf.concat([y_convex, y_concave, y_saturated], axis=-1)\n", - "\n", - " return y" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def plot_applied_activation(\n", - " activation: str = \"relu\",\n", - " *,\n", - " save_pdf: bool = False,\n", - " save_path: Union[Path, str] = \"plots\",\n", - " font_size: int = 20,\n", - " linestyle=\"--\",\n", - " alpha=0.7,\n", - " linewidth=2.0,\n", - "):\n", - " font = {\"size\": font_size}\n", - " matplotlib.rc(\"font\", **font)\n", - " plt.rcParams[\"figure.figsize\"] = (18, 3)\n", - "\n", - " x = np.arange(-1.5, 1.5, step=3 / 256)\n", - " h = 3 * np.sin(2 * np.pi * x)\n", - "\n", - " (\n", - " convex_activation,\n", - " concave_activation,\n", - " saturated_activation,\n", - " ) = get_activation_functions(activation)\n", - "\n", - " y = apply_activations(\n", - " h,\n", - " convex_activation=convex_activation,\n", - " concave_activation=concave_activation,\n", - " saturated_activation=saturated_activation,\n", - " units=x.shape[0],\n", - " activation_weights=(1.0, 1.0, 1.0),\n", - " )\n", - "\n", - " plot_kwargs = dict(linestyle=linestyle, alpha=alpha, linewidth=linewidth)\n", - "\n", - " plt.plot(np.arange(x.shape[0]), h, label=\"$h$\", **plot_kwargs)\n", - " plt.plot(np.arange(x.shape[0]), y, label=r\"${\\rho}(h)$\", **plot_kwargs)\n", - " title = (\n", - " \"Applying \"\n", - " + (activation.__name__ if hasattr(activation, \"__name__\") else activation)\n", - " + f\"-based activations to {x.shape[0]}-dimensional vector\"\n", - " + r\" $h$\"\n", - " )\n", - " plt.title(title)\n", - "\n", - " plt.legend()\n", - "\n", - " if save_pdf:\n", - " path = Path(save_path) / (title.replace(\" \", \"_\") + \".pdf\")\n", - " path.parent.mkdir(exist_ok=True, parents=True)\n", - " plt.savefig(path, format=\"pdf\")\n", - " # print(f\"Saved figure to: {path}\")\n", - "\n", - " plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABbkAAAFFCAYAAADB3eDIAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAC/2klEQVR4nOzdd3wT9f8H8Fd20j0YpaWlrFJmyyyIbFAUmSqKA9xb8ev2+3X89OtXxYlbcICyFFBBmYLsPdsyWmaB0lKgpbvZd78/Ys8GOlKa9NL09Xw8eJBLPnd55XqXXN753OcUoiiKICIiIiIiIiIiIiJqgJRyByAiIiIiIiIiIiIiuloschMRERERERERERFRg8UiNxERERERERERERE1WCxyExEREREREREREVGDxSI3ERERERERERERETVYLHITERERERERERERUYPFIjcRERERERERERERNVgschMRERERERERERFRg8UiNxERERERERERERE1WCxyExEREREREREREVGDxSI3ERERERERERERETVYLHITkc+IjY2FQqGAQqHAqVOnfPY5vYErr7uxrhtvUr7+FQqF3FEahcGDB0vre8OGDXLH8TqN9T2hsb5uIndz5T2W+5v34d+kalw35CqbzQaDwQCFQgGNRgOTySR3JCKvxCI3kY+76667nApd06ZNkzsSERERkU86deoUvvnmG9x1111ISEhAaGgoNBoNwsLC0K1bNzz88MPYuHGjy8ubPXu203GcK/8eeOCBq8q+b98+vPTSS+jVqxdatGgBnU6HyMhI9OjRA/fddx/mzJmDnJycq1o2ERFdvbS0NKmwHR8fD71eL3MiIu/EIjeRDysuLsZvv/3mdN8PP/wgUxoiIvIVjbX3WWN93XJpSOt7//79SEpKQuvWrfHQQw9h3rx5SE1NRUFBAWw2G/Lz83HgwAHMnDkTgwcPxpAhQ3DmzBm5YwMALly4gLvuugs9e/bEtGnTsHfvXuTk5MBiseDcuXPYv38/Zs2ahcmTJ+Ott96SOy4RUYP6fHCH/fv3S7cTExPlC0Lk5dRyByAiz1m0aBHKysqc7ktLS8Pu3bvRu3dvmVIRERER+ZYjR45g165dTvfFxcWhS5cuaNKkCQoKCrBt2zacPXsWALBhwwb069cPmzdvRps2bVx6jvj4eAwbNqzGdtdcc43Luc+cOYPBgwcjIyNDuq9Dhw7o2rUrwsPDUVZWhhMnTiA5OfmKY0oiIqofycnJ0m0WuYmqxiI3kQ+r2GvbYDDAaDRK97PI7R6NoefA1eK6IaKKGut7QmN93Y1Vu3bt8MADD+Cuu+5CVFSU02OCIGD27Nl48sknUVZWhuzsbNx5553Ytm2bS9dOSEpKwueff+62rIWFhRgyZIhU4B4yZAimT5+Obt26XdHWYrFg3bp1KC4udtvzewL3N+/DvwlR3bEnN5FrOFwJkY/KyMjA5s2bATguPvfBBx9Ijy1YsAAWi0WuaEREREQ+pUWLFpg1axbS09Px4osvXlHgBgClUon77rsPc+fOle7bsWMH/vzzz/qMKnnuuedw8uRJAMBtt92GNWvWVFrgBgCtVouRI0fi1ltvrc+IREQE557c3bt3ly8IkZdjkZvIR/34448QRREAMGjQIDz00ENo2rQpAODSpUtYtmyZnPGIiIiIfMagQYNwzz33QKVS1dh2/Pjx6NOnjzS9fPlyT0arVHJyMr799lsAQHR0NL755huXshMRUf06deoUCgoKADjer8PCwuQNROTFWOQm8kGiKOLHH3+Upu+++26o1Wrcfvvt0n2uXoCy/IIeFU+j3b17Nx544AHExcXB398fYWFh6NOnD9555x0UFRXJutyqJCQkSM+3YMECl+ebMmWKNN8zzzxzxeOuXPSkstd65MgRPP300+jYsSMCAgIQFBSEhIQEvPzyy8jNzXU5n91ux3fffYfhw4ejefPm0Ov1iI2NxdixY/Hbb79JP3QMHjxYyrBhwwaXl18Xcq+bcnl5efjwww8xYsQIREdHQ6/XIyQkBJ06dcLjjz+OPXv2uLSc06dP46uvvsKkSZPQpUsXBAcHQ6PRIDw8HF27dsWjjz6KHTt2uJyrsteekpKCqVOnokuXLggLC4NCocC4ceNq+5Kr5a79zN3rIzMzE2+88QYGDhyI5s2bQ6fTQavVIjw8HAkJCbjjjjvw1VdfIScnp8ZluetvXk4QBPzwww8YMWIEIiIinPazJUuW1GpZteXu9VyuqKgIn332GUaPHo3Y2FgEBARAp9MhMjISw4YNwxtvvIFDhw45zXPq1Clpmz19+rR0f+vWrZ2256rea6p7T+jWrdtVvUc/9NBD0nyPP/54pW3qug49+bors2PHDjzxxBPo3LkzQkNDodfr0bJlS4wcORKff/45SktLXVo3nnp/dee+Wpm6ru+K3LUuPaF///7SbTmGc/j666+l248//jgCAwPrPUM5d77HXu2xR3JyMh599FF06NABAQEBCAgIQFJSEr788kvYbLYrlrFnzx7cc8896NixI/z9/REeHo4hQ4Zg3rx5tcoLuOczy5PHU3Xd533tPdBTn8t14cnP0HLuPraS4zikIndsZ/V1LF/VUCV//fUX7rnnHsTHx8Pf3x9BQUHo168fZsyYAUEQ6vScRA2WSEQ+Z9OmTSIAEYCo1+vFwsJCURRFcdeuXdL9Go1GvHDhQo3LKm9f/nbx+uuvi0ql0un+iv+ioqLEbdu2ybLcVq1aSe0zMjKcHvvss8+kx4YPH15jPlEUxcLCQtHPz0+a79ChQ7V6zqpe61dffSXqdLoqX2t4eLi4e/fuGvNlZmaKPXr0qHI5AMSxY8eKRUVF4qBBg6T71q9f79Lrr44rr1vOdVPu888/F4ODg6tdRwqFQrzvvvtEs9lc5XKee+45UaFQVLuc8n+33367WFpaWmO2yvYBlUpV6d/wanlq/3X3+pgxY4ZoMBhcWl7//v2rXZa7/ublzp07JyYlJVW7vPHjx3tkP/PEdieKjv0sNDTUpeWuXLlSmi8jI8OleapaB9W9J0ybNk167MYbb3TpdZhMJqfXUdm264516MnXXVFJSYl422231bj8Fi1aiCtWrKhx/Vy+/7vj/dWd+2pV6rq+PbEuPeGZZ55xaZufNWuW1G7KlClueW6bzSYGBQVJyz127Jhblns13P0eezXHHtOmTav087f83/XXXy+aTCZRFB3r7tFHH63xvcRms7n0+t31meWJ/V0U3bPP+9J7oLs/l11dNzXx1GdoOXcfW8l1HCKK7t3OLt/GPHEsL4qi+Nprr0nLevXVV8WMjAxx+PDh1ea/9dZbRUEQ6vS8RA0RLzxJ5IMq9tIeO3YsgoKCAAC9e/dGfHw80tPTYbVaMX/+fEydOtXl5X766ad44403ADgurJSUlAStVosDBw5Iv95nZWVh5MiR2Lhxo8sXxfDUciu666678MILL8BoNOKvv/7CqVOnEBsbW+08CxYsQFlZGQCgX79+6NSpU62f93KzZ8/Go48+CgDo0KEDevXqBYPBgPT0dGzduhWiKCIvLw9jxoxBWloagoODK11OXl4ehg4dimPHjkn3tW3bFklJSdDpdEhLS8POnTuxdOlS3HfffXXOXR/ctW7KPf300/jkk0+k6SZNmqBfv36IiIiAyWTC/v37cfDgQYiiiO+//x7Z2dlYvnw5lMorT3LKzMyEKIpQKBTo0KEDOnTogPDwcGg0GuTl5WH//v04ceIEAOCnn35CUVERli1b5tKFxADg/fffl/aBtm3bok+fPvDz88OpU6eg0WhcWkZN3LmfuXN9LFmyBA8//LA0Xd4LpWXLllCr1SgsLMTRo0dx8ODBGq8l4M6/OQAUFBRg6NChSEtLk+5r3bo1+vXrB51Oh0OHDmHXrl347bffqlxGXXhiu3vqqafw2WefSdMqlQq9e/dG+/btodfrcfHiRSQnJ0u97Uwmk9Q2KChI6un1448/Shegmzx5cqW9QCsbk7gqd9xxB15++WUIgoA///wTFy9elIbYqsqKFSuQn58PwLFN9+vX74o27liHnnzd5crKyjB06FDs2rVLui8yMhIDBgxAQEAAjh8/ji1btsBut+PcuXMYM2YMFixYgFtuucWl5bvj/dWd+2p16rq+Pb0u3eXAgQPS7ejoaJfmKSgowKJFi3Do0CEUFhYiKCgIkZGR6NevH7p27eryZ87BgwelM3eCg4PRtm1b2Gw2zJkzB3PnzsWhQ4eQn5+PJk2aoFu3bhgzZgzuu+8+6HS62r/QGl6PnO+xADBjxgy8+OKLABy9YRMTE6FSqbBz504cPnwYALB69Wo89dRTmDFjBh577DHMnDkTSqUSvXv3RseOHSEIAjZv3ixdwPOnn35CQkICXnrppWqf292fWeXcdTxVX/s80DDeAwHPHw9eLU99hgLu307lPA7x5HbmyWP5ij25DQYDkpKScOHCBQQHB2PAgAGIiIjAuXPnsH79eum766JFizBu3DjccccddXpuogZHjso6EXlOWVmZU++cZcuWOT3+v//9T3qse/fuNS4PFX4R1mq1ol6vF+fOnXtFuy1btohRUVFS265du4oWi6Vel1tTb4gpU6ZIj7/22ms1vvbevXtL7b/77rures7LX6tOpxObNm3q1Cuh3MaNG53+dm+88UaV2e666y6pXVXrbt++fWK7du2k5y1v7609ud21bkRRFL/77jupbVBQkPjNN99Uut2sW7fOafuaNm1apct77733xFmzZokXL16s8jk3bdokrW8A4pw5c6rNWPG1q9VqMTg4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oz///HOp/dChQ8WQkBBp+uDBgzXO74l16KnX/eijj0pt1Gq1+Pnnn4t2u92pzbFjx8TevXtL7YKCgqpdj+58f3XnvlobV7O+PbEuXSEIgjhlyhRpmUqlUlywYEGdljlr1iyxd+/e4g8//CAWFBRU2sZoNIqffPKJaDAYpOcOCQkRs7Oza1z+1KlTpXn8/f3FX3755Yo2GzZsEJs2bSq169u3rygIQp1eVzlPvMe6+9gjIyNDatuqVasa269fv15qP2jQoCrbufszy93HU+7c533hPVAUPfOZcjXfXVxV189QUXT/dir3cYi7t7PabmO1cejQIWnZHTt2dGmemJgYaZ6q/k5Evk4hig34/CgiQo8ePaRfbadMmYLZs2fXehmDBg3Cpk2bAACTJ092Gv6k4q/806dPl351b9++PZKSkqDRaHDw4EGnMcsCAgKwYcOGasee9MRyY2NjpTG1MzIyEBsbW+Nrf//9951+qQccp6eNHTu2xnldfc6Kr9WVt9zBgwdj48aNAID169c7DU9SLjc3F0lJSTh58qR0X3mvDa1Wi/T0dGzfvh2iKOKWW27BxYsXpWVu3Lixzqcau/K65Vo35V577TX897//laZVKhUSExMRHx+PgIAAlJSU4OzZs0hOTkZhYaHUrri42Okq7BcuXECXLl2cxjXv0aMHOnXqBIVCgX379uHQoUMAgOuvvx7NmjXDnDlzAACzZs2qssdbbV/71fDEfubO9bFhwwanU9YjIiKQmJiIiIgIqNVqnD9/Hnv37nUaB3PAgAHYsGGD02nD5dz1Ny+Xn5+Pfv364ciRI9J9bdq0Qb9+/aDT6XDo0CHs2rULoihiwoQJyMvLc3n7rImntrvHHnsMX331ldM66t27N+Li4qDX63Hx4kXs379futjSb7/9hnHjxl2xnDVr1uC6666TppOSktCjRw/4+flJ9z366KNo27atNF3b9+jc3FxERkZecRpy9+7dsW/fvmrnBTyzDj31usvKyjB48GCnfbFly5a49tprERAQgBMnTmDTpk1Szzi1Wo0FCxbglltuqfL1u/P91d37qquuZn17Yl264ssvv8Tjjz8uTbdv394pe00qnklTbvbs2dKZZWq1GvHx8YiPj0doaCjsdjuysrKwfft2p3G4DQYDVq1a5dLnvNlsxogRI7B582bpvo4dO6J3795QqVRITU2VLpwJAC1atMDOnTsRHR3t8uuqjifeY9197HHq1Clp/PJWrVo5XYiuMhX3lUGDBmHDhg1VtnXnZ5a7j6fcuc/7wnsg4JnPlKv57uKqun6GlnP3sZWcxyHu3s48eSw/b9486YzrO+64o8YhKi9duiT1bg8LC/OZaxgQ1ZospXUicovU1FSnX5DXrFlzVcuZOXOmU0+eir+847JfqF999VWnnt+X/4uMjBS3bNlS43N6YrlX0xviwoULTj2DWrRoIVqtVpfmdfU5L3+tNXG1t/Lp06fFxMTEKtcZAHHs2LFiUVGReM0110j37d+/3+XXVxVv78ld7ueff5Z61Ljyr0+fPqLJZLpiOdu2bRObNGlS7bzjxo0TCwoKnHryeVNPblF03/7rrvWxY8cOUa1Wu/z3ueWWW8SioqJqs7nrb14uKytL7NWrV7XLGDNmjFhUVFTr7bO+1vPlpk+fLgYFBdW4bhQKRZU9qERRFCdNmlTt/Jevg6t5j77pppuuWO6HH37o0ryi6Jl16KnXXVxcLE6cOLHGv0uLFi3EFStW1Pjaa/seU93264l91VW1Xd+i6P516YrXX3/d5fVT2b/KXN6L0pX3s8OHD9cqd0FBQY3rGICYlJQknjlzxh2ryom732MbSk/ucu76zHLn/i6K7t3nfeE9sJy7P1M82ZNbFOv+GVrO3cdWch2HiKJ7t7PabmO18dxzz0nLfv/992tsv3btWqn9sGHD3J6HqKFgkZuoAXv22WedPogvP93KVZcuXXIazqLigVhlH97bt28X7733XrFdu3ain5+fGBwcLPbs2VP83//+V+XptJfzxHKv9kBx6NCh0nwvvfSSy/O5+pyeOMguZ7VaxZkzZ4pDhgwRmzZtKmq1WjEmJkYcPXq0+Msvv0inFMfHx7v1ILqhFLlFURRNJpM4e/ZscdKkSWK7du3E4OBgUaVSiUFBQWLHjh3FCRMmiB9//LF45MiRapdz/vx58eWXXxa7dOki+vn5iX5+fmLbtm3FiRMnir///rvUzpuL3KLonv1XFN23Pi5duiQuXLhQfOqpp8QBAwaIkZGRok6nE9VqtRgWFib27t1bfPLJJ8WdO3e6nM1df/NyNptN/P7778Vhw4ZJ+1l0dLR40003iYsWLZL2M3cXuUXR/dtdudzcXPGDDz4QR4wYIUZFRYk6nU7U6XRiVFSUOHz4cPG///2vePTo0WqXIQiCOG/ePPGmm24SW7Zs6XTKemXr4Greo3/++WenZapUKpeGYajI3evQ069727Zt4qOPPip27NhRDA4OFrVarRgZGSled9114qeffiqWlJS49Lrd/f7qiX3VFbVd3xW5a126whNFbpPJJG7dulV8//33xZtvvllMTEwUW7ZsKRoMBlGn04nNmjUTk5KSxKlTp4qbN2+uU/6NGzeK999/v9ihQwcxICBANBgMYmxsrHj77beLv/76q9uGKKmMO99jG1qRWxTd85nlieMpd+3zvvIeWM6dnymeLnK74zO0nLuPreQ4DqnIHduZJ4/lhw0bJi3blY5s77//vtT+2WefdXseooaCw5UQUbU8dRpWfQzV4IrS0lJERESgpKQECoUCR48eRbt27WTL4wllZWUIDg6GzWaDv78/ioqK6nT6OBERERERERGRN2GVg4gatZ9//hklJSUAHGPx+VqBGwB+/fVX2Gw2AI6xA1ngJiIiIiIiIiJfwkoHETVaoijis88+k6YfeeQRGdN4Rn5+Pl555RVp+o477pAxDRERERERERGR+7HITUSN1ueff47k5GQAjqubjx8/Xt5AtXTbbbdh8eLFMJlMlT6+detW9O/fX7pqe1RUFO688876jEhERERERERE5HFquQMQEdWXXbt2Yf78+bBYLEhNTcXWrVulx958801oNBoZ09Xezp07sXDhQgQEBKB79+5o3bo1DAYD8vPzsW/fPhw/flxqq9FoMGvWLAQGBsqYmIiIiIiIiIjI/XjhSSKqli9deHL27Nm49957r7j/1ltvxcKFC+slgzvFxsZKvbSr06JFC/z4448YPnx4PaQiIiIiIiIiIqpf7MlNRI2SXq9HXFwc7r33Xjz55JNyx7kq69evx2+//YbNmzfjxIkTyM3NRV5eHjQaDZo0aYLu3btj5MiRmDx5MgwGg9xxiYiIiIiIiIg8otH15BYEAdnZ2QgMDHTqSUpERERERERERERE3kMURRQXFyMyMhJKZdWXl2x0Pbmzs7MRHR0tdwwiIiIiIiIiIiIickFmZiZatmxZ5eONrshdftG1zMxMBAUFyZyGiIiIiIiIiIiIiCpTVFSE6OhoqaZblUZX5C4foiQoKIhFbiIiIiIiIiIiIiIvV9Ow01UPZEJERERERERERERE5OVY5CYiIiIiIiIiIiKiBotF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/tS+ffta6/XynwkTJsiFhYW17sdut8v33HPPFfdx7733yna7veneHFEzMG3atDrVcOVPbZxVw3l5eXJCQkKt+9DpdPKSJUuc/c9A5JEaWt+bNm2q0+u8vLzkxYsXXzVPenq63Llz51r34+vrK2/YsKEx/imIPE59ahuA3L59+1r3xWM4ketxRo3zOO76eCV3M3Dq1Cn85z//wffff4+srCxotVpERkbitttuw8MPPwwvLy+lIxLRn7Zs2YItW7Zgx44dOHHiBPLz81FcXAwfHx+Eh4dj4MCBmDZtGgYMGFCn/f3www/48MMPsWfPHuTn5yMwMBAJCQmYNWsWr/ggagTTp0/HJ598Uuftr/YxzBk1bLPZsGTJEqxYsQJHjx5FWVkZQkJCcP311+Oxxx5Dt27d6pyXqDlraH2XlJRg/fr12LFjB5KSknD27Fnk5+fDZrOhVatW6NatG66//nrMmDHDcWXY1ZSVleHdd9/F6tWrkZGRAYvFgvDwcNx000147LHH0L59+3q9R6Lmqr7z07Rv3x4nT5684jY8hhO5DmfUOI/jro9NbiIiIiIiIiIiIiJyW6LSAYiIiIiIiIiIiIiIrhWb3ERERERERERERETkttjkJiIiIiIiIiIiIiK3xSY3EREREREREREREbktNrmJiIiIiIiIiIiIyG2xyU1EREREREREREREbotNbiIiIiIiIiIiIiJyW2xyExEREREREREREZHbYpObiIiIiIiIiIiIiNwWm9xERERERERERERE5LbY5CYiIiIiIiIiIiIit8UmNxERERERERERERG5LTa5iYiIiIiIiIiIiMhtsclNRERERERERERERG7r/wESMGuEljGIzQAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABbkAAAFFCAYAAADB3eDIAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAADRSElEQVR4nOzdd3wUZf4H8M/2Td00AukJCaH3EnovVpqAHbCLnuXUU7k7z/N3nuXUE0/uFBsIqAgWVEBEpPfea0J6SE82dbPZ3fn9sWbIQpLdhN3MbvJ5v155vXZmn5n57mTqd555HpkgCAKIiIiIiIiIiIiIiDyQXOoAiIiIiIiIiIiIiIhaikluIiIiIiIiIiIiIvJYTHITERERERERERERkcdikpuIiIiIiIiIiIiIPBaT3ERERERERERERETksZjkJiIiIiIiIiIiIiKPxSQ3EREREREREREREXksJrmJiIiIiIiIiIiIyGMxyU1EREREREREREREHotJbiIiIiIiIiIiIiLyWExyExEREREREREREZHHYpKbiNqs2NhYyGQyyGQypKWltdllEtVXt/3JZDKpQ2nzxo4dK67rbdu2SR2O22nPx8P2/NuJnMWRYyz3NffD/0nTuH7IESaTCV5eXpDJZFCpVDAYDFKHROQRmOQmamfuuecemyTYm2++KXVI1AbUvxFt6M/Pzw/R0dG44YYb8NprryE7O9tt4v373//eonmkpaXZ/Mbm3qg4IwYiIpJWWloaPv74Y9xzzz3o27cvAgMDoVKpEBQUhD59+uCRRx7B9u3bmzXPZcuWNXlObejvwQcfbHbsR44cwYsvvohBgwYhLCwMGo0G4eHhGDBgAO6//36sWLECubm5zZ4vERFdn7Nnz4qJ7W7dukGr1UocEZFnYJKbqB0pLy/H999/bzPu888/lygaak8qKiqQmZmJX375BX/5y18QFxeHV155BYIgSB0aETmgvdY8a6+/WyqetL6PHj2KpKQkxMXF4eGHH8YXX3yBEydOoLS0FCaTCSUlJTh58iQ++ugjjB07FuPGjUNGRobUYQMA8vPzcc8992DgwIF48803cfjwYeTm5sJoNOLy5cs4evQoli5dirlz5+LVV1+VOlwiIo86PzjD0aNHxc/9+vWTLhAiD6OUOgAiaj1r1qxBVVWVzbizZ8/i4MGDGDx4sERRUVszePBg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uSdMmCDO15GKam+99ZZY/tlnn3VqLESejM2VEFGzuOoVLVfNt7kqKyvRqVMnVFRUQCaT4cKFC0hISJAsHleoqqqCTqeDyWSCj48PysrKruv1ciIiIiIiIiIiKTGrQURUz9dff42KigoA1rb62lqCGwC+++47mEwmANa2BZngJiIiIiIiIiJPxswGEdHvBEHA+++/Lw4/+uijEkbjGiUlJfjrX/8qDt91110SRkNEREREREREdP2Y5CYi+t3ixYtx7NgxANaez2fMmCFtQM10++2345tvvoHBYGjw+927d2PEiBFij+4RERG4++67WzNEIiIiIiIiIiKnU0odABGRVA4cOIAvv/wSRqMRJ06cwO7du8Xv/u///g8qlUrC6Jpv//79WL16NXx9fdG/f3/ExcXBy8sLJSUlOHLkCJKTk8WyKpUKS5cuhZ+fn4QRExERERERERFdP3Y8SUTN0pY6nly2bBnuu+++a8bPnj0bq1evbpUYnCk2Nlaspd2UsLAwLF++HBMnTmyFqIiIiIiIiIiIXIs1uYmIAGi1WiQmJuK+++7DE088IXU4LbJ161Z8//332LlzJ1JSUlBYWIiioiKoVCqEhISgf//+uOGGGzB37lx4eXlJHS4RERERERERkVO0u5rcFosFOTk58PPzs6k5SkRERERERERERETuQxAElJeXIzw8HHJ5491Ltrua3Dk5OYiKipI6DCIiIiIiIiIiIiJyQGZmJiIjIxv9vt0lues6WcvMzIS/v7/E0RARERERERERERFRQ8rKyhAVFSXmdBvT7pLcdU2U+Pv7M8lNRERERERERERE5ObsNTvdeEMmRERERERERERERERujkluIiIiIiIiIiIiIvJYTHITERERERERERERkcdikpuIiIiIiIiIiIiIPBaT3ERERERERERERETksZjkJiIiIiIiIiIiIiKPpZQ6ACIioutlqK5EQVYyyosuw1RdAVOtAWkhY2GotcBksUCrVCC4JgOdkYO48A6A2g/QRQA+oYCcz3uJiMh18soMKK40oqy6FqXVtdBX16LWbIFCJoNCfuUvLsQHfSIDpA6XiIjaCUEQkF5UhYKKGhRV1MBQa4FFEGCyCLBYBJgFAV4qBQK8VUjs6IfIQG+pQyZqEpPcRETkUYRaA2T5p4GCC4A+EyjNQPqlS6g2msUycgA/hybAIlOI45Iq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3pxIL7Bo0aJOteHDf+3pqjZcXl5uTpo0qd1jBAcHm88880xX/2cQ6ZHOtH2vWLGiU/uFhYWZf/vb3zrMk5WVZQ4dOrTd40RFRZlvvvlmd/ynEOlxTqVtA2Zqamq7x9I5XMT3dEUb13nc96kndy9w4MAB/vjHP/L2229z8OBBgoKCSE9P56qrruJ73/seYWFhVkcUkUNWrVrFqlWrWL9+Pbm5uVRUVFBXV0dERAQpKSlMnTqVRYsWMWXKlE4d75133uHpp59m06ZNVFRUEBcXx6RJk7j99tvV40OkG9x444288MILnd6+o8uwrmjDTqeTZ555hpdeeondu3fT2NhIYmIis2fP5vvf/z4jR47sdF6R3uxM23d9fT1vvPEG69evZ/PmzRQXF1NRUYHT6aRPnz6MHDmS2bNnc8stt3h7hnWksbGRv/zlLyxdupTs7Gza2tpISUnhsssu4/vf/z6pqamn9B5FeqtTnZ8mNTWV/fv3n3QbncNFfEdXtHGdx32fitwiIiIiIiIiIiIi4rdsVgcQERERERERERERETldKnKLiIiIiIiIiIiIiN9SkVtERERERERERERE/JaK3CIiIiIiIiIiIiLit1TkFhERERERERERERG/pSK3iIiIiIiIiIiIiPgtFblFRERERERERERExG+pyC0iIiIiIiIiIiIifktFbhERERERERERERHxWypyi4iIiIiIiIiIiIjfUpFbRERERERERERERPyWitwiIiIiIiIiIiIi4rdU5BYRERERERERERERv6Uit4iIiIiIiIiIiIj4rf8H6deaCVBgSMEAAAAASUVORK5CYII=", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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cccddwDQp08fRowYgb+/PwcOHGDt2rUoikJ+fj4XXngh+/fvJzQ0tN755OfnM23aNA4fPuwcl5yczOjRozEajezfv5+NGzfy9ddfc+ONN7Y6buE5ntres7KyUBQFjUZDnz596NOnD5GRkRgMBvLz89m+fTtpaWkAfPzxx5SUlPDdd9812Kna4sWLue2225zDNTVR4uLi0Ov1FBcXc+jQIfbs2dNkm/733XcfL774onM4KiqKsWPHEhMTg9lsZvv27ezZswdFUXjnnXfIzc3l+++/R6ut/+G0oqIipk2bxv79+53jkpKSGDt2LEajkb1797Jp0ya++uqrBufRUp5ezzXuueceXnrpJeewTqdj5MiR9O7dG5PJxOnTp9mxY4eztp3ZbAYc/5eaWl7vvvuuswO6+fPn11sLtL72iBtz9dVX88gjj2C321m2bBmnT592NnXVkB9++IHCwkLAsU2PHTvW5XNPrUNvf3eAiooKpk2bxqZNm5zjYmNjmThxIkFBQRw5coRff/0Vm83G8ePHufDCC/noo4+49NJL3Zq/J84BntxXG9Pa9e3tdekpu3fvdr6Pj493a5qioiI+++wz9u7dS3FxMSEhIcTGxjJ27FgGDhzoVueVe/bscT61ExoaSnJyMlarlffee4/333+fvXv3UlhYSFRUFIMGDeLCCy/kxhtvxGg0tuyLNvF91DrG1nj99dd56KGHAEdt2CFDhqDT6di4cSP79u0D4Mcff+See+7h9ddf58477+SNN95Aq9UycuRI+vbti91uZ82aNc5OPD/++GMGDx7Mww8/3OiyPX3OqtGe9vca3txvPXUN7K3zsid44xxaw9PbqZrXId7czp555hnndXZycjKjRo0iICCAjIwMDAZDk9M3pHZNbn9/f0aPHs2pU6cIDQ1l4sSJxMTEcPz4cVasWOG8f/zss8+YN28eV199dYuXK0SnpFJyXQjhgyoqKlxqBn333Xcun//97393fjZ06NAm50etX6P9/PwUk8mkvP/++2eV+/XXX5Xu3bs7yw4cOFCxWCxtOt+mamEsWLDA+flf/vKXJr/7yJEjneXffvvtFi2z7nc1Go1Kly5dnLUhalu1apXL/+6JJ55oMLZrr73WWa6hdbdt2zalV69ezuXWlJea3G0TR23e2N7/9a9/KQsXLlROnz7d4HJXr17t3AYA5b333muw7JAhQ5zlfve73zVY86m0tFT59NNPlYceeqjez99++23nfEJCQpQ333yz3u+wfPlyl+/69NNPNxjbjTfe6LL+6tsfN27c6Nwf/fz8PLa9e3o9K4qj5lTtbeLyyy9XMjMz6y27e/du5Z577lF+/PHHsz5rSc0zd6aZOnWqs8xLL73U5DwvvvjiRvcZb6xDb3332jVDdTqd8sILLyg2m82lzKFDh5Thw4e7bOeNxeDpc4Cn9tXmaMn69sa69LRjx4651Pb77LPPGixbuyZ3Y6/evXsrb731VpO19958803nNAMGDFAyMzOVUaNGNTrvhIQEZdOmTZ5eDV45xrbk+igmJqbe+T377LPOcnq9Xvn3v/+tAErfvn2VHTt2uJS1Wq3Kfffd5ywfFBSklJWVNfjdPX3O8uX9XY1joDeugX3lnNIQT59DFcXz26ma1yGK4t3tTK/XK6GhocpXX311VrmaJ0FaIi4uzrkMk8mk+Pn5KU8//bRSWVnpUi47O1vp06ePs+ycOXNavEwhOitJcgshnD744APnSbVLly5KdXW1y+cZGRkuj/jt2rWr0fnVvcH6+OOPGyy7Z88el2RqQ4lhb823qQuttWvXutwo1r2Yqm3Xrl3OssHBwQ3eILXkJm7nzp0NLvfll192lk1NTa23zL59+1zm+dFHHzU4v4yMDJebhsZuSJujdiJ45MiRyl133eX2Kz8/v8l5duQktyf3I3ekp6crJpNJAZRRo0bVW6a0tNS5vPj4+BY/WllSUqKEhYU5kyAbNmxotPy+ffucsUVGRtZ7837w4EGXY9aiRYsanN/Bgwddmhjy1PbuDnfWs6IoSkFBgRIcHOyM7/bbb2/xMr2V6H3nnXecZcaMGdPo/IqKily219Y0ueDuOlQU73z3I0eOuDQj9PLLLzc4r4KCAiUxMdFZ9oYbbmiwrCfPAZ7aV5uruevbW+vS0y655BKX64LGEiDuJrlrXhdccEGjydXaj74PGDBA6d+/v8v//rrrrlOuv/76s5olCwgIULZs2eKxdeCtY2xzr49MJpOyZ8+eBpddt1mA6Oho5eTJk/WWtVqtLkmmTz75pN5y3jhn+fL+rsYx0NPXwM3h7XNKQzx9DvX0dqr2dYi3tzOtVqusWrWqJV+nQXl5eWdty8uXL2+w/OLFi51lU1JSPBqLEJ2BJLmFEE4zZ850nlTvueeeesvUTuLdf//9jc6v9gl94sSJTS6/dtuWjV3YeWO+7lxo1b6JXLp0aYPLu/fee53lbrnllgbLNfcm7u67725wXoriuJDV6/UKONrUq2lPvbYHHnjAOb9x48Y1Oj9FUZQnnnjCrRvS5qi9DTX31dB66ixJbk/uR+4699xzG92mcnJynMsbMmRIi5fzwgsvOOdz3333uTXNbbfd5pzmiy++OOvzBx980Pl5UzepiqIojz76qMe3d3c1tZ4VRVGeeuopZ2w9evRoVa0ibyW5i4uLXdp/PXLkSIPzq10btS221Rre+O4PPfSQy37QVELpk08+cbnhLSoqqrecJ88BntpXm6u569tb69KTFi1a5PK/+eCDDxotv3DhQiUhIUG5//77lR9++EHJyspSzGazUl5erhw8eFD573//q6SmprrM88ILL2zwB/V77rnnrPNjQECA8umnn55Vdvny5UpUVJSzXHJyslvt7brDW8fY5l4f3XvvvY0ut3ZNVkB54YUXGi3/5z//uclrXW+cs3x5f1fjGOjpa+Dm8uY5pSGePod6ejtV+zrE29vZ5Zdf3pKv0qiffvrJZRn//e9/Gy1/+PBhl+O1EKJ5vNMwmhCi3cnJyeHnn392Dl933XX1lps/f77z/QcffIDNZnNr/rWna8iCBQuc7zdv3uxWj9jemm99brnlFuf7t99+u94yFouF999/3zl88803t2hZ9bnssssa/Tw4OJjk5GQAFEVx6bW8Ru1eyq+99toml+lOGdF2vLG9Z2Zm8vnnn/OPf/yDBx98kLvvvpvf/e53zldN+6SKorBz586zpo+KisJkMgGOdmLXrl3bnK/k9MMPPzjfu9v+4LRp05zvf/3117M+X7FihfN9Q8e02mqvO09r7XoGWLp0qfP9Lbfc4pX2dVsrJCSEOXPmOIc/+OCDBsvW/sydY40n1qG3LF++3Pn++uuvb7L91osuuoiIiAgAqqqqWL9+fZPLaO05wFP7qre1xbpsjS1btnD77bc7h6+66qomj1nz5s0jPT2dZ599lnPPPZe4uDiMRiMBAQGkpKRwxx13sHPnTm644QbnNN988w0ffvhhvfOr77j+/vvv17uNTJ06lW+++cbZtm5aWlqj+2Vz+Moxtqm2dgcOHNis8gMGDHC+rzmu1OWNc1Zt7W1/9/Z+64lr4Lp88Zzi6XOop7dTta9DvL2dXXnlla0Pso4dO3Y436emprqcP+pTXFzsfB8VFeXxeITo6KTjSSEE4Lg5stvtgOMEPGLEiHrLXXrppdx1112YzWZOnDjBjz/+yHnnndfk/BvqCKW2gQMHEhQURFlZGTabjV27djU5nbfmW5/58+fz8MMPYzab+frrr8nPzycyMtKlzOLFi8nPz3cud9SoUc1eTkPq3qTVp3Y8NZ1S1VAUhV27djmHR48e3eT8evbsSVRUFHl5ec2I1H2PP/44f/3rX70y747Ik9v7+vXrefjhh1mzZg2Kori1/Pq2Az8/P+bNm8fHH3+M1Wpl2rRpXHHFFVx66aVMmjSJsLAwt+Zd+8bjjTfecOkEtyHZ2dnO91lZWS6f1b0pdWfdpaSkEBERQUFBgTshu8VT6xlg48aNzvdTp071SHzecO211/Lpp58Cjpvwv/zlL2eVyc7OZtWqVQAYDAauuOKKBufnyXXoDYqiuNzEjhs3rslpDAYDo0aNciYMtm3bxuzZsxudprXnAE/tq97UVuuypdLT05kzZ46zE7VBgwbx2muvNTmdO+vWz8+Pt956iyNHjrBmzRoAnn766XqTVzXJyxpjx47loosuanDeY8eO5eKLL+bzzz8H4JNPPnFJqLeErxxjwTUpXZ/w8HDn+9DQ0CY7lq1JisHZ+1ENT5+z6mpP+3tb7LetXR+1+fo5xZPnUE9vp2peh7TFdjZ8+PBWx1lX7U4nb7rppiYT87U78U1JSfF4PEJ0dJLkFkIAuFz0NFYbJyQkhLlz5/LJJ584p3MnyZ2QkNBkGY1GQ1xcHAcOHADg9OnTqs23PuHh4Vx66aW8//77WCwW3nvvPe677z6XMrVreHuyFjfQYE/xtdXu+bu6utrls+LiYiwWi3M4Pj7ereXGxcW16cV9R7Vx40bee++9Rstcd911jf744Knt/Z133uHmm292++auRmlpab3jn3/+ebZu3crhw4ed+8Z7772HVqulf//+TJw4kRkzZnDuuefWW+unrKzMZd5vvfVWs+ICKCwsdBmuu727s+5qynkqAePJ9VxSUkJlZaVzuGfPnq2Oz1tmz57t/HHs0KFDbN68mZEjR7qU+fDDD53rpaZ8fTy9rXpDcXGxy/G2R48ebk2XmJjofO/OMba15wBo/b7qbW21Llvi+PHjzJgxgxMnTgCOfXDp0qWEhIR4bBlarZbHH3+c6dOnA44auNnZ2cTFxbmUCwoKchluLMFdu0xNknvdunVnfd7cc5QvHGNrNLVv6PVnbnnd2Y9ql69vP/LGOauu9rS/t8V+64n1Ae3jnOKpc6int1O1r0PaYjvr0qVLi2JrTO0k94wZM5osX/vHQ3d+3BFCuJLmSoQQbN682fmrsUaj4Zprrmm0fO0k+DfffENRUVGTywgICHArlsDAQOd7dy4ovTXfhtx6663O93WbLMnMzHQ2+WI0Gj3e1EdTv/w3payszGXY3XVX92a6I6t9Ywu43MC7o6qqyvm+9s0WOGpmvPLKK42+atfeqI8ntvd9+/Zx2223OW+O+vfvz4svvsimTZs4efIklZWVKI4+O1AUxeXx8pqnPeqKiYlhy5YtPPbYY3Tt2tWl/O7du/nvf//LRRddRLdu3XjqqafOauao9qOZLWW1Wl2GW7q91153reHp9Vz3/+jL+2XdWmW1m3Cqb1xDP6x6Y1v1hrrbmrvbUHPPS609B0Dr91Vva6t12Vz5+fnMmDGDtLQ0ALp168bPP/9Mt27dPL6sSZMmuZw/6jsv1H2KrF+/fk3Ot2/fvs73paWlZ62n5p6j1D7G1tacfcMT+5E3zll1taf9vS32W0+sj/ZyTvHUOdTT26na1yFtsZ35+/s3P7BGVFZWcujQIcDxBE5TT52Aa1J86NChHo1HiM5AktxCCJda3IqikJiYiEajafB1wQUXOMubzWZnre7GVFRUuBVL7XYmg4ODVZtvQyZOnEhqairgqGG1adMm52cLFy50XgRffPHFLo+7+oK6F6MtWXcdXd2aQnUvqJtSu7w3Hv33xPb+wgsvOG9aZs2axbZt27jnnnsYOXIk0dHRZz0G727CKCQkhL/97W/k5OSwYcMGnnnmGebNm+dSu6iwsJBHHnmESy65xKUWVd0blYKCApcbTXdetdubB/W3d0+v57r/x+Zum22t9o98n3zyiUvyZPfu3ezevRtw7HO12x+tzVvbqqfV3dbc3YY8dV5qrtbsq97mi+uypKSEWbNmsXfvXsDRRurPP/9MUlKSR5dTw2AwuPwv6qt5WHMdUsOdZFPd9dLa/UXtY6yavHHO8pa22N99cb+tT3s5p4BnzqGe3k7Vvg5pL9tZbbt27XL+7wYOHIhOp2tymtpNskiSW4jmkyS3EJ2cxWLho48+atU83GnfLTMzs8kyiqKQk5PjHHansw1vzbcx9XVAqSgKCxcudI73dFMlnhAaGupSO6x2m3uNcbdcRxAcHOxyk9NQh1P1URSFjIwM53DdRx6vv/76Jm8mrr/++kaX4Ynt/ZdffnG+f/LJJ/Hz82t0fu503lSbTqdj9OjRPPDAA3z11VecPHmSNWvWcOGFFzrLfP3113zxxRfO4bCwMJdHpWuaA2iN0NBQl+/mzrqDpttJdZen13NISIhLDaPmbJtqGDNmDL169QLg5MmT/PTTT87PatdAu/TSS89KLNTw9rbqKXWPre5ua7WPF2p0LtWSfdXbfG1dlpeXc95557F161ZnfEuXLnWr5nRrl1ujvtqKdWsDupNsqpuwq/ujbnPPUWofY9XkjXOWt3lzf/e1/bYh7eWcAp45h3p6O1X7OqS9bGe1NbdWdlZWlrNvp/j4+LOe2hFCNE2S3EJ0ct99952zbUS9Xs/o0aPdetVuG279+vXOR7EasmHDhiZj2bNnj/MmTKfTMXjw4Can8dZ8G7NgwQLnRePHH39MRUUFP//8s/NiuGfPnj7ZKZxGo2HQoEHO4dqdxzQkIyOjxW2Yt1fDhg1zvt+yZYvb0x04cMAl0eCNzms8sb3n5uY63zfV1l9xcbFLZ6UtodVqmTBhAosXL3Zpi/Cbb75xKVe7k9a1a9e2apng2N5rf3d31t3hw4edNxet5Y31XLu99uXLl7c8ODzz6HdTajd99cEHHwCOH2Fq/7DaWLNO3tpWPf3dNRoNQ4YMcQ7X195xXVarlc2bNzuHax931OLuvtpczW1KwlfWpdls5sILL3QejwICAvj++++9cmyv7ejRoy6d5sXGxp5VJikpyaUm+b59+5qcb+2mRiIiIlrdbIjax1i1efqc1dY8ub/70n7bmLa+/mmt1p5DwfPbqZrXIe1lO6utubWypakSIVpPktxCdHK1a2Gfe+65bNiwwa3Xpk2bXGoSvfvuu40up7725OqqPY+RI0e6dQPmrfk2JjIykosvvhhwPMb82WefubTPfeONN7ZJAqklpkyZ4nxfc8HcGHfWb0dT+weKzz77zO02Kj/88EPn+7i4OJKTkz0emye2d632zKm/qcfL33rrrQY7b2oujUbj8kjtyZMnXT6v3QzSq6++6pEmEmr/L5u77lrLG+v53HPPdb5/8803XdqAb67aNb889T+uq/bN9+LFi6moqGDVqlXOmpzx8fFMnjy5wem9ta1647tPmzbN+f5///tfk9vv4sWLnck+k8nE2LFjPRKHJzS1rzZXc9e3L6zL6upqLrnkEmcSx2g08vXXXzN+/PhWz7sp77zzjvN9aGioS1KntprrEHCsg6bULjNp0qSWhudCzWOs2rxxzlKDp/Z3X9hvm6LW9U9LtfYcCp7fTtW+DmkP21ltzU1aS5JbiNaTJLcQndjp06dZsmSJc7i5HSXWLv/ee+81eqGxcuVKPv/88wY/379/Py+//LJz2N3mPrw136bU7oDyhRdecN486nQ6brjhBo8swxtuvPFG5/tff/2Vzz77rMGyWVlZPPvss20Rlk+59dZbnW3mpaWl8cILLzQ5TVpaGs8//7xz+M477/RKbJ7Y3nv27Ol831iNrcOHD/PEE080GVNpaanbHXTWfkw9Ojra5bPbbrvN2Y75tm3b3Fp2jby8vHp/jLjpppuc7zds2NBoEubIkSMu/8PW8vR6BkdTSTVtUh47doz77ruvxfHVfgS2dvM2ntSrVy/GjBkDOJpTWLx4scuPa9dcc02jPwh6Yx2Cd777Lbfc4kygbNu2jTfeeKPBskVFRTz44IPO4auuuuqspiO8wVP7anM1d32rvS5tNhtXX301P/zwA+B4yu3TTz9l+vTpLZpfc9qtXbduHc8995xz+MorrzyrQ+Qad9xxh/PR/XXr1jW6j2zatIkvv/zSOdxU01juUvMYqzZvnLM8qa33d7X3W3d465ziLa09h4Lnt1O1r0Paw3ZWw2azOdtO12q1TT49AJLkFsIjFCFEp/XCCy8ogAIowcHBSkVFRbOmP3bsmKLRaJzz+OWXX1w+rxkPKH5+foq/v7/y4YcfnjWfdevWKfHx8c6y/fv3V6qqqhpcrjfm26NHD2e59PR0t75/7969XWIBlAsuuMCtad1dZu15u2Py5MnO8itWrKi3zNVXX+0s09C627Fjh5KSkqIAitFobHKezVE7xscff7zV8/PGPO+9917n/DQajfLYY48pJSUl9Zb97rvvlNjYWGf5xMREpaioqNUx1PD09v7II484y0RERChLly49q8zPP//s/E6BgYHO8gsXLjyr7IoVK5Ru3bopjz/+uLJ37956v4PValU+/vhjxWQyOef1wQcfnFVu4cKFLt93/vz5yrFjx+qdp91uV3799VfljjvuUPz9/ZXS0tJ6y11//fXO+RmNRmXRokVnldm8ebOSmJjoXMee2N49vZ5rvPLKKy7r6PLLL1eysrLqLbtnzx7lnnvuUX788cezPrvtttuc87jzzjvd+k4tOU6+/PLLzmmmTZumhIWFOYf37NnT6LTeWofe+u533HGHs4xer1defvllxWazuZQ5fPiwMnLkSGe5kJCQRtelJ88BntxXm6Ml69sb69IddrtdWbBggXOeWq1W+eijj1o1z4ULFyojR45U/ve//zV4bqisrFRefPFFxd/f37nssLAwJTc3t9F51z5XBQYGKl988cVZZVauXKl06dLFWW7MmDGK3W5v1XeqzRvHWE9fH6WnpzvL9ujRo8nyK1ascJafPHlyg+U8fc7y5f1djWOgp6+BvXVOacm50V2tOYfW8PR2quZ1iKKov525a+/evc759u3b161pEhISnNM09D8SQjROoyjt9NkqIUSrDRs2zPmL8YIFC1i0aFGz5zF58mRWr14NwPz5812aP6ldu+CFF15w/trfu3dvRo8ejcFgYM+ePS5tpQUFBbFy5cpG27z0xnwTExOdbWqnp6eTmJjY5Hd/5plnXGoIgOOxuLlz5zY5rbvLrP1d3TlcT5kyhVWrVgGwYsUKl+ZJauTl5TF69GiOHj3qHFdTW8TPz48DBw6wfv16FEXh0ksv5fTp0855rlq1qtWPOdeOceTIkS7tBTYlICCAf/3rX43Os2vXrsTExLg9z//7v/9z6XgJHB2yzp49mxUrVjjH+fv7M2bMGBISEjAajeTl5bFx40aX2idhYWH89NNPjBgxwu3lN8XT2/upU6cYMGCAS1vrw4YNo1+/fmg0GrZt28bevXsBmDVrFtHR0bz33nsALFy48KwagCtXrnR5ZD0mJoYhQ4YQExODXq/n5MmTbN261aUtzIkTJ7Jy5UqXR4dr/OUvf+Fvf/ubc1in0zFkyBBSU1MJCgqirKyM7OxsduzYQXFxsbNcaWmps3ZRbYWFhYwdO5aDBw86x/Xs2ZOxY8diNBrZu3cvmzZtQlEULr74YvLz85vch9zh6fVc25133smrr77qso5GjhxJSkoKJpOJ06dPs337dmdnS1999RXz5s1zmcdPP/3EzJkzncOjR49m2LBhBAQEOMfdcccdLs3utOQ4mZeXR2xs7FmPIg8dOpRt27Y1Oq231qG3vntFRQVTpkxx2Rfj4uKYMGECQUFBpKWlsXr1amfNOL1ez0cffcSll17a4Drw5DnA0/uqu1qyvr2xLt3x3//+l7vuuss53Lt3b5fYm1L7SZoaixYtcj7hpdfrSU1NJTU1lfDwcGw2Gzk5Oaxfv96lHW5/f3+WLl3a5Pm2qqqKGTNmsGbNGue4vn37MnLkSHQ6Hbt27XJ2mgnQrVs3Nm7cSHx8vNvfqSneOMZ6+vooIyPD2YZ5jx49XDqiq0/tfWXy5MmsXLmywbKePGf58v6uxjHQ09fA3jqntOTc6K7WnENr8/S1lVrXIaD+duauDz74wPnU89VXX91kM5EFBQXO2u0REREdpv8CIdqcSsl1IYTKdu3a5fLL9U8//dSi+bzxxhsutYhq/+JPnV/G//znP7vU/K77io2NVX799dcml+mN+bakFsapU6dcaiR169ZNqa6udmtad5dZ97s2xZ2a3IriqIU/ZMiQBtcZoMydO1cpKSlRxo0b5xy3fft2t7+fOzE29xUaGurxeTZUO8disSh/+MMfXP7Hjb3GjBmjHDp0qNXrpy5vbO/r1q1ToqKiGv0+8+bNU4qKilxqNda3rjZs2KDo9Xq31/ell17aYK34Gp988olL7fimXqNGjVLMZnOD88vJyVFGjBjR6DwuvPBCpaSkxO19yB2eXM91vfDCC0pISEiT60aj0dRbg0pRFOWqq65qdNq637+ltdUuuOCCs+b93HPPuTWtt9aht757aWmpcvnllzf5f+nWrZvyww8/NPn96+7/TWls+/XGvuqu5q5vRfH8unTH448/7vb6qe9Vn7q1KN05nu3bt8/tmIuKippcv4AyevRoJTMz0yPrqS5PH2PbS03uGp46Z/ny/q7GMdCT66OGN84p3qzJrSitO4fW5ulrKzWuQ2qouZ2564EHHnDO95lnnmmy/M8//+wsf84553g0FiE6E0lyC9FJ3X///S4XAHUf83JXQUGBS3MWtS8C67toWL9+vXLDDTcovXr1UgICApTQ0FBl+PDhyt///ne3m3jwxnxbeoE6bdo053QPP/yw29O5u0xvXODXqK6uVt544w1l6tSpSpcuXRQ/Pz8lISFBmTNnjvLFF184H2dOTU316MV7e0ly18jOzlb++c9/KrNmzVISEhKUwMBAxWAwKNHR0cqwYcOUu++++6ymejzJW/vRyZMnlUceeUQZMGCAEhAQoAQEBCjJycnK5ZdfrnzzzTfOcu7c5BUUFCiffvqpcs899ygTJ05UYmNjFaPRqOj1eiUiIkIZOXKkcvfddysbN250+3ubzWZl0aJFylVXXaX06tVLCQ0NVXQ6nRISEqL07dtXufjii5Xnn39eOXjwoFvzs1qtyjvvvKOcc845zu09Pj5eueCCC5TPPvvMub17MsmtKJ5dz3Xl5eUpzz77rDJjxgyle/fuitFoVIxGo9K9e3dl+vTpyt/+9rdGf3ix2+3KBx98oFxwwQVKXFycyyPr9X3/lh4nP/nkE5f56nS6JpthqM0b69Db333dunXKHXfcofTt21cJDQ1V/Pz8lNjYWGXmzJnKf/7zH6WsrMyt7+7pc4A39lV3NHd91+apdekObyS5zWazsnbtWuWZZ55RLrnkEmXIkCFKXFyc4u/vrxiNRiU6OloZPXq0cu+99ypr1qxpceyrVq1SbrrpJqVPnz5KUFCQ4u/vryQmJipXXnml8uWXX3q0iZL6ePIY296S3IrimXOWL+/vahwDvXUN7OlzireT3K09h9bm6Wurtr4OqUuN7cxd55xzjnO+7lQme+aZZ5zl77//fo/GIkRnIs2VCCG8xluPf3lrvs1VXl5OTEwMZWVlaDQaDh06RK9evVSLxxsqKioIDQ3FarUSGBhISUlJqx5bF0IIIYQQQgghhPA0yVQIIUQLffLJJ5SVlQGOdgA7WoIb4Msvv8RqtQKOdgslwS2EEEIIIYQQQghfI9kKIYRoAUVReOmll5zDt99+u4rReEdhYSGPPfaYc/jqq69WMRohhBBCCCGEEEKI+kmSWwghWuDll19mx44dgKNX9YsuukjdgJrpiiuu4PPPP8dsNtf7+dq1axk/fryzt/ju3btzzTXXtGWIQgghhBBCCCGEEG7Rqx2AEEK0B5s2beLDDz/EYrGwa9cu1q5d6/zs//7v/zAYDCpG13wbN27k008/JSgoiKFDh5KUlIS/vz+FhYVs27aNI0eOOMsaDAYWLlxIcHCwihELIYQQQgghhBBC1E86nhRCeE1H6nhy0aJF3HDDDWeNv+yyy/j000/bJAZPSkxMdNbSbky3bt149913mT59ehtEJYQQQgghhBBCCNF8UpNbCCGayWQykZKSwg033MDdd9+tdjgtsmLFCr766ivWrFlDWloaeXl55OfnYzAYiIqKYujQocyePZv58+fj7++vdrhCCCGEEEIIIYQQDep0Nbntdju5ubkEBwe71AYVQgghhBBCCCGEEEII4TsURaG0tJTY2Fi02oa7l+x0Nblzc3OJj49XOwwhhBBCCCGEEEIIIYQQbsjKyiIuLq7Bzztdkrum47SsrCxCQkJUjkYIIYQQQgghhBBCCCFEfUpKSoiPj3fmdBvS6ZLcNU2UhISESJJbCCGEEEIIIYQQQgghfFxTzU433JCJEEIIIYQQQgghhBBCCOHjJMkthBBCCCGEEEIIIYQQot2SJLcQQgghhBBCCCGEEEKIdkuS3EIIIYQQQgghhBBCCCHaLUlyCyGEEEIIIYQQQgghhGi3JMkthBBCCCGEEEIIIYQQot3Sqx2AEEII0VrmahvHT52iMmsn1soybJZyrOZy7JZKsFejNfijMQYQGRpGUmwX6DYE/MPUDlsIIUQncLLETEG5hZLKaooqqymurKbaZken0aDTnnklRQUyKC5M7XCFEEJ0EoqicCy/gtNlVeSXVWGutmNXFKx2BbtdwaYo+Bt0hAUYSOkaTFx4gNohC9EoSXILIYRoV5RqM5pTeyEwGsLiAXh66QHKTxzl6oKXAdAAhnqm1QX6QWYAzPibM8n96so0Qm359LUdomvKSLol9EajlQedhBBCNI/NrlBWZSXU3/UM9OIvhzlZbG5y+ln9Y1yS3Iqi8MLPh0mODqJP12B6dgnEoJPzkxBCiOYrr7JSZbUTEejnMv6fS/ZjtSlNTn/VqASXJLfVZufLbTn0iAwgqUsgXYKMaDQaj8ctRHNIklsIIYRPU+x2TuWmk7tvPVWZ24goTyOliwkGXe5McncP82djXhcUtGiwNzgvnfa3Cy8/xwVatc3OtsxC+pRvo1/JV5za/h45xnBsXQcRljyShH6jCAgK9fp3FEII0T5ZrHb25Baz7VghO7KK6BEZwB9npbqUCfM3uJXk7hJsdBkurKhmT04xe3KKAdDrNPTsEkT/2BBGJ0WeVV4IIYSooSgKR/PK2ZxewIETpWQXVjA2OYqbJiQ5y2g0GqKCjJxw4xwVFuD6A252YSU/7j3hHI4M8mN4j3CG9wgnuUuQJLyFKiTJLYQQwieVlxZxeOMSqg78hLE8Bw1gAioBq92IvijLWbZ/bCg6rQZb/A0Y/QwYjIEY/IMwmALQ6Y1Yq8qpqizHoK8Gkx38IwDIK6tCURQiraec8zJUFWLIXIU5cxUHV+qoihlOl6Hn07P/KKnhLYQQAptdYUdWIRvTC9idXYzFeubH1Yy8ChRFcbm5H5kYQWJUIKH+BsL8DYT4GzAZdNjsdmx2sNrt2O0QF+7vspz8siqXYatN4dCJUg6dKOWrbTn06hrEmJ6RjEyMIMgot3VCCCEcTWRtOJrPhqP5nCpxPY8cPFFyVvmpfaKx2OxEBRnxN+hcmtHSaqDCYqO4spqeXYJcpkvPL3cZzi+zsGzvSZbtPUlogIGhCeGMS46kZ1SgJLxFm9EoitL0cwkdSElJCaGhoRQXFxMSEtLi+SiKQnV1NXZ7wzUGhXCXVqvFYDDIwV90eoqikHFoFye3LMYvdzNae/VZZaqN4SQNmkBU30nQbVCrl1lltXE6J528w5upPLYVY8GBepfbq2cyQUMuht7TW71MIYQQ7U9ZlZXVh06z/MApCsstZ31uMugY0D2UBeN6EODX+qSzoijklVk4dLKUA78lt/PqJL4BDDot/75isEeWKYQQov2x2xW2Zhby076TpJ0qO+tzjQbiwgPoExPMZcPj0Hug6auyKitHT5eRnlfO4ZNlHDhRSn3pxV7RQTw4O/XME7VCtIC7uVy5EmqmiooKiouLKS0txWazqR2O6EB0Oh3BwcGEhoYSECAdOojOp8RczfM/HSI8ayWTSte5fGYOTcYvaSyxfcfQNS7ZozWqjXodcT16EdejF3AVliozx/ZvpuDwRnRZ69FXlxHgpyOoOh8q8p3T1a2pJ4QQouM6XlzJE9/so9rmWsEl0KhnaEIYw3uE07dbiEfbzNZoNHQJNtIl2Mj4XlEAnC6tYnNGAevS8jhe5Hi8PCUmWBLcQgjRiW3LLOS1lWku4zQaSI0JYUzPSIYmhBHo4Sd+gox6BsWFOfuSKKuysjOriK3HCtmbW+xs5zsswE8S3KLNyNVQM5SWlpKdnY3BYCAsLIzAwEC0Wq0kOUSrKIqC3W6nvLyckpISioqKiIuLIzg4WO3QhPA+RQG7DXR6go16tBoNB01DGF+2DHR+2HpMJGHUHGISerdZSH5GE72HTIQhE7FWWzi8bQVhx3+FyiOQPO23sBWeXXaQ2CAt56UEE96lW5vFJ4QQou3FhJjoEmwkt6gSjQYGdg/jnL7R9O0W0qY3712CjZw3sBvnDoghq6CSDUfz6dXV9RFyRVF4ffVRRiaGMywhXO5VhBCigxuaEE5kkB/5ZRa6h/szLjmK0UkRhNfpZNKbgox6xveKYnyvKMzVNrZkFPLz/pPM6BftUk5RFFYePM3Y5EhMBl2bxSc6B2muxE0VFRUcO3aMkJAQYmNj5WJReIWiKOTm5lJSUkKPHj2kRrfo0PLTthF55Avo2h+GXA3A7uxivtiWzbzupfQbMAQ/o0nlKGupLAT/cAD25BTz/E+HGFG+kjHlK7AkTaPfzBsJDo1QOUghhBCtVVZlZXd2MWOTI13Gr0vLIyOvgul9o4kO8aHzUx3bMgt5ZfkRAHp3DebqUQkkRMo1pRBCtHeKorD1WCG5xWYuHBzr8tmOrCIMOg39uoX4TL6qJt1YO551aXm8vSadUH8DFw6JZWLvLlLTWzRJmivxsOLiYgwGgyS4hVdpNBpiY2OprKykuLhYktyiQyouzOPA9y9jylmPqWsQgcVZkHo+mEIZ0D2EAd37+eZx9rcEN0BhhYUgnYVhFWvRKDaMR3/i4FvrMI68jgET5koHlUII0Q7Z7Ao/7TvJd7tyqbTY6BZqIjEq0Pn5uOQoxiWrGKCbdmYVOd8fPlnK/323lwm9orh4eBwhJoN6gQkhhGixzPwKPtqcyaETpWg0MDQ+jPiIM/mCIfFh6gXXgLr3dIqi8O3OXACKK6t5b/0xlu07yRUj4hnsg/GL9kdqcrtBURQOHz5MWFgY0dHRTU8gRCudOnWKoqIievfu7ZvJPiFawG6zsXvVF1i3f4jOWgmAv0FH7z790I77HYQnqhtgM5WWFHFg+fvojvyI1namAzJzaDIJs+8lNrGPitEJIYRojsz8Ct5Zm05WQYVz3IDuofx+RoqKUbWMoijszC7mk81ZnCoxO8eb/HRcODiWGX27opVac0II0S6UV1n5Yls2qw+dpnb27ryB3bhkeJx6gbXQiWIzX2zLZtuxQpfxo5IiuGp0gvwYK+rlbi5XktxusFgspKWlkZCQQGBgYNMTCNFKZWVlZGVlkZycjJ9f27WjJYS35BzdT9aPL2AqyXCOs+kDMAy7hoGTL27XNZ+L80+y/4dXMOVudI5TNFqqk2cx+PxbMZrkiQwhhPBVFqudb3fmsmTPiVqPVcPY5CguGtqdiDZsz9TTrDY7P+8/xbe7cjFbbM7xvaKDuGlCkk83uSKEEMLRROLCtRkUVZypUBMdYuSKkQkMjgtt1xXijpwq47OtWRw5WeYcF2jUc/XoBEYnRbTr7yY8T5LcDWhJkttsNpOenk5iYiL+/v5ejlAIqKysJCMjg6SkJEwmuQER7Zdit7Pjp/dh58dolDM32Ob4CfQ7705CwiIbmbp9Sdu1jrxVr2GsOOkcF5vQi+hZD0BEkoqRCSGEqM/hk6UsXJfByeIztZ27h/tz/bhEenYJamTK9qXEXM1X23JYc/hMLUA/vZYn5vYnOliuM4UQwteYq218uiWLVQdPO8eZDDrmDI5let9o9Lr2W0GoNkVRWJ+Wz0ebs6iosjrHD4oL486pyRg6yPcUrSdtcnuB/JIk2opsa6IjKKqwsOrrd+iR+ZVzXFVgLF3PuYvEviNUjMw7kgeNIyF1OLt+eg/NvsVEmqCLchoOL4PRt6kdnhBCiN/Y7Qrf7T7ONztynElfnVbDBYNjOW9ATIdJHtQIMRlYMC6R8b0iefvXdE6VVDE4PkwS3EII4YNOlZj590+HOF1a5RzXPzaE68cnteuni+qj0WgY1yuK/t1D+XBjJlsyCgDw99NKglu0iCS5hRBCeMXrq49ytHIgV+tWEWovpDrlAoaffyt6Q8e6OKvN4Gdk+Pk3c3LwVCJ2vIbGXgXD5js/r7TY8PfTqRihEEIIi83OxqP5zgR3zy6BXD8+ie5hHfuJzV7RwTw+pz/f7szl3IHd1A5HCCFEPSIC/TDqHQleP72Wy0fGMyWlS4euCBfqb+COKclsy4zg6+05XDkqQe2QRDslzZW4oaa5Emk6QrQV2eZER5BVUMHfvttHouYEVw6NoueAMWqH1LZs1VBRAMFdAdh6rID31h/j9vHdSY2XToyFEEJN2YUV/OOH/cwe0I0LBnbr9B0x7skp5sipMi4cHNvp14UQQqgtq6CCjzdnsmBsYqfrP0FRlLMS+kdOlRIW4EdUkFGlqITapLkSIYQQbctcAlvecdRcDoggPiKAu6b2Ijl6CEHGTni60RmcCe6CcguL1h1DW5FHwSd/Z8fQSxk89fJ23eGmEEK0F4qiUGW1YzKceZImLjyApy8ZRLDJoGJkviGvrIo3Vh+lvMpKel45t0zq2TnP20IIoYKsggpMBh1dgs8kcOMjAvjjrFQVo1JP3QR3UYWFl5cfwabAzROSGBwfpk5gol2Qu2shhBCtlptxkEPv3o1ybB2seQ6sjh7AB8eHyY0yYNBp6B1hYE7RBwTYSmHLQjZ+8k+qLVVNTyyEEKLFLFY7r606ygs/H6baZnf5TBLcDodOllJhcXT4tSenmP/7di+Z+RUqRyWEEB3f+rR8/v79fv678ggWq73pCTqhz7dmU2q2UlFl5aXlh/lx7wk6WYMUohkkyS18mtlsxmAwoNFoePLJJ9UORwhRjwObfuLE5w9QUXiC3GIzlJ+G8lNqh+VTgk0Gfje9L6HJw53jTJmr2frO7ykuzFMxMiGE6LiKK6t55scDbMko4PDJUt5df0ztkHzSuOQo7p/Zh2CT40fp/DIL//hhP9szC1WOTAghOiZFUfhyWzZvrTlKtc1OZn4FS/eeUDssn3T16ASG9QgHQFHg081ZvLfhGFab/CggziZJbuHT9uzZg9XqqFkyePBglaMRQtSm2O1s/eFtzCueRWtz1NzO0nSjavqTEBqncnS+R6vTMXLe3Rgm3otd66g9aCpO49D/fkduxkGVoxNCiI4lu7CCv3+/j6OnywEwGrQM/+0mWZytb7cQ/jKnP0lRgQBU2+y8suIIyw+cVDkyIYToWKw2O2+tSef7Xced4yb2jmJ2/xgVo/JdAX567pySzJzBsc5xqw6e5sVfDjufQhKihiS5hU/buXOn870kuYXwHXabjU2fP4du96fOcebuYxl244sYQ6RTxcb0H3ce0Rc9RbXRkWwxVBVy/IuHyNi/ReXIhBCiY9idXcw/fzhAfpnjB9jwQD8ent2XIdKOZ6MiAv146NxUxvSMBBw15j7YkMlnW7Lk0XAhhPCACouV538+xIaj+QBoNHDVqASuH5+En17Scw3RaDTMG9qdmyYmofutc+R9uSX844f9nCo1qxyd8CWyFwmftmPHDgDCwsJISEhQNxghBADVlio2fvBXjOk/O8fZB13J6Kv/gp+xc/X+3VJxvQaQMv8lzCFJAOislRR//1eqMjaqHJkQQrRvG47m8+IvhzFX2wBIjArksfP7khAZoHJk7YNBp+XmiUmcN7Cbc9zSPSd4Z22GekEJIUQHUFBu4aklBzhwvBRwHG/vnNqL6f26qhxZ+zEuOYo/zupD4G99Ph0vMvPUDwfIKpB+JISDJLmFT6tJckstbiF8g9lcyZb/PYT/8U0AKBot+gm/Y9i5N6DRyimlOUIjujDk+ueojBqIBkgK98O47nkoylI7NCGEaJdWHDzFW2uOOmsdD+sRzoOz+xAW4KdyZO2LRqPhkuFxXDu2BxpHhTkGdg9VNyghhGjHcosqefL7feQUVgIQZNLzx9l9GJYgzWg1V++uwTx2fl9iQh2Vq4orqzlyqkzlqISv0KsdgBANURSFXbt2AZLkFsIXlJireX5ZGkmVIQwC7FoDwTMeoveQiWqH1m6Z/AMZOf8fFCz/DyH5m6HfXAiLVzssIYRod7YeK+D9Wh1LTunThWvH9EBTk6UVzTa1TzThAX6cLq1iVFKE2uEIIUS7tfLgaYorqgGIDjHy++kpRIfIE7AtFR1i4pHz+vLCT4cYGBfK1FRpLlM4SJJb+Kz09HRKSkqAM0nuZcuW8dZbb7FhwwZOnjxJVFQUc+bM4e9//zuRkZFqhitEh+en06LValkdfD4mPYw+52J69Bmidljtnt7gR/TM+yFzAySMcY4/dLKU3tFBkqARQgg3DOweRmq3YA4cL+Xcgd24ZFh3OX56QEPtmNvsirNdVCGEEI27YmQ8xZXVnC6t4r4ZvQkxGdQOqd0LMup5cHYqBp2ci8QZkuQWPqumqRKAnj17ctlll/H555+7lMnNzeX1119nzZo1bN68mYAAaW9RCI9TFNBoMBl03Du9N2+uPsqEUY8QG+avdmQdh0YDPcY6B5fsPs7nW7O5uI8f540eKE3BCCFEE/z0Wu6e1putxwoZ3ytK7XA6tLVH8vhp30n+MDNFEjVCCOEGnVbDLROTqLYp+Pvp1A6nw6ivs87tmYVYrHZG95RKkJ2R3DULn7Vz507n+z/96U98/fXX3HLLLXz//fds2bKFjz76iH79+gGwb98+3n33XbVCFaLjqiyEn/8KhRkAhJgM3D+zjyS4vSgzv4LPt2YTa8mg65rH2PLtayh2u9phCSGET1EUhQqL1WWcyaCTBLeXbT1WwMK16WQVVPCvpQecj98LIYQ44/DJUnKLKl3G6XVaSXB72b7cEl5dmcaba9LZklGgdjhCBZLkFj6rdk3uAwcOsGbNGt544w3OO+88hg8fzpVXXsmyZcswGo0ArF27VqVIheiYigtOs+/9P2I7uR9++Zsz0S28KyEygAXDQplb9C56xYLhwNeS6BZCiFoUReGzLdn8/fv9FFVY1A6nU+keFkCov6Mjz+NFZp7+8QDFlZLoFkKIGodOlvLvnw7x7I8HOVliVjucTmVndhE2u4KiKLy++ijbMwvVDkm0MUlyC59Vuyb3p59+yujRo88q0717d3r37g1AWZn0qCuEpxQXnObABw9gKcgi7XQZVq0fGKQ5oLYyaVAKhuHXOIcl0S2EEGcs3pHDj3tPcKLYzL9+PIjFKsfGthITauKhc/sQGeRIdJ8sNvPvZQcpr7I2MaUQQnR86XnlvPjzYSxWO8WV1fyw+7jaIXUqV46Mdz7RZbcrvLoyjd3ZxSpHJdqSz7XJvWXLFn744Qd+/fVX9u3bx+nTpzEYDMTGxjJ+/HhuuukmJkyYoHaYTfpx7wmW7T3ZZLkekQHcc05vl3H/+eUwx/Irmpx2Zv+uzOof4xw2V9v401d73Irv7mm9SIwKdA7vzCri3Vo90jfEaNDyj4sGurWM1igqKuLYMUc88+bN45xzzmmwbE1yWzqeFMIzykoKOfDhgxgrTgBQpAmlePyjRAZJr9VtafA5V7IDYMtCwJHo3mYwMvy8m9QMSwghVPXtzly+23kmaTCzX9d62+QU3hMdbOLB2ak8teQAheUWsgsreeHnQ9w/sw8mgzyKL4TonHKKKnn+p0OYq20A9O8eyrVjeqgcVeei0Wi4flwiNrvChqP52OwKr6w4wr3Te9O3W4ja4Yk24FNJ7kmTJrFmzZqzxlssFg4fPszhw4dZtGgR8+fP580338TPz0+FKN1jrra59fhkRODZnbWUmqvdmrbm4FlDUXD7kU2rXXEZttjsbk3bVheutZsqWbBgQYPlKisryczMBCA5OdnbYQnR4Zkry9nz4Z8wlecCYDFG0PPKfxHZNV7lyDqnIXUS3brdn7LLP5RBUy9VMywhhFDF0j0nWLw9xzl89egEpvSRH2DVEBVk5I+z+vDUkgOUVFZz9HQ5Ly0/zL3npMiPDkKITudUiZnnaj3V0rtrMHdNTcagk+NhW9NqNdw4IQmrXWFLRgHVNjv/+eUwv5+RQkrXYLXDE17mU0nu3FxHUiU2NpbLLruMiRMnkpCQgM1mY/369Tz33HPk5OTw7rvvUl1dzYcffqhyxA0zGXSEBTSdhA+up0fyYJPBrWnrJpw1GtyaDkCv1bgM++m0bk1rNLTNQbp2UyUTJ05ssNyuXbuw//b4/qBBg7welxAdmbXawvYPH8e/OM0xbAgi6fJ/EhUjCW41DTnnSrZZKtHu+hgA++a3OBAYQuqomSpHJoQQbWftkTw+25LlHL5sRDzn9O2qYkSia4iJP8xI4V8/HqSiysqB46W8ujKNu6Ymo5fEjhCikygot/DssoPOjngTowK595zeGPXyZItadFoNt0xMwmqzsyOrCIvVkeh+aHYq8RHSBGdHplEURWm6WNu44IILmD9/Ppdccgk63dkHhLy8PMaPH8+hQ4cAWLVqFZMmTWrWMkpKSggNDaW4uJiQEPceVzCbzaSnp5OUlITJZGrW8kTL3HDDDSxatIiEhARnsyX1ef3117n99tsByMnJITY2tq1C9CrZ5kRbU+x2Nn7wV0y5GwGw6UzEXPwU3Xv2VTkyAY7/z5bFL2E4/AN6rYaeXUMJmPEn6CY/7gkhOr6dWUW8tPwINbct84Z2Z87gjnHN1xGknS7juWUHqaq246fX8si5fUmIlCSCEKLjKzVX89SSA5wodnQwGRvmz0PnphJk9Kn6pJ1Wtc3Oy8uPsCfH0S53eKAff79ogPwA0Q65m8v1qZ/Yv/vuOy6//PJ6E9wAUVFRPPfcc87hzz//vK1CE22sprmSIUOGNFpu+/btAERHR3eYBLcQbU1RFJb+vNSZ4LZrDUSc95gkuH2IRqtlxLy70fScQq/oIAL0GqjIUzssIYTwurTTZby6Ms2Z4D6nb1cuGNRN5ahEbcldgrjnnN6E+hu4f2aKJLiFEJ2CxWrnpeVHnAnu6BAj989MkQS3DzHotNwxJZmkqEB0Wg1XjoyXBHcH1+72vqlTpzrfp6WlqRiJ8Jbq6mr27dsHuJ/kbqqcEKJhvx7J4/PcLgwOPp8JZUsJnPoHkvqNVDssUYdGq2XwJQ/CupcgYYzjJYQQHdyGo/lU2xxN041IjOCqUfFoNJomphJtLTUmhKcuGSTtcQshOg2DTkNqTDBpp8oIDTBw/8w+bjcfK9qOyaDj3um9OVFspre0yd3htbskd1VVlfN9QzW+Rfu2f/9+LBZHJ5iNJa9tNhu7d+9uspwQonGjkyLZnVPM1oyxjJ00kz4DUtUOSTREq4MJ9zkHFUVhyZ4TTOgdRUg9fTwIIUR7d/WoBAxaLccKyrl5YpIkuH1YfQnuvLIqooKMKkQjhBDepdFouHhYHFFBRhIjA+VY58OCTYZ6+8MTHU+7S3KvWrXK+b5vX3mUviOqaaoEYOjQoQ2WO3jwIJWVlYAkuYVoEVs16Az46bXcMTmZg6mlpMa411eBUJ/FaufNNUfZdqyQnINbWTBnOn5GacNfCNGxaDQaLh8ZT7XNjkE6M2w3FEXh863Z/LL/FA/M6kOv6CC1QxJCCK+YlNJF7RBEC6w4eIrswkquHZ0gP6B3IO3qStFut/PUU085hy+//PImp6mqqqKkpMTlJXzbzp07AQgLCyMxMbHBcjVNlUDjyXAhRD1KjsO390LWZsCRRJAEd/tSXmUl7XQZgyo2MDLtZbZ98ncUu13tsIQQolXsdoWiCstZ4yXB3b6sPHSapXtOUG2z859fDnOyxKx2SEII0WpbjxVy+GSp2mGIVvpmZy7vrz/GygOn+GnfSbXDER7Urq4Wn3/+eTZt2gTAxRdfzPDhw5uc5p///CehoaHOV3x8vLfDFK1UU5N78ODBbpULCAggJSXFy1EJ0XGUlRSy58NHqCo5BWueg8yNaockWiA80I/fj4tgYvkyQMF0fBNbvn1N7bCEEKJVPt+WzV+/2cuRU5JEaM8m9ooitZuj7dPyKisv/HyIsiqrylEJIUTLpZ0u443VaTy77CCbMwrUDke0QpdaTct8uiWLnVlF6gUjPKrdJLlXrVrFww8/DEB0dDSvvvqqW9M98sgjFBcXO19ZWVneDFN4QE1Nbnc7nRw4cCBabbvZlIVQVbWlit0fPYa1+DiHT5ZRbIyBmIFqhyVaKD4ugaBpf4DfHrEzHPia3au/VjkqIYRomTWHT/PjnhOUmq38+6dDlJir1Q5JtJBep+Wuqb3oHu4PwKmSKl5deQSrTZ44EkK0PwXlFl5efgSrTcFqU9iTU6x2SKIVxiZHcsHgbgAoCry+Oo2sggqVoxKe0C4yg3v37uWiiy7CarViMpn47LPPiI6Odmtao9FISEiIy0v4try8PBRF4YUXXmi03M8//4yiKGzYsKFtAhOinVPsdrZ+9jT+RUcAqNQHY5v4R/ALUDky0Ropw6fC0PnOYeuG10jft1nFiIQQovkOnijl3fXHnMOXDY+XDnXbuQA/Pfee05tgk6MbqAPHS/lki1Q4EkK0L1VWGy8tP0xJpeOH1z4xwVw3pofKUYnWmjekOyMSIwCoqrbz0vLDFFfKj+vtnc93PJmens7MmTMpLCxEp9Px8ccfM2nSJLXDEkKIdmfHzx9iyl4LgF1rIGbOX4iI7q5yVMIThky/io1FuRiP/oRGsZO/9ClCo/4j/18hRLtwqsTMKyuOYLcrAJzTtytTU92r0CJ8W2SQkd9N68W/lh7EZldYvv8U3cP8mdJH/r9CCN+nKAoL12aQme+o5RsVZOSOKcnofaWfCLsNqivAEAi1n24vzIATu8FS7njZLGCrBrvV8bJVg70ajMEw8X7XeW79H+Ru/+1JUU39f7V6iB0KAy91nXb3546Y9H6gM4LBH/yCwC/wt1eQY5l6P++uFzdoNBpunJBIXlkVGXnl5JdZeGXFER6Y2Qc/vY/8f0Wz+XSSOzc3l+nTp5Obm4tGo+Gdd95h7ty5aoclhBDtTtqudWh2vO8cDph0D/G9pJmSDkOjYcRF97F5US6m/L3oq8s49NnjDL3pPxhNUlNfCOG7Ki02XvzlMOW/tdc8oHsoV4yUPnQ6kl7RwSwYl8g7v6YD8MHGTLqF+tMnJljlyIQQonHf7TrO5nRH+9tGg5Z7pvcmuK2eMrJVQ1EmlOdB+SmoKABzEVQWQWUhmIsdCW6AOS9CcMyZafMOw/b365urK/+Is8dVFkDp8aanDamnMs2B78/E1JjRt0HytDPDVaVwdCUEREFgFAREgn+4s0lGbzHqddw9rRdPfr+fwnILaafKeHd9BjdNSELj5WUL7/DZJHdeXh4zZszg6NGjALz00kvMnz+/iamEEELUlXcik8KfnkWvOGrIVafOZcjomSpHJTxNp9cz4PI/s2/h7/Az5xFelYtt/Wsw5fdev0AUQoiWUBSFt389yoliMwDdwkzcNrknOq0cszqa8b2iyC6sYNnek9jtCu9vOMb/ze0vSQQhhM/aeqyQxdtzAMel9K2Tkuke5u/ZhVgtjoRySQ6ExkFYwpnPKvLhx0fdm4+l3HXY4GYlF3s9zXPojL9NrzgarK79Fxzv7db6a2PbLO4t11inGeGS3LOT8joDBHdzvEJiHUn80HgITwStzr3luCEswI97pvXmn0v2Y7HaWZ+WT2JkINP7dfXYMkTb8ckkd3FxMbNmzWLfvn0APPXUU9x1110qRyWEEO2P2VLN4S/+D3+r48Knsstgxsy5XeWohLcEhYQTP+8vVH7/KD1CdOhO73BcOIfEqh2aEEKc5fvdx9meWQSAv5+Oe6b1JsDPJ29PhAdcOjyenCIzJZXV3D2tlyS4hRA+K7uwgrd/PeocvnhYHEPiw1o3U5sVio5BQToUpEHBUSjKAsXm+HzgZa5J7oAoQIMzuVyb3gimMDCFOJoq0dWpXd4lFcbfd6aZEJ2fo4zWADq9o7kRreHs6QDG3tn0d1EUR7MkdZ3zF7BWOZLd1ipH8r26/EyzKZYyRw30gEjX6Sryz55XTU32okzX8Ze+4/hONapKQW+q/7u4KSEygJsmJPHqyjRCAwwkRgU2PZHwST53FVlRUcH555/Ptm3bAPjTn/7EQw89pHJUQgjR/iiKwttrj5Gnn8a5mk9Q/EMZfPmf0GiljbGOrFuPPjDnIUdtiEkPSIJbCOGTcosqXWrI3TYpmegQk8pRCW/SaTXcPrknWo0Gk8FztfCEEMLTcgorsdocyeUxPSM5d0BME1M04vBPkLke8g45ErcNKc52HdbpIfV8R0I3KNrRtIh/uONlaOJ8GRgJgWNbHnNTNBpHfHV16dOy+UX1gXH3QEXeb82z5Dkq6pSdOvMjADiaMvGrk4De9SmkLYfIZOjS1xFDdL+m11EdIxIjmD/OxpC4MEIDpOPr9sqnktwWi4WLLrqItWsdHaPde++9PPnkkypHJYQQ7VdsmIltxt58FfM7fn9OLwKCQtUOSbSF+FGOzmB+q9FgsdqpsFgJC1C/kxchhACIDfPnxglJvLvuGBcM7sbAODk/dQZSU18I0R6M7hlJVLCR73cdZ8G4RPefPKmudHS2WFveYTi5t57CGkcTJeGJjkopUSlnFxl2XXNDb58CIyFw/Nnj7TYoP+1IeBfngKaeylqnDziaTzl90PECR031rgOg+zCIHQZBXdwKY3KKe+WE7/Kpq4yrrrqKZcuWATBt2jRuuukm9uzZ02B5Pz8/UlLqORAIIYRAo9Fw0dA4EiICMOi0RHcPUzsk0ZZ+S3DnlVXx3xVp2BWFR89NxU9qzwkhfMS45Ch6dQmiS7BR7VCESszVNt5dn8G01Gh6RUtHlEII35HcJYh7zunddMHyfMjaCNmbID8NLn7TtRZx1/6QvsrR/Eh0X0eN44ieENaj2bWNOx2tztEWd3CMowJPXYriWJfWKig7eWa83QrHdzhevONoy3vgpZAwplmLt9sVdmQXMSwhvDXfQrQhjaIo9TTwo47mtsvWo0cPMjIymjVNSUkJoaGhFBcXExIS0vQEgNlsJj09naSkJEwmOQgJ75NtTrRKRQHkbINe50iHg52coij844f9ZJwqYWLZElKijIy5ys0ObIQQQggvKqqw8OyygxwvMhMaYODxC/rLI+JCCNVUWKzuP21it0HudjjyM+TuwKXd7PH3QY9aTYVYyqGqzNHkiNybeU9FgaMm98k9jv9N3Xa+Jz4A8SPdnl15lZU3Vh9lT04x88clSi1vlbmby/WpmtxCCCFax1ptoeLnZwgpO+o4wY++7exH5kSnodFomD+mB3ve+yPdqtIgE/as6c+AiXPVDk0I0QmtPnQak0HHqKQItUMRPiDYZCDEZOA4ZoorqnltdRr3z0hBr5O+Q4QQbaug3ML/fbuXSSldmDekO1ptA8no8nxH+89py6Gy4OzPg7txVkeRNZ0/Cu8KiHD8uNBjrKOGd9ExR8WvnK2Otr3r1gTP2QrHd0HfOY62vus4cKKEPTnFAHy48RhJkYEkRAa0xTcRreBTSW4fqlQuhBDt0vZvXsEvbRvdw/yJzDuExm5VOyShsvjIQIpHnov115cBsGx4k9z4VGITW9gxjBBCtEB6XjnvbziGza5w6GQp14xOaPZTnKJj0Wk13DY5mf/7dh9FFRYOnSjli23ZXDEyQe3QhBCdiNVm59WVRyg1W/l+13F0Wg1zh3Q/u+C2d+HgUteOEMHRDEnyVEdTGCHdpba2L9BoHG2dhyfCgIsdbaXX7SjzyHLI2eLoGDRxPPS9EMLinR8P7xHBOX3L+GX/Saw2hVdXHeHPF/STviV8nPxMLoQQHcSBTT9hOLIURYGsIgsFQ+8Co7RvKWDA+DlUJU4FQGuvJvubv1FRVqxyVEKIzqLCYuW1lWnY7I4KLXqtRhLcAoBQfwN3TElG91utyWV7T7I9s1DlqIQQnclnW7M5erocgMggP87p27X+ghptrQS3BrqPgMkPwYUvOdp7Do2TBLevqvtks9UCp/Y53is2SF8NPzwAq56BwmPOYpeNiCMxylEL/1RJFYvWZUjlXB8nSW4hhOgATudmULH6JeewdsR8Inv0VzEi4WuGzrsPc7Cjdpxf5Wl2fvE0it2uclRCiI5OURTe+TWdvLIqAHp2CeTS4XEqRyV8Sa/oIK4Yeab23Nu1thchhPCmbZmF/LzP0WGhTqvhrqm9CDLqHTV/614n950D/uHQ/yKY+wpM/iN0HwZaSau1O3o/mPMiDLjEtSmZnC2w5CHYshCqyjDotNwxJRl/Px0AWzMK+WX/KZWCFu6QvVEIIdo5S5WZtK+eRGtz3BCaY0czaMrlKkclfI2f0USvi/+CTe+oyeB/Yis7V3yqclRCiI7up30n2Z5ZBECgUc/tk5OlzWVxlmmp0QzrEQ5ApcXG66vSsNrkh1ghhPfklVXxzq/pzuErR8XTIzIQsrfC9/fDoSWuE5hC4cKXYfCVEBjZxtEKjzOFwKDLYe5/Yeh1jh8wAFDg0FL47j5IW05UoB83TUhyTvbpliyOni5TJWTRNLnCFEKIdm77N69gKssCoCoghiGXPoRGahSIekTFxBM89T7nsLL1XU4cO6BeQEKIDi3tdBmfbc12Dt80IYnIIKOKEQlfpdFouGF8IlG/bR9HT5fz5fYclaMSQnRUVpud11elUWlxND8yPDGcqQl+8OvzsPpfUJEPOz+GstOuE9Zt11m0fwYT9L3A0ezM4CtB5+cYX1UKB34Axc7QhHBm9Y8BwGZXeG1VGuVV0veVL5IsiBBCtGMHt/yC8egyABStnvg5j2Lyl967RcNShk3B0ms2AF2D9UTvfBWqzSpHJYToaMqrHO1w239rh/vcgd0YHB+mblDCpwX46bm9Vvvcx4vMznbchRDCk77cnuNshzsq0I8bux1D8/0fIHPDmUJdUqWN7c5EZ3A0RXPBC5Aw1jFuxA2gdTRVcvGw7iRHBwGQX2Zh8Q75IdYXyc9QQgjRThWUVXH81w8I+21YO+J6YhP7qBmSaCeGzbmTkm+ziajKBlMwVFc4ajEIIYQHKIrConUZFJRbAOjVNYiLhnZXOSrRHiRFBXL5iHisdoVZ/btKB6VCCI/blV3Ej3tOAOCnsfFgxEpMW9edKeAXBMMXQOJESXJ3RoGRMOE+KLoEws70F6HXabljTBeeXFJEvx4xXDJM+hfxRZLkFkKIdkhRFN5em05GyAKmlSwmNtyfMZMvUTss0U7o/YxEzPyjoyfx/hfLo5dCCI8qKLdw8EQpAAFGPbdNOlM7V4imTO/XVe0QhBAdWHSwifiIAApOn+AP/t8ReTL3zIeJE2HYdY72t0XnVivBDYDdTvi2V/iH/2mM/e4Hg06duESjpLkSIYRohzQaDRcNjSMwJIyN3Rcw6LLHpB1u0TzBMY7OVn5LcGfmV3CyRJotEUK0XmSQkScu7E9qt2CuH5dIRKCf2iGJdk46oRRCeEpMqIlHxwbwqO49evBbkxM6A4z9HYz7nSS4Rf32fQWn9mE0n4ZljzkqCwmfI1W3hBCineoVHcRfL+xPYUU1gQH+aocj2ilFUVh+4BSfbskiPljLQ+f1x+AnHcMJIVonPNCPB2b2keYmRKvtP17CwrXp3DY5meQuQWqHI4ToAPyCI4gJC4SKSgiIhEkPQERPtcMSvqzHBMjeCgVpYLfC+legupK82ClszyxihjyF5BOk2p8QQrQnVaWOE2pFAeDopKl7mCS4RctV2xxJ7ghzNhOPPMOO715TOyQhRAchCW7RWntzi3lu2UHyyyy8ufoolRab2iEJIdqh06VVWKy1nggxhToS292GwOx/SoJbNC24K8x4AnpNd44qWv0aX3/wCh9vymRbZqGKwYkakuQWQoh2QrHbyV72H5Sjq2DJg3Bqv9ohiQ7AT6/ljnHduKToHUJtBRgO/0Da7g1NTyiEELXszCri1ZVpVFisaociOpDUmBBn7e3TpVV8sPGYyhEJIdobc7WN538+xN+/20tuUeWZDyKSYOoj0jyJcJ/OACNvhv4XAWC1Kwwv+pFxZctY9Gu6s8NtoR5JcotOwWKx0Lt3bzQaDZ9//nmD5cxmMwaDAY1Gw5NPPtns5dx1111oNBoWLFjQmnCFqNfetd+St281aafLqaq2QZA8EiU8I65rFLrBlzuHC35+nrISqY0ghHBPcUU176xNZ0tGAY9/vZeiCrnJE56h02q4eWJPTH6ODr7Wp+Wz4Wi+ylEJIdqTjzdlEnXiVwYeW8R769JQFEXtkER7ptHA4CthyNVEBvkR6m9gePlqRuZ9xdtrZPtSmyS5Rafw4osvcuTIEQYMGMAll1zSYLk9e/ZgtTpqIA0ePLjZy3nooYfw8/PjvffeY+vWrS2OV4i68nKPYdn4FgBlVVbSe14NAREqRyU6kiHTr6Yysh8ABksRu796FsUuHX0JIRqnKAoL16VTZnZcPyVEBBDqb1A5KtGRdAk2ct2YHs7h9zYc43RplYoRCSHai63HCsjbtYxpJV/Tx7KHuwzfolHk+lZ4QL+5aEbcTHxEIH46LQMrNxFy5Ft+3HtS7cg6NUlyiw6vtLSUp59+GoDHHnus0fYhd+7c6XzfkiR3QkICCxYsQFEU/vznPzc/WCHqYbNaOfL1P9HaHDXjqhImkjpqhspRiY5Go9XSd95DWPWBAPif2MLetd+qHJUQwtetPHSa3dnFAIT4G1gwPlHa4hYeN6ZnJGOTIwEwW2y8teYodrvUlhNCNKyg3MKvP3/N9JKvAIXuYQEERcaBRtJgwkNSZqIffxfxkYHk+CWxK2A0X27LJqugQu3IOi3Zu0WH9+qrr5Kfn09CQgKXXXZZo2V37NgBQFhYGAkJCS1a3v333w/AkiVLpDa38IjtS97GVJIOgMW/C4Pn3qduQKLDCouKIWjiHc5hy8a3yMuV9k+FEPU7UWzm081ZzuHrxyUSYpJa3MI7rhndg6ggIwBHTpWxdO8JlSMSQvgqRVH4dtlPTMr7BFAICzAQPvRCGHqto7kJITwlaRLB5z9JxbiHMGsDsNkV3lpz1LWjU9FmJMktOjSbzcbLL78MwFVXXYVW2/gmX5Pkbkkt7hp9+vRh2LBhALz00kstno8QAMcO7kC//ysAFI2WmNkPYAoIUjkq0ZGljpqBOWESAFqbhbRvnkKxSUdyQghXVpudN2vdxE1JjWZwfJi6QYkOzd9Pxy2Tkpz5qcXbc6S2nBCiXqt2HCLlyNtoUDDotMQMn4Nm+PWS4BbeEZ3KvBE9iAv3ByC7sJLF23NUDqpzkiS36NB++uknsrIcNYyuueaaRssqisKuXbuA1iW5ay/rs88+o7S0tFXzEp2XubKckz8+C791XmHrfzEJKUPUDUp0CkPm3YfFvwtGvZb+xlNo9n+jdkhCCB/z3a7jZOSVA9A11MTlI+JUjkh0Br2ig5nVPwZwdEp5osSsckRCCF9zvLAUy6rn8Lc7zlHRvUdgGnOLJLiFVxl0Wm6e2BOdVoO/vQxl/cucPJ2ndlidjiS5RbthtVp56aWXGDVqFOHh4ej1esLCwpg8eTKLFy+ud5pPP/0UgN69ezNw4MBG55+enk5JSQlwJsm9bNkyLr/8chISEjAajXTv3p3bb7+d/PzGe3Wv6dyyoqKCr7/+ujlfUwintcu/w6/yNADmkCSGzrpB5YhEZ2HyD6TnhQ+TEhNCkL9J2i4UQrg4cqqM73blAqDVarhlYk+Mep3KUYnOYt7Q7ozvFcVfL+zPyETphFsIcYbVZmfL4leIrnI0txcc0ZUus/4ITTzRLYQnxEcEcE1fHdcWv8HswMN03fkyyBOxbUr2dNEu7N+/nxEjRnDPPfewefNmioqKsNlsFBcXs3r1ai666CKeffbZs6ZbsWIFAGPGjGlyGTVNlQD07NmTyy67jFmzZvHZZ5+RlZWFxWIhNzeX119/nUmTJlFR0fDjkT169CAmxlHLZMmSJc38tkLAwROlfHi6J0tCr6BCH0rPCx9Gp9erHZboRKISB6AbeRPMfBL6z1M7HCGED1mXllfzkBEXDo4lKSpQ3YBEp2LQablxQhJdQ0xqhyKE8DVZGxlpXo8GMBgMxF/4JzCFqB2V6EQm9Y1jeFwgof4GOLUftr+ndkidiiS5hc/buHEjY8eOZefOnfTs2ZOXXnqJDRs2sHr1av74xz+i0zlqDj388MMcOnTIOV12djYZGRkAjBw5ssnl7Ny50/n+T3/6E19//TW33HIL33//PVu2bOGjjz6iX79+AOzbt49333230fmNGjUKgFWrVjXr+woB0CMygMl9unDENJDKWc8T3T1R7ZBEZ5QyEyKSAEeTTkdOSfNLQgi4bkwP5o9LpH/3UM4b2E3tcIQAHOcpIUTnpu+aSkzvofSKDiJq8q34de2jdkiik9EEdcEw9SHQ/lZB7dBSOL5L3aA6EakWKHzaqVOnmDt3LsXFxcyePZsvvviCgIAA5+cTJ04kLi6Oe++9F5vNxltvvcW//vUvANatW+csN3To0CaXVbsm94EDB1izZg2jR492jhs+fDgTJ04kOTmZqqoq1q5dy+23397g/IYPH84333xDTk4OJ0+epGvXrs356qKTMxl0zB+byLjkKJK7SA05oa5TJWbeWZvBkVNlPDq7Fz27hqkdkhBCRRqNhskpXZjUOwqNtHEqVFZltfHF1hw0GrhqVILa4Qgh1OQfDtP+TGDmBgJ7jFM7GtFZRfWGodfC1kUoKOT9/AKmuc8RHBKudmQdniS5vWX/d3Dg+6bLRSTB5Addx636FxSkNz1t6vnQ94Izw9WV8N0f3Itv0gMQmXxmOGcrbHqr6en0RpjzgnvL8IA//OEPnDx5kqSkJD799FOXBHeNW2+9lUcffZTy8nI2bNjgHJ+dne18Hx0d3eSyatfk/vTTT10S3DW6d+9O79692bNnD2VlZY3Or/Yyjx49Kklu4Z6szWC3Qo+xAPSKDlI5ICFgU0YBaSeKGF2+glOfvkLcra/iZ5THxIXo7CTBLdRmtyv884cDZBU4mhEcEh9G327SNIEQnU2JuZoQk8ExoNVB4nh1AxIiZTbmjE0cP7iZ4spiKr5+kXHX/VXtqDo8SXJ7S3UlVBY0Xc5cT2cp5mL3pq2udB1WFPemA7DbXIetFvem1bddUiMtLY2PPvoIgL/97W8EBwfXW85kMpGSksL27dspKDjzHU6fPu18Hx7e+C9mRUVFHDvm6Jxi3rx5nHPOOQ2WrUluR0ZGNjrPiIgz/9sTJ040WlYIgPKi0+jW/heTvQKyN8GYO0FnUDssIZjdPwbDptfoWr4RgJ3fvcbIS+5TNyghRJv6ekcOyV2CGNA9VO1QWkdRwGoGSwVYyhzvI3u7dkqWdxhOHwBrFdgsv72qHdfPiu3M38AujppatW1+y1FZxaWs/ew4ep0DfeecGbZZYcmDZ5fT6kCjc/zV6hyPPw+5xrWySmEGHPjhTBnNb+V0BkcFFZ3R8Vdvgh7joPaPE1Wljhj9gkDX/m4NtVoN45Ij+eS3JPc7v6bzxNz+BPi1v+8ihGiZo2kH+fevBZw7NJHZA2LQaeUHWOEDNBosw2+jYM92dFQTkLue/Rt/pO/oWWpH1qHJ2d9bDP7g70Zv36Z6bhRMoe5Na/B3HdZo3JsOHBfAten93JtWb3Rv/h7w/vvvY7fbCQsL49JLL220bE273AbDmYRg7YR3U0nu2k2VLFiwoMFylZWVZGZmApCcnNxgubrLLC8vb7SsECgK+795DuPJXGJD/Ymw29Bo5RAtfINep2XwrPkc/3grGrsVQ9pSMvZPILHvCLVDE0K0gb25xXyzIxeAGf26cqUvNQlRXQmVhY7rZ79azXuV5MKOD6G6Aizljld1hSO5TZ22my95C4y1KlOc2AW7Pm162eGJZ48rzob8I01PW1VPHwclOU1PB2dXdCnPg3R3+oDROJLcte35Ag7+1km6zs+R7PYL/O1V6314D+g5xXVam9UnEuMz+nVlR1YRB0+UUlBu4eNNWdw4IUntsIQQbcBcWU7+d09webWdnzdcTFjANMb3ilI7LCEACImKwX/sLVjW/AeAirWvU5IylJDwplsaEC2j/lVJR9X3AtemRJqjbvMl7jL4w0Wvtmza7sPhouEtm9ZLli5dCsCUKVMwGhtPrufkOG4KevTo4RxnMp2pdV5ZWdlgTXBwbapk4sSJDZbbtWsXdrujNs6gQYMajamy8swNSO3kuxD1ObjxB/THt2MD0kr1GAZdT4g8Bi58SEx8L3IHXYlmx/ugKJxa9jwxiW9g8pc244XoyCotNhauzXAOdw1p46aKyk5D2UkoPeH4W34azEWOxHZloaO2NcC4e1wfT7dZIHuze8uwWqD2pabOzUoddZ+MBEct6pq/Wu1vHU/Vcz7X1nNteNYTk4qjFrjd7qgV7py2TmWV+uKoj97PtRY3nFl/4FhnlQX1P93ZfcTZSe4lDzqeQA2MgoAox9/AKAjqCsHdHH/1fu7F1goajYYbJyTx+Nd7MVfbWHskj2E9whkSH+b1ZQsh1LX721cwmPMxALOVNYxJarxynBBtre+Yc9lweB3+J7agqy5n/bLPmXn5HdLkm5dIklv4pKqqKrZu3QrAsGHDGi174sQJjh8/flbZLl26ON8XFBQ0muSuqcmdkJDQaDMktWt8N9WZZe2a5GFhYY2WFZ1bSdFpyte+Rc2D0qbxtxES6uZTGUK0oSHTr2ZT+npMxWn4mfPY+e0rjL68hT/MCiHahY83Z1JYbgEgtVswU/p0aWKKFlAURwLbVg1h8a6f/fgoVJU0PY/KQtdhQ60f4DQ68AsAQ4CjVrIh4LfhQEclkbqJ2O7DICDSMb6mqQ+t/kxzIRrtmeZA6pr6J0ciubk3rzo9XP6/hj9XlDNNoNRNkHcbBOf/29GnR00TKXbbmaZWrGZHMltRzp5veBLEDnM03eKs7V7m+F/U5nd2vziYi36rJV/maDLlLBoIjIQh1zr7GvGWqCAjV46KZ9FvP8j8b10GyXP7E2ySiiZCdFQZezZgSP8FALvWj14XPIBWp21iKiHalkarpf+8+9m98B7WGyeyv2IoYekFjO7ZePO3omUkyS180p49e6iudlxcx8fHN1p2yZIlzvfTp093vq+d5C4sLHSp5V1XTfJ6yJAhjS5r+/btgKNTydjY2EbLFhaeudlKSPChx3qFT1HsdvYtfg6T1dGWZHnMKMaNnt7EVEKoQ6vT0evCh8j84Hdo7RaM6b+QtmsCyYOk93ohOqLd2cX8ejgPAKNByw3jkzxT86iq1NGkR94RyD/seG8ph5hBMO1PrmWDoutPcutN4B/+2yvMUXO4toBImPeqI6GtNzYv6RwS63i1hNZLCRaN5remQeq5fTP4Q2j3ls03ZabjVZfV4khe1zT3YqiT5LbbITQeKvKgoqD+dsdRHE2p6Or8iFCUBetegqje0KUPdOnrqAHeym1rQq8oth0rYld2ESWV1by34Rh3TE6W2nJCdEDm8hLyfnnhzBFx6LVEd2/4fl8INYWERuB34fPsX50BwPsbM+kTE0xYgPefdupsJMktfFLtGtM1zYM05I033gCgd+/ejB17ppbIwIEDne8PHTrUYAK7urqaffv2Ae4nuZsqV7NMAKPRSK9evZosLzqnfRt/xHTSsV1ZDUEMmPt7uRkTPi0qtgfZw66BLQsBKFj+H7r17E9AUDvvjE4I4aK8ysrCdenO4StGJhAV1MK+WawWR0eOJ3bB8Z1QlFl/ueKss8f1GAddUn9rAqMrBEY7EtuGJppN0WohQJ6KajG9H+gjgAbWoVYLM55wvLfbHTXpK/IczcmUnoDS41By3PE3pM4PEIXpUHTM8Trys2Ocf4Qj4R0zEGKHtuh/p9FouH5cIn/+eg/lVVa2ZhSyMaGAMVJbTogOZ893r6A3OyqVlYenMnbqZSpHJETjRvbswtasEjanF1BRZeXd9ce4e1ovuff3MElyC59UO8m9a9euBst9+OGHbNiwAYAHHnjA5QAxYsQITCYTZrOZzZs3c/nll9c7j/3792OxOB7DbSx5bbPZ2L17d5Plamze7GgHcujQodImt6hXccFpKte94TwQB064ndAwuSEXvm/w1MvZcHQ9/gUH6GYox7DzfRh/l9phCSE86OPNWRRXOJ6q6x8bwqTerejIK+0X2Lqo4c+NIY5avWE9HAnT2rWhU89v+XJF29BqHc2SBEY6EtW11ddESkWBo8mX2rW/Kwsgc73jBRDRE+JGwoCLmxVKaICB68b24LWVaQCsS8tndFKEJBGE6EAydq9Dn7ESAJvWSO8LpZkS0T5cO6YHB0+UUlJZTdGRTezxP8LAceeqHVaHIklu4ZNqJ7nff/99Hn30UaKjXXugXb16NbfddhsAo0aN4uabb3b53M/Pj9GjR7Nq1So2bdrk1rIaa2f74MGDzs4km0pyV1VVOZPzM2fW8wio6PQURWH7t68Q9lszJeZuoxgyaobKUQnhHo1WS8qFf0S/9EFCDTYozoBqc9M1K4UQ7cL2zELWHXE0U2Ly03G9u82UWCogZ8tvNa9rXbfF1O6sWwMRSY5kaGRviErxSFMVwkfV93/tPw9SZjuaqTl9wPHKO+TaCWbBUUeTNM1McgOMTIxgT+9iuoX6M6NfV0lwC9GBmCvKyFv+0plE1rDriI5pvHlTIXxFkFHP/DHxHFj8DGO1e+ieGQGDRzl+JBYeIUlu4XMURXEmiIcPH87WrVuZMGECf/nLX+jXrx95eXl8+eWXvP3221itVmJjY/niiy/Q1tMG4ty5c51J7tLS0no7n9y5cyfg6BwyMTGxwbhqmiqBpjudXL16tbNN8YsuuqjJ7yw6n1+P5PGldSLTjAXE23MYMPf3aockRLNEdo2Dibc6HksfcEn9HbAJIdodu13h0y1nmg25elQCEYFNtBlZcBQO/ABZGxwdFg64FAbVenQ8JBb6nAeRvRzNUZhCvBS9aDcMJogZ4HiBo6PMgqOQsw1ytzk6suxep/N5RYEN/4WuAyBhjKOt9QbcMD7Je7ELIVRTtfVDAm1FVAHl4X0YN/UStUMSolmG9ogkvl80UacDwV4Fm9+EyQ/Jj/0eIklu4XOOHj1KSYmjg6E///nPvP766yxZsoTrrrvurLKDBw/mm2++IS4urt55zZ8/n0ceeQSz2cxXX33F/PnzzypTU5N78ODBjcZVUy4gIICUlJRGy3744YcA9O/f362mTUTnE+pvQB8cybfaa/n9+EiCQqWZEtEO9ZziMlheZSXQKJcWQrRnWq2G389IYeHaDEx6HeOSG6hdZLc7am0f/AFO7Xf97NhaGHjpmRs2jQaGL/Bu4KJ90+ocTdZE9YbBV0B5vqNd8NryDkP6asdr+3uOH05SZoFfoDoxCyHaXGhUN4JjI8ktqqT7nAfQeKuzXyG8KGrSLfD9QTAXQe52x3mt52S1w+oQ5IggfE7t5kMGDx7M4sWL+cc//kH//v0JCAggLCyMiRMn8vrrr7NlyxYSEhIanFdkZCQXX+x4zLEm8VxXTU1udzudHDhwYL21xmuYzWa+/PJLAO68885G5yk6r0FxYTw5bwA3TuzJgJRktcMRolUURWHFwVM8+PkudmcXqx2OEKKVooNNPDirD7dO6nl2Uw92m6OzwG/vgTXPuSa4/QKh90wYfXvbBiw6nsBIMNZ5AjNn65n3VaWw6xNYfCfs+BAqixqdXdrpMr7clu35OIUQbavvHLTn/Yu48/5Il24N5wGE8GnGYBh1i3OwevM7FOefVDGgjkOjKPX1BtJxlZSUEBoaSnFxMSEh7j0qaTabSU9PJykpCZNJ2hv1tscee4y///3vhIaGUlRU1Or5bdy4kTFjxqDT6UhLS6NHjx6tD7IR77//Ptdddx2RkZFkZGQQFBTU7HnINteB5R2G4G5gbP52IYSv2p5ZyMvLjxBpPckUy0qmLngc/8Czm4cSQrRzhcdg3X+guE6yMCQW+pwPSRMbbUJCiFZRFEfb3YeWwrH1QK3bWJ0Bes9yPEFg8HeZ7NuduXy9IwdFgd9N68XQhPC2jVsI0WqKokj7+qLjWfsiRftXkl1YSXHEIMbd8JQ8ndAAd3O5svaEz6mpyT1w4ECPzG/06NFcfPHF2Gw2/vnPf3pkng2x2+384x//AOCPf/xjixLcouOqLi9EWfUv+OEByN7a9ARCtBND4sOYEXiEKwv+S2zpbnZ9/6raIQkhmmnj0XzM1bbGC/mHQ0X+meGYQTDlYTj/39B7uiS4hXdpNI4OS8ffC3NegF7TQftbE1m2ajjwHXz3e9ca30BkkB811bre23CM8ipr28YthGiV/TkFPLXkACeKzWqHIoRHVQ2ZT1qpDqtdITBvJ3vWL1U7pHZPktzC59QkuQcNGuSxef7jH/9Ar9ezcOFCsrO996jiZ599xv79+0lISOCee+7x2nJE+7T9q+dJzz6OpSwfjq5QOxwhPEaj0TB94gTQ6AAwpv/C0X2bVI5KCOGuPTnFvLH6KI9/vZf9x0saLmgKgf4XOTqQnPF/MO1PEDtUOksSbS84xvGo94UvQer5Zzo/riw8q+jYnpEMjAsFoLiimk82Z51VRgjhm8xVVeR9+RBd0z7nya+3k5lfoXZIQniMMTCckIm3OYerNrxFcWF+I1OIpkiSW/iUvLw8cnJyAM8mufv06cM777zDI488QmZmpsfmW5fNZuPxxx/nvffew9/fv+kJRKeRtvUX/HI2UmKuZm+eHevwm9QOSQiPioqJRzv0audw3s//ocosNyJC+DpztY3/rcsAIK+sitOlVY4P8tNgxT/BUmc/Tr0AZj7pqFErhNoCImDYfDjvOeg+/MyrFo1Gw/yxiZj8HD/Erj2Sx54c6T9CiPZg69J3Ca7IZFjFr1xevZj4CLnHFh1L7xEzqOo2EgC9tZzd376kckTtm17tAISorXank55McgNcd911Hp1ffa6++uqmC4lOx1xWSPHqV52/KupG3oA+UNqDFB3P4GlXsPHIGkzFafhVnmbXD28y8uJ71Q5LCNGIL7flUFBuASC1WzATk8Nhz5ew+3NQbLB1EYyt1ZG2VqdOoEI0JrgrTH4QrJazPzu4hIj40Vw+Ip53f/tBZ9G6DP42dwD+frI9C+GrMtIP4X9wMeD4sar/9AXSLrfokPpdeB+H3rmVXE0Mv1SPw/9YAcN7RKgdVrskNbmFT6lJcms0Go+1yS2E2vZ+9xJaSykApVGDGTjuPJUjEsI7NFotPef8EeW3NlINR5aQeXinylEJIRpy5FQpyw+cBMCg03L94EA0vzwBuz5xJLjB0clktbSDKtoJvZ/rcMavjh9qlj7MpJAT9O3m6KyqsNzC59u814ShEKJ1qq02spY8j1ZxtKGv7XsBkT36qRyVEN4RHBaFZubfWRx2PaW6cN7fkEmZ9B/RIpLkFj7lgQceQFEU7Ha7dNooOoSs3WvQH1sLQLXOn9Q5v5cek0WHFt09CWXApY4BRSH3x+eptlSpG5QQ4iwWq52FazOcHfJd06uKLmufgLxDv5XQwIBLHG1vG0yqxSlEi9ltjicSAMzFaJb/nVsjdmDUO2qCrjxwigMnGmmDXgihmq0/f0Jw6VEAbIFd6TfrZpUjEsK7hvZPZUiC42nvkspqPt7kvWZ2OzLJtAghhJdYKss4tfy/KDUjhi2gS3Q3NUMSok0MnnEd5uAEAILNJyjb9pnKEQkh6vp+dy4nih01tMeZMphw7L9Q5XjqiKBoR3J70OWgk9YNRTul1cGMJyCmpglEhZDDX3K//3folGoA3lt/DEVRGp6HEKLNHc/NxLD7I8DRr3H3mfei85MfW0XHptFouG5sD2czWlsO53Jg3y6Vo2p/JMkthBBesveH19CZCwAoDUtl+OS5KkckRNvQ6fUknHs/EcH+pMaEEJ6xBCoL1Q5LCPGbrIIKfth9AoCB5s1cXfUpGrsj6Ud0P5j9FHRJUTFCITzEFApTHoGBlwGOGtw9q/axoPpTksL13D45Wdr4FcKH2G12jnz3PDq7o319JfkcYlKGNzGVEB1DWIAfV4yMJ77qCAuKX6HL1ufBUq52WO2KJLmFEMILMvMrWHU6EIvGiE3rR/IF96PVySFXdB6xSakkTLgaXVh3OOcv4C+drQrhC2x2hUXrMrDbFRKrDnCl8iP+ht/OTz3GwdRHwS9Q3SCF8CStFgZeClMfAZ0fGjSM8s/hUf/FxEvriEL4lMxtSwku3AeAzRROv3PvUDkiIdrWhF5RXBW6mxFRViJ1FbD9A7VDalck4yKEEF6wLbOQ3aYRvB95D2Uj7iK2e4LaIQnR9vpfDLOfhi591I5ECFHLyMQIDDotluhBdOk73jGy7xwYdw/oDOoGJ4S3dBsM0x4Dgz8GnRZt3gFY/uSZZnqEEOpSFBJLt5HcJQijXkuXaXfhFxCsdlRCtCmNRkOfC36PwejvGJH2C5zYo25Q7Yg0sieEEF4wb2h3EiIDWHHgFOMm9VY7HCHUUast38JyCx9uyuSSYXHEhEq7ikKoRafVMHtADMMSwjBX29GFpkL2Fkgcr3ZoQnhflz4w7c+w4h9gKYPy01BVilUfyJHTZaTGhKgdoRCdl0YDkx8muOt39Ck5jnbgRLUjEkIdQV1gyDWw5R3H8KY3UM79FxrpCLxJUpNbCCE8yWpxvh2WEM79M/tgkGZKRCeXdrqMx77ew/aMfH5Z8jmK3a52SEJ0XjYrANEhJhIiA0BvlAS36Fwik2H64xDSHab9iXRLKH/7bh/PLTtEZn6F2tEJ0bnp9NB/Htoxt6sdiRDq6j0TolKw2hUyM9PZ+t0bakfULkjmpRmk523RVmRba6fsNvjpL7DpTekgQoha4sL9idMWcFnhm/Q/9h47V3yqdkhCdDoVFitkboQfHoDSk2qHI4S6whLgvGchPJFd2UVkF1ZityssXJeOzS7X4UK0peKKalYePOV6DywdworOTqPBMuI29p+soKDcgv7wD2Qf2a12VD5Pktxu0Ol0AFitVpUjEZ1FzbZWs+2J9uHgyg8pzDmIcuQnWPui2uEI4TOMeh1XDgqla3UWAPbtH5B/KkflqIToPArLLbzw4Tdkf/80tpJcWPYYlOerHZYQ6tI6boXPG9iN2DB/UBSMORtZtue4yoEJ0bls+O5Nlq5ez79+PEh+WZXa4QjhM/wi4rD0vdgxoCjkLH0ea7Wl8Yk6OZ9Och87doz777+f1NRUAgMDiYiIYOTIkTzzzDNUVLTdo2R6vR6j0UhxcXGbLVN0bsXFxRiNRvR6aTa/vSg8cYzKrZ9wLL+C9LwKrP0vVTskIXxKUr+RVPWYAoDWZuHQty9IsyVCtAFFUfh65Qamn/ofeSXlnCw2Q+wQCIhQOzQhfIJBp+X6sXHMLP2C2cWfcHrNO5wsMasdlhCdwr5tv9I1/WuuKHiVrpnf46f36RSVEG1u8IxrMQfF/zakUFJ4WtV4fJ3PHkG+/fZbBg0axL///W8OHjxIRUUFhYWFbNmyhQcffJChQ4dy5MiRNolFo9EQFhZGaWkphYWFbbJM0XkVFhZSWlpKWFgYGnlMq11Q7HbSvnsO7NUA5MZMQx+donJUQviegRfcSbVfKAD+ebvYu2GJyhEJ0fFtTTtO0v5X8VPM6LUaonqPglG3yaPgQtSSrD3JBP0BAAaVreHX796V5gOF8LLy8jJKV70CgAaFMX2TCDYZVI5KCN+iN/gRN/v3WPtdzPDbXiciurvaIfk0n6wmun37dq644goqKysJCgrikUceYerUqVRWVvLxxx/z5ptvcujQIc4//3y2bNlCcHCw12MKDw/HYrFw4sQJSkpKCAoKwmQyodVqJREpWkVRFOx2O2azmbKyMioqKggPDyc8PFzt0ISbDq79Cn3+QQDMxkiGXXCryhEJ4ZsCgkIJnXQ7FT8/DYB5/TuU9B9LSKjUKBXCG8qqrGQte5kkWwEAXRJS8ZvygKNjLyHEGV360GXanRR//wIWq53krC/ZvjaBYRNmqx2ZEB3Wju9eI9DiOD9VR/Zl8Ph56gYkhI+KS+5PXHJ/tcNoF3zyCvfee++lsrISvV7PsmXLGDt2rPOzadOm0bt3bx588EEOHTrEc889x1//+levx6TRaIiJicHf35+SkhLy8vKwy2PWwoO0Wi0BAQHExsYSGhqqdjjCTWUFJ6jc9C41P3WFTr6LgIAgVWMSwpelDJ/Ghr3LMR3fjN5axt5v/sPY6/6qdlhCdEgrf/yKpNKtAAQFBRF93sNgMKkclRC+yS91FiEnc8nb8DGgYN/wGoWpQwmP6qp2aEJ0OEf2bSMw42cAFK2BXnP+gEbrsw0NCCHaCY3iY89hbdq0idGjRwNw22238dprr51Vxm63M2DAAPbv309YWBinTp3CYHDvsZaSkhJCQ0MpLi4mJCSkxXHa7XasVqskuoVHaLVa9Ho9Wjmxty+KwpZ3H0Z/YgcApd0nMPHaP6sbkxDtQEnRaQ6/fSs6q6N/jagLHieu/ziVoxKiY9l3OI2yr/6An2JGp9WQdMGDBPWdpnZYQvg2RWHzh49jyN4IQEX0MMZe/w95clcID6qqMrPt9dvwrzwBgG74dQycfq3KUQkhfJm7uVyfq8m9ePFi5/sbbrih3jJarZb58+fzyCOPUFRUxIoVK5g5c2YbRXgmBj8/vzZdphDCtxzZ/KMzwV1lCGXQBXerG5AQ7URIWBdMo6+HDa/SPTyAsMPvQ8pQMPirHZoQHYK5ysKppc8Qpjg6zwtMmUxQ6lSVoxKiHdBo6Dfn9xx46xb01aUkmfdiz9yIrscYtSMTosPYvmShM8FdHZrE4KlXqhyREKKj8Llqo7/++isAgYGBDB8+vMFykydPdr5fu3at1+MSQojaKi02Dm5Z7hz2H3szoWFh6gUkRDvTb9wcUgaNI8zfD+JGAFJLTghP+WpbNkc08YAGbVAXkmbfLR1NCuGmwJBwIiffRkrXYLqF+qPbuhCqytQOS4gOIevofoyHvnEMaLQknvcHNNJPhBDCQ3zuaLJ//34AevXqhV7fcHipqalnTSPcpChyoyNEK329I4ef/C9lIAkMDixgypgZaockRLui0WoxjL0NzEXQpY/a4QjRYVTb7BzJN5MRNJNcUwp3zeiLxih9RQjRHInDpkPZDsjZ4jhP7foERt6kdlhCtG+KQsyB91AC9BSUW6D/RXRJSFE7KiFEB+JTSW6z2UxeXh4AcXFxjZYNDw8nMDCQ8vJysrKyGixXVVVFVVWVc7ikpMQzwbZDVVWV7Pn2FXSmIIZccLva4QjRrp07oBsFFRb25Izl2rkDpK1GIVoiuKvjBSiKwvasIgbEhuKn97kHzYRoNww6LY+e15dle09gNCQQ2UM6zROi2TQaR1L71F7oNhgGXILVZkevk/OTEC2m0WAYczMJvEZoeSWBMxaoHZEQooPxqSR3aWmp831QUNM1TmqS3GVlDT8+9s9//pMnnnjCI/G1ZxZLNVvf/B0B5dloNBpOpY4iutcwtcMSot0KDTBw55RenC6tIirIqHY4QrRrRRUW3lt/jB1ZRZzfL4KLRyWrHZIQ7ZOlHPwC0Wk1nDuwm9rRCNG+BUTAec9hNYWzdO8J1h7J5C8X9MffT6d2ZEK0XxE9YdY/CDUXgZ/cQwkhPMunfoo2m83O9+506mg0Og6KlZWVDZZ55JFHKC4udr4aq/Xdkfn5GSBhHOCoLXd86bPYzaVNTCWEcKEosPF1OLHHOapLsFycCdFaFRYbe7ILGVyxnu6r7ic7/aDaIQnR/hQchcV3wv5vwW5TOxohOobASD7ZksVX23I4VVLF59uy1Y5IiHbHblcoqrCcGaHTQ2CUegEJITosn0pym0wm53uLxdJISYeaZkj8/f0bLGM0GgkJCXF5dVYjzl1AYXBvAJTyfNK+f96RtBNCuKVw1xKsh3+B5X+D3Z+rHY4QHUZsmD83xqQxqfR7jPZKMpc8j9VqVTssIdoNm7WaPV/+i4qKMtj+PqStUDskITqMWf1jMBoct80b9qWTdkR+iBWiOdZv2cKfv9rJyoOnUCT/IITwIp9KcgcHBzvfN9YESY3y8nLAvaZNBPgZ9MSf+0eqtI4fBcxH11K8d5nKUQnRPliLj5O74g0OHC+hqMKCEiHNKQjhScOnXkR1gKPt4IDSdHb8/LHKEQnRfuz6+X2s+ekcPllGpj0Kek5ROyQhOoyoICMXD+lOinkX1+b/h1NLnnKrQpYQAvJP5WJa/TfmnniFJavXcyy/Qu2QhBAdmE8luU0mE5GRkQBkZzf+KFhhYaEzyR0fH+/12DqKXkk9KOx/PQA2O5xc/hpKcY66QQnh66oryf76/6iuqsRqV1jHIOzdhqgdlRAdit7PRLdZv6emC1fN7o85lZupakxCtAd5OenOp4sUjQZG3+Z4FFwI4THT+kQxTdmAv70c/4pcti1dpHZIQvg8xW7n4LfPo7NVEWU9ziXB+0iMClQ7LCFEB+ZTSW6Afv36AXDkyJFGH1U+cOCA833fvn29HldHMnn6HI6GjgGgorKC40v+BbZqlaMSwkfZ7ZQuf47iE0cBKNJH0f/836HTapqYUAjRXHEpQ7EmTwdAZ6/m8Hf/RrHbVY5KCN+l2O0c/v7faOyOa2ZL8mwSeg9SOSohOh6tXk/CefeDxnH77HdgMVnph1SOSgjftnf9EgLydgFQ7RfKwAvuUjkiIURH53NJ7gkTJgCOpki2bt3aYLlVq1Y5348fP97rcXUk/n46es26gyKdo7OH/KyDVK7+j7TPLUQ9lB0fcGL/OhQFLBoTpaN+T49uXdQOS4gOa8D5t2M1hQMQWLifnau/VjkiIXzX7lVf4l/oSLRZTJEMOu8WlSMSouPq2iMV+s4BQKvYpP8IIRpRXJSPecPbzuHQSXfgH9R5+0cTQrQNn0tyz5s3z/l+4cKF9Zax2+28++67AISFhTF16tS2CK1DGZQUw/GBt2LT6LHZFY6cKAK7XKQJ4eLoSvK3fEF5lQ0FDRu6z2fW2GFqRyVEh2b0DyZy6pmaPtYt/6Mw76SKEQnhmwpPH6d663vO4cipv8PkL4+BC+FNA2bdiPW3/iMCS4+y7ZdPVI5ICN+075sX0Vsdzcuau40iZbjkbIQQ3udzSe5Ro0YxceJEAN5++23Wr19/VpnnnnuO/fv3A3DvvfdiMBjaNMaO4vzJ4/g15jr0qbPpd/lfQSfrUQinUweoWvcax4srAVgVfAGzzpmJn97nDptCdDhJgyZiiXc8pRXpZ8V/17sqRySEb1Hsdg58+zw6mxkAc/wEkgeNUzkqITo+vZ+JbjPvdfYfEbj/M2ylp1SNSQhfc3DLcvyPbwTAqg+k34X3qhyREKKz8MleaV588UXGjx9PZWUlM2fO5NFHH2Xq1KlUVlby8ccf88YbbwCQkpLC/fffr3K07VeIycCd11yOQSdJOyHqUuzVZBRZsdlhl/9oIodeQJ+YYLXDEqLTGDDnd5gXpxGhM0NJOpiLwRSqdlhC+IQth45RXZCJP1DtF8LAOXerHZIQnUb3PsM53Ws60afWEBPih3bLWzDlEdBIfy1CVJQVU7LmNWqqz5nG3EBIWJSqMQkhOg+fTHIPHTqUTz75hGuvvZaSkhIeffTRs8qkpKTw/fffExwsSafWqDfBXXbK8YoZ0PYBCeEj1pd34wvTTQy1r2V3zDz+b3i82iEJ0akEBEcQMOl2OLUXBl8NfgFqhySET6i22floZzHlEXcztvxnxowZT2BwmNphCdGpDJlzF3x/FCoL4PhOyFgDSZPUDksI1VVuepcAWwnVQGXUQMaMPV/tkIQQnYjPVuGdM2cOu3bt4ve//z0pKSkEBAQQFhbGiBEjePrpp9m+fTu9evVSO8wOJzttHyXfPASr/wXHd6kdjhCq0Wk0VAV0ZUXIXK4d2xN/P53aIQnR+fQYCyNvdia4zdU2lQP6//buO76q+v7j+OuO3OxBEgIkhAQIYSpbAVFEFKU4iqPVDtFqtdpfa63ddXRqtdo9rNsOi6Naxa0VUIbKBtkhgyQQsufNzV3n98eBCxECAZKce5P38/G4D+65Z9zP1XzvOfdzvt/PV8R6UQ473zo/n0HpKbSe9iVGTT3f6pBE+h5XnHl+AnDFg03XiSIYBmmpaYwcmEy/pERGXvwtbPawTTmJSC9kMwzDsDqIntTY2EhycjINDQ0kJWl234P8gSAvrS8nsPLPnO7byMgBiTgcTjjzZhg2y+rwRLpf1Q6zF86UG0LDTevdXtYU13H+mAEWByfStxmGwZqSOv71YQnXnzWU8dkpVockYjl/IIg3ECTOFZYDM0X6hh1vwJDp7PNGs6KghismZWFT2RLp62p2myPDc6ZbHYmI9BKdzeXqtpoA4LDbKKxu4b3ES9nhyKei0QNGAD78C3zyIvSteyHS11R8Akt+CbvegdWPhf7eU+JcSnCLhIGt+xp5eOluaKmi6LUHaW1ptjokkZ7nbYEVv4emCgCcDrsS3CJWGzmPJXu8/OSVLbyxeR+rCmusjkjEemnDleAWEUsoyS0A2Gw2rpuRi90ZzWvJX2BJYDwtXr+5ctOzZuIvqGHi0gsVLoWl94G/DcMwoHk/BHxWRyUihxkzKInzEvfwpZo/ktuwmo2v/83qkER6XPl7jxAsXgGvfwfK1lgdjogckBrnwh8wO0gs+riUBnebxRGJ9KyC/Q386b1d1Lu9VociIn2cktwSMiAphs9OzMKw2VmScAmvMIvgwR7cBe/C+w9CW5O1QYp0FX8bfPgwfPhXCJo3dNYGhvOk83O0BPTVKBJObDYbF82cisNmnpNiCt+hePs6i6MS6Tm7N39I1cY32bW/mRafAf1yrQ5JRA4Yn53CGUNTiQm6OatyERtfesjqkER6jNfrpeL572Lf9gp3vbSR0lq31SGJSB+mTI60c8GYAeSmx4PNxrtMZ2XGNWA/MBR27zp4/Xuwf6u1QYqcqsa98PadULgk9FJZ2gz+FriM5YUN3PfGNoJBlegRCSdpA4Zgm3D1gSWD/e/8Hm+bx9KYRHqCp7WFmvf+AECrL0BB5mUQn25xVCJyuGumZvGFhkcY6dlAUtkytm5YZXVIIj1i/ZtPktBSwozmt7nEs5islFirQxKRPkxJbmnHYT9QtsRuTpjy9L5sKibdbs4aDtBaByj5JxGseAW8+QOo32MuO1x4pnyN3zTMImhzADBv3KBQGxCR8HH6edfgSRoKQLS7go1vPmFxRCLdb9Prj+DymHV+W/vlc/q5V1ockYh8WlJcDGmTLwstNyz9E253i4URiXS/sqLtRG1/2Vyw2Tn9/C/oN5SIWEpJbjlCdmoc808bBEAwaPDozjgCFz0AA8bB6IthwFiLIxQ5SXvXw8o/mKVKAJKy4KL7WFSVS4PbrMM9NiuZGcPTLAxSRDpidzjInf9tjAM3pJw7FlNeuM3iqES6T8mODbh2vwVA0B5F3sV3YLPr8l0kHI2ceSX+1BEAxLZVs37xwxZHJNJ9/D4vpa8/iN0w5+0Kjr6UgTmjLI5KRPo6XSXLUc0/fRCDUmIAKK5u4Z1iP5x3J5x+dfsNAz7Y9Bx4GiyIUuQEDZoAaXnm89yz4cJ72dKSyAe7qgGIiXKwcHoONpt6IIiEq4FD8gmMNnvL2YwgpW/+Br9PEx1J7+PztlHx9m/hwPwottOvon9mrrVBiUiHbHY7wy/5LoY9CoD44nco2KJJYqV32vD2P4htLgXAGz+I0y/8isURiYgoyS0diHLYuW7GUGw2s2f3mEFJYLOBw9l+w11vwyf/gcW3wZb/gl+JBgkThgG1Re1fs9lg6g0w45sw/et4iOLplcWh1VdNGUxaQnTPxikiJ2zChdfRFp8JQHxLKfVrX7Q4IpGut+HNJ4l2VwDgSczh9DlftDgiETmefgNzcE48NH9Ezf9+j7+t1dKYRLpaxZ6dOLb8x1yw2ci86A6cLv2GEhHrKcktHcrLSOD2C/K5c/5ohqTFHblBMADbXzOf+1ph47/h1duhcCkE/D0aq0iIYcCej+CtH5m1t6t2tF+fOgxyzwKbjf+sK6Om2bwxM2pQIrPy+1sQsIicKKcrmswLbyc5NopRAxNJL14M7lqrwxLpMuXlpTi3vwKAYbMz5DN34HA6j7OXiISDceddgzdlGNFOO2MT3Ti3PG91SCJdJuj3U/Lqg9gOlCnx5V/M4LzTLI5KRMSkJLcc09jMZJyODv5M7A6Y+wsYfh5woLyDuxo+/Cu88n/wyYvgaeyxWKWPC/jNGyyv3QHLfwO1hebrqx83b8h8ys79Tby3rRIAl9POwum5KlMiEkGyR5zO0HO+SFRCGpx9B8SlWh2SSJfwB4I8uraRV5K/RJMjhcCoy8jMHWl1WCLSSTa7g5Gf/T4jM1NJiHbC9teP7HQhEqFKViwiuqkEAE/cQMbPu9HiiEREDlGXEDkh/kAQty9AUoxZa464VDjzZhg5D9b/C/ZtMF9vrYNNz8KWF2HoLDjtKohNsSps6c0a90HRMih6H9w17df1y4WxC8B25I2aDwsPbXv5pMFkJMV0c6Ai0uVOuxLGXAqueKsjEelSpw9O5vW6Efyv/3f58UXqIScSaZIH5ML4z8OGfwEGFH8A/XWzSiJcMMDQ5g3Up8dRVudh0NzbcUXrN5SIhA+bYRyYzaaPaGxsJDk5mYaGBpKSkqwOJ6LsqXHz+PJC4qKdfO/CkUfv9Vq5zSxhUrYGOPCn5YyGz/5VSQjpWtUFsO5pqN555LqM0TDmMnOiyQ56ZxuGwfKCatYU13HbnBHY7erFLRLJmtv8PLu6lLljBpCdepQSWyIRprCqGafdfvSScSIS/oJBWPYryJlBMOccimrdDO+fYHVUIqfG3wYbF+HHiXOy5ooQkZ7R2VyuktzSKcGgwY//+wmVjR4ArjljCOePGdDxDk37YeebsPs9GHYuTLm+/foNz4ArAQaNh5QhHSYiRUKCAbNEzkENZWZpkoNsdsicBKMvgYxRnT6sYRgqUyIS4crrW3norR00uL3MiC5k4VWX44xyWR2WyIkJ+KH0Q8g5S9dFIr2FYVDZ1MYTK4rZXdXMnfNHk5Omjj/SCxiGzlUi0mM6m8tVuRLpFLvdxrXTc3jwLbOe3Atryzh9cHLHJR4SB8DkhWaZkuCnJqH0tpi9vYN+cwhfTAoMPM1MeA8Yq7qqYvI0QNVOqNoGezdA1mSYeFhvgeTBkJYHfo95IyV3JsT2O+G3UYJbJPJlJEbT39nCrIZF5LTtZMPbTUyZ/1WrwxI5IZ4NzxGz42Vzfokzvwbx6VaHJCKnymZjVWENu/Y3AfDYB0XcfckYojqa80gkDFU0eCipaeGMoamHfjvpN5SIhCEluaXTRg9KYvaoDJZsr8QXCPL48iK+f9GoY5d5cB1liG3F5vaJb0+9Waeu+ANzOS7NTF6mjzAntVSZk97P74WGUqgvgepdZtmbpn1HbjfxU0Pizv2BOSKgkxdZb35SweB+sYzLSu6CoEUkXEQ57Hx5fDJVuwsAcGx5kb1jziZzaOdHdYhYqbRgM7Xv/YOBiS4ybFuwtTUpyS3SS8w/bRDr99RTWusmav9GVr+xhhkXX2d1WCKdEgwEWP/ig7wbmMya4SO4bkYu8dFKI4lIeNItZDkhV04eTP/EaAAKKpt5Z9v+Ez/IkGlw8W9h8nVmeQnHp4aUu2ug9CNzIstPTxi4fyuUrITaIvC6T+5DiHX8XnM49uF2L4HnF8JbP4KP/maWuDkiwW0zb3b4PO1fjk7sdIK7oLKJF9aW8tt3dvLMR3tO/jOISFganDcO/8hLALAZQfa8/iB+n9fiqESOz+f1sPeNBzGCQfY1eNiWdgGkDrU6LBHpIk6HnRtmDuW85sVcWv934rYuomTnRqvDEumU9e/8i0GVH/CF2j/hKv0Ah+YxEpEwpltwckJiohx8ZeZQHnhzO4YBL60r5/TByQxKjj2xAyVlmo+R8yDgMycPrNhs/ltTYE5okZINUZ86bsE7ZpL7oOgkSMiAxIFmD/CYFLNkRcoQSM465c8rJ8AwwNsMrfXQWgst1eYNi5ZqcFdD835oqYE5d5llaQ6KTwcj2P5YNof5A7//KHMSyf4jzYT2SfL4Ajy+vIiDMxAkx0ad9LFEJHxNmHcD60pXE92yl5jmUja89RRTLr7J6rBEjmnD648R7a4AwJM4hHGzv2RxRCLS1bJT4xg1bChs/ggMg31v/YaBOQ8THX2Cv6FEetC+PQXYNj0LgIMAc88YT0yU4zh7iYhYR0luOWH5AxI5f/QA3tm6H18gyBPLi/jhvNHHLltyLI4oM+l5MPEZDJqlK3xH6aldX9p+ua3RfNQUtH991MUw6cuHloNBWPILiEk2k6VR8WYplag4s4fw4f/Gp5sx9UWGYZaS8XvMGw3eZrOGelsz+FrM594W86bCsHPb7/viTeb/i+Np3Nc+yd0v17wp0W8o9Msx/00bDs7oLvtYz68to7KxDYBh/eO5aNzALju2iISPKFc0WRfdQdWL38VmBHFsfYnyMWeTNWy01aGJHNWenRuI2vkqAIbNQc7872jSVJFeasLcL7OmeBXRTSXEuCtY99rjTL/8/6wOS+So/H4/ha8+RLxhjsL15V1EzqhJFkclInJsSnLLSVkwKYuNZQ1UNnoorGrhrS0VzDttUNcc3G43k51HM+ELUFds9gpu3g9N+81ew5/26QkI2xpg/5bOvf+F95pJ1oNKVpkTZDpc4IwBp8t8fvBhd5plVWKSYcI17Y9Vsgoay81t7A6zh3Lo38NKsSRlmb2VD7d7yWE9nI326wzACJgJ6cFTzd7sBzXuhV3vmOuMoPlv8MC2RsAsFxJoM3vQz/15++OufQp2vnn8/0aZE49MckcnHDvJHRVn9t6P+tRkpdGJ8JlfH/89T9KWvQ0s3V5phuCwc+PZwzTMTqQXG5w3jopRl+Lc9l9sRpCyNx5kwE1/VeJQwo63zcO+t35D9IFhRsFxVzEoZ+Rx9hKRSOVwOhl68R3sffZ2CAaI3fUqBdvPJm/UeKtDEznC2rf/RXxTIQC+uAzGf+ZmiyMSETk+JbnlpEQ7HdwwM5dfvbEdsOELGsfdp0tkTTIfh/N7oaUS3LXmJJatdTBgTPttWus7/x6fnujS2wwtVcffLz79yCR38XIoX3P8fUdccGSSe/Vj7Sfo7EjCwPZJbnct7Hj9+PuBmfB2HPY10Nne097mI1/rPwri+x8oGZMCcekQn3bg33RLJhB1e/08sbw4tHzVlMEMSIrpeAcR6RUmzLuBtXtWE91STnRzGbuX/pORF3zF6rBE2tnw6sNEu825TVqThnLG3C8fZw8RiXQZQ0ay77QrMTY+CxhUv/Ugg3MeJia256+TRTpSVridqE+eMxdsNjIv/DauGJXWEZHwpyS3nLS8jESunjqE4RkJDE238MLM6YLkweajI6lD4aqnzGS3t8UsheJtOVCCw33YsvvI2s82m1n7O9BmJtQ/3as6tN1R6pN9utZ0d/h0Itx+AnXSAm3tk9wJA8wa2I5oM+HtSjCT06749s9jU4481pnhd3f/mY/2UO82J54bk5nEeaMyjrOHiPQGzigXg+d9m9qXvkdmsovU6negdrYm85OwUbx9Ha7d5sgpw+5k6MXfweHUZblIX3D6BV9mTfFHRDUUM9hZj2P90zDjVqvDEgHA62ml/LVfEX2gTImRP4+s/IkWRyUi0jk2wzB6qAtueGhsbCQ5OZmGhgaSkpKsDkcizcGa1QGvWbM64DVLgRgBs2TJpxPtNbvN3uXB4IHyIoFD/wYDcLBqRtJgyBjVft/dS+gwoQ4HyqQ4DvSgTjv0utcNDWVmstvuOLTdwZIpdsehJLat95btWFtSx1+WmLXaY10OfnbZOFLjVa5ApC/xrvs3ru3/hZyzYMr1pzSBrUhX8fgC3PvyGkaXv8Roz3qCE77EpAvVi1ukL6neW0TUOz8iOepAh5izvgU50y2NSQRg44sPYux6B4C2hMFM/upfcLq6bq4kEZGT0dlcrrqMSJcLBo2Tn4Qy3Nls5qSUjqjOld84vLb3iRo+++T2c8VB//yTf99eIBA0eH7NoUlKv3DGECW4Rfog1/irYOAocx4BkTDR0OrD74jj3eQraM46ixvO/4zVIYlID0vPHAozb4KPHjZf2PAvyD7jxEZkinS1hnLGuD+mLDaKOg9kX/wDJbhFJKKoJ7d0mUDQ4I1P9rFhTz0/mDcKp8N+/J1EuklVUxtPrCgi3uXg67PzsPXiXusi0jkbS+uJj3aQl6Ee3WKtNn+Al9fv5Zz8/gxM1lwRIn2SYcCK35ujPqd/g0ZHEkkxUVZHJX3d/q0Yq/5Ibe4lpE3QTVgRCQ+dzeUqyS1d5rEPClm1uwaAz5w2iCsmH6NGtkgPMAyDNn+QmCj1ihHpy7z+IItW72HZjiqyY9r4waUTiIlLsDos6Wu8B+YBSehvdSQiEi58HgxHFEt31fD8mlJuPHsYk4b0szoq6eu8boiK7dWlLUUksnQ2l6uuttJlLhgzIFSm5I1P9rFrf5PFEUlfZ7PZlOAWEZx2G3vrPYzwbGZe6YNsePn3VockfVBw9RPwxneh6H2zB6eISFQMn+xt5p+rSmjzBfn7ymKaPD6ro5I+Zk+Nu/3fnStOCW4RiUhKckuXyUmL57MTsgDzt9ujHxTS6g1YHJX0FYZh8PaWCjw+/c2JSHt2u40bp6Yxt/klooOtxOx5nx1r3rM6LOlDtn30FgUfv4HH3QxrnoC2RqtDEpEwMS4riQnZKQD43I1sXXQnRn3psXcS6SKeXUtZ/Z+HuOulzazfU2d1OCIip0RJbulS88YNJG+AOQS8ptnLMx/vsTgi6SuW7Kjk2dWl3PPyFgoqNYpARNpLT+9P1BlfCS03vf9nGutrLIxI+oq66grcyx/G7Q2wc38TdaO/BDHJVoclImHCZrNx7fRc+jvdXFH3GNH7N7D/lXugReco6Wb7NlLx1m8ZXrecsyqf4Z0te+lj1WxFpJdRklu6lN1u48aZw0IlIlYWVLO2pNbiqKS3q2jw8NzqMgCqm9vw+IIWRyQi4WjczMtozZgAgNPXzJaXHsAI6vtCuo8RDLL9pftx+N0AtAw8g5Qx51kclYiEm+S4KD4/Ix+/zQlA1f5y3G//DNrUcUO6Sc1uat68j/oWDwDBqDhumDkcm8qUiEgEU5Jbulz/xGi+cOaQ0PLTK0uod3stjEh6M38gyCPvF+ILmImqc0dlMC5LPeRE5Eg2u50xn/0u/ihzxFFs5QY2L3vR4qikN9vwv38TW7sVAJ8rhdM++21sdl1+i8iRJg4bRNWk22lwpBIIQlnxLoJL7wd/m9WhSW/TuBfPu79gb3U9ALujx5B74TdIS4yxNi4RkVOkq2zpFjOGpzEpx5wZvKXNzxMrijX0SbrFS+vLKalpAWBAcgxXTR5scUQiEs6S+6WTdO43Qsv+NU9RUVpgYUTSW1Xs2QUbngktp55/OwlJ/SyMSETC3RVnjWV59k202hNwewNUFm6G5b+DoOackS7irsV475eU7askEDQod+VSP+FrnDm8v9WRiYicMiW5pVvYbDYWzsglOS4KgHq3l6Y2v8VRSW+zbV8jb22pAMBht3HzOYdK5YiIdCR/0rm0DZ0DgD3oo/y1+yHgszgq6U28bR5KXrkPW9C89vHmXcTw06ZZHJWIhLuYKAfXnDeVl/stxGdzsb/RQ0vRx7D8t+rRLaeuaT/872dUVpTR3Oan2jmQlVnXc82M4VZHJiLSJZTklm6TEO3kK2cNZfaoDO6cP4akmCirQ5JepLnNz6MfFHJwgMDlk7LISYu3NigRiRgTLvsGbXEDSYh2clp8PWz8t9UhSS+y/pU/Ed1SDkBbfCYTLr7F4ohEJFIM65/AWVOn8GrKl7A7ozAAylbD/34Gngarw5NIVbMb3r4Td00pFY0emhwpLO53LQtnjSXO5bQ6OhGRLqEkt3SrcVnJfGlaDi6n/tSk6xiGwdMri2lwmz0vRw9K4sKxAy2OSkQiSXR0LKOvvIvhA1NwxSVDxhirQ5JeYv2eOt6qHUSrPZ6gPYqcS3+EK1p1TkWk8+afNojJZ55N3pU/IyH+QCeOmgIoXGppXBLBNj1H0NNASY2bWkc6/+l3A7MmjCR/QKLVkYmIdBndspMeFwgaOOyatVlO3qayBtaV1AEQH+3kxrOHaiZwETlhSYPy4KxvQdpwiEu1OhzpJfY1eNgTk8+/nN/gutEBBg4ZYXVIIhJh7HYbl47PBDIh8aew7H7IGA2jL7U6NIlUM/4P+9t3kRwdw6OeS0hL6Xfgb0xEpPewGX1sNsDGxkaSk5NpaGggKSnJ6nD6nIoGDw8v28380wcxNVcJBTk5hmHwztb9/GddGV+bNZyJQzSRl4icOrfXzwe7qpk7ZoBunMkp2bq3kbUltXxpWo7+lkTk1LlrCUYl0BywtS8BaRig7xg5mqP9bbhrITqRSrc5kWlGokYZiUhk6GwuVz25pcdUNnr46eIteP1Bnl5ZzND0eNIToq0OSyKQzWZj7tiBTM1NpV+8y+pwRKQX2F3VzN+W7aamqY3YllLOOWOq1SFJpKkthH5DwWZjTGYSYzLVmUJEukY9CTz2XhHNbX5+9JnRZinIPR+Z5UvOvAli1eFDDlOzG9Y8ATNvh/j0Q68fGLWWkai5skSkd1KhZOkx/ROjmTgkBYBWb4BH3i/EHwhaG5RENCW4RaSruNsCNDU2MK9hEYlL72bPzg1WhyQRxLd/B7z1Y3j/QWhrsjocEellHnm/kG37GimtdfP82lJorYOPH4G96+C175gJb5GAHzY9D2/fadZw//Av+PwB1u+pszoyEZEeoSS39BibzcaXp+WGem/vrmzmpfXlFkclkWJtSS2flGtGeRHpHqcNTuba/rvIa9uCzQhS8fr9tDTVWx2WRIDmxjo2LvoJVY2tGOWroeB/VockIr3MNWcMIcph/nR/b1slWwp2g91hrvQ2w/LfwMo/gafRwijFUnUl8M7d8MkLYBzoSObz8NKHO/jTewU8sbwIjy9gbYwiIt1MSW7pUbEuBzfNGob9wMSTb35SwcbSemuDkrBX0eDh8eVF/O7dnby4row+NpWAiPSQqRd9GU/ycABcbbVs/s8DGEGNOJKOGcEgm1+4D6enlvL6VgqCWTD6EqvDEpFeJjs1jqvPyA4tP/yJg9pZv4TsMw5tVPwBLP4mbPkv+L09H6RYw10LHz4Mb3wfanebr9nscNpVrB91O28VtADwUVEN1c1tFgYqItL9lOSWHje8fwJXTR4cWn5seZFOuNIhrz/Iw8t20+YLYhhQ2+LVJF4i0i2cUS7yL78TvzMegJj9a9n43rMWRyXhbP3b/yC2aiMA/qgE+l/4vUO9K0VEutCs/P5MzjVrb7vb/Pz1wyr8078F024F54EJBH2tsPHf8Oq3zHrdulHbe3ndsHGReWOjcAlwoBNQ4iCY+wuqci/h8ZWloc2vnjqEwf3irIlVRKSHKMktlrhgzAAm5Ry6SPvbst2qzy1H9eyaUkpr3QAMTI7hS9NyLI5IRHqz1IxMkmZ/M7RsrPsHZQWfWBiRhKuSbWuxbVpkLthspMy5nZT+g6wNSkR6LZvNxnUzcklLMOekKaxq4bm15TBsFlz8Wxh+HnCgI4i7Bj78K2xfbF3A0r1W/B62vAQBn7kcFQvjr4F5D+BNHspflhbQ6jXLk0zK6ce5I/tbGKyISM9QklssYbPZuP6sQ/W5C6taeGFtmcVRSbj5qLCGpdsrAYhy2PnarOHERKmHnIh0r/xJ5+LNmweAzQiw97V7VZ9b2mmsr6HyzfuxHah76h91GXnjZ1oclYj0dnEuJ7ecm4fjQOnH/23bz8dFtRCXCmfeDJ/5NWROMjd2xcPwORZGK93qYGksuxNGfgYu+QOM/Sw4XSxavYc9NWYnoYykaK4/K1cjYUWkT1CSWyxjXqQNx2G3YbNBXLRTtZYlpLy+ladWFoeWrzlzCNmpGmInIj1j0qW34kkaCoDLU8O+Nx8EnaMEsw731hd+SZTXnAzZkzqSSfNvsjgqEekrhqbH84Uzh4SWn1pZREWDx1xIyYZzvw9z7oYpN0B0Qvud1z4Fq/4CFZ+olEkk8HmgeAW89wsoWdV+3cBxMOELMP8hmLwQYpIAWLm7mmU7qgCzk9Ct5+YR53L2dOQiIpbQt51YKjc9noUzcukX52JMZpLV4UiYcHv9/HlJAV6/efE9Iy+dc0akWxyViPQlzigX+VfcRfE/v0F2fJB0307Y+SaMnGd1aGKxj95ZREzNFgD8UYmMufxO7A6NMhKRnjMrvz8Flc2s2l3DtGFppMa72m8wYOyRO7U1QcG7ZnmLomUQ2w+GTIOcsyAtD9TTNzwEfLBvI5SsgLI1EDgwiai/DXKmt992zGXtFsvq3Px9ZUlo+UvTctRJSET6FCW5xXJn5Sl5KYcYhsGTK4rZf6BHSnZqHF+elqMhdiLS41Izsoi/6m6iP/gVDJ4CQ2dZHZJYbGNpPU/tzeH8mHHktW0hde53SUrLsDosEeljbDYbX5qWw8QhKUzOSe3cTnUlYI86VMO5tQ52vGE+4tNh0AQYeLrZQ9gV322xy1G0VJuJ7YpNsG8T+NxHbuOpN29URCd2eJhFH5fiOzDP1cwR6cxUJyER6WNsRh+rD9HY2EhycjINDQ0kJanncLgqrXUzuF+sEpt90P5GDz9/dSut3gCxLgd3XzKGjMQYq8MSkb6saiekjwj1cjMMQ+enPqq8vpU/vVdAZUMr1470MWvGWVaHJCLSeT4P7F1n9hLeuwGC/iO3sTng8r8dM5kqXah0NXzw4NHXuRIO9LafAf1Hg/3Y1WYbPT4efb+QJo+fH31mNC6nqtOKSO/Q2VyuktwSVgzD4O2t+3l+TRlXTs7ionGDrA5JLFDZ6OEvS3ezYGIW47NTrA5HRCRkU1k972zdzzfOG6Efj32U2+vn/Z1VXDh2oG52iEhYKa110+YPkpeRcPyNvS1QthpKVsL+LYcS3ilDzAksD7fh32bP77ThkJxt1v5WEvz4DAPctdCwx+xJX7MLcs+BIWce2sbTAC8eNq9DVBxkTYbcs2DAaeA4scH3waBBs9dPUkxUF30IERHrRWySu7i4mMWLF7N06VI2bdpEeXk5wWCQ9PR0pkyZwtVXX82VV16J03lylVaU5A5vxdUt/PzVrYDZYe72C/IZm5lscVRihWDQwG5X8kBEwseS7ZX866MS4v0NXJZSyOwFN2I7Tq8q6QUMAzY9C8PnQEJ/q6MRETmqtSW1PL68CJfDzt2XjD2yTvex+DxQtc0slRGfDqPmt1+/+DZoqmj/Wmw/SB5sPhIGmI/UYRCbcsqfJSI17oX6UmiugKb90FBqPnyt7bfLOx/O+Gr71z58+EDJmPGQOvy4PbZFRPqaiExy33XXXfzyl7/keCFNnTqVF154gSFDhhxzu6NRkjv8vbyhnFc27AUgPtrJ3ZeMIT0h2uKopDv5AkGcdpt6xIlIWCutdfPUi69yQd2/iQm6MSZ+mYlzv2R1WNLN9iz/N4NLXsIenQhn3QaDTrc6JBGRdgzD4Lfv7mJLeQMAQ9Li+MG8UUQ7u2BSXK8bXvzq0UubfNq0W2DYuYeWm6tg+2KITTWT364E8xGdYNb9diWAIwx7HBuGOdGjtwW8Tea/bc3m89Z68DbD5Ova77PyT1D8wfGPnZ4Pc3/eJWFWNHh4fk0pC8/KVc9tEenVOpvLDauJJ/ft24dhGMTHx7NgwQLmzJnDiBEjiImJYdu2bfzhD39g9erVrF69mvPPP59169aRkNCJoVgSUS4dn0lxtZtNZfW0tPn503sF/GDeKGKiuuAiTcKOYRg88n4hTruN688aquH/IhK2slPjuGJsIt73zQmhbBv+ScGAXPLGz7Q4MukuBRtX0Lzyadqi7OSmG0QdnLBNRCSM2Gw2bjpnGL94dStVTW3sqXHz9Mpivnr2sFPvROKKgyufhPoSqCuG+j1mD+X6UjPZe7j4T03E21gGO9869vGd0eBKhEv/2L4Hc+EyqN5pJsEdLnPSzIPPHa5D28ZnmJNlHq54OQS8ZrI6GICgz0xaB/3m6wGvOQHn8DmQnndov6od8MFvzM91vKT++C+A87De8gkDjtwmLt0s7ZIyxOzxnjoMkrKOfdxOcnv9/OG9Xexv8LBn8VbumDuSgcmax0hE+rawSnKnpaVx//33c8stt5CY2L7G1+TJk7nmmmv4whe+wHPPPceuXbv4zW9+w913321RtNJdbDYbXz1nKD9/dRuVjR5Ka908vryIW88drp6+vdArG/eyrqQOgCaPnzvm5uv/s4iErTHT57G6soio7S+DYdDw7oNUpmeRkTXU6tCki1WUFtDw7q9xGAYt3gBbUi9gwuDJVoclInJUCdFO/u+8PO59fRttviAfFdYyJDWei8YNPPWDO13mBMzpIw69Zhhmne6mCmjebz6SP5XAddce/9j+NnOyy0+X6KjcCoVLj79/zowjk9zr/m7Wuj6ejNHtk9x2J3jqj78fmJ898bDE9qDTwe44VLolaZDZW70bBIMGj75fxP4GDwBxLgcpcerJLSISVuVKOqOmpobMzEy8Xi+nnXYamzZtOqH9Va4kcuytb+WXr2/D4w0AMP/0QVw+abDFUUlXWl1cy8NLdwNmDfZvzhnB6YNTrA1KROQ4jGCQD5/+IbGVGwBoixvAadf/kbgEzSHRWzQ11LLtqW/g8lQD0JoxgWkL71MNdhEJe2tLavnLkkPX17fNyee0wRadn9qazVrV7hpoazJ7SHubD5T+OFAKpK0ZomLhwl+233fF781JMY8nZ4ZZSupwL97UuST3GTdB3pxDy81V8O49R5ZUcR32PLYfxPUzJ+C0qNTKf9aW8frmfYBZ3vOui8fQP1HlPUWk94rImtydNXXqVNasWUNcXBwtLS0ntK+S3JFlc1kDv//fTg7+ld4wcygz8tKtDUq6xJ4aN/e+vg1fIAjAVVMGc9G4QRZHJSLSOR53Mxuf+AbRLeYcEq3p4zhj4f04TnJibAkffm8ba576DjF1OwFoSxjM+K/8gZjY7umRJyLS1f67vpzFG83zU0yUgx/MG0V2apzFUZ0gdy20NZplRUIlRg4rN2KYvyFIGHBkT+6iD8xtwOyd7XAdKHUSZZY9cUabr8elmcnsCLJ8VzVPrigCzBHQ374gnzGZymuISO8WkTW5O6utrQ0Ah0M1mnu70wYnc/XUIfz74z0APLemlEk5/VSfO8LVu7384b1doQT39OFpXDi2C4ZSioj0kJi4BIZf+TOKn/kWTl8zsdWfsO7l3zP1ijusDk1OgREMsuaFB0IJbp8rifzP/UIJbhGJKJdNyKS8vpV1JXV4fAF+/79d3Dl/NClxruPvHC7iUs3HyRh6dtfGEia27Wvk6VXFoeWrp2YrwS0icpiIG3NZWVnJtm3bABg9erTF0UhPmDM6g3NHZZCeEM33LtIElJHO4wvwu3d3Uddi9q4Y1j+ea6fnqg63iESc9IHZpF30AwybHYfdxqiGlbD9NavDklOw/u2/E1O6HICgPYqBF99Fv/4aZSQikcVms3Hj2UPJTTdv0DW0+thddWIjoCW87K1v5c9LCggGzSHOc0YP4PwxR5nsUkSkD4u4nty//vWv8fvNmY4/97nPHXf7tra2UM9vMLu4S2Sx2WxcMzUbz8QsEqIj7k9WDuMPBPnr0t2U1roBSI138fXZebicEXe/TUQEgKFjprKt9mZyd/+T2CiHOYGWRKS1JbWs3l3FtAPLsed8g+wRp1sak4jIyYp2OvjmeSP4zTs7+NzUbMZmat6ISNXk8fG7d3fSemCuqvHZKVw9NdviqEREwk9EZQw/+ugjfve73wEwePBgbrnlluPuc9999/HTn/60myOT7uZ02ElwtE+EGoaBP2gQ5VCCNFK88UkFn5Sbk8DEuhzcfkF+ZA2bFBE5itEzPwvJfohPh2HnWh2OnKSPi+pYE38udY40zh9iY8KZF1odkojIKUmOi+Inl47ViMkIF+dyclpWMkt3VJGdGsdN5wzDbtf/UxGRT4uYiSf379/PlClTKCsrw2az8e6773Leeecdd7+j9eTOzs7WxJMRzh8I8tTKYjy+ALeem6eTfITw+AL8Zelutu9r5I65Ixk5MNHqkEREupxhGLzxSQWThvRjYHKM1eFIJwWCBv9YVYw/aHDDzKFKColIr1Ve30pWSqzVYcgJMAyDpTuqmJCdQr94dRISkb6lsxNPnlSSuysu+p988kmuu+66Tm3b1NTE7NmzWbt2LQD3338/3/ve907qfTv7H0bC21+WFrC2uA6AWSP78+VpOfoxGiH8gSAltW6G94+smcxFRDrDHwjyjw9LWL6rmnFRZdww/xySUtKsDks60lINDaWQOREwkwhBAxy6eS4ivZBhGLy2eR//XV/ODTOHMX24zk8iIhL+OpvLDfs6Dx6Ph8suuyyU4P7Od75z0glu6T1m5fcP9d5etqOKxZv2WRyRdOTT99GcDrsS3CLSa/mDBsXVLYxs3cC5ZY+w9Zkf4m5usDosOYrmxjpa3/45LHsAdi8BzI4cSnCLSG/1SXkjL60rxzDgiRVFbCyttzok6cCrm/ZSVK3JQkVETsRJ9eTevn37Kb/xoEGDSE4+9uQXfr+fyy+/nMWLFwNw44038uijj57S+6ond++xancNj31QGFq+dkYus/L7WxiRfNr2ikYWfVzKN+eMIFXD6kSkj6hraKTgyZuIajNHHLWm5DFp4a+JjomzODI5qM3jZv1T3yGxuZBh6QnEpmXBvF+DU+cqEem9DMPgnx/tYen2SgCiHHa+c2E+eRkqIRhO3vykgufXlBIdZef/Zo9gTKbyFiLSt3VruZKeEAwG+eIXv8iiRYsA+PznP88zzzyD3X5qnc+V5O5dDl4AANhs8NWzh3HmMA27Cwe7q5p56O0dtPmCpCW4+MG80Up0i0ifUVFaQNnz38fpawbAkzaWydfeR5Qr2uLIxNvmYd0/fkRMzRYAjJhkxl//B+xJAy2OTESk+wWDBo98UMjqolrAnAz++xeNIjtVN2LDwfJd1Ty5oii0/KXpOcwemWFhRCIi1ov4ciU333xzKMF9ySWX8M9//vOUE9zS+1w0biBzxw4AwDDg0Q+KWFtSa3FUUlrr5nfv7qLNFwQgKyWOpBinxVGJiPScgdl5DPrszwg4zIknY2q2sPaZnxLw+y2OrG/z+7ys/dfdoQR30BFNxiU/VYJbRPoMu93GjTOHMvZA7+BWb4DfvrOTykaPxZHJ2pI6nlp5KMF92cQsJbhFRE5AWGaNv/3tb/PYY48BMGfOHJ5//nmcTiXI5Og+NyWbWSPNMiWGYfDwskI2qL6cZSoaPPzmnZ2428xEzsiBidxy7nCcjrD8uhER6TZZw8aSfvE9BO3mKJaY/WtZ/ewvMYJBiyPrm/w+H6uf+QmxVRsBCDpcpM2/h6xhoy2OTESkZzkddm6dncew/vEANLT6eOCtHUp0W2j9njr+tmw3B8fZzxk9gEtOH2RtUCIiESbssk4/+clP+O1vfwvAjBkzePnll4mO1tBe6ZjNZuPL03KYkZcOmEPw3ti874gJD6X7VTZ6ePDtHTS2+gAYmh7PN+eMwOUMu68aEZEekTNqEklzf4BhcwAQU7aSzS8/BDpH9ahgIMCaRT8ntsKcyDxojyLlojvJGT3Z4shERKwRE+XgtvPzyeoXC0Bdi1eJbous31PHX5fuJhA0rw2mD0/jmjOysdk0EbKIyIkIq+7Rf/zjH/npT38KQFZWFg888ABFRUXH3GfkyJFERUX1RHgSxmw2G9fPyMUfCFLd3MZt54/QRUEPq2jw8MBb22lwmwnuwf1i+dYF+cREOSyOTETEWnnjz2K799u0LnmIGCfkNX8Ma56AqTdYHVqfYBgGHz73a+L2fmQu2xwkzf0Bw8adaXFkIiLWSoh28p0LR/LgWzsor2slGDQI6CZsj/p0gnvasDS+ctZQ/ZYVETkJYZXk/s9//hN6Xl5ezsyZM4+7T1FREbm5ud0YlUQKu93GjWcPwxcIKrHaw8rrW3nwrUM9uAelxPDtuSNJiA6rrxgREcuMmno+O4J+hu560rw5P2S61SH1CYZh8PjyIvY0DeVS2wocBIg///vkjT/+NaaISF+QFBPFdy4cyWPvF/KFM3MYmBxjdUh9Rr3by8PL2ie4b5g5FLtdCW4RkZOhDJT0Kg67DYe9fYK70eOjqKqF8dkp1gTVB6wprg0luLNT4/j23HySYjTCQkTkcCPPvAgG9YOoWBgwBgCPL4DTbtO8Bd3EZrMxJDWOVa5hvNzvOr44IZn8SbOsDktEJKwkxUTx7bkjrQ6jz0mJc7FwRi5PLC/izKFKcIuInCqb0ccKFzc2NpKcnExDQwNJSUlWhyPdzO3188CbOyirc3PdjKHMHJFudUi9kmEY/PvjUnZXNXP7BfnqwS0i0glt/gC/f3cXsU47X5uVS1SUy+qQeg+/FxxRcGC496ub9pKVEsvEIf0sDkxEJDL4A0GeXlXCeaMyGJoeb3U4vdqOiiZGZCQowS0i0oHO5nKV5JZe7Y3N+3hhbVlo+eozhnDBmAEWRtR7GYZBm1+lYkREOutP7+1i/Z56pje/w9joSsZf81PiEpKtDiviBT1N2Jf9CvqPgolfCiW6RUSkcw6Welq1u4boKDtfn53H2Eydn06VYRgUVrcwvH+C1aGIiESUzuZyNTZWerWLxg3k/MOS2os+3sPLG8rpY/d2utzK3dVs2dvQ7jWbzaYEt4jICZgzegBnej5gSssyYmu3sfmp26mr2md1WBGtoWY/qx+/nYaybbD9Vdj2itUhiYhEnDZ/kOpmr/ncF+T37+7i46Jai6OKbAdHvt772jaW76q2OhwRkV5JSW7p1Ww2G1dPzebSCZmh117ZsJfHlxfhCwQtjCwyGYbBq5v28vgHRfxlyW5Ka91WhyQiErFGD0riwtnn4Xeaw8CjW8op+Oe32Fu8w+LIIlN54TZ2/uM2optLKa5poSEYC4PGWx2WiEjEiYly8O0L8plwYE6jQNDgkfd3879t+60NLEL5A0Eeeb8w9N/v6VXFVDZ5LI5KRKT3UZJbej2bzcZlE7L4/NTs0Gurdtfw4Fs7aPT4LIwssgSCBk+vLOaldeWAOVna2pI6i6MSEYlsOSMnMOTqh/DGmHNGRHnr2ffC99i9+UOLI4ssO9ctZf+L3yOqzTwvtblSaZt9D/TLtTYwEZEI5XLauXV2HmcfmNPIMOCZj/aw6OM9BIIaFdtZjR4fD72zM9QT3mazcd2MXDISYyyOTESk91FNbulT1pbU8uj7h3px90+M5ptzRpCZEmtxZOGtpc3PI+8X8kn5oRIlV04ezEXjBmJTrVMRkVPWWF/D1n//iJjGYgAMmx3ntJs47ZwF1gYW5oxgkA3vPoNtwz/NDAzgSRrK6Kt/QXI/TTYtInKqDMPgpfXlvLbpUDmtMZlJ3DxruCabP47SWjd/fG8XNQdKv0Q57Hzt3OGhHvIiItI5mniyA0pyS1F1C398bxcNbrMX92UTs7h0fOZx9uq7Smvd/HlJAVVNbQA47DZumDmUM4elWRyZiEjv4mltYf2inxFbuSH0Wtr4eWSffys4XdYFFqb8Pi9rX/wN0cVLQq95Ms9k0ud+hCtaPeRERLrSsp1V/OvDklAv7oykaL574ShS43V+Opo1xbU8vrwIr9/sXJUcF8XXZ+dp0kkRkZOgiSdFOjA0PZ47548hOzWOybn9uOT0QVaHFLZW7q7ml69tCyW446OdfHtuvhLcIiLdICY2njOvvZe2YXMBSIpxMrhmJWz4l8WRhZ/q5jbe+Nfv2iW4/aMXcOYXf6IEt4hIN5iV35/vXjiSxBiz93ZKnIukGPXk/jSz53sZf126O5Tgzk2P5+6LxyjBLSLSzdSTW/osjy+AzQbRTke7173+IC6n7v+8tL6MVzceGpaYmx7PLecOJz0h2sKoRET6hm0rX2NEyTM4Y5PhovsgJtnqkMKGYRj85JUtVNfUcE3tn4kPNuM66+uMPWu+1aGJiPR6Nc1tLFpdypen55AUE2V1OGHH4wvwk1e2hDoJTR+exrXTc/X7UkTkFKhcSQeU5JZj2bavkUc/KOTGmcMYk9m3/z627Wvkobd3YBhwTn5/rjljiC7ORER6Ul0xBAOQNhyAgsomPilv5OLTB+F09O3v44LKJn71xg5GR1Vw9bShZA0ba3VIIiJ92u6qZuJdTgYmazTN7qpm7n9jO5dPGsyFYwdoDiMRkVOkJHcHlOSWjjS4ffxk8RYaW33YbPCZ0wZxyfhMovpwIuHtLRXEuhycPaK/1aGIiPRpDW4fP311C/6mGq7wvUL+vFsZlDPS6rB6jFFfim3jv+GMmyA2BYD1e+oYOTCROJeGy4uIWKm5zc89L2/B7fVz9RlDOGdEep9J7Hr9QVp9AZJj2/dqr23xql65iEgXUU1ukRNks0N2v1gADANe27SPny7eQkFlk8WRdb/q5jaeXb2HYLD9Pa+5YwcqwS0iEga2VzTS1OrjvKaXSW7YTsWzt7PuzacIBgJWh9at/D4va197jF1Pfx2jbA2s+hMEzRqnE4f0U4JbRCQMvLpxL/VuL15/kL+vLOYvS3fT4PZZHVa3K6pu4WevbuGvS3cf8TtKCW4RkZ6nntwihzEMg9c27+PlDXtDFyo2G5w3agCXT8oiJspxnCNEFsMweH9XNc+tLsXjC3DVlMFcNE4TcYqIhKOSvRVUvPhDolv2hl7zJA8nd/63GZidZ2Fk3aO0YDN73/wt0S3lAGSmxJKRmQPn3Q3xmgBZRCRctPkDPLu6lGU7qkKvxbgcXD4xi9kjM7Dbe1evbrfXz3/WlbNsRyUHsykLJmVx8emZ1gYmItJLqVxJB5Tkls4orXXz1MpiiqtbQq+lJbi45owhTMhO6RXD73btb+KZj/ewp8Ydei0jKYafXza2z9d6FREJV942DxtefwTXrtc5+MvasNnxDj2fsRd+hYSkfhZHeOrczQ1sefspogreaPcZjZHzmTT/JnCqd5yISDhat6eOp1YU09LmD702JC2Oa6fnMjQ93sLIuoZhGKwqrOG51aU0eQ59xuzUOG46ZxiZKbEWRici0nspyd0BJbmlswJBg3e27ue/68vxBYKh16+aks1F4wZaGNmpqWlu44W1ZXxcVNvu9Rl56VxzRraGfouIRICS7evY//ZvcLUe6jXnd8aTMfNahky9BOyRN/LI523jk6XPE9j8Ik7/oZvMbQmDybrwdgbnjbMwOhER6Ywmj48X1paxfFd16DWbzZzI/opJg4mPjszfGiU1LTy3ppTt+w6VsoyOsnPp+CzOH52hTkIiIt1ISe4OKMktJ6qy0cPTq4rZvq+J6Cg79y04neS4qOPvGGYaPT7e2bKfd7bub5e0z06N45ozhjByYKKF0YmIyInytnnY/O4/sW19GXvQi8NuY9TARKJyzoRzvmN1eJ1mGAYfFtbS+NYvGdC05dDrdifBsVcy/oIv4oxS720RkUhSUNnEP1aVUFbXCkBijJNfXXF6xJV/rGz08OzqUjaU1rd7fVJOP645Y4hqb4uI9IDO5nIj8zaqSA/KSIrhO3NHsm5PHY2t/iMS3B8W1jAoOYactPAdgucPBPnJy1toaD00AUxCjJMFE7M4Z0T/XlcnT0SkL3BFxzB5/o3UnTGfHW89wvCW9UQ57DB8dmibgspmctLizNfDVG2LlydXFDHYMZlLMZPcnqzp5J1/A+kDsy2OTkRETkZeRiJ3XTyGd7dV8srGci4aN+iIBLfXH8TlDN/z00EbyxpCz9MSXHzxzBzGZ6dYF5CIiByVenKLnIJWb4DvPL8Rjy9A3oAEzh89gElD+uGwOGlsGMYRdcP/s7aM1zfvw2G3cd6oDC6dkKnSJCIivYhRtQNb6ccw8Utgs9Ho8fG95zcxzCjh/AEtjJg2n8TkVKvDpK2pmuii9yAtD7ImAfDvj/fw7pYKror6gNNmfIasYaMtjlJERLpKQ6uPmCg70c5DSe7aFi93v/wJE7JTOHtEf/IHJFg+75EvEGRvfesRnZeeXFHE5vIGLj59EGeP6B/WN45FRHojlSvpgJLc0pXe3bqff3+8p91r/eJdzBiexuScfgxJjevRi7WqpjY+LKzhw8Iabjt/BBmJMaF1Da0+3vxkHxeMGahhdSIifcCL68p4bdM+Lq97nCxvEYbNjqf/6aSMOY/hE2bhio45/kG6iKe1heJNK6jb8QHxlWsZOzABx4DRcMFPAbOkVmmtm7GZyT0Wk4iIWOcfH5awdHtlaHlAcgznjOjPjLw0kmJ6tjTk3vpWPthVxYqCGoKGwW8+N6FdD/PmNj8uhz0iep2LiPRGSnJ3QElu6UoeX4APC2t4d9t+9tV7jlifluBick4/puSmMrx/Qpe/vz8QpKTWzc6KJjaU1lNQ2Rxad9nELC4dn9nl7ykiIpGhsKqZZWs2MnHTz45YF3RE482cSkLOBLLyp9Cv/6Auf//mxjqKNy+naedyoqu3YA8eKpmVlRJL/6Q4uOT3kNC/y99bRETC2wtry1i2swp3m7/d6zYbDE2PZ1xWMqdlJTM0Pb7LOw15/UF2VDSxubyBzeX1VDa2tVt/w9lDmTE8vUvfU0RETp6S3B1Qklu6g2EYbN3XyLtbK9lcXs+nW9Vpg5P51vn57V6rbfGSEO084R4BxdUtbNnbyI79TRRUNtHmCx51u7Py0vnKzKEndGwREel9KkoL2LPmdWzFK4jy1h+xvl9cFDlDcs3JKvvlYhgGdW4f/eKiTjixsKKgmqLdO8nf8RdcrVVH3cbvjCdm9FzGzboK4tNO4hOJiEhv4PUHWbenjmU7q9hZ0XTUbc4fM4BrzhgSWjYMg6DBSZWHfGXjXnbtb2LX/mZ8gSN/QznsNibn9OPCsQPJTQ/f+ZZERPoaTTwp0oNsNhtjM5MZm5lMg9vH+tI61pbUsb2iiWDQYOinLpKCQYM7/7uZNl+QuGgnybFOkmOjSIiOwsAgGDQIBCEQDHLDzGHtJrtcU1LHG5v3HTWOzJRYpg9P48yhqaQlRHfrZxYRkcgwMDuPgdnfJBj4OsXb1lC5+V2iyj/GETBHIMVHO6GlGuLNHtW1LV6+98Imzmh9n4n+jQRi+oE9CuwO82FzQMBLlK+JKQNskHs2jL8agA2l9WwqNxjXWt0uBn9UAoGsqaSPPoec0VNwRqlslohIX+dy2pk2LI1pw9KoaPCwvKCajaX17K1vDW0zamBiu33K6lr5+atb6RfnItblMB9RDuJcDgJBA7c3gMcXICbKwe0XtO9ktG1f4xHJdJvNxogBCUzMTmH68DQSe7hUioiIdB0luUW6WHJcFOeOzODckRk0t/nZVFrP4H5x7bbZ29Aa6oHtbvPjbvMftdwJQJs/ABy62OqfeCh5nRwXxcgBieQPTGTUwEQGJsVYPmGLiIiEJ7vDwbBxZzJs3Jl42zyU7dpIbeF64pzl4DTAZd6QrWo2h22neCtxefaDe3+HxwzGJ2NvOZTQHpYez7oSF9WuLBJio7H3zydjzEyG5E/E7nB0eBwREenbBibHcOXkwVw5eTC1LV42lzfwSXkDowe177FXVtdKIGhQ3dzWwZFM8dFHpjqyUmLZWdFESpyL07KSOG1wMqMHJRHnUlpERKQ30Le5SDdKiHYyI+/Iem7BIEzO7UeD20ejx0e924fXf/SyI/5g+9onowcmcsPMoQzPSCAjMVpJbREROWGu6JhQwhvg8DpbUQ4747NTSPJGEfRGtaul/Wk+ZwLRjkM3YqcNS2NsZjKZyY/gdCqpLSIiJy413sWs/P7Myj9yzgabDQalxNDk8dPqDRAIHr36aiBoYBhGu99KnzltEPNPG0TKSZTjEhGR8Kea3CJhwDAM2vxBmjx+7DazHtzBR4zTgf0kas6JiIicKiMYpK2tlYDfRyAQIOj3EQj4cTicJCSnquyIiIhYxjAMfAGDVl+AVm8Aux3iXE5inHacjhOb90hERMKXanKLRBCbzUZMlIOYKPV6ExGR8GGz24mJ1eRbIiISfmw2Gy6nDZfTTnKsammLiPR1ur0pIiIiIiIiIiIiIhFLSW4RERERERERERERiVhKcouIiIiIiIiIiIhIxFKSW0REREREREREREQilpLcIiIiIiIiIiIiIhKxlOQWERERERERERERkYjltDqAnmYYBgCNjY0WRyIiIiIiIiIiIiIiHTmYwz2Y0+1In0tyNzU1AZCdnW1xJCIiIiIiIiIiIiJyPE1NTSQnJ3e43mYcLw3eywSDQfbu3UtiYiI2m83qcHpUY2Mj2dnZlJaWkpSUZHU4ItLF1MZFei+1b5HeTW1cpHdTGxfpvdS+u59hGDQ1NZGZmYnd3nHl7T7Xk9tutzN48GCrw7BUUlKSGp5IL6Y2LtJ7qX2L9G5q4yK9m9q4SO+l9t29jtWD+yBNPCkiIiIiIiIiIiIiEUtJbhERERERERERERGJWEpy9yHR0dHcc889REdHWx2KiHQDtXGR3kvtW6R3UxsX6d3UxkV6L7Xv8NHnJp4UERERERERERERkd5DPblFREREREREREREJGIpyS0iIiIiIiIiIiIiEUtJbhERERERERERERGJWEpyi4iIiIiIiIiIiEjEUpJbRERERERERERERCKWktx9QElJCXfccQejRo0iPj6e1NRUpk6dyq9//WvcbrfV4YnIp9hstk49zj333OMe64033mDBggUMHjyY6OhoBg8ezIIFC3jjjTe6/4OI9EGVlZW8+uqr3H333cybN4/09PRQm73uuutO+Hhd0Yb9fj8PP/wwZ599Nv379yc2Npbhw4dz8803s2XLlhOOSaSv6or2/dRTT3X6PP/UU08d93hut5sHHniAqVOnkpqaSnx8PKNGjeKOO+6gpKTk1D6wSB+zZs0afvaznzF37tzQeTchIYH8/Hyuv/56li9ffkLH0zlcJLx0RRvXeTzMGdKrvfLKK0ZSUpIBHPWRn59v7Nq1y+owReQwHbXXTz9mzZrV4TECgYBxww03HHP/G2+80QgEAj33wUT6gGO1uYULF3b6OF3VhquqqoypU6d2eIzo6Gjj0UcfPcVPLdI3dEX7fvLJJzt9nn/yySePeaxdu3YZI0aM6HD/pKQkY/Hixaf+wUX6gLPPPrtT7fLaa6812trajnksncNF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ndRxdA4XCU9d0cZ1Hg9/NsPo4JaBRLz169dz1lln0draSkJCAj/60Y+YPXs2ra2tLFq0iEceeQQw7xSvWbOm3SzOImKN3NxcfD4fV1xxBdOnTyc3N5fY2Fiqq6tZunQpf/vb30JDn2bOnMm777571AkofvjDH/KrX/0KgIkTJ/L973+f4cOHs3v3bu6//37Wr18f2u7ee+/tuQ8o0sstX76cgoKC0HJ1dTXf/e53AXOY4Y033thu++uuu+6ox+mKNhwIBJg1axYrVqwA4IorruCrX/0q/fr14+OPP+bnP/85lZWV2O12Xn31VebNm3dKn12ktzvV9r106VJmz57N9OnTueSSSxg/fjwZGRkAFBYW8sILL/DCCy+EenT9+c9/5tZbbz1qLE1NTUyZMiVUquCmm27i6quvJjY2liVLlnDvvffS3NxMbGwsK1euZMKECV3xn0Ck17riiit48cUXATjvvPP43e9+d8yRji6Xi/z8/KOu0zlcJPx0RRvXeTwCWJtjl+72yiuvhO7wHu2Rn59v7Nq1y+owReSAnJycDtvr4Y8rrrjCqKur6/A4gUDA+MpXvnLMY9xwww1GIBDouQ8n0gcsXLiwU2344KMjXdWGq6qqjKlTp3Z4jOjoaOPRRx/t6v8MIr3SqbbvJUuWdGq/uLg4429/+9tx49m1a5cxYsSIDo+TlJRkLF68uDv+U4j0OifStgEjJyenw2PpHC4Sfrqijes8Hv7Uk7sPKCkp4fe//z2vvfYaZWVluFwu8vLyuOqqq/i///s/4uLirA5RRA5YtmwZy5YtY9WqVRQWFlJdXU1jYyMJCQlkZ2czY8YMFi5cyPTp0zt1vNdff51HHnmE1atXU11dTXp6OlOnTuXmm29Wjw+RbnDdddfx9NNPd3r7412GdUUb9vv9PProozzzzDNs27aNlpYWMjMzmTNnDrfddhtjx47tdLwifdmptu+mpiZeeeUVVq1axZo1a9i3bx/V1dX4/X769evH2LFjmTNnDjfeeGOoZ9jxtLS08Oc//5nnn3+egoICvF4v2dnZfOYzn+G2224jJyfnhD6jSF91ovPT5OTkUFxcfMxtdA4XCR9d0cZ1Hg9/SnKLiIiIiIiIiIiISMSyWx2AiIiIiIiIiIiIiMjJUpJbRERERERERERERCKWktwiIiIiIiIiIiIiErGU5BYRERERERERERGRiKUkt4iIiIiIiIiIiIhELCW5RURERERERERERCRiKcktIiIiIiIiIiIiIhFLSW4RERERERERERERiVhKcouIiIiIiIiIiIhIxFKSW0REREREREREREQilpLcIiIiIiIiIiIiIhKxlOQWERERERERERERkYilJLeIiIiIiIiIiIiIRCwluUVEREREREREREQkYv0/Rmf4zem2TL4AAAAASUVORK5CYII=", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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6UyZ5vLx8eHrr7/mxx9/ZPLkyQ22zVdeXs4XX3zBxIkTmTFjhr19QOFarbEPHT9+nC+//JJnn32WJ554ggcffJDf/e539ldt+6SKorBz585zxg8JCcFkMgFqG7Fr165tziLZ/fTTT/b3zrY/OHHiRPv7NWvWnPP98uXL7e8bOk7WVXfdtYbzXde//PKL/f1dd93l8rZ1XcHPz4/LL7/cPvzJJ580WLbud84ev853HbaWZcuW2d/feuutTbbdOnPmTIKCggCoqqpi/fr1Tc7jfM8rrtpXW9uFWJfnY8uWLdx777324euvv77JY9YVV1xBWloaL730EpdccgnR0dEYjUa8vLxITk7mvvvuY+fOndx22232cb777js+/fTTBqdZ37F9/vz59W4nEyZM4LvvvrOfw48cOdLovumstnKMbaqt3b59+zarfJ8+fezva48pZ2uNc1Zd7W1/bw/HwPq0tXOKq8+hrt5O3X0d0trb2XXXXXf+QZ5lx44d9vc9evRwOH/Up7i42P4+JCTE5fEI0R5Jx5NCdHDz58/HZrMB6slyyJAh9Za76qqreOCBBzCbzWRlZfHrr79y6aWXNjn9hjotqatv3774+PhQVlaG1Wpl165dTY7XWtOtzy233MJTTz2F2Wzm22+/JT8/n+DgYIcyixYtIj8/3z7fYcOGNXs+DTn7hqo+deOp7TyqlqIo7Nq1yz6ckpLS5PQSEhIICQkhLy+vGZE659JLL+XSSy8lNzeXFStWsG7dOrZu3cr27dspKytzKPvdd98xZswY1q9fX28HMnU988wz/PWvf3V5vB2VK/eh9evX89RTT7F69WoURXFq/vVtWx4eHlxxxRV8/vnnWCwWJk6cyLXXXstVV13F2LFjCQgIcGradW883nnnHYeOdRuSkZFhf3/ixAmH786+IXVm3SUnJxMUFERBQYEzITvNVet648aN9vcTJkxwWXyudtNNN7FgwQJAvQn/y1/+ck6ZjIwMVq5cCYDBYODaa69tdJquWoetQVEUh5vYkSNHNjmOwWBg2LBh9oTBtm3buPjiixsd53zPK67aV1vThVqXLZWWlsbll19u70StX79+/O9//2tyPGfWrYeHB++99x6pqamsXr0agOeff77B5FVtArPWiBEjmDlzZoPTHzFiBLNmzeLLL78E4IsvvnBIqjdXWzrG1k1K1ycwMND+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7rC/37BhQ6NJmNTUVIf/oSu4el3fdddd9jYpjx07xiOPPNLi2Oo+Alu3eRtXSkpKYvjw4YDalMKiRYscfrC78cYbm/yR0dXrEFpn2e+66y578mTbtm288847DZYtKiriiSeesA9ff/315/QH0Bpcta82V3PXt7vXpdVq5YYbbuCnn34C1CfnFixYwKRJk1o0vea0W7tu3Tpefvll+/B11113TofIdd133332x/fXrVvX6D6yadMmvv76a/twU81jOcPdx1h3ao1zlitd6P3d3futs1rjnNJaXHEOdfV26srrEGh/54fmsFqt9rbTtVptk08OgCS5hWiQIoTocF599VUFUADF19dXqaioaNb4x44dUzQajX0av/32m8P3tZ8DioeHh+Lp6al8+umn50xn3bp1SkxMjL1s7969laqqqgbn2xrTjYuLs5dLS0tzavm7devmEAugTJs2zalxnZ1n3Wk7Y9y4cfbyy5cvr7fMDTfcYC/T0LrbsWOHkpycrACK0WhscprOuvbaaxVAGTJkiPLGG28oWVlZDZbdsGGDMmTIEId18Morr9Rbtu5yP/PMM+cVY2tN8+GHH7ZPT6PRKH/605+UkpKSesv+8MMPSlRUlL18fHy8UlRUdN4x1HL1PvT000/bywQFBSm//PLLOWWWLl1qXyZvb297+blz555Tdvny5UpkZKTyzDPPKHv37q13GSwWi/L5558rJpPJPq1PPvnknHJz5851WN5bbrlFOXbsWL3TtNlsypo1a5T77rtP8fT0VEpLS+std+utt9qnZzQalQ8//PCcMps3b1bi4+Pt69hV+5Cr17WiKMobb7zhsI6uueYa5cSJE/WW3bNnj/LQQw8pv/766znf3XPPPfZp3H///U4vU3OPv3PmzLGXnzhxohIQEGAf3rNnT5Pjt8Y6bMmyO7Pc9913n72MXq9X5syZo1itVocyhw8fVoYOHWov5+fn1+h6dOV5xZX7anO0ZH23xrp0hs1mU2bPnm2fplarVT777LPzmubcuXOVoUOHKh999FGD54bKykrltddeUzw9Pe3zDggIUE6ePNnk9Ouer7y9vZWvvvrqnDIrVqxQQkND7eWGDx+u2Gy281quWq1xjHX1NVdaWpq9bFxcXJPlly9fbi8/bty4Bsu5+pzVlvf3jnAMVJTWOae05L7EWed7DlUU12+nrroOUZS2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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "for activation in [\"linear\", \"ReLU\", \"ELU\", \"SELU\"]:\n", - " plot_applied_activation(activation, save_pdf=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Monotonicity indicator\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | export\n", - "\n", - "\n", - "def get_monotonicity_indicator(\n", - " monotonicity_indicator: ArrayLike,\n", - " *,\n", - " input_shape: Tuple[int, ...],\n", - " units: int,\n", - ") -> TensorLike:\n", - " # convert to tensor if needed and make it broadcastable to the kernel\n", - " monotonicity_indicator = np.array(monotonicity_indicator)\n", - " if len(monotonicity_indicator.shape) < 2:\n", - " monotonicity_indicator = np.reshape(monotonicity_indicator, (-1, 1))\n", - " elif len(monotonicity_indicator.shape) > 2:\n", - " raise ValueError(\n", - " f\"monotonicity_indicator has rank greater than 2: {monotonicity_indicator.shape}\"\n", - " )\n", - "\n", - " monotonicity_indicator_broadcasted = np.broadcast_to(\n", - " monotonicity_indicator, shape=(input_shape[-1], units)\n", - " )\n", - "\n", - " if not np.all(\n", - " (monotonicity_indicator == -1)\n", - " | (monotonicity_indicator == 0)\n", - " | (monotonicity_indicator == 1)\n", - " ):\n", - " raise ValueError(\n", - " f\"Each element of monotonicity_indicator must be one of -1, 0, 1, but it is: '{monotonicity_indicator}'\"\n", - " )\n", - " return monotonicity_indicator" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "input_shape = (13, 2)\n", - "units = 3\n", - "\n", - "layer = Dense(units=units)\n", - "layer.build(input_shape=input_shape)\n", - "\n", - "for monotonicity_indicator in [\n", - " 1,\n", - " [1],\n", - " [1, 1],\n", - " np.ones((2,)),\n", - " np.ones((2, 1)),\n", - " np.ones((2, 3)),\n", - "]:\n", - " expected = np.ones((2, 3))\n", - " actual = get_monotonicity_indicator(\n", - " monotonicity_indicator, input_shape=(13, 2), units=3\n", - " )\n", - "\n", - " # rank is 2\n", - " assert len(actual.shape) == 2\n", - " # it is broadcastable to the kernel shape of (input_shape[-1], units)\n", - " np.testing.assert_array_equal(np.broadcast_to(actual, (2, 3)), expected)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "expected = [[1], [0], [-1]]\n", - "actual = get_monotonicity_indicator([1, 0, -1], input_shape=(13, 3), units=4)\n", - "np.testing.assert_array_equal(actual, expected)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "with pytest.raises(ValueError) as e:\n", - " get_monotonicity_indicator([0, 1, -1], input_shape=(13, 2), units=3)\n", - "assert e.value.args == (\n", - " \"operands could not be broadcast together with remapped shapes [original->remapped]: (3,1) and requested shape (2,3)\",\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | export\n", - "\n", - "\n", - "def apply_monotonicity_indicator_to_kernel(\n", - " kernel: tf.Variable,\n", - " monotonicity_indicator: ArrayLike,\n", - ") -> TensorLike:\n", - " # convert to tensor if needed and make it broadcastable to the kernel\n", - " monotonicity_indicator = tf.convert_to_tensor(monotonicity_indicator)\n", - "\n", - " # absolute value of the kernel\n", - " abs_kernel = tf.abs(kernel)\n", - "\n", - " # replace original kernel values for positive or negative ones where needed\n", - " xs = tf.where(\n", - " monotonicity_indicator == 1,\n", - " abs_kernel,\n", - " kernel,\n", - " )\n", - " xs = tf.where(monotonicity_indicator == -1, -abs_kernel, xs)\n", - "\n", - " return xs\n", - "\n", - "\n", - "@contextmanager\n", - "def replace_kernel_using_monotonicity_indicator(\n", - " layer: tf.keras.layers.Dense,\n", - " monotonicity_indicator: TensorLike,\n", - ") -> Generator[None, None, None]:\n", - " old_kernel = layer.kernel\n", - "\n", - " layer.kernel = apply_monotonicity_indicator_to_kernel(\n", - " layer.kernel, monotonicity_indicator\n", - " )\n", - " try:\n", - " yield\n", - " finally:\n", - " layer.kernel = old_kernel" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def display_kernel(kernel: Union[tf.Variable, np.typing.NDArray[float]]) -> None:\n", - " cm = sns.color_palette(\"coolwarm_r\", as_cmap=True)\n", - "\n", - " df = pd.DataFrame(kernel)\n", - "\n", - " display(\n", - " df.style.format(\"{:.2f}\").background_gradient(cmap=cm, vmin=-1e-8, vmax=1e-8)\n", - " )" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Original kernel:\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 01234567891011121314151617
00.350.16-0.140.44-0.410.150.46-0.330.020.13-0.41-0.050.46-0.030.000.26-0.47-0.30
10.01-0.42-0.450.340.41-0.230.35-0.36-0.040.060.07-0.29-0.280.48-0.38-0.06-0.23-0.37
20.23-0.310.180.15-0.450.06-0.16-0.110.45-0.090.03-0.24-0.370.210.110.01-0.46-0.37
30.290.36-0.07-0.18-0.46-0.450.250.32-0.120.22-0.180.27-0.18-0.070.350.320.180.39
40.35-0.270.13-0.400.440.210.06-0.31-0.300.46-0.44-0.18-0.26-0.340.360.330.120.04
50.040.21-0.02-0.360.39-0.130.300.35-0.12-0.430.440.320.06-0.30-0.290.24-0.44-0.13
60.38-0.04-0.300.17-0.030.37-0.03-0.180.42-0.39-0.33-0.190.02-0.41-0.440.420.38-0.21
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Kernel after applying monotocity indicator 1 for all values:\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 01234567891011121314151617
00.350.160.140.440.410.150.460.330.020.130.410.050.460.030.000.260.470.30
10.010.420.450.340.410.230.350.360.040.060.070.290.280.480.380.060.230.37
20.230.310.180.150.450.060.160.110.450.090.030.240.370.210.110.010.460.37
30.290.360.070.180.460.450.250.320.120.220.180.270.180.070.350.320.180.39
40.350.270.130.400.440.210.060.310.300.460.440.180.260.340.360.330.120.04
50.040.210.020.360.390.130.300.350.120.430.440.320.060.300.290.240.440.13
60.380.040.300.170.030.370.030.180.420.390.330.190.020.410.440.420.380.21
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "tf.keras.utils.set_random_seed(42)\n", - "\n", - "units = 18\n", - "input_len = 7\n", - "\n", - "layer = tf.keras.layers.Dense(units=units)\n", - "\n", - "input_shape = (input_len,)\n", - "layer.build(input_shape=input_shape)\n", - "\n", - "print(\"Original kernel:\")\n", - "display_kernel(layer.kernel)\n", - "\n", - "print(\"Kernel after applying monotocity indicator 1 for all values:\")\n", - "monotonicity_indicator = get_monotonicity_indicator(\n", - " 1, input_shape=input_shape, units=units\n", - ")\n", - "with replace_kernel_using_monotonicity_indicator(layer, monotonicity_indicator):\n", - " display_kernel(layer.kernel)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Monotocity indicator:\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 0
01.00
11.00
2-1.00
3-1.00
40.00
50.00
60.00
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Kernel after applying the monotocity indicator:\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 01234567891011121314151617
00.350.160.140.440.410.150.460.330.020.130.410.050.460.030.000.260.470.30
10.010.420.450.340.410.230.350.360.040.060.070.290.280.480.380.060.230.37
2-0.23-0.31-0.18-0.15-0.45-0.06-0.16-0.11-0.45-0.09-0.03-0.24-0.37-0.21-0.11-0.01-0.46-0.37
3-0.29-0.36-0.07-0.18-0.46-0.45-0.25-0.32-0.12-0.22-0.18-0.27-0.18-0.07-0.35-0.32-0.18-0.39
40.35-0.270.13-0.400.440.210.06-0.31-0.300.46-0.44-0.18-0.26-0.340.360.330.120.04
50.040.21-0.02-0.360.39-0.130.300.35-0.12-0.430.440.320.06-0.30-0.290.24-0.44-0.13
60.38-0.04-0.300.17-0.030.37-0.03-0.180.42-0.39-0.33-0.190.02-0.41-0.440.420.38-0.21
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "monotonicity_indicator = [1] * 2 + [-1] * 2 + [0] * (input_shape[0] - 4)\n", - "monotonicity_indicator = get_monotonicity_indicator(\n", - " monotonicity_indicator, input_shape=input_shape, units=units\n", - ")\n", - "\n", - "print(\"Monotocity indicator:\")\n", - "display_kernel(monotonicity_indicator)\n", - "\n", - "print(\"Kernel after applying the monotocity indicator:\")\n", - "with replace_kernel_using_monotonicity_indicator(layer, monotonicity_indicator):\n", - " display_kernel(layer.kernel)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Monotonic Dense Layer" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This is an implementation of our Monotonic Dense Unit or Constrained Monotone Fully Connected Layer. The below is the figure from the paper for reference.\n", - "\n", - "In the code, the variable `monotonicity_indicator` corresponds to **t** in the figure and the variable `activation_selector` corresponds to **s**. \n", - "\n", - "Parameters `convexity_indicator` and `epsilon` are used to calculate `activation_selector` as follows:\n", - "- if `convexity_indicator` is -1 or 1, then `activation_selector` will have all elements 0 or 1, respecively.\n", - "- if `convexity_indicator` is `None`, then `epsilon` must have a value between 0 and 1 and corresponds to the percentage of elements of `activation_selector` set to 1." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "![mono-dense-layer-diagram.png](images/mono-dense-layer-diagram.png)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | export\n", - "\n", - "\n", - "@export\n", - "class MonoDense(Dense):\n", - " \"\"\"Monotonic counterpart of the regular Dense Layer of tf.keras\n", - "\n", - " This is an implementation of our Monotonic Dense Unit or Constrained Monotone Fully Connected Layer. The below is the figure from the paper for reference.\n", - "\n", - " - the parameter `monotonicity_indicator` corresponds to **t** in the figure below, and\n", - "\n", - " - parameters `is_convex`, `is_concave` and `activation_weights` are used to calculate the activation selector **s** as follows:\n", - "\n", - " - if `is_convex` or `is_concave` is **True**, then the activation selector **s** will be (`units`, 0, 0) and (0, `units`, 0), respecively.\n", - "\n", - " - if both `is_convex` or `is_concave` is **False**, then the `activation_weights` represent ratios between $\\\\breve{s}$, $\\\\hat{s}$ and $\\\\tilde{s}$,\n", - " respecively. E.g. if `activation_weights = (2, 2, 1)` and `units = 10`, then\n", - "\n", - " $$\n", - " (\\\\breve{s}, \\\\hat{s}, \\\\tilde{s}) = (4, 4, 2)\n", - " $$\n", - "\n", - " ![mono-dense-layer-diagram.png](../../../../../images/nbs/images/mono-dense-layer-diagram.png)\n", - "\n", - " \"\"\"\n", - "\n", - " def __init__(\n", - " self,\n", - " units: int,\n", - " *,\n", - " activation: Optional[Union[str, Callable[[TensorLike], TensorLike]]] = None,\n", - " monotonicity_indicator: ArrayLike = 1,\n", - " is_convex: bool = False,\n", - " is_concave: bool = False,\n", - " activation_weights: Tuple[float, float, float] = (7.0, 7.0, 2.0),\n", - " **kwargs: Any,\n", - " ):\n", - " \"\"\"Constructs a new MonoDense instance.\n", - "\n", - " Params:\n", - " units: Positive integer, dimensionality of the output space.\n", - " activation: Activation function to use, it is assumed to be convex monotonically\n", - " increasing function such as \"relu\" or \"elu\"\n", - " monotonicity_indicator: Vector to indicate which of the inputs are monotonically increasing or\n", - " monotonically decreasing or non-monotonic. Has value 1 for monotonically increasing,\n", - " -1 for monotonically decreasing and 0 for non-monotonic.\n", - " is_convex: convex if set to True\n", - " is_concave: concave if set to True\n", - " activation_weights: relative weights for each type of activation, the default is (1.0, 1.0, 1.0).\n", - " Ignored if is_convex or is_concave is set to True\n", - " **kwargs: passed as kwargs to the constructor of `Dense`\n", - "\n", - " Raise:\n", - " ValueError:\n", - " - if both **is_concave** and **is_convex** are set to **True**, or\n", - " - if any component of activation_weights is negative or there is not exactly three components\n", - " \"\"\"\n", - " if is_convex and is_concave:\n", - " raise ValueError(\n", - " \"The model cannot be set to be both convex and concave (only linear functions are both).\"\n", - " )\n", - "\n", - " if len(activation_weights) != 3:\n", - " raise ValueError(\n", - " f\"There must be exactly three components of activation_weights, but we have this instead: {activation_weights}.\"\n", - " )\n", - "\n", - " if (np.array(activation_weights) < 0).any():\n", - " raise ValueError(\n", - " f\"Values of activation_weights must be non-negative, but we have this instead: {activation_weights}.\"\n", - " )\n", - "\n", - " super(MonoDense, self).__init__(units=units, activation=None, **kwargs)\n", - "\n", - " self.units = units\n", - " self.org_activation = activation\n", - " self.monotonicity_indicator = monotonicity_indicator\n", - " self.is_convex = is_convex\n", - " self.is_concave = is_concave\n", - " self.activation_weights = activation_weights\n", - "\n", - " (\n", - " self.convex_activation,\n", - " self.concave_activation,\n", - " self.saturated_activation,\n", - " ) = get_activation_functions(self.org_activation)\n", - "\n", - " def get_config(self) -> Dict[str, Any]:\n", - " \"\"\"Get config is used for saving the model\"\"\"\n", - " return dict(\n", - " units=self.units,\n", - " activation=self.org_activation,\n", - " monotonicity_indicator=self.monotonicity_indicator,\n", - " is_convex=self.is_convex,\n", - " is_concave=self.is_concave,\n", - " activation_weights=self.activation_weights,\n", - " )\n", - "\n", - " def build(self, input_shape: Tuple, *args: List[Any], **kwargs: Any) -> None:\n", - " \"\"\"Build\n", - "\n", - " Args:\n", - " input_shape: input tensor\n", - " args: positional arguments passed to Dense.build()\n", - " kwargs: keyword arguments passed to Dense.build()\n", - " \"\"\"\n", - " super(MonoDense, self).build(input_shape, *args, **kwargs)\n", - " self.monotonicity_indicator = get_monotonicity_indicator(\n", - " monotonicity_indicator=self.monotonicity_indicator,\n", - " input_shape=input_shape,\n", - " units=self.units,\n", - " )\n", - "\n", - " def call(self, inputs: TensorLike) -> TensorLike:\n", - " \"\"\"Call\n", - "\n", - " Args:\n", - " inputs: input tensor of shape (batch_size, ..., x_length)\n", - "\n", - " Returns:\n", - " N-D tensor with shape: `(batch_size, ..., units)`.\n", - "\n", - " \"\"\"\n", - " # calculate W'*x+y after we replace the kernal according to monotonicity vector\n", - " with replace_kernel_using_monotonicity_indicator(\n", - " self, monotonicity_indicator=self.monotonicity_indicator\n", - " ):\n", - " h = super(MonoDense, self).call(inputs)\n", - "\n", - " y = apply_activations(\n", - " h,\n", - " units=self.units,\n", - " convex_activation=self.convex_activation,\n", - " concave_activation=self.concave_activation,\n", - " saturated_activation=self.saturated_activation,\n", - " is_convex=self.is_convex,\n", - " is_concave=self.is_concave,\n", - " activation_weights=self.activation_weights,\n", - " )\n", - "\n", - " return y\n", - "\n", - " @classmethod\n", - " def create_type_1(\n", - " cls,\n", - " inputs: Union[TensorLike, Dict[str, TensorLike], List[TensorLike]],\n", - " *,\n", - " units: int,\n", - " final_units: int,\n", - " activation: Union[str, Callable[[TensorLike], TensorLike]],\n", - " n_layers: int,\n", - " final_activation: Optional[\n", - " Union[str, Callable[[TensorLike], TensorLike]]\n", - " ] = None,\n", - " monotonicity_indicator: Union[int, Dict[str, int], List[int]] = 1,\n", - " is_convex: Union[bool, Dict[str, bool], List[bool]] = False,\n", - " is_concave: Union[bool, Dict[str, bool], List[bool]] = False,\n", - " dropout: Optional[float] = None,\n", - " ) -> TensorLike:\n", - " \"\"\"Builds Type-1 monotonic network\n", - "\n", - " Type-1 architecture corresponds to the standard MLP type of neural network architecture used in general, where each\n", - " of the input features is concatenated to form one single input feature vector $\\mathbf{x}$ and fed into the network,\n", - " with the only difference being that instead of standard fully connected or dense layers, we employ monotonic dense units\n", - " throughout. For the first (or input layer) layer, the indicator vector $\\mathbf{t}$, is used to identify the monotonicity\n", - " property of the input feature with respect to the output. Specifically, $\\mathbf{t}$ is set to $1$ for those components\n", - " in the input feature vector that are monotonically increasing and is set to $-1$ for those components that are monotonically\n", - " decreasing and set to $0$ if the feature is non-monotonic. For the subsequent hidden layers, monotonic dense units with the\n", - " indicator vector $\\mathbf{t}$ always being set to $1$ are used in order to preserve monotonicity. Finally, depending on\n", - " whether the problem at hand is a regression problem or a classification problem (or even a multi-task problem), an appropriate\n", - " activation function (such as linear activation or sigmoid or softmax) to obtain the final output.\n", - "\n", - " ![mono-dense-layer-diagram.png](../../../images/nbs/images/type-1.png)\n", - "\n", - " Args:\n", - " inputs: input tensor or a dictionary of tensors\n", - " units: number of units in hidden layers\n", - " final_units: number of units in the output layer\n", - " activation: the base activation function\n", - " n_layers: total number of layers (hidden layers plus the output layer)\n", - " final_activation: the activation function of the final layer (typicall softmax, sigmoid or linear).\n", - " If set to None (default value), then the linear activation is used.\n", - " monotonicity_indicator: if an instance of dictionary, then maps names of input feature to their monotonicity\n", - " indicator (-1 for monotonically decreasing, 1 for monotonically increasing and 0 otherwise). If int,\n", - " then all input features are set to the same monotinicity indicator.\n", - " is_convex: set to True if a particular input feature is convex\n", - " is_concave: set to True if a particular inputs feature is concave\n", - " dropout: dropout rate. If set to float greater than 0, Dropout layers are inserted after hidden layers.\n", - "\n", - " Returns:\n", - " Output tensor\n", - "\n", - " \"\"\"\n", - " return _create_type_1(\n", - " inputs,\n", - " units=units,\n", - " final_units=final_units,\n", - " activation=activation,\n", - " n_layers=n_layers,\n", - " final_activation=final_activation,\n", - " monotonicity_indicator=monotonicity_indicator,\n", - " is_convex=is_convex,\n", - " is_concave=is_concave,\n", - " dropout=dropout,\n", - " )\n", - "\n", - " @classmethod\n", - " def create_type_2(\n", - " cls,\n", - " inputs: Union[TensorLike, Dict[str, TensorLike], List[TensorLike]],\n", - " *,\n", - " input_units: Optional[int] = None,\n", - " units: int,\n", - " final_units: int,\n", - " activation: Union[str, Callable[[TensorLike], TensorLike]],\n", - " n_layers: int,\n", - " final_activation: Optional[\n", - " Union[str, Callable[[TensorLike], TensorLike]]\n", - " ] = None,\n", - " monotonicity_indicator: Union[int, Dict[str, int], List[int]] = 1,\n", - " is_convex: Union[bool, Dict[str, bool], List[bool]] = False,\n", - " is_concave: Union[bool, Dict[str, bool], List[bool]] = False,\n", - " dropout: Optional[float] = None,\n", - " ) -> TensorLike:\n", - " \"\"\"Builds Type-2 monotonic network\n", - "\n", - " Type-2 architecture is another example of a neural network architecture that can be built employing proposed\n", - " monotonic dense blocks. The difference when compared to the architecture described above lies in the way input\n", - " features are fed into the hidden layers of neural network architecture. Instead of concatenating the features\n", - " directly, this architecture provides flexibility to employ any form of complex feature extractors for the\n", - " non-monotonic features and use the extracted feature vectors as inputs. Another difference is that each monotonic\n", - " input is passed through separate monotonic dense units. This provides an advantage since depending on whether the\n", - " input is completely concave or convex or both, we can adjust the activation selection vector $\\mathbf{s}$ appropriately\n", - " along with an appropriate value for the indicator vector $\\mathbf{t}$. Thus, each of the monotonic input features has\n", - " a separate monotonic dense layer associated with it. Thus as the major difference to the above-mentioned architecture,\n", - " we concatenate the feature vectors instead of concatenating the inputs directly. The subsequent parts of the network are\n", - " similar to the architecture described above wherein for the rest of the hidden monotonic dense units, the indicator vector\n", - " $\\mathbf{t}$ is always set to $1$ to preserve monotonicity.\n", - "\n", - " ![mono-dense-layer-diagram.png](../../../images/nbs/images/type-2.png)\n", - "\n", - " Args:\n", - " inputs: input tensor or a dictionary of tensors\n", - " input_units: used to preprocess features before entering the common mono block\n", - " units: number of units in hidden layers\n", - " final_units: number of units in the output layer\n", - " activation: the base activation function\n", - " n_layers: total number of layers (hidden layers plus the output layer)\n", - " final_activation: the activation function of the final layer (typicall softmax, sigmoid or linear).\n", - " If set to None (default value), then the linear activation is used.\n", - " monotonicity_indicator: if an instance of dictionary, then maps names of input feature to their monotonicity\n", - " indicator (-1 for monotonically decreasing, 1 for monotonically increasing and 0 otherwise). If int,\n", - " then all input features are set to the same monotinicity indicator.\n", - " is_convex: set to True if a particular input feature is convex\n", - " is_concave: set to True if a particular inputs feature is concave\n", - " dropout: dropout rate. If set to float greater than 0, Dropout layers are inserted after hidden layers.\n", - "\n", - " Returns:\n", - " Output tensor\n", - "\n", - " \"\"\"\n", - " return _create_type_2(\n", - " inputs,\n", - " input_units=input_units,\n", - " units=units,\n", - " final_units=final_units,\n", - " activation=activation,\n", - " n_layers=n_layers,\n", - " final_activation=final_activation,\n", - " monotonicity_indicator=monotonicity_indicator,\n", - " is_convex=is_convex,\n", - " is_concave=is_concave,\n", - " dropout=dropout,\n", - " )" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "************************************************************************************************************************\n", - "input:\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 012345678910
00.30-1.040.750.94-1.95-1.300.13-0.32-0.02-0.850.88
10.780.071.130.47-0.860.37-0.960.88-0.05-0.18-0.68
21.22-0.15-0.43-0.350.530.370.410.432.14-0.41-0.51
3-0.810.621.13-0.11-0.84-0.820.650.740.54-0.670.23
40.120.220.870.220.680.070.290.63-1.46-0.32-0.47
5-0.64-0.281.49-0.870.97-1.68-0.330.160.590.710.79
6-0.35-0.460.86-0.19-1.28-1.13-0.920.500.140.69-0.43
70.160.63-0.310.46-0.66-0.36-0.38-1.200.49-0.470.01
80.480.450.67-0.10-0.42-0.08-1.69-1.45-1.32-1.000.40
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "WARNING:tensorflow:5 out of the last 5 calls to triggered tf.function retracing. Tracing is expensive and the excessive number of tracings could be due to (1) creating @tf.function repeatedly in a loop, (2) passing tensors with different shapes, (3) passing Python objects instead of tensors. For (1), please define your @tf.function outside of the loop. For (2), @tf.function has reduce_retracing=True option that can avoid unnecessary retracing. For (3), please refer to https://www.tensorflow.org/guide/function#controlling_retracing and https://www.tensorflow.org/api_docs/python/tf/function for more details.\n", - "monotonicity_indicator = [1, 1, 1, 1, 0, 0, 0, 0, -1, -1, -1]\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 0
01.00
11.00
21.00
31.00
40.00
50.00
60.00
70.00
8-1.00
9-1.00
10-1.00
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "kernel:\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 01234567891011121314151617
00.330.150.130.410.380.140.430.300.020.120.380.050.420.030.000.240.440.28
10.010.390.420.320.380.220.330.340.030.060.060.270.260.450.350.050.210.34
20.210.290.160.140.420.060.150.100.410.080.030.220.340.200.110.010.430.35
30.270.330.060.170.420.420.240.300.110.200.170.250.170.070.320.300.170.36
40.32-0.250.12-0.370.410.200.06-0.28-0.270.43-0.41-0.17-0.24-0.310.330.310.110.03
50.040.19-0.02-0.340.36-0.120.280.32-0.11-0.400.410.300.06-0.28-0.270.23-0.41-0.12
60.35-0.04-0.280.16-0.030.35-0.03-0.160.39-0.36-0.31-0.180.02-0.38-0.400.390.35-0.19
70.33-0.340.11-0.290.25-0.210.110.08-0.19-0.390.010.100.39-0.25-0.37-0.270.040.34
8-0.27-0.09-0.02-0.45-0.16-0.12-0.09-0.43-0.36-0.09-0.23-0.42-0.28-0.24-0.30-0.31-0.07-0.07
9-0.38-0.34-0.44-0.42-0.32-0.06-0.27-0.28-0.22-0.05-0.08-0.07-0.21-0.39-0.01-0.26-0.24-0.42
10-0.09-0.45-0.41-0.36-0.19-0.09-0.00-0.34-0.17-0.18-0.05-0.39-0.06-0.20-0.40-0.33-0.18-0.01
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "output:\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 01234567891011121314151617
00.010.400.001.380.000.100.00-0.00-0.00-0.13-0.00-0.26-0.00-0.00-0.55-0.520.790.64
10.451.020.960.711.220.000.86-0.00-0.00-0.09-0.00-0.00-0.00-0.000.26-0.170.541.00
20.300.000.330.000.410.000.42-0.53-0.89-0.29-0.23-0.84-0.16-0.93-0.900.080.370.08
30.210.260.330.420.000.000.00-0.16-0.00-0.61-0.53-0.07-0.00-0.00-0.55-0.660.830.78
41.380.490.700.821.470.540.63-0.00-0.00-0.00-0.00-0.00-0.00-0.000.730.970.940.91
50.000.000.000.000.000.000.00-1.86-0.25-0.00-1.57-1.19-0.61-0.230.13-1.000.50-0.06
60.000.000.000.170.000.000.00-0.15-0.00-0.00-0.00-0.00-0.00-0.000.06-1.000.000.12
70.000.960.350.930.000.320.17-0.00-0.00-0.00-0.00-0.00-0.17-0.000.670.060.120.17
80.001.330.921.630.520.000.66-0.00-0.00-0.00-0.00-0.00-0.00-0.001.000.230.180.81
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "************************************************************************************************************************\n", - "input:\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 012345678910
00.30-1.040.750.94-1.95-1.300.13-0.32-0.02-0.850.88
10.780.071.130.47-0.860.37-0.960.88-0.05-0.18-0.68
21.22-0.15-0.43-0.350.530.370.410.432.14-0.41-0.51
3-0.810.621.13-0.11-0.84-0.820.650.740.54-0.670.23
40.120.220.870.220.680.070.290.63-1.46-0.32-0.47
5-0.64-0.281.49-0.870.97-1.68-0.330.160.590.710.79
6-0.35-0.460.86-0.19-1.28-1.13-0.920.500.140.69-0.43
70.160.63-0.310.46-0.66-0.36-0.38-1.200.49-0.470.01
80.480.450.67-0.10-0.42-0.08-1.69-1.45-1.32-1.000.40
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "monotonicity_indicator = 1\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 0
01.00
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "kernel:\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 01234567891011121314151617
00.440.020.240.220.290.350.180.030.390.170.250.020.100.130.000.420.210.31
10.350.060.260.420.050.410.160.330.030.260.110.030.230.040.370.270.320.40
20.370.300.360.140.210.400.010.280.160.440.430.230.270.220.230.250.430.05
30.320.250.050.450.080.180.260.240.340.070.070.140.040.190.290.230.430.09
40.360.050.200.410.380.290.010.440.170.040.310.340.290.160.250.180.010.28
50.340.310.380.340.080.400.150.160.140.250.150.200.100.060.440.190.420.21
60.010.380.430.180.000.430.450.280.250.180.030.260.220.260.080.230.450.42
70.040.120.280.170.110.000.150.240.050.050.270.320.330.110.090.400.190.06
80.300.170.210.420.210.290.190.380.030.340.320.300.340.150.280.110.440.19
90.100.100.350.320.240.280.300.280.100.120.300.410.150.000.100.400.180.24
100.000.220.210.090.100.130.180.370.240.290.250.230.320.140.270.340.250.10
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "output:\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 01234567891011121314151617
00.000.010.000.000.000.000.00-0.93-0.00-0.07-0.58-0.88-0.58-0.00-0.87-0.49-0.05-1.00
10.730.100.220.180.180.160.00-0.23-0.00-0.00-0.00-0.09-0.00-0.000.160.470.53-0.27
21.150.360.821.200.801.060.61-0.00-0.00-0.00-0.00-0.00-0.00-0.000.530.611.000.94
30.000.450.280.000.000.110.14-0.00-0.21-0.00-0.00-0.00-0.00-0.000.150.080.72-0.08
40.340.190.360.050.150.300.00-0.00-0.00-0.08-0.00-0.00-0.00-0.000.060.380.040.14
50.000.000.260.000.670.050.00-0.00-0.16-0.00-0.00-0.00-0.00-0.00-0.080.30-0.17-0.17
60.000.000.000.000.000.000.00-0.76-0.68-0.28-0.11-0.37-0.42-0.40-0.88-0.41-0.67-1.00
70.010.000.000.000.000.000.00-0.45-0.17-0.04-0.57-0.82-0.50-0.22-0.07-0.62-0.13-0.18
80.000.000.000.000.000.000.00-1.32-0.35-0.39-0.77-1.63-1.12-0.60-0.47-0.99-1.00-1.00
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "************************************************************************************************************************\n", - "input:\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 012345678910
00.30-1.040.750.94-1.95-1.300.13-0.32-0.02-0.850.88
10.780.071.130.47-0.860.37-0.960.88-0.05-0.18-0.68
21.22-0.15-0.43-0.350.530.370.410.432.14-0.41-0.51
3-0.810.621.13-0.11-0.84-0.820.650.740.54-0.670.23
40.120.220.870.220.680.070.290.63-1.46-0.32-0.47
5-0.64-0.281.49-0.870.97-1.68-0.330.160.590.710.79
6-0.35-0.460.86-0.19-1.28-1.13-0.920.500.140.69-0.43
70.160.63-0.310.46-0.66-0.36-0.38-1.200.49-0.470.01
80.480.450.67-0.10-0.42-0.08-1.69-1.45-1.32-1.000.40
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "monotonicity_indicator = [1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 0
01.00
11.00
21.00
31.00
41.00
51.00
61.00
71.00
81.00
91.00
101.00
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "kernel:\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 01234567891011121314151617
00.310.020.110.290.100.330.370.060.390.350.150.130.150.450.070.190.030.06
10.120.020.060.410.320.240.340.280.220.060.330.270.250.230.430.090.450.27
20.190.110.190.250.070.420.320.350.150.050.000.240.220.390.440.110.190.10
30.150.370.210.410.250.040.370.040.050.220.310.350.350.080.380.010.250.29
40.170.450.240.320.010.000.190.340.170.190.180.340.020.240.030.410.260.00
50.290.100.070.340.040.300.390.270.390.160.330.450.060.190.230.040.360.04
60.130.150.220.400.140.300.110.450.140.170.260.160.360.100.170.320.140.08
70.250.250.240.450.170.450.300.350.410.400.110.260.320.080.220.340.050.09
80.160.270.100.230.080.210.190.160.060.040.170.050.390.110.260.250.130.05
90.170.170.000.130.120.030.390.110.010.290.430.200.210.430.390.180.190.27
100.260.230.430.040.250.360.210.360.370.360.080.140.250.240.300.330.040.07
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "output:\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 01234567891011121314151617
00.000.000.080.000.000.000.00-0.82-0.58-0.32-1.07-1.09-0.00-0.63-0.21-0.74-1.00-0.15
10.360.000.000.510.110.720.76-0.12-0.00-0.00-0.05-0.00-0.00-0.000.56-0.340.130.22
20.720.680.321.100.100.840.68-0.00-0.00-0.00-0.00-0.00-0.00-0.000.200.970.33-0.07
30.000.000.360.350.360.820.00-0.00-0.00-0.19-0.29-0.13-0.00-0.200.670.20-0.000.14
40.180.140.260.680.090.380.36-0.00-0.00-0.00-0.00-0.00-0.07-0.000.140.150.330.10
50.010.550.500.000.000.210.00-0.00-0.27-0.00-0.44-0.25-0.00-0.000.440.83-0.24-0.01
60.000.000.000.000.000.000.00-0.89-0.85-0.48-0.77-0.90-0.21-0.30-0.09-0.69-0.83-0.03
70.000.000.000.000.010.000.00-0.78-0.59-0.65-0.21-0.55-0.19-0.37-0.17-0.71-0.100.03
80.000.000.000.000.000.000.00-1.24-0.48-0.95-1.13-0.71-1.40-0.30-0.76-1.00-0.47-0.39
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "************************************************************************************************************************\n", - "input:\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 012345678910
00.30-1.040.750.94-1.95-1.300.13-0.32-0.02-0.850.88
10.780.071.130.47-0.860.37-0.960.88-0.05-0.18-0.68
21.22-0.15-0.43-0.350.530.370.410.432.14-0.41-0.51
3-0.810.621.13-0.11-0.84-0.820.650.740.54-0.670.23
40.120.220.870.220.680.070.290.63-1.46-0.32-0.47
5-0.64-0.281.49-0.870.97-1.68-0.330.160.590.710.79
6-0.35-0.460.86-0.19-1.28-1.13-0.920.500.140.69-0.43
70.160.63-0.310.46-0.66-0.36-0.38-1.200.49-0.470.01
80.480.450.67-0.10-0.42-0.08-1.69-1.45-1.32-1.000.40
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "monotonicity_indicator = -1\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 0
0-1.00
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "kernel:\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 01234567891011121314151617
0-0.29-0.12-0.00-0.17-0.33-0.17-0.33-0.36-0.28-0.16-0.24-0.22-0.10-0.13-0.02-0.38-0.23-0.02
1-0.36-0.13-0.05-0.07-0.41-0.30-0.38-0.06-0.40-0.42-0.44-0.03-0.27-0.03-0.32-0.31-0.35-0.40
2-0.30-0.07-0.40-0.06-0.10-0.21-0.16-0.22-0.06-0.36-0.40-0.42-0.23-0.22-0.20-0.33-0.45-0.06
3-0.05-0.08-0.07-0.30-0.44-0.23-0.40-0.25-0.13-0.31-0.11-0.13-0.13-0.34-0.15-0.05-0.36-0.13
4-0.45-0.34-0.41-0.39-0.15-0.10-0.40-0.32-0.19-0.13-0.29-0.39-0.43-0.29-0.13-0.05-0.39-0.01
5-0.09-0.38-0.00-0.12-0.07-0.42-0.01-0.12-0.26-0.28-0.16-0.06-0.08-0.43-0.23-0.28-0.28-0.07
6-0.34-0.38-0.15-0.44-0.41-0.19-0.25-0.41-0.34-0.22-0.43-0.36-0.25-0.28-0.06-0.12-0.15-0.16
7-0.17-0.39-0.40-0.26-0.40-0.20-0.10-0.14-0.42-0.21-0.18-0.25-0.15-0.21-0.13-0.41-0.14-0.14
8-0.38-0.03-0.10-0.21-0.13-0.04-0.19-0.00-0.09-0.38-0.01-0.27-0.24-0.24-0.13-0.18-0.37-0.21
9-0.43-0.08-0.20-0.29-0.10-0.27-0.08-0.43-0.22-0.37-0.27-0.24-0.15-0.22-0.01-0.45-0.35-0.31
10-0.38-0.44-0.20-0.31-0.42-0.23-0.03-0.31-0.11-0.35-0.01-0.00-0.00-0.39-0.45-0.14-0.03-0.10
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "output:\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 01234567891011121314151617
01.050.880.590.610.000.700.64-0.00-0.00-0.00-0.00-0.00-0.00-0.000.240.741.000.55
10.270.260.000.410.000.000.00-0.00-0.23-0.34-0.21-0.20-0.00-0.02-0.04-0.82-0.52-0.02
20.000.000.000.000.000.000.00-0.36-0.77-0.71-0.39-1.00-0.82-0.67-0.11-0.74-0.97-0.31
30.000.000.000.000.000.010.00-0.00-0.16-0.50-0.38-0.33-0.20-0.00-0.39-0.20-0.12-0.36
40.000.000.000.000.000.000.00-0.45-0.46-0.00-0.84-0.48-0.36-0.13-0.08-0.28-0.330.13
50.000.020.000.000.120.330.00-0.41-0.00-0.44-0.33-0.90-0.56-0.04-0.24-0.27-0.48-0.16
60.741.200.110.900.840.650.87-0.00-0.00-0.00-0.00-0.00-0.00-0.000.600.010.530.12
70.470.890.910.620.260.370.01-0.00-0.00-0.00-0.00-0.00-0.00-0.000.070.610.290.01
81.301.170.981.611.090.590.65-0.00-0.00-0.00-0.00-0.00-0.00-0.000.090.930.950.81
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "************************************************************************************************************************\n", - "input:\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 012345678910
00.30-1.040.750.94-1.95-1.300.13-0.32-0.02-0.850.88
10.780.071.130.47-0.860.37-0.960.88-0.05-0.18-0.68
21.22-0.15-0.43-0.350.530.370.410.432.14-0.41-0.51
3-0.810.621.13-0.11-0.84-0.820.650.740.54-0.670.23
40.120.220.870.220.680.070.290.63-1.46-0.32-0.47
5-0.64-0.281.49-0.870.97-1.68-0.330.160.590.710.79
6-0.35-0.460.86-0.19-1.28-1.13-0.920.500.140.69-0.43
70.160.63-0.310.46-0.66-0.36-0.38-1.200.49-0.470.01
80.480.450.67-0.10-0.42-0.08-1.69-1.45-1.32-1.000.40
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "monotonicity_indicator = [-1. -1. -1. -1. -1. -1. -1. -1. -1. -1. -1.]\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 0
0-1.00
1-1.00
2-1.00
3-1.00
4-1.00
5-1.00
6-1.00
7-1.00
8-1.00
9-1.00
10-1.00
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "kernel:\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 01234567891011121314151617
0-0.45-0.28-0.30-0.41-0.17-0.39-0.22-0.45-0.28-0.40-0.18-0.20-0.16-0.18-0.10-0.13-0.14-0.35
1-0.09-0.27-0.09-0.14-0.02-0.36-0.21-0.05-0.05-0.01-0.02-0.45-0.03-0.09-0.01-0.05-0.39-0.05
2-0.17-0.15-0.37-0.35-0.32-0.03-0.24-0.31-0.35-0.41-0.00-0.37-0.18-0.26-0.09-0.44-0.09-0.17
3-0.42-0.17-0.11-0.31-0.32-0.11-0.20-0.10-0.34-0.15-0.24-0.22-0.22-0.08-0.40-0.02-0.23-0.38
4-0.13-0.17-0.06-0.13-0.32-0.42-0.28-0.44-0.03-0.26-0.38-0.45-0.08-0.06-0.04-0.33-0.27-0.38
5-0.32-0.38-0.19-0.19-0.33-0.01-0.15-0.08-0.31-0.27-0.07-0.11-0.21-0.22-0.18-0.27-0.19-0.15
6-0.30-0.16-0.09-0.25-0.23-0.44-0.25-0.16-0.05-0.13-0.20-0.09-0.14-0.18-0.15-0.22-0.37-0.38
7-0.20-0.14-0.12-0.10-0.42-0.42-0.14-0.04-0.44-0.11-0.10-0.17-0.06-0.29-0.22-0.24-0.01-0.45
8-0.31-0.11-0.16-0.21-0.16-0.39-0.12-0.36-0.36-0.29-0.24-0.24-0.20-0.18-0.33-0.39-0.20-0.02
9-0.41-0.14-0.12-0.21-0.01-0.37-0.03-0.22-0.38-0.22-0.09-0.22-0.19-0.17-0.13-0.32-0.30-0.21
10-0.31-0.05-0.02-0.36-0.04-0.15-0.03-0.12-0.36-0.21-0.40-0.03-0.04-0.03-0.23-0.01-0.02-0.41
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "output:\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 01234567891011121314151617
00.200.840.110.000.551.240.55-0.00-0.02-0.00-0.00-0.00-0.00-0.00-0.200.981.000.30
10.000.000.000.000.000.190.00-0.14-0.87-0.50-0.00-0.34-0.28-0.53-0.24-0.340.23-0.09
20.000.000.000.000.000.000.00-1.34-0.82-1.02-0.75-0.74-0.56-0.68-0.71-1.00-0.65-0.56
30.230.180.000.000.000.000.00-0.00-0.27-0.00-0.00-0.21-0.00-0.28-0.21-0.250.020.00
40.090.000.000.000.000.000.00-0.08-0.00-0.14-0.00-0.50-0.01-0.250.23-0.20-0.14-0.66
50.180.490.000.000.030.000.00-0.79-0.36-0.49-0.39-0.69-0.00-0.090.08-0.840.10-0.25
60.640.770.080.500.620.790.68-0.00-0.06-0.00-0.00-0.00-0.00-0.000.280.240.860.87
70.320.240.230.180.760.620.28-0.00-0.00-0.00-0.00-0.00-0.00-0.000.130.730.090.87
81.230.500.270.511.082.000.60-0.00-0.00-0.00-0.00-0.00-0.00-0.001.001.001.001.00
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "ok\n" - ] - } - ], - "source": [ - "units = 18\n", - "activation = \"relu\"\n", - "batch_size = 9\n", - "x_len = 11\n", - "\n", - "x = np.random.default_rng(42).normal(size=(batch_size, x_len))\n", - "\n", - "tf.keras.utils.set_random_seed(42)\n", - "\n", - "for monotonicity_indicator in [\n", - " [1] * 4 + [0] * 4 + [-1] * 3,\n", - " 1,\n", - " np.ones((x_len,)),\n", - " -1,\n", - " -np.ones((x_len,)),\n", - "]:\n", - " print(\"*\" * 120)\n", - " mono_layer = MonoDense(\n", - " units=units,\n", - " activation=activation,\n", - " monotonicity_indicator=monotonicity_indicator,\n", - " activation_weights=(7, 7, 4),\n", - " )\n", - " print(\"input:\")\n", - " display_kernel(x)\n", - "\n", - " y = mono_layer(x)\n", - " print(f\"monotonicity_indicator = {monotonicity_indicator}\")\n", - " display_kernel(mono_layer.monotonicity_indicator)\n", - "\n", - " print(\"kernel:\")\n", - " with replace_kernel_using_monotonicity_indicator(\n", - " mono_layer, mono_layer.monotonicity_indicator\n", - " ):\n", - " display_kernel(mono_layer.kernel)\n", - "\n", - " print(\"output:\")\n", - " display_kernel(y)\n", - "print(\"ok\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Model: \"model\"\n", - "_________________________________________________________________\n", - " Layer (type) Output Shape Param # \n", - "=================================================================\n", - " input_1 (InputLayer) [(None, 5, 7, 8)] 0 \n", - " \n", - " mono_dense_5 (MonoDense) (None, 5, 7, 12) 108 \n", - " \n", - "=================================================================\n", - "Total params: 108\n", - "Trainable params: 108\n", - "Non-trainable params: 0\n", - "_________________________________________________________________\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 0
01.00
11.00
21.00
3-1.00
4-1.00
5-1.00
60.00
70.00
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "x = Input(shape=(5, 7, 8))\n", - "\n", - "layer = MonoDense(\n", - " units=12,\n", - " activation=activation,\n", - " monotonicity_indicator=[1] * 3 + [-1] * 3 + [0] * 2,\n", - " is_convex=False,\n", - " is_concave=False,\n", - ")\n", - "\n", - "y = layer(x)\n", - "\n", - "model = Model(inputs=x, outputs=y)\n", - "\n", - "model.summary()\n", - "\n", - "display_kernel(layer.monotonicity_indicator)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Mono blocks" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | export\n", - "\n", - "\n", - "def _create_mono_block(\n", - " *,\n", - " units: List[int],\n", - " activation: Union[str, Callable[[TensorLike], TensorLike]],\n", - " monotonicity_indicator: TensorLike = 1,\n", - " is_convex: bool = False,\n", - " is_concave: bool = False,\n", - " dropout: Optional[float] = None,\n", - ") -> Callable[[TensorLike], TensorLike]:\n", - " def create_mono_block_inner(\n", - " x: TensorLike,\n", - " *,\n", - " units: List[int] = units,\n", - " activation: Union[str, Callable[[TensorLike], TensorLike]] = activation,\n", - " monotonicity_indicator: TensorLike = monotonicity_indicator,\n", - " is_convex: bool = is_convex,\n", - " is_concave: bool = is_concave,\n", - " ) -> TensorLike:\n", - " if len(units) == 0:\n", - " return x\n", - "\n", - " y = x\n", - " for i in range(len(units)):\n", - " y = MonoDense(\n", - " units=units[i],\n", - " activation=activation if i < len(units) - 1 else None,\n", - " monotonicity_indicator=monotonicity_indicator if i == 0 else 1,\n", - " is_convex=is_convex,\n", - " is_concave=is_concave,\n", - " name=f\"mono_dense_{i}\"\n", - " + (\"_increasing\" if i != 0 else \"\")\n", - " + (\"_convex\" if is_convex else \"\")\n", - " + (\"_concave\" if is_concave else \"\"),\n", - " )(y)\n", - " if (i < len(units) - 1) and dropout:\n", - " y = Dropout(dropout)(y)\n", - "\n", - " return y\n", - "\n", - " return create_mono_block_inner" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Model: \"model_1\"\n", - "_________________________________________________________________\n", - " Layer (type) Output Shape Param # \n", - "=================================================================\n", - " input_2 (InputLayer) [(None, 5, 7, 8)] 0 \n", - " \n", - " mono_dense_0 (MonoDense) (None, 5, 7, 16) 144 \n", - " \n", - " dropout (Dropout) (None, 5, 7, 16) 0 \n", - " \n", - " mono_dense_1_increasing (Mo (None, 5, 7, 16) 272 \n", - " noDense) \n", - " \n", - " dropout_1 (Dropout) (None, 5, 7, 16) 0 \n", - " \n", - " mono_dense_2_increasing (Mo (None, 5, 7, 16) 272 \n", - " noDense) \n", - " \n", - " dropout_2 (Dropout) (None, 5, 7, 16) 0 \n", - " \n", - " mono_dense_3_increasing (Mo (None, 5, 7, 3) 51 \n", - " noDense) \n", - " \n", - "=================================================================\n", - "Total params: 739\n", - "Trainable params: 739\n", - "Non-trainable params: 0\n", - "_________________________________________________________________\n" - ] - } - ], - "source": [ - "x = Input(shape=(5, 7, 8))\n", - "\n", - "# monotonicity indicator must be broadcastable to input shape, so we use the vector of length 8\n", - "monotonicity_indicator = [1] * 3 + [0] * 2 + [-1] * 3\n", - "\n", - "# this mono block has 4 layers with the final one having the shape\n", - "mono_block = _create_mono_block(\n", - " units=[16] * 3 + [3],\n", - " monotonicity_indicator=monotonicity_indicator,\n", - " activation=\"elu\",\n", - " dropout=0.1,\n", - ")\n", - "y = mono_block(x)\n", - "model = Model(inputs=x, outputs=y)\n", - "model.summary()\n", - "\n", - "mono_layers = [layer for layer in model.layers if isinstance(layer, MonoDense)]\n", - "assert not (mono_layers[0].monotonicity_indicator == 1).all()\n", - "for mono_layer in mono_layers[1:]:\n", - " assert (mono_layer.monotonicity_indicator == 1).all()\n", - "\n", - "for mono_layer in mono_layers[:-1]:\n", - " assert mono_layer.org_activation == \"elu\"\n", - "assert mono_layers[-1].org_activation == None" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | export\n", - "\n", - "T = TypeVar(\"T\")\n", - "\n", - "\n", - "def _prepare_mono_input_n_param(\n", - " inputs: Union[TensorLike, Dict[str, TensorLike], List[TensorLike]],\n", - " param: Union[T, Dict[str, T], List[T]],\n", - ") -> Tuple[List[TensorLike], List[T], List[str]]:\n", - " if isinstance(inputs, list):\n", - " if isinstance(param, int):\n", - " param = [param] * len(inputs) # type: ignore\n", - " elif isinstance(param, list):\n", - " if len(inputs) != len(param):\n", - " raise ValueError(f\"{len(inputs)} != {len(param)}\")\n", - " else:\n", - " raise ValueError(f\"Uncompatible types: {type(inputs)=}, {type(param)=}\")\n", - " sorted_feature_names = [f\"{i}\" for i in range(len(inputs))]\n", - "\n", - " elif isinstance(inputs, dict):\n", - " sorted_feature_names = sorted(inputs.keys())\n", - "\n", - " if isinstance(param, int):\n", - " param = [param] * len(inputs) # type: ignore\n", - " elif isinstance(param, dict):\n", - " if set(param.keys()) != set(sorted_feature_names):\n", - " raise ValueError(f\"{set(param.keys())} != {set(sorted_feature_names)}\")\n", - " else:\n", - " param = [param[k] for k in sorted_feature_names]\n", - " else:\n", - " raise ValueError(f\"Uncompatible types: {type(inputs)=}, {type(param)=}\")\n", - "\n", - " inputs = [inputs[k] for k in sorted_feature_names]\n", - "\n", - " else:\n", - " if not isinstance(param, int):\n", - " raise ValueError(f\"Uncompatible types: {type(inputs)=}, {type(param)=}\")\n", - " inputs = [inputs]\n", - " param = [param] # type: ignore\n", - " sorted_feature_names = [\"inputs\"]\n", - "\n", - " return inputs, param, sorted_feature_names" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "inputs = Input(name=\"a\", shape=(1,))\n", - "param = 0\n", - "\n", - "actual = _prepare_mono_input_n_param(inputs, param)\n", - "expected = [inputs], [0], [\"inputs\"]\n", - "assert actual == expected, actual" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - ", type(param)=\") tblen=2>" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "inputs = Input(name=\"a\", shape=(1,))\n", - "param = {\"a\": 1}\n", - "\n", - "with pytest.raises(ValueError) as e:\n", - " actual = _prepare_mono_input_n_param(inputs, param)\n", - "\n", - "e" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "a = Input(name=\"a\", shape=(1,))\n", - "actual = _prepare_mono_input_n_param({\"a\": a}, -1)\n", - "assert actual == ([a], [-1], [\"a\"])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "a = Input(name=\"a\", shape=(1,))\n", - "b = Input(name=\"b\", shape=(1,))\n", - "\n", - "actual = _prepare_mono_input_n_param({\"a\": a, \"b\": b}, {\"a\": -1, \"b\": 1})\n", - "assert actual == ([a, b], [-1, 1], [\"a\", \"b\"])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "with pytest.raises(ValueError) as e:\n", - " actual = _prepare_mono_input_n_param(\n", - " {\"a\": Input(name=\"a\", shape=(1,)), \"b\": Input(name=\"b\", shape=(1,))}, {\"a\": -1}\n", - " )\n", - "e" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "a = Input(name=\"a\", shape=(1,))\n", - "b = Input(name=\"b\", shape=(1,))\n", - "\n", - "actual = _prepare_mono_input_n_param([a, b], [1, -1])\n", - "assert actual == ([a, b], [1, -1], [\"0\", \"1\"])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "a = Input(name=\"a\", shape=(1,))\n", - "b = Input(name=\"b\", shape=(1,))\n", - "\n", - "actual = _prepare_mono_input_n_param([a, b], -1)\n", - "assert actual == ([a, b], [-1, -1], [\"0\", \"1\"])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | export\n", - "\n", - "\n", - "def _check_convexity_params(\n", - " monotonicity_indicator: List[int],\n", - " is_convex: List[bool],\n", - " is_concave: List[bool],\n", - " names: List[str],\n", - ") -> Tuple[bool, bool]:\n", - " ix = [\n", - " i for i in range(len(monotonicity_indicator)) if is_convex[i] and is_concave[i]\n", - " ]\n", - "\n", - " if len(ix) > 0:\n", - " raise ValueError(\n", - " f\"Parameters both convex and concave: {[names[i] for i in ix]}\"\n", - " )\n", - "\n", - " has_convex = any(is_convex)\n", - " has_concave = any(is_concave)\n", - " if has_convex and has_concave:\n", - " print(\"WARNING: we have both convex and concave parameters\")\n", - "\n", - " return has_convex, has_concave" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "monotonicity_indicator = [-1, 0, 1]\n", - "is_convex = [True] * 3\n", - "is_concave = [False] * 3\n", - "names = list(\"abc\")\n", - "has_convex, has_concave = _check_convexity_params(\n", - " monotonicity_indicator, is_convex, is_concave, names\n", - ")\n", - "assert (has_convex, has_concave) == (True, False)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Type-1 architecture" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | export\n", - "\n", - "\n", - "@export\n", - "def _create_type_1(\n", - " inputs: Union[TensorLike, Dict[str, TensorLike], List[TensorLike]],\n", - " *,\n", - " units: int,\n", - " final_units: int,\n", - " activation: Union[str, Callable[[TensorLike], TensorLike]],\n", - " n_layers: int,\n", - " final_activation: Optional[Union[str, Callable[[TensorLike], TensorLike]]] = None,\n", - " monotonicity_indicator: Union[int, Dict[str, int], List[int]] = 1,\n", - " is_convex: Union[bool, Dict[str, bool], List[bool]] = False,\n", - " is_concave: Union[bool, Dict[str, bool], List[bool]] = False,\n", - " dropout: Optional[float] = None,\n", - ") -> TensorLike:\n", - " \"\"\"Builds Type-1 monotonic network\n", - "\n", - " Type-1 architecture corresponds to the standard MLP type of neural network architecture used in general, where each\n", - " of the input features is concatenated to form one single input feature vector $\\mathbf{x}$ and fed into the network,\n", - " with the only difference being that instead of standard fully connected or dense layers, we employ monotonic dense units\n", - " throughout. For the first (or input layer) layer, the indicator vector $\\mathbf{t}$, is used to identify the monotonicity\n", - " property of the input feature with respect to the output. Specifically, $\\mathbf{t}$ is set to $1$ for those components\n", - " in the input feature vector that are monotonically increasing and is set to $-1$ for those components that are monotonically\n", - " decreasing and set to $0$ if the feature is non-monotonic. For the subsequent hidden layers, monotonic dense units with the\n", - " indicator vector $\\mathbf{t}$ always being set to $1$ are used in order to preserve monotonicity. Finally, depending on\n", - " whether the problem at hand is a regression problem or a classification problem (or even a multi-task problem), an appropriate\n", - " activation function (such as linear activation or sigmoid or softmax) to obtain the final output.\n", - "\n", - " ![mono-dense-layer-diagram.png](../../../images/nbs/images/type-1.png)\n", - "\n", - " Args:\n", - " inputs: input tensor or a dictionary of tensors\n", - " units: number of units in hidden layers\n", - " final_units: number of units in the output layer\n", - " activation: the base activation function\n", - " n_layers: total number of layers (hidden layers plus the output layer)\n", - " final_activation: the activation function of the final layer (typicall softmax, sigmoid or linear).\n", - " If set to None (default value), then the linear activation is used.\n", - " monotonicity_indicator: if an instance of dictionary, then maps names of input feature to their monotonicity\n", - " indicator (-1 for monotonically decreasing, 1 for monotonically increasing and 0 otherwise). If int,\n", - " then all input features are set to the same monotinicity indicator.\n", - " is_convex: set to True if a particular input feature is convex\n", - " is_concave: set to True if a particular inputs feature is concave\n", - " dropout: dropout rate. If set to float greater than 0, Dropout layers are inserted after hidden layers.\n", - "\n", - " Returns:\n", - " Output tensor\n", - "\n", - " \"\"\"\n", - " _, is_convex, _ = _prepare_mono_input_n_param(inputs, is_convex)\n", - " _, is_concave, _ = _prepare_mono_input_n_param(inputs, is_concave)\n", - " x, monotonicity_indicator, names = _prepare_mono_input_n_param(\n", - " inputs, monotonicity_indicator\n", - " )\n", - " has_convex, has_concave = _check_convexity_params(\n", - " monotonicity_indicator, is_convex, is_concave, names\n", - " )\n", - "\n", - " y = tf.keras.layers.Concatenate()(x)\n", - "\n", - " y = _create_mono_block(\n", - " units=[units] * (n_layers - 1) + [final_units],\n", - " activation=activation,\n", - " monotonicity_indicator=monotonicity_indicator,\n", - " is_convex=has_convex,\n", - " is_concave=has_concave and not has_convex,\n", - " dropout=dropout,\n", - " )(y)\n", - "\n", - " if final_activation is not None:\n", - " y = tf.keras.activations.get(final_activation)(y)\n", - "\n", - " return y" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Model: \"model_2\"\n", - "__________________________________________________________________________________________________\n", - " Layer (type) Output Shape Param # Connected to \n", - "==================================================================================================\n", - " a (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " b (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " c (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " d (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " concatenate (Concatenate) (None, 4) 0 ['a[0][0]', \n", - " 'b[0][0]', \n", - " 'c[0][0]', \n", - " 'd[0][0]'] \n", - " \n", - " mono_dense_0_convex (MonoDense (None, 64) 320 ['concatenate[0][0]'] \n", - " ) \n", - " \n", - " dropout_3 (Dropout) (None, 64) 0 ['mono_dense_0_convex[0][0]'] \n", - " \n", - " mono_dense_1_increasing_convex (None, 64) 4160 ['dropout_3[0][0]'] \n", - " (MonoDense) \n", - " \n", - " dropout_4 (Dropout) (None, 64) 0 ['mono_dense_1_increasing_convex[\n", - " 0][0]'] \n", - " \n", - " mono_dense_2_increasing_convex (None, 64) 4160 ['dropout_4[0][0]'] \n", - " (MonoDense) \n", - " \n", - " dropout_5 (Dropout) (None, 64) 0 ['mono_dense_2_increasing_convex[\n", - " 0][0]'] \n", - " \n", - " mono_dense_3_increasing_convex (None, 10) 650 ['dropout_5[0][0]'] \n", - " (MonoDense) \n", - " \n", - " tf.nn.softmax (TFOpLambda) (None, 10) 0 ['mono_dense_3_increasing_convex[\n", - " 0][0]'] \n", - " \n", - "==================================================================================================\n", - "Total params: 9,290\n", - "Trainable params: 9,290\n", - "Non-trainable params: 0\n", - "__________________________________________________________________________________________________\n" - ] - } - ], - "source": [ - "n_layers = 4\n", - "\n", - "inputs = {name: Input(name=name, shape=(1,)) for name in list(\"abcd\")}\n", - "outputs = _create_type_1(\n", - " inputs=inputs,\n", - " units=64,\n", - " final_units=10,\n", - " activation=\"elu\",\n", - " n_layers=n_layers,\n", - " final_activation=\"softmax\",\n", - " monotonicity_indicator=dict(a=1, b=0, c=-1, d=0),\n", - " is_convex=True,\n", - " dropout=0.1,\n", - ")\n", - "\n", - "model = Model(inputs=inputs, outputs=outputs)\n", - "model.summary()\n", - "\n", - "mono_layers = [layer for layer in model.layers if isinstance(layer, MonoDense)]\n", - "assert len(mono_layers) == n_layers\n", - "\n", - "# check monotonicity indicator\n", - "np.testing.assert_array_equal(\n", - " mono_layers[0].monotonicity_indicator, np.array([1, 0, -1, 0]).reshape((-1, 1))\n", - ")\n", - "for i in range(1, n_layers):\n", - " assert mono_layers[i].monotonicity_indicator == 1\n", - "\n", - "# check convexity and concavity\n", - "for i in range(n_layers):\n", - " assert mono_layers[i].is_convex\n", - " assert not mono_layers[i].is_concave" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Type-2 architecture" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[1, 1, 0, 0, 1, 1]" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "monotonicity_indicator = [1, 0, -1]\n", - "input_units = 2\n", - "monotonicity_indicator = sum(\n", - " [[abs(x)] * input_units for x in monotonicity_indicator], []\n", - ")\n", - "monotonicity_indicator" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | export\n", - "\n", - "\n", - "@export\n", - "def _create_type_2(\n", - " inputs: Union[TensorLike, Dict[str, TensorLike], List[TensorLike]],\n", - " *,\n", - " input_units: Optional[int] = None,\n", - " units: int,\n", - " final_units: int,\n", - " activation: Union[str, Callable[[TensorLike], TensorLike]],\n", - " n_layers: int,\n", - " final_activation: Optional[Union[str, Callable[[TensorLike], TensorLike]]] = None,\n", - " monotonicity_indicator: Union[int, Dict[str, int], List[int]] = 1,\n", - " is_convex: Union[bool, Dict[str, bool], List[bool]] = False,\n", - " is_concave: Union[bool, Dict[str, bool], List[bool]] = False,\n", - " dropout: Optional[float] = None,\n", - ") -> TensorLike:\n", - " \"\"\"Builds Type-2 monotonic network\n", - "\n", - " Type-2 architecture is another example of a neural network architecture that can be built employing proposed\n", - " monotonic dense blocks. The difference when compared to the architecture described above lies in the way input\n", - " features are fed into the hidden layers of neural network architecture. Instead of concatenating the features\n", - " directly, this architecture provides flexibility to employ any form of complex feature extractors for the\n", - " non-monotonic features and use the extracted feature vectors as inputs. Another difference is that each monotonic\n", - " input is passed through separate monotonic dense units. This provides an advantage since depending on whether the\n", - " input is completely concave or convex or both, we can adjust the activation selection vector $\\mathbf{s}$ appropriately\n", - " along with an appropriate value for the indicator vector $\\mathbf{t}$. Thus, each of the monotonic input features has\n", - " a separate monotonic dense layer associated with it. Thus as the major difference to the above-mentioned architecture,\n", - " we concatenate the feature vectors instead of concatenating the inputs directly. The subsequent parts of the network are\n", - " similar to the architecture described above wherein for the rest of the hidden monotonic dense units, the indicator vector\n", - " $\\mathbf{t}$ is always set to $1$ to preserve monotonicity.\n", - "\n", - " ![mono-dense-layer-diagram.png](../../../images/nbs/images/type-2.png)\n", - "\n", - " Args:\n", - " inputs: input tensor or a dictionary of tensors\n", - " input_units: used to preprocess features before entering the common mono block\n", - " units: number of units in hidden layers\n", - " final_units: number of units in the output layer\n", - " activation: the base activation function\n", - " n_layers: total number of layers (hidden layers plus the output layer)\n", - " final_activation: the activation function of the final layer (typicall softmax, sigmoid or linear).\n", - " If set to None (default value), then the linear activation is used.\n", - " monotonicity_indicator: if an instance of dictionary, then maps names of input feature to their monotonicity\n", - " indicator (-1 for monotonically decreasing, 1 for monotonically increasing and 0 otherwise). If int,\n", - " then all input features are set to the same monotinicity indicator.\n", - " is_convex: set to True if a particular input feature is convex\n", - " is_concave: set to True if a particular inputs feature is concave\n", - " dropout: dropout rate. If set to float greater than 0, Dropout layers are inserted after hidden layers.\n", - "\n", - " Returns:\n", - " Output tensor\n", - "\n", - " \"\"\"\n", - " _, is_convex, _ = _prepare_mono_input_n_param(inputs, is_convex)\n", - " _, is_concave, _ = _prepare_mono_input_n_param(inputs, is_concave)\n", - " x, monotonicity_indicator, names = _prepare_mono_input_n_param(\n", - " inputs, monotonicity_indicator\n", - " )\n", - " has_convex, has_concave = _check_convexity_params(\n", - " monotonicity_indicator, is_convex, is_concave, names\n", - " )\n", - "\n", - " if input_units is None:\n", - " input_units = max(units // 4, 1)\n", - "\n", - " y = [\n", - " (\n", - " MonoDense(\n", - " units=input_units,\n", - " activation=activation,\n", - " monotonicity_indicator=monotonicity_indicator[i],\n", - " is_convex=is_convex[i],\n", - " is_concave=is_concave[i],\n", - " name=f\"mono_dense_{names[i]}\"\n", - " + (\"_increasing\" if monotonicity_indicator[i] == 1 else \"_decreasing\")\n", - " + (\"_convex\" if is_convex[i] else \"\")\n", - " + (\"_concave\" if is_concave[i] else \"\"),\n", - " )\n", - " if monotonicity_indicator[i] != 0\n", - " else (\n", - " Dense(\n", - " units=input_units, activation=activation, name=f\"dense_{names[i]}\"\n", - " )\n", - " )\n", - " )(x[i])\n", - " for i in range(len(inputs))\n", - " ]\n", - "\n", - " y = Concatenate(name=\"preprocessed_features\")(y)\n", - " monotonicity_indicator_block: List[int] = sum(\n", - " [[abs(x)] * input_units for x in monotonicity_indicator], []\n", - " )\n", - "\n", - " y = _create_mono_block(\n", - " units=[units] * (n_layers - 1) + [final_units],\n", - " activation=activation,\n", - " monotonicity_indicator=monotonicity_indicator_block,\n", - " is_convex=has_convex,\n", - " is_concave=has_concave and not has_convex,\n", - " dropout=dropout,\n", - " )(y)\n", - "\n", - " if final_activation is not None:\n", - " y = tf.keras.activations.get(final_activation)(y)\n", - "\n", - " return y" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "************************************************************************************************************************\n", - "\n", - "dropout=False\n", - "\n", - "Model: \"model_3\"\n", - "__________________________________________________________________________________________________\n", - " Layer (type) Output Shape Param # Connected to \n", - "==================================================================================================\n", - " a (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " b (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " c (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " d (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " mono_dense_a_increasing_convex (None, 8) 16 ['a[0][0]'] \n", - " (MonoDense) \n", - " \n", - " dense_b (Dense) (None, 8) 16 ['b[0][0]'] \n", - " \n", - " mono_dense_c_decreasing (MonoD (None, 8) 16 ['c[0][0]'] \n", - " ense) \n", - " \n", - " dense_d (Dense) (None, 8) 16 ['d[0][0]'] \n", - " \n", - " preprocessed_features (Concate (None, 32) 0 ['mono_dense_a_increasing_convex[\n", - " nate) 0][0]', \n", - " 'dense_b[0][0]', \n", - " 'mono_dense_c_decreasing[0][0]',\n", - " 'dense_d[0][0]'] \n", - " \n", - " mono_dense_0_convex (MonoDense (None, 32) 1056 ['preprocessed_features[0][0]'] \n", - " ) \n", - " \n", - " mono_dense_1_increasing_convex (None, 32) 1056 ['mono_dense_0_convex[0][0]'] \n", - " (MonoDense) \n", - " \n", - " mono_dense_2_increasing_convex (None, 10) 330 ['mono_dense_1_increasing_convex[\n", - " (MonoDense) 0][0]'] \n", - " \n", - " tf.nn.softmax_1 (TFOpLambda) (None, 10) 0 ['mono_dense_2_increasing_convex[\n", - " 0][0]'] \n", - " \n", - "==================================================================================================\n", - "Total params: 2,506\n", - "Trainable params: 2,506\n", - "Non-trainable params: 0\n", - "__________________________________________________________________________________________________\n", - "************************************************************************************************************************\n", - "\n", - "dropout=True\n", - "\n", - "Model: \"model_4\"\n", - "__________________________________________________________________________________________________\n", - " Layer (type) Output Shape Param # Connected to \n", - "==================================================================================================\n", - " a (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " b (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " c (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " d (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " mono_dense_a_increasing_convex (None, 8) 16 ['a[0][0]'] \n", - " (MonoDense) \n", - " \n", - " dense_b (Dense) (None, 8) 16 ['b[0][0]'] \n", - " \n", - " mono_dense_c_decreasing (MonoD (None, 8) 16 ['c[0][0]'] \n", - " ense) \n", - " \n", - " dense_d (Dense) (None, 8) 16 ['d[0][0]'] \n", - " \n", - " preprocessed_features (Concate (None, 32) 0 ['mono_dense_a_increasing_convex[\n", - " nate) 0][0]', \n", - " 'dense_b[0][0]', \n", - " 'mono_dense_c_decreasing[0][0]',\n", - " 'dense_d[0][0]'] \n", - " \n", - " mono_dense_0_convex (MonoDense (None, 32) 1056 ['preprocessed_features[0][0]'] \n", - " ) \n", - " \n", - " dropout_6 (Dropout) (None, 32) 0 ['mono_dense_0_convex[0][0]'] \n", - " \n", - " mono_dense_1_increasing_convex (None, 32) 1056 ['dropout_6[0][0]'] \n", - " (MonoDense) \n", - " \n", - " dropout_7 (Dropout) (None, 32) 0 ['mono_dense_1_increasing_convex[\n", - " 0][0]'] \n", - " \n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - " mono_dense_2_increasing_convex (None, 10) 330 ['dropout_7[0][0]'] \n", - " (MonoDense) \n", - " \n", - " tf.nn.softmax_2 (TFOpLambda) (None, 10) 0 ['mono_dense_2_increasing_convex[\n", - " 0][0]'] \n", - " \n", - "==================================================================================================\n", - "Total params: 2,506\n", - "Trainable params: 2,506\n", - "Non-trainable params: 0\n", - "__________________________________________________________________________________________________\n" - ] - } - ], - "source": [ - "for dropout in [False, True]:\n", - " print(\"*\" * 120)\n", - " print()\n", - " print(f\"{dropout=}\")\n", - " print()\n", - " inputs = {name: Input(name=name, shape=(1,)) for name in list(\"abcd\")}\n", - " outputs = _create_type_2(\n", - " inputs,\n", - " units=32,\n", - " final_units=10,\n", - " activation=\"elu\",\n", - " final_activation=\"softmax\",\n", - " n_layers=3,\n", - " dropout=dropout,\n", - " monotonicity_indicator=dict(a=1, b=0, c=-1, d=0),\n", - " is_convex=dict(a=True, b=False, c=False, d=False),\n", - " is_concave=False,\n", - " )\n", - " model = Model(inputs=inputs, outputs=outputs)\n", - " model.summary()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "python3", - "language": "python", - "name": "python3" - } - }, - "nbformat": 4, - "nbformat_minor": 1 + "nbformat": 4, + "nbformat_minor": 1 } diff --git a/nbs/_quarto.yml b/nbs/_quarto.yml deleted file mode 100644 index 0a6dfcb..0000000 --- a/nbs/_quarto.yml +++ /dev/null @@ -1,20 +0,0 @@ -project: - type: website - -format: - html: - theme: cosmo - css: styles.css - toc: true - -website: - twitter-card: true - open-graph: true - repo-actions: [issue] - navbar: - background: primary - search: true - sidebar: - style: floating - -metadata-files: [nbdev.yml, sidebar.yml] \ No newline at end of file diff --git a/nbs/experiments/.gitignore b/nbs/experiments/.gitignore index fc88de0..affd69b 100644 --- a/nbs/experiments/.gitignore +++ b/nbs/experiments/.gitignore @@ -1,4 +1,3 @@ /tuner /tuner_final /data - diff --git a/nbs/experiments/AutoMPG.ipynb b/nbs/experiments/AutoMPG.ipynb index f2041c5..84d4507 100644 --- a/nbs/experiments/AutoMPG.ipynb +++ b/nbs/experiments/AutoMPG.ipynb @@ -1,2312 +1,2312 @@ { - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | default_exp _experiments.auto" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Auto MPG" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Running in Google Colab\n", - "\n", - "You can run this experiment in Google Colab by clicking the button below:\n", - "\n", - "\n", - "\n", - " \"Open\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | hide\n", - "\n", - "from IPython.display import Markdown, display_markdown\n", - "\n", - "try:\n", - " import google.colab\n", - "\n", - " in_colab = True\n", - "except:\n", - " in_colab = False\n", - "\n", - "if in_colab:\n", - " display(\n", - " Markdown(\n", - " \"\"\"\n", - "### If you see this message, you are running in Google Colab\n", - "Along with this interactive tutorial the content of this notebook is organized and formatted for documentation purpuoses. \n", - "\n", - "You can ignore the '# | hide', '# | notest' and '# | echo: false' comments, they are not important for the tutorial.\n", - " \"\"\"\n", - " )\n", - " )" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | hide\n", - "\n", - "if in_colab:\n", - " !pip install \"monotonic-nn[experiments]\"" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Dataset" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The Auto MPG Dataset is a regression dataset [1] with 7 features:\n", - "\n", - "- Cylinders\n", - "\n", - "- Displacement\n", - "\n", - "- Horsepower\n", - "\n", - "- Weight\n", - "\n", - "- Acceleration\n", - "\n", - "- Model Year\n", - "\n", - "- Origin.\n", - "\n", - "The dependant variable MPG is monotonically decreasing with respect to features Weigh, Displacement, and Horsepower. The `monotonicity_indicator` corrsponding to these features are set to -1, since the relationship is a monotonically decreasing one with respect to the dependant variable.\n", - "\n", - "This is a part of comparison with methods and datasets from COMET [2].\n", - "\n", - "References:\n", - "\n", - "1. Ross Quinlan. Combining Instance-Based and Model-Based Learning. In Proceedings on the Tenth International Conference of Machine Learning, 236-243, University of Massachusetts, Amherst. Morgan Kaufmann, 1993.\n", - "\n", - " https://archive.ics.uci.edu/ml/datasets/auto+mpg\n", - "\n", - "2. Aishwarya Sivaraman, Golnoosh Farnadi, Todd Millstein, and Guy Van den Broeck. Counterexample-guided learning of monotonic neural networks. Advances in Neural Information Processing Systems, 33:11936–11948, 2020.\n", - "\n", - " Github repo: https://github.com/AishwaryaSivaraman/COMET\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "monotonicity_indicator = {\n", - " \"Cylinders\": 0,\n", - " \"Displacement\": -1,\n", - " \"Horsepower\": -1,\n", - " \"Weight\": -1,\n", - " \"Acceleration\": 0,\n", - " \"Model_Year\": 0,\n", - " \"Origin\": 0,\n", - "}" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | include: false\n", - "\n", - "from airt.keras.experiments import (\n", - " create_tuner_stats,\n", - " find_hyperparameters,\n", - " get_train_n_test_data,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | include: false\n", - "import shutil\n", - "from os import environ\n", - "\n", - "import tensorflow as tf" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "3 Physical GPUs, 1 Logical GPU\n" - ] - } - ], - "source": [ - "# | include: false\n", - "\n", - "environ[\"TF_FORCE_GPU_ALLOW_GROWTH\"] = \"true\"\n", - "\n", - "gpus = tf.config.list_physical_devices(\"GPU\")\n", - "if gpus:\n", - " # Restrict TensorFlow to only use the first GPU\n", - " try:\n", - " tf.config.set_visible_devices(gpus[2], \"GPU\")\n", - " logical_gpus = tf.config.list_logical_devices(\"GPU\")\n", - " print(len(gpus), \"Physical GPUs,\", len(logical_gpus), \"Logical GPU\")\n", - " except RuntimeError as e:\n", - " # Visible devices must be set before GPUs have been initialized\n", - " print(e)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "These are a few examples of the dataset:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 01234
Cylinders1.4828071.4828071.4828071.4828071.482807
Displacement1.0730281.4829021.0444321.0253682.235927
Horsepower0.6505641.5489931.1639520.9072582.396084
Weight0.6066250.8281310.5234130.5421651.587581
Acceleration-1.275546-1.452517-1.275546-1.806460-1.983431
Model_Year-1.631803-1.631803-1.631803-1.631803-1.631803
Origin-0.701669-0.701669-0.701669-0.701669-0.701669
ground_truth18.00000015.00000016.00000017.00000015.000000
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# | echo: false\n", - "\n", - "train_df, test_df = get_train_n_test_data(dataset_name=\"auto\")\n", - "display(train_df.head().T.style)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Hyperparameter search" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The choice of the batch size and the maximum number of epochs depends on the dataset size. For this dataset, we use the following values:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "batch_size = 16\n", - "max_epochs = 50" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We use the Type-2 architecture built using `MonoDense` layer with the following set of hyperparameters ranges:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def hp_params_f(hp):\n", - " return dict(\n", - " units=hp.Int(\"units\", min_value=16, max_value=24, step=1),\n", - " n_layers=hp.Int(\"n_layers\", min_value=2, max_value=2),\n", - " activation=hp.Choice(\"activation\", values=[\"elu\"]),\n", - " learning_rate=hp.Float(\n", - " \"learning_rate\", min_value=1e-2, max_value=0.3, sampling=\"log\"\n", - " ),\n", - " weight_decay=hp.Float(\n", - " \"weight_decay\", min_value=1e-2, max_value=0.3, sampling=\"log\"\n", - " ),\n", - " dropout=hp.Float(\"dropout\", min_value=0.0, max_value=0.5, sampling=\"linear\"),\n", - " decay_rate=hp.Float(\n", - " \"decay_rate\", min_value=0.8, max_value=1.0, sampling=\"reverse_log\"\n", - " ),\n", - " )" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The following fixed parameters are used to build the Type-2 architecture for this dataset:\n", - "\n", - "- `final_activation` is used to build the final layer for regression problem (set to `None`) or for the classification problem (`\"sigmoid\"`),\n", - "\n", - "- `loss` is used for training regression (`\"mse\"`) or classification (`\"binary_crossentropy\"`) problem, and\n", - "\n", - "- `metrics` denotes metrics used to compare with previosly published results: `\"accuracy\"` for classification and \"`mse`\" or \"`rmse`\" for regression.\n", - "\n", - "Parameters `objective` and `direction` are used by the tuner such that `objective=f\"val_{metrics}\"` and direction is either `\"min` or `\"max\"`.\n", - "\n", - "Parameters `max_trials` denotes the number of trial performed buy the tuner, `patience` is the number of epochs allowed to perform worst than the best one before stopping the current trial. The parameter `execution_per_trial` denotes the number of runs before calculating the results of a trial, it should be set to value greater than 1 for small datasets that have high variance in results." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "final_activation = None\n", - "loss = \"mse\"\n", - "metrics = \"mse\"\n", - "objective = \"val_mse\"\n", - "direction = \"min\"\n", - "max_trials = 200\n", - "patience = 5\n", - "executions_per_trial = 3" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "INFO:tensorflow:Reloading Tuner from tuner/auto/tuner0.json\n", - "INFO:tensorflow:Oracle triggered exit\n" - ] - } - ], - "source": [ - "# | include: false\n", - "# | notest\n", - "\n", - "tuner = find_hyperparameters(\n", - " \"auto\",\n", - " monotonicity_indicator=monotonicity_indicator,\n", - " hp_params_f=hp_params_f,\n", - " final_activation=final_activation,\n", - " loss=loss,\n", - " metrics=metrics,\n", - " objective=objective,\n", - " direction=direction,\n", - " max_trials=max_trials,\n", - " patience=patience,\n", - " executions_per_trial=executions_per_trial,\n", - " batch_size=batch_size,\n", - " max_epochs=max_epochs,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_mse_meanval_mse_stdval_mse_minval_mse_maxparams
0212elu0.0734070.0585830.1577180.8879238.3711610.0844378.2518758.476566848
\n", - "
" - ], - "text/plain": [ - " units n_layers activation learning_rate weight_decay dropout \n", - "0 21 2 elu 0.073407 0.058583 0.157718 \\\n", - "\n", - " decay_rate val_mse_mean val_mse_std val_mse_min val_mse_max params \n", - "0 0.887923 8.371161 0.084437 8.251875 8.476566 848 " - ] - }, - "metadata": {}, - "output_type": "display_data" + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | default_exp _experiments.auto" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Auto MPG" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Running in Google Colab\n", + "\n", + "You can run this experiment in Google Colab by clicking the button below:\n", + "\n", + "\n", + "\n", + " \"Open\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | hide\n", + "\n", + "from IPython.display import Markdown, display_markdown\n", + "\n", + "try:\n", + " import google.colab\n", + "\n", + " in_colab = True\n", + "except:\n", + " in_colab = False\n", + "\n", + "if in_colab:\n", + " display(\n", + " Markdown(\n", + " \"\"\"\n", + "### If you see this message, you are running in Google Colab\n", + "Along with this interactive tutorial the content of this notebook is organized and formatted for documentation purpuoses. \n", + "\n", + "You can ignore the '# | hide', '# | notest' and '# | echo: false' comments, they are not important for the tutorial.\n", + " \"\"\"\n", + " )\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | hide\n", + "\n", + "if in_colab:\n", + " !pip install \"monotonic-nn[experiments]\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Dataset" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The Auto MPG Dataset is a regression dataset [1] with 7 features:\n", + "\n", + "- Cylinders\n", + "\n", + "- Displacement\n", + "\n", + "- Horsepower\n", + "\n", + "- Weight\n", + "\n", + "- Acceleration\n", + "\n", + "- Model Year\n", + "\n", + "- Origin.\n", + "\n", + "The dependent variable MPG is monotonically decreasing with respect to features Weigh, Displacement, and Horsepower. The `monotonicity_indicator` corresponding to these features are set to -1, since the relationship is a monotonically decreasing one with respect to the dependent variable.\n", + "\n", + "This is a part of comparison with methods and datasets from COMET [2].\n", + "\n", + "References:\n", + "\n", + "1. Ross Quinlan. Combining Instance-Based and Model-Based Learning. In Proceedings on the Tenth International Conference of Machine Learning, 236-243, University of Massachusetts, Amherst. Morgan Kaufmann, 1993.\n", + "\n", + " https://archive.ics.uci.edu/ml/datasets/auto+mpg\n", + "\n", + "2. Aishwarya Sivaraman, Golnoosh Farnadi, Todd Millstein, and Guy Van den Broeck. Counterexample-guided learning of monotonic neural networks. Advances in Neural Information Processing Systems, 33:11936–11948, 2020.\n", + "\n", + " Github repo: https://github.com/AishwaryaSivaraman/COMET\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "monotonicity_indicator = {\n", + " \"Cylinders\": 0,\n", + " \"Displacement\": -1,\n", + " \"Horsepower\": -1,\n", + " \"Weight\": -1,\n", + " \"Acceleration\": 0,\n", + " \"Model_Year\": 0,\n", + " \"Origin\": 0,\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | include: false\n", + "\n", + "from airt.keras.experiments import (\n", + " create_tuner_stats,\n", + " find_hyperparameters,\n", + " get_train_n_test_data,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | include: false\n", + "import shutil\n", + "from os import environ\n", + "\n", + "import tensorflow as tf" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3 Physical GPUs, 1 Logical GPU\n" + ] + } + ], + "source": [ + "# | include: false\n", + "\n", + "environ[\"TF_FORCE_GPU_ALLOW_GROWTH\"] = \"true\"\n", + "\n", + "gpus = tf.config.list_physical_devices(\"GPU\")\n", + "if gpus:\n", + " # Restrict TensorFlow to only use the first GPU\n", + " try:\n", + " tf.config.set_visible_devices(gpus[2], \"GPU\")\n", + " logical_gpus = tf.config.list_logical_devices(\"GPU\")\n", + " print(len(gpus), \"Physical GPUs,\", len(logical_gpus), \"Logical GPU\")\n", + " except RuntimeError as e:\n", + " # Visible devices must be set before GPUs have been initialized\n", + " print(e)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "These are a few examples of the dataset:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 01234
Cylinders1.4828071.4828071.4828071.4828071.482807
Displacement1.0730281.4829021.0444321.0253682.235927
Horsepower0.6505641.5489931.1639520.9072582.396084
Weight0.6066250.8281310.5234130.5421651.587581
Acceleration-1.275546-1.452517-1.275546-1.806460-1.983431
Model_Year-1.631803-1.631803-1.631803-1.631803-1.631803
Origin-0.701669-0.701669-0.701669-0.701669-0.701669
ground_truth18.00000015.00000016.00000017.00000015.000000
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# | echo: false\n", + "\n", + "train_df, test_df = get_train_n_test_data(dataset_name=\"auto\")\n", + "display(train_df.head().T.style)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Hyperparameter search" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The choice of the batch size and the maximum number of epochs depends on the dataset size. For this dataset, we use the following values:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "batch_size = 16\n", + "max_epochs = 50" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We use the Type-2 architecture built using `MonoDense` layer with the following set of hyperparameters ranges:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def hp_params_f(hp):\n", + " return dict(\n", + " units=hp.Int(\"units\", min_value=16, max_value=24, step=1),\n", + " n_layers=hp.Int(\"n_layers\", min_value=2, max_value=2),\n", + " activation=hp.Choice(\"activation\", values=[\"elu\"]),\n", + " learning_rate=hp.Float(\n", + " \"learning_rate\", min_value=1e-2, max_value=0.3, sampling=\"log\"\n", + " ),\n", + " weight_decay=hp.Float(\n", + " \"weight_decay\", min_value=1e-2, max_value=0.3, sampling=\"log\"\n", + " ),\n", + " dropout=hp.Float(\"dropout\", min_value=0.0, max_value=0.5, sampling=\"linear\"),\n", + " decay_rate=hp.Float(\n", + " \"decay_rate\", min_value=0.8, max_value=1.0, sampling=\"reverse_log\"\n", + " ),\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The following fixed parameters are used to build the Type-2 architecture for this dataset:\n", + "\n", + "- `final_activation` is used to build the final layer for regression problem (set to `None`) or for the classification problem (`\"sigmoid\"`),\n", + "\n", + "- `loss` is used for training regression (`\"mse\"`) or classification (`\"binary_crossentropy\"`) problem, and\n", + "\n", + "- `metrics` denotes metrics used to compare with previously published results: `\"accuracy\"` for classification and \"`mse`\" or \"`rmse`\" for regression.\n", + "\n", + "Parameters `objective` and `direction` are used by the tuner such that `objective=f\"val_{metrics}\"` and direction is either `\"min` or `\"max\"`.\n", + "\n", + "Parameters `max_trials` denotes the number of trial performed buy the tuner, `patience` is the number of epochs allowed to perform worst than the best one before stopping the current trial. The parameter `execution_per_trial` denotes the number of runs before calculating the results of a trial, it should be set to value greater than 1 for small datasets that have high variance in results." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "final_activation = None\n", + "loss = \"mse\"\n", + "metrics = \"mse\"\n", + "objective = \"val_mse\"\n", + "direction = \"min\"\n", + "max_trials = 200\n", + "patience = 5\n", + "executions_per_trial = 3" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "INFO:tensorflow:Reloading Tuner from tuner/auto/tuner0.json\n", + "INFO:tensorflow:Oracle triggered exit\n" + ] + } + ], + "source": [ + "# | include: false\n", + "# | notest\n", + "\n", + "tuner = find_hyperparameters(\n", + " \"auto\",\n", + " monotonicity_indicator=monotonicity_indicator,\n", + " hp_params_f=hp_params_f,\n", + " final_activation=final_activation,\n", + " loss=loss,\n", + " metrics=metrics,\n", + " objective=objective,\n", + " direction=direction,\n", + " max_trials=max_trials,\n", + " patience=patience,\n", + " executions_per_trial=executions_per_trial,\n", + " batch_size=batch_size,\n", + " max_epochs=max_epochs,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_mse_meanval_mse_stdval_mse_minval_mse_maxparams
0212elu0.0734070.0585830.1577180.8879238.3711610.0844378.2518758.476566848
\n", + "
" + ], + "text/plain": [ + " units n_layers activation learning_rate weight_decay dropout \n", + "0 21 2 elu 0.073407 0.058583 0.157718 \\\n", + "\n", + " decay_rate val_mse_mean val_mse_std val_mse_min val_mse_max params \n", + "0 0.887923 8.371161 0.084437 8.251875 8.476566 848 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_mse_meanval_mse_stdval_mse_minval_mse_maxparams
0212elu0.0734070.0585830.1577180.8879238.3711610.0844378.2518758.476566848
1192elu0.0806180.0237060.1493540.8000008.4204490.1106708.2948018.576631627
\n", + "
" + ], + "text/plain": [ + " units n_layers activation learning_rate weight_decay dropout \n", + "0 21 2 elu 0.073407 0.058583 0.157718 \\\n", + "1 19 2 elu 0.080618 0.023706 0.149354 \n", + "\n", + " decay_rate val_mse_mean val_mse_std val_mse_min val_mse_max params \n", + "0 0.887923 8.371161 0.084437 8.251875 8.476566 848 \n", + "1 0.800000 8.420449 0.110670 8.294801 8.576631 627 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_mse_meanval_mse_stdval_mse_minval_mse_maxparams
0212elu0.0734070.0585830.1577180.8879238.3711610.0844378.2518758.476566848
1192elu0.0806180.0237060.1493540.8000008.4204490.1106708.2948018.576631627
2182elu0.0637140.0177340.3802320.9973058.4891750.0294298.4581068.523130597
\n", + "
" + ], + "text/plain": [ + " units n_layers activation learning_rate weight_decay dropout \n", + "0 21 2 elu 0.073407 0.058583 0.157718 \\\n", + "1 19 2 elu 0.080618 0.023706 0.149354 \n", + "2 18 2 elu 0.063714 0.017734 0.380232 \n", + "\n", + " decay_rate val_mse_mean val_mse_std val_mse_min val_mse_max params \n", + "0 0.887923 8.371161 0.084437 8.251875 8.476566 848 \n", + "1 0.800000 8.420449 0.110670 8.294801 8.576631 627 \n", + "2 0.997305 8.489175 0.029429 8.458106 8.523130 597 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_mse_meanval_mse_stdval_mse_minval_mse_maxparams
0212elu0.0734070.0585830.1577180.8879238.3711610.0844378.2518758.476566848
1192elu0.0806180.0237060.1493540.8000008.4204490.1106708.2948018.576631627
3192elu0.2433620.0949570.0384020.8760918.4576200.1053028.3305058.592981627
2182elu0.0637140.0177340.3802320.9973058.4891750.0294298.4581068.523130597
\n", + "
" + ], + "text/plain": [ + " units n_layers activation learning_rate weight_decay dropout \n", + "0 21 2 elu 0.073407 0.058583 0.157718 \\\n", + "1 19 2 elu 0.080618 0.023706 0.149354 \n", + "3 19 2 elu 0.243362 0.094957 0.038402 \n", + "2 18 2 elu 0.063714 0.017734 0.380232 \n", + "\n", + " decay_rate val_mse_mean val_mse_std val_mse_min val_mse_max params \n", + "0 0.887923 8.371161 0.084437 8.251875 8.476566 848 \n", + "1 0.800000 8.420449 0.110670 8.294801 8.576631 627 \n", + "3 0.876091 8.457620 0.105302 8.330505 8.592981 627 \n", + "2 0.997305 8.489175 0.029429 8.458106 8.523130 597 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_mse_meanval_mse_stdval_mse_minval_mse_maxparams
0212elu0.0734070.0585830.1577180.8879238.3711610.0844378.2518758.476566848
1192elu0.0806180.0237060.1493540.8000008.4204490.1106708.2948018.576631627
4222elu0.1942850.1208040.0746350.8895508.4319140.0732588.3221068.512444885
3192elu0.2433620.0949570.0384020.8760918.4576200.1053028.3305058.592981627
2182elu0.0637140.0177340.3802320.9973058.4891750.0294298.4581068.523130597
\n", + "
" + ], + "text/plain": [ + " units n_layers activation learning_rate weight_decay dropout \n", + "0 21 2 elu 0.073407 0.058583 0.157718 \\\n", + "1 19 2 elu 0.080618 0.023706 0.149354 \n", + "4 22 2 elu 0.194285 0.120804 0.074635 \n", + "3 19 2 elu 0.243362 0.094957 0.038402 \n", + "2 18 2 elu 0.063714 0.017734 0.380232 \n", + "\n", + " decay_rate val_mse_mean val_mse_std val_mse_min val_mse_max params \n", + "0 0.887923 8.371161 0.084437 8.251875 8.476566 848 \n", + "1 0.800000 8.420449 0.110670 8.294801 8.576631 627 \n", + "4 0.889550 8.431914 0.073258 8.322106 8.512444 885 \n", + "3 0.876091 8.457620 0.105302 8.330505 8.592981 627 \n", + "2 0.997305 8.489175 0.029429 8.458106 8.523130 597 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_mse_meanval_mse_stdval_mse_minval_mse_maxparams
0212elu0.0734070.0585830.1577180.8879238.3711610.0844378.2518758.476566848
1192elu0.0806180.0237060.1493540.8000008.4204490.1106708.2948018.576631627
4222elu0.1942850.1208040.0746350.8895508.4319140.0732588.3221068.512444885
3192elu0.2433620.0949570.0384020.8760918.4576200.1053028.3305058.592981627
2182elu0.0637140.0177340.3802320.9973058.4891750.0294298.4581068.523130597
5202elu0.0708600.0127910.0967180.8003378.5251430.1557358.3379718.683410811
\n", + "
" + ], + "text/plain": [ + " units n_layers activation learning_rate weight_decay dropout \n", + "0 21 2 elu 0.073407 0.058583 0.157718 \\\n", + "1 19 2 elu 0.080618 0.023706 0.149354 \n", + "4 22 2 elu 0.194285 0.120804 0.074635 \n", + "3 19 2 elu 0.243362 0.094957 0.038402 \n", + "2 18 2 elu 0.063714 0.017734 0.380232 \n", + "5 20 2 elu 0.070860 0.012791 0.096718 \n", + "\n", + " decay_rate val_mse_mean val_mse_std val_mse_min val_mse_max params \n", + "0 0.887923 8.371161 0.084437 8.251875 8.476566 848 \n", + "1 0.800000 8.420449 0.110670 8.294801 8.576631 627 \n", + "4 0.889550 8.431914 0.073258 8.322106 8.512444 885 \n", + "3 0.876091 8.457620 0.105302 8.330505 8.592981 627 \n", + "2 0.997305 8.489175 0.029429 8.458106 8.523130 597 \n", + "5 0.800337 8.525143 0.155735 8.337971 8.683410 811 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_mse_meanval_mse_stdval_mse_minval_mse_maxparams
0212elu0.0734070.0585830.1577180.8879238.3711610.0844378.2518758.476566848
1192elu0.0806180.0237060.1493540.8000008.4204490.1106708.2948018.576631627
4222elu0.1942850.1208040.0746350.8895508.4319140.0732588.3221068.512444885
3192elu0.2433620.0949570.0384020.8760918.4576200.1053028.3305058.592981627
2182elu0.0637140.0177340.3802320.9973058.4891750.0294298.4581068.523130597
6222elu0.0310490.0501260.3107850.9706158.4977660.1153138.3436378.620289885
5202elu0.0708600.0127910.0967180.8003378.5251430.1557358.3379718.683410811
\n", + "
" + ], + "text/plain": [ + " units n_layers activation learning_rate weight_decay dropout \n", + "0 21 2 elu 0.073407 0.058583 0.157718 \\\n", + "1 19 2 elu 0.080618 0.023706 0.149354 \n", + "4 22 2 elu 0.194285 0.120804 0.074635 \n", + "3 19 2 elu 0.243362 0.094957 0.038402 \n", + "2 18 2 elu 0.063714 0.017734 0.380232 \n", + "6 22 2 elu 0.031049 0.050126 0.310785 \n", + "5 20 2 elu 0.070860 0.012791 0.096718 \n", + "\n", + " decay_rate val_mse_mean val_mse_std val_mse_min val_mse_max params \n", + "0 0.887923 8.371161 0.084437 8.251875 8.476566 848 \n", + "1 0.800000 8.420449 0.110670 8.294801 8.576631 627 \n", + "4 0.889550 8.431914 0.073258 8.322106 8.512444 885 \n", + "3 0.876091 8.457620 0.105302 8.330505 8.592981 627 \n", + "2 0.997305 8.489175 0.029429 8.458106 8.523130 597 \n", + "6 0.970615 8.497766 0.115313 8.343637 8.620289 885 \n", + "5 0.800337 8.525143 0.155735 8.337971 8.683410 811 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_mse_meanval_mse_stdval_mse_minval_mse_maxparams
0212elu0.0734070.0585830.1577180.8879238.3711610.0844378.2518758.476566848
1192elu0.0806180.0237060.1493540.8000008.4204490.1106708.2948018.576631627
7212elu0.0428170.0450500.3246610.9885448.4213390.0633578.3524788.520736848
4222elu0.1942850.1208040.0746350.8895508.4319140.0732588.3221068.512444885
3192elu0.2433620.0949570.0384020.8760918.4576200.1053028.3305058.592981627
2182elu0.0637140.0177340.3802320.9973058.4891750.0294298.4581068.523130597
6222elu0.0310490.0501260.3107850.9706158.4977660.1153138.3436378.620289885
5202elu0.0708600.0127910.0967180.8003378.5251430.1557358.3379718.683410811
\n", + "
" + ], + "text/plain": [ + " units n_layers activation learning_rate weight_decay dropout \n", + "0 21 2 elu 0.073407 0.058583 0.157718 \\\n", + "1 19 2 elu 0.080618 0.023706 0.149354 \n", + "7 21 2 elu 0.042817 0.045050 0.324661 \n", + "4 22 2 elu 0.194285 0.120804 0.074635 \n", + "3 19 2 elu 0.243362 0.094957 0.038402 \n", + "2 18 2 elu 0.063714 0.017734 0.380232 \n", + "6 22 2 elu 0.031049 0.050126 0.310785 \n", + "5 20 2 elu 0.070860 0.012791 0.096718 \n", + "\n", + " decay_rate val_mse_mean val_mse_std val_mse_min val_mse_max params \n", + "0 0.887923 8.371161 0.084437 8.251875 8.476566 848 \n", + "1 0.800000 8.420449 0.110670 8.294801 8.576631 627 \n", + "7 0.988544 8.421339 0.063357 8.352478 8.520736 848 \n", + "4 0.889550 8.431914 0.073258 8.322106 8.512444 885 \n", + "3 0.876091 8.457620 0.105302 8.330505 8.592981 627 \n", + "2 0.997305 8.489175 0.029429 8.458106 8.523130 597 \n", + "6 0.970615 8.497766 0.115313 8.343637 8.620289 885 \n", + "5 0.800337 8.525143 0.155735 8.337971 8.683410 811 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_mse_meanval_mse_stdval_mse_minval_mse_maxparams
0212elu0.0734070.0585830.1577180.8879238.3711610.0844378.2518758.476566848
1192elu0.0806180.0237060.1493540.8000008.4204490.1106708.2948018.576631627
7212elu0.0428170.0450500.3246610.9885448.4213390.0633578.3524788.520736848
8222elu0.1078450.0323430.2374590.8861588.4309010.1157228.2975078.565886885
4222elu0.1942850.1208040.0746350.8895508.4319140.0732588.3221068.512444885
3192elu0.2433620.0949570.0384020.8760918.4576200.1053028.3305058.592981627
2182elu0.0637140.0177340.3802320.9973058.4891750.0294298.4581068.523130597
6222elu0.0310490.0501260.3107850.9706158.4977660.1153138.3436378.620289885
5202elu0.0708600.0127910.0967180.8003378.5251430.1557358.3379718.683410811
\n", + "
" + ], + "text/plain": [ + " units n_layers activation learning_rate weight_decay dropout \n", + "0 21 2 elu 0.073407 0.058583 0.157718 \\\n", + "1 19 2 elu 0.080618 0.023706 0.149354 \n", + "7 21 2 elu 0.042817 0.045050 0.324661 \n", + "8 22 2 elu 0.107845 0.032343 0.237459 \n", + "4 22 2 elu 0.194285 0.120804 0.074635 \n", + "3 19 2 elu 0.243362 0.094957 0.038402 \n", + "2 18 2 elu 0.063714 0.017734 0.380232 \n", + "6 22 2 elu 0.031049 0.050126 0.310785 \n", + "5 20 2 elu 0.070860 0.012791 0.096718 \n", + "\n", + " decay_rate val_mse_mean val_mse_std val_mse_min val_mse_max params \n", + "0 0.887923 8.371161 0.084437 8.251875 8.476566 848 \n", + "1 0.800000 8.420449 0.110670 8.294801 8.576631 627 \n", + "7 0.988544 8.421339 0.063357 8.352478 8.520736 848 \n", + "8 0.886158 8.430901 0.115722 8.297507 8.565886 885 \n", + "4 0.889550 8.431914 0.073258 8.322106 8.512444 885 \n", + "3 0.876091 8.457620 0.105302 8.330505 8.592981 627 \n", + "2 0.997305 8.489175 0.029429 8.458106 8.523130 597 \n", + "6 0.970615 8.497766 0.115313 8.343637 8.620289 885 \n", + "5 0.800337 8.525143 0.155735 8.337971 8.683410 811 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_mse_meanval_mse_stdval_mse_minval_mse_maxparams
0212elu0.0734070.0585830.1577180.8879238.3711610.0844378.2518758.476566848
9172elu0.1050210.0641510.1898300.8285408.4046340.1495668.2552718.614701567
1192elu0.0806180.0237060.1493540.8000008.4204490.1106708.2948018.576631627
7212elu0.0428170.0450500.3246610.9885448.4213390.0633578.3524788.520736848
8222elu0.1078450.0323430.2374590.8861588.4309010.1157228.2975078.565886885
4222elu0.1942850.1208040.0746350.8895508.4319140.0732588.3221068.512444885
3192elu0.2433620.0949570.0384020.8760918.4576200.1053028.3305058.592981627
2182elu0.0637140.0177340.3802320.9973058.4891750.0294298.4581068.523130597
6222elu0.0310490.0501260.3107850.9706158.4977660.1153138.3436378.620289885
5202elu0.0708600.0127910.0967180.8003378.5251430.1557358.3379718.683410811
\n", + "
" + ], + "text/plain": [ + " units n_layers activation learning_rate weight_decay dropout \n", + "0 21 2 elu 0.073407 0.058583 0.157718 \\\n", + "9 17 2 elu 0.105021 0.064151 0.189830 \n", + "1 19 2 elu 0.080618 0.023706 0.149354 \n", + "7 21 2 elu 0.042817 0.045050 0.324661 \n", + "8 22 2 elu 0.107845 0.032343 0.237459 \n", + "4 22 2 elu 0.194285 0.120804 0.074635 \n", + "3 19 2 elu 0.243362 0.094957 0.038402 \n", + "2 18 2 elu 0.063714 0.017734 0.380232 \n", + "6 22 2 elu 0.031049 0.050126 0.310785 \n", + "5 20 2 elu 0.070860 0.012791 0.096718 \n", + "\n", + " decay_rate val_mse_mean val_mse_std val_mse_min val_mse_max params \n", + "0 0.887923 8.371161 0.084437 8.251875 8.476566 848 \n", + "9 0.828540 8.404634 0.149566 8.255271 8.614701 567 \n", + "1 0.800000 8.420449 0.110670 8.294801 8.576631 627 \n", + "7 0.988544 8.421339 0.063357 8.352478 8.520736 848 \n", + "8 0.886158 8.430901 0.115722 8.297507 8.565886 885 \n", + "4 0.889550 8.431914 0.073258 8.322106 8.512444 885 \n", + "3 0.876091 8.457620 0.105302 8.330505 8.592981 627 \n", + "2 0.997305 8.489175 0.029429 8.458106 8.523130 597 \n", + "6 0.970615 8.497766 0.115313 8.343637 8.620289 885 \n", + "5 0.800337 8.525143 0.155735 8.337971 8.683410 811 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# | include: false\n", + "# | notest\n", + "\n", + "stats = create_tuner_stats(\n", + " tuner,\n", + " batch_size=batch_size,\n", + " max_epochs=max_epochs,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The following table describes the best models and their hyperparameters found by the tuner:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 01234
units2117192122
n_layers22222
activationelueluelueluelu
learning_rate0.0734070.1050210.0806180.0428170.107845
weight_decay0.0585830.0641510.0237060.0450500.032343
dropout0.1577180.1898300.1493540.3246610.237459
decay_rate0.8879230.8285400.8000000.9885440.886158
val_mse_mean8.3711618.4046348.4204498.4213398.430901
val_mse_std0.0844370.1495660.1106700.0633570.115722
val_mse_min8.2518758.2552718.2948018.3524788.297507
val_mse_max8.4765668.6147018.5766318.5207368.565886
params848567627848885
\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": null, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# | echo: false\n", + "# | notest\n", + "\n", + "df = stats.sort_values(by=f\"{objective}_mean\", ascending=(direction == \"min\")).head()\n", + "\n", + "df.reset_index(drop=True).T.style" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\\begin{tabular}{rrlrrrrrrrrr}\n", + "\\toprule\n", + "units & n_layers & activation & learning_rate & weight_decay & dropout & decay_rate & val_mse_mean & val_mse_std & val_mse_min & val_mse_max & params \\\\\n", + "\\midrule\n", + "21 & 2 & elu & 0.073407 & 0.058583 & 0.157718 & 0.887923 & 8.371161 & 0.084437 & 8.251875 & 8.476566 & 848 \\\\\n", + "17 & 2 & elu & 0.105021 & 0.064151 & 0.189830 & 0.828540 & 8.404634 & 0.149566 & 8.255271 & 8.614701 & 567 \\\\\n", + "19 & 2 & elu & 0.080618 & 0.023706 & 0.149354 & 0.800000 & 8.420449 & 0.110670 & 8.294801 & 8.576631 & 627 \\\\\n", + "21 & 2 & elu & 0.042817 & 0.045050 & 0.324661 & 0.988544 & 8.421339 & 0.063357 & 8.352478 & 8.520736 & 848 \\\\\n", + "22 & 2 & elu & 0.107845 & 0.032343 & 0.237459 & 0.886158 & 8.430901 & 0.115722 & 8.297507 & 8.565886 & 885 \\\\\n", + "\\bottomrule\n", + "\\end{tabular}\n", + "\n" + ] + } + ], + "source": [ + "# | include: false\n", + "# | notest\n", + "\n", + "print(df.to_latex(index=False))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The optimal model" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "These are the best hyperparameters found by previous runs of the tuner:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def final_hp_params_f(hp):\n", + " return dict(\n", + " units=hp.Fixed(\"units\", value=21),\n", + " n_layers=hp.Fixed(\"n_layers\", 2),\n", + " activation=hp.Fixed(\"activation\", value=\"elu\"),\n", + " learning_rate=hp.Fixed(\"learning_rate\", value=0.073407),\n", + " weight_decay=hp.Fixed(\"weight_decay\", value=0.058583),\n", + " dropout=hp.Fixed(\"dropout\", value=0.157718),\n", + " decay_rate=hp.Fixed(\"decay_rate\", value=0.887923),\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Trial 1 Complete [00h 00m 03s]\n", + "val_mse: 15.842103958129883\n", + "\n", + "Best val_mse So Far: 15.842103958129883\n", + "Total elapsed time: 00h 00m 03s\n", + "INFO:tensorflow:Oracle triggered exit\n" + ] + } + ], + "source": [ + "# | include: false\n", + "# | notest\n", + "\n", + "\n", + "shutil.rmtree(\"tuner_final/auto\", ignore_errors=True)\n", + "\n", + "final_tuner = find_hyperparameters(\n", + " \"auto\",\n", + " monotonicity_indicator=monotonicity_indicator,\n", + " hp_params_f=final_hp_params_f,\n", + " max_trials=1,\n", + " final_activation=final_activation,\n", + " loss=loss,\n", + " metrics=metrics,\n", + " objective=objective,\n", + " direction=direction,\n", + " batch_size=batch_size,\n", + " max_epochs=1,\n", + " patience=patience,\n", + " executions_per_trial=1,\n", + " dir_root=\"tuner_final\",\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_mse_meanval_mse_stdval_mse_minval_mse_maxparams
0212elu0.0734070.0585830.1577180.8879238.3711550.084448.2518658.476567848
\n", + "
" + ], + "text/plain": [ + " units n_layers activation learning_rate weight_decay dropout \n", + "0 21 2 elu 0.073407 0.058583 0.157718 \\\n", + "\n", + " decay_rate val_mse_mean val_mse_std val_mse_min val_mse_max params \n", + "0 0.887923 8.371155 0.08444 8.251865 8.476567 848 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# | include: false\n", + "# | notest\n", + "\n", + "final_stats = create_tuner_stats(\n", + " final_tuner,\n", + " batch_size=batch_size,\n", + " max_epochs=max_epochs,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The final evaluation of the optimal model:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 0
units21
n_layers2
activationelu
learning_rate0.073407
weight_decay0.058583
dropout0.157718
decay_rate0.887923
val_mse_mean8.371155
val_mse_std0.084440
val_mse_min8.251865
val_mse_max8.476567
params848
\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": null, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# | echo: false\n", + "# | notest\n", + "\n", + "final_stats.T.style" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "python3", + "language": "python", + "name": "python3" + } }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_mse_meanval_mse_stdval_mse_minval_mse_maxparams
0212elu0.0734070.0585830.1577180.8879238.3711610.0844378.2518758.476566848
1192elu0.0806180.0237060.1493540.8000008.4204490.1106708.2948018.576631627
\n", - "
" - ], - "text/plain": [ - " units n_layers activation learning_rate weight_decay dropout \n", - "0 21 2 elu 0.073407 0.058583 0.157718 \\\n", - "1 19 2 elu 0.080618 0.023706 0.149354 \n", - "\n", - " decay_rate val_mse_mean val_mse_std val_mse_min val_mse_max params \n", - "0 0.887923 8.371161 0.084437 8.251875 8.476566 848 \n", - "1 0.800000 8.420449 0.110670 8.294801 8.576631 627 " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_mse_meanval_mse_stdval_mse_minval_mse_maxparams
0212elu0.0734070.0585830.1577180.8879238.3711610.0844378.2518758.476566848
1192elu0.0806180.0237060.1493540.8000008.4204490.1106708.2948018.576631627
2182elu0.0637140.0177340.3802320.9973058.4891750.0294298.4581068.523130597
\n", - "
" - ], - "text/plain": [ - " units n_layers activation learning_rate weight_decay dropout \n", - "0 21 2 elu 0.073407 0.058583 0.157718 \\\n", - "1 19 2 elu 0.080618 0.023706 0.149354 \n", - "2 18 2 elu 0.063714 0.017734 0.380232 \n", - "\n", - " decay_rate val_mse_mean val_mse_std val_mse_min val_mse_max params \n", - "0 0.887923 8.371161 0.084437 8.251875 8.476566 848 \n", - "1 0.800000 8.420449 0.110670 8.294801 8.576631 627 \n", - "2 0.997305 8.489175 0.029429 8.458106 8.523130 597 " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_mse_meanval_mse_stdval_mse_minval_mse_maxparams
0212elu0.0734070.0585830.1577180.8879238.3711610.0844378.2518758.476566848
1192elu0.0806180.0237060.1493540.8000008.4204490.1106708.2948018.576631627
3192elu0.2433620.0949570.0384020.8760918.4576200.1053028.3305058.592981627
2182elu0.0637140.0177340.3802320.9973058.4891750.0294298.4581068.523130597
\n", - "
" - ], - "text/plain": [ - " units n_layers activation learning_rate weight_decay dropout \n", - "0 21 2 elu 0.073407 0.058583 0.157718 \\\n", - "1 19 2 elu 0.080618 0.023706 0.149354 \n", - "3 19 2 elu 0.243362 0.094957 0.038402 \n", - "2 18 2 elu 0.063714 0.017734 0.380232 \n", - "\n", - " decay_rate val_mse_mean val_mse_std val_mse_min val_mse_max params \n", - "0 0.887923 8.371161 0.084437 8.251875 8.476566 848 \n", - "1 0.800000 8.420449 0.110670 8.294801 8.576631 627 \n", - "3 0.876091 8.457620 0.105302 8.330505 8.592981 627 \n", - "2 0.997305 8.489175 0.029429 8.458106 8.523130 597 " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_mse_meanval_mse_stdval_mse_minval_mse_maxparams
0212elu0.0734070.0585830.1577180.8879238.3711610.0844378.2518758.476566848
1192elu0.0806180.0237060.1493540.8000008.4204490.1106708.2948018.576631627
4222elu0.1942850.1208040.0746350.8895508.4319140.0732588.3221068.512444885
3192elu0.2433620.0949570.0384020.8760918.4576200.1053028.3305058.592981627
2182elu0.0637140.0177340.3802320.9973058.4891750.0294298.4581068.523130597
\n", - "
" - ], - "text/plain": [ - " units n_layers activation learning_rate weight_decay dropout \n", - "0 21 2 elu 0.073407 0.058583 0.157718 \\\n", - "1 19 2 elu 0.080618 0.023706 0.149354 \n", - "4 22 2 elu 0.194285 0.120804 0.074635 \n", - "3 19 2 elu 0.243362 0.094957 0.038402 \n", - "2 18 2 elu 0.063714 0.017734 0.380232 \n", - "\n", - " decay_rate val_mse_mean val_mse_std val_mse_min val_mse_max params \n", - "0 0.887923 8.371161 0.084437 8.251875 8.476566 848 \n", - "1 0.800000 8.420449 0.110670 8.294801 8.576631 627 \n", - "4 0.889550 8.431914 0.073258 8.322106 8.512444 885 \n", - "3 0.876091 8.457620 0.105302 8.330505 8.592981 627 \n", - "2 0.997305 8.489175 0.029429 8.458106 8.523130 597 " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_mse_meanval_mse_stdval_mse_minval_mse_maxparams
0212elu0.0734070.0585830.1577180.8879238.3711610.0844378.2518758.476566848
1192elu0.0806180.0237060.1493540.8000008.4204490.1106708.2948018.576631627
4222elu0.1942850.1208040.0746350.8895508.4319140.0732588.3221068.512444885
3192elu0.2433620.0949570.0384020.8760918.4576200.1053028.3305058.592981627
2182elu0.0637140.0177340.3802320.9973058.4891750.0294298.4581068.523130597
5202elu0.0708600.0127910.0967180.8003378.5251430.1557358.3379718.683410811
\n", - "
" - ], - "text/plain": [ - " units n_layers activation learning_rate weight_decay dropout \n", - "0 21 2 elu 0.073407 0.058583 0.157718 \\\n", - "1 19 2 elu 0.080618 0.023706 0.149354 \n", - "4 22 2 elu 0.194285 0.120804 0.074635 \n", - "3 19 2 elu 0.243362 0.094957 0.038402 \n", - "2 18 2 elu 0.063714 0.017734 0.380232 \n", - "5 20 2 elu 0.070860 0.012791 0.096718 \n", - "\n", - " decay_rate val_mse_mean val_mse_std val_mse_min val_mse_max params \n", - "0 0.887923 8.371161 0.084437 8.251875 8.476566 848 \n", - "1 0.800000 8.420449 0.110670 8.294801 8.576631 627 \n", - "4 0.889550 8.431914 0.073258 8.322106 8.512444 885 \n", - "3 0.876091 8.457620 0.105302 8.330505 8.592981 627 \n", - "2 0.997305 8.489175 0.029429 8.458106 8.523130 597 \n", - "5 0.800337 8.525143 0.155735 8.337971 8.683410 811 " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_mse_meanval_mse_stdval_mse_minval_mse_maxparams
0212elu0.0734070.0585830.1577180.8879238.3711610.0844378.2518758.476566848
1192elu0.0806180.0237060.1493540.8000008.4204490.1106708.2948018.576631627
4222elu0.1942850.1208040.0746350.8895508.4319140.0732588.3221068.512444885
3192elu0.2433620.0949570.0384020.8760918.4576200.1053028.3305058.592981627
2182elu0.0637140.0177340.3802320.9973058.4891750.0294298.4581068.523130597
6222elu0.0310490.0501260.3107850.9706158.4977660.1153138.3436378.620289885
5202elu0.0708600.0127910.0967180.8003378.5251430.1557358.3379718.683410811
\n", - "
" - ], - "text/plain": [ - " units n_layers activation learning_rate weight_decay dropout \n", - "0 21 2 elu 0.073407 0.058583 0.157718 \\\n", - "1 19 2 elu 0.080618 0.023706 0.149354 \n", - "4 22 2 elu 0.194285 0.120804 0.074635 \n", - "3 19 2 elu 0.243362 0.094957 0.038402 \n", - "2 18 2 elu 0.063714 0.017734 0.380232 \n", - "6 22 2 elu 0.031049 0.050126 0.310785 \n", - "5 20 2 elu 0.070860 0.012791 0.096718 \n", - "\n", - " decay_rate val_mse_mean val_mse_std val_mse_min val_mse_max params \n", - "0 0.887923 8.371161 0.084437 8.251875 8.476566 848 \n", - "1 0.800000 8.420449 0.110670 8.294801 8.576631 627 \n", - "4 0.889550 8.431914 0.073258 8.322106 8.512444 885 \n", - "3 0.876091 8.457620 0.105302 8.330505 8.592981 627 \n", - "2 0.997305 8.489175 0.029429 8.458106 8.523130 597 \n", - "6 0.970615 8.497766 0.115313 8.343637 8.620289 885 \n", - "5 0.800337 8.525143 0.155735 8.337971 8.683410 811 " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_mse_meanval_mse_stdval_mse_minval_mse_maxparams
0212elu0.0734070.0585830.1577180.8879238.3711610.0844378.2518758.476566848
1192elu0.0806180.0237060.1493540.8000008.4204490.1106708.2948018.576631627
7212elu0.0428170.0450500.3246610.9885448.4213390.0633578.3524788.520736848
4222elu0.1942850.1208040.0746350.8895508.4319140.0732588.3221068.512444885
3192elu0.2433620.0949570.0384020.8760918.4576200.1053028.3305058.592981627
2182elu0.0637140.0177340.3802320.9973058.4891750.0294298.4581068.523130597
6222elu0.0310490.0501260.3107850.9706158.4977660.1153138.3436378.620289885
5202elu0.0708600.0127910.0967180.8003378.5251430.1557358.3379718.683410811
\n", - "
" - ], - "text/plain": [ - " units n_layers activation learning_rate weight_decay dropout \n", - "0 21 2 elu 0.073407 0.058583 0.157718 \\\n", - "1 19 2 elu 0.080618 0.023706 0.149354 \n", - "7 21 2 elu 0.042817 0.045050 0.324661 \n", - "4 22 2 elu 0.194285 0.120804 0.074635 \n", - "3 19 2 elu 0.243362 0.094957 0.038402 \n", - "2 18 2 elu 0.063714 0.017734 0.380232 \n", - "6 22 2 elu 0.031049 0.050126 0.310785 \n", - "5 20 2 elu 0.070860 0.012791 0.096718 \n", - "\n", - " decay_rate val_mse_mean val_mse_std val_mse_min val_mse_max params \n", - "0 0.887923 8.371161 0.084437 8.251875 8.476566 848 \n", - "1 0.800000 8.420449 0.110670 8.294801 8.576631 627 \n", - "7 0.988544 8.421339 0.063357 8.352478 8.520736 848 \n", - "4 0.889550 8.431914 0.073258 8.322106 8.512444 885 \n", - "3 0.876091 8.457620 0.105302 8.330505 8.592981 627 \n", - "2 0.997305 8.489175 0.029429 8.458106 8.523130 597 \n", - "6 0.970615 8.497766 0.115313 8.343637 8.620289 885 \n", - "5 0.800337 8.525143 0.155735 8.337971 8.683410 811 " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_mse_meanval_mse_stdval_mse_minval_mse_maxparams
0212elu0.0734070.0585830.1577180.8879238.3711610.0844378.2518758.476566848
1192elu0.0806180.0237060.1493540.8000008.4204490.1106708.2948018.576631627
7212elu0.0428170.0450500.3246610.9885448.4213390.0633578.3524788.520736848
8222elu0.1078450.0323430.2374590.8861588.4309010.1157228.2975078.565886885
4222elu0.1942850.1208040.0746350.8895508.4319140.0732588.3221068.512444885
3192elu0.2433620.0949570.0384020.8760918.4576200.1053028.3305058.592981627
2182elu0.0637140.0177340.3802320.9973058.4891750.0294298.4581068.523130597
6222elu0.0310490.0501260.3107850.9706158.4977660.1153138.3436378.620289885
5202elu0.0708600.0127910.0967180.8003378.5251430.1557358.3379718.683410811
\n", - "
" - ], - "text/plain": [ - " units n_layers activation learning_rate weight_decay dropout \n", - "0 21 2 elu 0.073407 0.058583 0.157718 \\\n", - "1 19 2 elu 0.080618 0.023706 0.149354 \n", - "7 21 2 elu 0.042817 0.045050 0.324661 \n", - "8 22 2 elu 0.107845 0.032343 0.237459 \n", - "4 22 2 elu 0.194285 0.120804 0.074635 \n", - "3 19 2 elu 0.243362 0.094957 0.038402 \n", - "2 18 2 elu 0.063714 0.017734 0.380232 \n", - "6 22 2 elu 0.031049 0.050126 0.310785 \n", - "5 20 2 elu 0.070860 0.012791 0.096718 \n", - "\n", - " decay_rate val_mse_mean val_mse_std val_mse_min val_mse_max params \n", - "0 0.887923 8.371161 0.084437 8.251875 8.476566 848 \n", - "1 0.800000 8.420449 0.110670 8.294801 8.576631 627 \n", - "7 0.988544 8.421339 0.063357 8.352478 8.520736 848 \n", - "8 0.886158 8.430901 0.115722 8.297507 8.565886 885 \n", - "4 0.889550 8.431914 0.073258 8.322106 8.512444 885 \n", - "3 0.876091 8.457620 0.105302 8.330505 8.592981 627 \n", - "2 0.997305 8.489175 0.029429 8.458106 8.523130 597 \n", - "6 0.970615 8.497766 0.115313 8.343637 8.620289 885 \n", - "5 0.800337 8.525143 0.155735 8.337971 8.683410 811 " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_mse_meanval_mse_stdval_mse_minval_mse_maxparams
0212elu0.0734070.0585830.1577180.8879238.3711610.0844378.2518758.476566848
9172elu0.1050210.0641510.1898300.8285408.4046340.1495668.2552718.614701567
1192elu0.0806180.0237060.1493540.8000008.4204490.1106708.2948018.576631627
7212elu0.0428170.0450500.3246610.9885448.4213390.0633578.3524788.520736848
8222elu0.1078450.0323430.2374590.8861588.4309010.1157228.2975078.565886885
4222elu0.1942850.1208040.0746350.8895508.4319140.0732588.3221068.512444885
3192elu0.2433620.0949570.0384020.8760918.4576200.1053028.3305058.592981627
2182elu0.0637140.0177340.3802320.9973058.4891750.0294298.4581068.523130597
6222elu0.0310490.0501260.3107850.9706158.4977660.1153138.3436378.620289885
5202elu0.0708600.0127910.0967180.8003378.5251430.1557358.3379718.683410811
\n", - "
" - ], - "text/plain": [ - " units n_layers activation learning_rate weight_decay dropout \n", - "0 21 2 elu 0.073407 0.058583 0.157718 \\\n", - "9 17 2 elu 0.105021 0.064151 0.189830 \n", - "1 19 2 elu 0.080618 0.023706 0.149354 \n", - "7 21 2 elu 0.042817 0.045050 0.324661 \n", - "8 22 2 elu 0.107845 0.032343 0.237459 \n", - "4 22 2 elu 0.194285 0.120804 0.074635 \n", - "3 19 2 elu 0.243362 0.094957 0.038402 \n", - "2 18 2 elu 0.063714 0.017734 0.380232 \n", - "6 22 2 elu 0.031049 0.050126 0.310785 \n", - "5 20 2 elu 0.070860 0.012791 0.096718 \n", - "\n", - " decay_rate val_mse_mean val_mse_std val_mse_min val_mse_max params \n", - "0 0.887923 8.371161 0.084437 8.251875 8.476566 848 \n", - "9 0.828540 8.404634 0.149566 8.255271 8.614701 567 \n", - "1 0.800000 8.420449 0.110670 8.294801 8.576631 627 \n", - "7 0.988544 8.421339 0.063357 8.352478 8.520736 848 \n", - "8 0.886158 8.430901 0.115722 8.297507 8.565886 885 \n", - "4 0.889550 8.431914 0.073258 8.322106 8.512444 885 \n", - "3 0.876091 8.457620 0.105302 8.330505 8.592981 627 \n", - "2 0.997305 8.489175 0.029429 8.458106 8.523130 597 \n", - "6 0.970615 8.497766 0.115313 8.343637 8.620289 885 \n", - "5 0.800337 8.525143 0.155735 8.337971 8.683410 811 " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# | include: false\n", - "# | notest\n", - "\n", - "stats = create_tuner_stats(\n", - " tuner,\n", - " batch_size=batch_size,\n", - " max_epochs=max_epochs,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The following table describes the best models and their hyperparameters found by the tuner:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 01234
units2117192122
n_layers22222
activationelueluelueluelu
learning_rate0.0734070.1050210.0806180.0428170.107845
weight_decay0.0585830.0641510.0237060.0450500.032343
dropout0.1577180.1898300.1493540.3246610.237459
decay_rate0.8879230.8285400.8000000.9885440.886158
val_mse_mean8.3711618.4046348.4204498.4213398.430901
val_mse_std0.0844370.1495660.1106700.0633570.115722
val_mse_min8.2518758.2552718.2948018.3524788.297507
val_mse_max8.4765668.6147018.5766318.5207368.565886
params848567627848885
\n" - ], - "text/plain": [ - "" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# | echo: false\n", - "# | notest\n", - "\n", - "df = stats.sort_values(by=f\"{objective}_mean\", ascending=(direction == \"min\")).head()\n", - "\n", - "df.reset_index(drop=True).T.style" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\\begin{tabular}{rrlrrrrrrrrr}\n", - "\\toprule\n", - "units & n_layers & activation & learning_rate & weight_decay & dropout & decay_rate & val_mse_mean & val_mse_std & val_mse_min & val_mse_max & params \\\\\n", - "\\midrule\n", - "21 & 2 & elu & 0.073407 & 0.058583 & 0.157718 & 0.887923 & 8.371161 & 0.084437 & 8.251875 & 8.476566 & 848 \\\\\n", - "17 & 2 & elu & 0.105021 & 0.064151 & 0.189830 & 0.828540 & 8.404634 & 0.149566 & 8.255271 & 8.614701 & 567 \\\\\n", - "19 & 2 & elu & 0.080618 & 0.023706 & 0.149354 & 0.800000 & 8.420449 & 0.110670 & 8.294801 & 8.576631 & 627 \\\\\n", - "21 & 2 & elu & 0.042817 & 0.045050 & 0.324661 & 0.988544 & 8.421339 & 0.063357 & 8.352478 & 8.520736 & 848 \\\\\n", - "22 & 2 & elu & 0.107845 & 0.032343 & 0.237459 & 0.886158 & 8.430901 & 0.115722 & 8.297507 & 8.565886 & 885 \\\\\n", - "\\bottomrule\n", - "\\end{tabular}\n", - "\n" - ] - } - ], - "source": [ - "# | include: false\n", - "# | notest\n", - "\n", - "print(df.to_latex(index=False))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## The optimal model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "These are the best hyperparameters found by previous runs of the tuner:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def final_hp_params_f(hp):\n", - " return dict(\n", - " units=hp.Fixed(\"units\", value=21),\n", - " n_layers=hp.Fixed(\"n_layers\", 2),\n", - " activation=hp.Fixed(\"activation\", value=\"elu\"),\n", - " learning_rate=hp.Fixed(\"learning_rate\", value=0.073407),\n", - " weight_decay=hp.Fixed(\"weight_decay\", value=0.058583),\n", - " dropout=hp.Fixed(\"dropout\", value=0.157718),\n", - " decay_rate=hp.Fixed(\"decay_rate\", value=0.887923),\n", - " )" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Trial 1 Complete [00h 00m 03s]\n", - "val_mse: 15.842103958129883\n", - "\n", - "Best val_mse So Far: 15.842103958129883\n", - "Total elapsed time: 00h 00m 03s\n", - "INFO:tensorflow:Oracle triggered exit\n" - ] - } - ], - "source": [ - "# | include: false\n", - "# | notest\n", - "\n", - "\n", - "shutil.rmtree(\"tuner_final/auto\", ignore_errors=True)\n", - "\n", - "final_tuner = find_hyperparameters(\n", - " \"auto\",\n", - " monotonicity_indicator=monotonicity_indicator,\n", - " hp_params_f=final_hp_params_f,\n", - " max_trials=1,\n", - " final_activation=final_activation,\n", - " loss=loss,\n", - " metrics=metrics,\n", - " objective=objective,\n", - " direction=direction,\n", - " batch_size=batch_size,\n", - " max_epochs=1,\n", - " patience=patience,\n", - " executions_per_trial=1,\n", - " dir_root=\"tuner_final\",\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_mse_meanval_mse_stdval_mse_minval_mse_maxparams
0212elu0.0734070.0585830.1577180.8879238.3711550.084448.2518658.476567848
\n", - "
" - ], - "text/plain": [ - " units n_layers activation learning_rate weight_decay dropout \n", - "0 21 2 elu 0.073407 0.058583 0.157718 \\\n", - "\n", - " decay_rate val_mse_mean val_mse_std val_mse_min val_mse_max params \n", - "0 0.887923 8.371155 0.08444 8.251865 8.476567 848 " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# | include: false\n", - "# | notest\n", - "\n", - "final_stats = create_tuner_stats(\n", - " final_tuner,\n", - " batch_size=batch_size,\n", - " max_epochs=max_epochs,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The final evaluation of the optimal model:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 0
units21
n_layers2
activationelu
learning_rate0.073407
weight_decay0.058583
dropout0.157718
decay_rate0.887923
val_mse_mean8.371155
val_mse_std0.084440
val_mse_min8.251865
val_mse_max8.476567
params848
\n" - ], - "text/plain": [ - "" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# | echo: false\n", - "# | notest\n", - "\n", - "final_stats.T.style" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "python3", - "language": "python", - "name": "python3" - } - }, - "nbformat": 4, - "nbformat_minor": 1 + "nbformat": 4, + "nbformat_minor": 1 } diff --git a/nbs/experiments/Blog.ipynb b/nbs/experiments/Blog.ipynb index 4b357c1..e51196f 100644 --- a/nbs/experiments/Blog.ipynb +++ b/nbs/experiments/Blog.ipynb @@ -1,2878 +1,2878 @@ { - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | default_exp _experiments.blog" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Blog" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Running in Google Colab\n", - "\n", - "You can run this experiment in Google Colab by clicking the button below:\n", - "\n", - "\n", - " \"Open\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Dataset" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | hide\n", - "\n", - "from IPython.display import Markdown, display_markdown\n", - "\n", - "try:\n", - " import google.colab\n", - "\n", - " in_colab = True\n", - "except:\n", - " in_colab = False\n", - "\n", - "if in_colab:\n", - " display(\n", - " Markdown(\n", - " \"\"\"\n", - "### If you see this message, you are running in Google Colab\n", - "Along with this interactive tutorial the content of this notebook is organized and formatted for documentation purpuoses. \n", - "\n", - "You can ignore the '# | hide', '# | notest' and '# | echo: false' comments, they are not important for the tutorial.\n", - " \"\"\"\n", - " )\n", - " )" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Blog Feedback [1] is a dataset containing 54,270 data points from\n", - "blog posts. The raw HTML-documents of the blog posts were crawled and processed. The prediction\n", - "task associated with the data is the prediction of the number of comments in the upcoming 24 hours.\n", - "The feature of the dataset has 276 dimensions, and 8 attributes among them should be monotonically\n", - "non-decreasing with the prediction. They are A51, A52, A53, A54, A56, A57, A58, A59. Thus the `monotonicity_indicator` corrsponding to these features are set to 1. As done in [2], we only use the data points with targets smaller than the 90th percentile.\n", - "\n", - "\n", - "\n", - "\n", - "References:\n", - "\n", - "1. Krisztian Buza. Feedback prediction for blogs. In Data analysis, machine learning and knowledge discovery, pages 145–152. Springer, 2014\n", - "2. Xingchao Liu, Xing Han, Na Zhang, and Qiang Liu. Certified monotonic neural networks. Advances in Neural Information Processing Systems, 33:15427–15438, 2020\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "monotonicity_indicator = {\n", - " f\"feature_{i}\": 1 if i in range(50, 54) or i in range(55, 59) else 0\n", - " for i in range(276)\n", - "}" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | hide\n", - "\n", - "if in_colab:\n", - " !pip install \"monotonic-nn[experiments]\"" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | include: false\n", - "\n", - "from airt.keras.experiments import (\n", - " create_tuner_stats,\n", - " find_hyperparameters,\n", - " get_train_n_test_data,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | include: false\n", - "import shutil\n", - "from os import environ\n", - "\n", - "import tensorflow as tf" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "3 Physical GPUs, 1 Logical GPU\n" - ] - } - ], - "source": [ - "# | include: false\n", - "\n", - "environ[\"TF_FORCE_GPU_ALLOW_GROWTH\"] = \"true\"\n", - "\n", - "gpus = tf.config.list_physical_devices(\"GPU\")\n", - "if gpus:\n", - " # Restrict TensorFlow to only use the first GPU\n", - " try:\n", - " tf.config.set_visible_devices(gpus[0], \"GPU\")\n", - " logical_gpus = tf.config.list_logical_devices(\"GPU\")\n", - " print(len(gpus), \"Physical GPUs,\", len(logical_gpus), \"Logical GPU\")\n", - " except RuntimeError as e:\n", - " # Visible devices must be set before GPUs have been initialized\n", - " print(e)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "These are a few examples of the dataset:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 01234
feature_00.0019200.0019200.0006400.0019200.001920
feature_10.0018250.0018250.0018250.0000000.000000
feature_20.0029200.0029200.0000000.0014600.001460
feature_30.0016270.0016270.0006510.0016270.001627
feature_40.0000000.0000000.0000000.0000000.000000
feature_50.0000000.0000000.0000000.0000000.000000
feature_60.0000000.0000000.0000000.0000000.000000
feature_70.0000000.0000000.0000000.0000000.000000
feature_80.0359010.0359010.0359010.0359010.035901
feature_90.0962500.0962500.0962500.0962500.096250
feature_100.0000000.0000000.0000000.0000000.000000
feature_110.1961840.1961840.1961840.1961840.196184
feature_120.0114160.0114160.0114160.0114160.011416
feature_130.0350700.0350700.0350700.0350700.035070
feature_140.0902340.0902340.0902340.0902340.090234
feature_150.0000000.0000000.0000000.0000000.000000
feature_160.2647470.2647470.2647470.2647470.264747
feature_170.0051020.0051020.0051020.0051020.005102
feature_180.0320640.0320640.0320640.0320640.032064
feature_190.0896660.0896660.0896660.0896660.089666
feature_200.2647470.2647470.2647470.2647470.264747
feature_210.0034010.0034010.0034010.0034010.003401
feature_220.0313680.0313680.0313680.0313680.031368
feature_230.0834030.0834030.0834030.0834030.083403
feature_240.0000000.0000000.0000000.0000000.000000
feature_250.1956520.1956520.1956520.1956520.195652
feature_260.0093020.0093020.0093020.0093020.009302
feature_270.0684590.0684590.0684590.0684590.068459
feature_280.0854960.0854960.0854960.0854960.085496
feature_290.7165610.7165610.7165610.7165610.716561
feature_300.2651200.2651200.2651200.2651200.265120
feature_310.4194530.4194530.4194530.4194530.419453
feature_320.1202060.1202060.1202060.1202060.120206
feature_330.3456560.3456560.3456560.3456560.345656
feature_340.0000000.0000000.0000000.0000000.000000
feature_350.3666670.3666670.3666670.3666670.366667
feature_360.0000000.0000000.0000000.0000000.000000
feature_370.1269850.1269850.1269850.1269850.126985
feature_380.2263420.2263420.2263420.2263420.226342
feature_390.3750000.3750000.3750000.3750000.375000
feature_400.0000000.0000000.0000000.0000000.000000
feature_410.1258530.1258530.1258530.1258530.125853
feature_420.2244220.2244220.2244220.2244220.224422
feature_430.3750000.3750000.3750000.3750000.375000
feature_440.0000000.0000000.0000000.0000000.000000
feature_450.1145870.1145870.1145870.1145870.114587
feature_460.3438260.3438260.3438260.3438260.343826
feature_470.0000000.0000000.0000000.0000000.000000
feature_480.3846150.3846150.3846150.3846150.384615
feature_490.0000000.0000000.0000000.0000000.000000
feature_500.1086750.1086750.1086750.1086750.108675
feature_510.1955700.1955700.1955700.1955700.195570
feature_520.6000000.6000000.6000000.6000000.600000
feature_530.3913040.3913040.3913040.3913040.391304
feature_540.3333330.3333330.3333330.3333330.333333
feature_550.5167250.5167250.5184860.5167250.516725
feature_560.5500000.5500000.5500000.5500000.550000
feature_570.4861110.4861110.1388890.8194440.819444
feature_580.0000000.0000000.0000000.0000000.000000
feature_590.0000000.0000000.0000000.0000000.000000
feature_600.0000000.0000000.0000000.0000000.000000
feature_610.0000000.0000000.0000000.0000000.000000
feature_620.0000000.0000000.0000000.0000000.000000
feature_630.0000000.0000000.0000000.0000000.000000
feature_640.0000000.0000000.0000000.0000000.000000
feature_650.0000000.0000000.0000000.0000000.000000
feature_660.0000000.0000000.0000000.0000000.000000
feature_670.0000000.0000000.0000000.0000000.000000
feature_680.0000000.0000000.0000000.0000000.000000
feature_690.0000000.0000000.0000000.0000000.000000
feature_700.0000000.0000000.0000000.0000000.000000
feature_710.0000000.0000000.0000000.0000000.000000
feature_720.0000000.0000000.0000000.0000000.000000
feature_730.0000000.0000000.0000000.0000000.000000
feature_740.0000000.0000000.0000000.0000000.000000
feature_750.0000000.0000000.0000000.0000000.000000
feature_760.0000000.0000000.0000000.0000000.000000
feature_770.0000000.0000000.0000000.0000000.000000
feature_780.0000000.0000000.0000000.0000000.000000
feature_790.0000000.0000000.0000000.0000000.000000
feature_800.0000000.0000000.0000000.0000000.000000
feature_810.0000000.0000000.0000000.0000000.000000
feature_820.0000000.0000000.0000000.0000000.000000
feature_830.0000000.0000000.0000000.0000000.000000
feature_840.0000000.0000000.0000000.0000000.000000
feature_850.0000000.0000000.0000000.0000000.000000
feature_860.0000000.0000000.0000000.0000000.000000
feature_870.0000000.0000000.0000000.0000000.000000
feature_880.0000000.0000000.0000000.0000000.000000
feature_890.0000000.0000000.0000000.0000000.000000
feature_900.0000000.0000000.0000000.0000000.000000
feature_910.0000000.0000000.0000000.0000000.000000
feature_920.0000000.0000000.0000000.0000000.000000
feature_930.0000000.0000000.0000000.0000000.000000
feature_940.0000000.0000000.0000000.0000000.000000
feature_950.0000000.0000000.0000000.0000000.000000
feature_960.0000000.0000000.0000000.0000000.000000
feature_970.0000000.0000000.0000000.0000000.000000
feature_980.0000000.0000000.0000000.0000000.000000
feature_990.0000000.0000000.0000000.0000000.000000
feature_1000.0000000.0000000.0000000.0000000.000000
feature_1010.0000000.0000000.0000000.0000000.000000
feature_1020.0000000.0000000.0000000.0000000.000000
feature_1030.0000000.0000000.0000000.0000000.000000
feature_1040.0000000.0000000.0000000.0000000.000000
feature_1050.0000000.0000000.0000000.0000000.000000
feature_1060.0000000.0000000.0000000.0000000.000000
feature_1070.0000000.0000000.0000000.0000000.000000
feature_1080.0000000.0000000.0000000.0000000.000000
feature_1090.0000000.0000000.0000000.0000000.000000
feature_1100.0000000.0000000.0000000.0000000.000000
feature_1110.0000000.0000000.0000000.0000000.000000
feature_1120.0000000.0000000.0000000.0000000.000000
feature_1130.0000000.0000000.0000000.0000000.000000
feature_1140.0000000.0000000.0000000.0000000.000000
feature_1150.0000000.0000000.0000000.0000000.000000
feature_1160.0000000.0000000.0000000.0000000.000000
feature_1170.0000000.0000000.0000000.0000000.000000
feature_1180.0000000.0000000.0000000.0000000.000000
feature_1190.0000000.0000000.0000000.0000000.000000
feature_1200.0000000.0000000.0000000.0000000.000000
feature_1210.0000000.0000000.0000000.0000000.000000
feature_1220.0000000.0000000.0000000.0000000.000000
feature_1230.0000000.0000000.0000000.0000000.000000
feature_1240.0000000.0000000.0000000.0000000.000000
feature_1250.0000000.0000000.0000000.0000000.000000
feature_1260.0000000.0000000.0000000.0000000.000000
feature_1270.0000000.0000000.0000000.0000000.000000
feature_1280.0000000.0000000.0000000.0000000.000000
feature_1290.0000000.0000000.0000000.0000000.000000
feature_1300.0000000.0000000.0000000.0000000.000000
feature_1310.0000000.0000000.0000000.0000000.000000
feature_1320.0000000.0000000.0000000.0000000.000000
feature_1330.0000000.0000000.0000000.0000000.000000
feature_1340.0000000.0000000.0000000.0000000.000000
feature_1350.0000000.0000000.0000000.0000000.000000
feature_1360.0000000.0000000.0000000.0000000.000000
feature_1370.0000000.0000000.0000000.0000000.000000
feature_1380.0000000.0000000.0000000.0000000.000000
feature_1390.0000000.0000000.0000000.0000000.000000
feature_1400.0000000.0000000.0000000.0000000.000000
feature_1410.0000000.0000000.0000000.0000000.000000
feature_1420.0000000.0000000.0000000.0000000.000000
feature_1430.0000000.0000000.0000000.0000000.000000
feature_1440.0000000.0000000.0000000.0000000.000000
feature_1450.0000000.0000000.0000000.0000000.000000
feature_1460.0000000.0000000.0000000.0000000.000000
feature_1470.0000000.0000000.0000000.0000000.000000
feature_1480.0000000.0000000.0000000.0000000.000000
feature_1490.0000000.0000000.0000000.0000000.000000
feature_1500.0000000.0000000.0000000.0000000.000000
feature_1510.0000000.0000000.0000000.0000000.000000
feature_1520.0000000.0000000.0000000.0000000.000000
feature_1530.0000000.0000000.0000000.0000000.000000
feature_1540.0000000.0000000.0000000.0000000.000000
feature_1550.0000000.0000000.0000000.0000000.000000
feature_1560.0000000.0000000.0000000.0000000.000000
feature_1570.0000000.0000000.0000000.0000000.000000
feature_1580.0000000.0000000.0000000.0000000.000000
feature_1590.0000000.0000000.0000000.0000000.000000
feature_1600.0000000.0000000.0000000.0000000.000000
feature_1610.0000000.0000000.0000000.0000000.000000
feature_1620.0000000.0000000.0000000.0000000.000000
feature_1630.0000000.0000000.0000000.0000000.000000
feature_1640.0000000.0000000.0000000.0000000.000000
feature_1650.0000000.0000000.0000000.0000000.000000
feature_1660.0000000.0000000.0000000.0000000.000000
feature_1670.0000000.0000000.0000000.0000000.000000
feature_1680.0000000.0000000.0000000.0000000.000000
feature_1690.0000000.0000000.0000000.0000000.000000
feature_1700.0000000.0000000.0000000.0000000.000000
feature_1710.0000000.0000000.0000000.0000000.000000
feature_1720.0000000.0000000.0000000.0000000.000000
feature_1730.0000000.0000000.0000000.0000000.000000
feature_1740.0000000.0000000.0000000.0000000.000000
feature_1750.0000000.0000000.0000000.0000000.000000
feature_1760.0000000.0000000.0000000.0000000.000000
feature_1770.0000000.0000000.0000000.0000000.000000
feature_1780.0000000.0000000.0000000.0000000.000000
feature_1790.0000000.0000000.0000000.0000000.000000
feature_1800.0000000.0000000.0000000.0000000.000000
feature_1810.0000000.0000000.0000000.0000000.000000
feature_1820.0000000.0000000.0000000.0000000.000000
feature_1830.0000000.0000000.0000000.0000000.000000
feature_1840.0000000.0000000.0000000.0000000.000000
feature_1850.0000000.0000000.0000000.0000000.000000
feature_1860.0000000.0000000.0000000.0000000.000000
feature_1870.0000000.0000000.0000000.0000000.000000
feature_1880.0000000.0000000.0000000.0000000.000000
feature_1890.0000000.0000000.0000000.0000000.000000
feature_1900.0000000.0000000.0000000.0000000.000000
feature_1910.0000000.0000000.0000000.0000000.000000
feature_1920.0000000.0000000.0000000.0000000.000000
feature_1930.0000000.0000000.0000000.0000000.000000
feature_1940.0000000.0000000.0000000.0000000.000000
feature_1950.0000000.0000000.0000000.0000000.000000
feature_1960.0000000.0000000.0000000.0000000.000000
feature_1970.0000000.0000000.0000000.0000000.000000
feature_1980.0000000.0000000.0000000.0000000.000000
feature_1990.0000000.0000000.0000000.0000000.000000
feature_2000.0000000.0000000.0000000.0000000.000000
feature_2010.0000000.0000000.0000000.0000000.000000
feature_2020.0000000.0000000.0000000.0000000.000000
feature_2030.0000000.0000000.0000000.0000000.000000
feature_2040.0000000.0000000.0000000.0000000.000000
feature_2050.0000000.0000000.0000000.0000000.000000
feature_2060.0000000.0000000.0000000.0000000.000000
feature_2070.0000000.0000000.0000000.0000000.000000
feature_2080.0000000.0000000.0000000.0000000.000000
feature_2090.0000000.0000000.0000000.0000000.000000
feature_2100.0000000.0000000.0000000.0000000.000000
feature_2110.0000000.0000000.0000000.0000000.000000
feature_2120.0000000.0000000.0000000.0000000.000000
feature_2130.0000000.0000000.0000000.0000000.000000
feature_2140.0000000.0000000.0000000.0000000.000000
feature_2150.0000000.0000000.0000000.0000000.000000
feature_2160.0000000.0000000.0000000.0000000.000000
feature_2170.0000000.0000000.0000000.0000000.000000
feature_2180.0000000.0000000.0000000.0000000.000000
feature_2190.0000000.0000000.0000000.0000000.000000
feature_2200.0000000.0000000.0000000.0000000.000000
feature_2210.0000000.0000000.0000000.0000000.000000
feature_2220.0000000.0000000.0000000.0000000.000000
feature_2230.0000000.0000000.0000000.0000000.000000
feature_2240.0000000.0000000.0000000.0000000.000000
feature_2250.0000000.0000000.0000000.0000000.000000
feature_2260.0000000.0000000.0000000.0000000.000000
feature_2270.0000000.0000000.0000000.0000000.000000
feature_2280.0000000.0000000.0000000.0000000.000000
feature_2290.0000000.0000000.0000000.0000000.000000
feature_2300.0000000.0000000.0000000.0000000.000000
feature_2310.0000000.0000000.0000000.0000000.000000
feature_2320.0000000.0000000.0000000.0000000.000000
feature_2330.0000000.0000000.0000000.0000000.000000
feature_2340.0000000.0000000.0000000.0000000.000000
feature_2350.0000000.0000000.0000000.0000000.000000
feature_2360.0000000.0000000.0000000.0000000.000000
feature_2370.0000000.0000000.0000000.0000000.000000
feature_2380.0000000.0000000.0000000.0000000.000000
feature_2390.0000000.0000000.0000000.0000000.000000
feature_2400.0000000.0000000.0000000.0000000.000000
feature_2410.0000000.0000000.0000000.0000000.000000
feature_2420.0000000.0000000.0000000.0000000.000000
feature_2430.0000000.0000000.0000000.0000000.000000
feature_2440.0000000.0000000.0000000.0000000.000000
feature_2450.0000000.0000000.0000000.0000000.000000
feature_2460.0000000.0000000.0000000.0000000.000000
feature_2470.0000000.0000000.0000000.0000000.000000
feature_2480.0000000.0000000.0000000.0000000.000000
feature_2490.0000000.0000000.0000000.0000000.000000
feature_2500.0000000.0000000.0000000.0000000.000000
feature_2510.0000000.0000000.0000000.0000000.000000
feature_2520.0000000.0000000.0000000.0000000.000000
feature_2530.0000000.0000000.0000000.0000000.000000
feature_2540.0000000.0000000.0000000.0000000.000000
feature_2550.0000000.0000000.0000000.0000000.000000
feature_2560.0000000.0000000.0000000.0000000.000000
feature_2570.0000000.0000000.0000000.0000000.000000
feature_2580.0000000.0000000.0000000.0000000.000000
feature_2590.0000000.0000000.0000000.0000000.000000
feature_2600.0000000.0000000.0000000.0000000.000000
feature_2610.0000000.0000000.0000000.0000000.000000
feature_2620.0000000.0000000.0000000.0000000.000000
feature_2631.0000001.0000001.0000000.0000000.000000
feature_2640.0000000.0000000.0000001.0000001.000000
feature_2650.0000000.0000000.0000000.0000000.000000
feature_2660.0000000.0000000.0000000.0000000.000000
feature_2670.0000000.0000000.0000000.0000000.000000
feature_2681.0000001.0000000.0000001.0000001.000000
feature_2690.0000000.0000001.0000000.0000000.000000
feature_2700.0000000.0000000.0000000.0000000.000000
feature_2710.0000000.0000000.0000000.0000000.000000
feature_2720.0000000.0000000.0000000.0000000.000000
feature_2730.0000000.0000000.0000000.0000000.000000
feature_2740.0000000.0000000.0000000.0000000.000000
feature_2750.0000000.0000000.0000000.0000000.000000
ground_truth0.0000000.0000000.1250000.0000000.000000
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# | echo: false\n", - "\n", - "train_df, test_df = get_train_n_test_data(dataset_name=\"blog\")\n", - "display(train_df.head().T.style)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Hyperparameter search" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The choice of the batch size and the maximum number of epochs depends on the dataset size. For this dataset, we use the following values:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "batch_size = 256\n", - "max_epochs = 30" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We use the Type-2 architecture built using `MonoDense` layer with the following set of hyperparameters ranges:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def hp_params_f(hp):\n", - " return dict(\n", - " units=hp.Int(\"units\", min_value=16, max_value=32, step=1),\n", - " n_layers=hp.Int(\"n_layers\", min_value=2, max_value=2),\n", - " activation=hp.Choice(\"activation\", values=[\"elu\"]),\n", - " learning_rate=hp.Float(\n", - " \"learning_rate\", min_value=1e-4, max_value=1e-2, sampling=\"log\"\n", - " ),\n", - " weight_decay=hp.Float(\n", - " \"weight_decay\", min_value=3e-2, max_value=0.3, sampling=\"log\"\n", - " ),\n", - " dropout=hp.Float(\"dropout\", min_value=0.0, max_value=0.5, sampling=\"linear\"),\n", - " decay_rate=hp.Float(\n", - " \"decay_rate\", min_value=0.8, max_value=1.0, sampling=\"reverse_log\"\n", - " ),\n", - " )" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The following fixed parameters are used to build the Type-2 architecture for this dataset:\n", - "\n", - "- `final_activation` is used to build the final layer for regression problem (set to `None`) or for the classification problem (`\"sigmoid\"`),\n", - "\n", - "- `loss` is used for training regression (`\"mse\"`) or classification (`\"binary_crossentropy\"`) problem, and\n", - "\n", - "- `metrics` denotes metrics used to compare with previosly published results: `\"accuracy\"` for classification and \"`mse`\" or \"`rmse`\" for regression.\n", - "\n", - "Parameters `objective` and `direction` are used by the tuner such that `objective=f\"val_{metrics}\"` and direction is either `\"min` or `\"max\"`.\n", - "\n", - "Parameters `max_trials` denotes the number of trial performed buy the tuner, `patience` is the number of epochs allowed to perform worst than the best one before stopping the current trial. The parameter `execution_per_trial` denotes the number of runs before calculating the results of a trial, it should be set to value greater than 1 for small datasets that have high variance in results." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "final_activation = None\n", - "loss = \"mse\"\n", - "metrics = tf.keras.metrics.RootMeanSquaredError()\n", - "objective = \"val_root_mean_squared_error\"\n", - "direction = \"min\"\n", - "max_trials = 50\n", - "executions_per_trial = 1\n", - "patience = 10" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | include: false\n", - "\n", - "# uncomment and wait for a long time to find hyperparameters\n", - "find_hyperparams = False\n", - "\n", - "if find_hyperparams:\n", - " tuner = find_hyperparameters(\n", - " \"blog\",\n", - " dir_root=\"tuner-2\",\n", - " monotonicity_indicator=monotonicity_indicator,\n", - " hp_params_f=hp_params_f,\n", - " final_activation=final_activation,\n", - " loss=loss,\n", - " metrics=metrics,\n", - " objective=objective,\n", - " direction=direction,\n", - " max_trials=max_trials,\n", - " patience=patience,\n", - " executions_per_trial=executions_per_trial,\n", - " batch_size=batch_size,\n", - " max_epochs=max_epochs,\n", - " )\n", - "else:\n", - " tuner = None" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | include: false\n", - "\n", - "if tuner is not None:\n", - " stats = create_tuner_stats(\n", - " tuner,\n", - " batch_size=batch_size,\n", - " max_epochs=max_epochs,\n", - " )" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The following table describes the best models and their hyperparameters found by the tuner:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | echo: false\n", - "\n", - "if tuner is not None:\n", - " df = stats.sort_values(\n", - " by=f\"{objective}_mean\", ascending=(direction == \"min\")\n", - " ).head()\n", - "\n", - " display(df.reset_index(drop=True).T.style)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | include: false\n", - "\n", - "if tuner is not None:\n", - " print(df.to_latex(index=False))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## The optimal model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "These are the best hyperparameters found by previous runs of the tuner:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def final_hp_params_f(hp):\n", - " return dict(\n", - " units=hp.Fixed(\"units\", value=4),\n", - " n_layers=hp.Fixed(\"n_layers\", 2),\n", - " activation=hp.Fixed(\"activation\", value=\"elu\"),\n", - " learning_rate=hp.Fixed(\"learning_rate\", value=0.01),\n", - " weight_decay=hp.Fixed(\"weight_decay\", value=0.0),\n", - " dropout=hp.Fixed(\"dropout\", value=0.0),\n", - " decay_rate=hp.Fixed(\"decay_rate\", value=0.95),\n", - " )" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Trial 1 Complete [00h 08m 49s]\n", - "val_root_mean_squared_error: 0.15556064248085022\n", - "\n", - "Best val_root_mean_squared_error So Far: 0.15556064248085022\n", - "Total elapsed time: 00h 08m 49s\n", - "INFO:tensorflow:Oracle triggered exit\n" - ] - } - ], - "source": [ - "# | include: false\n", - "# | notest\n", - "\n", - "\n", - "shutil.rmtree(\"tuner_final/blog\", ignore_errors=True)\n", - "\n", - "final_tuner = find_hyperparameters(\n", - " \"blog\",\n", - " monotonicity_indicator=monotonicity_indicator,\n", - " hp_params_f=final_hp_params_f,\n", - " max_trials=1,\n", - " final_activation=final_activation,\n", - " loss=loss,\n", - " metrics=metrics,\n", - " objective=objective,\n", - " direction=direction,\n", - " batch_size=batch_size,\n", - " max_epochs=max_epochs,\n", - " patience=patience,\n", - " executions_per_trial=1,\n", - " dir_root=\"tuner_final\",\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_root_mean_squared_error_meanval_root_mean_squared_error_stdval_root_mean_squared_error_minval_root_mean_squared_error_maxparams
042elu0.010.00.00.950.1541090.0005680.1536690.1548941665
\n", - "
" - ], - "text/plain": [ - " units n_layers activation learning_rate weight_decay dropout \n", - "0 4 2 elu 0.01 0.0 0.0 \\\n", - "\n", - " decay_rate val_root_mean_squared_error_mean \n", - "0 0.95 0.154109 \\\n", - "\n", - " val_root_mean_squared_error_std val_root_mean_squared_error_min \n", - "0 0.000568 0.153669 \\\n", - "\n", - " val_root_mean_squared_error_max params \n", - "0 0.154894 1665 " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# | include: false\n", - "# | notest\n", - "\n", - "final_stats = create_tuner_stats(\n", - " final_tuner,\n", - " batch_size=batch_size,\n", - " max_epochs=max_epochs,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The final evaluation of the optimal model:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 0
units4
n_layers2
activationelu
learning_rate0.010000
weight_decay0.000000
dropout0.000000
decay_rate0.950000
val_root_mean_squared_error_mean0.154109
val_root_mean_squared_error_std0.000568
val_root_mean_squared_error_min0.153669
val_root_mean_squared_error_max0.154894
params1665
\n" - ], - "text/plain": [ - "" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# | echo: false\n", - "# | notest\n", - "\n", - "final_stats.T.style" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "python3", - "language": "python", - "name": "python3" - } - }, - "nbformat": 4, - "nbformat_minor": 1 + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | default_exp _experiments.blog" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Blog" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Running in Google Colab\n", + "\n", + "You can run this experiment in Google Colab by clicking the button below:\n", + "\n", + "\n", + " \"Open\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Dataset" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | hide\n", + "\n", + "from IPython.display import Markdown, display_markdown\n", + "\n", + "try:\n", + " import google.colab\n", + "\n", + " in_colab = True\n", + "except:\n", + " in_colab = False\n", + "\n", + "if in_colab:\n", + " display(\n", + " Markdown(\n", + " \"\"\"\n", + "### If you see this message, you are running in Google Colab\n", + "Along with this interactive tutorial the content of this notebook is organized and formatted for documentation purpuoses. \n", + "\n", + "You can ignore the '# | hide', '# | notest' and '# | echo: false' comments, they are not important for the tutorial.\n", + " \"\"\"\n", + " )\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Blog Feedback [1] is a dataset containing 54,270 data points from\n", + "blog posts. The raw HTML-documents of the blog posts were crawled and processed. The prediction\n", + "task associated with the data is the prediction of the number of comments in the upcoming 24 hours.\n", + "The feature of the dataset has 276 dimensions, and 8 attributes among them should be monotonically\n", + "non-decreasing with the prediction. They are A51, A52, A53, A54, A56, A57, A58, A59. Thus the `monotonicity_indicator` corresponding to these features are set to 1. As done in [2], we only use the data points with targets smaller than the 90th percentile.\n", + "\n", + "\n", + "\n", + "\n", + "References:\n", + "\n", + "1. Krisztian Buza. Feedback prediction for blogs. In Data analysis, machine learning and knowledge discovery, pages 145–152. Springer, 2014\n", + "2. Xingchao Liu, Xing Han, Na Zhang, and Qiang Liu. Certified monotonic neural networks. Advances in Neural Information Processing Systems, 33:15427–15438, 2020\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "monotonicity_indicator = {\n", + " f\"feature_{i}\": 1 if i in range(50, 54) or i in range(55, 59) else 0\n", + " for i in range(276)\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | hide\n", + "\n", + "if in_colab:\n", + " !pip install \"monotonic-nn[experiments]\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | include: false\n", + "\n", + "from airt.keras.experiments import (\n", + " create_tuner_stats,\n", + " find_hyperparameters,\n", + " get_train_n_test_data,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | include: false\n", + "import shutil\n", + "from os import environ\n", + "\n", + "import tensorflow as tf" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3 Physical GPUs, 1 Logical GPU\n" + ] + } + ], + "source": [ + "# | include: false\n", + "\n", + "environ[\"TF_FORCE_GPU_ALLOW_GROWTH\"] = \"true\"\n", + "\n", + "gpus = tf.config.list_physical_devices(\"GPU\")\n", + "if gpus:\n", + " # Restrict TensorFlow to only use the first GPU\n", + " try:\n", + " tf.config.set_visible_devices(gpus[0], \"GPU\")\n", + " logical_gpus = tf.config.list_logical_devices(\"GPU\")\n", + " print(len(gpus), \"Physical GPUs,\", len(logical_gpus), \"Logical GPU\")\n", + " except RuntimeError as e:\n", + " # Visible devices must be set before GPUs have been initialized\n", + " print(e)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "These are a few examples of the dataset:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 01234
feature_00.0019200.0019200.0006400.0019200.001920
feature_10.0018250.0018250.0018250.0000000.000000
feature_20.0029200.0029200.0000000.0014600.001460
feature_30.0016270.0016270.0006510.0016270.001627
feature_40.0000000.0000000.0000000.0000000.000000
feature_50.0000000.0000000.0000000.0000000.000000
feature_60.0000000.0000000.0000000.0000000.000000
feature_70.0000000.0000000.0000000.0000000.000000
feature_80.0359010.0359010.0359010.0359010.035901
feature_90.0962500.0962500.0962500.0962500.096250
feature_100.0000000.0000000.0000000.0000000.000000
feature_110.1961840.1961840.1961840.1961840.196184
feature_120.0114160.0114160.0114160.0114160.011416
feature_130.0350700.0350700.0350700.0350700.035070
feature_140.0902340.0902340.0902340.0902340.090234
feature_150.0000000.0000000.0000000.0000000.000000
feature_160.2647470.2647470.2647470.2647470.264747
feature_170.0051020.0051020.0051020.0051020.005102
feature_180.0320640.0320640.0320640.0320640.032064
feature_190.0896660.0896660.0896660.0896660.089666
feature_200.2647470.2647470.2647470.2647470.264747
feature_210.0034010.0034010.0034010.0034010.003401
feature_220.0313680.0313680.0313680.0313680.031368
feature_230.0834030.0834030.0834030.0834030.083403
feature_240.0000000.0000000.0000000.0000000.000000
feature_250.1956520.1956520.1956520.1956520.195652
feature_260.0093020.0093020.0093020.0093020.009302
feature_270.0684590.0684590.0684590.0684590.068459
feature_280.0854960.0854960.0854960.0854960.085496
feature_290.7165610.7165610.7165610.7165610.716561
feature_300.2651200.2651200.2651200.2651200.265120
feature_310.4194530.4194530.4194530.4194530.419453
feature_320.1202060.1202060.1202060.1202060.120206
feature_330.3456560.3456560.3456560.3456560.345656
feature_340.0000000.0000000.0000000.0000000.000000
feature_350.3666670.3666670.3666670.3666670.366667
feature_360.0000000.0000000.0000000.0000000.000000
feature_370.1269850.1269850.1269850.1269850.126985
feature_380.2263420.2263420.2263420.2263420.226342
feature_390.3750000.3750000.3750000.3750000.375000
feature_400.0000000.0000000.0000000.0000000.000000
feature_410.1258530.1258530.1258530.1258530.125853
feature_420.2244220.2244220.2244220.2244220.224422
feature_430.3750000.3750000.3750000.3750000.375000
feature_440.0000000.0000000.0000000.0000000.000000
feature_450.1145870.1145870.1145870.1145870.114587
feature_460.3438260.3438260.3438260.3438260.343826
feature_470.0000000.0000000.0000000.0000000.000000
feature_480.3846150.3846150.3846150.3846150.384615
feature_490.0000000.0000000.0000000.0000000.000000
feature_500.1086750.1086750.1086750.1086750.108675
feature_510.1955700.1955700.1955700.1955700.195570
feature_520.6000000.6000000.6000000.6000000.600000
feature_530.3913040.3913040.3913040.3913040.391304
feature_540.3333330.3333330.3333330.3333330.333333
feature_550.5167250.5167250.5184860.5167250.516725
feature_560.5500000.5500000.5500000.5500000.550000
feature_570.4861110.4861110.1388890.8194440.819444
feature_580.0000000.0000000.0000000.0000000.000000
feature_590.0000000.0000000.0000000.0000000.000000
feature_600.0000000.0000000.0000000.0000000.000000
feature_610.0000000.0000000.0000000.0000000.000000
feature_620.0000000.0000000.0000000.0000000.000000
feature_630.0000000.0000000.0000000.0000000.000000
feature_640.0000000.0000000.0000000.0000000.000000
feature_650.0000000.0000000.0000000.0000000.000000
feature_660.0000000.0000000.0000000.0000000.000000
feature_670.0000000.0000000.0000000.0000000.000000
feature_680.0000000.0000000.0000000.0000000.000000
feature_690.0000000.0000000.0000000.0000000.000000
feature_700.0000000.0000000.0000000.0000000.000000
feature_710.0000000.0000000.0000000.0000000.000000
feature_720.0000000.0000000.0000000.0000000.000000
feature_730.0000000.0000000.0000000.0000000.000000
feature_740.0000000.0000000.0000000.0000000.000000
feature_750.0000000.0000000.0000000.0000000.000000
feature_760.0000000.0000000.0000000.0000000.000000
feature_770.0000000.0000000.0000000.0000000.000000
feature_780.0000000.0000000.0000000.0000000.000000
feature_790.0000000.0000000.0000000.0000000.000000
feature_800.0000000.0000000.0000000.0000000.000000
feature_810.0000000.0000000.0000000.0000000.000000
feature_820.0000000.0000000.0000000.0000000.000000
feature_830.0000000.0000000.0000000.0000000.000000
feature_840.0000000.0000000.0000000.0000000.000000
feature_850.0000000.0000000.0000000.0000000.000000
feature_860.0000000.0000000.0000000.0000000.000000
feature_870.0000000.0000000.0000000.0000000.000000
feature_880.0000000.0000000.0000000.0000000.000000
feature_890.0000000.0000000.0000000.0000000.000000
feature_900.0000000.0000000.0000000.0000000.000000
feature_910.0000000.0000000.0000000.0000000.000000
feature_920.0000000.0000000.0000000.0000000.000000
feature_930.0000000.0000000.0000000.0000000.000000
feature_940.0000000.0000000.0000000.0000000.000000
feature_950.0000000.0000000.0000000.0000000.000000
feature_960.0000000.0000000.0000000.0000000.000000
feature_970.0000000.0000000.0000000.0000000.000000
feature_980.0000000.0000000.0000000.0000000.000000
feature_990.0000000.0000000.0000000.0000000.000000
feature_1000.0000000.0000000.0000000.0000000.000000
feature_1010.0000000.0000000.0000000.0000000.000000
feature_1020.0000000.0000000.0000000.0000000.000000
feature_1030.0000000.0000000.0000000.0000000.000000
feature_1040.0000000.0000000.0000000.0000000.000000
feature_1050.0000000.0000000.0000000.0000000.000000
feature_1060.0000000.0000000.0000000.0000000.000000
feature_1070.0000000.0000000.0000000.0000000.000000
feature_1080.0000000.0000000.0000000.0000000.000000
feature_1090.0000000.0000000.0000000.0000000.000000
feature_1100.0000000.0000000.0000000.0000000.000000
feature_1110.0000000.0000000.0000000.0000000.000000
feature_1120.0000000.0000000.0000000.0000000.000000
feature_1130.0000000.0000000.0000000.0000000.000000
feature_1140.0000000.0000000.0000000.0000000.000000
feature_1150.0000000.0000000.0000000.0000000.000000
feature_1160.0000000.0000000.0000000.0000000.000000
feature_1170.0000000.0000000.0000000.0000000.000000
feature_1180.0000000.0000000.0000000.0000000.000000
feature_1190.0000000.0000000.0000000.0000000.000000
feature_1200.0000000.0000000.0000000.0000000.000000
feature_1210.0000000.0000000.0000000.0000000.000000
feature_1220.0000000.0000000.0000000.0000000.000000
feature_1230.0000000.0000000.0000000.0000000.000000
feature_1240.0000000.0000000.0000000.0000000.000000
feature_1250.0000000.0000000.0000000.0000000.000000
feature_1260.0000000.0000000.0000000.0000000.000000
feature_1270.0000000.0000000.0000000.0000000.000000
feature_1280.0000000.0000000.0000000.0000000.000000
feature_1290.0000000.0000000.0000000.0000000.000000
feature_1300.0000000.0000000.0000000.0000000.000000
feature_1310.0000000.0000000.0000000.0000000.000000
feature_1320.0000000.0000000.0000000.0000000.000000
feature_1330.0000000.0000000.0000000.0000000.000000
feature_1340.0000000.0000000.0000000.0000000.000000
feature_1350.0000000.0000000.0000000.0000000.000000
feature_1360.0000000.0000000.0000000.0000000.000000
feature_1370.0000000.0000000.0000000.0000000.000000
feature_1380.0000000.0000000.0000000.0000000.000000
feature_1390.0000000.0000000.0000000.0000000.000000
feature_1400.0000000.0000000.0000000.0000000.000000
feature_1410.0000000.0000000.0000000.0000000.000000
feature_1420.0000000.0000000.0000000.0000000.000000
feature_1430.0000000.0000000.0000000.0000000.000000
feature_1440.0000000.0000000.0000000.0000000.000000
feature_1450.0000000.0000000.0000000.0000000.000000
feature_1460.0000000.0000000.0000000.0000000.000000
feature_1470.0000000.0000000.0000000.0000000.000000
feature_1480.0000000.0000000.0000000.0000000.000000
feature_1490.0000000.0000000.0000000.0000000.000000
feature_1500.0000000.0000000.0000000.0000000.000000
feature_1510.0000000.0000000.0000000.0000000.000000
feature_1520.0000000.0000000.0000000.0000000.000000
feature_1530.0000000.0000000.0000000.0000000.000000
feature_1540.0000000.0000000.0000000.0000000.000000
feature_1550.0000000.0000000.0000000.0000000.000000
feature_1560.0000000.0000000.0000000.0000000.000000
feature_1570.0000000.0000000.0000000.0000000.000000
feature_1580.0000000.0000000.0000000.0000000.000000
feature_1590.0000000.0000000.0000000.0000000.000000
feature_1600.0000000.0000000.0000000.0000000.000000
feature_1610.0000000.0000000.0000000.0000000.000000
feature_1620.0000000.0000000.0000000.0000000.000000
feature_1630.0000000.0000000.0000000.0000000.000000
feature_1640.0000000.0000000.0000000.0000000.000000
feature_1650.0000000.0000000.0000000.0000000.000000
feature_1660.0000000.0000000.0000000.0000000.000000
feature_1670.0000000.0000000.0000000.0000000.000000
feature_1680.0000000.0000000.0000000.0000000.000000
feature_1690.0000000.0000000.0000000.0000000.000000
feature_1700.0000000.0000000.0000000.0000000.000000
feature_1710.0000000.0000000.0000000.0000000.000000
feature_1720.0000000.0000000.0000000.0000000.000000
feature_1730.0000000.0000000.0000000.0000000.000000
feature_1740.0000000.0000000.0000000.0000000.000000
feature_1750.0000000.0000000.0000000.0000000.000000
feature_1760.0000000.0000000.0000000.0000000.000000
feature_1770.0000000.0000000.0000000.0000000.000000
feature_1780.0000000.0000000.0000000.0000000.000000
feature_1790.0000000.0000000.0000000.0000000.000000
feature_1800.0000000.0000000.0000000.0000000.000000
feature_1810.0000000.0000000.0000000.0000000.000000
feature_1820.0000000.0000000.0000000.0000000.000000
feature_1830.0000000.0000000.0000000.0000000.000000
feature_1840.0000000.0000000.0000000.0000000.000000
feature_1850.0000000.0000000.0000000.0000000.000000
feature_1860.0000000.0000000.0000000.0000000.000000
feature_1870.0000000.0000000.0000000.0000000.000000
feature_1880.0000000.0000000.0000000.0000000.000000
feature_1890.0000000.0000000.0000000.0000000.000000
feature_1900.0000000.0000000.0000000.0000000.000000
feature_1910.0000000.0000000.0000000.0000000.000000
feature_1920.0000000.0000000.0000000.0000000.000000
feature_1930.0000000.0000000.0000000.0000000.000000
feature_1940.0000000.0000000.0000000.0000000.000000
feature_1950.0000000.0000000.0000000.0000000.000000
feature_1960.0000000.0000000.0000000.0000000.000000
feature_1970.0000000.0000000.0000000.0000000.000000
feature_1980.0000000.0000000.0000000.0000000.000000
feature_1990.0000000.0000000.0000000.0000000.000000
feature_2000.0000000.0000000.0000000.0000000.000000
feature_2010.0000000.0000000.0000000.0000000.000000
feature_2020.0000000.0000000.0000000.0000000.000000
feature_2030.0000000.0000000.0000000.0000000.000000
feature_2040.0000000.0000000.0000000.0000000.000000
feature_2050.0000000.0000000.0000000.0000000.000000
feature_2060.0000000.0000000.0000000.0000000.000000
feature_2070.0000000.0000000.0000000.0000000.000000
feature_2080.0000000.0000000.0000000.0000000.000000
feature_2090.0000000.0000000.0000000.0000000.000000
feature_2100.0000000.0000000.0000000.0000000.000000
feature_2110.0000000.0000000.0000000.0000000.000000
feature_2120.0000000.0000000.0000000.0000000.000000
feature_2130.0000000.0000000.0000000.0000000.000000
feature_2140.0000000.0000000.0000000.0000000.000000
feature_2150.0000000.0000000.0000000.0000000.000000
feature_2160.0000000.0000000.0000000.0000000.000000
feature_2170.0000000.0000000.0000000.0000000.000000
feature_2180.0000000.0000000.0000000.0000000.000000
feature_2190.0000000.0000000.0000000.0000000.000000
feature_2200.0000000.0000000.0000000.0000000.000000
feature_2210.0000000.0000000.0000000.0000000.000000
feature_2220.0000000.0000000.0000000.0000000.000000
feature_2230.0000000.0000000.0000000.0000000.000000
feature_2240.0000000.0000000.0000000.0000000.000000
feature_2250.0000000.0000000.0000000.0000000.000000
feature_2260.0000000.0000000.0000000.0000000.000000
feature_2270.0000000.0000000.0000000.0000000.000000
feature_2280.0000000.0000000.0000000.0000000.000000
feature_2290.0000000.0000000.0000000.0000000.000000
feature_2300.0000000.0000000.0000000.0000000.000000
feature_2310.0000000.0000000.0000000.0000000.000000
feature_2320.0000000.0000000.0000000.0000000.000000
feature_2330.0000000.0000000.0000000.0000000.000000
feature_2340.0000000.0000000.0000000.0000000.000000
feature_2350.0000000.0000000.0000000.0000000.000000
feature_2360.0000000.0000000.0000000.0000000.000000
feature_2370.0000000.0000000.0000000.0000000.000000
feature_2380.0000000.0000000.0000000.0000000.000000
feature_2390.0000000.0000000.0000000.0000000.000000
feature_2400.0000000.0000000.0000000.0000000.000000
feature_2410.0000000.0000000.0000000.0000000.000000
feature_2420.0000000.0000000.0000000.0000000.000000
feature_2430.0000000.0000000.0000000.0000000.000000
feature_2440.0000000.0000000.0000000.0000000.000000
feature_2450.0000000.0000000.0000000.0000000.000000
feature_2460.0000000.0000000.0000000.0000000.000000
feature_2470.0000000.0000000.0000000.0000000.000000
feature_2480.0000000.0000000.0000000.0000000.000000
feature_2490.0000000.0000000.0000000.0000000.000000
feature_2500.0000000.0000000.0000000.0000000.000000
feature_2510.0000000.0000000.0000000.0000000.000000
feature_2520.0000000.0000000.0000000.0000000.000000
feature_2530.0000000.0000000.0000000.0000000.000000
feature_2540.0000000.0000000.0000000.0000000.000000
feature_2550.0000000.0000000.0000000.0000000.000000
feature_2560.0000000.0000000.0000000.0000000.000000
feature_2570.0000000.0000000.0000000.0000000.000000
feature_2580.0000000.0000000.0000000.0000000.000000
feature_2590.0000000.0000000.0000000.0000000.000000
feature_2600.0000000.0000000.0000000.0000000.000000
feature_2610.0000000.0000000.0000000.0000000.000000
feature_2620.0000000.0000000.0000000.0000000.000000
feature_2631.0000001.0000001.0000000.0000000.000000
feature_2640.0000000.0000000.0000001.0000001.000000
feature_2650.0000000.0000000.0000000.0000000.000000
feature_2660.0000000.0000000.0000000.0000000.000000
feature_2670.0000000.0000000.0000000.0000000.000000
feature_2681.0000001.0000000.0000001.0000001.000000
feature_2690.0000000.0000001.0000000.0000000.000000
feature_2700.0000000.0000000.0000000.0000000.000000
feature_2710.0000000.0000000.0000000.0000000.000000
feature_2720.0000000.0000000.0000000.0000000.000000
feature_2730.0000000.0000000.0000000.0000000.000000
feature_2740.0000000.0000000.0000000.0000000.000000
feature_2750.0000000.0000000.0000000.0000000.000000
ground_truth0.0000000.0000000.1250000.0000000.000000
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# | echo: false\n", + "\n", + "train_df, test_df = get_train_n_test_data(dataset_name=\"blog\")\n", + "display(train_df.head().T.style)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Hyperparameter search" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The choice of the batch size and the maximum number of epochs depends on the dataset size. For this dataset, we use the following values:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "batch_size = 256\n", + "max_epochs = 30" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We use the Type-2 architecture built using `MonoDense` layer with the following set of hyperparameters ranges:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def hp_params_f(hp):\n", + " return dict(\n", + " units=hp.Int(\"units\", min_value=16, max_value=32, step=1),\n", + " n_layers=hp.Int(\"n_layers\", min_value=2, max_value=2),\n", + " activation=hp.Choice(\"activation\", values=[\"elu\"]),\n", + " learning_rate=hp.Float(\n", + " \"learning_rate\", min_value=1e-4, max_value=1e-2, sampling=\"log\"\n", + " ),\n", + " weight_decay=hp.Float(\n", + " \"weight_decay\", min_value=3e-2, max_value=0.3, sampling=\"log\"\n", + " ),\n", + " dropout=hp.Float(\"dropout\", min_value=0.0, max_value=0.5, sampling=\"linear\"),\n", + " decay_rate=hp.Float(\n", + " \"decay_rate\", min_value=0.8, max_value=1.0, sampling=\"reverse_log\"\n", + " ),\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The following fixed parameters are used to build the Type-2 architecture for this dataset:\n", + "\n", + "- `final_activation` is used to build the final layer for regression problem (set to `None`) or for the classification problem (`\"sigmoid\"`),\n", + "\n", + "- `loss` is used for training regression (`\"mse\"`) or classification (`\"binary_crossentropy\"`) problem, and\n", + "\n", + "- `metrics` denotes metrics used to compare with previously published results: `\"accuracy\"` for classification and \"`mse`\" or \"`rmse`\" for regression.\n", + "\n", + "Parameters `objective` and `direction` are used by the tuner such that `objective=f\"val_{metrics}\"` and direction is either `\"min` or `\"max\"`.\n", + "\n", + "Parameters `max_trials` denotes the number of trial performed buy the tuner, `patience` is the number of epochs allowed to perform worst than the best one before stopping the current trial. The parameter `execution_per_trial` denotes the number of runs before calculating the results of a trial, it should be set to value greater than 1 for small datasets that have high variance in results." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "final_activation = None\n", + "loss = \"mse\"\n", + "metrics = tf.keras.metrics.RootMeanSquaredError()\n", + "objective = \"val_root_mean_squared_error\"\n", + "direction = \"min\"\n", + "max_trials = 50\n", + "executions_per_trial = 1\n", + "patience = 10" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | include: false\n", + "\n", + "# uncomment and wait for a long time to find hyperparameters\n", + "find_hyperparams = False\n", + "\n", + "if find_hyperparams:\n", + " tuner = find_hyperparameters(\n", + " \"blog\",\n", + " dir_root=\"tuner-2\",\n", + " monotonicity_indicator=monotonicity_indicator,\n", + " hp_params_f=hp_params_f,\n", + " final_activation=final_activation,\n", + " loss=loss,\n", + " metrics=metrics,\n", + " objective=objective,\n", + " direction=direction,\n", + " max_trials=max_trials,\n", + " patience=patience,\n", + " executions_per_trial=executions_per_trial,\n", + " batch_size=batch_size,\n", + " max_epochs=max_epochs,\n", + " )\n", + "else:\n", + " tuner = None" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | include: false\n", + "\n", + "if tuner is not None:\n", + " stats = create_tuner_stats(\n", + " tuner,\n", + " batch_size=batch_size,\n", + " max_epochs=max_epochs,\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The following table describes the best models and their hyperparameters found by the tuner:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | echo: false\n", + "\n", + "if tuner is not None:\n", + " df = stats.sort_values(\n", + " by=f\"{objective}_mean\", ascending=(direction == \"min\")\n", + " ).head()\n", + "\n", + " display(df.reset_index(drop=True).T.style)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | include: false\n", + "\n", + "if tuner is not None:\n", + " print(df.to_latex(index=False))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The optimal model" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "These are the best hyperparameters found by previous runs of the tuner:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def final_hp_params_f(hp):\n", + " return dict(\n", + " units=hp.Fixed(\"units\", value=4),\n", + " n_layers=hp.Fixed(\"n_layers\", 2),\n", + " activation=hp.Fixed(\"activation\", value=\"elu\"),\n", + " learning_rate=hp.Fixed(\"learning_rate\", value=0.01),\n", + " weight_decay=hp.Fixed(\"weight_decay\", value=0.0),\n", + " dropout=hp.Fixed(\"dropout\", value=0.0),\n", + " decay_rate=hp.Fixed(\"decay_rate\", value=0.95),\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Trial 1 Complete [00h 08m 49s]\n", + "val_root_mean_squared_error: 0.15556064248085022\n", + "\n", + "Best val_root_mean_squared_error So Far: 0.15556064248085022\n", + "Total elapsed time: 00h 08m 49s\n", + "INFO:tensorflow:Oracle triggered exit\n" + ] + } + ], + "source": [ + "# | include: false\n", + "# | notest\n", + "\n", + "\n", + "shutil.rmtree(\"tuner_final/blog\", ignore_errors=True)\n", + "\n", + "final_tuner = find_hyperparameters(\n", + " \"blog\",\n", + " monotonicity_indicator=monotonicity_indicator,\n", + " hp_params_f=final_hp_params_f,\n", + " max_trials=1,\n", + " final_activation=final_activation,\n", + " loss=loss,\n", + " metrics=metrics,\n", + " objective=objective,\n", + " direction=direction,\n", + " batch_size=batch_size,\n", + " max_epochs=max_epochs,\n", + " patience=patience,\n", + " executions_per_trial=1,\n", + " dir_root=\"tuner_final\",\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_root_mean_squared_error_meanval_root_mean_squared_error_stdval_root_mean_squared_error_minval_root_mean_squared_error_maxparams
042elu0.010.00.00.950.1541090.0005680.1536690.1548941665
\n", + "
" + ], + "text/plain": [ + " units n_layers activation learning_rate weight_decay dropout \n", + "0 4 2 elu 0.01 0.0 0.0 \\\n", + "\n", + " decay_rate val_root_mean_squared_error_mean \n", + "0 0.95 0.154109 \\\n", + "\n", + " val_root_mean_squared_error_std val_root_mean_squared_error_min \n", + "0 0.000568 0.153669 \\\n", + "\n", + " val_root_mean_squared_error_max params \n", + "0 0.154894 1665 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# | include: false\n", + "# | notest\n", + "\n", + "final_stats = create_tuner_stats(\n", + " final_tuner,\n", + " batch_size=batch_size,\n", + " max_epochs=max_epochs,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The final evaluation of the optimal model:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 0
units4
n_layers2
activationelu
learning_rate0.010000
weight_decay0.000000
dropout0.000000
decay_rate0.950000
val_root_mean_squared_error_mean0.154109
val_root_mean_squared_error_std0.000568
val_root_mean_squared_error_min0.153669
val_root_mean_squared_error_max0.154894
params1665
\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": null, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# | echo: false\n", + "# | notest\n", + "\n", + "final_stats.T.style" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "python3", + "language": "python", + "name": "python3" + } + }, + "nbformat": 4, + "nbformat_minor": 1 } diff --git a/nbs/experiments/Compas.ipynb b/nbs/experiments/Compas.ipynb index 496f90e..5370557 100644 --- a/nbs/experiments/Compas.ipynb +++ b/nbs/experiments/Compas.ipynb @@ -1,2469 +1,2469 @@ { - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | default_exp _experiments.compas" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# COMPAS" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Running in Google Colab\n", - "\n", - "You can run this experiment in Google Colab by clicking the button below:\n", - "\n", - "\n", - " \"Open\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | hide\n", - "\n", - "from IPython.display import Markdown, display_markdown\n", - "\n", - "try:\n", - " import google.colab\n", - "\n", - " in_colab = True\n", - "except:\n", - " in_colab = False\n", - "\n", - "if in_colab:\n", - " display(\n", - " Markdown(\n", - " \"\"\"\n", - "### If you see this message, you are running in Google Colab\n", - "Along with this interactive tutorial the content of this notebook is organized and formatted for documentation purpuoses. \n", - "\n", - "You can ignore the '# | hide', '# | notest' and '# | echo: false' comments, they are not important for the tutorial.\n", - " \"\"\"\n", - " )\n", - " )" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Dataset" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "COMPAS [1] is a dataset containing the criminal records of 6,172 individuals\n", - "arrested in Florida. The task is to predict whether the individual will commit a crime again\n", - "in 2 years. The probability predicted by the system will be used as a risk score. As mentioned in [2] 13 attributes for prediction. The risk score should be monotonically increasing w.r.t. four attributes, number of prior adult convictions, number of juvenile felony, number of juvenile misdemeanor, and number of other convictions. The `monotonicity_indicator` corrsponding to these features are set to 1.\n", - "\n", - "References: \n", - "\n", - "1. S. Mattu J. Angwin, J. Larson and L. Kirchner. Machine bias: There’s software used across the country to predict future criminals. and it’s biased against blacks. ProPublica, 2016.\n", - "\n", - "2. Xingchao Liu, Xing Han, Na Zhang, and Qiang Liu. Certified monotonic neural networks. Advances in Neural Information Processing Systems, 33:15427–15438, 2020\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "monotonicity_indicator = {\n", - " \"priors_count\": 1,\n", - " \"juv_fel_count\": 1,\n", - " \"juv_misd_count\": 1,\n", - " \"juv_other_count\": 1,\n", - " \"age\": 0,\n", - " \"race_0\": 0,\n", - " \"race_1\": 0,\n", - " \"race_2\": 0,\n", - " \"race_3\": 0,\n", - " \"race_4\": 0,\n", - " \"race_5\": 0,\n", - " \"sex_0\": 0,\n", - " \"sex_1\": 0,\n", - "}" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | hide\n", - "\n", - "from IPython.display import Markdown, display_markdown\n", - "\n", - "try:\n", - " import google.colab\n", - "\n", - " in_colab = True\n", - "except:\n", - " in_colab = False\n", - "\n", - "if in_colab:\n", - " display(\n", - " Markdown(\n", - " \"\"\"\n", - "### If you see this message, you are running in Google Colab\n", - "Along with this interactive tutorial the content of this notebook is organized and formatted for documentation purpuoses. \n", - "\n", - "You can ignore the '# | hide', '# | notest' and '# | echo: false' comments, they are not important for the tutorial.\n", - " \"\"\"\n", - " )\n", - " )" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | hide\n", - "\n", - "if in_colab:\n", - " !pip install monotonic-nn" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | hide\n", - "\n", - "if in_colab:\n", - " !pip install \"monotonic-nn[experiments]\"" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | include: false\n", - "\n", - "from airt.keras.experiments import (\n", - " create_tuner_stats,\n", - " find_hyperparameters,\n", - " get_train_n_test_data,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | include: false\n", - "import shutil\n", - "from os import environ\n", - "\n", - "import tensorflow as tf" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "3 Physical GPUs, 1 Logical GPU\n" - ] - } - ], - "source": [ - "# | include: false\n", - "\n", - "environ[\"TF_FORCE_GPU_ALLOW_GROWTH\"] = \"true\"\n", - "\n", - "gpus = tf.config.list_physical_devices(\"GPU\")\n", - "if gpus:\n", - " # Restrict TensorFlow to only use the first GPU\n", - " try:\n", - " tf.config.set_visible_devices(gpus[1], \"GPU\")\n", - " logical_gpus = tf.config.list_logical_devices(\"GPU\")\n", - " print(len(gpus), \"Physical GPUs,\", len(logical_gpus), \"Logical GPU\")\n", - " except RuntimeError as e:\n", - " # Visible devices must be set before GPUs have been initialized\n", - " print(e)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "These are a few examples of the dataset:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 01234
priors_count0.3684210.0000000.0263160.3947370.052632
juv_fel_count0.0000000.0000000.0000000.0000000.000000
juv_misd_count0.0000000.0000000.0000000.0000000.000000
juv_other_count0.0000000.0000000.0000000.0000000.000000
age0.2307690.0512820.1794870.2307690.102564
race_01.0000001.0000000.0000001.0000001.000000
race_10.0000000.0000001.0000000.0000000.000000
race_20.0000000.0000000.0000000.0000000.000000
race_30.0000000.0000000.0000000.0000000.000000
race_40.0000000.0000000.0000000.0000000.000000
race_50.0000000.0000000.0000000.0000000.000000
sex_01.0000001.0000001.0000001.0000001.000000
sex_10.0000000.0000000.0000000.0000000.000000
ground_truth1.0000000.0000000.0000000.0000001.000000
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# | echo: false\n", - "\n", - "train_df, test_df = get_train_n_test_data(dataset_name=\"compas\")\n", - "display(train_df.head().T.style)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Hyperparameter search" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The choice of the batch size and the maximum number of epochs depends on the dataset size. For this dataset, we use the following values:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "batch_size = 8\n", - "max_epochs = 50" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We use the Type-2 architecture built using `MonoDense` layer with the following set of hyperparameters ranges:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def hp_params_f(hp):\n", - " return dict(\n", - " units=hp.Int(\"units\", min_value=16, max_value=32, step=1),\n", - " n_layers=hp.Int(\"n_layers\", min_value=2, max_value=2),\n", - " activation=hp.Choice(\"activation\", values=[\"elu\"]),\n", - " learning_rate=hp.Float(\n", - " \"learning_rate\", min_value=1e-4, max_value=1e-2, sampling=\"log\"\n", - " ),\n", - " weight_decay=hp.Float(\n", - " \"weight_decay\", min_value=3e-2, max_value=0.3, sampling=\"log\"\n", - " ),\n", - " dropout=hp.Float(\"dropout\", min_value=0.0, max_value=0.5, sampling=\"linear\"),\n", - " decay_rate=hp.Float(\n", - " \"decay_rate\", min_value=0.8, max_value=1.0, sampling=\"reverse_log\"\n", - " ),\n", - " )" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The following fixed parameters are used to build the Type-2 architecture for this dataset:\n", - "\n", - "- `final_activation` is used to build the final layer for regression problem (set to `None`) or for the classification problem (`\"sigmoid\"`),\n", - "\n", - "- `loss` is used for training regression (`\"mse\"`) or classification (`\"binary_crossentropy\"`) problem, and\n", - "\n", - "- `metrics` denotes metrics used to compare with previosly published results: `\"accuracy\"` for classification and \"`mse`\" or \"`rmse`\" for regression.\n", - "\n", - "Parameters `objective` and `direction` are used by the tuner such that `objective=f\"val_{metrics}\"` and direction is either `\"min` or `\"max\"`.\n", - "\n", - "Parameters `max_trials` denotes the number of trial performed buy the tuner, `patience` is the number of epochs allowed to perform worst than the best one before stopping the current trial. The parameter `execution_per_trial` denotes the number of runs before calculating the results of a trial, it should be set to value greater than 1 for small datasets that have high variance in results." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "final_activation = \"sigmoid\"\n", - "loss = \"binary_crossentropy\"\n", - "metrics = \"accuracy\"\n", - "objective = \"val_accuracy\"\n", - "direction = \"max\"\n", - "max_trials = 50\n", - "executions_per_trial = 1\n", - "patience = 5" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Trial 51 Complete [00h 00m 35s]\n", - "val_accuracy: 0.6890688538551331\n", - "\n", - "Best val_accuracy So Far: 0.6995951533317566\n", - "Total elapsed time: 00h 00m 35s\n", - "INFO:tensorflow:Oracle triggered exit\n" - ] - } - ], - "source": [ - "# | include: false\n", - "# | notest\n", - "\n", - "tuner = find_hyperparameters(\n", - " \"compas\",\n", - " monotonicity_indicator=monotonicity_indicator,\n", - " hp_params_f=hp_params_f,\n", - " final_activation=final_activation,\n", - " loss=loss,\n", - " metrics=metrics,\n", - " objective=objective,\n", - " direction=direction,\n", - " max_trials=max_trials,\n", - " patience=patience,\n", - " executions_per_trial=executions_per_trial,\n", - " batch_size=batch_size,\n", - " max_epochs=max_epochs,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_accuracy_meanval_accuracy_stdval_accuracy_minval_accuracy_maxparams
0262elu0.0863010.1472970.1620630.9272820.6929550.002710.6890690.6955472237
\n", - "
" - ], - "text/plain": [ - " units n_layers activation learning_rate weight_decay dropout \n", - "0 26 2 elu 0.086301 0.147297 0.162063 \\\n", - "\n", - " decay_rate val_accuracy_mean val_accuracy_std val_accuracy_min \n", - "0 0.927282 0.692955 0.00271 0.689069 \\\n", - "\n", - " val_accuracy_max params \n", - "0 0.695547 2237 " - ] - }, - "metadata": {}, - "output_type": "display_data" + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | default_exp _experiments.compas" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# COMPAS" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Running in Google Colab\n", + "\n", + "You can run this experiment in Google Colab by clicking the button below:\n", + "\n", + "\n", + " \"Open\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | hide\n", + "\n", + "from IPython.display import Markdown, display_markdown\n", + "\n", + "try:\n", + " import google.colab\n", + "\n", + " in_colab = True\n", + "except:\n", + " in_colab = False\n", + "\n", + "if in_colab:\n", + " display(\n", + " Markdown(\n", + " \"\"\"\n", + "### If you see this message, you are running in Google Colab\n", + "Along with this interactive tutorial the content of this notebook is organized and formatted for documentation purpuoses. \n", + "\n", + "You can ignore the '# | hide', '# | notest' and '# | echo: false' comments, they are not important for the tutorial.\n", + " \"\"\"\n", + " )\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Dataset" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "COMPAS [1] is a dataset containing the criminal records of 6,172 individuals\n", + "arrested in Florida. The task is to predict whether the individual will commit a crime again\n", + "in 2 years. The probability predicted by the system will be used as a risk score. As mentioned in [2] 13 attributes for prediction. The risk score should be monotonically increasing w.r.t. four attributes, number of prior adult convictions, number of juvenile felony, number of juvenile misdemeanor, and number of other convictions. The `monotonicity_indicator` corresponding to these features are set to 1.\n", + "\n", + "References: \n", + "\n", + "1. S. Mattu J. Angwin, J. Larson and L. Kirchner. Machine bias: There’s software used across the country to predict future criminals. and it’s biased against blacks. ProPublica, 2016.\n", + "\n", + "2. Xingchao Liu, Xing Han, Na Zhang, and Qiang Liu. Certified monotonic neural networks. Advances in Neural Information Processing Systems, 33:15427–15438, 2020\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "monotonicity_indicator = {\n", + " \"priors_count\": 1,\n", + " \"juv_fel_count\": 1,\n", + " \"juv_misd_count\": 1,\n", + " \"juv_other_count\": 1,\n", + " \"age\": 0,\n", + " \"race_0\": 0,\n", + " \"race_1\": 0,\n", + " \"race_2\": 0,\n", + " \"race_3\": 0,\n", + " \"race_4\": 0,\n", + " \"race_5\": 0,\n", + " \"sex_0\": 0,\n", + " \"sex_1\": 0,\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | hide\n", + "\n", + "from IPython.display import Markdown, display_markdown\n", + "\n", + "try:\n", + " import google.colab\n", + "\n", + " in_colab = True\n", + "except:\n", + " in_colab = False\n", + "\n", + "if in_colab:\n", + " display(\n", + " Markdown(\n", + " \"\"\"\n", + "### If you see this message, you are running in Google Colab\n", + "Along with this interactive tutorial the content of this notebook is organized and formatted for documentation purpuoses. \n", + "\n", + "You can ignore the '# | hide', '# | notest' and '# | echo: false' comments, they are not important for the tutorial.\n", + " \"\"\"\n", + " )\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | hide\n", + "\n", + "if in_colab:\n", + " !pip install monotonic-nn" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | hide\n", + "\n", + "if in_colab:\n", + " !pip install \"monotonic-nn[experiments]\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | include: false\n", + "\n", + "from airt.keras.experiments import (\n", + " create_tuner_stats,\n", + " find_hyperparameters,\n", + " get_train_n_test_data,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | include: false\n", + "import shutil\n", + "from os import environ\n", + "\n", + "import tensorflow as tf" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3 Physical GPUs, 1 Logical GPU\n" + ] + } + ], + "source": [ + "# | include: false\n", + "\n", + "environ[\"TF_FORCE_GPU_ALLOW_GROWTH\"] = \"true\"\n", + "\n", + "gpus = tf.config.list_physical_devices(\"GPU\")\n", + "if gpus:\n", + " # Restrict TensorFlow to only use the first GPU\n", + " try:\n", + " tf.config.set_visible_devices(gpus[1], \"GPU\")\n", + " logical_gpus = tf.config.list_logical_devices(\"GPU\")\n", + " print(len(gpus), \"Physical GPUs,\", len(logical_gpus), \"Logical GPU\")\n", + " except RuntimeError as e:\n", + " # Visible devices must be set before GPUs have been initialized\n", + " print(e)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "These are a few examples of the dataset:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 01234
priors_count0.3684210.0000000.0263160.3947370.052632
juv_fel_count0.0000000.0000000.0000000.0000000.000000
juv_misd_count0.0000000.0000000.0000000.0000000.000000
juv_other_count0.0000000.0000000.0000000.0000000.000000
age0.2307690.0512820.1794870.2307690.102564
race_01.0000001.0000000.0000001.0000001.000000
race_10.0000000.0000001.0000000.0000000.000000
race_20.0000000.0000000.0000000.0000000.000000
race_30.0000000.0000000.0000000.0000000.000000
race_40.0000000.0000000.0000000.0000000.000000
race_50.0000000.0000000.0000000.0000000.000000
sex_01.0000001.0000001.0000001.0000001.000000
sex_10.0000000.0000000.0000000.0000000.000000
ground_truth1.0000000.0000000.0000000.0000001.000000
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# | echo: false\n", + "\n", + "train_df, test_df = get_train_n_test_data(dataset_name=\"compas\")\n", + "display(train_df.head().T.style)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Hyperparameter search" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The choice of the batch size and the maximum number of epochs depends on the dataset size. For this dataset, we use the following values:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "batch_size = 8\n", + "max_epochs = 50" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We use the Type-2 architecture built using `MonoDense` layer with the following set of hyperparameters ranges:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def hp_params_f(hp):\n", + " return dict(\n", + " units=hp.Int(\"units\", min_value=16, max_value=32, step=1),\n", + " n_layers=hp.Int(\"n_layers\", min_value=2, max_value=2),\n", + " activation=hp.Choice(\"activation\", values=[\"elu\"]),\n", + " learning_rate=hp.Float(\n", + " \"learning_rate\", min_value=1e-4, max_value=1e-2, sampling=\"log\"\n", + " ),\n", + " weight_decay=hp.Float(\n", + " \"weight_decay\", min_value=3e-2, max_value=0.3, sampling=\"log\"\n", + " ),\n", + " dropout=hp.Float(\"dropout\", min_value=0.0, max_value=0.5, sampling=\"linear\"),\n", + " decay_rate=hp.Float(\n", + " \"decay_rate\", min_value=0.8, max_value=1.0, sampling=\"reverse_log\"\n", + " ),\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The following fixed parameters are used to build the Type-2 architecture for this dataset:\n", + "\n", + "- `final_activation` is used to build the final layer for regression problem (set to `None`) or for the classification problem (`\"sigmoid\"`),\n", + "\n", + "- `loss` is used for training regression (`\"mse\"`) or classification (`\"binary_crossentropy\"`) problem, and\n", + "\n", + "- `metrics` denotes metrics used to compare with previously published results: `\"accuracy\"` for classification and \"`mse`\" or \"`rmse`\" for regression.\n", + "\n", + "Parameters `objective` and `direction` are used by the tuner such that `objective=f\"val_{metrics}\"` and direction is either `\"min` or `\"max\"`.\n", + "\n", + "Parameters `max_trials` denotes the number of trial performed buy the tuner, `patience` is the number of epochs allowed to perform worst than the best one before stopping the current trial. The parameter `execution_per_trial` denotes the number of runs before calculating the results of a trial, it should be set to value greater than 1 for small datasets that have high variance in results." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "final_activation = \"sigmoid\"\n", + "loss = \"binary_crossentropy\"\n", + "metrics = \"accuracy\"\n", + "objective = \"val_accuracy\"\n", + "direction = \"max\"\n", + "max_trials = 50\n", + "executions_per_trial = 1\n", + "patience = 5" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Trial 51 Complete [00h 00m 35s]\n", + "val_accuracy: 0.6890688538551331\n", + "\n", + "Best val_accuracy So Far: 0.6995951533317566\n", + "Total elapsed time: 00h 00m 35s\n", + "INFO:tensorflow:Oracle triggered exit\n" + ] + } + ], + "source": [ + "# | include: false\n", + "# | notest\n", + "\n", + "tuner = find_hyperparameters(\n", + " \"compas\",\n", + " monotonicity_indicator=monotonicity_indicator,\n", + " hp_params_f=hp_params_f,\n", + " final_activation=final_activation,\n", + " loss=loss,\n", + " metrics=metrics,\n", + " objective=objective,\n", + " direction=direction,\n", + " max_trials=max_trials,\n", + " patience=patience,\n", + " executions_per_trial=executions_per_trial,\n", + " batch_size=batch_size,\n", + " max_epochs=max_epochs,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_accuracy_meanval_accuracy_stdval_accuracy_minval_accuracy_maxparams
0262elu0.0863010.1472970.1620630.9272820.6929550.002710.6890690.6955472237
\n", + "
" + ], + "text/plain": [ + " units n_layers activation learning_rate weight_decay dropout \n", + "0 26 2 elu 0.086301 0.147297 0.162063 \\\n", + "\n", + " decay_rate val_accuracy_mean val_accuracy_std val_accuracy_min \n", + "0 0.927282 0.692955 0.00271 0.689069 \\\n", + "\n", + " val_accuracy_max params \n", + "0 0.695547 2237 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_accuracy_meanval_accuracy_stdval_accuracy_minval_accuracy_maxparams
1221elu0.0934730.1495780.1124100.8521790.6893930.0022610.6874490.693117196
0262elu0.0863010.1472970.1620630.9272820.6929550.0027100.6890690.6955472237
\n", + "
" + ], + "text/plain": [ + " units n_layers activation learning_rate weight_decay dropout \n", + "1 22 1 elu 0.093473 0.149578 0.112410 \\\n", + "0 26 2 elu 0.086301 0.147297 0.162063 \n", + "\n", + " decay_rate val_accuracy_mean val_accuracy_std val_accuracy_min \n", + "1 0.852179 0.689393 0.002261 0.687449 \\\n", + "0 0.927282 0.692955 0.002710 0.689069 \n", + "\n", + " val_accuracy_max params \n", + "1 0.693117 196 \n", + "0 0.695547 2237 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_accuracy_meanval_accuracy_stdval_accuracy_minval_accuracy_maxparams
1221elu0.0934730.1495780.1124100.8521790.6893930.0022610.6874490.693117196
0262elu0.0863010.1472970.1620630.9272820.6929550.0027100.6890690.6955472237
2272elu0.0846850.1375180.1759170.8993990.6944130.0034640.6898790.6987852317
\n", + "
" + ], + "text/plain": [ + " units n_layers activation learning_rate weight_decay dropout \n", + "1 22 1 elu 0.093473 0.149578 0.112410 \\\n", + "0 26 2 elu 0.086301 0.147297 0.162063 \n", + "2 27 2 elu 0.084685 0.137518 0.175917 \n", + "\n", + " decay_rate val_accuracy_mean val_accuracy_std val_accuracy_min \n", + "1 0.852179 0.689393 0.002261 0.687449 \\\n", + "0 0.927282 0.692955 0.002710 0.689069 \n", + "2 0.899399 0.694413 0.003464 0.689879 \n", + "\n", + " val_accuracy_max params \n", + "1 0.693117 196 \n", + "0 0.695547 2237 \n", + "2 0.698785 2317 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_accuracy_meanval_accuracy_stdval_accuracy_minval_accuracy_maxparams
1221elu0.0934730.1495780.1124100.8521790.6893930.0022610.6874490.693117196
3313elu0.0183390.1059210.4803900.9641350.6923080.0022170.6890690.6947374058
0262elu0.0863010.1472970.1620630.9272820.6929550.0027100.6890690.6955472237
2272elu0.0846850.1375180.1759170.8993990.6944130.0034640.6898790.6987852317
\n", + "
" + ], + "text/plain": [ + " units n_layers activation learning_rate weight_decay dropout \n", + "1 22 1 elu 0.093473 0.149578 0.112410 \\\n", + "3 31 3 elu 0.018339 0.105921 0.480390 \n", + "0 26 2 elu 0.086301 0.147297 0.162063 \n", + "2 27 2 elu 0.084685 0.137518 0.175917 \n", + "\n", + " decay_rate val_accuracy_mean val_accuracy_std val_accuracy_min \n", + "1 0.852179 0.689393 0.002261 0.687449 \\\n", + "3 0.964135 0.692308 0.002217 0.689069 \n", + "0 0.927282 0.692955 0.002710 0.689069 \n", + "2 0.899399 0.694413 0.003464 0.689879 \n", + "\n", + " val_accuracy_max params \n", + "1 0.693117 196 \n", + "3 0.694737 4058 \n", + "0 0.695547 2237 \n", + "2 0.698785 2317 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_accuracy_meanval_accuracy_stdval_accuracy_minval_accuracy_maxparams
1221elu0.0934730.1495780.1124100.8521790.6893930.0022610.6874490.693117196
3313elu0.0183390.1059210.4803900.9641350.6923080.0022170.6890690.6947374058
0262elu0.0863010.1472970.1620630.9272820.6929550.0027100.6890690.6955472237
4283elu0.1052270.1207020.1602700.8722220.6936030.0009230.6923080.6947373599
2272elu0.0846850.1375180.1759170.8993990.6944130.0034640.6898790.6987852317
\n", + "
" + ], + "text/plain": [ + " units n_layers activation learning_rate weight_decay dropout \n", + "1 22 1 elu 0.093473 0.149578 0.112410 \\\n", + "3 31 3 elu 0.018339 0.105921 0.480390 \n", + "0 26 2 elu 0.086301 0.147297 0.162063 \n", + "4 28 3 elu 0.105227 0.120702 0.160270 \n", + "2 27 2 elu 0.084685 0.137518 0.175917 \n", + "\n", + " decay_rate val_accuracy_mean val_accuracy_std val_accuracy_min \n", + "1 0.852179 0.689393 0.002261 0.687449 \\\n", + "3 0.964135 0.692308 0.002217 0.689069 \n", + "0 0.927282 0.692955 0.002710 0.689069 \n", + "4 0.872222 0.693603 0.000923 0.692308 \n", + "2 0.899399 0.694413 0.003464 0.689879 \n", + "\n", + " val_accuracy_max params \n", + "1 0.693117 196 \n", + "3 0.694737 4058 \n", + "0 0.695547 2237 \n", + "4 0.694737 3599 \n", + "2 0.698785 2317 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_accuracy_meanval_accuracy_stdval_accuracy_minval_accuracy_maxparams
1221elu0.0934730.1495780.1124100.8521790.6893930.0022610.6874490.693117196
5252elu0.0690110.1535250.1807720.8745050.6921460.0026490.6898790.6963562157
3313elu0.0183390.1059210.4803900.9641350.6923080.0022170.6890690.6947374058
0262elu0.0863010.1472970.1620630.9272820.6929550.0027100.6890690.6955472237
4283elu0.1052270.1207020.1602700.8722220.6936030.0009230.6923080.6947373599
2272elu0.0846850.1375180.1759170.8993990.6944130.0034640.6898790.6987852317
\n", + "
" + ], + "text/plain": [ + " units n_layers activation learning_rate weight_decay dropout \n", + "1 22 1 elu 0.093473 0.149578 0.112410 \\\n", + "5 25 2 elu 0.069011 0.153525 0.180772 \n", + "3 31 3 elu 0.018339 0.105921 0.480390 \n", + "0 26 2 elu 0.086301 0.147297 0.162063 \n", + "4 28 3 elu 0.105227 0.120702 0.160270 \n", + "2 27 2 elu 0.084685 0.137518 0.175917 \n", + "\n", + " decay_rate val_accuracy_mean val_accuracy_std val_accuracy_min \n", + "1 0.852179 0.689393 0.002261 0.687449 \\\n", + "5 0.874505 0.692146 0.002649 0.689879 \n", + "3 0.964135 0.692308 0.002217 0.689069 \n", + "0 0.927282 0.692955 0.002710 0.689069 \n", + "4 0.872222 0.693603 0.000923 0.692308 \n", + "2 0.899399 0.694413 0.003464 0.689879 \n", + "\n", + " val_accuracy_max params \n", + "1 0.693117 196 \n", + "5 0.696356 2157 \n", + "3 0.694737 4058 \n", + "0 0.695547 2237 \n", + "4 0.694737 3599 \n", + "2 0.698785 2317 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_accuracy_meanval_accuracy_stdval_accuracy_minval_accuracy_maxparams
1221elu0.0934730.1495780.1124100.8521790.6893930.0022610.6874490.693117196
6232elu0.0898310.1409270.1065790.8245550.6906880.0019830.6890690.6939271672
5252elu0.0690110.1535250.1807720.8745050.6921460.0026490.6898790.6963562157
3313elu0.0183390.1059210.4803900.9641350.6923080.0022170.6890690.6947374058
0262elu0.0863010.1472970.1620630.9272820.6929550.0027100.6890690.6955472237
4283elu0.1052270.1207020.1602700.8722220.6936030.0009230.6923080.6947373599
2272elu0.0846850.1375180.1759170.8993990.6944130.0034640.6898790.6987852317
\n", + "
" + ], + "text/plain": [ + " units n_layers activation learning_rate weight_decay dropout \n", + "1 22 1 elu 0.093473 0.149578 0.112410 \\\n", + "6 23 2 elu 0.089831 0.140927 0.106579 \n", + "5 25 2 elu 0.069011 0.153525 0.180772 \n", + "3 31 3 elu 0.018339 0.105921 0.480390 \n", + "0 26 2 elu 0.086301 0.147297 0.162063 \n", + "4 28 3 elu 0.105227 0.120702 0.160270 \n", + "2 27 2 elu 0.084685 0.137518 0.175917 \n", + "\n", + " decay_rate val_accuracy_mean val_accuracy_std val_accuracy_min \n", + "1 0.852179 0.689393 0.002261 0.687449 \\\n", + "6 0.824555 0.690688 0.001983 0.689069 \n", + "5 0.874505 0.692146 0.002649 0.689879 \n", + "3 0.964135 0.692308 0.002217 0.689069 \n", + "0 0.927282 0.692955 0.002710 0.689069 \n", + "4 0.872222 0.693603 0.000923 0.692308 \n", + "2 0.899399 0.694413 0.003464 0.689879 \n", + "\n", + " val_accuracy_max params \n", + "1 0.693117 196 \n", + "6 0.693927 1672 \n", + "5 0.696356 2157 \n", + "3 0.694737 4058 \n", + "0 0.695547 2237 \n", + "4 0.694737 3599 \n", + "2 0.698785 2317 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_accuracy_meanval_accuracy_stdval_accuracy_minval_accuracy_maxparams
1221elu0.0934730.1495780.1124100.8521790.6893930.0022610.6874490.693117196
7191elu0.1698100.1456530.1756190.9215210.6893930.0010860.6882590.690688157
6232elu0.0898310.1409270.1065790.8245550.6906880.0019830.6890690.6939271672
5252elu0.0690110.1535250.1807720.8745050.6921460.0026490.6898790.6963562157
3313elu0.0183390.1059210.4803900.9641350.6923080.0022170.6890690.6947374058
0262elu0.0863010.1472970.1620630.9272820.6929550.0027100.6890690.6955472237
4283elu0.1052270.1207020.1602700.8722220.6936030.0009230.6923080.6947373599
2272elu0.0846850.1375180.1759170.8993990.6944130.0034640.6898790.6987852317
\n", + "
" + ], + "text/plain": [ + " units n_layers activation learning_rate weight_decay dropout \n", + "1 22 1 elu 0.093473 0.149578 0.112410 \\\n", + "7 19 1 elu 0.169810 0.145653 0.175619 \n", + "6 23 2 elu 0.089831 0.140927 0.106579 \n", + "5 25 2 elu 0.069011 0.153525 0.180772 \n", + "3 31 3 elu 0.018339 0.105921 0.480390 \n", + "0 26 2 elu 0.086301 0.147297 0.162063 \n", + "4 28 3 elu 0.105227 0.120702 0.160270 \n", + "2 27 2 elu 0.084685 0.137518 0.175917 \n", + "\n", + " decay_rate val_accuracy_mean val_accuracy_std val_accuracy_min \n", + "1 0.852179 0.689393 0.002261 0.687449 \\\n", + "7 0.921521 0.689393 0.001086 0.688259 \n", + "6 0.824555 0.690688 0.001983 0.689069 \n", + "5 0.874505 0.692146 0.002649 0.689879 \n", + "3 0.964135 0.692308 0.002217 0.689069 \n", + "0 0.927282 0.692955 0.002710 0.689069 \n", + "4 0.872222 0.693603 0.000923 0.692308 \n", + "2 0.899399 0.694413 0.003464 0.689879 \n", + "\n", + " val_accuracy_max params \n", + "1 0.693117 196 \n", + "7 0.690688 157 \n", + "6 0.693927 1672 \n", + "5 0.696356 2157 \n", + "3 0.694737 4058 \n", + "0 0.695547 2237 \n", + "4 0.694737 3599 \n", + "2 0.698785 2317 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_accuracy_meanval_accuracy_stdval_accuracy_minval_accuracy_maxparams
1221elu0.0934730.1495780.1124100.8521790.6893930.0022610.6874490.693117196
7191elu0.1698100.1456530.1756190.9215210.6893930.0010860.6882590.690688157
6232elu0.0898310.1409270.1065790.8245550.6906880.0019830.6890690.6939271672
8262elu0.0787700.1511230.0802890.8661290.6910120.0016790.6898790.6939272237
5252elu0.0690110.1535250.1807720.8745050.6921460.0026490.6898790.6963562157
3313elu0.0183390.1059210.4803900.9641350.6923080.0022170.6890690.6947374058
0262elu0.0863010.1472970.1620630.9272820.6929550.0027100.6890690.6955472237
4283elu0.1052270.1207020.1602700.8722220.6936030.0009230.6923080.6947373599
2272elu0.0846850.1375180.1759170.8993990.6944130.0034640.6898790.6987852317
\n", + "
" + ], + "text/plain": [ + " units n_layers activation learning_rate weight_decay dropout \n", + "1 22 1 elu 0.093473 0.149578 0.112410 \\\n", + "7 19 1 elu 0.169810 0.145653 0.175619 \n", + "6 23 2 elu 0.089831 0.140927 0.106579 \n", + "8 26 2 elu 0.078770 0.151123 0.080289 \n", + "5 25 2 elu 0.069011 0.153525 0.180772 \n", + "3 31 3 elu 0.018339 0.105921 0.480390 \n", + "0 26 2 elu 0.086301 0.147297 0.162063 \n", + "4 28 3 elu 0.105227 0.120702 0.160270 \n", + "2 27 2 elu 0.084685 0.137518 0.175917 \n", + "\n", + " decay_rate val_accuracy_mean val_accuracy_std val_accuracy_min \n", + "1 0.852179 0.689393 0.002261 0.687449 \\\n", + "7 0.921521 0.689393 0.001086 0.688259 \n", + "6 0.824555 0.690688 0.001983 0.689069 \n", + "8 0.866129 0.691012 0.001679 0.689879 \n", + "5 0.874505 0.692146 0.002649 0.689879 \n", + "3 0.964135 0.692308 0.002217 0.689069 \n", + "0 0.927282 0.692955 0.002710 0.689069 \n", + "4 0.872222 0.693603 0.000923 0.692308 \n", + "2 0.899399 0.694413 0.003464 0.689879 \n", + "\n", + " val_accuracy_max params \n", + "1 0.693117 196 \n", + "7 0.690688 157 \n", + "6 0.693927 1672 \n", + "8 0.693927 2237 \n", + "5 0.696356 2157 \n", + "3 0.694737 4058 \n", + "0 0.695547 2237 \n", + "4 0.694737 3599 \n", + "2 0.698785 2317 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_accuracy_meanval_accuracy_stdval_accuracy_minval_accuracy_maxparams
1221elu0.0934730.1495780.1124100.8521790.6893930.0022610.6874490.693117196
7191elu0.1698100.1456530.1756190.9215210.6893930.0010860.6882590.690688157
6232elu0.0898310.1409270.1065790.8245550.6906880.0019830.6890690.6939271672
8262elu0.0787700.1511230.0802890.8661290.6910120.0016790.6898790.6939272237
9274elu0.0047050.1743390.0723600.7910070.6911740.0007240.6906880.6923083829
5252elu0.0690110.1535250.1807720.8745050.6921460.0026490.6898790.6963562157
3313elu0.0183390.1059210.4803900.9641350.6923080.0022170.6890690.6947374058
0262elu0.0863010.1472970.1620630.9272820.6929550.0027100.6890690.6955472237
4283elu0.1052270.1207020.1602700.8722220.6936030.0009230.6923080.6947373599
2272elu0.0846850.1375180.1759170.8993990.6944130.0034640.6898790.6987852317
\n", + "
" + ], + "text/plain": [ + " units n_layers activation learning_rate weight_decay dropout \n", + "1 22 1 elu 0.093473 0.149578 0.112410 \\\n", + "7 19 1 elu 0.169810 0.145653 0.175619 \n", + "6 23 2 elu 0.089831 0.140927 0.106579 \n", + "8 26 2 elu 0.078770 0.151123 0.080289 \n", + "9 27 4 elu 0.004705 0.174339 0.072360 \n", + "5 25 2 elu 0.069011 0.153525 0.180772 \n", + "3 31 3 elu 0.018339 0.105921 0.480390 \n", + "0 26 2 elu 0.086301 0.147297 0.162063 \n", + "4 28 3 elu 0.105227 0.120702 0.160270 \n", + "2 27 2 elu 0.084685 0.137518 0.175917 \n", + "\n", + " decay_rate val_accuracy_mean val_accuracy_std val_accuracy_min \n", + "1 0.852179 0.689393 0.002261 0.687449 \\\n", + "7 0.921521 0.689393 0.001086 0.688259 \n", + "6 0.824555 0.690688 0.001983 0.689069 \n", + "8 0.866129 0.691012 0.001679 0.689879 \n", + "9 0.791007 0.691174 0.000724 0.690688 \n", + "5 0.874505 0.692146 0.002649 0.689879 \n", + "3 0.964135 0.692308 0.002217 0.689069 \n", + "0 0.927282 0.692955 0.002710 0.689069 \n", + "4 0.872222 0.693603 0.000923 0.692308 \n", + "2 0.899399 0.694413 0.003464 0.689879 \n", + "\n", + " val_accuracy_max params \n", + "1 0.693117 196 \n", + "7 0.690688 157 \n", + "6 0.693927 1672 \n", + "8 0.693927 2237 \n", + "9 0.692308 3829 \n", + "5 0.696356 2157 \n", + "3 0.694737 4058 \n", + "0 0.695547 2237 \n", + "4 0.694737 3599 \n", + "2 0.698785 2317 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# | include: false\n", + "# | notest\n", + "\n", + "stats = create_tuner_stats(\n", + " tuner,\n", + " batch_size=batch_size,\n", + " max_epochs=max_epochs,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The following table describes the best models and their hyperparameters found by the tuner:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 01234
units2728263125
n_layers23232
activationelueluelueluelu
learning_rate0.0846850.1052270.0863010.0183390.069011
weight_decay0.1375180.1207020.1472970.1059210.153525
dropout0.1759170.1602700.1620630.4803900.180772
decay_rate0.8993990.8722220.9272820.9641350.874505
val_accuracy_mean0.6944130.6936030.6929550.6923080.692146
val_accuracy_std0.0034640.0009230.0027100.0022170.002649
val_accuracy_min0.6898790.6923080.6890690.6890690.689879
val_accuracy_max0.6987850.6947370.6955470.6947370.696356
params23173599223740582157
\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": null, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# | echo: false\n", + "# | notest\n", + "\n", + "df = stats.sort_values(by=f\"{objective}_mean\", ascending=(direction == \"min\")).head()\n", + "\n", + "df.reset_index(drop=True).T.style" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\\begin{tabular}{rrlrrrrrrrrr}\n", + "\\toprule\n", + "units & n_layers & activation & learning_rate & weight_decay & dropout & decay_rate & val_accuracy_mean & val_accuracy_std & val_accuracy_min & val_accuracy_max & params \\\\\n", + "\\midrule\n", + "27 & 2 & elu & 0.084685 & 0.137518 & 0.175917 & 0.899399 & 0.694413 & 0.003464 & 0.689879 & 0.698785 & 2317 \\\\\n", + "28 & 3 & elu & 0.105227 & 0.120702 & 0.160270 & 0.872222 & 0.693603 & 0.000923 & 0.692308 & 0.694737 & 3599 \\\\\n", + "26 & 2 & elu & 0.086301 & 0.147297 & 0.162063 & 0.927282 & 0.692955 & 0.002710 & 0.689069 & 0.695547 & 2237 \\\\\n", + "31 & 3 & elu & 0.018339 & 0.105921 & 0.480390 & 0.964135 & 0.692308 & 0.002217 & 0.689069 & 0.694737 & 4058 \\\\\n", + "25 & 2 & elu & 0.069011 & 0.153525 & 0.180772 & 0.874505 & 0.692146 & 0.002649 & 0.689879 & 0.696356 & 2157 \\\\\n", + "\\bottomrule\n", + "\\end{tabular}\n", + "\n" + ] + } + ], + "source": [ + "# | include: false\n", + "# | notest\n", + "\n", + "print(df.to_latex(index=False))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The optimal model" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "These are the best hyperparameters found by previous runs of the tuner:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def final_hp_params_f(hp):\n", + " return dict(\n", + " units=hp.Fixed(\"units\", value=27),\n", + " n_layers=hp.Fixed(\"n_layers\", 2),\n", + " activation=hp.Fixed(\"activation\", value=\"elu\"),\n", + " learning_rate=hp.Fixed(\"learning_rate\", value=0.084685),\n", + " weight_decay=hp.Fixed(\"weight_decay\", value=0.137518),\n", + " dropout=hp.Fixed(\"dropout\", value=0.175917),\n", + " decay_rate=hp.Fixed(\"decay_rate\", value=0.899399),\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Trial 1 Complete [00h 00m 11s]\n", + "val_accuracy: 0.5417004227638245\n", + "\n", + "Best val_accuracy So Far: 0.5417004227638245\n", + "Total elapsed time: 00h 00m 11s\n", + "INFO:tensorflow:Oracle triggered exit\n" + ] + } + ], + "source": [ + "# | include: false\n", + "# | notest\n", + "\n", + "\n", + "shutil.rmtree(\"tuner_final/compas\", ignore_errors=True)\n", + "\n", + "final_tuner = find_hyperparameters(\n", + " \"compas\",\n", + " monotonicity_indicator=monotonicity_indicator,\n", + " hp_params_f=final_hp_params_f,\n", + " max_trials=1,\n", + " final_activation=final_activation,\n", + " loss=loss,\n", + " metrics=metrics,\n", + " objective=objective,\n", + " direction=direction,\n", + " batch_size=batch_size,\n", + " max_epochs=1,\n", + " patience=patience,\n", + " executions_per_trial=1,\n", + " dir_root=\"tuner_final\",\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_accuracy_meanval_accuracy_stdval_accuracy_minval_accuracy_maxparams
0272elu0.0846850.1375180.1759170.8993990.691660.0010560.6906880.6931172317
\n", + "
" + ], + "text/plain": [ + " units n_layers activation learning_rate weight_decay dropout \n", + "0 27 2 elu 0.084685 0.137518 0.175917 \\\n", + "\n", + " decay_rate val_accuracy_mean val_accuracy_std val_accuracy_min \n", + "0 0.899399 0.69166 0.001056 0.690688 \\\n", + "\n", + " val_accuracy_max params \n", + "0 0.693117 2317 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# | include: false\n", + "# | notest\n", + "\n", + "final_stats = create_tuner_stats(\n", + " final_tuner,\n", + " batch_size=batch_size,\n", + " max_epochs=max_epochs,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The final evaluation of the optimal model:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 0
units27
n_layers2
activationelu
learning_rate0.084685
weight_decay0.137518
dropout0.175917
decay_rate0.899399
val_accuracy_mean0.691660
val_accuracy_std0.001056
val_accuracy_min0.690688
val_accuracy_max0.693117
params2317
\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": null, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# | echo: false\n", + "# | notest\n", + "\n", + "final_stats.T.style" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "python3", + "language": "python", + "name": "python3" + } }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_accuracy_meanval_accuracy_stdval_accuracy_minval_accuracy_maxparams
1221elu0.0934730.1495780.1124100.8521790.6893930.0022610.6874490.693117196
0262elu0.0863010.1472970.1620630.9272820.6929550.0027100.6890690.6955472237
\n", - "
" - ], - "text/plain": [ - " units n_layers activation learning_rate weight_decay dropout \n", - "1 22 1 elu 0.093473 0.149578 0.112410 \\\n", - "0 26 2 elu 0.086301 0.147297 0.162063 \n", - "\n", - " decay_rate val_accuracy_mean val_accuracy_std val_accuracy_min \n", - "1 0.852179 0.689393 0.002261 0.687449 \\\n", - "0 0.927282 0.692955 0.002710 0.689069 \n", - "\n", - " val_accuracy_max params \n", - "1 0.693117 196 \n", - "0 0.695547 2237 " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_accuracy_meanval_accuracy_stdval_accuracy_minval_accuracy_maxparams
1221elu0.0934730.1495780.1124100.8521790.6893930.0022610.6874490.693117196
0262elu0.0863010.1472970.1620630.9272820.6929550.0027100.6890690.6955472237
2272elu0.0846850.1375180.1759170.8993990.6944130.0034640.6898790.6987852317
\n", - "
" - ], - "text/plain": [ - " units n_layers activation learning_rate weight_decay dropout \n", - "1 22 1 elu 0.093473 0.149578 0.112410 \\\n", - "0 26 2 elu 0.086301 0.147297 0.162063 \n", - "2 27 2 elu 0.084685 0.137518 0.175917 \n", - "\n", - " decay_rate val_accuracy_mean val_accuracy_std val_accuracy_min \n", - "1 0.852179 0.689393 0.002261 0.687449 \\\n", - "0 0.927282 0.692955 0.002710 0.689069 \n", - "2 0.899399 0.694413 0.003464 0.689879 \n", - "\n", - " val_accuracy_max params \n", - "1 0.693117 196 \n", - "0 0.695547 2237 \n", - "2 0.698785 2317 " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_accuracy_meanval_accuracy_stdval_accuracy_minval_accuracy_maxparams
1221elu0.0934730.1495780.1124100.8521790.6893930.0022610.6874490.693117196
3313elu0.0183390.1059210.4803900.9641350.6923080.0022170.6890690.6947374058
0262elu0.0863010.1472970.1620630.9272820.6929550.0027100.6890690.6955472237
2272elu0.0846850.1375180.1759170.8993990.6944130.0034640.6898790.6987852317
\n", - "
" - ], - "text/plain": [ - " units n_layers activation learning_rate weight_decay dropout \n", - "1 22 1 elu 0.093473 0.149578 0.112410 \\\n", - "3 31 3 elu 0.018339 0.105921 0.480390 \n", - "0 26 2 elu 0.086301 0.147297 0.162063 \n", - "2 27 2 elu 0.084685 0.137518 0.175917 \n", - "\n", - " decay_rate val_accuracy_mean val_accuracy_std val_accuracy_min \n", - "1 0.852179 0.689393 0.002261 0.687449 \\\n", - "3 0.964135 0.692308 0.002217 0.689069 \n", - "0 0.927282 0.692955 0.002710 0.689069 \n", - "2 0.899399 0.694413 0.003464 0.689879 \n", - "\n", - " val_accuracy_max params \n", - "1 0.693117 196 \n", - "3 0.694737 4058 \n", - "0 0.695547 2237 \n", - "2 0.698785 2317 " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_accuracy_meanval_accuracy_stdval_accuracy_minval_accuracy_maxparams
1221elu0.0934730.1495780.1124100.8521790.6893930.0022610.6874490.693117196
3313elu0.0183390.1059210.4803900.9641350.6923080.0022170.6890690.6947374058
0262elu0.0863010.1472970.1620630.9272820.6929550.0027100.6890690.6955472237
4283elu0.1052270.1207020.1602700.8722220.6936030.0009230.6923080.6947373599
2272elu0.0846850.1375180.1759170.8993990.6944130.0034640.6898790.6987852317
\n", - "
" - ], - "text/plain": [ - " units n_layers activation learning_rate weight_decay dropout \n", - "1 22 1 elu 0.093473 0.149578 0.112410 \\\n", - "3 31 3 elu 0.018339 0.105921 0.480390 \n", - "0 26 2 elu 0.086301 0.147297 0.162063 \n", - "4 28 3 elu 0.105227 0.120702 0.160270 \n", - "2 27 2 elu 0.084685 0.137518 0.175917 \n", - "\n", - " decay_rate val_accuracy_mean val_accuracy_std val_accuracy_min \n", - "1 0.852179 0.689393 0.002261 0.687449 \\\n", - "3 0.964135 0.692308 0.002217 0.689069 \n", - "0 0.927282 0.692955 0.002710 0.689069 \n", - "4 0.872222 0.693603 0.000923 0.692308 \n", - "2 0.899399 0.694413 0.003464 0.689879 \n", - "\n", - " val_accuracy_max params \n", - "1 0.693117 196 \n", - "3 0.694737 4058 \n", - "0 0.695547 2237 \n", - "4 0.694737 3599 \n", - "2 0.698785 2317 " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_accuracy_meanval_accuracy_stdval_accuracy_minval_accuracy_maxparams
1221elu0.0934730.1495780.1124100.8521790.6893930.0022610.6874490.693117196
5252elu0.0690110.1535250.1807720.8745050.6921460.0026490.6898790.6963562157
3313elu0.0183390.1059210.4803900.9641350.6923080.0022170.6890690.6947374058
0262elu0.0863010.1472970.1620630.9272820.6929550.0027100.6890690.6955472237
4283elu0.1052270.1207020.1602700.8722220.6936030.0009230.6923080.6947373599
2272elu0.0846850.1375180.1759170.8993990.6944130.0034640.6898790.6987852317
\n", - "
" - ], - "text/plain": [ - " units n_layers activation learning_rate weight_decay dropout \n", - "1 22 1 elu 0.093473 0.149578 0.112410 \\\n", - "5 25 2 elu 0.069011 0.153525 0.180772 \n", - "3 31 3 elu 0.018339 0.105921 0.480390 \n", - "0 26 2 elu 0.086301 0.147297 0.162063 \n", - "4 28 3 elu 0.105227 0.120702 0.160270 \n", - "2 27 2 elu 0.084685 0.137518 0.175917 \n", - "\n", - " decay_rate val_accuracy_mean val_accuracy_std val_accuracy_min \n", - "1 0.852179 0.689393 0.002261 0.687449 \\\n", - "5 0.874505 0.692146 0.002649 0.689879 \n", - "3 0.964135 0.692308 0.002217 0.689069 \n", - "0 0.927282 0.692955 0.002710 0.689069 \n", - "4 0.872222 0.693603 0.000923 0.692308 \n", - "2 0.899399 0.694413 0.003464 0.689879 \n", - "\n", - " val_accuracy_max params \n", - "1 0.693117 196 \n", - "5 0.696356 2157 \n", - "3 0.694737 4058 \n", - "0 0.695547 2237 \n", - "4 0.694737 3599 \n", - "2 0.698785 2317 " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_accuracy_meanval_accuracy_stdval_accuracy_minval_accuracy_maxparams
1221elu0.0934730.1495780.1124100.8521790.6893930.0022610.6874490.693117196
6232elu0.0898310.1409270.1065790.8245550.6906880.0019830.6890690.6939271672
5252elu0.0690110.1535250.1807720.8745050.6921460.0026490.6898790.6963562157
3313elu0.0183390.1059210.4803900.9641350.6923080.0022170.6890690.6947374058
0262elu0.0863010.1472970.1620630.9272820.6929550.0027100.6890690.6955472237
4283elu0.1052270.1207020.1602700.8722220.6936030.0009230.6923080.6947373599
2272elu0.0846850.1375180.1759170.8993990.6944130.0034640.6898790.6987852317
\n", - "
" - ], - "text/plain": [ - " units n_layers activation learning_rate weight_decay dropout \n", - "1 22 1 elu 0.093473 0.149578 0.112410 \\\n", - "6 23 2 elu 0.089831 0.140927 0.106579 \n", - "5 25 2 elu 0.069011 0.153525 0.180772 \n", - "3 31 3 elu 0.018339 0.105921 0.480390 \n", - "0 26 2 elu 0.086301 0.147297 0.162063 \n", - "4 28 3 elu 0.105227 0.120702 0.160270 \n", - "2 27 2 elu 0.084685 0.137518 0.175917 \n", - "\n", - " decay_rate val_accuracy_mean val_accuracy_std val_accuracy_min \n", - "1 0.852179 0.689393 0.002261 0.687449 \\\n", - "6 0.824555 0.690688 0.001983 0.689069 \n", - "5 0.874505 0.692146 0.002649 0.689879 \n", - "3 0.964135 0.692308 0.002217 0.689069 \n", - "0 0.927282 0.692955 0.002710 0.689069 \n", - "4 0.872222 0.693603 0.000923 0.692308 \n", - "2 0.899399 0.694413 0.003464 0.689879 \n", - "\n", - " val_accuracy_max params \n", - "1 0.693117 196 \n", - "6 0.693927 1672 \n", - "5 0.696356 2157 \n", - "3 0.694737 4058 \n", - "0 0.695547 2237 \n", - "4 0.694737 3599 \n", - "2 0.698785 2317 " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_accuracy_meanval_accuracy_stdval_accuracy_minval_accuracy_maxparams
1221elu0.0934730.1495780.1124100.8521790.6893930.0022610.6874490.693117196
7191elu0.1698100.1456530.1756190.9215210.6893930.0010860.6882590.690688157
6232elu0.0898310.1409270.1065790.8245550.6906880.0019830.6890690.6939271672
5252elu0.0690110.1535250.1807720.8745050.6921460.0026490.6898790.6963562157
3313elu0.0183390.1059210.4803900.9641350.6923080.0022170.6890690.6947374058
0262elu0.0863010.1472970.1620630.9272820.6929550.0027100.6890690.6955472237
4283elu0.1052270.1207020.1602700.8722220.6936030.0009230.6923080.6947373599
2272elu0.0846850.1375180.1759170.8993990.6944130.0034640.6898790.6987852317
\n", - "
" - ], - "text/plain": [ - " units n_layers activation learning_rate weight_decay dropout \n", - "1 22 1 elu 0.093473 0.149578 0.112410 \\\n", - "7 19 1 elu 0.169810 0.145653 0.175619 \n", - "6 23 2 elu 0.089831 0.140927 0.106579 \n", - "5 25 2 elu 0.069011 0.153525 0.180772 \n", - "3 31 3 elu 0.018339 0.105921 0.480390 \n", - "0 26 2 elu 0.086301 0.147297 0.162063 \n", - "4 28 3 elu 0.105227 0.120702 0.160270 \n", - "2 27 2 elu 0.084685 0.137518 0.175917 \n", - "\n", - " decay_rate val_accuracy_mean val_accuracy_std val_accuracy_min \n", - "1 0.852179 0.689393 0.002261 0.687449 \\\n", - "7 0.921521 0.689393 0.001086 0.688259 \n", - "6 0.824555 0.690688 0.001983 0.689069 \n", - "5 0.874505 0.692146 0.002649 0.689879 \n", - "3 0.964135 0.692308 0.002217 0.689069 \n", - "0 0.927282 0.692955 0.002710 0.689069 \n", - "4 0.872222 0.693603 0.000923 0.692308 \n", - "2 0.899399 0.694413 0.003464 0.689879 \n", - "\n", - " val_accuracy_max params \n", - "1 0.693117 196 \n", - "7 0.690688 157 \n", - "6 0.693927 1672 \n", - "5 0.696356 2157 \n", - "3 0.694737 4058 \n", - "0 0.695547 2237 \n", - "4 0.694737 3599 \n", - "2 0.698785 2317 " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_accuracy_meanval_accuracy_stdval_accuracy_minval_accuracy_maxparams
1221elu0.0934730.1495780.1124100.8521790.6893930.0022610.6874490.693117196
7191elu0.1698100.1456530.1756190.9215210.6893930.0010860.6882590.690688157
6232elu0.0898310.1409270.1065790.8245550.6906880.0019830.6890690.6939271672
8262elu0.0787700.1511230.0802890.8661290.6910120.0016790.6898790.6939272237
5252elu0.0690110.1535250.1807720.8745050.6921460.0026490.6898790.6963562157
3313elu0.0183390.1059210.4803900.9641350.6923080.0022170.6890690.6947374058
0262elu0.0863010.1472970.1620630.9272820.6929550.0027100.6890690.6955472237
4283elu0.1052270.1207020.1602700.8722220.6936030.0009230.6923080.6947373599
2272elu0.0846850.1375180.1759170.8993990.6944130.0034640.6898790.6987852317
\n", - "
" - ], - "text/plain": [ - " units n_layers activation learning_rate weight_decay dropout \n", - "1 22 1 elu 0.093473 0.149578 0.112410 \\\n", - "7 19 1 elu 0.169810 0.145653 0.175619 \n", - "6 23 2 elu 0.089831 0.140927 0.106579 \n", - "8 26 2 elu 0.078770 0.151123 0.080289 \n", - "5 25 2 elu 0.069011 0.153525 0.180772 \n", - "3 31 3 elu 0.018339 0.105921 0.480390 \n", - "0 26 2 elu 0.086301 0.147297 0.162063 \n", - "4 28 3 elu 0.105227 0.120702 0.160270 \n", - "2 27 2 elu 0.084685 0.137518 0.175917 \n", - "\n", - " decay_rate val_accuracy_mean val_accuracy_std val_accuracy_min \n", - "1 0.852179 0.689393 0.002261 0.687449 \\\n", - "7 0.921521 0.689393 0.001086 0.688259 \n", - "6 0.824555 0.690688 0.001983 0.689069 \n", - "8 0.866129 0.691012 0.001679 0.689879 \n", - "5 0.874505 0.692146 0.002649 0.689879 \n", - "3 0.964135 0.692308 0.002217 0.689069 \n", - "0 0.927282 0.692955 0.002710 0.689069 \n", - "4 0.872222 0.693603 0.000923 0.692308 \n", - "2 0.899399 0.694413 0.003464 0.689879 \n", - "\n", - " val_accuracy_max params \n", - "1 0.693117 196 \n", - "7 0.690688 157 \n", - "6 0.693927 1672 \n", - "8 0.693927 2237 \n", - "5 0.696356 2157 \n", - "3 0.694737 4058 \n", - "0 0.695547 2237 \n", - "4 0.694737 3599 \n", - "2 0.698785 2317 " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_accuracy_meanval_accuracy_stdval_accuracy_minval_accuracy_maxparams
1221elu0.0934730.1495780.1124100.8521790.6893930.0022610.6874490.693117196
7191elu0.1698100.1456530.1756190.9215210.6893930.0010860.6882590.690688157
6232elu0.0898310.1409270.1065790.8245550.6906880.0019830.6890690.6939271672
8262elu0.0787700.1511230.0802890.8661290.6910120.0016790.6898790.6939272237
9274elu0.0047050.1743390.0723600.7910070.6911740.0007240.6906880.6923083829
5252elu0.0690110.1535250.1807720.8745050.6921460.0026490.6898790.6963562157
3313elu0.0183390.1059210.4803900.9641350.6923080.0022170.6890690.6947374058
0262elu0.0863010.1472970.1620630.9272820.6929550.0027100.6890690.6955472237
4283elu0.1052270.1207020.1602700.8722220.6936030.0009230.6923080.6947373599
2272elu0.0846850.1375180.1759170.8993990.6944130.0034640.6898790.6987852317
\n", - "
" - ], - "text/plain": [ - " units n_layers activation learning_rate weight_decay dropout \n", - "1 22 1 elu 0.093473 0.149578 0.112410 \\\n", - "7 19 1 elu 0.169810 0.145653 0.175619 \n", - "6 23 2 elu 0.089831 0.140927 0.106579 \n", - "8 26 2 elu 0.078770 0.151123 0.080289 \n", - "9 27 4 elu 0.004705 0.174339 0.072360 \n", - "5 25 2 elu 0.069011 0.153525 0.180772 \n", - "3 31 3 elu 0.018339 0.105921 0.480390 \n", - "0 26 2 elu 0.086301 0.147297 0.162063 \n", - "4 28 3 elu 0.105227 0.120702 0.160270 \n", - "2 27 2 elu 0.084685 0.137518 0.175917 \n", - "\n", - " decay_rate val_accuracy_mean val_accuracy_std val_accuracy_min \n", - "1 0.852179 0.689393 0.002261 0.687449 \\\n", - "7 0.921521 0.689393 0.001086 0.688259 \n", - "6 0.824555 0.690688 0.001983 0.689069 \n", - "8 0.866129 0.691012 0.001679 0.689879 \n", - "9 0.791007 0.691174 0.000724 0.690688 \n", - "5 0.874505 0.692146 0.002649 0.689879 \n", - "3 0.964135 0.692308 0.002217 0.689069 \n", - "0 0.927282 0.692955 0.002710 0.689069 \n", - "4 0.872222 0.693603 0.000923 0.692308 \n", - "2 0.899399 0.694413 0.003464 0.689879 \n", - "\n", - " val_accuracy_max params \n", - "1 0.693117 196 \n", - "7 0.690688 157 \n", - "6 0.693927 1672 \n", - "8 0.693927 2237 \n", - "9 0.692308 3829 \n", - "5 0.696356 2157 \n", - "3 0.694737 4058 \n", - "0 0.695547 2237 \n", - "4 0.694737 3599 \n", - "2 0.698785 2317 " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# | include: false\n", - "# | notest\n", - "\n", - "stats = create_tuner_stats(\n", - " tuner,\n", - " batch_size=batch_size,\n", - " max_epochs=max_epochs,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The following table describes the best models and their hyperparameters found by the tuner:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 01234
units2728263125
n_layers23232
activationelueluelueluelu
learning_rate0.0846850.1052270.0863010.0183390.069011
weight_decay0.1375180.1207020.1472970.1059210.153525
dropout0.1759170.1602700.1620630.4803900.180772
decay_rate0.8993990.8722220.9272820.9641350.874505
val_accuracy_mean0.6944130.6936030.6929550.6923080.692146
val_accuracy_std0.0034640.0009230.0027100.0022170.002649
val_accuracy_min0.6898790.6923080.6890690.6890690.689879
val_accuracy_max0.6987850.6947370.6955470.6947370.696356
params23173599223740582157
\n" - ], - "text/plain": [ - "" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# | echo: false\n", - "# | notest\n", - "\n", - "df = stats.sort_values(by=f\"{objective}_mean\", ascending=(direction == \"min\")).head()\n", - "\n", - "df.reset_index(drop=True).T.style" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\\begin{tabular}{rrlrrrrrrrrr}\n", - "\\toprule\n", - "units & n_layers & activation & learning_rate & weight_decay & dropout & decay_rate & val_accuracy_mean & val_accuracy_std & val_accuracy_min & val_accuracy_max & params \\\\\n", - "\\midrule\n", - "27 & 2 & elu & 0.084685 & 0.137518 & 0.175917 & 0.899399 & 0.694413 & 0.003464 & 0.689879 & 0.698785 & 2317 \\\\\n", - "28 & 3 & elu & 0.105227 & 0.120702 & 0.160270 & 0.872222 & 0.693603 & 0.000923 & 0.692308 & 0.694737 & 3599 \\\\\n", - "26 & 2 & elu & 0.086301 & 0.147297 & 0.162063 & 0.927282 & 0.692955 & 0.002710 & 0.689069 & 0.695547 & 2237 \\\\\n", - "31 & 3 & elu & 0.018339 & 0.105921 & 0.480390 & 0.964135 & 0.692308 & 0.002217 & 0.689069 & 0.694737 & 4058 \\\\\n", - "25 & 2 & elu & 0.069011 & 0.153525 & 0.180772 & 0.874505 & 0.692146 & 0.002649 & 0.689879 & 0.696356 & 2157 \\\\\n", - "\\bottomrule\n", - "\\end{tabular}\n", - "\n" - ] - } - ], - "source": [ - "# | include: false\n", - "# | notest\n", - "\n", - "print(df.to_latex(index=False))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## The optimal model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "These are the best hyperparameters found by previous runs of the tuner:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def final_hp_params_f(hp):\n", - " return dict(\n", - " units=hp.Fixed(\"units\", value=27),\n", - " n_layers=hp.Fixed(\"n_layers\", 2),\n", - " activation=hp.Fixed(\"activation\", value=\"elu\"),\n", - " learning_rate=hp.Fixed(\"learning_rate\", value=0.084685),\n", - " weight_decay=hp.Fixed(\"weight_decay\", value=0.137518),\n", - " dropout=hp.Fixed(\"dropout\", value=0.175917),\n", - " decay_rate=hp.Fixed(\"decay_rate\", value=0.899399),\n", - " )" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Trial 1 Complete [00h 00m 11s]\n", - "val_accuracy: 0.5417004227638245\n", - "\n", - "Best val_accuracy So Far: 0.5417004227638245\n", - "Total elapsed time: 00h 00m 11s\n", - "INFO:tensorflow:Oracle triggered exit\n" - ] - } - ], - "source": [ - "# | include: false\n", - "# | notest\n", - "\n", - "\n", - "shutil.rmtree(\"tuner_final/compas\", ignore_errors=True)\n", - "\n", - "final_tuner = find_hyperparameters(\n", - " \"compas\",\n", - " monotonicity_indicator=monotonicity_indicator,\n", - " hp_params_f=final_hp_params_f,\n", - " max_trials=1,\n", - " final_activation=final_activation,\n", - " loss=loss,\n", - " metrics=metrics,\n", - " objective=objective,\n", - " direction=direction,\n", - " batch_size=batch_size,\n", - " max_epochs=1,\n", - " patience=patience,\n", - " executions_per_trial=1,\n", - " dir_root=\"tuner_final\",\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_accuracy_meanval_accuracy_stdval_accuracy_minval_accuracy_maxparams
0272elu0.0846850.1375180.1759170.8993990.691660.0010560.6906880.6931172317
\n", - "
" - ], - "text/plain": [ - " units n_layers activation learning_rate weight_decay dropout \n", - "0 27 2 elu 0.084685 0.137518 0.175917 \\\n", - "\n", - " decay_rate val_accuracy_mean val_accuracy_std val_accuracy_min \n", - "0 0.899399 0.69166 0.001056 0.690688 \\\n", - "\n", - " val_accuracy_max params \n", - "0 0.693117 2317 " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# | include: false\n", - "# | notest\n", - "\n", - "final_stats = create_tuner_stats(\n", - " final_tuner,\n", - " batch_size=batch_size,\n", - " max_epochs=max_epochs,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The final evaluation of the optimal model:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 0
units27
n_layers2
activationelu
learning_rate0.084685
weight_decay0.137518
dropout0.175917
decay_rate0.899399
val_accuracy_mean0.691660
val_accuracy_std0.001056
val_accuracy_min0.690688
val_accuracy_max0.693117
params2317
\n" - ], - "text/plain": [ - "" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# | echo: false\n", - "# | notest\n", - "\n", - "final_stats.T.style" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "python3", - "language": "python", - "name": "python3" - } - }, - "nbformat": 4, - "nbformat_minor": 1 + "nbformat": 4, + "nbformat_minor": 1 } diff --git a/nbs/experiments/Heart.ipynb b/nbs/experiments/Heart.ipynb index aa2c7ff..89ab16f 100644 --- a/nbs/experiments/Heart.ipynb +++ b/nbs/experiments/Heart.ipynb @@ -1,2453 +1,2453 @@ { - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | default_exp _experiments.heart" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Heart disease" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Running in Google Colab\n", - "\n", - "You can run this experiment in Google Colab by clicking the button below:\n", - "\n", - "\n", - " \"Open\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | hide\n", - "\n", - "from IPython.display import Markdown, display_markdown\n", - "\n", - "try:\n", - " import google.colab\n", - "\n", - " in_colab = True\n", - "except:\n", - " in_colab = False\n", - "\n", - "if in_colab:\n", - " display(\n", - " Markdown(\n", - " \"\"\"\n", - "### If you see this message, you are running in Google Colab\n", - "Along with this interactive tutorial the content of this notebook is organized and formatted for documentation purpuoses. \n", - "\n", - "You can ignore the '# | hide', '# | notest' and '# | echo: false' comments, they are not important for the tutorial.\n", - " \"\"\"\n", - " )\n", - " )" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Dataset" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Heart Disease [1] is a classification dataset used for predicting the presence of heart disease with 13 features:\n", - "\n", - "- age\n", - "\n", - "- sex\n", - "\n", - "- cp\n", - "\n", - "- trestbps\n", - "\n", - "- chol\n", - "\n", - "- fbs\n", - "\n", - "- restecg\n", - "\n", - "- thalach\n", - "\n", - "- exang\n", - "\n", - "- oldpeak\n", - "\n", - "- slope\n", - "\n", - "- ca\n", - "\n", - "- thal\n", - "\n", - "The dependant variable is monotonically increasing with respect to features `trestbps` and cholestrol (`chol`). The `monotonicity_indicator` corrsponding to these features are set to 1. \n", - "\n", - "\n", - "References:\n", - "\n", - "\n", - "1. John H. Gennari, Pat Langley, and Douglas H. Fisher. Models of incremental concept formation. Artif. Intell., 40(1-3):11–61, 1989.\n", - "\n", - " https://archive.ics.uci.edu/ml/datasets/heart+disease\n", - "\n", - "2. Aishwarya Sivaraman, Golnoosh Farnadi, Todd Millstein, and Guy Van den Broeck. Counterexample-guided learning of monotonic neural networks. Advances in Neural Information Processing Systems, 33:11936–11948, 2020\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "monotonicity_indicator = {\n", - " \"age\": 0,\n", - " \"sex\": 0,\n", - " \"cp\": 0,\n", - " \"trestbps\": 1,\n", - " \"chol\": 1,\n", - " \"fbs\": 0,\n", - " \"restecg\": 0,\n", - " \"thalach\": 0,\n", - " \"exang\": 0,\n", - " \"oldpeak\": 0,\n", - " \"slope\": 0,\n", - " \"ca\": 0,\n", - " \"thal\": 0,\n", - "}" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | hide\n", - "\n", - "if in_colab:\n", - " !pip install \"monotonic-nn[experiments]\"" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | include: false\n", - "\n", - "from airt.keras.experiments import (\n", - " create_tuner_stats,\n", - " find_hyperparameters,\n", - " get_train_n_test_data,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | include: false\n", - "import shutil\n", - "from os import environ\n", - "\n", - "import tensorflow as tf" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "3 Physical GPUs, 1 Logical GPU\n" - ] - } - ], - "source": [ - "# | include: false\n", - "\n", - "environ[\"TF_FORCE_GPU_ALLOW_GROWTH\"] = \"true\"\n", - "\n", - "gpus = tf.config.list_physical_devices(\"GPU\")\n", - "if gpus:\n", - " # Restrict TensorFlow to only use the first GPU\n", - " try:\n", - " tf.config.set_visible_devices(gpus[2], \"GPU\")\n", - " logical_gpus = tf.config.list_logical_devices(\"GPU\")\n", - " print(len(gpus), \"Physical GPUs,\", len(logical_gpus), \"Logical GPU\")\n", - " except RuntimeError as e:\n", - " # Visible devices must be set before GPUs have been initialized\n", - " print(e)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "These are a few examples of the dataset:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 01234
age0.9727781.4150741.415074-1.902148-1.459852
sex0.6494450.6494450.6494450.649445-1.533413
cp-2.0200770.8840340.884034-0.084003-1.052040
trestbps0.7210081.543527-0.649858-0.101512-0.101512
chol-0.2518550.740555-0.3267540.066465-0.794872
fbs2.426901-0.410346-0.410346-0.410346-0.410346
restecg1.0708381.0708381.070838-0.9537151.070838
thalach-0.025055-1.831151-0.9281031.5660300.920995
exang-0.7210101.3812121.381212-0.721010-0.721010
oldpeak0.9864400.3303951.2324571.9705080.248389
slope2.3343480.6873740.6873742.334348-0.959601
ca-0.7701982.4250241.359950-0.770198-0.770198
thal-2.070238-0.5143451.041548-0.514345-0.514345
ground_truth0.0000001.0000000.0000000.0000000.000000
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# | echo: false\n", - "\n", - "train_df, test_df = get_train_n_test_data(dataset_name=\"heart\")\n", - "display(train_df.head().T.style)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Hyperparameter search" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The choice of the batch size and the maximum number of epochs depends on the dataset size. For this dataset, we use the following values:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "batch_size = 16\n", - "max_epochs = 50" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We use the Type-2 architecture built using `MonoDense` layer with the following set of hyperparameters ranges:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def hp_params_f(hp):\n", - " return dict(\n", - " units=hp.Int(\"units\", min_value=16, max_value=32, step=1),\n", - " n_layers=hp.Int(\"n_layers\", min_value=2, max_value=2),\n", - " activation=hp.Choice(\"activation\", values=[\"elu\"]),\n", - " learning_rate=hp.Float(\n", - " \"learning_rate\", min_value=1e-4, max_value=1e-2, sampling=\"log\"\n", - " ),\n", - " weight_decay=hp.Float(\n", - " \"weight_decay\", min_value=3e-2, max_value=0.3, sampling=\"log\"\n", - " ),\n", - " dropout=hp.Float(\"dropout\", min_value=0.0, max_value=0.5, sampling=\"linear\"),\n", - " decay_rate=hp.Float(\n", - " \"decay_rate\", min_value=0.8, max_value=1.0, sampling=\"reverse_log\"\n", - " ),\n", - " )" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The following fixed parameters are used to build the Type-2 architecture for this dataset:\n", - "\n", - "- `final_activation` is used to build the final layer for regression problem (set to `None`) or for the classification problem (`\"sigmoid\"`),\n", - "\n", - "- `loss` is used for training regression (`\"mse\"`) or classification (`\"binary_crossentropy\"`) problem, and\n", - "\n", - "- `metrics` denotes metrics used to compare with previosly published results: `\"accuracy\"` for classification and \"`mse`\" or \"`rmse`\" for regression.\n", - "\n", - "Parameters `objective` and `direction` are used by the tuner such that `objective=f\"val_{metrics}\"` and direction is either `\"min` or `\"max\"`.\n", - "\n", - "Parameters `max_trials` denotes the number of trial performed buy the tuner, `patience` is the number of epochs allowed to perform worst than the best one before stopping the current trial. The parameter `execution_per_trial` denotes the number of runs before calculating the results of a trial, it should be set to value greater than 1 for small datasets that have high variance in results." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "final_activation = \"sigmoid\"\n", - "loss = \"binary_crossentropy\"\n", - "metrics = \"accuracy\"\n", - "objective = \"val_accuracy\"\n", - "direction = \"max\"\n", - "max_trials = 200\n", - "executions_per_trial = 3\n", - "patience = 5" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "INFO:tensorflow:Reloading Tuner from tuner/heart/tuner0.json\n", - "INFO:tensorflow:Oracle triggered exit\n" - ] - } - ], - "source": [ - "# | include: false\n", - "# | notest\n", - "\n", - "tuner = find_hyperparameters(\n", - " \"heart\",\n", - " monotonicity_indicator=monotonicity_indicator,\n", - " hp_params_f=hp_params_f,\n", - " final_activation=final_activation,\n", - " loss=loss,\n", - " metrics=metrics,\n", - " objective=objective,\n", - " direction=direction,\n", - " max_trials=max_trials,\n", - " patience=patience,\n", - " executions_per_trial=executions_per_trial,\n", - " batch_size=batch_size,\n", - " max_epochs=max_epochs,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_accuracy_meanval_accuracy_stdval_accuracy_minval_accuracy_maxparams
0212elu0.0010.1407320.4184840.8896190.8786890.0089790.8688520.8852461538
\n", - "
" - ], - "text/plain": [ - " units n_layers activation learning_rate weight_decay dropout \n", - "0 21 2 elu 0.001 0.140732 0.418484 \\\n", - "\n", - " decay_rate val_accuracy_mean val_accuracy_std val_accuracy_min \n", - "0 0.889619 0.878689 0.008979 0.868852 \\\n", - "\n", - " val_accuracy_max params \n", - "0 0.885246 1538 " - ] - }, - "metadata": {}, - "output_type": "display_data" + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | default_exp _experiments.heart" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Heart disease" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Running in Google Colab\n", + "\n", + "You can run this experiment in Google Colab by clicking the button below:\n", + "\n", + "\n", + " \"Open\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | hide\n", + "\n", + "from IPython.display import Markdown, display_markdown\n", + "\n", + "try:\n", + " import google.colab\n", + "\n", + " in_colab = True\n", + "except:\n", + " in_colab = False\n", + "\n", + "if in_colab:\n", + " display(\n", + " Markdown(\n", + " \"\"\"\n", + "### If you see this message, you are running in Google Colab\n", + "Along with this interactive tutorial the content of this notebook is organized and formatted for documentation purpuoses. \n", + "\n", + "You can ignore the '# | hide', '# | notest' and '# | echo: false' comments, they are not important for the tutorial.\n", + " \"\"\"\n", + " )\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Dataset" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Heart Disease [1] is a classification dataset used for predicting the presence of heart disease with 13 features:\n", + "\n", + "- age\n", + "\n", + "- sex\n", + "\n", + "- cp\n", + "\n", + "- trestbps\n", + "\n", + "- chol\n", + "\n", + "- fbs\n", + "\n", + "- restecg\n", + "\n", + "- thalach\n", + "\n", + "- exang\n", + "\n", + "- oldpeak\n", + "\n", + "- slope\n", + "\n", + "- ca\n", + "\n", + "- thal\n", + "\n", + "The dependent variable is monotonically increasing with respect to features `trestbps` and cholestrol (`chol`). The `monotonicity_indicator` corresponding to these features are set to 1. \n", + "\n", + "\n", + "References:\n", + "\n", + "\n", + "1. John H. Gennari, Pat Langley, and Douglas H. Fisher. Models of incremental concept formation. Artif. Intell., 40(1-3):11–61, 1989.\n", + "\n", + " https://archive.ics.uci.edu/ml/datasets/heart+disease\n", + "\n", + "2. Aishwarya Sivaraman, Golnoosh Farnadi, Todd Millstein, and Guy Van den Broeck. Counterexample-guided learning of monotonic neural networks. Advances in Neural Information Processing Systems, 33:11936–11948, 2020\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "monotonicity_indicator = {\n", + " \"age\": 0,\n", + " \"sex\": 0,\n", + " \"cp\": 0,\n", + " \"trestbps\": 1,\n", + " \"chol\": 1,\n", + " \"fbs\": 0,\n", + " \"restecg\": 0,\n", + " \"thalach\": 0,\n", + " \"exang\": 0,\n", + " \"oldpeak\": 0,\n", + " \"slope\": 0,\n", + " \"ca\": 0,\n", + " \"thal\": 0,\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | hide\n", + "\n", + "if in_colab:\n", + " !pip install \"monotonic-nn[experiments]\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | include: false\n", + "\n", + "from airt.keras.experiments import (\n", + " create_tuner_stats,\n", + " find_hyperparameters,\n", + " get_train_n_test_data,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | include: false\n", + "import shutil\n", + "from os import environ\n", + "\n", + "import tensorflow as tf" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3 Physical GPUs, 1 Logical GPU\n" + ] + } + ], + "source": [ + "# | include: false\n", + "\n", + "environ[\"TF_FORCE_GPU_ALLOW_GROWTH\"] = \"true\"\n", + "\n", + "gpus = tf.config.list_physical_devices(\"GPU\")\n", + "if gpus:\n", + " # Restrict TensorFlow to only use the first GPU\n", + " try:\n", + " tf.config.set_visible_devices(gpus[2], \"GPU\")\n", + " logical_gpus = tf.config.list_logical_devices(\"GPU\")\n", + " print(len(gpus), \"Physical GPUs,\", len(logical_gpus), \"Logical GPU\")\n", + " except RuntimeError as e:\n", + " # Visible devices must be set before GPUs have been initialized\n", + " print(e)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "These are a few examples of the dataset:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 01234
age0.9727781.4150741.415074-1.902148-1.459852
sex0.6494450.6494450.6494450.649445-1.533413
cp-2.0200770.8840340.884034-0.084003-1.052040
trestbps0.7210081.543527-0.649858-0.101512-0.101512
chol-0.2518550.740555-0.3267540.066465-0.794872
fbs2.426901-0.410346-0.410346-0.410346-0.410346
restecg1.0708381.0708381.070838-0.9537151.070838
thalach-0.025055-1.831151-0.9281031.5660300.920995
exang-0.7210101.3812121.381212-0.721010-0.721010
oldpeak0.9864400.3303951.2324571.9705080.248389
slope2.3343480.6873740.6873742.334348-0.959601
ca-0.7701982.4250241.359950-0.770198-0.770198
thal-2.070238-0.5143451.041548-0.514345-0.514345
ground_truth0.0000001.0000000.0000000.0000000.000000
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# | echo: false\n", + "\n", + "train_df, test_df = get_train_n_test_data(dataset_name=\"heart\")\n", + "display(train_df.head().T.style)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Hyperparameter search" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The choice of the batch size and the maximum number of epochs depends on the dataset size. For this dataset, we use the following values:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "batch_size = 16\n", + "max_epochs = 50" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We use the Type-2 architecture built using `MonoDense` layer with the following set of hyperparameters ranges:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def hp_params_f(hp):\n", + " return dict(\n", + " units=hp.Int(\"units\", min_value=16, max_value=32, step=1),\n", + " n_layers=hp.Int(\"n_layers\", min_value=2, max_value=2),\n", + " activation=hp.Choice(\"activation\", values=[\"elu\"]),\n", + " learning_rate=hp.Float(\n", + " \"learning_rate\", min_value=1e-4, max_value=1e-2, sampling=\"log\"\n", + " ),\n", + " weight_decay=hp.Float(\n", + " \"weight_decay\", min_value=3e-2, max_value=0.3, sampling=\"log\"\n", + " ),\n", + " dropout=hp.Float(\"dropout\", min_value=0.0, max_value=0.5, sampling=\"linear\"),\n", + " decay_rate=hp.Float(\n", + " \"decay_rate\", min_value=0.8, max_value=1.0, sampling=\"reverse_log\"\n", + " ),\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The following fixed parameters are used to build the Type-2 architecture for this dataset:\n", + "\n", + "- `final_activation` is used to build the final layer for regression problem (set to `None`) or for the classification problem (`\"sigmoid\"`),\n", + "\n", + "- `loss` is used for training regression (`\"mse\"`) or classification (`\"binary_crossentropy\"`) problem, and\n", + "\n", + "- `metrics` denotes metrics used to compare with previously published results: `\"accuracy\"` for classification and \"`mse`\" or \"`rmse`\" for regression.\n", + "\n", + "Parameters `objective` and `direction` are used by the tuner such that `objective=f\"val_{metrics}\"` and direction is either `\"min` or `\"max\"`.\n", + "\n", + "Parameters `max_trials` denotes the number of trial performed buy the tuner, `patience` is the number of epochs allowed to perform worst than the best one before stopping the current trial. The parameter `execution_per_trial` denotes the number of runs before calculating the results of a trial, it should be set to value greater than 1 for small datasets that have high variance in results." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "final_activation = \"sigmoid\"\n", + "loss = \"binary_crossentropy\"\n", + "metrics = \"accuracy\"\n", + "objective = \"val_accuracy\"\n", + "direction = \"max\"\n", + "max_trials = 200\n", + "executions_per_trial = 3\n", + "patience = 5" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "INFO:tensorflow:Reloading Tuner from tuner/heart/tuner0.json\n", + "INFO:tensorflow:Oracle triggered exit\n" + ] + } + ], + "source": [ + "# | include: false\n", + "# | notest\n", + "\n", + "tuner = find_hyperparameters(\n", + " \"heart\",\n", + " monotonicity_indicator=monotonicity_indicator,\n", + " hp_params_f=hp_params_f,\n", + " final_activation=final_activation,\n", + " loss=loss,\n", + " metrics=metrics,\n", + " objective=objective,\n", + " direction=direction,\n", + " max_trials=max_trials,\n", + " patience=patience,\n", + " executions_per_trial=executions_per_trial,\n", + " batch_size=batch_size,\n", + " max_epochs=max_epochs,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_accuracy_meanval_accuracy_stdval_accuracy_minval_accuracy_maxparams
0212elu0.0010.1407320.4184840.8896190.8786890.0089790.8688520.8852461538
\n", + "
" + ], + "text/plain": [ + " units n_layers activation learning_rate weight_decay dropout \n", + "0 21 2 elu 0.001 0.140732 0.418484 \\\n", + "\n", + " decay_rate val_accuracy_mean val_accuracy_std val_accuracy_min \n", + "0 0.889619 0.878689 0.008979 0.868852 \\\n", + "\n", + " val_accuracy_max params \n", + "0 0.885246 1538 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_accuracy_meanval_accuracy_stdval_accuracy_minval_accuracy_maxparams
1272elu0.0015210.1234290.2757740.9813200.8721310.0073310.8688520.8852462317
0212elu0.0010000.1407320.4184840.8896190.8786890.0089790.8688520.8852461538
\n", + "
" + ], + "text/plain": [ + " units n_layers activation learning_rate weight_decay dropout \n", + "1 27 2 elu 0.001521 0.123429 0.275774 \\\n", + "0 21 2 elu 0.001000 0.140732 0.418484 \n", + "\n", + " decay_rate val_accuracy_mean val_accuracy_std val_accuracy_min \n", + "1 0.981320 0.872131 0.007331 0.868852 \\\n", + "0 0.889619 0.878689 0.008979 0.868852 \n", + "\n", + " val_accuracy_max params \n", + "1 0.885246 2317 \n", + "0 0.885246 1538 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_accuracy_meanval_accuracy_stdval_accuracy_minval_accuracy_maxparams
1272elu0.0015210.1234290.2757740.9813200.8721310.0073310.8688520.8852462317
0212elu0.0010000.1407320.4184840.8896190.8786890.0089790.8688520.8852461538
2242elu0.0010000.1367960.3967190.9103100.8786890.0089790.8688520.8852462077
\n", + "
" + ], + "text/plain": [ + " units n_layers activation learning_rate weight_decay dropout \n", + "1 27 2 elu 0.001521 0.123429 0.275774 \\\n", + "0 21 2 elu 0.001000 0.140732 0.418484 \n", + "2 24 2 elu 0.001000 0.136796 0.396719 \n", + "\n", + " decay_rate val_accuracy_mean val_accuracy_std val_accuracy_min \n", + "1 0.981320 0.872131 0.007331 0.868852 \\\n", + "0 0.889619 0.878689 0.008979 0.868852 \n", + "2 0.910310 0.878689 0.008979 0.868852 \n", + "\n", + " val_accuracy_max params \n", + "1 0.885246 2317 \n", + "0 0.885246 1538 \n", + "2 0.885246 2077 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_accuracy_meanval_accuracy_stdval_accuracy_minval_accuracy_maxparams
1272elu0.0015210.1234290.2757740.9813200.8721310.0073310.8688520.8852462317
0212elu0.0010000.1407320.4184840.8896190.8786890.0089790.8688520.8852461538
2242elu0.0010000.1367960.3967190.9103100.8786890.0089790.8688520.8852462077
3222elu0.0010000.1139290.3978740.8949210.8852460.0000000.8852460.8852461605
\n", + "
" + ], + "text/plain": [ + " units n_layers activation learning_rate weight_decay dropout \n", + "1 27 2 elu 0.001521 0.123429 0.275774 \\\n", + "0 21 2 elu 0.001000 0.140732 0.418484 \n", + "2 24 2 elu 0.001000 0.136796 0.396719 \n", + "3 22 2 elu 0.001000 0.113929 0.397874 \n", + "\n", + " decay_rate val_accuracy_mean val_accuracy_std val_accuracy_min \n", + "1 0.981320 0.872131 0.007331 0.868852 \\\n", + "0 0.889619 0.878689 0.008979 0.868852 \n", + "2 0.910310 0.878689 0.008979 0.868852 \n", + "3 0.894921 0.885246 0.000000 0.885246 \n", + "\n", + " val_accuracy_max params \n", + "1 0.885246 2317 \n", + "0 0.885246 1538 \n", + "2 0.885246 2077 \n", + "3 0.885246 1605 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_accuracy_meanval_accuracy_stdval_accuracy_minval_accuracy_maxparams
1272elu0.0015210.1234290.2757740.9813200.8721310.0073310.8688520.8852462317
0212elu0.0010000.1407320.4184840.8896190.8786890.0089790.8688520.8852461538
2242elu0.0010000.1367960.3967190.9103100.8786890.0089790.8688520.8852462077
4232elu0.0013280.1114810.4053960.9010500.8819670.0073310.8688520.8852461672
3222elu0.0010000.1139290.3978740.8949210.8852460.0000000.8852460.8852461605
\n", + "
" + ], + "text/plain": [ + " units n_layers activation learning_rate weight_decay dropout \n", + "1 27 2 elu 0.001521 0.123429 0.275774 \\\n", + "0 21 2 elu 0.001000 0.140732 0.418484 \n", + "2 24 2 elu 0.001000 0.136796 0.396719 \n", + "4 23 2 elu 0.001328 0.111481 0.405396 \n", + "3 22 2 elu 0.001000 0.113929 0.397874 \n", + "\n", + " decay_rate val_accuracy_mean val_accuracy_std val_accuracy_min \n", + "1 0.981320 0.872131 0.007331 0.868852 \\\n", + "0 0.889619 0.878689 0.008979 0.868852 \n", + "2 0.910310 0.878689 0.008979 0.868852 \n", + "4 0.901050 0.881967 0.007331 0.868852 \n", + "3 0.894921 0.885246 0.000000 0.885246 \n", + "\n", + " val_accuracy_max params \n", + "1 0.885246 2317 \n", + "0 0.885246 1538 \n", + "2 0.885246 2077 \n", + "4 0.885246 1672 \n", + "3 0.885246 1605 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_accuracy_meanval_accuracy_stdval_accuracy_minval_accuracy_maxparams
1272elu0.0015210.1234290.2757740.9813200.8721310.0073310.8688520.8852462317
5154elu0.0018640.1904940.3167820.9584460.8754100.0089790.8688520.8852461174
0212elu0.0010000.1407320.4184840.8896190.8786890.0089790.8688520.8852461538
2242elu0.0010000.1367960.3967190.9103100.8786890.0089790.8688520.8852462077
4232elu0.0013280.1114810.4053960.9010500.8819670.0073310.8688520.8852461672
3222elu0.0010000.1139290.3978740.8949210.8852460.0000000.8852460.8852461605
\n", + "
" + ], + "text/plain": [ + " units n_layers activation learning_rate weight_decay dropout \n", + "1 27 2 elu 0.001521 0.123429 0.275774 \\\n", + "5 15 4 elu 0.001864 0.190494 0.316782 \n", + "0 21 2 elu 0.001000 0.140732 0.418484 \n", + "2 24 2 elu 0.001000 0.136796 0.396719 \n", + "4 23 2 elu 0.001328 0.111481 0.405396 \n", + "3 22 2 elu 0.001000 0.113929 0.397874 \n", + "\n", + " decay_rate val_accuracy_mean val_accuracy_std val_accuracy_min \n", + "1 0.981320 0.872131 0.007331 0.868852 \\\n", + "5 0.958446 0.875410 0.008979 0.868852 \n", + "0 0.889619 0.878689 0.008979 0.868852 \n", + "2 0.910310 0.878689 0.008979 0.868852 \n", + "4 0.901050 0.881967 0.007331 0.868852 \n", + "3 0.894921 0.885246 0.000000 0.885246 \n", + "\n", + " val_accuracy_max params \n", + "1 0.885246 2317 \n", + "5 0.885246 1174 \n", + "0 0.885246 1538 \n", + "2 0.885246 2077 \n", + "4 0.885246 1672 \n", + "3 0.885246 1605 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_accuracy_meanval_accuracy_stdval_accuracy_minval_accuracy_maxparams
1272elu0.0015210.1234290.2757740.9813200.8721310.0073310.8688520.8852462317
5154elu0.0018640.1904940.3167820.9584460.8754100.0089790.8688520.8852461174
0212elu0.0010000.1407320.4184840.8896190.8786890.0089790.8688520.8852461538
2242elu0.0010000.1367960.3967190.9103100.8786890.0089790.8688520.8852462077
4232elu0.0013280.1114810.4053960.9010500.8819670.0073310.8688520.8852461672
3222elu0.0010000.1139290.3978740.8949210.8852460.0000000.8852460.8852461605
6182elu0.0010000.1220190.4608440.9216000.8852460.0000000.8852460.8852461077
\n", + "
" + ], + "text/plain": [ + " units n_layers activation learning_rate weight_decay dropout \n", + "1 27 2 elu 0.001521 0.123429 0.275774 \\\n", + "5 15 4 elu 0.001864 0.190494 0.316782 \n", + "0 21 2 elu 0.001000 0.140732 0.418484 \n", + "2 24 2 elu 0.001000 0.136796 0.396719 \n", + "4 23 2 elu 0.001328 0.111481 0.405396 \n", + "3 22 2 elu 0.001000 0.113929 0.397874 \n", + "6 18 2 elu 0.001000 0.122019 0.460844 \n", + "\n", + " decay_rate val_accuracy_mean val_accuracy_std val_accuracy_min \n", + "1 0.981320 0.872131 0.007331 0.868852 \\\n", + "5 0.958446 0.875410 0.008979 0.868852 \n", + "0 0.889619 0.878689 0.008979 0.868852 \n", + "2 0.910310 0.878689 0.008979 0.868852 \n", + "4 0.901050 0.881967 0.007331 0.868852 \n", + "3 0.894921 0.885246 0.000000 0.885246 \n", + "6 0.921600 0.885246 0.000000 0.885246 \n", + "\n", + " val_accuracy_max params \n", + "1 0.885246 2317 \n", + "5 0.885246 1174 \n", + "0 0.885246 1538 \n", + "2 0.885246 2077 \n", + "4 0.885246 1672 \n", + "3 0.885246 1605 \n", + "6 0.885246 1077 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_accuracy_meanval_accuracy_stdval_accuracy_minval_accuracy_maxparams
1272elu0.0015210.1234290.2757740.9813200.8721310.0073310.8688520.8852462317
5154elu0.0018640.1904940.3167820.9584460.8754100.0089790.8688520.8852461174
0212elu0.0010000.1407320.4184840.8896190.8786890.0089790.8688520.8852461538
2242elu0.0010000.1367960.3967190.9103100.8786890.0089790.8688520.8852462077
7192elu0.0010000.1148880.4407090.9005440.8786890.0089790.8688520.8852461131
4232elu0.0013280.1114810.4053960.9010500.8819670.0073310.8688520.8852461672
3222elu0.0010000.1139290.3978740.8949210.8852460.0000000.8852460.8852461605
6182elu0.0010000.1220190.4608440.9216000.8852460.0000000.8852460.8852461077
\n", + "
" + ], + "text/plain": [ + " units n_layers activation learning_rate weight_decay dropout \n", + "1 27 2 elu 0.001521 0.123429 0.275774 \\\n", + "5 15 4 elu 0.001864 0.190494 0.316782 \n", + "0 21 2 elu 0.001000 0.140732 0.418484 \n", + "2 24 2 elu 0.001000 0.136796 0.396719 \n", + "7 19 2 elu 0.001000 0.114888 0.440709 \n", + "4 23 2 elu 0.001328 0.111481 0.405396 \n", + "3 22 2 elu 0.001000 0.113929 0.397874 \n", + "6 18 2 elu 0.001000 0.122019 0.460844 \n", + "\n", + " decay_rate val_accuracy_mean val_accuracy_std val_accuracy_min \n", + "1 0.981320 0.872131 0.007331 0.868852 \\\n", + "5 0.958446 0.875410 0.008979 0.868852 \n", + "0 0.889619 0.878689 0.008979 0.868852 \n", + "2 0.910310 0.878689 0.008979 0.868852 \n", + "7 0.900544 0.878689 0.008979 0.868852 \n", + "4 0.901050 0.881967 0.007331 0.868852 \n", + "3 0.894921 0.885246 0.000000 0.885246 \n", + "6 0.921600 0.885246 0.000000 0.885246 \n", + "\n", + " val_accuracy_max params \n", + "1 0.885246 2317 \n", + "5 0.885246 1174 \n", + "0 0.885246 1538 \n", + "2 0.885246 2077 \n", + "7 0.885246 1131 \n", + "4 0.885246 1672 \n", + "3 0.885246 1605 \n", + "6 0.885246 1077 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_accuracy_meanval_accuracy_stdval_accuracy_minval_accuracy_maxparams
1272elu0.0015210.1234290.2757740.9813200.8721310.0073310.8688520.8852462317
5154elu0.0018640.1904940.3167820.9584460.8754100.0089790.8688520.8852461174
0212elu0.0010000.1407320.4184840.8896190.8786890.0089790.8688520.8852461538
2242elu0.0010000.1367960.3967190.9103100.8786890.0089790.8688520.8852462077
7192elu0.0010000.1148880.4407090.9005440.8786890.0089790.8688520.8852461131
4232elu0.0013280.1114810.4053960.9010500.8819670.0073310.8688520.8852461672
8232elu0.0010000.1394520.4246310.8973390.8819670.0073310.8688520.8852461672
3222elu0.0010000.1139290.3978740.8949210.8852460.0000000.8852460.8852461605
6182elu0.0010000.1220190.4608440.9216000.8852460.0000000.8852460.8852461077
\n", + "
" + ], + "text/plain": [ + " units n_layers activation learning_rate weight_decay dropout \n", + "1 27 2 elu 0.001521 0.123429 0.275774 \\\n", + "5 15 4 elu 0.001864 0.190494 0.316782 \n", + "0 21 2 elu 0.001000 0.140732 0.418484 \n", + "2 24 2 elu 0.001000 0.136796 0.396719 \n", + "7 19 2 elu 0.001000 0.114888 0.440709 \n", + "4 23 2 elu 0.001328 0.111481 0.405396 \n", + "8 23 2 elu 0.001000 0.139452 0.424631 \n", + "3 22 2 elu 0.001000 0.113929 0.397874 \n", + "6 18 2 elu 0.001000 0.122019 0.460844 \n", + "\n", + " decay_rate val_accuracy_mean val_accuracy_std val_accuracy_min \n", + "1 0.981320 0.872131 0.007331 0.868852 \\\n", + "5 0.958446 0.875410 0.008979 0.868852 \n", + "0 0.889619 0.878689 0.008979 0.868852 \n", + "2 0.910310 0.878689 0.008979 0.868852 \n", + "7 0.900544 0.878689 0.008979 0.868852 \n", + "4 0.901050 0.881967 0.007331 0.868852 \n", + "8 0.897339 0.881967 0.007331 0.868852 \n", + "3 0.894921 0.885246 0.000000 0.885246 \n", + "6 0.921600 0.885246 0.000000 0.885246 \n", + "\n", + " val_accuracy_max params \n", + "1 0.885246 2317 \n", + "5 0.885246 1174 \n", + "0 0.885246 1538 \n", + "2 0.885246 2077 \n", + "7 0.885246 1131 \n", + "4 0.885246 1672 \n", + "8 0.885246 1672 \n", + "3 0.885246 1605 \n", + "6 0.885246 1077 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_accuracy_meanval_accuracy_stdval_accuracy_minval_accuracy_maxparams
1272elu0.0015210.1234290.2757740.9813200.8721310.0073310.8688520.8852462317
5154elu0.0018640.1904940.3167820.9584460.8754100.0089790.8688520.8852461174
0212elu0.0010000.1407320.4184840.8896190.8786890.0089790.8688520.8852461538
2242elu0.0010000.1367960.3967190.9103100.8786890.0089790.8688520.8852462077
7192elu0.0010000.1148880.4407090.9005440.8786890.0089790.8688520.8852461131
9192elu0.0010000.1202830.4608690.9009160.8786890.0089790.8688520.8852461131
4232elu0.0013280.1114810.4053960.9010500.8819670.0073310.8688520.8852461672
8232elu0.0010000.1394520.4246310.8973390.8819670.0073310.8688520.8852461672
3222elu0.0010000.1139290.3978740.8949210.8852460.0000000.8852460.8852461605
6182elu0.0010000.1220190.4608440.9216000.8852460.0000000.8852460.8852461077
\n", + "
" + ], + "text/plain": [ + " units n_layers activation learning_rate weight_decay dropout \n", + "1 27 2 elu 0.001521 0.123429 0.275774 \\\n", + "5 15 4 elu 0.001864 0.190494 0.316782 \n", + "0 21 2 elu 0.001000 0.140732 0.418484 \n", + "2 24 2 elu 0.001000 0.136796 0.396719 \n", + "7 19 2 elu 0.001000 0.114888 0.440709 \n", + "9 19 2 elu 0.001000 0.120283 0.460869 \n", + "4 23 2 elu 0.001328 0.111481 0.405396 \n", + "8 23 2 elu 0.001000 0.139452 0.424631 \n", + "3 22 2 elu 0.001000 0.113929 0.397874 \n", + "6 18 2 elu 0.001000 0.122019 0.460844 \n", + "\n", + " decay_rate val_accuracy_mean val_accuracy_std val_accuracy_min \n", + "1 0.981320 0.872131 0.007331 0.868852 \\\n", + "5 0.958446 0.875410 0.008979 0.868852 \n", + "0 0.889619 0.878689 0.008979 0.868852 \n", + "2 0.910310 0.878689 0.008979 0.868852 \n", + "7 0.900544 0.878689 0.008979 0.868852 \n", + "9 0.900916 0.878689 0.008979 0.868852 \n", + "4 0.901050 0.881967 0.007331 0.868852 \n", + "8 0.897339 0.881967 0.007331 0.868852 \n", + "3 0.894921 0.885246 0.000000 0.885246 \n", + "6 0.921600 0.885246 0.000000 0.885246 \n", + "\n", + " val_accuracy_max params \n", + "1 0.885246 2317 \n", + "5 0.885246 1174 \n", + "0 0.885246 1538 \n", + "2 0.885246 2077 \n", + "7 0.885246 1131 \n", + "9 0.885246 1131 \n", + "4 0.885246 1672 \n", + "8 0.885246 1672 \n", + "3 0.885246 1605 \n", + "6 0.885246 1077 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# | include: false\n", + "# | notest\n", + "\n", + "stats = create_tuner_stats(\n", + " tuner,\n", + " batch_size=batch_size,\n", + " max_epochs=max_epochs,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The following table describes the best models and their hyperparameters found by the tuner:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 01234
units2218232321
n_layers22222
activationelueluelueluelu
learning_rate0.0010000.0010000.0013280.0010000.001000
weight_decay0.1139290.1220190.1114810.1394520.140732
dropout0.3978740.4608440.4053960.4246310.418484
decay_rate0.8949210.9216000.9010500.8973390.889619
val_accuracy_mean0.8852460.8852460.8819670.8819670.878689
val_accuracy_std0.0000000.0000000.0073310.0073310.008979
val_accuracy_min0.8852460.8852460.8688520.8688520.868852
val_accuracy_max0.8852460.8852460.8852460.8852460.885246
params16051077167216721538
\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": null, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# | echo: false\n", + "# | notest\n", + "\n", + "df = stats.sort_values(by=f\"{objective}_mean\", ascending=(direction == \"min\")).head()\n", + "\n", + "df.reset_index(drop=True).T.style" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\\begin{tabular}{rrlrrrrrrrrr}\n", + "\\toprule\n", + "units & n_layers & activation & learning_rate & weight_decay & dropout & decay_rate & val_accuracy_mean & val_accuracy_std & val_accuracy_min & val_accuracy_max & params \\\\\n", + "\\midrule\n", + "22 & 2 & elu & 0.001000 & 0.113929 & 0.397874 & 0.894921 & 0.885246 & 0.000000 & 0.885246 & 0.885246 & 1605 \\\\\n", + "18 & 2 & elu & 0.001000 & 0.122019 & 0.460844 & 0.921600 & 0.885246 & 0.000000 & 0.885246 & 0.885246 & 1077 \\\\\n", + "23 & 2 & elu & 0.001328 & 0.111481 & 0.405396 & 0.901050 & 0.881967 & 0.007331 & 0.868852 & 0.885246 & 1672 \\\\\n", + "23 & 2 & elu & 0.001000 & 0.139452 & 0.424631 & 0.897339 & 0.881967 & 0.007331 & 0.868852 & 0.885246 & 1672 \\\\\n", + "21 & 2 & elu & 0.001000 & 0.140732 & 0.418484 & 0.889619 & 0.878689 & 0.008979 & 0.868852 & 0.885246 & 1538 \\\\\n", + "\\bottomrule\n", + "\\end{tabular}\n", + "\n" + ] + } + ], + "source": [ + "# | include: false\n", + "# | notest\n", + "\n", + "print(df.to_latex(index=False))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The optimal model" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "These are the best hyperparameters found by previous runs of the tuner:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def final_hp_params_f(hp):\n", + " return dict(\n", + " units=hp.Fixed(\"units\", value=22),\n", + " n_layers=hp.Fixed(\"n_layers\", 2),\n", + " activation=hp.Fixed(\"activation\", value=\"elu\"),\n", + " learning_rate=hp.Fixed(\"learning_rate\", value=0.001),\n", + " weight_decay=hp.Fixed(\"weight_decay\", value=0.113929),\n", + " dropout=hp.Fixed(\"dropout\", value=0.397874),\n", + " decay_rate=hp.Fixed(\"decay_rate\", value=0.894921),\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Trial 1 Complete [00h 00m 05s]\n", + "val_accuracy: 0.6065573692321777\n", + "\n", + "Best val_accuracy So Far: 0.6065573692321777\n", + "Total elapsed time: 00h 00m 05s\n", + "INFO:tensorflow:Oracle triggered exit\n" + ] + } + ], + "source": [ + "# | include: false\n", + "# | notest\n", + "\n", + "\n", + "shutil.rmtree(\"tuner_final/heart\", ignore_errors=True)\n", + "\n", + "final_tuner = find_hyperparameters(\n", + " \"heart\",\n", + " monotonicity_indicator=monotonicity_indicator,\n", + " hp_params_f=final_hp_params_f,\n", + " max_trials=1,\n", + " final_activation=final_activation,\n", + " loss=loss,\n", + " metrics=metrics,\n", + " objective=objective,\n", + " direction=direction,\n", + " batch_size=batch_size,\n", + " max_epochs=1,\n", + " patience=patience,\n", + " executions_per_trial=1,\n", + " dir_root=\"tuner_final\",\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_accuracy_meanval_accuracy_stdval_accuracy_minval_accuracy_maxparams
0222elu0.0010.1139290.3978740.8949210.8852460.00.8852460.8852461605
\n", + "
" + ], + "text/plain": [ + " units n_layers activation learning_rate weight_decay dropout \n", + "0 22 2 elu 0.001 0.113929 0.397874 \\\n", + "\n", + " decay_rate val_accuracy_mean val_accuracy_std val_accuracy_min \n", + "0 0.894921 0.885246 0.0 0.885246 \\\n", + "\n", + " val_accuracy_max params \n", + "0 0.885246 1605 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# | include: false\n", + "# | notest\n", + "\n", + "final_stats = create_tuner_stats(\n", + " final_tuner,\n", + " batch_size=batch_size,\n", + " max_epochs=max_epochs,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The final evaluation of the optimal model:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 0
units22
n_layers2
activationelu
learning_rate0.001000
weight_decay0.113929
dropout0.397874
decay_rate0.894921
val_accuracy_mean0.885246
val_accuracy_std0.000000
val_accuracy_min0.885246
val_accuracy_max0.885246
params1605
\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": null, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# | echo: false\n", + "# | notest\n", + "\n", + "final_stats.T.style" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "python3", + "language": "python", + "name": "python3" + } }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_accuracy_meanval_accuracy_stdval_accuracy_minval_accuracy_maxparams
1272elu0.0015210.1234290.2757740.9813200.8721310.0073310.8688520.8852462317
0212elu0.0010000.1407320.4184840.8896190.8786890.0089790.8688520.8852461538
\n", - "
" - ], - "text/plain": [ - " units n_layers activation learning_rate weight_decay dropout \n", - "1 27 2 elu 0.001521 0.123429 0.275774 \\\n", - "0 21 2 elu 0.001000 0.140732 0.418484 \n", - "\n", - " decay_rate val_accuracy_mean val_accuracy_std val_accuracy_min \n", - "1 0.981320 0.872131 0.007331 0.868852 \\\n", - "0 0.889619 0.878689 0.008979 0.868852 \n", - "\n", - " val_accuracy_max params \n", - "1 0.885246 2317 \n", - "0 0.885246 1538 " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_accuracy_meanval_accuracy_stdval_accuracy_minval_accuracy_maxparams
1272elu0.0015210.1234290.2757740.9813200.8721310.0073310.8688520.8852462317
0212elu0.0010000.1407320.4184840.8896190.8786890.0089790.8688520.8852461538
2242elu0.0010000.1367960.3967190.9103100.8786890.0089790.8688520.8852462077
\n", - "
" - ], - "text/plain": [ - " units n_layers activation learning_rate weight_decay dropout \n", - "1 27 2 elu 0.001521 0.123429 0.275774 \\\n", - "0 21 2 elu 0.001000 0.140732 0.418484 \n", - "2 24 2 elu 0.001000 0.136796 0.396719 \n", - "\n", - " decay_rate val_accuracy_mean val_accuracy_std val_accuracy_min \n", - "1 0.981320 0.872131 0.007331 0.868852 \\\n", - "0 0.889619 0.878689 0.008979 0.868852 \n", - "2 0.910310 0.878689 0.008979 0.868852 \n", - "\n", - " val_accuracy_max params \n", - "1 0.885246 2317 \n", - "0 0.885246 1538 \n", - "2 0.885246 2077 " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_accuracy_meanval_accuracy_stdval_accuracy_minval_accuracy_maxparams
1272elu0.0015210.1234290.2757740.9813200.8721310.0073310.8688520.8852462317
0212elu0.0010000.1407320.4184840.8896190.8786890.0089790.8688520.8852461538
2242elu0.0010000.1367960.3967190.9103100.8786890.0089790.8688520.8852462077
3222elu0.0010000.1139290.3978740.8949210.8852460.0000000.8852460.8852461605
\n", - "
" - ], - "text/plain": [ - " units n_layers activation learning_rate weight_decay dropout \n", - "1 27 2 elu 0.001521 0.123429 0.275774 \\\n", - "0 21 2 elu 0.001000 0.140732 0.418484 \n", - "2 24 2 elu 0.001000 0.136796 0.396719 \n", - "3 22 2 elu 0.001000 0.113929 0.397874 \n", - "\n", - " decay_rate val_accuracy_mean val_accuracy_std val_accuracy_min \n", - "1 0.981320 0.872131 0.007331 0.868852 \\\n", - "0 0.889619 0.878689 0.008979 0.868852 \n", - "2 0.910310 0.878689 0.008979 0.868852 \n", - "3 0.894921 0.885246 0.000000 0.885246 \n", - "\n", - " val_accuracy_max params \n", - "1 0.885246 2317 \n", - "0 0.885246 1538 \n", - "2 0.885246 2077 \n", - "3 0.885246 1605 " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_accuracy_meanval_accuracy_stdval_accuracy_minval_accuracy_maxparams
1272elu0.0015210.1234290.2757740.9813200.8721310.0073310.8688520.8852462317
0212elu0.0010000.1407320.4184840.8896190.8786890.0089790.8688520.8852461538
2242elu0.0010000.1367960.3967190.9103100.8786890.0089790.8688520.8852462077
4232elu0.0013280.1114810.4053960.9010500.8819670.0073310.8688520.8852461672
3222elu0.0010000.1139290.3978740.8949210.8852460.0000000.8852460.8852461605
\n", - "
" - ], - "text/plain": [ - " units n_layers activation learning_rate weight_decay dropout \n", - "1 27 2 elu 0.001521 0.123429 0.275774 \\\n", - "0 21 2 elu 0.001000 0.140732 0.418484 \n", - "2 24 2 elu 0.001000 0.136796 0.396719 \n", - "4 23 2 elu 0.001328 0.111481 0.405396 \n", - "3 22 2 elu 0.001000 0.113929 0.397874 \n", - "\n", - " decay_rate val_accuracy_mean val_accuracy_std val_accuracy_min \n", - "1 0.981320 0.872131 0.007331 0.868852 \\\n", - "0 0.889619 0.878689 0.008979 0.868852 \n", - "2 0.910310 0.878689 0.008979 0.868852 \n", - "4 0.901050 0.881967 0.007331 0.868852 \n", - "3 0.894921 0.885246 0.000000 0.885246 \n", - "\n", - " val_accuracy_max params \n", - "1 0.885246 2317 \n", - "0 0.885246 1538 \n", - "2 0.885246 2077 \n", - "4 0.885246 1672 \n", - "3 0.885246 1605 " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_accuracy_meanval_accuracy_stdval_accuracy_minval_accuracy_maxparams
1272elu0.0015210.1234290.2757740.9813200.8721310.0073310.8688520.8852462317
5154elu0.0018640.1904940.3167820.9584460.8754100.0089790.8688520.8852461174
0212elu0.0010000.1407320.4184840.8896190.8786890.0089790.8688520.8852461538
2242elu0.0010000.1367960.3967190.9103100.8786890.0089790.8688520.8852462077
4232elu0.0013280.1114810.4053960.9010500.8819670.0073310.8688520.8852461672
3222elu0.0010000.1139290.3978740.8949210.8852460.0000000.8852460.8852461605
\n", - "
" - ], - "text/plain": [ - " units n_layers activation learning_rate weight_decay dropout \n", - "1 27 2 elu 0.001521 0.123429 0.275774 \\\n", - "5 15 4 elu 0.001864 0.190494 0.316782 \n", - "0 21 2 elu 0.001000 0.140732 0.418484 \n", - "2 24 2 elu 0.001000 0.136796 0.396719 \n", - "4 23 2 elu 0.001328 0.111481 0.405396 \n", - "3 22 2 elu 0.001000 0.113929 0.397874 \n", - "\n", - " decay_rate val_accuracy_mean val_accuracy_std val_accuracy_min \n", - "1 0.981320 0.872131 0.007331 0.868852 \\\n", - "5 0.958446 0.875410 0.008979 0.868852 \n", - "0 0.889619 0.878689 0.008979 0.868852 \n", - "2 0.910310 0.878689 0.008979 0.868852 \n", - "4 0.901050 0.881967 0.007331 0.868852 \n", - "3 0.894921 0.885246 0.000000 0.885246 \n", - "\n", - " val_accuracy_max params \n", - "1 0.885246 2317 \n", - "5 0.885246 1174 \n", - "0 0.885246 1538 \n", - "2 0.885246 2077 \n", - "4 0.885246 1672 \n", - "3 0.885246 1605 " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_accuracy_meanval_accuracy_stdval_accuracy_minval_accuracy_maxparams
1272elu0.0015210.1234290.2757740.9813200.8721310.0073310.8688520.8852462317
5154elu0.0018640.1904940.3167820.9584460.8754100.0089790.8688520.8852461174
0212elu0.0010000.1407320.4184840.8896190.8786890.0089790.8688520.8852461538
2242elu0.0010000.1367960.3967190.9103100.8786890.0089790.8688520.8852462077
4232elu0.0013280.1114810.4053960.9010500.8819670.0073310.8688520.8852461672
3222elu0.0010000.1139290.3978740.8949210.8852460.0000000.8852460.8852461605
6182elu0.0010000.1220190.4608440.9216000.8852460.0000000.8852460.8852461077
\n", - "
" - ], - "text/plain": [ - " units n_layers activation learning_rate weight_decay dropout \n", - "1 27 2 elu 0.001521 0.123429 0.275774 \\\n", - "5 15 4 elu 0.001864 0.190494 0.316782 \n", - "0 21 2 elu 0.001000 0.140732 0.418484 \n", - "2 24 2 elu 0.001000 0.136796 0.396719 \n", - "4 23 2 elu 0.001328 0.111481 0.405396 \n", - "3 22 2 elu 0.001000 0.113929 0.397874 \n", - "6 18 2 elu 0.001000 0.122019 0.460844 \n", - "\n", - " decay_rate val_accuracy_mean val_accuracy_std val_accuracy_min \n", - "1 0.981320 0.872131 0.007331 0.868852 \\\n", - "5 0.958446 0.875410 0.008979 0.868852 \n", - "0 0.889619 0.878689 0.008979 0.868852 \n", - "2 0.910310 0.878689 0.008979 0.868852 \n", - "4 0.901050 0.881967 0.007331 0.868852 \n", - "3 0.894921 0.885246 0.000000 0.885246 \n", - "6 0.921600 0.885246 0.000000 0.885246 \n", - "\n", - " val_accuracy_max params \n", - "1 0.885246 2317 \n", - "5 0.885246 1174 \n", - "0 0.885246 1538 \n", - "2 0.885246 2077 \n", - "4 0.885246 1672 \n", - "3 0.885246 1605 \n", - "6 0.885246 1077 " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_accuracy_meanval_accuracy_stdval_accuracy_minval_accuracy_maxparams
1272elu0.0015210.1234290.2757740.9813200.8721310.0073310.8688520.8852462317
5154elu0.0018640.1904940.3167820.9584460.8754100.0089790.8688520.8852461174
0212elu0.0010000.1407320.4184840.8896190.8786890.0089790.8688520.8852461538
2242elu0.0010000.1367960.3967190.9103100.8786890.0089790.8688520.8852462077
7192elu0.0010000.1148880.4407090.9005440.8786890.0089790.8688520.8852461131
4232elu0.0013280.1114810.4053960.9010500.8819670.0073310.8688520.8852461672
3222elu0.0010000.1139290.3978740.8949210.8852460.0000000.8852460.8852461605
6182elu0.0010000.1220190.4608440.9216000.8852460.0000000.8852460.8852461077
\n", - "
" - ], - "text/plain": [ - " units n_layers activation learning_rate weight_decay dropout \n", - "1 27 2 elu 0.001521 0.123429 0.275774 \\\n", - "5 15 4 elu 0.001864 0.190494 0.316782 \n", - "0 21 2 elu 0.001000 0.140732 0.418484 \n", - "2 24 2 elu 0.001000 0.136796 0.396719 \n", - "7 19 2 elu 0.001000 0.114888 0.440709 \n", - "4 23 2 elu 0.001328 0.111481 0.405396 \n", - "3 22 2 elu 0.001000 0.113929 0.397874 \n", - "6 18 2 elu 0.001000 0.122019 0.460844 \n", - "\n", - " decay_rate val_accuracy_mean val_accuracy_std val_accuracy_min \n", - "1 0.981320 0.872131 0.007331 0.868852 \\\n", - "5 0.958446 0.875410 0.008979 0.868852 \n", - "0 0.889619 0.878689 0.008979 0.868852 \n", - "2 0.910310 0.878689 0.008979 0.868852 \n", - "7 0.900544 0.878689 0.008979 0.868852 \n", - "4 0.901050 0.881967 0.007331 0.868852 \n", - "3 0.894921 0.885246 0.000000 0.885246 \n", - "6 0.921600 0.885246 0.000000 0.885246 \n", - "\n", - " val_accuracy_max params \n", - "1 0.885246 2317 \n", - "5 0.885246 1174 \n", - "0 0.885246 1538 \n", - "2 0.885246 2077 \n", - "7 0.885246 1131 \n", - "4 0.885246 1672 \n", - "3 0.885246 1605 \n", - "6 0.885246 1077 " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_accuracy_meanval_accuracy_stdval_accuracy_minval_accuracy_maxparams
1272elu0.0015210.1234290.2757740.9813200.8721310.0073310.8688520.8852462317
5154elu0.0018640.1904940.3167820.9584460.8754100.0089790.8688520.8852461174
0212elu0.0010000.1407320.4184840.8896190.8786890.0089790.8688520.8852461538
2242elu0.0010000.1367960.3967190.9103100.8786890.0089790.8688520.8852462077
7192elu0.0010000.1148880.4407090.9005440.8786890.0089790.8688520.8852461131
4232elu0.0013280.1114810.4053960.9010500.8819670.0073310.8688520.8852461672
8232elu0.0010000.1394520.4246310.8973390.8819670.0073310.8688520.8852461672
3222elu0.0010000.1139290.3978740.8949210.8852460.0000000.8852460.8852461605
6182elu0.0010000.1220190.4608440.9216000.8852460.0000000.8852460.8852461077
\n", - "
" - ], - "text/plain": [ - " units n_layers activation learning_rate weight_decay dropout \n", - "1 27 2 elu 0.001521 0.123429 0.275774 \\\n", - "5 15 4 elu 0.001864 0.190494 0.316782 \n", - "0 21 2 elu 0.001000 0.140732 0.418484 \n", - "2 24 2 elu 0.001000 0.136796 0.396719 \n", - "7 19 2 elu 0.001000 0.114888 0.440709 \n", - "4 23 2 elu 0.001328 0.111481 0.405396 \n", - "8 23 2 elu 0.001000 0.139452 0.424631 \n", - "3 22 2 elu 0.001000 0.113929 0.397874 \n", - "6 18 2 elu 0.001000 0.122019 0.460844 \n", - "\n", - " decay_rate val_accuracy_mean val_accuracy_std val_accuracy_min \n", - "1 0.981320 0.872131 0.007331 0.868852 \\\n", - "5 0.958446 0.875410 0.008979 0.868852 \n", - "0 0.889619 0.878689 0.008979 0.868852 \n", - "2 0.910310 0.878689 0.008979 0.868852 \n", - "7 0.900544 0.878689 0.008979 0.868852 \n", - "4 0.901050 0.881967 0.007331 0.868852 \n", - "8 0.897339 0.881967 0.007331 0.868852 \n", - "3 0.894921 0.885246 0.000000 0.885246 \n", - "6 0.921600 0.885246 0.000000 0.885246 \n", - "\n", - " val_accuracy_max params \n", - "1 0.885246 2317 \n", - "5 0.885246 1174 \n", - "0 0.885246 1538 \n", - "2 0.885246 2077 \n", - "7 0.885246 1131 \n", - "4 0.885246 1672 \n", - "8 0.885246 1672 \n", - "3 0.885246 1605 \n", - "6 0.885246 1077 " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_accuracy_meanval_accuracy_stdval_accuracy_minval_accuracy_maxparams
1272elu0.0015210.1234290.2757740.9813200.8721310.0073310.8688520.8852462317
5154elu0.0018640.1904940.3167820.9584460.8754100.0089790.8688520.8852461174
0212elu0.0010000.1407320.4184840.8896190.8786890.0089790.8688520.8852461538
2242elu0.0010000.1367960.3967190.9103100.8786890.0089790.8688520.8852462077
7192elu0.0010000.1148880.4407090.9005440.8786890.0089790.8688520.8852461131
9192elu0.0010000.1202830.4608690.9009160.8786890.0089790.8688520.8852461131
4232elu0.0013280.1114810.4053960.9010500.8819670.0073310.8688520.8852461672
8232elu0.0010000.1394520.4246310.8973390.8819670.0073310.8688520.8852461672
3222elu0.0010000.1139290.3978740.8949210.8852460.0000000.8852460.8852461605
6182elu0.0010000.1220190.4608440.9216000.8852460.0000000.8852460.8852461077
\n", - "
" - ], - "text/plain": [ - " units n_layers activation learning_rate weight_decay dropout \n", - "1 27 2 elu 0.001521 0.123429 0.275774 \\\n", - "5 15 4 elu 0.001864 0.190494 0.316782 \n", - "0 21 2 elu 0.001000 0.140732 0.418484 \n", - "2 24 2 elu 0.001000 0.136796 0.396719 \n", - "7 19 2 elu 0.001000 0.114888 0.440709 \n", - "9 19 2 elu 0.001000 0.120283 0.460869 \n", - "4 23 2 elu 0.001328 0.111481 0.405396 \n", - "8 23 2 elu 0.001000 0.139452 0.424631 \n", - "3 22 2 elu 0.001000 0.113929 0.397874 \n", - "6 18 2 elu 0.001000 0.122019 0.460844 \n", - "\n", - " decay_rate val_accuracy_mean val_accuracy_std val_accuracy_min \n", - "1 0.981320 0.872131 0.007331 0.868852 \\\n", - "5 0.958446 0.875410 0.008979 0.868852 \n", - "0 0.889619 0.878689 0.008979 0.868852 \n", - "2 0.910310 0.878689 0.008979 0.868852 \n", - "7 0.900544 0.878689 0.008979 0.868852 \n", - "9 0.900916 0.878689 0.008979 0.868852 \n", - "4 0.901050 0.881967 0.007331 0.868852 \n", - "8 0.897339 0.881967 0.007331 0.868852 \n", - "3 0.894921 0.885246 0.000000 0.885246 \n", - "6 0.921600 0.885246 0.000000 0.885246 \n", - "\n", - " val_accuracy_max params \n", - "1 0.885246 2317 \n", - "5 0.885246 1174 \n", - "0 0.885246 1538 \n", - "2 0.885246 2077 \n", - "7 0.885246 1131 \n", - "9 0.885246 1131 \n", - "4 0.885246 1672 \n", - "8 0.885246 1672 \n", - "3 0.885246 1605 \n", - "6 0.885246 1077 " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# | include: false\n", - "# | notest\n", - "\n", - "stats = create_tuner_stats(\n", - " tuner,\n", - " batch_size=batch_size,\n", - " max_epochs=max_epochs,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The following table describes the best models and their hyperparameters found by the tuner:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 01234
units2218232321
n_layers22222
activationelueluelueluelu
learning_rate0.0010000.0010000.0013280.0010000.001000
weight_decay0.1139290.1220190.1114810.1394520.140732
dropout0.3978740.4608440.4053960.4246310.418484
decay_rate0.8949210.9216000.9010500.8973390.889619
val_accuracy_mean0.8852460.8852460.8819670.8819670.878689
val_accuracy_std0.0000000.0000000.0073310.0073310.008979
val_accuracy_min0.8852460.8852460.8688520.8688520.868852
val_accuracy_max0.8852460.8852460.8852460.8852460.885246
params16051077167216721538
\n" - ], - "text/plain": [ - "" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# | echo: false\n", - "# | notest\n", - "\n", - "df = stats.sort_values(by=f\"{objective}_mean\", ascending=(direction == \"min\")).head()\n", - "\n", - "df.reset_index(drop=True).T.style" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\\begin{tabular}{rrlrrrrrrrrr}\n", - "\\toprule\n", - "units & n_layers & activation & learning_rate & weight_decay & dropout & decay_rate & val_accuracy_mean & val_accuracy_std & val_accuracy_min & val_accuracy_max & params \\\\\n", - "\\midrule\n", - "22 & 2 & elu & 0.001000 & 0.113929 & 0.397874 & 0.894921 & 0.885246 & 0.000000 & 0.885246 & 0.885246 & 1605 \\\\\n", - "18 & 2 & elu & 0.001000 & 0.122019 & 0.460844 & 0.921600 & 0.885246 & 0.000000 & 0.885246 & 0.885246 & 1077 \\\\\n", - "23 & 2 & elu & 0.001328 & 0.111481 & 0.405396 & 0.901050 & 0.881967 & 0.007331 & 0.868852 & 0.885246 & 1672 \\\\\n", - "23 & 2 & elu & 0.001000 & 0.139452 & 0.424631 & 0.897339 & 0.881967 & 0.007331 & 0.868852 & 0.885246 & 1672 \\\\\n", - "21 & 2 & elu & 0.001000 & 0.140732 & 0.418484 & 0.889619 & 0.878689 & 0.008979 & 0.868852 & 0.885246 & 1538 \\\\\n", - "\\bottomrule\n", - "\\end{tabular}\n", - "\n" - ] - } - ], - "source": [ - "# | include: false\n", - "# | notest\n", - "\n", - "print(df.to_latex(index=False))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## The optimal model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "These are the best hyperparameters found by previous runs of the tuner:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def final_hp_params_f(hp):\n", - " return dict(\n", - " units=hp.Fixed(\"units\", value=22),\n", - " n_layers=hp.Fixed(\"n_layers\", 2),\n", - " activation=hp.Fixed(\"activation\", value=\"elu\"),\n", - " learning_rate=hp.Fixed(\"learning_rate\", value=0.001),\n", - " weight_decay=hp.Fixed(\"weight_decay\", value=0.113929),\n", - " dropout=hp.Fixed(\"dropout\", value=0.397874),\n", - " decay_rate=hp.Fixed(\"decay_rate\", value=0.894921),\n", - " )" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Trial 1 Complete [00h 00m 05s]\n", - "val_accuracy: 0.6065573692321777\n", - "\n", - "Best val_accuracy So Far: 0.6065573692321777\n", - "Total elapsed time: 00h 00m 05s\n", - "INFO:tensorflow:Oracle triggered exit\n" - ] - } - ], - "source": [ - "# | include: false\n", - "# | notest\n", - "\n", - "\n", - "shutil.rmtree(\"tuner_final/heart\", ignore_errors=True)\n", - "\n", - "final_tuner = find_hyperparameters(\n", - " \"heart\",\n", - " monotonicity_indicator=monotonicity_indicator,\n", - " hp_params_f=final_hp_params_f,\n", - " max_trials=1,\n", - " final_activation=final_activation,\n", - " loss=loss,\n", - " metrics=metrics,\n", - " objective=objective,\n", - " direction=direction,\n", - " batch_size=batch_size,\n", - " max_epochs=1,\n", - " patience=patience,\n", - " executions_per_trial=1,\n", - " dir_root=\"tuner_final\",\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_accuracy_meanval_accuracy_stdval_accuracy_minval_accuracy_maxparams
0222elu0.0010.1139290.3978740.8949210.8852460.00.8852460.8852461605
\n", - "
" - ], - "text/plain": [ - " units n_layers activation learning_rate weight_decay dropout \n", - "0 22 2 elu 0.001 0.113929 0.397874 \\\n", - "\n", - " decay_rate val_accuracy_mean val_accuracy_std val_accuracy_min \n", - "0 0.894921 0.885246 0.0 0.885246 \\\n", - "\n", - " val_accuracy_max params \n", - "0 0.885246 1605 " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# | include: false\n", - "# | notest\n", - "\n", - "final_stats = create_tuner_stats(\n", - " final_tuner,\n", - " batch_size=batch_size,\n", - " max_epochs=max_epochs,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The final evaluation of the optimal model:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 0
units22
n_layers2
activationelu
learning_rate0.001000
weight_decay0.113929
dropout0.397874
decay_rate0.894921
val_accuracy_mean0.885246
val_accuracy_std0.000000
val_accuracy_min0.885246
val_accuracy_max0.885246
params1605
\n" - ], - "text/plain": [ - "" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# | echo: false\n", - "# | notest\n", - "\n", - "final_stats.T.style" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "python3", - "language": "python", - "name": "python3" - } - }, - "nbformat": 4, - "nbformat_minor": 1 + "nbformat": 4, + "nbformat_minor": 1 } diff --git a/nbs/experiments/Loan.ipynb b/nbs/experiments/Loan.ipynb index ff2813b..418ac32 100644 --- a/nbs/experiments/Loan.ipynb +++ b/nbs/experiments/Loan.ipynb @@ -1,887 +1,887 @@ { - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | default_exp _experiments.loan" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Loan" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Running in Google Colab\n", - "\n", - "You can run this experiment in Google Colab by clicking the button below:\n", - "\n", - "\n", - " \"Open\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | hide\n", - "\n", - "from IPython.display import Markdown, display_markdown\n", - "\n", - "try:\n", - " import google.colab\n", - "\n", - " in_colab = True\n", - "except:\n", - " in_colab = False\n", - "\n", - "if in_colab:\n", - " display(\n", - " Markdown(\n", - " \"\"\"\n", - "### If you see this message, you are running in Google Colab\n", - "Along with this interactive tutorial the content of this notebook is organized and formatted for documentation purpuoses. \n", - "\n", - "You can ignore the '# | hide', '# | notest' and '# | echo: false' comments, they are not important for the tutorial.\n", - " \"\"\"\n", - " )\n", - " )" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Dataset" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "Lending club loan *data*\n", - "contains complete loan data for all loans\n", - "issued through 2007-2015 of several banks. Each data point is a 28-dimensional feature including\n", - "the current loan status, latest payment information, and other additional features. The task is to\n", - "predict loan defaulters given the feature vector. The possibility of loan default should be nondecreasing w.r.t. number of public record bankruptcies, Debt-to-Income ratio, and\n", - "non-increasing w.r.t. credit score, length of employment, annual income. Thus the `monotonicity_indicator` corrsponding to these features are set to 1.\n", - "\n", - "\n", - "References:\n", - "\n", - "1. https://www.kaggle.com/wendykan/lending-club-loan-data (Note: Currently, the dataset seems to be withdrawn from kaggle)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "monotonicity_indicator = {\n", - " f\"feature_{i}\": mi for i, mi in enumerate([-1, 1, -1, -1, 1] + [0] * 23)\n", - "}" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | hide\n", - "\n", - "if in_colab:\n", - " !pip install \"monotonic-nn[experiments]\"" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | include: false\n", - "\n", - "from airt.keras.experiments import (\n", - " create_tuner_stats,\n", - " find_hyperparameters,\n", - " get_train_n_test_data,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | include: false\n", - "import shutil\n", - "from os import environ\n", - "\n", - "import tensorflow as tf" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "3 Physical GPUs, 1 Logical GPU\n" - ] - } - ], - "source": [ - "# | include: false\n", - "\n", - "environ[\"TF_FORCE_GPU_ALLOW_GROWTH\"] = \"true\"\n", - "\n", - "gpus = tf.config.list_physical_devices(\"GPU\")\n", - "if gpus:\n", - " # Restrict TensorFlow to only use the first GPU\n", - " try:\n", - " tf.config.set_visible_devices(gpus[2], \"GPU\")\n", - " logical_gpus = tf.config.list_logical_devices(\"GPU\")\n", - " print(len(gpus), \"Physical GPUs,\", len(logical_gpus), \"Logical GPU\")\n", - " except RuntimeError as e:\n", - " # Visible devices must be set before GPUs have been initialized\n", - " print(e)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "These are a few examples of the dataset:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 01234
feature_00.8333331.0000000.6666670.3333330.666667
feature_10.0000000.0000000.0000000.0000000.000000
feature_20.4000001.0000000.8000000.5000000.700000
feature_30.0052630.0034740.0052630.0071580.006842
feature_40.0051850.0238040.0297000.0244340.021962
feature_50.1857510.1348600.2366410.7455470.440204
feature_60.2406540.0362150.2718070.7780370.260125
feature_70.0000000.0000000.0000001.0000000.000000
feature_80.0000000.0000000.0000000.0000000.000000
feature_90.0000000.0000001.0000000.0000001.000000
feature_100.0000000.0000000.0000000.0000000.000000
feature_110.0000000.0000000.0000000.0000000.000000
feature_120.0000001.0000000.0000000.0000000.000000
feature_131.0000000.0000000.0000001.0000000.000000
feature_140.0000000.0000000.0000000.0000000.000000
feature_151.0000001.0000001.0000000.0000001.000000
feature_160.0000000.0000000.0000001.0000000.000000
feature_170.0000000.0000000.0000000.0000000.000000
feature_180.0000000.0000000.0000000.0000000.000000
feature_190.0000000.0000000.0000000.0000000.000000
feature_200.0000000.0000000.0000000.0000000.000000
feature_210.0000000.0000000.0000000.0000000.000000
feature_220.0000000.0000000.0000000.0000000.000000
feature_230.0000000.0000000.0000000.0000000.000000
feature_240.0000000.0000000.0000000.0000000.000000
feature_250.0000000.0000000.0000000.0000000.000000
feature_260.0000000.0000000.0000000.0000000.000000
feature_270.0000000.0000000.0000000.0000000.000000
ground_truth0.0000000.0000000.0000000.0000000.000000
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# | echo: false\n", - "\n", - "train_df, test_df = get_train_n_test_data(dataset_name=\"loan\")\n", - "display(train_df.head().T.style)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Hyperparameter search" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The choice of the batch size and the maximum number of epochs depends on the dataset size. For this dataset, we use the following values:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "batch_size = 256\n", - "max_epochs = 20" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We use the Type-2 architecture built using `MonoDense` layer with the following set of hyperparameters ranges:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def hp_params_f(hp):\n", - " return dict(\n", - " units=hp.Int(\"units\", min_value=4, max_value=32, step=1),\n", - " n_layers=hp.Int(\"n_layers\", min_value=1, max_value=2),\n", - " activation=hp.Choice(\"activation\", values=[\"elu\"]),\n", - " learning_rate=hp.Float(\n", - " \"learning_rate\", min_value=1e-4, max_value=1e-2, sampling=\"log\"\n", - " ),\n", - " weight_decay=hp.Float(\n", - " \"weight_decay\", min_value=3e-2, max_value=0.3, sampling=\"log\"\n", - " ),\n", - " dropout=hp.Float(\"dropout\", min_value=0.0, max_value=0.5, sampling=\"linear\"),\n", - " decay_rate=hp.Float(\n", - " \"decay_rate\", min_value=0.8, max_value=1.0, sampling=\"reverse_log\"\n", - " ),\n", - " )" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The following fixed parameters are used to build the Type-2 architecture for this dataset:\n", - "\n", - "- `final_activation` is used to build the final layer for regression problem (set to `None`) or for the classification problem (`\"sigmoid\"`),\n", - "\n", - "- `loss` is used for training regression (`\"mse\"`) or classification (`\"binary_crossentropy\"`) problem, and\n", - "\n", - "- `metrics` denotes metrics used to compare with previosly published results: `\"accuracy\"` for classification and \"`mse`\" or \"`rmse`\" for regression.\n", - "\n", - "Parameters `objective` and `direction` are used by the tuner such that `objective=f\"val_{metrics}\"` and direction is either `\"min` or `\"max\"`.\n", - "\n", - "Parameters `max_trials` denotes the number of trial performed buy the tuner, `patience` is the number of epochs allowed to perform worst than the best one before stopping the current trial. The parameter `execution_per_trial` denotes the number of runs before calculating the results of a trial, it should be set to value greater than 1 for small datasets that have high variance in results." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "final_activation = None\n", - "loss = \"binary_crossentropy\"\n", - "metrics = \"accuracy\"\n", - "objective = \"val_accuracy\"\n", - "direction = \"max\"\n", - "max_trials = 50\n", - "executions_per_trial = 1\n", - "patience = 5" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | include: false\n", - "\n", - "# uncomment and wait for a long time to find hyperparameters\n", - "find_hyperparams = False\n", - "\n", - "if find_hyperparams:\n", - " tuner = find_hyperparameters(\n", - " \"loan\",\n", - " dir_root=\"tuner-2\",\n", - " monotonicity_indicator=monotonicity_indicator,\n", - " hp_params_f=hp_params_f,\n", - " final_activation=final_activation,\n", - " loss=loss,\n", - " metrics=metrics,\n", - " objective=objective,\n", - " direction=direction,\n", - " max_trials=max_trials,\n", - " patience=patience,\n", - " executions_per_trial=executions_per_trial,\n", - " batch_size=batch_size,\n", - " max_epochs=max_epochs,\n", - " )\n", - "else:\n", - " tuner = None" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | include: false\n", - "\n", - "if tuner is not None:\n", - " stats = create_tuner_stats(\n", - " tuner,\n", - " batch_size=batch_size,\n", - " max_epochs=max_epochs,\n", - " )" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The following table describes the best models and their hyperparameters found by the tuner:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | echo: false\n", - "\n", - "if tuner is not None:\n", - " df = stats.sort_values(\n", - " by=f\"{objective}_mean\", ascending=(direction == \"min\")\n", - " ).head()\n", - "\n", - " display(df.reset_index(drop=True).T.style)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | include: false\n", - "if tuner is not None:\n", - " print(df.to_latex(index=False))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## The optimal model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "These are the best hyperparameters found by previous runs of the tuner:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def final_hp_params_f(hp):\n", - " return dict(\n", - " units=hp.Fixed(\"units\", value=8),\n", - " n_layers=hp.Fixed(\"n_layers\", 2),\n", - " activation=hp.Fixed(\"activation\", value=\"elu\"),\n", - " learning_rate=hp.Fixed(\"learning_rate\", value=0.008),\n", - " weight_decay=hp.Fixed(\"weight_decay\", value=0.0),\n", - " dropout=hp.Fixed(\"dropout\", value=0.0),\n", - " decay_rate=hp.Fixed(\"decay_rate\", value=1.0),\n", - " )" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Trial 1 Complete [00h 03m 52s]\n", - "val_accuracy: 0.6518259048461914\n", - "\n", - "Best val_accuracy So Far: 0.6518259048461914\n", - "Total elapsed time: 00h 03m 52s\n", - "INFO:tensorflow:Oracle triggered exit\n" - ] - } - ], - "source": [ - "# | include: false\n", - "# | notest\n", - "\n", - "\n", - "shutil.rmtree(\"tuner_final/loan\", ignore_errors=True)\n", - "\n", - "final_tuner = find_hyperparameters(\n", - " \"loan\",\n", - " monotonicity_indicator=monotonicity_indicator,\n", - " hp_params_f=final_hp_params_f,\n", - " max_trials=1,\n", - " final_activation=final_activation,\n", - " loss=loss,\n", - " metrics=metrics,\n", - " objective=objective,\n", - " direction=direction,\n", - " batch_size=batch_size,\n", - " max_epochs=max_epochs,\n", - " patience=patience,\n", - " executions_per_trial=1,\n", - " dir_root=\"tuner_final\",\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_accuracy_meanval_accuracy_stdval_accuracy_minval_accuracy_maxparams
082elu0.0080.00.01.00.6529170.0000850.6528510.653065577
\n", - "
" - ], - "text/plain": [ - " units n_layers activation learning_rate weight_decay dropout \n", - "0 8 2 elu 0.008 0.0 0.0 \\\n", - "\n", - " decay_rate val_accuracy_mean val_accuracy_std val_accuracy_min \n", - "0 1.0 0.652917 0.000085 0.652851 \\\n", - "\n", - " val_accuracy_max params \n", - "0 0.653065 577 " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# | include: false\n", - "# | notest\n", - "\n", - "final_stats = create_tuner_stats(\n", - " final_tuner,\n", - " batch_size=batch_size,\n", - " max_epochs=max_epochs,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The final evaluation of the optimal model:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 0
units8
n_layers2
activationelu
learning_rate0.008000
weight_decay0.000000
dropout0.000000
decay_rate1.000000
val_accuracy_mean0.652917
val_accuracy_std0.000085
val_accuracy_min0.652851
val_accuracy_max0.653065
params577
\n" - ], - "text/plain": [ - "" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# | echo: false\n", - "# | notest\n", - "\n", - "final_stats.T.style" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "python3", - "language": "python", - "name": "python3" - } - }, - "nbformat": 4, - "nbformat_minor": 1 + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | default_exp _experiments.loan" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Loan" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Running in Google Colab\n", + "\n", + "You can run this experiment in Google Colab by clicking the button below:\n", + "\n", + "\n", + " \"Open\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | hide\n", + "\n", + "from IPython.display import Markdown, display_markdown\n", + "\n", + "try:\n", + " import google.colab\n", + "\n", + " in_colab = True\n", + "except:\n", + " in_colab = False\n", + "\n", + "if in_colab:\n", + " display(\n", + " Markdown(\n", + " \"\"\"\n", + "### If you see this message, you are running in Google Colab\n", + "Along with this interactive tutorial the content of this notebook is organized and formatted for documentation purpuoses. \n", + "\n", + "You can ignore the '# | hide', '# | notest' and '# | echo: false' comments, they are not important for the tutorial.\n", + " \"\"\"\n", + " )\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Dataset" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "Lending club loan *data*\n", + "contains complete loan data for all loans\n", + "issued through 2007-2015 of several banks. Each data point is a 28-dimensional feature including\n", + "the current loan status, latest payment information, and other additional features. The task is to\n", + "predict loan defaulters given the feature vector. The possibility of loan default should be nondecreasing w.r.t. number of public record bankruptcies, Debt-to-Income ratio, and\n", + "non-increasing w.r.t. credit score, length of employment, annual income. Thus the `monotonicity_indicator` corresponding to these features are set to 1.\n", + "\n", + "\n", + "References:\n", + "\n", + "1. https://www.kaggle.com/wendykan/lending-club-loan-data (Note: Currently, the dataset seems to be withdrawn from kaggle)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "monotonicity_indicator = {\n", + " f\"feature_{i}\": mi for i, mi in enumerate([-1, 1, -1, -1, 1] + [0] * 23)\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | hide\n", + "\n", + "if in_colab:\n", + " !pip install \"monotonic-nn[experiments]\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | include: false\n", + "\n", + "from airt.keras.experiments import (\n", + " create_tuner_stats,\n", + " find_hyperparameters,\n", + " get_train_n_test_data,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | include: false\n", + "import shutil\n", + "from os import environ\n", + "\n", + "import tensorflow as tf" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3 Physical GPUs, 1 Logical GPU\n" + ] + } + ], + "source": [ + "# | include: false\n", + "\n", + "environ[\"TF_FORCE_GPU_ALLOW_GROWTH\"] = \"true\"\n", + "\n", + "gpus = tf.config.list_physical_devices(\"GPU\")\n", + "if gpus:\n", + " # Restrict TensorFlow to only use the first GPU\n", + " try:\n", + " tf.config.set_visible_devices(gpus[2], \"GPU\")\n", + " logical_gpus = tf.config.list_logical_devices(\"GPU\")\n", + " print(len(gpus), \"Physical GPUs,\", len(logical_gpus), \"Logical GPU\")\n", + " except RuntimeError as e:\n", + " # Visible devices must be set before GPUs have been initialized\n", + " print(e)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "These are a few examples of the dataset:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 01234
feature_00.8333331.0000000.6666670.3333330.666667
feature_10.0000000.0000000.0000000.0000000.000000
feature_20.4000001.0000000.8000000.5000000.700000
feature_30.0052630.0034740.0052630.0071580.006842
feature_40.0051850.0238040.0297000.0244340.021962
feature_50.1857510.1348600.2366410.7455470.440204
feature_60.2406540.0362150.2718070.7780370.260125
feature_70.0000000.0000000.0000001.0000000.000000
feature_80.0000000.0000000.0000000.0000000.000000
feature_90.0000000.0000001.0000000.0000001.000000
feature_100.0000000.0000000.0000000.0000000.000000
feature_110.0000000.0000000.0000000.0000000.000000
feature_120.0000001.0000000.0000000.0000000.000000
feature_131.0000000.0000000.0000001.0000000.000000
feature_140.0000000.0000000.0000000.0000000.000000
feature_151.0000001.0000001.0000000.0000001.000000
feature_160.0000000.0000000.0000001.0000000.000000
feature_170.0000000.0000000.0000000.0000000.000000
feature_180.0000000.0000000.0000000.0000000.000000
feature_190.0000000.0000000.0000000.0000000.000000
feature_200.0000000.0000000.0000000.0000000.000000
feature_210.0000000.0000000.0000000.0000000.000000
feature_220.0000000.0000000.0000000.0000000.000000
feature_230.0000000.0000000.0000000.0000000.000000
feature_240.0000000.0000000.0000000.0000000.000000
feature_250.0000000.0000000.0000000.0000000.000000
feature_260.0000000.0000000.0000000.0000000.000000
feature_270.0000000.0000000.0000000.0000000.000000
ground_truth0.0000000.0000000.0000000.0000000.000000
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# | echo: false\n", + "\n", + "train_df, test_df = get_train_n_test_data(dataset_name=\"loan\")\n", + "display(train_df.head().T.style)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Hyperparameter search" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The choice of the batch size and the maximum number of epochs depends on the dataset size. For this dataset, we use the following values:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "batch_size = 256\n", + "max_epochs = 20" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We use the Type-2 architecture built using `MonoDense` layer with the following set of hyperparameters ranges:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def hp_params_f(hp):\n", + " return dict(\n", + " units=hp.Int(\"units\", min_value=4, max_value=32, step=1),\n", + " n_layers=hp.Int(\"n_layers\", min_value=1, max_value=2),\n", + " activation=hp.Choice(\"activation\", values=[\"elu\"]),\n", + " learning_rate=hp.Float(\n", + " \"learning_rate\", min_value=1e-4, max_value=1e-2, sampling=\"log\"\n", + " ),\n", + " weight_decay=hp.Float(\n", + " \"weight_decay\", min_value=3e-2, max_value=0.3, sampling=\"log\"\n", + " ),\n", + " dropout=hp.Float(\"dropout\", min_value=0.0, max_value=0.5, sampling=\"linear\"),\n", + " decay_rate=hp.Float(\n", + " \"decay_rate\", min_value=0.8, max_value=1.0, sampling=\"reverse_log\"\n", + " ),\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The following fixed parameters are used to build the Type-2 architecture for this dataset:\n", + "\n", + "- `final_activation` is used to build the final layer for regression problem (set to `None`) or for the classification problem (`\"sigmoid\"`),\n", + "\n", + "- `loss` is used for training regression (`\"mse\"`) or classification (`\"binary_crossentropy\"`) problem, and\n", + "\n", + "- `metrics` denotes metrics used to compare with previously published results: `\"accuracy\"` for classification and \"`mse`\" or \"`rmse`\" for regression.\n", + "\n", + "Parameters `objective` and `direction` are used by the tuner such that `objective=f\"val_{metrics}\"` and direction is either `\"min` or `\"max\"`.\n", + "\n", + "Parameters `max_trials` denotes the number of trial performed buy the tuner, `patience` is the number of epochs allowed to perform worst than the best one before stopping the current trial. The parameter `execution_per_trial` denotes the number of runs before calculating the results of a trial, it should be set to value greater than 1 for small datasets that have high variance in results." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "final_activation = None\n", + "loss = \"binary_crossentropy\"\n", + "metrics = \"accuracy\"\n", + "objective = \"val_accuracy\"\n", + "direction = \"max\"\n", + "max_trials = 50\n", + "executions_per_trial = 1\n", + "patience = 5" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | include: false\n", + "\n", + "# uncomment and wait for a long time to find hyperparameters\n", + "find_hyperparams = False\n", + "\n", + "if find_hyperparams:\n", + " tuner = find_hyperparameters(\n", + " \"loan\",\n", + " dir_root=\"tuner-2\",\n", + " monotonicity_indicator=monotonicity_indicator,\n", + " hp_params_f=hp_params_f,\n", + " final_activation=final_activation,\n", + " loss=loss,\n", + " metrics=metrics,\n", + " objective=objective,\n", + " direction=direction,\n", + " max_trials=max_trials,\n", + " patience=patience,\n", + " executions_per_trial=executions_per_trial,\n", + " batch_size=batch_size,\n", + " max_epochs=max_epochs,\n", + " )\n", + "else:\n", + " tuner = None" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | include: false\n", + "\n", + "if tuner is not None:\n", + " stats = create_tuner_stats(\n", + " tuner,\n", + " batch_size=batch_size,\n", + " max_epochs=max_epochs,\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The following table describes the best models and their hyperparameters found by the tuner:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | echo: false\n", + "\n", + "if tuner is not None:\n", + " df = stats.sort_values(\n", + " by=f\"{objective}_mean\", ascending=(direction == \"min\")\n", + " ).head()\n", + "\n", + " display(df.reset_index(drop=True).T.style)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | include: false\n", + "if tuner is not None:\n", + " print(df.to_latex(index=False))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The optimal model" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "These are the best hyperparameters found by previous runs of the tuner:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def final_hp_params_f(hp):\n", + " return dict(\n", + " units=hp.Fixed(\"units\", value=8),\n", + " n_layers=hp.Fixed(\"n_layers\", 2),\n", + " activation=hp.Fixed(\"activation\", value=\"elu\"),\n", + " learning_rate=hp.Fixed(\"learning_rate\", value=0.008),\n", + " weight_decay=hp.Fixed(\"weight_decay\", value=0.0),\n", + " dropout=hp.Fixed(\"dropout\", value=0.0),\n", + " decay_rate=hp.Fixed(\"decay_rate\", value=1.0),\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Trial 1 Complete [00h 03m 52s]\n", + "val_accuracy: 0.6518259048461914\n", + "\n", + "Best val_accuracy So Far: 0.6518259048461914\n", + "Total elapsed time: 00h 03m 52s\n", + "INFO:tensorflow:Oracle triggered exit\n" + ] + } + ], + "source": [ + "# | include: false\n", + "# | notest\n", + "\n", + "\n", + "shutil.rmtree(\"tuner_final/loan\", ignore_errors=True)\n", + "\n", + "final_tuner = find_hyperparameters(\n", + " \"loan\",\n", + " monotonicity_indicator=monotonicity_indicator,\n", + " hp_params_f=final_hp_params_f,\n", + " max_trials=1,\n", + " final_activation=final_activation,\n", + " loss=loss,\n", + " metrics=metrics,\n", + " objective=objective,\n", + " direction=direction,\n", + " batch_size=batch_size,\n", + " max_epochs=max_epochs,\n", + " patience=patience,\n", + " executions_per_trial=1,\n", + " dir_root=\"tuner_final\",\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_accuracy_meanval_accuracy_stdval_accuracy_minval_accuracy_maxparams
082elu0.0080.00.01.00.6529170.0000850.6528510.653065577
\n", + "
" + ], + "text/plain": [ + " units n_layers activation learning_rate weight_decay dropout \n", + "0 8 2 elu 0.008 0.0 0.0 \\\n", + "\n", + " decay_rate val_accuracy_mean val_accuracy_std val_accuracy_min \n", + "0 1.0 0.652917 0.000085 0.652851 \\\n", + "\n", + " val_accuracy_max params \n", + "0 0.653065 577 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# | include: false\n", + "# | notest\n", + "\n", + "final_stats = create_tuner_stats(\n", + " final_tuner,\n", + " batch_size=batch_size,\n", + " max_epochs=max_epochs,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The final evaluation of the optimal model:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 0
units8
n_layers2
activationelu
learning_rate0.008000
weight_decay0.000000
dropout0.000000
decay_rate1.000000
val_accuracy_mean0.652917
val_accuracy_std0.000085
val_accuracy_min0.652851
val_accuracy_max0.653065
params577
\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": null, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# | echo: false\n", + "# | notest\n", + "\n", + "final_stats.T.style" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "python3", + "language": "python", + "name": "python3" + } + }, + "nbformat": 4, + "nbformat_minor": 1 } diff --git a/nbs/experiments/_Experiments.ipynb b/nbs/experiments/_Experiments.ipynb index 42f4d6b..79bf667 100644 --- a/nbs/experiments/_Experiments.ipynb +++ b/nbs/experiments/_Experiments.ipynb @@ -1,7398 +1,7398 @@ { - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Experiments\n", - "\n", - "> The code implementing the experiments in the paper:\n", - "> \n", - "> Davor Runje, Sharath M. Shankaranarayana. Constrained Monotonic Neural Networks. 40th International Conference on Machine Learning, 2023.\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Imports" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | hide\n", - "\n", - "try:\n", - " import mono_dense_keras\n", - "except:\n", - " !pip install mono_dense_keras\n", - " import mono_dense_keras" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | hide\n", - "\n", - "from contextlib import contextmanager\n", - "from datetime import datetime\n", - "from os import environ\n", - "from pathlib import Path\n", - "from typing import *\n", - "\n", - "import matplotlib\n", - "import matplotlib.pyplot as plt\n", - "import numpy as np\n", - "import pandas as pd\n", - "import pytest\n", - "import seaborn as sns\n", - "import tensorflow as tf\n", - "from keras_tuner import BayesianOptimization, Objective, Tuner\n", - "from numpy.typing import ArrayLike, NDArray\n", - "from tensorflow.keras import Model\n", - "from tensorflow.keras.backend import count_params\n", - "from tensorflow.keras.layers import Dense, Input\n", - "from tensorflow.keras.optimizers.experimental import AdamW\n", - "from tensorflow.types.experimental import TensorLike" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | hide\n", - "\n", - "environ[\"TF_FORCE_GPU_ALLOW_GROWTH\"] = \"true\"" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Monotonic Dense Layer\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Monotonic Dense Layer" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This is an implementation of our Monotonic Dense Unit or Constrained Monotone Fully Connected Layer. The below is the figure from the paper for reference.\n", - "\n", - "In the code, the variable `monotonicity_indicator` corresponds to **t** in the figure and the variable `activation_selector` corresponds to **s**. \n", - "\n", - "Parameters `convexity_indicator` and `epsilon` are used to calculate `activation_selector` as follows:\n", - "- if `convexity_indicator` is -1 or 1, then `activation_selector` will have all elements 0 or 1, respecively.\n", - "- if `convexity_indicator` is `None`, then `epsilon` must have a value between 0 and 1 and corresponds to the percentage of elements of `activation_selector` set to 1." - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "![alternatvie text](images/mono-dense-layer-diagram.png)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from mono_dense_keras import MonoDense, replace_kernel_using_monotonicity_indicator" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "************************************************************************************************************************\n", - "input:\n" - ] + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Experiments\n", + "\n", + "> The code implementing the experiments in the paper:\n", + "> \n", + "> Davor Runje, Sharath M. Shankaranarayana. Constrained Monotonic Neural Networks. 40th International Conference on Machine Learning, 2023.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Imports" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | hide\n", + "\n", + "try:\n", + " import mono_dense_keras\n", + "except:\n", + " !pip install mono_dense_keras\n", + " import mono_dense_keras" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | hide\n", + "\n", + "from contextlib import contextmanager\n", + "from datetime import datetime\n", + "from os import environ\n", + "from pathlib import Path\n", + "from typing import *\n", + "\n", + "import matplotlib\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import pandas as pd\n", + "import pytest\n", + "import seaborn as sns\n", + "import tensorflow as tf\n", + "from keras_tuner import BayesianOptimization, Objective, Tuner\n", + "from numpy.typing import ArrayLike, NDArray\n", + "from tensorflow.keras import Model\n", + "from tensorflow.keras.backend import count_params\n", + "from tensorflow.keras.layers import Dense, Input\n", + "from tensorflow.keras.optimizers.experimental import AdamW\n", + "from tensorflow.types.experimental import TensorLike" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | hide\n", + "\n", + "environ[\"TF_FORCE_GPU_ALLOW_GROWTH\"] = \"true\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Monotonic Dense Layer\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Monotonic Dense Layer" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is an implementation of our Monotonic Dense Unit or Constrained Monotone Fully Connected Layer. The below is the figure from the paper for reference.\n", + "\n", + "In the code, the variable `monotonicity_indicator` corresponds to **t** in the figure and the variable `activation_selector` corresponds to **s**. \n", + "\n", + "Parameters `convexity_indicator` and `epsilon` are used to calculate `activation_selector` as follows:\n", + "- if `convexity_indicator` is -1 or 1, then `activation_selector` will have all elements 0 or 1, respectively.\n", + "- if `convexity_indicator` is `None`, then `epsilon` must have a value between 0 and 1 and corresponds to the percentage of elements of `activation_selector` set to 1." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![alternatvie text](images/mono-dense-layer-diagram.png)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from mono_dense_keras import MonoDense, replace_kernel_using_monotonicity_indicator" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "************************************************************************************************************************\n", + "input:\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 012345678910
00.30-1.040.750.94-1.95-1.300.13-0.32-0.02-0.850.88
10.780.071.130.47-0.860.37-0.960.88-0.05-0.18-0.68
21.22-0.15-0.43-0.350.530.370.410.432.14-0.41-0.51
3-0.810.621.13-0.11-0.84-0.820.650.740.54-0.670.23
40.120.220.870.220.680.070.290.63-1.46-0.32-0.47
5-0.64-0.281.49-0.870.97-1.68-0.330.160.590.710.79
6-0.35-0.460.86-0.19-1.28-1.13-0.920.500.140.69-0.43
70.160.63-0.310.46-0.66-0.36-0.38-1.200.49-0.470.01
80.480.450.67-0.10-0.42-0.08-1.69-1.45-1.32-1.000.40
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "monotonicity_indicator = [1, 1, 1, 1, 0, 0, 0, 0, -1, -1, -1]\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 0
01.00
11.00
21.00
31.00
40.00
50.00
60.00
70.00
8-1.00
9-1.00
10-1.00
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "kernel:\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 01234567891011121314151617
00.330.150.130.410.380.140.430.300.020.120.380.050.420.030.000.240.440.28
10.010.390.420.320.380.220.330.340.030.060.060.270.260.450.350.050.210.34
20.210.290.160.140.420.060.150.100.410.080.030.220.340.200.110.010.430.35
30.270.330.060.170.420.420.240.300.110.200.170.250.170.070.320.300.170.36
40.32-0.250.12-0.370.410.200.06-0.28-0.270.43-0.41-0.17-0.24-0.310.330.310.110.03
50.040.19-0.02-0.340.36-0.120.280.32-0.11-0.400.410.300.06-0.28-0.270.23-0.41-0.12
60.35-0.04-0.280.16-0.030.35-0.03-0.160.39-0.36-0.31-0.180.02-0.38-0.400.390.35-0.19
70.33-0.340.11-0.290.25-0.210.110.08-0.19-0.390.010.100.39-0.25-0.37-0.270.040.34
8-0.27-0.09-0.02-0.45-0.16-0.12-0.09-0.43-0.36-0.09-0.23-0.42-0.28-0.24-0.30-0.31-0.07-0.07
9-0.38-0.34-0.44-0.42-0.32-0.06-0.27-0.28-0.22-0.05-0.08-0.07-0.21-0.39-0.01-0.26-0.24-0.42
10-0.09-0.45-0.41-0.36-0.19-0.09-0.00-0.34-0.17-0.18-0.05-0.39-0.06-0.20-0.40-0.33-0.18-0.01
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "output:\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 01234567891011121314151617
00.010.400.001.380.000.100.00-0.00-0.00-0.13-0.00-0.26-0.00-0.00-0.55-0.520.790.64
10.451.020.960.711.220.000.86-0.00-0.00-0.09-0.00-0.00-0.00-0.000.26-0.170.541.00
20.300.000.330.000.410.000.42-0.53-0.89-0.29-0.23-0.84-0.16-0.93-0.900.080.370.08
30.210.260.330.420.000.000.00-0.16-0.00-0.61-0.53-0.07-0.00-0.00-0.55-0.660.830.78
41.380.490.700.821.470.540.63-0.00-0.00-0.00-0.00-0.00-0.00-0.000.730.970.940.91
50.000.000.000.000.000.000.00-1.86-0.25-0.00-1.57-1.19-0.61-0.230.13-1.000.50-0.06
60.000.000.000.170.000.000.00-0.15-0.00-0.00-0.00-0.00-0.00-0.000.06-1.000.000.12
70.000.960.350.930.000.320.17-0.00-0.00-0.00-0.00-0.00-0.17-0.000.670.060.120.17
80.001.330.921.630.520.000.66-0.00-0.00-0.00-0.00-0.00-0.00-0.001.000.230.180.81
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "************************************************************************************************************************\n", + "input:\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 012345678910
00.30-1.040.750.94-1.95-1.300.13-0.32-0.02-0.850.88
10.780.071.130.47-0.860.37-0.960.88-0.05-0.18-0.68
21.22-0.15-0.43-0.350.530.370.410.432.14-0.41-0.51
3-0.810.621.13-0.11-0.84-0.820.650.740.54-0.670.23
40.120.220.870.220.680.070.290.63-1.46-0.32-0.47
5-0.64-0.281.49-0.870.97-1.68-0.330.160.590.710.79
6-0.35-0.460.86-0.19-1.28-1.13-0.920.500.140.69-0.43
70.160.63-0.310.46-0.66-0.36-0.38-1.200.49-0.470.01
80.480.450.67-0.10-0.42-0.08-1.69-1.45-1.32-1.000.40
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "monotonicity_indicator = 1\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 0
01.00
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "kernel:\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 01234567891011121314151617
00.440.020.240.220.290.350.180.030.390.170.250.020.100.130.000.420.210.31
10.350.060.260.420.050.410.160.330.030.260.110.030.230.040.370.270.320.40
20.370.300.360.140.210.400.010.280.160.440.430.230.270.220.230.250.430.05
30.320.250.050.450.080.180.260.240.340.070.070.140.040.190.290.230.430.09
40.360.050.200.410.380.290.010.440.170.040.310.340.290.160.250.180.010.28
50.340.310.380.340.080.400.150.160.140.250.150.200.100.060.440.190.420.21
60.010.380.430.180.000.430.450.280.250.180.030.260.220.260.080.230.450.42
70.040.120.280.170.110.000.150.240.050.050.270.320.330.110.090.400.190.06
80.300.170.210.420.210.290.190.380.030.340.320.300.340.150.280.110.440.19
90.100.100.350.320.240.280.300.280.100.120.300.410.150.000.100.400.180.24
100.000.220.210.090.100.130.180.370.240.290.250.230.320.140.270.340.250.10
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "output:\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 01234567891011121314151617
00.000.010.000.000.000.000.00-0.93-0.00-0.07-0.58-0.88-0.58-0.00-0.87-0.49-0.05-1.00
10.730.100.220.180.180.160.00-0.23-0.00-0.00-0.00-0.09-0.00-0.000.160.470.53-0.27
21.150.360.821.200.801.060.61-0.00-0.00-0.00-0.00-0.00-0.00-0.000.530.611.000.94
30.000.450.280.000.000.110.14-0.00-0.21-0.00-0.00-0.00-0.00-0.000.150.080.72-0.08
40.340.190.360.050.150.300.00-0.00-0.00-0.08-0.00-0.00-0.00-0.000.060.380.040.14
50.000.000.260.000.670.050.00-0.00-0.16-0.00-0.00-0.00-0.00-0.00-0.080.30-0.17-0.17
60.000.000.000.000.000.000.00-0.76-0.68-0.28-0.11-0.37-0.42-0.40-0.88-0.41-0.67-1.00
70.010.000.000.000.000.000.00-0.45-0.17-0.04-0.57-0.82-0.50-0.22-0.07-0.62-0.13-0.18
80.000.000.000.000.000.000.00-1.32-0.35-0.39-0.77-1.63-1.12-0.60-0.47-0.99-1.00-1.00
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "************************************************************************************************************************\n", + "input:\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 012345678910
00.30-1.040.750.94-1.95-1.300.13-0.32-0.02-0.850.88
10.780.071.130.47-0.860.37-0.960.88-0.05-0.18-0.68
21.22-0.15-0.43-0.350.530.370.410.432.14-0.41-0.51
3-0.810.621.13-0.11-0.84-0.820.650.740.54-0.670.23
40.120.220.870.220.680.070.290.63-1.46-0.32-0.47
5-0.64-0.281.49-0.870.97-1.68-0.330.160.590.710.79
6-0.35-0.460.86-0.19-1.28-1.13-0.920.500.140.69-0.43
70.160.63-0.310.46-0.66-0.36-0.38-1.200.49-0.470.01
80.480.450.67-0.10-0.42-0.08-1.69-1.45-1.32-1.000.40
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "monotonicity_indicator = [1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 0
01.00
11.00
21.00
31.00
41.00
51.00
61.00
71.00
81.00
91.00
101.00
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "kernel:\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 01234567891011121314151617
00.310.020.110.290.100.330.370.060.390.350.150.130.150.450.070.190.030.06
10.120.020.060.410.320.240.340.280.220.060.330.270.250.230.430.090.450.27
20.190.110.190.250.070.420.320.350.150.050.000.240.220.390.440.110.190.10
30.150.370.210.410.250.040.370.040.050.220.310.350.350.080.380.010.250.29
40.170.450.240.320.010.000.190.340.170.190.180.340.020.240.030.410.260.00
50.290.100.070.340.040.300.390.270.390.160.330.450.060.190.230.040.360.04
60.130.150.220.400.140.300.110.450.140.170.260.160.360.100.170.320.140.08
70.250.250.240.450.170.450.300.350.410.400.110.260.320.080.220.340.050.09
80.160.270.100.230.080.210.190.160.060.040.170.050.390.110.260.250.130.05
90.170.170.000.130.120.030.390.110.010.290.430.200.210.430.390.180.190.27
100.260.230.430.040.250.360.210.360.370.360.080.140.250.240.300.330.040.07
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "output:\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 01234567891011121314151617
00.000.000.080.000.000.000.00-0.82-0.58-0.32-1.07-1.09-0.00-0.63-0.21-0.74-1.00-0.15
10.360.000.000.510.110.720.76-0.12-0.00-0.00-0.05-0.00-0.00-0.000.56-0.340.130.22
20.720.680.321.100.100.840.68-0.00-0.00-0.00-0.00-0.00-0.00-0.000.200.970.33-0.07
30.000.000.360.350.360.820.00-0.00-0.00-0.19-0.29-0.13-0.00-0.200.670.20-0.000.14
40.180.140.260.680.090.380.36-0.00-0.00-0.00-0.00-0.00-0.07-0.000.140.150.330.10
50.010.550.500.000.000.210.00-0.00-0.27-0.00-0.44-0.25-0.00-0.000.440.83-0.24-0.01
60.000.000.000.000.000.000.00-0.89-0.85-0.48-0.77-0.90-0.21-0.30-0.09-0.69-0.83-0.03
70.000.000.000.000.010.000.00-0.79-0.59-0.65-0.21-0.55-0.19-0.37-0.17-0.71-0.100.03
80.000.000.000.000.000.000.00-1.24-0.48-0.95-1.13-0.71-1.40-0.30-0.76-1.00-0.47-0.39
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "************************************************************************************************************************\n", + "input:\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 012345678910
00.30-1.040.750.94-1.95-1.300.13-0.32-0.02-0.850.88
10.780.071.130.47-0.860.37-0.960.88-0.05-0.18-0.68
21.22-0.15-0.43-0.350.530.370.410.432.14-0.41-0.51
3-0.810.621.13-0.11-0.84-0.820.650.740.54-0.670.23
40.120.220.870.220.680.070.290.63-1.46-0.32-0.47
5-0.64-0.281.49-0.870.97-1.68-0.330.160.590.710.79
6-0.35-0.460.86-0.19-1.28-1.13-0.920.500.140.69-0.43
70.160.63-0.310.46-0.66-0.36-0.38-1.200.49-0.470.01
80.480.450.67-0.10-0.42-0.08-1.69-1.45-1.32-1.000.40
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "monotonicity_indicator = -1\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 0
0-1.00
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "kernel:\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 01234567891011121314151617
0-0.29-0.12-0.00-0.17-0.33-0.17-0.33-0.36-0.28-0.16-0.24-0.22-0.10-0.13-0.02-0.38-0.23-0.02
1-0.36-0.13-0.05-0.07-0.41-0.30-0.38-0.06-0.40-0.42-0.44-0.03-0.27-0.03-0.32-0.31-0.35-0.40
2-0.30-0.07-0.40-0.06-0.10-0.21-0.16-0.22-0.06-0.36-0.40-0.42-0.23-0.22-0.20-0.33-0.45-0.06
3-0.05-0.08-0.07-0.30-0.44-0.23-0.40-0.25-0.13-0.31-0.11-0.13-0.13-0.34-0.15-0.05-0.36-0.13
4-0.45-0.34-0.41-0.39-0.15-0.10-0.40-0.32-0.19-0.13-0.29-0.39-0.43-0.29-0.13-0.05-0.39-0.01
5-0.09-0.38-0.00-0.12-0.07-0.42-0.01-0.12-0.26-0.28-0.16-0.06-0.08-0.43-0.23-0.28-0.28-0.07
6-0.34-0.38-0.15-0.44-0.41-0.19-0.25-0.41-0.34-0.22-0.43-0.36-0.25-0.28-0.06-0.12-0.15-0.16
7-0.17-0.39-0.40-0.26-0.40-0.20-0.10-0.14-0.42-0.21-0.18-0.25-0.15-0.21-0.13-0.41-0.14-0.14
8-0.38-0.03-0.10-0.21-0.13-0.04-0.19-0.00-0.09-0.38-0.01-0.27-0.24-0.24-0.13-0.18-0.37-0.21
9-0.43-0.08-0.20-0.29-0.10-0.27-0.08-0.43-0.22-0.37-0.27-0.24-0.15-0.22-0.01-0.45-0.35-0.31
10-0.38-0.44-0.20-0.31-0.42-0.23-0.03-0.31-0.11-0.35-0.01-0.00-0.00-0.39-0.45-0.14-0.03-0.10
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "output:\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 01234567891011121314151617
01.050.880.590.610.000.700.64-0.00-0.00-0.00-0.00-0.00-0.00-0.000.240.741.000.55
10.270.260.000.410.000.000.00-0.00-0.23-0.33-0.21-0.20-0.00-0.02-0.04-0.82-0.52-0.02
20.000.000.000.000.000.000.00-0.36-0.77-0.71-0.39-1.00-0.82-0.67-0.11-0.74-0.97-0.31
30.000.000.000.000.000.010.00-0.00-0.15-0.50-0.38-0.33-0.20-0.00-0.39-0.20-0.12-0.36
40.000.000.000.000.000.000.00-0.45-0.46-0.00-0.84-0.48-0.36-0.13-0.08-0.28-0.330.13
50.000.020.000.000.120.330.00-0.41-0.00-0.44-0.33-0.90-0.56-0.04-0.24-0.27-0.48-0.16
60.741.200.110.900.840.650.87-0.00-0.00-0.00-0.00-0.00-0.00-0.000.600.010.530.12
70.470.890.910.620.260.370.01-0.00-0.00-0.00-0.00-0.00-0.00-0.000.070.610.290.01
81.301.170.981.611.090.590.65-0.00-0.00-0.00-0.00-0.00-0.00-0.000.090.930.940.81
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "************************************************************************************************************************\n", + "input:\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 012345678910
00.30-1.040.750.94-1.95-1.300.13-0.32-0.02-0.850.88
10.780.071.130.47-0.860.37-0.960.88-0.05-0.18-0.68
21.22-0.15-0.43-0.350.530.370.410.432.14-0.41-0.51
3-0.810.621.13-0.11-0.84-0.820.650.740.54-0.670.23
40.120.220.870.220.680.070.290.63-1.46-0.32-0.47
5-0.64-0.281.49-0.870.97-1.68-0.330.160.590.710.79
6-0.35-0.460.86-0.19-1.28-1.13-0.920.500.140.69-0.43
70.160.63-0.310.46-0.66-0.36-0.38-1.200.49-0.470.01
80.480.450.67-0.10-0.42-0.08-1.69-1.45-1.32-1.000.40
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "monotonicity_indicator = [-1. -1. -1. -1. -1. -1. -1. -1. -1. -1. -1.]\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 0
0-1.00
1-1.00
2-1.00
3-1.00
4-1.00
5-1.00
6-1.00
7-1.00
8-1.00
9-1.00
10-1.00
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "kernel:\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 01234567891011121314151617
0-0.45-0.28-0.30-0.41-0.17-0.39-0.22-0.45-0.28-0.40-0.18-0.20-0.16-0.18-0.10-0.13-0.14-0.35
1-0.09-0.27-0.09-0.14-0.02-0.36-0.21-0.05-0.05-0.01-0.02-0.45-0.03-0.09-0.01-0.05-0.39-0.05
2-0.17-0.15-0.37-0.35-0.32-0.03-0.24-0.31-0.35-0.41-0.00-0.37-0.18-0.26-0.09-0.44-0.09-0.17
3-0.42-0.17-0.11-0.31-0.32-0.11-0.20-0.10-0.34-0.15-0.24-0.22-0.22-0.08-0.40-0.02-0.23-0.38
4-0.13-0.17-0.06-0.13-0.32-0.42-0.28-0.44-0.03-0.26-0.38-0.45-0.08-0.06-0.04-0.33-0.27-0.38
5-0.32-0.38-0.19-0.19-0.33-0.01-0.15-0.08-0.31-0.27-0.07-0.11-0.21-0.22-0.18-0.27-0.19-0.15
6-0.30-0.16-0.09-0.25-0.23-0.44-0.25-0.16-0.05-0.13-0.20-0.09-0.14-0.18-0.15-0.22-0.37-0.38
7-0.20-0.14-0.12-0.10-0.42-0.42-0.14-0.04-0.44-0.11-0.10-0.17-0.06-0.29-0.22-0.24-0.01-0.45
8-0.31-0.11-0.16-0.21-0.16-0.39-0.12-0.36-0.36-0.29-0.24-0.24-0.20-0.18-0.33-0.39-0.20-0.02
9-0.41-0.14-0.12-0.21-0.01-0.37-0.03-0.22-0.38-0.22-0.09-0.22-0.19-0.17-0.13-0.32-0.30-0.21
10-0.31-0.05-0.02-0.36-0.04-0.15-0.03-0.12-0.36-0.21-0.40-0.03-0.04-0.03-0.23-0.01-0.02-0.41
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "output:\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 01234567891011121314151617
00.200.840.110.000.551.240.55-0.00-0.02-0.00-0.00-0.00-0.00-0.00-0.200.981.000.30
10.000.000.000.000.000.190.00-0.14-0.87-0.50-0.00-0.34-0.28-0.53-0.24-0.340.23-0.09
20.000.000.000.000.000.000.00-1.34-0.82-1.02-0.75-0.74-0.56-0.68-0.71-1.00-0.65-0.56
30.230.180.000.000.000.000.00-0.00-0.27-0.00-0.00-0.21-0.00-0.28-0.21-0.240.020.00
40.090.000.000.000.000.000.00-0.08-0.00-0.14-0.00-0.50-0.01-0.250.23-0.20-0.14-0.66
50.180.490.000.000.030.000.00-0.79-0.36-0.49-0.39-0.69-0.00-0.090.08-0.840.10-0.25
60.640.760.080.500.620.790.68-0.00-0.06-0.00-0.00-0.00-0.00-0.000.280.240.860.87
70.320.240.230.180.760.620.28-0.00-0.00-0.00-0.00-0.00-0.00-0.000.130.730.090.87
81.230.500.270.511.082.000.60-0.00-0.00-0.00-0.00-0.00-0.00-0.001.001.001.001.00
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ok\n" + ] + } + ], + "source": [ + "units = 18\n", + "activation = \"relu\"\n", + "batch_size = 9\n", + "x_len = 11\n", + "\n", + "tf.keras.utils.set_random_seed(42)\n", + "\n", + "\n", + "def display_kernel(kernel: Union[tf.Variable, np.typing.NDArray[float]]) -> None:\n", + " cm = sns.color_palette(\"coolwarm_r\", as_cmap=True)\n", + "\n", + " df = pd.DataFrame(kernel)\n", + "\n", + " display(\n", + " df.style.format(\"{:.2f}\").background_gradient(cmap=cm, vmin=-1e-8, vmax=1e-8)\n", + " )\n", + "\n", + "\n", + "x = np.random.default_rng(42).normal(size=(batch_size, x_len))\n", + "\n", + "for monotonicity_indicator in [\n", + " [1] * 4 + [0] * 4 + [-1] * 3,\n", + " 1,\n", + " np.ones((x_len,)),\n", + " -1,\n", + " -np.ones((x_len,)),\n", + "]:\n", + " print(\"*\" * 120)\n", + " mono_layer = MonoDense(\n", + " units=units,\n", + " activation=activation,\n", + " monotonicity_indicator=monotonicity_indicator,\n", + " activation_weights=(7, 7, 4),\n", + " )\n", + " print(\"input:\")\n", + " display_kernel(x)\n", + "\n", + " y = mono_layer(x)\n", + " print(f\"monotonicity_indicator = {monotonicity_indicator}\")\n", + " display_kernel(mono_layer.monotonicity_indicator)\n", + "\n", + " print(\"kernel:\")\n", + " with replace_kernel_using_monotonicity_indicator(\n", + " mono_layer, mono_layer.monotonicity_indicator\n", + " ):\n", + " display_kernel(mono_layer.kernel)\n", + "\n", + " print(\"output:\")\n", + " display_kernel(y)\n", + "print(\"ok\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: \"model\"\n", + "_________________________________________________________________\n", + " Layer (type) Output Shape Param # \n", + "=================================================================\n", + " input_1 (InputLayer) [(None, 5, 7, 8)] 0 \n", + " \n", + " mono_dense_5 (MonoDense) (None, 5, 7, 12) 108 \n", + " \n", + "=================================================================\n", + "Total params: 108\n", + "Trainable params: 108\n", + "Non-trainable params: 0\n", + "_________________________________________________________________\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 0
01.00
11.00
21.00
3-1.00
4-1.00
5-1.00
60.00
70.00
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "x = Input(shape=(5, 7, 8))\n", + "\n", + "layer = MonoDense(\n", + " units=12,\n", + " activation=activation,\n", + " monotonicity_indicator=[1] * 3 + [-1] * 3 + [0] * 2,\n", + " is_convex=False,\n", + " is_concave=False,\n", + ")\n", + "\n", + "y = layer(x)\n", + "\n", + "model = Model(inputs=x, outputs=y)\n", + "\n", + "model.summary()\n", + "\n", + "display_kernel(layer.monotonicity_indicator)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Architectures using Monotonic Dense Layer" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Common monotonic block\n", + "\n", + "Creates multiple layers of Monotonic Dense layers with Dropout layers in between them. The final layer does have non-linear activation to make it easier to use different activation functions for the prediction." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from tensorflow.keras.layers import Dropout\n", + "\n", + "\n", + "def create_mono_block(\n", + " *,\n", + " units: List[int],\n", + " activation: Union[str, Callable[[TensorLike], TensorLike]],\n", + " monotonicity_indicator: TensorLike = 1,\n", + " is_convex: bool = False,\n", + " is_concave: bool = False,\n", + " dropout: Optional[float] = None,\n", + ") -> Callable[[TensorLike], TensorLike]:\n", + " def create_mono_block_inner(\n", + " x: TensorLike,\n", + " *,\n", + " units: List[int] = units,\n", + " activation: Union[str, Callable[[TensorLike], TensorLike]] = activation,\n", + " monotonicity_indicator: TensorLike = monotonicity_indicator,\n", + " is_convex: bool = is_convex,\n", + " is_concave: bool = is_concave,\n", + " ) -> TensorLike:\n", + " if len(units) == 0:\n", + " return x\n", + "\n", + " y = x\n", + " for i in range(len(units)):\n", + " y = MonoDense(\n", + " units=units[i],\n", + " activation=activation if i < len(units) - 1 else None,\n", + " monotonicity_indicator=monotonicity_indicator if i == 0 else 1,\n", + " is_convex=is_convex,\n", + " is_concave=is_concave,\n", + " name=f\"mono_dense_{i}\"\n", + " + (\"_increasing\" if i != 0 else \"\")\n", + " + (\"_convex\" if is_convex else \"\")\n", + " + (\"_concave\" if is_concave else \"\"),\n", + " )(y)\n", + " if (i < len(units) - 1) and dropout:\n", + " y = Dropout(dropout)(y)\n", + "\n", + " return y\n", + "\n", + " return create_mono_block_inner" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: \"model_1\"\n", + "_________________________________________________________________\n", + " Layer (type) Output Shape Param # \n", + "=================================================================\n", + " input_2 (InputLayer) [(None, 5, 7, 8)] 0 \n", + " \n", + " mono_dense_0 (MonoDense) (None, 5, 7, 16) 144 \n", + " \n", + " dropout (Dropout) (None, 5, 7, 16) 0 \n", + " \n", + " mono_dense_1_increasing (Mo (None, 5, 7, 16) 272 \n", + " noDense) \n", + " \n", + " dropout_1 (Dropout) (None, 5, 7, 16) 0 \n", + " \n", + " mono_dense_2_increasing (Mo (None, 5, 7, 16) 272 \n", + " noDense) \n", + " \n", + " dropout_2 (Dropout) (None, 5, 7, 16) 0 \n", + " \n", + " mono_dense_3_increasing (Mo (None, 5, 7, 3) 51 \n", + " noDense) \n", + " \n", + "=================================================================\n", + "Total params: 739\n", + "Trainable params: 739\n", + "Non-trainable params: 0\n", + "_________________________________________________________________\n" + ] + } + ], + "source": [ + "x = Input(shape=(5, 7, 8))\n", + "\n", + "# monotonicity indicator must be broadcastable to input shape, so we use the vector of length 8\n", + "monotonicity_indicator = [1] * 3 + [0] * 2 + [-1] * 3\n", + "\n", + "# this mono block has 4 layers with the final one having the shape\n", + "mono_block = create_mono_block(\n", + " units=[16] * 3 + [3],\n", + " monotonicity_indicator=monotonicity_indicator,\n", + " activation=\"elu\",\n", + " dropout=0.1,\n", + ")\n", + "y = mono_block(x)\n", + "model = Model(inputs=x, outputs=y)\n", + "model.summary()\n", + "\n", + "mono_layers = [layer for layer in model.layers if isinstance(layer, MonoDense)]\n", + "assert not (mono_layers[0].monotonicity_indicator == 1).all()\n", + "for mono_layer in mono_layers[1:]:\n", + " assert (mono_layer.monotonicity_indicator == 1).all()\n", + "\n", + "for mono_layer in mono_layers[:-1]:\n", + " assert mono_layer.org_activation == \"elu\"\n", + "assert mono_layers[-1].org_activation == None" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Type-1 architecture" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The function `build_monotonic_type1_model()` can be used to build Neural Network models as shown in the figure below and is referred to in the paper as *Neural architecture type 1*. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![Screenshot 2022-05-20 at 08.05.56.png](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABfkAAAJKCAYAAACf2U8gAAABR2lDQ1BJQ0MgUHJvZmlsZQAAKJFjYGASSSwoyGFhYGDIzSspCnJ3UoiIjFJgf8bAyiDCwMbAx8CTmFxc4BgQ4ANUwgCjUcG3awyMIPqyLsismKtPT9o6+zSm8rMYPFt7VR9TPQrgSkktTgbSf4A4LbmgqISBgTEFyFYuLykAsTuAbJEioKOA7DkgdjqEvQHEToKwj4DVhAQ5A9k3gGyB5IxEoBmML4BsnSQk8XQkNtReEOBxcfXxUQg1Mje0dCHgXNJBSWpFCYh2zi+oLMpMzyhRcASGUqqCZ16yno6CkYGREQMDKMwhqj8HgcOSUWwfQix/CQODxTcGBuaJCLGkKQwM29sYGCRuIcRU5jEw8LcwMGw7VJBYlAh3AOM3luI0YyMIm8eegYH17v//nzUYGNgnMjD8nfj//+/F////XQw0/zYDw4FKAKT1X/+fuz5FAAAAVmVYSWZNTQAqAAAACAABh2kABAAAAAEAAAAaAAAAAAADkoYABwAAABIAAABEoAIABAAAAAEAAAX5oAMABAAAAAEAAAJKAAAAAEFTQ0lJAAAAU2NyZWVuc2hvdMZzHvIAAAHXaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA1LjQuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjE1Mjk8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpVc2VyQ29tbWVudD5TY3JlZW5zaG90PC9leGlmOlVzZXJDb21tZW50PgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+NTg2PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Culg+vEAAEAASURBVHgB7N0JvG1j/Tjg15AxU2UKSWRIyFhkDomIRAmFjJnJrMhQ5syFBkmZKSK65mQIKaVrnjOT6Wa2/+/3/f/Wbp9zzzl333PPsNe5z/v53Lv3XuO7nrXOGr7rHSZp5JQkAgQIECBAgAABAgQIECBAgAABAgQIECBAoHYCk9YuxzJMgAABAgQIECBAgAABAgQIECBAgAABAgQIFAFBfgcCAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAIHJERAg0DkC9913X9p///07J0NyQmAIBI499tg011xzDcGarILAwAi8/PLLaautthqYhVkKgRoIzDrrrOmkk06qQU5lkQCBENhvv/3S/fffD4PARCPwuc99Lm233XYTzfbaUAIECPQkIMjfk4phBIZJ4IUXXkgXXHBB+sAHPpCmnnrqYcqF1RIYGoExY8akl156KR144IGC/ENDbi0DJPDmm2+Wc/X000+fpptuugFaqsUQ6EyBuDeZY445OjNzckWAQI8C11xzTbrzzjvTzDPP3ON4AwmMJIEnn3wyzTDDDCNpk2wLAQIE+iUgyN8vNjMRGFyBU045JX31q18d3JVYOoFhFjj99NPTNttsM8y5sHoC/RfYe++9S2nJ/i/BnAQ6X2CdddZJo0eP7vyMyiEBAl0EllhiiXTzzTd3GeYHgZEooMDFSNyrtokAgf4IaJO/P2rmIUCAAAECBAgQIECAAAECBAgQIECAAAECHSAgyN8BO0EWCBAgQIAAAQIECBAgQIAAAQIECBAgQIBAfwQE+fujZh4CBAgQIECAAAECBAgQIECAAAECBAgQINABAoL8HbATZIEAAQIECBAgQIAAAQIECBAgQIAAAQIECPRHQJC/P2rmIUCAAAECBAgQIECAAAECBAgQIECAAAECHSAgyN8BO0EWCBAgQIAAAQIECBAgQIAAAQIECBAgQIBAfwQE+fujZh4CBAgQIECAAAECBAgQIECAAAECBAgQINABAoL8HbATZIEAAQIECBAgQIAAAQIECBAgQIAAAQIECPRHQJC/P2rmIUCAAAECBAgQIECAAAECBAgQIECAAAECHSAgyN8BO0EWCBAgQIAAAQIECBAgQIAAAQIECBAgQIBAfwQE+fujZh4CBAgQIECAAAECBAgQIECAAAECBAgQINABAoL8HbATZIEAAQIECBAgQIAAAQIECBAgQIAAAQIECPRHQJC/P2rmIUCAAAECBAgQIECAAAECBAgQIECAAAECHSAgyN8BO0EWCBAgQIAAAQIECBAgQIAAAQIECBAgQIBAfwQE+fujZh4CBAgQIECAAAECBAgQIECAAAECBAgQINABAoL8HbATZIEAAQIECBAgQIAAAQIECBAgQIAAAQIECPRHQJC/P2rmIUCAAAECBAgQIECAAAECBAgQIECAAAECHSAgyN8BO0EWCBAgQIAAAQIECBAgQIAAAQIECBAgQIBAfwQE+fujZh4CBAgQIECAAAECBAgQIECAAAECBAgQINABAoL8HbATZIEAAQIECBAgQIAAAQIECBAgQIAAAQIECPRHQJC/P2rmIUCAAAECBAgQIECAAAECBAgQIECAAAECHSAgyN8BO0EWCBAgQIAAAQIECBAgQIAAAQIECBAgQIBAfwQE+fujZh4CBAgQIECAAAECBAgQIECAAAECBAgQINABAoL8HbATZIEAAQIECBAgQIAAAQIECBAgQIAAAQIECPRHQJC/P2rmIUCAAAECBAgQIECAAAECBAgQIECAAAECHSAgyN8BO0EWCBAgQIAAAQIECBAgQIAAAQIECBAgQIBAfwQE+fujZh4CBAgQIECAAAECBAgQIECAAAECBAgQINABAoL8HbATZIEAAQIECBAgQIAAAQIECBAgQIAAAQIECPRHQJC/P2rmIUCAAAECBAgQIECAAAECBAgQIECAAAECHSAgyN8BO0EWCBAgQIAAAQIECBAgQIAAAQIECBAgQIBAfwQE+fujZh4CBAgQIECAAAECBAgQIECAAAECBAgQINABAoL8HbATZIEAAQIECBAgQIAAAQIECBAgQIAAAQIECPRHQJC/P2rmIUCAAAECBAgQIECAAAECBAgQIECAAAECHSAgyN8BO0EWCBAgQIAAAQIECBAgQIAAAQIECBAgQIBAfwQE+fujZh4CBAgQIECAAAECBAgQIECAAAECBAgQINABAoL8HbATZIEAAQIECBAgQIAAAQIECBAgQIAAAQIECPRHQJC/P2rmIUCAAAECBAgQIECAAAECBAgQIECAAAECHSAgyN8BO0EWCBAgQIAAAQIECBAgQIAAAQIECBAgQIBAfwQE+fujZh4CBAgQIECAAAECBAgQIECAAAECBAgQINABAoL8HbATZIEAAQIECBAgQIAAAQIECBAgQIAAAQIECPRHQJC/P2rmIdCmwOOPP56eeuqpNqc2GQECBAgMtcBf//rX9Pbbbw/1aq2PAAECBAiMU+Chhx5Kzz///DinMwEBAgQIECBAQJDfMUBgEAVmmWWWtNJKK6UddtghPfbYY4O4JosmQIAAgf4IPPvss2mBBRZIP/7xj9Nbb73Vn0WYhwABAgQIDIrAhz70obTkkkum3XbbLT3zzDODsg4LJUCAAAECBEaGgCB/B+zHhx9+OJ166qnpO9/5TvrZz36WosTGfffdVwIOHZA9WZgAgSmnnLLclJ9yyilp7rnnTttvv3169NFHJ2CJZiVAYKgF3nvvvXTppZemgw8+OB100EHpmmuuSW+88UY6+eST04MPPjjU2bG+ARZYc801U+zjb3/72ylezEaw/8033xzgtVgcAQIEBkfANWpwXDtlqdNPP33adttt03HHHZdmm2228lzx5JNPdkr25IMAAQIECBDoIAFB/mHeGeeff35aZJFF0nbbbVcCC1tvvXWad9550yc/+cn0i1/8YphzZ/UDIfCtb32ruZif/OQnab755kuxn+NljkSAQGcLvPbaa2mNNdZI6667bjrwwAPT0UcfnT73uc+leOjecccd07333tvZGyB3bQnEi/ZIL7/8cgn2zzPPPOmEE05Ir7/+elvzm4gAAQLDIeAaNRzqQ7/OnXfeubnSCPbHNSruQaJZUIkAAQIECBAgUAkI8lcSw/AZbbVHAHjMmDFpwQUXTC+88EIpwf+1r32ttA8cN+5S/QWmmGKKdNpppzU35J133ik1Nuaff/60+eabl33eHOkLAQIdJfD9738/XX311SVP8eL1xRdfTOecc056//vfX4Y5T3fU7up3Zj7/+c+n5ZdfPk066f+/LYomEXbZZZf00Y9+NB177LHlOt3vhZuRAAECgyTgGjVIsB222LjnOPLII5u5iqblopZwFAyLgmKPPPJIc5wvBAgQIECAwMQrIMg/jPs+mn949dVXSw5eeeWVEuSPUt5nnXVWWnnllZPg0TDunAFedQTzI1hUBZAajUZ6991305lnnpkWWmihtOmmm6bRo0cP8FotjgCBCRX49a9/3VxENK0WL+2++tWvpqiFFcl5uslT+y+HHHJIabYnNiSav4gUnR3uscce5fx9xBFH2N9FxX8ECHSKgGtUp+yJwc9H9O8188wzd3mWiE7joyDRxz/+8bTVVltpQnDwd4M1ECBAgACBjhYQ5B/G3RMBoypF24qf+cxn0p/+9Kc02WSTpWOOOUbJwQqnwz4jQB8BoCiRHyVpom3u//73v2V/xUubaO7hP//5T3lpEwGi6NQxamlEVdsqcFRtUrWs3/zmN2nhhRdO+++/fzXKJwECwywQ7bJHjasqRZv80a9GNOESTfZEEz6C/JVOZ31WL1IjABL7sTpPx/6Kl+ovvfRS8zz93HPPlc4Mo/PdZZddthlAiS2qztlRg2OfffZJH/nIR1K8DIhlSAQIEBhOAdeo4dSfsHVX16juzxJxjer+LBHXqHiWiOtOBPqr61KVg1hWLOfnP/956UR+s80205RgheOTAAECBAhMZAKTT2Tb21GbG+0ptqYnnniilODfb7/9StvPt956a+voWnyPTinjhUXcgLb+q4LZrcPie0/Dh2tYu/mJ/E1ImmSSScp2ty6jWua1115bBkfJrCgtLBEgMHwC0XH27LPP3iXQH/1q3HDDDenss89OZ5xxxlgP28OX2/bWHB1//+AHP+hyfm733DcY0w3GMuN8Wp1T21MZ91SRz0jxAvd73/teacJn3HOZggABAoMnMBKvUaG11157lXNtnMfj3Nv6b6CHDdY1qDXPPa1joK9R4RbLjFrCUSM87lHi/mXOOeeMURIBAgQIECAwkQgI8g/jjt5ggw1KycAIGlQpbgQPPfTQdMstt6Tf/e531eCxPqMU4gUXXFCqZo41chgHRBNE99xzTykJGU3TVP8isF19rz57Ghbjehre07CY9n3ve1+X5fY0XbvDxmfd7S6zdbqnn346HX/88T0Gn2Ldse9je6LkafTLIBEgMPwC0Ul2lOBvTf/617/SMsssk84777xSmr91XHyPlwB333136WT7s5/9bJpmmmm6TzJsv6NE+q9+9asu583BPPe1nqNbz4exzt7W29vwduefkOkuv/zysv962kGRrzhPL7744unwww9P0Y6/RIAAgeEUaPcaFaXB4z60SlEraYYZZqh+dtTnRRddVPI6IefyduedfPLJx7oeDuc1aFzrjrb3q47iu++06hoV7fdHgYToPF4iQIAAAQIEJi4BQf5h3N8f/OAHU5TY/vKXv1yaEmjNylVXXZXWWmutdM0115Sbz2rcY489lo477rh0+umnlyYjov3FTkp33HFHJ2Wno/ISL3WqG/AqY9XvKG3z3e9+t7TPv9JKK5Umm6ppfBIgMHwC++67b/rLX/6Srrjiii6ZiGYSvvKVr6RLLrkkrbnmmmVcVKWPJnyuv/765rQf+tCHSse9iy66aHPYcH6JAHU0LyaNLRDNIUQnlt1TdZ5eddVVS1M90bReTCsRIEBguAXavUbdd999pQBJ1BqOFEHgbbfddriz3+P6H3jggR6HG5hSXIeqa1LlUf2ee+65S03wTTbZJMXLixNPPLGaxCcBAgQIECAwkQhok3+Yd/QXvvCFEhCKTlm7pwgURYn+SHFTHp2zzjvvvOlHP/qRdqC7Y3X473/+85/p4osvLqVAI6txQx5plllmKTfhDz74YHnYilKvEgECnSMw1VRTlVpVu+yyy1iZilo3xx57bHP4lltu2SXAHyOiX4411lijtJfbnNCXjhSIfRn9LVSpOk+vsMIKpXT/qFGjSt851XifBAgQGG6Bdq9RUats/fXXH+7sWv8ECPz5z39O0axn1CiLVF2j5phjjlL46957703f/OY3S4B/AlZjVgIECBAgQKDGAoL8w7jzIoB/7rnnlmYf7rzzzrThhhuOlZvLLrusDJt22mnTHnvska688sqxpjGg8wWiCaZoKzOqD0eKWhwRUHrooYfSjjvumKJdVYkAgc4TOOCAA0oTWlGDKppQi7/d1hQvY6OjvPvvv790nB7T/O1vfysP2tV0zzzzTLrxxhurnz47UCA6Rz/qqKNKzqrASXTCG7XprrvuuhSBfokAAQKdJtDuNSry3f361WnbIj99C1Q1zapnidlmmy2dcsopKWo+RM1uBYX69jOWAAECBAhMDAKC/MO4lx9//PG06667pmj2YcYZZyztOx9zzDFdchQdKEWaaaaZSjvAEXSQ6iUQfRTEy5xIsR+POOKI9PDDD6fddtstTT311PXaGLklMJEJRA2cn/70p2WroymeCOAvtNBCTYWqRN0bb7yR/vCHP5TmehZbbLF02mmndQmoTDfddM15fOk8gQiUVftyqaWWKi/U48XMKqus0nmZlSMCBAj8n0C716jewOJ+NO5Tq3/R55fUeQLRbGDUJosUtYCjvf2oBbz99tunKaaYovMyLEcECBAgQIDAsAgI8g8L+/9faXSMFJ1gtTYDsfvuu5fOGqtsdQ8wRBuLUr0EDjvssJLhuBGPDrP22muvFDUzJAIEOl8gztMHHXRQGj16dMnsnHPOmfbff/9mxiMgHNMsssgiaYkllmgOj4fuhRdeuPyOdvlbxzUn8qUjBCKodfbZZ5emD37/+9+nW2+9tTSx1BGZkwkCBAj0IdDuNaq3RVx44YUp+oyJl9dRYziC/lLnCRxyyCElU/vss0/ZRzvttFOKppokAgQIECBAgECrgCB/q8YQf48b80innnpqaW8/mm656aab0pNPPlmGR/AoOmGV6isQnTMuuOCCKYJIUaVWad767ks5nzgF4jwdf7/R2d3555+fnnrqqRQdo0eKZl2iRk5PKWpo3XbbbWXUeuut12yqq6dpDRtegWiO54wzzij9Jqy99trDmxlrJ0CAwHgI9PcaVa0iOpCPJiOjSbpoIjQ6Z5c6S+DRRx8tTcZF04A//OEP1QLurN0jNwQIECBAoKMEFAsfxt1RBXwjCHzeeeelX//6183cfPrTn06XX365UhpNkXp+iSq1raV+67kVck1g4hWI83S0YxwB/Y022qgJMc0005SgSOuw5sj8JTrIi05c55prrnTkkUe2jvK9wwTiJYxEgACBOgr09xoV2xqFitZcc810/PHHp+g4XupMgbnnnrvUAu7M3MkVAQIECBAg0EkCgvzDuDc+9rGPlTac4wY7gkHR3mI037P88sunOeaYYxhzZtUECBAgEALRvNZJJ52UopmeaMYgztNxfo4Xsb11chedbEfV+hgfL2+jLw6JAAECBAgMtEB/rlGRhyeeeCKtvPLK5bq25JJLDnS2LI8AAQIECBAgQGAYBAT5hwG9WuX0009fStDE7+iAVdM8lYxPAgQIdIbAcsst18zIPPPMk+LfuNKJJ56Y/vSnP5V23ldYYYVxTW48AQIECBDol0B/rlGxokMPPbS5vm984xuleTkduDZJfCFAgAABAgQI1FJAm/y13G0yTYAAAQKdKHDHHXekfffdN/3sZz9LG264YcnimDFjmi90OzHP8kSAAAECE5fA3nvvnRZbbLGy0XfddVc68MADJy4AW0uAAAECBAgQGIECgvw126nvvvtuM8fvvfde87svBAgQIDC8AtHR9vrrr5+iuZ5opmeNNdYoneXNN998vTbtM7w5tnYCBAgQmFgE4tpUpaiVduaZZ6aq9P5RRx2Vbr755mq0TwIECBAgQIAAgRoKCPLXbKc9/vjjzRzHzXp0miURIECAwPAKvP3226Xkfpyjo4+VUaNGlX833nhj6WtliSWWGN4MWjsBAgQITNQCr732WnP7n3rqqbToooum/fbbrwyLQkSbbrppeuWVV5rT+EKAAAECBAgQIFAvAUH+muyvKCEabWauvvrqXXK84oorpj333LPLMD8IECBAYGgFoqPdG264odeVCvL3SmMEAQIECAyywKWXXppOPfXU5lpOPvnkcs2acsopm8MeeuihtPjii6d///vfzWG+ECBAgAABAgQI1EdAx7s12VezzDJLqVZbk+zKJgECBCYqgYMPPjjFP4kAAQIECHSawDrrrJNeffXVsbIVhYX22WefsYYbQIAAAQIECBAgUD8BJfnrt8/kmAABAgQIECBAgAABAgQIECBAgAABAgQIFAFBfgcCAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqcDkNc23bBMgQIAAAQIECBAgQIAAAQIECBAgMIwC1157bXrzzTeHMQcT76rnnnvutNBCC028ALa8i4AgfxcOPwgQIECAAAECBAgQIECAAAECBAgQaEdg4403Ts8880w7k5pmgAV22mmndMIJJwzwUi2urgKC/HXdc/JNgAABAgQIECBAgAABAgQIECBAYJgFVlpppbTPPvsMcy4mrtWvtdZaE9cG29pxCgjyj5PIBAQIEBg4gVdffTU99dRTaf755x+4hVoSAQIECAyogHP1gHJaGAECBAgQIDDCBWafffa05pprjvCt7KzNm2SSSTorQ3Iz7AKC/MO+C2SAwMgUOOSQQ9Lo0aPLxsXF5+STT04zzjhjrxt7ySWXpHPOOaeMn2yyydLOO++cll566V6nr+uIr3zlK+mPf/xjuvvuu9MnPvGJum6GfBMgMEIEnKt73pHO1T27GEqAAAECBAgQIECAQGcKCPJ35n6RKwK1FzjggAPSWWedlb7xjW+UbVl44YXTfvvt1+N2NRqNtPfee6d77rknRccx119/ffnsceIhGHjbbbcN2guGddZZJ8X2zjnnnEOwJVZBgACBvgWcq3v2ca7u2cVQAgQIECBAgAABAgQ6U2DSzsyWXBEgUHeBKL3f2kZcdAbzxhtv9LhZl156aQnwx8jFFltsWAP8o0aNSieeeGKP+RyIgTvuuGMpyT/99NMPxOIsgwABAhMk4FzdM59zdc8uhhIgQIAAAQIECBAg0JkCgvyduV/kisCIEJhmmmnSpJNOmpZZZpn0zDPPpF/+8pc9btdRRx2Vll122TIu5hmu9Pzzz6dtt912uFZvvQQIEBgWAefqYWG3UgIECBAgQIAAAQIECAyYgCD/gFFaEAECvQnstddeZdTRRx+d3nvvvS6T3Xrrrekf//hH2mabbboMr36888476aSTTkpf+MIX0qc//em01VZblfbsq/EvvvhiOvbYY9MSSyyRHnnkkdL2/3LLLZfWXnvt9M9//rOarHz2tazIQ8z38MMPp+uuuy5961vfavYREDPfeeedadddd01LLrlkyctxxx3XZVtuuOGGtMkmm6Tdd9893XvvvWmLLbZIiy++eIr2rqv07LPPpsMPP7zUVvjPf/5TDS6f0UTQxhtvnD75yU+mzTffPF1++eVdxvtBgACBwRaow7k6DHo7V/d1jo/52r1e9Haufuutt9Khhx6aVlxxxZKHI444IsW0EgECBAgQIECAAAECBIZbQJv8w70HrJ/ARCCw/vrrp/nmmy898MAD6aKLLkrRoWGVohR/lJ7vrfmarbfeOv39739P0aTP66+/njbYYIP0mc98JkVHvausskr6zne+ky6++OL00ksvpW9+85tp6qmnTh/4wAfSZZddlp588skSnK/W1deyFlhggXTYYYeljTbaKC200EJlWbPPPnuZNdYf64q8xjQ//elPS8D/mmuuSb/97W9LQD7GRaA/5r3qqqtKm/5PP/10+t73vpcWXXTR8tJhjz32KHkdM2ZMevPNN6tspfPPP7+8FIiXIMccc0zacMMNy/Sx/FivRIAAgaEQqMO5Os6JvZ2r+zrHt3u9iBcFPZ2rI8C/wgorpOmmm6406XbfffeV60Wc9+N6IxEgQIAAAQIECBAgQGBYBXIHkBIBAh0icNNNNzXyCaFxzjnndEiOJiwb//3vfxu5uZ6ykB//+Mdl25ZaaqnmQu+///5GDso3/v3vfzcuvPDCMv5rX/tac/zpp59ehv35z39uDrv55pvLsI9//OONt99+uwzPnfuWYbnEf3O6XIq+DMsB9TKsnWU99dRTZZ7NNtusuZxc86Ax11xzNVZfffXmsPjy+c9/vkx7xhlnlOEPPfRQ+f2JT3yikZsmKsN+97vflWG5dGz5Hf+tu+66ZVisK1Iu0d+YeeaZG7mmQvkd/5199tmN3E52I78gaA4biV9OO+20YpFrUYzEzbNNI1gg/sbjXJ2DzSNiK0fCubqdc3zsrHauFzFd93N17OvY57n2WYwuKb/ULdew8BvJ6Ytf/GJj3nnnHcmbaNsIjDiBXPu1kQvFjLjtskEEehJ4//vf38i1sHsaZdgQCcw666yN1uf4IVrtRL+aiLXstNNOE70DgP8JaK5nWF+xWDmBiUcgStnnYHa6/fbbU5RQjxTN7OSbgfThD3+4R4iqdGSUhK9SlOKP3/kFQbrrrrvK4Kod/zXWWKOaLC288MLle9WUQrvLai7g/77EOh5//PGyztZxVdv9+eVEGRw1CCJ96lOfSrPMMkv5XuUh+iOoUpXX6nd+aZGee+659KUvfakaVEyiFsBBBx3UHOYLAQIEhkKgrufqds/x1Tm4r+tFOFfTVeb5pW2K2l1LL710NSj97W9/S/kldalB1hzoCwECBAgQIECAQEcJjB49OuVCGYOSp3jWjxqeEoFOEBDk74S9IA8EJgKBCILnt8xlS4888sgUndxGR7zR3E5v6cYbbyyjul+Qo+mfSI8++mj5zKXey2frf9NOO235WfUB0O6yWpcR39udLzoY7p665yHGd5+uuiFobb4nposXBT1tV4yTCBAgMFgCI/1c3dN5td1zdTTZk8vJNOmnmGKKNNNMMzV/+0KAAAECBAgQIDC4AnfffXdp6vbrX/966uvfY489VjIShepybfvS791A5iwKe0SBxVzrPx1//PEDuWjLItBvgbGjUv1elBkJECDQt8C3v/3tUjryyiuvLB3orrrqquWC29tcVUnK3FxPl0lmmGGG8js6qW039XdZ/Z2v3XxVAaIw6Z6qWgLdh/tNgACBwRRwrh5bN87VL7zwQrrjjju6jIwO3quXtV1G+EGAAAECBAgQIDDgAlFbPjcFXGpT5mZuS39J2223XYp/0b9etBJw7rnnptw8bll3bnIwRdwhN487oHnJzUSlJZdcMuUmhAd0uRZGYEIEBPknRM+8BAj0KfDuu+92KfX4wQ9+MOX2Ess80fTBnnvu2Zw/po3UWkpyueWWK8O6B/mjeYTc7l/K7fKX8T3917qcGD8+y3rjjTeai4zmgaLkZwRyXnnllebwyEOk6Iixt9Q9Dz1NV72ouO6661Ju1785SXQmHE0SSQQIEBhsgZFwrh6fc3x3z/E5V//85z9vzh5uURut6qS9OcIXAgQIECBAgACBQROYaqqpSoA9VjD//POnFVdcsfxbb7310tFHH11iDrlvvrL+qCF/9dVXl9L/A5mhaF1goF8cDGT+LGviFBDknzj3u60mMCQC0ZxOBE+i9GOVdt999zTZZJOl3CFYuRBXwx955JHytbX9+gMOOCBNOeWUpVmfKgAepSgjIH7yySdXs6YnnniifH/55Zebw6qLerXudpYVLyEib1Gl7/e//33aZ599Uu5YMW2yySYpmv35/ve/X5YfTeuceOKJZRui/epI7eQhpqvykzvcjZ9piSWWSGuuuWZpIzBeGETAaIMNNki77LJL2nnnncs0/iNAgMBgCoyEc3U75/gw7O+5er/99iu74Cc/+Un68pe/XM7V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Xjbyhb4Y5c5SxsrcTjvtVMbli3GXcRtssEEZnh8Wugyf0B/PP/98We76668/oYuaKOfPN1jFL/doP1Fuv42ur0B+ACjHbi6hV9+NGOScd9K5Or8MLvvr73//+yBv9chc/Be/+MVGDr6NzI2zVQRGqEAOKDVyQLyWW7fffvv1eI3NbW43ckCujMsvbxv33HNPLbavt+156KGHGrkpkcakk07ayEHE5rbEfXE8D377299uDhuILyP5uSW/HGnkQO1AMFlGPwVyTZvG1772tXHO/d577zXyy61Grq3SyEHwxtxzz12O99wm+ljz5lo9jWWWWaaRC/I1ci2XRi7kV6bNhfrKtPllX2Pdddctw/KLtMb111/fyEH+xqabbtqYdtppy/CnnnqqEevMgfvyO7e7XtZbrex3v/tdY6655mrE30d+EdfIQfbGggsu2MgvABq///3vyzyf/exnx2t91bI333zzRn5RUP6+c22aRq5N2ohj9ZprrimT5Bd+jVyTp6wjv8RofP7zn2/kAH/5nV9mVovp8zPOHxEDkQhUAkry9+vViJkIEBgugdae0LvnIV9Iy6ALL7ywy6jBKMkfKxis5XbJvB8ECBCooYBzdQ13miwTIECgAwSmmGKKHnMRzfb8+Mc/LiWAo7mP7bffvsfpOm1gb9szzzzzpJVWWinlAGRp/rPK92A9XwzWcqt8+yTQjsDll19eSrjn4Hxpdmu77bYrs/XUNNXRRx9d+tWLUvZRKj9q8Udnqddee22K2vRR62X22Wcv8+eXAaWW/TTTTJN+9atfpajhX6VJJpkk7bzzzikH79PDDz/crAkQ4y+99NK0//77pw9+8IPppZdeSjfffHNaYYUVSlPAUaI+ln/XXXeVRbW7vpg4ah5FM0TRZGR09FrV2nnttddK7YAo5f/zn/88hUOkjTbaKF1xxRUpv1goNQii6a7unQmXCf1HYBwCgvzjADKaAIH6CFQd4FYX+yrncWHvnsZVfa6a/rbbbitNBEWTD/ESIW5MektPPvlkqYZXVQWMGwyJAAECBLoKjM+5Oua8884706677loe5qLKc2tV52rJ43Ou/slPftKsth3VtKO6tESAAAECnS+QS62W5joipxHou++++5qZzqVj05e//OUSyMslYtMf/vCH5rgbbrghbbLJJqVJj+hkMZrMiaY4DjnkkOY08SUCgNEk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6y1fX/USVYBLYz+/5B5O1cGNU9m9R3ebM2eO772jIS304F6NZa1heTRMhLajZwZoXkMVff3rX/cXCFSfCRMm+DE535z2pt+OxtJUDx9d0FDPUe2X8ieSIbTMveA9AgggkEeByrZ65syZPoCvNlEXOWfPmu2HKTv55JP9XUwKkKuHvNpEBV/iX/Mfefhh3z5edNFFUbvu2jBNKkftWkc3BIHaat35NH78+FqD/GoD27u2Vj0gVYaOHdquHto7ZMgQfxFipLv4qosRkydP9nddad2RRx7pLyor0H/IwYfYFhfMUPuuequ9D/uosnT3lyZdtNCzWHRB4zvf+Y5fpl/HHHOMTXltinsw4m12jHuoou5uUDuvC7fah+SF5zhEMjczCCCAQNMWyAzLf+q+B8xyF5Jbt+vgjin9Pc7yT5faq6+8bFubt/btbJfOHW2dG76nsxs//hM3RryONepgE11SNjdc2yZXxkx7Y9rbttOoXWz0LqPSkHXurYu/uiCt83oFtbt07Wa7uCHo1q13x63KY5PPFMXrK4sOtU24XvytrH//fj6v0unhuxruRsewZs2jsem7devhvhvsbFPffMfv057jdvVFKoCuXv6fuecKhG0NdA+g381tf/aHi23JJ5/ayBFDfdq1az6zOe/Pts3uxrhxY8e47akq6QcUleGH53GvobOQgvK600BD1+lKwooVy22BO06OcRcmdJxWupDPb8j90jKt0wX6re5CiC7qf/LpirDa+vYf4B40PN5u/OPN9ujjT7oH/55g3d1nkHVyF0JkwYQAAgggUDoCBPlL57OgJgg0WoFw+qfhH/ZwY/ErQKJguE4yTznlFBvrbg3VvCY9JFGBFN1ymgycuOXjxu3uhtbp6wM54WRZ6TXcg8rUib+2o9foS0Cy40zGabJypaaVKzf5wLp6bYae+PoioYsMCgadddZZPoivQL4C+v3797dvfOMb/mHBulihwJOC+0PdBQH1Glrpegd9/vOf92Up6KQgmXr26Dx4v/328w9/DPvVo0cPO/644/140gsXLfR3BOiBVlruH57lAmJMCCCAQKEEQlv9yiuv+OHI9BB0BbM3b9lsxx13nI0ePdq3waqP2t1//vOfvg2M109D/Ki3onrQawplKqiuIc788D9uudrB0BYqXQiraD7btHbtGh+w2cc9GFBttC6I6jihoc90h9cF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Sg77pLxhn6I1sdzKwIQAAgggUCIC9OQvkQ+CaiCAAAIIIIAAAggggAACCCDQ+AQUMI76hEf75u4aq1xQOecXx+fTb3eN8kd5VU54X7XcyoKqpAl5k7lDBSpXpMp0C9Ju3wrb0vJk7uhN8rebCVtMS5NcqgTuTays5D5UrgrvK9OkUlbOpZWbWhvK9UtSv6LFoUy9q27bWcpNlV6pkpamcp9Sify2+IUAAgggUHwBevIX/zOgBggggAACCCCAAAIIIIAAAggggAACCCCAAAII5CRAkD8nNjIhgAACCCCAAAIIIIAAAggggAACCCCAAAIIIFB8AYL8xf8MqAECCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAjkJEOTPiY1MCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggUX4Agf/E/A2qAAAIIIIAAAggggAACCCCAAAIIIIAAAggggEBOAgT5c2IjEwIIIIAAAggggAACCCCAAAIIIIAAAggggAACxRcgyF/8z4AaIIAAAggggAACCCCAAAIIIIAAAggggAACCCCQkwBB/pzYyIQAAggggAACCCCAAAIIIIAAAggggAACCCCAQPEFCPIX/zOgBggggAACCCCAAAIIIIAAAggggAACCCCAAAII5CRAkD8nNjIhgAACCCCAAAIIIIAAAggggAACCCCAAAIIIFB8AYL8xf8MqAECCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAjkJEOTPiY1MCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggUX4Agf/E/A2qAAAIIIIAAAggggAACCCCAAAIIIIAAAggggEBOAgT5c2IjEwIIIIAAAggggAACCCCAAAIIIIAAAggggAACxRcgyF/8z4AaIIAAAggggAACCCCAAAIIIIAAAggggAACCCCQkwBB/pzYyIQAAggggAACCCCAAAIIIIAAAggggAACCCCAQPEFCPIX/zOgBggggAACCCCAAAIIIIAAAggggAACCCCAAAII5CRAkD8nNjIhgAACCCCAAAIIIIAAAggggAACCCCAAAIIIFB8AYL8xf8MqAECCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAjkJEOTPiY1MCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggUX4Agf/E/A2qAAAIIIIAAAggggAACCCCAAAIIIIAAAggggEBOAgT5c2IjEwIIIIAAAggggAACCCCAAAIIIIAAAggggAACxRcgyF/8z4AaIIAAAggggAACCCCAAAIIIIAAAggggAACCCCQkwBB/pzYyIQAAggggAACCCCAAAIIIIAAAggggAACCCCAQPEFCPIX/zOgBggggAACCCCAAAIIIIAAAggggAACCCCAAAII5CRAkD8nNjIhgAACCCCAAAIIIIAAAggggAACCCCAAAIIIFB8AYL8xf8MqAECCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAjkJEOTPiY1MCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggUX4Agf/E/A2qAAAIIIIAAAggggAACCCCAAAIIIIAAAggggEBOAgT5c2IjEwIIIIAAAggggAACCCCAAAIIIIAAAggggAACxRcgyF/8z4AaIIAAAggggAACCCCAAAIIIIAAAggggAACCCCQkwBB/pzYyIQAAggggAACCCCAAAIIIIAAAggggAACCCCAQPEFCPIX/zOgBggggAACCCCAAAIIIIAAAggggAACCCCAAAII5CRAkD8nNjIhgAACCCCAAAIIIIAAAggggAACCCCAAAIIIFB8AYL8xf8MqAECCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAjkJEOTPiY1MCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggUX4Agf/E/A2qAAAIIIIAAAggggAACCCCAAAIIIIAAAggggEBOAgT5c2IjEwIIIIAAAggggAACCCCAAAIIIIAAAggggAACxRcgyF/8z4AaIIAAAggggAACCCCAAAIIIIAAAggggAACCCCQkwBB/pzYyIQAAggggAACCCCAAAIIIIAAAggggAACCCCAQPEFCPIX/zOgBggggAACCCCAAAIIIIAAAggggAACCCCAAAII5CRAkD8nNjIhgAACCCCAAAIIIIAAAggggAACCCCAAAIIIFB8AYL8xf8MqAECCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAjkJEOTPiY1MCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggUX4Agf/E/A2qAAAIIIIAAAggggAACCCCAAAIIIIAAAggggEBOAgT5c2IjEwIIIIAAAggggAACCCCAAAIIIIAAAggggAACxRcgyF/8z4AaIIAAAggggAACCCCAAAIIIIAAAggggAACCCCQkwBB/pzYyIQAAggggAACCCCAAAIIIIAAAggggAACCCCAQPEFCPIX/zOgBggggAACCCCAAAIIIIAAAggggAACCCCAAAII5CRAkD8nNjIhgAACCCCAAAIIIIAAAggggAACCCCAAAIIIFB8AYL8xf8MqAECCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAjkJEOTPiY1MCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggUX4Agf/E/A2qAAAIIIIAAAggggAACCCCAAAIIIIAAAggggEBOAgT5c2IjEwIIIIAAAggggAACCCCAAAIIIIAAAggggAACxRcgyF/8z4AaIIAAAggggAACCCCAAAIIIIAAAggggAACCCCQkwBB/pzYyIQAAggggAACEtiyZYs99NBDtmjRIkAQQAABBBAoOQGOUyX3kVAhBBBAAAEEEGgAAYL8DYBKkQgggAACCDR2gbVr19qNN95oO+ywgx1++OH23HPPNfZdZv8QQAABBMpIgONUGX1YVBUBBBBAAAEEtlmAIP82E+a3gH//+9926qmn5rdQSkMAAQQQKBmBjRs32v7772/vvvtuydSpPhX55JNP7JJLLrFBgwbZGWecYXPmzKlPdtIigAACCJSwQGP4LsJxqoT/wKgaAggggAACCDSYQMsGK5mC6y0wf/58+973vmcTJkyod14yIIAAAgiUh8BPf/pT3+t99erV5VHhylouXrzYB/dvu+02W79+fVnVncoigAACCNQuUO7fRThO1f4ZkwIBBBBAAAEEGq8APflL5LPdunWrfetb37Lly5eXSI2oxrYKlFsAb1v3l/wIIFC7wFNPPWXXXHNN7QlLMIUC+926dbO77rrLzjnnnBKsIVVCAAEEEMhVoDF8F+E4leunTz4EEEAAAQQQaAwCBPlL4FPcvHmznXbaafb000+XQG2oQr4ELrvsMjv//PNNvYqYEEAAgVdeecVOOOEESyQSZYkxePBgu+KKK+yII46wyy+/vCz3IVulp06dahpCiQkBBBBoqgKN5btIYzxOzZ07l+8STfUfJvuNAAIIIIBAPQUI8tcTLN/J1dtbAZNbbrklWfSqVavszTff9D+zZ89OLmemvATOPvtsu/rqq61Pnz6med0CzYQAAk1T4H//+58deOCBpnGCwzRr1qxkW19ud/60a9fOmjVr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CCCAAAIIIFAmAjx4t0w+KKqJAAIIIIAAAggggAACCCCAAAIIIIAAAggggECmAEH+TBHeI4AAAggggAACCCCAAAIIIIAAAggggAACCCBQJgIE+cvkg6KaCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAghkChDkzxThPQIIIIAAAggggAACCCCAAAIIIIAAAggggAACZSJAkL9MPiiqiQACCCCAAAIIIIAAAggggAACCCCAAAIIIIBApgBB/kwR3iOAAAIIIIAAAggggAACCCCAAAIIIIAAAgggUCYCBPnL5IOimggggAACCCCAAAIIIIAAAggggAACCCCAAAIIZAoQ5M8U4T0CCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAmUiQJC/TD4oqokAAggggAACCCCAAAIIIIAAAggggAACCCCAQKYAQf5MEd4jgAACCCCAAAIIIIAAAggggAACCCCAAAIIIFAmAgT5y+SDopoIIIAAAggggAACCCCAAAIIIIAAAggggAACCGQKEOTPFOE9AggggAACCCCAAAIIIIAAAggggAACCCCAAAJlIkCQv0w+KKqJAAIIIIAAAggggAACCCCAAAIIIIAAAggggECmAEH+TBHeI4AAAggggAACCCCAAAIIIIAAAggggAACCCBQJgIE+cvkg6KaCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAghkChDkzxThPQIIIIAAAggggAACCCCAAAIIIIAAAggggAACZSJAkL9MPiiqiQACCCCAAAIIIIAAAggggAACCCCAAAIIIIBApgBB/kwR3iOAAAIIIIAAAggggAACCCCAAAIIIIAAAgggUCYCBK2rQUUAACl+SURBVPnL5IOimggggAACCCCAAAIIIIAAAggggAACCCCAAAIIZAoQ5M8U4T0CCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAmUiQJC/TD4oqokAAggggAACCCCAAAIIIIAAAggggAACCCCAQKYAQf5MEd4jgAACCCCAAAIIIIAAAggggAACCCCAAAIIIFAmAgT5y+SDopoIIIAAAggggAACCCCAAAIIIIAAAggggAACCGQKEOTPFOE9AggggAACCCCAAAIIIIAAAggggAACCCCAAAJlIkCQv0w+KKqJAAIIIIAAAggggAACCCCAAAIIIIAAAggggECmAEH+TBHeI4AAAggggAACCCCAAAIIIIAAAggggAACCCBQJgIE+cvkg6KaCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAghkChDkzxThPQIIIIAAAggggAACCCCAAAIIIIAAAggggAACZSJAkL9MPiiqiQACCCCAAAIIIIAAAggggAACCCCAAAIIIIBApgBB/kwR3iOAAAIIIIAAAggggAACCCCAAAIIIIAAAgggUCYCBPnL5IOimggggAACCCCAAAIIIIAAAggggAACCCCAAAIIZAoQ5M8U4T0CCCCAAAIIFFXg448/tptuusnuvvtu27x5c1Hr0hg3vnr1anv55Zft1VdftcWLFzfGXWSfqhHYtGmTPfnkk/a73/2umhSNd3EikbCXXnrJrrzyym3aSdqnbeIjcyMWeO2112zt2rWNeA/ZNQQQQAABBEpboJk74U2UdhWpHQIIIIAAAgiUksBZZ51l77zzTt6qdMstt1hFRYUv77PPPrP+/fvbqlWr/Pvzzz/frrrqqrxtq6kWtGXLFrvxxhvt97//vc2dO9fip39jxoyxSy65xL70pS8VjKemvyHVceedd661LieeeKItWrSoxnQ333yzDR8+vMY0jX3le++9Z08//bQ98cQT9thjj/l/W3379rUFCxY09l23devW2VNPPWUPPfSQ3XfffTZ//nxr2bKl6WJHLhPtUy5q5GnsAmpfdAyZNGmSTZ061caOHdvYd5n9QwABBBBAoCQFWpZkragUAggggAACCJSswMSJE32Q+M4777RPPvlkm+u5YsWKZBkKRIYAvxbqPdO2CcyZM8e+8pWv2Ouvv561IC0/9thj7c9//rOdfPLJWdPke6EuKOhz/9///pf2eWs7Rx99tE2ZMsW6du1a42Y/97nP+YDSPffck3ZHQrNmzewLX/iC7bXXXtatW7cay2jsKy+77DIffGvs+1nd/u2xxx55vSBJ+1SdNMubosBzzz1nv/jFL+zZZ59tirvPPiOAAAIIIFByAvTkL7mPhAohgAACCCBQHgKffvqpDRs2zAdrQ4133XVX+/e//209evQIi/yrepJrmJiVK1fa5MmTTT2sp0+f7te98sorpmCcJvU6HjlypCm9pgsvvNCuuOIKP8+v+gvogomC3e+++64PeJ9wwgk2dOhQ34v73nvvtXnz5iULVXBcw5mMHz8+uayhZ2bOnGkHHnigLVy4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7k5p45JLz5493WuvveZH9if3V1pft26dW7FihdPI/82bN8fFdBNaE8n37dvX/9tuu+3i91hBAAEEEEAAAQTaEyDI354Q7yOAAAIIIIBApxR488033bx589z69ev9P6Xm6dOnjx+1r5H7GvE/btw4p0l3WRBAAAEEECgqsHr1ap/2benSpa5r165uxIgRfrtHjx65qv7zzz9zpfRZuHChGzVqVK46KYQAAggggAACCEiAID/9AAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQACBFhXgufUW/eBoNgIIIIAAAggggAACCCCAAAIIIIAAAggggAACBPnpAwgggAACCCCAAAIIIIAAAggggAACCCCAAAIItKgAQf4W/eBoNgIIIIAAAggggAACCCCAAAIIIIAAAggggAACBPnpAwgggAACCCCAAAIIIIAAAggggAACCCCAAAIItKgAQf4W/eBoNgIIIIAAAggggAACCCCAAAIIIIAAAggggAACBPnpAwgggAACCCCAAAIIIIAAAggggAACCCCAAAIItKgAQf4W/eBoNgIIIIAAAggggAACCCCAAAIIIIAAAggggAACBPnpAwgggAACCCCAAAIIIIAAAggggAACCCCAAAIItKgAQf4W/eBoNgIIIIAAAggggAACCCCAAAIIIIAAAggggAACBPnpAwgggAACCCCAAAIIIIAAAggggAACCCCAAAIItKgAQf4W/eBoNgIIIIAAAggggAACCCCAAAIIIIAAAggggAACBPnpAwgggAACCCCAAAIIIIAAAggggAACCCCAAAIItKgAQf4W/eBoNgIIIIAAAggggAACCCCAAAIIIIAAAggggAACBPnpAwgggAACCCCAAAIIIIAAAggggAACCCCAAAIItKgAQf4W/eBoNgIIIIAAAggggAACCCCAAAIIIIAAAggggAACBPnpAwgggAACCCCAAAIIIIAAAggggAACCCCAAAIItKgAQf4W/eBoNgIIIIAAAggggAACCCCAAAIIIIAAAggggAACBPnpAwgggAACCCCAAAIIIIAAAggggAACCCCAAAIItKgAQf4W/eBoNgIIIIAAAggggAACCCCAAAIIIIAAAggggAACBPnpAwgggAACCCCAAAIIIIAAAggggAACCCCAAAIItKgAQf4W/eBoNgIIIIAAAggggAACCCCAAAIIIIAAAggggAACBPnpAwgggAACCCCAAAIIIIAAAggggAACCCCAAAIItKgAQf4W/eBoNgIIIIAAAggggAACCCCAAAIIIIAAAggggAACBPnpAwgggAACCCCAAAIIIIAAAggggAACCCCAAAIItKgAQf4W/eBoNgIIIIAAAggggAACCCCAAAIIIIAAAggggAACBPnpAwgggAACCCCAAAIIIIAAAggggAACCCCAAAIItKgAQf4W/eBoNgIIIIAAAggggAACCCCAAAIIIIAAAggggAACBPnpAwgggAACCCCAAAIIIIAAAggggAACCCCAAAIItKgAQf4W/eBoNgIIIIAAAggggAACCCCAAAIIIIAAAggggAACBPnpAwgggAACCCCAAAIIIIAAAggggAACCCCAAAIItKgAQf4W/eBoNgIIIIAAAggggAACCCCAAAIIIIAAAggggAACBPnpAwgggAACCCCAAAIIIIAAAggggAACCCCAAAIItKgAQf4W/eBoNgIIIIAAAggggAACCCCAAAIIIIAAAggggAACBPnpAwgggAACCCCAAAIIIIAAAggggAACCCCAAAIItKgAQf4W/eBoNgIIIIAAAggggAACCCCAAAIIIIAAAggggAAC/wuA/Gy28hTu6QAAAABJRU5ErkJggg==)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def build_monotonic_type1_model(\n", + " *,\n", + " col_names: List[str],\n", + " units: int,\n", + " final_units: int,\n", + " activation: Union[str, Callable[[TensorLike], TensorLike]],\n", + " n_layers: int,\n", + " final_activation: Optional[Union[str, Callable[[TensorLike], TensorLike]]] = None,\n", + " monotonicity_indicator: Union[int, Dict[str, TensorLike]] = 1,\n", + " is_convex: bool = False,\n", + " is_concave: bool = False,\n", + " dropout: Optional[float] = None,\n", + ") -> Model:\n", + " # input\n", + " x = [Input(shape=1, name=name) for name in sorted(col_names)]\n", + " y = tf.keras.layers.Concatenate(name=\"inputs\")(x)\n", + " if isinstance(monotonicity_indicator, dict):\n", + " monotonicity_indicator = [\n", + " monotonicity_indicator[name] for name in sorted(col_names)\n", + " ]\n", + "\n", + " y = create_mono_block(\n", + " units=[units] * (n_layers - 1) + [final_units],\n", + " activation=activation,\n", + " monotonicity_indicator=monotonicity_indicator,\n", + " is_convex=is_convex,\n", + " is_concave=is_concave,\n", + " dropout=dropout,\n", + " )(y)\n", + "\n", + " if final_activation is not None:\n", + " final_activation = tf.keras.activations.get(final_activation)\n", + " y = final_activation(y)\n", + "\n", + " model = Model(inputs=x, outputs=y)\n", + " return model" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: \"model_2\"\n", + "__________________________________________________________________________________________________\n", + " Layer (type) Output Shape Param # Connected to \n", + "==================================================================================================\n", + " a (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " b (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " c (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " d (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " inputs (Concatenate) (None, 4) 0 ['a[0][0]', \n", + " 'b[0][0]', \n", + " 'c[0][0]', \n", + " 'd[0][0]'] \n", + " \n", + " mono_dense_0_convex (MonoDense (None, 64) 320 ['inputs[0][0]'] \n", + " ) \n", + " \n", + " dropout_3 (Dropout) (None, 64) 0 ['mono_dense_0_convex[0][0]'] \n", + " \n", + " mono_dense_1_increasing_convex (None, 64) 4160 ['dropout_3[0][0]'] \n", + " (MonoDense) \n", + " \n", + " dropout_4 (Dropout) (None, 64) 0 ['mono_dense_1_increasing_convex[\n", + " 0][0]'] \n", + " \n", + " mono_dense_2_increasing_convex (None, 64) 4160 ['dropout_4[0][0]'] \n", + " (MonoDense) \n", + " \n", + " dropout_5 (Dropout) (None, 64) 0 ['mono_dense_2_increasing_convex[\n", + " 0][0]'] \n", + " \n", + " mono_dense_3_increasing_convex (None, 10) 650 ['dropout_5[0][0]'] \n", + " (MonoDense) \n", + " \n", + " tf.nn.softmax (TFOpLambda) (None, 10) 0 ['mono_dense_3_increasing_convex[\n", + " 0][0]'] \n", + " \n", + "==================================================================================================\n", + "Total params: 9,290\n", + "Trainable params: 9,290\n", + "Non-trainable params: 0\n", + "__________________________________________________________________________________________________\n" + ] + } + ], + "source": [ + "n_layers = 4\n", + "\n", + "model = build_monotonic_type1_model(\n", + " col_names=list(\"abcd\"),\n", + " units=64,\n", + " final_units=10,\n", + " activation=\"elu\",\n", + " n_layers=n_layers,\n", + " final_activation=\"softmax\",\n", + " monotonicity_indicator=dict(a=1, b=0, c=-1, d=0),\n", + " is_convex=True,\n", + " dropout=0.1,\n", + ")\n", + "model.summary()\n", + "\n", + "mono_layers = [layer for layer in model.layers if isinstance(layer, MonoDense)]\n", + "assert len(mono_layers) == n_layers\n", + "\n", + "# check monotonicity indicator\n", + "np.testing.assert_array_equal(\n", + " mono_layers[0].monotonicity_indicator, np.array([1, 0, -1, 0]).reshape((-1, 1))\n", + ")\n", + "for i in range(1, n_layers):\n", + " assert mono_layers[i].monotonicity_indicator == 1\n", + "\n", + "# check convexity and concavity\n", + "for i in range(n_layers):\n", + " assert mono_layers[i].is_convex\n", + " assert not mono_layers[i].is_concave" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Type-2 architecture" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The function `build_monotonic_type2_model()` can be used to build Neural Network models as shown in the figure below and is referred to in the paper as *Neural architecture type 2*. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![Screenshot 2022-05-20 at 08.06.46.png](data:image/png;base64,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lSuXy5v++OOPuwlalapmyJAhbrR7CoclWv3rr7+6z146GwXmlQLHC+wn2jmTPhw6dMjlvddNBgoCCCCAAAIIIIAAAggggAACCCCAAAIZIUAkKiOUOQcCUSKgPPFKMaNUM3PmzHG54evWrevyxKe2C2vXrnW7epOf/v3336YJYPPly5faKsK+n244UBBAAAEEEEAAAQQQQAABBBBAAAEEEMhIAYLxGanNuRCIcIHGjRu7Fmo0fJMmTY7b2sOHDwe3a+S7V04//XS3qO16FS5cOKIC8V47eUcAAQQQQAABBBBAAAEEEEAAAQQQQCAjBcgZn5HanAsBHwkop7xXtm3b5i26XPH6oBHxu3fvNo2spyCAAAIIIIAAAggggAACCCCAAAIIIBDrAgTjY/0bQP8ROEmB9evX2/3332+vvfZa8Mgbb7zRxo4d6z63bNnSrr/+etPErStWrLDnn38+uB8LCCCAAAIIIIAAAggggAACCCCAAAIIxKoAaWpi9crTbwTSKFCiRAl78cUX3Su5KpQr/r333rNNmzZZwYIFXd755PZjHQIIIIAAAggggAACCCCAAAIIIIAAArEkQDA+lq42fUUgAwWKFi2agWfjVAgggAACCCCAAAIIIIAAAggggAACCES2AMH4yL4+tA4BBBBAAIEME9iwYYN17tw5w853Kid6++23LT4+/lSq4FgEEEAAAQQQQAABBBBAAAEEMlSAYHyGcnMyBBBAIHYFpk+fbgcOHLBLLrkkdhEivOe7du2y0aNH2wUXXGCFChWKyNZq3opvv/3WBg8eHJHto1EIIIAAAggggAACCCCAAAIIpCRAMD4lGdYjgAACYRR46aWX7OWXX7Z169bZNddcY0OGDEn2bLNmzbKLL77YsmXLZq1bt7Y+ffpYsWLFkt030ldq4l8Fe5cuXRrpTY359mni5fPPPz8iHSZMmGCXX355RLaNRiGAAAIIIIAAAggggAACCCBwPIGsx9vINgQQQACB8Ah06dLFHn74Ydu9e7e9++67tmbNmmRP1Lt3b7dPtWrVbNiwYRkWiD906JA9+uijybYprSvHjBljn332WVoP5zgEEEAAAQQQQAABBBBAAAEEEEAgqgUIxkf15aPxCCAQzQIlSpSwggULutQt/fr1O6YrGkE+Z84ct7548eLHbA/nCo3cnz9/frqe4owzzrAKFSqka51U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2tRat26dia3g1AgggAACCCCAAAIIIIAAAggggAACCCCAQHQIEIyPjusUUa3ctWuXm7T1uuuui6h20RgEEEAAAQQQQAABBBBAAAEEEEAAAQQQQCBSBQjGR+qVieB2KUf8/v377fLLL4/gVtI0BJIXWL16tWnyYQoCsSIwfvx4+/7772Olu/QTAQQQQAABBBBAAAEEEEAAgYgVIGd8xF6ayG3Yl19+aWeeeaYVL148ohqpyWR//vnnY9qUP39+S0hIsDVr1gS3NWnSxGrUqBH8zELsCOTOndvOOussu/nmm+3++++3PHnyRF3nv/vuO3vyySftq6++cm2Pj4+3okWL2r59+6x06dLWokUL69atm2XPnj3q+kaD01/gnHPOsbJly1qOHDls+vTpVq9evfQ/CTUigAACCCCAAAIIIIAAAggggMAJBRgZf0IidkgqMGfOHDv//POTro6Iz0OGDLHOnTsHXw899JApUJk1a1Z7+OGH3XoFMg8ePBgR7aURGS+goPW//vUve/zxx61IkSLWt2/fqBspr2DqqFGjbM+ePe7G2MaNG23hwoWmP5va9uijj9pll11mSilFQaBUqVJuom19X/S7++KLL7aZM2cCgwACCCCAAAIIIIAAAggggAACGSxAMD6Dwf1wul9//TUiR5VfeOGFbtRnyZIlg8xKR6JAVM2aNV1qnaefftreffddq1WrVnAfFmJPoFevXq7TCk7+97//tTJlykRdUD5fvnzuiY9s2bIFL2ChQoXsueeec32ZMmWKtWrVKriNhdgWGD58uBsZLwU93dSoUSN3U8p7uiK2deg9AggggAACCCCAAAIIIIAAAhkjQDA+Y5x9c5atW7fa9u3brXz58hHZpwIFClifPn0StU2j4++44w678sor7f/+7/8SbeNDbApodLyC8HFxcXbo0CH766+/ojYon9wVvPfee61KlSru5tTmzZuDuyiN0wMPPGCafPnll192T4gcOXLEpk2bZrfeeqvt2LHDBg0aZLfccotNnDgxeJwWFNy/7bbb3PEPPvhgom0apX/77bdbx44dXV2JNvIhIgRKlChh+l7oO+89GfTNN9+4EfMKzH/xxRcR0U4agQACCCCAAAIIIIAAAggggICfBcgZ7+erG4a+bdq0ydWqYGaklmuuucaNDPYmLNTIT40YXrJkSaQ2mXZlgoCC0gMGDAgG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gAACCCCAAAIIIIAAAgjEsgAj42P56tN3BBDwlcCSJUvs0ksvtS1btpiWFZzXZK3//ve/U+znoEGDXGB9586dLtA+dOhQl3dek7NefvnltmLFCnv++edt7Nix1qBBA6tQoYJ98sknpslgQ4tGxbdr187GjRtnF154YegmlhFAAAEEEEAAAQQQQAABBBBAAAEEAgIE4/kaxJSAAog7duxwfa5Zs6Yll7IjpkDorK8E9J3+8ssvXZ8OHDhgDz30kPXr188Fzr///vtk+zplyhQrU6aMC8RrB/2ZUJqaJ5980ubPn28//vijyzvfrFkzd3zx4sXdBLGhlf3yyy+miWRffPFFAvGhMCwjgAACCCCAAAIIIIAAAggggAACIQKkqQnBYNH/Al26dLGzzz7bvQ4ePOj/DtPDmBVQypi+ffta9erV7YcffnBpaJLD0Aj6NWvW2L59+4KbFZxXUUB/8+bNbnnhwoXu3fsR+uencOHCLpivAP5ff/3l7cI7AggggAACCCCAAAIIIIAAAggggECIACPjQzBY9L/AgAEDrGfPnq6jcXF8/f1/xWO7h8oHrxzyKlpOrlSqVMmltFHAXmloVHSM/nzUq1fP/vjjD7dOE7jqs4oC9M8995z16dPHfT7ttNPsrbfesn/9618u/7zyyWfLls1t4wcCCCAQ6QK6Ibl3795IbybtixGBkiVLWnx8fIz0lm4icOoCy5cvd09xnnpN1IDAqQuUK1fONCiKggACCBxPgGjk8XTY5juBsmXL+q5PdAgBBZG89EuexqZNm+zVV191Od8rV67sJl3Vtt27d7tdvPfOnTvb+PHjTbniFYw/cuSITZw40Tp06GB58+a1K664wgoWLOjyxickJFixYsVMeeaHDRuWqB5N6vrCCy9Y165d7f7777f+/fu77fxAAAEEIl2gffv29u2330Z6M2lfjAhoXhb9v5eCAAKpE6hdu7Zt27YtdTuzFwJhFvjtt9+sYsWKYT4L1SOAQLQLEIyP9itI+xFAIKYFZs2aZd27d3cjgubMmePyv2tEnUa0FylSxO68804XSM+aNatt377d7rvvPuelkexVq1a1q666ygYPHmxK4bRq1SqXZkaj5QcOHOj2K1SokI0cOdKuvfZae+CBB6xUqVL26KOPur9kKie9csqrPP7443bZZZe5nPMvvfSSuwmg0fPVqlVz2/mB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fCE1auvNN9805TekIIAAAggggEBkCiigPmvWLLvhhhsSNVCTt44YMcKt++uvv1wA/vLLL3eBnv/85z9uItE//vgj0TF8SB+BnTt3unzxCr57AZwrr7zSFi5caO+99x6B+PRhphYEok7gRL+vNTJcc+co4KsXE4VmziVesmSJjRw50k3eqt/het155522YsUK69u3L4H4zLksnBUBBBBAIJ0EoiYYr1x5d9xxh+XLl880OkCToqVUHnjgAbdPmTJl7Mknn0xpt4hfv2bNGuvYsaO98cYbEd9WGogAAggggEAsCujxeU0MrlHv7777rr3zzjuWJ0+eIIVGzKs89thj7u8wSo2iv8eo6BH8WBzt6Dof5h+PPPJIcPJc3QD56aefXGCnatWqYT4z1SOAQKQKpPb3td+fGorU6xPaLt08VdFI+A4dOtjy5cvt5ZdftpIlS4buxjICCCCAAAJRKRA1wfiEhAQbPHiwNWjQwJT7M6WZ0zWB2quvvur26dKlS4YG4/Uo3Z49e9Lti6BHIr/55hv3GF66VXqKFekvRCpJc/edYrUcjgACCCCAQFQK6P+L69ats4cffti1/6abbkqUP/6ss85y65U7/rvvvrNhw4bZ5MmTg31VQJ6SvgLKFT969Gg77bTT3KjWsWPHWo0aNdL3JNSGAAJRJ5Da39fKR07JPAEF3vU655xz3E1rzcmiyXcpCCCAAAII+EUgaoLxHrhywxUsWNC+/vprmz17trc6+K7/WefKlct91uRkGVUWL15sffr0cblI0/OcDRs2tPz586dnladUlyY+Utm/f/8p1cPBCCCAAAII+EUgb968bsBAr169TIMCvBvXCui0bdvWdbN///7uMXt9qF+/fnB0fNOmTf3CEDH9+PXXX90TlH/++aebpDZiGkZDEEAg0wVS8/s6aSP1hHaTJk2sUKFCphusx3tCO+mxfD55AQXi9Xt83rx5Vq5cuZOvgCMQQAABBBCIcIGoC8brH7j//e9/HWvv3r0T8WqSLo2K79atm1vv/WPY22nGjBl2//33u9Qvyhfqje7W+7Rp0+zWW2+1HTt22KBBg+yWW26xiRMneoe6d+Vuf+GFF+z66693I/OV/1VFNwU0SZtyw/br1y+YH1bbUjqn9lX6mZ49e9rq1avt0Ucftc6dOyfKD6/1//d//+cmelNdKnv37jX9g14j7158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gAACCCCAAAIIIIAAAggggAACCCDgO4GYyhmfJUuWRBfwyJEj9sUXX9h7773nRs0PHz7cvvvuO2vfvr21bNnS7btixQobMmSItWvXzn755RebNGmSnX322dalSxdbvHixTZgwwe3XunVrq1Spkr3wwgvuc/Xq1a1Ro0Z200032ddff23Fixe3TZs2WefOne3QoUOmtDkzZsywKlWqWNGiRe2uu+5K1LZI/VCiRAnbtWuX7dy50/LlyxepzaRdCCCAAAIIIIAAAggggAACCCCAAAIIIIBARAnEVDA+qfy7775rPXr0sGXLltn69etNgeZvvvnGRo4c6QLt69ats27dutns2bNt7ty5tnHjRlu+fLnpuEWLFtnrr7/ugve33367VaxY0QXWW7VqZbVq1bKrrrrK5ahXYH/8+PGmiU+1Pi4uzu6//34rW7asPffcc/boo4/a0qVLoyYYr3z7Kps3byYYn/QLxWcEEEAAAQQQQAABBBBAAAEEEEAAAQQQQCAFgZhKU5PUQKPWb7vtNrf6iSeesLffftvlkt+7d6/Nnz/fzj//fHv22Wfd9jPOOMOt00j5IkWKuH0VrK9Tp06iajXBqVK5qChw3aRJE7dco0YNa968ueXIkcPGjh3rgtmlSpWyPn36WIECBdw+0fDDS/WjkfHRWAYMGGAdOnRwLz2hQEEAAQQQQAABBBBAAAEEEEAAAQQQQAABBDJCIKaD8QJWcFxFaWVUNMJdxcvxnjNnTvf53//+t3tXgP2SSy6xw4cP28KFC926pD+SpsNJuv3CCy+0F1980erXr28LFiywl19+OekuEfs5V65crm26YRGNZdq0ae5Gim686BpSEEDgqICeDtKfD720TEEAAQQQQAABBBBAAAEEEEAAAQQQSF+BmA/GJw2cK43MicpFF110ol2Ou12B4Pvuu89++OEHN1peaWuipXg+BLKj5YrRTgRSJ6AgvH636aW5NCgIIIAAAggggAACCCCAAAIIIIAAAukrEFPBeE3YmtZy4MCB4KGrVq1yyxpN742s16SmoSVpsDr03EOHDnUTxs6bN8/lke/bt68p5U00FK8f2bJli4bmHtPGd955x1nLO3v27MdsZwUCCCCAAAIIIIAAAggggAACCCCAAAIIIBAOgZgKxm/YsMEZ7tixI2i5bds2t7xnzx737gXdd+/eHdxHC6EpaT77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aSQrEEAAAQQQQAABBBBAAAEEEEAAAQQQCIMAwfgwoFJl5Ap06dIlchuXgS1TnngF3TWCXUFzBcnr1q17UsHp+vXru2C8gvnKM6/AviZ8VbD9jTfecGmAfvvtt2CvKlaseFL1Bw8Mw0JojvwwVE+VCCCAAAIIIIAAAggggAACCCCAAAIIHCNAMP4YElYg4H8BjWZXUVC6SZMmbjmlH4cPHw5u0uSvSUvu3LlNKWhUNNpeyzrm/9k7DzApiq6NXgTJSTGLCmJCDKiooKiYEwhiQMWcMCtiwoQoKAZUFMOvfghmATESjCDBnBUwgSgqWZJkZP46tdTQO8wGdmd3Z2bfu89s5+qq0zPd1W/dusUAqU2aNInvTvianXfeOb6sGREQAREQAREQAREQAREQAREQAREQAREQAREoTwQkxpenq62yikARCBBTPti8efOsbt26YdFPowI982G5Ro0aXpAPO9eqVcvPEleej0wEREAEREAEREAEREAEREAEREAEREAEREAEyhOB8hs0uzxdZZVVBIpAYPr06dalSxd7/PHH40efccYZNmTIEL88cuRIPyVG/JgxY/z866+/bh999FF8e+3atS18KlSoYP3797cpU6bYn3/+ac8//7zfT/9EQAREQAREQAREQAREQAREQAREQAREQAREoDwQkGd8ebjKKqMIFIHAZpttZr179/afZIcTd55PonXu3DlxVXz57LPPNj4yERABERABERABERABERABERABERABERABEShvBOQZX96uuMorAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiJQ6gQkxpc6cp1QBERABERABERABERABERABERABERABERABERABESgvBFQmJrydsXLeXknTJhgc+bM8RRatmxpxDGXiYAIlA4BxhlYsWKFHXHEEaVzQp1FBERABERABERABERABERABERABERABNKIgDzj0+hiKCslT6Br16524IEH+s/KlStL/oQ6gwjkQaBPnz623XbbWY0aNey8887LYy/zA+KyDwPhnnnmmTZz5sw89033DQwIfNlll6V7NpU/ERABERABERABERABERABERABERABESgRAhLjSwSrEhUBERCB/AlceeWVdsMNN9jixYvt2WeftalTpyY94J577vH7NG7c2J555hnbZJNNku6X6pX//fef3XjjjSlNdvDgwTZ8+PCUpqnEREAEREAEREAEREAEREAEREAEREAERCBTCChMTaZcKeUzJQTOOOMMa968uU+rYsWKKUlTiYhAUQlsttlmtsEGG9jcuXPtgQcesPvvvz9XUj///LN99tlnft2mm26aa1tJL+C5//XXX6f0NNtuu21K01NiIiACIiACIiACIiACIiACIiACIiACIpBJBCTGZ9LVUl6LTeDEE08sdhpKQARSSYDv5HvvvWdPPvmk3XLLLV6cD+kjzl9xxRVGeKVEW7JkieFp/sEHH3hvedLZe++9/W6TJ0/26R166KFGo9MLL7xgCOHXX3+9rbdeToeo/I7v3bu337dRo0Z29913+xjve+yxh02ZMsUGDRpk33zzje222252/vnnW7169Qp1Ts738ssvG3m7/fbb48X59ddfrV+/fjZt2jQ76qijrE2bNla9evX4ds2IgAiIgAiIgAiIgAiIgAiIgAiIgAiIQLYQUJiabLmSKocIiEBGEqhUqZJdffXV9u+//9qjjz4aLwOx4V977TW78MIL4+vCDCFkTjnlFBs3bpw/dvr06bb//vvbiy++aBMnTrROnTpZr169vLiPmP7nn3/6kDMh/fyO5xxNmza1Bg0a+Dj1zG+00UZeRGfQY0T9s846ywv8zZo1s99//71Q56Sh4ZJLLrF33303FMPGjBljBx10kO28884+zdNOO00x5eN0NCMCIiACIiACIiACIiACIiACIiACIpBtBCTGZ9sVVXlEQAQyjsC5557rPcwfeughW7p0qc9/3759vUDNwK2J9thjj9mIESOM/XfddVfr37+/7bjjjl7Irl+/vj3++OP+kBYtWvj9iNNep04d+/jjj/36/I5fuHCh4VGPAM/nyCOPtK222srOOecc22+//eyEE07wnvJ42yPEE1eeePYFnfO+++4zxPuo0Whw8MEH2+mnn26tWrXyA9TiIS8TAREQAREQAREQAREQAREQAREQAREQgWwkIDE+G6+qyiQCIpBRBAjLctlllxne8E8//bQfsPWpp54yBnlNZniXb7311la5cmW/uUKFCkaYmn/++cfHea9SpYpfj8d5sO22287Hpme5oOPDMWG6aNEi++ijj2z77bcPq6xJkybeo50QO1hB54zuw/yMGTO8Rz3CfzDKrgFeAw1NRUAEREAEREAEREAEREAEREAEREAEso2AxPhsu6IqjwiIQEYSuPTSS61atWpGvHbixxM/fYsttkhalp9++smmTp1qy5Yti29HnMdWrFhhiPOJFh2wuKDjE4+dNGmSrVy50n755Zdcm/CYZz1W0DkT95k1a5Y/bvz48X4a/oX0wrKmIiACIiACIiACIiACIiACIiACIiACIpAtBCTGZ8uVVDlEQAQykkAsFvP53njjjX0oGITva665xn/yKhAe6gjxX375ZXwXBkgl/vy+++4bX5fXTGGPD3kjTjxiPjHqo0ZIHWLVF8UaNmzoDxs2bJiF87CCAWsXL15clCR1jAiIgAiIgAiIgAiIgAiIgAiIgAiIgAikNQGJ8Wl9eZQ5ERCBbCaAdziDrwZjIFdEb7ziQ4gZQtdg0Vjql19+uV9HrHgMMRtRm9jzNWvWjIejCfHn2QePc8LNYAUdzz6kgwc9n7fffts3FPz999/xAVjJ11dffWV49GNz587107zOyUZE9iC016hRw4fWYcDZjh07+sFqyT8iPWF7ZCIgAiIgAiIgAiIgAiIgAiIgAiIgAiKQbQQqZVuBVB4REAERyAQCDz74oN1///0+zjvx4u+8805r1KiRtW/f3sePpwwffPCB3Xzzzb4433zzjZ1//vl2xx13+AFUn3jiCR9TnkFU58yZ4+O5M+grsdg7d+7sj2FQVdIcNWqUffvttz7GPGFwunTpYnkd7w90/9q1a+e91Nu2bWujR4+2Y445xhYsWOAFdAZ1JT0GZWW+MOck3S+++ML+++8/69Gjhy8X+aWR4cUXX7QhQ4bYSSedFC97yIemIiACIiACIiACIiACIiACIiACIiACIpAtBCo4j8qcGAnZUiKVo0QJ/Pjjj9a4cWMvqu21114lei4lLgLpQODkk0+25cuXe8/tdMhPNA/Eh+c3ieBeFG/ygo6fN2+e1a1bN3pK7wGPhzye+8nixOfauZALkydPtjp16li9evUKeURqdhs4cKB16NDBX9/1118/NYlmeCqESWKw348//tiaN2+elqUZOnSotW7d2n8XE7+faZlhZSrtCbRo0cKaNWtmDz/8cNrnVRnMXgI0ePMsfOONN6xNmzbZW1CVTARSTGCDDTawnj172iWXXJLilJWcCBSewKeffurrzoyxRV1aJgIiIAL5EZBnfH50tE0EREAE0pgAAvKuu+5a5BwWdHwyoZMXHj6pNGLSy0RABERABERABERABERABERABERABEQg2wkoZny2X2GVTwREQAREQAREQAREQAREQAREQAREQAREQAREQAREoMwJSIwv80ugDIiACIiACIiACIiACIiACIiACIiACIiACIiACIiACGQ7AYnx2X6FVT4REAEREAEREAEREAEREAEREAEREAEREAEREAEREIEyJyAxvswvgTIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiKQ7QQkxmf7FVb5REAEREAEREAEREAEREAEREAEREAEREAEREAEREAEypyAxPgyvwTKgAiIQGkS+Ouvv2zZsmWleUqdSwTKlMDTTz9tjzzyiC1durRM86GTi4AIiIAIiIAIiIAIiIAIiIAIiEB5J1CpvANQ+TODwIcffmjff//9WpmtXbu21alTx6ZOnRrf1qpVK9tll13iy5oRgSiBihUr2u67726dOnWySy65xKpUqRLdnBHzn376qd122202evRon98aNWrYxhtv7BsZttpqKzvqqKPs6quvtvXXXz8jyqNMliyBE044wd8nL7vsMuvdu7f/7vOdkYmACIiACIiACIiACIiACIiACIiACJQuAXnGly5vna0YBP73v//Z5ZdfHv9cf/31hqC03nrr2Q033ODXI1KuXLmyGGfRodlOYLPNNrMWLVp4sXrTTTe1xx57LOM85ffdd18bOHCgLVmyxJo0aWIzZ8608ePH22effWZsu/HGG+3YY4+1f//9N9svp8pXCAI0WnLvxLp06WI02Nx11122YMGCQhytXURABERABERABERABERABERABERABFJFQGJ8qkgqnRIlcNBBB9nIkSNtiy22iJ9n8eLFtuWWW9quu+5qy5cvt9tvv92effZZa9q0aXwfzYhAMgIIkdj8+fMNb+EGDRpknChfq1Yt7+2Mp3+wDTfc0Hr16mX333+/vfvuu9a2bduwSdNyToDvPN8PbO7cuXbLLbdY/fr1rXv37n65nONR8UVABERABERABERABERABERABESgVAhIjC8VzDpJKgjUrVvX7rvvvlxJ4R1/4YUX2vHHH+/FpVwbtSACeRDAO75z585WqVIlW7Vqlc2YMSNjRflkRaSBYccdd/QNWLNnz47vQqina665xk477TR7+OGHfS+SWCxm77//vp1zzjneU5qeAmeffbYNGzYsfhwziPvnnXeeP/7aa6/NtQ0v/fPPP98uuOACn1aujVpICwL0IkKApycR9t9//9nChQutR48eXpSnN8WsWbPSIq/KhAiIgAiIgAiIgAiIgAiIgAiIgAhkKwHFjM/WK5ul5TrllFO81+8XX3zhS0jMbLw9f/rppywtsYpVUgSuu+46e/TRR+OCNKJ0EOXpZXHrrbfaueeeW1KnL9F08Zbff//9/e+CHiUnnXSSF8lpgMBrnkFsEdaZ7rzzznbHHXfYr7/+atOnTzcaKsaOHWsvv/yy/fjjj7bNNtvYqFGjrGfPnvbiiy/ae++950X3e++915fhqquu8twQ6B966CE77LDD7PPPP7dmzZqVaBnTIXG+MzTmIGyHT+Iy6wuzLlX7JDtfSJuBi6tVq2b0KiLvGGG9+HA98Z7neyETAREQAREQAREQAREQAREQAREQAREoGQIS40uGq1ItIQIVKlSwu+++2w499ND4GRjAFa/58matW7e23377rbwVO6XlRZhEiETAxBAogyjP4K58EJUJh5RphoiOff31116MR4hnYFcGeuXTuHFjH9aJwY///vtv69q1q3Xr1s2aN29u77zzjh155JH+WNIZMmSID+lTuXJlO+OMM/wyaU+YMMH69OnjhX4aANg2YMAAe+aZZzJKjCfuPtc9COrJBO1k6xC5y9rwdOcD/+gnr3V839kWvvMh/0GcDw2dYb2mIiACIiACIiACIiACIiACIiACIiACqSMgMT51LJVSKRE45JBDvFD49ttv+zMiSPfr18+HqymNLDAoJoJWWTcA4IEcDUFSGmXPtnO88MILSQc5JXzNihUr7IQTTrClS5dmZLH//PNPn2/EdL6zhKjZb7/9LPxuEM4xBvFEZMfwkse22247PyW2OHbggQf6sDZsJzQUHvIYAyavv/763hOehjKMxrJNNtnEz2fKvw4dOvhy5CVgF0bkju7DfGJaicvJ9km2rqDjAvfCsA4D/Eb35ZwI84y9ceedd9oOO+wQv/7R/dZ1nvvyiBEjbMqUKf5eyXdo7733jn/X1jU97S8CIiACIiACIiACIiACIiACIiAC2UBAYnw2XMVyWAa8lYOoSPEJK3LmmWda1apVS4wGITyIs01M7XvuucfHyC6xkxUiYcKDyIpOACGZ0CtRQ1jGQ5j46TfddJNtvfXWdvLJJ/sBgqP7pfs8ZaB82F577RWPBU5DFuVJtERBl8aIqJ144on23HPPGaFounTp4r3fCX9DjHEaLWgY4jyZaoQk4tpnu3GfpJxcM0R+PPsZWwAR/rjjjjO+B5MmTSoWBoR97k3/93//588TTYyeKE8++aR17NgxulrzIiACIiACIiACIiACIiACIiACIlBuCGgA13JzqbOnoD/88IOPe73bbrvFC0Xsa4TykjCEzYsuusgIZYFoFbyFS+JcSrP0CCDABtEZgZJ5RHjESIREhPhMtf79+9t3331n7dq18+FittpqK1++Bx98MFd4kquvvjou1OdXVnqetG/f3seQZ8Bk0n7++eetYcOG/rDBgwfHD1+0aJF16tQpvqyZ9CDw7bff2tChQ71Ajui+7bbb+nEB6DHRtm1bL8SnIqeMs9C3b18/9gCNODQAMDgs30XGI6DRlN+XTAREQAREQAREQAREQAREQAREQATKI4Hc7o/lkYDKnFEEGHiQkBIIgnhf4tW5fPlyXwa8nM8++2wfDzuVhUK46t27tz9nJnv/ppJJpqfFwL/ERceCCB884TOlbITPIcRM1PBKZhBV4r+3bNnSHnnkEb+ZMp566qk+Rjyx4E8//XSjUWvevHn+98IUW7JkidWuXTvu0czvDcPLnn0Q72n0Ii589erVfbioTTfd1PcU4XfYtGlTHy+e+PSy9CJw1lln+QzRyMS9ku8DIWpSaV999ZW//tyjaRBK7KlEw2aPHj38WAyM+xHCIaUyD0pLBERABERABERABERABERABERABNKZgMT4dL46ylsuAoiBCEgMGvnJJ59YrVq1rE2bNvbKK6/4/ebPn+892PHSJYTNoEGD/Ho82mvWrOmFyA022MBuu+02H7cYUej333/3aV5xxRW5zpW4UKNGDUN0lGUHAbziMRp1Mk2EJ998/wkZQ5gR4oDjoc6grAjiiK0MqkrZouFnHnjgASPU0rvvvusHXN1ll11s2LBh/reCcIpdeumldvHFF/vGJ5YJyRQGN4XTuHHjfJiTY4891jd8IebyO0N8vf/++znEh2865phj/Lz+pQeBiRMn2sKFC/33gkGJQ4+QVOfupZde8uMLMKZA9LsXzsO6W265xS/yPZQYH8hoKgIiIAIiIAIiIAIiIAIiIAIiUF4ISIwvL1c6ReVE/MOIN1yahpDIwJHEOsYOOOAAO++883LFjWf9kCFDbM899zQ8NAmN8PXXX/u8nnTSSWy2N99807744gvbcsstbd999/VhGhA2GdiSOPSy7CfAd6Jx48begzdTQ9E0b97cxowZs04Xq169er43AAO7MqArA3XyOyaEDY1SUcNrOWp77LGH97KfPHmybbTRRkZawfgtTp061YewYT2hSGTpRQDxHUE+DNRbUrnju9W6deukQnz0nMcff7x169bNN/xE12teBERABERABERABERABERABERABLKdQOkqqtlOsxyUL4SEKe3BDgl7wbkJc8Dnm2++scsvv9x7e4Z1YYrYigdmEFoR5/HUJB44Nm3aNL983333xa/YTz/9FJ/XTHYT2H333b3Hd/h+ZHdp1y5d/fr1baeddlqnBrU6dep4j3jCQkWF+JA6HvJ40EuID0TSa7r99tuXuBBPiWng4VOQValSpaBdtF0EREAEREAEREAEREAEREAEREAEspKAPOOz8rKWXKGCCB9E+ZI7U+pS3nDDDb04T6iZYKwjnjGewXj7MygrXvdHHHFE2MVPES0J1SHLHgKl3asje8ipJCKQPwF6VIwYMcIPCJvfnoQWa9WqVX67aJsIiIAIiIAIiIAIiIAIiIAIiIAIZCUBifFZeVlLrlB169b1iSNeZ4OFuMZ41SPKjxo1KlexFi1alGtZCyIgAiIgAskJEPrr3nvv9WMT5NVL4vvvv/eDAA8fPjx5IlorAiIgAiIgAiIgAiIgAiIgAiIgAllMQGFqsvjilkTRGMSU+MPEBs42I3TC7NmzbebMmfEPA8EGQ7APFmLnh2VNRUAERKC8EyAm/QsvvGC33367/fzzz7lw0PPorLPOskMOOcQ/Q9hPJgIiIAIiIAIiIAIiIAIiIAIiIALljYA848vbFS9meRHiGzZsaJkQYz14tS9cuNCXOhpah23VqlWz//77z29jQEssWTxsv8H9i/YGmD9/flitqQiIgAiIwGoCNWvWtD59+tisWbNyMSHEWb9+/YzxBWQiIAIiIAIiIAIiIAIiIAIiIAIiUF4JSIwvr1e+GOXeY4897MsvvyxGCiV/KB7tn3zyiT8RA7o+88wz9tBDD8VP3LVrV8PLP9jTTz9tHTt2jA/6GtaH6QMPPGAvvfRSWLQHH3zQEOR79OgRX6cZERABERABs7FjxxphaGj0bNmypR155JHGOB0S4vXtEAEREAEREAEREAEREAEREAERKO8EJMaX929AEcqPuHLTTTf5AU/DgK5FSKZED0H8CR7x4URnnnlmmI1Pe/fuHZ/Pb6Zz587GRyYCIiACIpA3geuuu87HjQ97PProo76Rk4FdGzduHFZrKgIiIAIiIAIiIAIiIAIiIAIiIALlkoDE+HJ52YtXaITuK664wsaNG2etWrUqXmI6WgREoFQJrFy50t544w2rX7++7bPPPsU+91dffWUTJ070PUuKnZgSyGgCo0ePNnoRnXPOOf7ZsN9++xmDZL/33nvWoUMH++677zK6fMq8CIiACIiACIiACIiACIiA2eDBg+2dd94RihQQuO2222yLLbZIQUpKIpMISIzPpKuVJnndYYcdbNddd/U3YInxaXJRlI1yS2DMmDHWs2dPY8qYDo0aNbIlS5YYovvOO+9s3bt3t6ZNm3o+U6ZMsdNPP903pCGaFleMv+yyywzP5wMOOEBifLn9Bq4p+IABA7wYz/cianwnCRf266+/2nbbbRfdpHkREAEREAEREAEREAEREIEMI0BI4BdffNH22muvDMt5+mSXcQsJ/3zllVdKjE+fy1JqOZEYX2qos+tEZ5xxht1xxx12yy235Iq9nl2lVGlEIP0JIIQPGjTI6tSpY/vuu699/PHHFovFDI/1q6++2leQBg4caCeccII1aNDAV5q23nrrlBSsb9++8bEZUpKgEsloAvS2SPbdWrZsmY8h36lTp4wunzIvAiIgAiIgAiIgAiIgAiKQQ2D77be3UaNGCUcRCXzzzTfGeIyy8klgvfJZbJW6uAQuvPBCq1mzpp1yyim2dOnS4ian40VABIpBoFatWl6MD0kQGgQvhXvuucdWrVpljz/+eNhkNWrUiM+nYibV6aUiT0qjbAgcc8wxdsMNN9jQoUO9FzwVzOeee872339/23HHHVXZLJvLorOKQMYT4Dn21FNPGb27ZCIgAiIgAiIgAiIgAiKQ6QQkxmf6FSyj/OOF+8orr9gXX3xhBx98sA9Zg/ejTAREIH0IbLTRRj4zy5cvj2cKoT7RCGvz7LPP+ljf119/vX3++eeJu3iB9eKLL/be9owXESya3oQJE+zuu+/2H8LgyMoXAXpm3Hjjjda+fXvDUwZPD3pR/fbbb/bwww+XLxgqrQiUEIH58+cbDhE0wtIYSuNXXnbNNdf4feixQjzSTLWpU6faBRdcYE8++WSmFkH5FgEREAEREAEREAEREIE4AYnxcRSaWVcCLVq0sJEjR9q0adPspJNOsrp16/p4wIgwyT7//PPPup5C+4uACKwDAUR3hPV58+bZZ599Fo/jnl94kP/++8/3cEFgJ6zN9OnTvSczMQCDIbASlgphtXLlytayZUsbMWJE2Byfrr/++nbXXXdZ1apVvbAf36CZckOAMQl++eUXI378ddddZ4899pj3kidEkkwERKD4BHCGeOKJJ4wBkhcvXuwbP5OlOnfuXD+mB/sQi7Q0xXieP6+++mqybBVp3TbbbGNjx441GotlIiACIiACIiACIiACIpDpBBQzPtOvYBnnv1mzZl5o+emnn+zbb7+1SZMm+bAYybJVpUqVZKu1TgREIEUE+B0effTRRsMX84jzxIo/7rjj8jwDYinC+sKFC73Q3r9/fx9vnkE4W7du7b2a8XYfMmSIF38YjPONN95YK1wAXvE0yr3++ut20EEH5Xk+bcheAgzmS0PNbrvtZmeeeWa8oDNmzPDCvLxa40g0IwLFJrDpppvaBhts4AfvZqwQHCSiRngyGkZpoN1kk02im0p0fsWKFYZH/tlnn53S8xDuSiYCIiACIiACIiACIiAC2UBAYnw2XMUyLkOlSpWsSZMm/lPGWdHpRaBcE9h1113jg+ggiOBFSLgY4uwSUiqZvfvuu37QTTzeMcLOnHjiid6L8uuvv/aNbMTrPfTQQ/12BCCE96j98MMPxkCyvXv3lhAfBVPO5ullQWiaLbfc0nguYHx3aBxiyvejdu3a5YyKiisCJUOAezW9T7p27erHB4l6ohM2kMYxejvdcsst/r4ezcWHH37oG1UXLFjg79kdO3b0+zD49wcffODHeujTp489//zz9umnn9rJJ59sjAkRjGcKA4czLgSNb+eff77Vq1fP8ManIW7MmDHGs2LWrFl2+eWXW/Xq1a045/zjjz98iJp99tnH2rRpE7LhQ/S89dZbVq1aNd/wLME+jkYzIiACIiACIiACIiACaUxAYWrS+OIoayIgAiJQVAKEjLn//vtt5513ti+//NKicd6jaeJBTzze6JgPxBfGEPRnz57t58ePH++n4d/KlSvDrBdhEPNvczGJ58yZE1+vmfJHADG+VatWduCBB/oP84iG9LL4+++/yx8QlVgESpAA4zTwW6NH0o8//hg/EwMnE8Zm2223ja8LM/R+YvwPPNd3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A+PlMYZfNlrpjAySjeRUJhEQgXJD4K233ipWLMVyAyrDCsrggrLUEcAjfuLEiRZix7dv397atWtnhxxyiB1++OGpO5FSEgEREAEREAEREAEREAEREAERyBoCHTt2tDFjxvixCxjYuk+fPt4rnrHxstEkxmfjVVWZREAEUkbgoosusiOPPDJl6Smh9CPAIIOy4hN49NFHrWXLltapU6d4YnjJz5gxw66++mp78skn4+s1IwIiIAIiIAIiIAIiIAIiUD4I4PWcqpCVf/75pw0bNswY1LOkBjweOXKkrVixwo444ojycYHSoJR///23z8W8efPskksu8df4559/ToOclUwWJMaXDFelKgIikCUE8OqViYAIFEyAngZ77LGHbbnllvGK8apVq+yff/4xpr1797batWsXnJD2EAEREAEREAEREAEREAERyAoCc+bM8e8Iv/76q/d6Lm6hnn32Wbvxxhtt3333td133724ySU9vkuXLvbvv/9aNovBSQtehitvvvlmI+zpokWL7PnnnzeuczaHOVXM+DL8sunUIiACIiACIpBNBBDjW7Vq5Ue9Z+R75hkzoHXr1ha8HbKpvCqLCJQnAt9++6298MILKSky3maDBw+2L774IiXpKREREAEREIGyITB79mx75JFHbOHChSnJwFdffeWFuJQkpkTSgsBTTz1lCPKEsiyKffbZZ/bqq6/GD73iiits9OjRKRPicShC3I8adZThw4dHV2m+hAmcffbZvkc1MeOnTZtmJ5xwQgmfsWyTlxhftvx1dhEQAREQARHICgLEjKfS+swzz1j//v3jn4EDB3rP+J122ikryqlCiEC2EHjssceM32WNGjVs8803t+bNm9sWW2xhjRo1smuuucbmzp0bLyovvnvuuacXXOIrizgzefJk31B30kkn2SeffFLEVHSYCIiACKQ/AQYgPProo/19lnstXp5NmjSx7bbbzg9uf/fdd/tQGOlUEmI2H3XUUT7PderU8ff+xo0b2/bbb29t27a1b775Jp7dQYMGeUEUb9YFCxbE1xd1hnSaNWtmTzzxRFGT0HFpRgChm/oG4WSYxmKxdcohjfeJdRJ+SwcccMA6pZPfzsQm//rrr3Ptsu222/r6UK6VWihxAlzb/fff37j3ZLtJjM/2K6zyiYAIiIAIiEApEKhevboli7+/9957ew/Y3377rRRyoVOIgAgUlsDFF19s1113nS1evNiuvfZaL4xPmjTJHnzwQXv88ce98DJ//nyf3EMPPWT8llNhvOA+99xzqUhKaYiACIhAWhMgjAZOCUuWLPEiPIMSjh8/3vD0ZRveuMcee6wPh5EuBUHkRGQnzzvvvLPhqT5hwgR76aWXjFjOe+21l73yyis+uzSqEs4jVcZYQzT8yrKHwOuvv2677LKLH4jzl19+sXfeeSdp4Qhhw+/hnHPOsZdfftnXTXAKaN++vR/UE4cfGq+os+AVf/7553ungSlTpvj1bOMTwspQz2CZ7y32+eef26233mpnnHGGPfzww7Zy5Uq/njCa1IVwFGB/RHm++zgWsX/UPvzwQ/99v+CCC3w9JjQsMH3//fd93mmUotEBL2/i2stEIC8CEuPzIqP1IiACIiACIiAChSbwxx9/2KmnnuorqXiw8KGySrgaKqmEq5GJgAikF4Gtt946V4aqVatmbdq08QMx06WcF+JgeCulylKZVqrypHREQAREoCQI1KpVy3t5Rh0WNtxwQ+vVq5fdf//99u6773qP85I4d1HTDHkOx1OHQ4S/5557fG9HGmyDpfp+nur0Qj41LRsCNObTu+7SSy/1GSCkUaLRG+Oggw7yjT9nnXWWnXbaaT52OGNOnXzyyX53Bn9t2rSpD1dz0UUX2f/+9z/fiFW/fn2j7nLDDTcYYj89OLAWLVr43xde1jQA0PuPwVhPOeUUn58ePXr4/UizQYMGflwr5unpe8stt/gBRPltBkOcx4kBkZ3GBQYY5b0HI7Y5eWKfDh06+MY2Qq0QZuX3338PSWgqArkIaADXXDi0IAIiIAIiIAIiUFQCVHapfK63Xk5bP11SGdD13nvv9RXdoqar40RABEqXwMYbb+xPSPfwYMka1PBIw4OSsAW77bab91SrV69eOMTwdOvXr5+P/UnYA4R+etEkpoXnaOg9QzqEdZCJgAiIQLYTICwLXrQjR440Yq8jBGLff/+9DRgwwI+3g6iICIiY/8EHH3iPXMJqMMAhYXAQK4855pg4KgREvIE32GADf6+lDhaMey11Ne7BiJKHHnpo2FSoacjf8uXL4/sn3s/ZgGcxMbfJL6F5TjzxxFy9q5YuXep7YOF1zwCceNiHxmHSCx7HeOS/+eab/lyVK1e2zp07x8+rmfQn8N133xm9QQ4//HD/ncNBZ+jQoUbdoYETwIN16tTJh206/fTT/aozzzzT1xuoTzD+FIYAfuSRR/r5f/75xwvqLPCucfnll/vfET1Owvfx7bff9o5BiPj8lhDtW7Zs6Y9nnh4qGL8Bvtf8XkL69913nxfUQx3or7/+8g5GjJuz6667+g+9RG677Tb/OyK/jI3VtWtX69atmxf++Z2RHp7222yzjT+X/olAlIA846M0NC8CIiACIiACIlAkAgjwdAFdtGiRH8SLgbzoXvrDDz/4ynCREtVBIiACpUKA3y0vnX/++af3hsdjE89NBJS8jC7dvNgSdgZPNl5SifUbvMDy8nRLlh49a/By22effeywww5LtovWiYAIiEDWEUBgx3MX8RlBHiPcRceOHX3cdsQ8BOibb765UN63o0aNsp49expev4jchOMIdtVVV3mvYjx6ud9zry1oEG1Ed4R1hEeETvKFIZ7mZcQIR+gfN26cXX311TZ9+nRfxhdffNEfQpgRvJR5hhAehGcH937WJ9r6669vd911l1WtWtWHAEncruX0JsD3jzoCA7fSMM+4NHi7R3tWzJgxwyZOnJirYYj98xs8le9D1BDgadiiEYsQNhhe6ueee66fv+mmm/z7yJAhQ6xdu3b+/YTvdX5WpUqV+GZ+m4S1CV73bAge+++9957fj8YijNBOGONCYNHxd/wK/ROB1QQkxuurIAIiIAIiIAIiUGwCvJghxMlEQAQyjwBCOJ5riEKIKMSKJxwBHo15GXFd99tvP98Nm67fCCoI8cR8xaKebni2BU+3xPQYqO/VV1/1MesPPvhgQ3yRiYAIiEB5IRC8ZsMAkojv9CSihxJhMxg8lTAYeA2fd955HgvetwiWjz76qOFlHo5FbOT+jTBIbOzQywgPc7zpCR9IAwDbsGeeecZP8/r3008/+TTwaCaWPJ74hN447rjj8jrEeyiPGDHCCE+CFzGi6I477ujFUhw1iMuNEI/HPt7OhBehx9S0adNypUmeEU6JOX7llVda3bp1c23XQnoTwHv9rbfe8iGYEOD54IVOvYI6B99bbNasWX4aPNX9gvsXYrqH5eg0eL9H11HHILwSYXA++ugj/7sJPfXodUI9hV4WNArwmyrIoufgd4ARBicYHvdYyGd0f9bjsS8TgfwISIzPj462iYAIiIAIiIAIFIoAlVBeAnmJxBsKoyJOhVgmAiKQ3gSI54pHJWI6HxrWGBwNQT6Z4UnPbzvqJdakSRPvEYaXWGE93RgsFpHljTfe8J74yc6ldSIgAiKQzQTokYQhyv/777/eu5dBIAmzwQfhnPsk6wryvkU0J2wY3rnEow/e6IjoNHTSg5E0v/zySy+KFzRYKmI6zwbCjZA36ngM3hpChyS7LoTJIeRMyCv1Q3pZUSek0QAvY3pVBc9jQtQgzjdq1CieHL0qEf8ZXJxY4rLMI0BDO437NABRnwgflhHHw8CqDRs29IVjsNMQnogV1EuivSWi25LRQIinlx7vIiHme9jvwgsv9N9fGrDo9Yclppe4HI5lusMOO/jF8H7DQmhMwIlBJgJFISAxvijUdIwIiIAIiIAIiEAuAryc4S2F5xUetrz4Pfnkk97TNnQTzXWAFkRABNKSACIKnowYHmaEHEi0SZMmeW+wqJcY++AphpdYYT3d6LLOCy2Ci0wEREAEyhsBBEDqSxgDpIZ75yGHHOJDuBDGJXzwDC/I+xbR+7nnnvPe7126dLF9993Xi+CkG0LThPSYnu0GoyysIeYj8CP0I+ZHhcloGngRT5061ZYtWxZfHeLBkwfykugFzY7Bw5h5PJoR84nJzWDisswigNhODwi81RONAU4xri2hYhiwl+8toWoIg/Taa6/58DKI9PSYqFmzpt+f8QXoJUG8eRwCsMRQMwwSS52F7wzf/WCEiiHuO3UWGglo7CGPTz31lN+Fc/C95cP7DEZDQGgM4P1m88039+cnZBOG1z8heFq3bu2Xw/qQJ77rWEjDL+ifCEQISIyPwNCsCIiACIiACIhA0QjgiYWHFRVgBnTkJRAPKmKM4mmrymjRuOooESgLAuFFF3EkUfwhP7yAEuogUYxBWMdLrLCebsRcJaYw3moMYigTAREQgfJEgIZPvM4Jx0KPJBo0CW9Br6FoQyj3ySDU58eHEBzt27e3H3/80fAGJm0Geg33ZAZVDcZ9Pr/Y72G/6JQ8BbExmr/oPvSYQohHsA/GMZQLgZTnB+OEEN87GPkitE0whE/qkgioeFfnda6wv6bpQwBRHaccxGlitdPrIRjfue7du/tF3g3o/UDDTN++fePjCnC9EbKJAY8xsCq9I6gjIICTHoI6xu+C70iwnXbayY+FwICuUWOZ7xAe7vQOYcBjemmEgYj5/ZGftm3b+jz17t3bj6dAqCTGX6BRgB4f4TtMGCl+owxGS/7obRKcGGgQYNyHkAfyTe8SmQgkElAgo0QiWhYBERABERABEVhnArz8EWqiTp06duyxx/qKKQI9g3IxiBFeKMzLREAE0ocAA+slGr9VYvhieE0yODNGg1oQYfAiI2Y8XmW8oPLiPXPmTMNzbeDAgXFPNwQWPN0Q3bk/EKeVl1r2xUgP7zkGESQMA9vzC3/gD9I/ERABEcggAjRSEmImagiDxFTv2rWrD9lCLyQMse/UU0/1MeIZvJU48dyTETaJIR/1vq1du7YXLTkuODzgZc8+iJQMnjlgwAB/zyWtTTfd1IceQ4AkFj3x4nGaSGbJ8kxjADHqf/vtNy9qEmoGC4234fmACIloijjJuCJ4/xOChF6SPDt4rrCMNzRCJ97KY8eO9etIL5SF9IkrTx5x8ED8lKU/AZ7jYQyDxNziBR9tEIpu5zuA0M57RIj1HrYjZvO9DuMGJOtZEfble5d4PJ7tCPA4GBDOht8f4xeE9BD++a2FZb5vfKJGKD6+q+SREEtbbrllfDO/L8T8qBEfXyYC+RJwN0eZCIiACIiACIiACMR+/fXXmKs0xD7++ON1puHCVsRc1+WYE91i7sUpdvzxx8f23nvvmBPWYq7SGnMDiq1zmskOcC94Po+uy2myzVonAutMoHnz5jH3IrbOx2X6AQ888EDMeWH631O1atViboC9mHu5jDmBJ+aEmpjz5ooX0YWf8r9jJxTFnHjk1zvBxP/e2d/F/I05j7OY81aLH+OE/pjzkvfpcw9wL7oxjvn5559jbdq08eudF1vMDagWu/766+P54P5RHo17JPdf12hRHouvMotAkQk4AS3mxOwiH1+SB1KfcqKy/227hs1YgwYNfN1o99139/fBxx9/POYGtsyVBRc+I+YaOP0x3BPcIKcx50kec57jMRfuxa934mLMjc8RcwO0+mUnFMZcLPaYi8cdq1q1asw5SMRcOBA/dQKkT3/06NEx53EeT9fF8M513rDgejz5uhvnJs88J7hXOyHd599508ecMOp3dwJqzImvPk0ndsacUOnX8yzgueIGzYy58Dsx5+0cc40A4RT+nu96XfnjWrRoEXPeyn6bC50Tc+Fp/MfF/Y598sknsbCfGzQ25jyV42mk2wx5hZkTbNMtayWSHydWx/bYY48SSbu8JOoaLfx3xjW4lZciq5wRAhWYdzcNmQiIgAiIgAiIQDknQBxovNjdy6M5gXKdaNDt9DYX/xGvF8JXYIS3wDvlvPPOsxtvvHGd0strZ7qEEp+R+I/BgyWvfbVeBApDwAkBPjwAXoSydSfAb/Hvv//2cYSThbTJy9Nt3c+U3UfgOYtHID0IXGNFdhdWpROBFBIgTETPnj3tkksuSWGqZZ8UA7syaCqhNUIPpYJy5Rr1vCc8992NNtpoLQ9hPIIJYUPdbLPNNisouWJtJ9QI52JgVnpEJRrPDuJ2RwcCT9wnk5bplUDdGe9p6tLZbtdcc433cqfuLysaAcI1devWzfd+wfNeVr4IKExN+breKq0IiIAIiIAIlAgB52Fl77zzjjlPLXPeULnOwcufTAREIDsJIITxycuIDywTAREQARFYNwL169dftwPc3jToYa6nk58m/sNZorREPwZ83XXXXROzEF8u6NkR31EzaUmA7xIN8YxNICs6AX4nyRwZip6ijswUAhLjM+VKKZ8iIAIiIAIikMYEiJ04ZMiQpINsEf/0zjvvLBeeQml8iZQ1ERABERABERABERABESg2AcZ74SMTAREoGgGJ8UXjpqNEQAREQAREQAQiBBjQy8URNULdJHrCM1iji0HqByQ75JBDIkdpVgREQAREQAREQAREQAREQAREQATKDwGJ8eXnWqukIiACIiACIlBiBF566SX76KOPzA3WFe8mHU729ttv28EHH+zFeOKGrms8+pCOpiIgAiIgAiIgAiIgAiIgAiIgAiKQyQQkxmfy1VPeRUAEREAERCBNCBx44IH2/vvv+8GcEgcaY8DVJ554IukAXmmSfWVDBERABERABERABERABERABERABEqcgMT4EkesE4iACIiACIhA9hPYf//97a677vJi/I8//mgLFiywRo0aWfv27a1bt25WpUqV7IegEoqACIiACIiACIiACIiACIiACIhAPgQkxucDR5tEQAREQAREQAQKR2DVqlXWq1cvP4grR9SqVcuWLVtmXbt2teeff94qVqxYuIS0lwiIgAiIgAiIgAiIgAiIgAiIgAhkKYH1srRcKpYIiIAIiIAIiEApEnj66ae9EE88+OHDh9vs2bPthBNOsC+//NKuu+46L8yXYnZ0KhEQAREQAREQAREQAREQAREQARFIOwLyjE+7S6IMiYAIiIAIiEDmERg7dqz3fn/ttdds0003jReAUDX77ruv/fDDD7bXXnvF12tGBERABERABERABERABERABERABMobAXnGl7crrvKKgAiIgAiIQAkQ2GabbaxmzZq20UYbxVNfsmSJIc7jKb/VVlvF12tGBERABERABERABERABERABERABMojAYnx5fGqq8wiIAIiIAIikGICl112mdWrV8/69u0bT/nzzz+3448/3g4++GDbZJNN4us1IwIiIAIiIAIiIAIiIAIiIAIiIALlkYDE+PJ41VVmERABERABEUgxATziJ06caFWrVo0P4tquXTt75ZVXrH///ik+m5ITAREQAREQAREQAREQAREQAREQgcwjoJjxmXfNlGMREAEREAERSEsClStXtk6dOsXzFvWSj6/UjAiIgAiIgAiIgAiIgAiIgAiIgAiUUwLyjC+nF17FFgEREAEREAEREAEREAEREAEREAEREAEREAEREAERKD0CEuNLj7XOJAIiIAIiIAIiIAIiIAIiIAIiIAIikAUEYr4MOf+NSSzmJ0zdQs58zobVq1bvu3pdzuE566L/OTbnk5Nm7rRWrwvnCumT2Frn9SvZwMzq7WEpui55vn0uVqe5OoGcSa60InldK9+cK7I9SVrR7dH5kEt/Qn9csrTcVl+McKRbWL3vmoxqTgREQATSj4DC1KTfNVGOREAEREAEREAEREAEREAEREAEREAE0pQA8m8F92f+40TgCjnz/M+ZZwtKsV+zelXOfFjHrmv29Qvu35pjWLP29uTrcp/XH+j+5U4r5vJYIWQ1V75X58iXIeQup3Th/IlphfWr91rrXGtvX5NvcpdwltVrAp8k+fZHRLavzmsOXnKRc0zuI32y+icCIiACabPonWsAAEAASURBVEdAYnzaXRJlSAREQAREQAREQAREQATyJ5DjB4gwkSg9sIwF0SJnac3/vLYnpsMRydatSSlnLtk+ietYxqJ5SrZuzV455Us8huXEtBPXBYGM9TIREAERKBkCeYrQuU4Xvefl2pDPQmGPSXYvjCa79nafcq7kw8La+0ZTKvi+y94hrdxHFm0pd1q5l/I619p7Fe3cOkoEREAESp6AwtSUPGOdQQREQAREQAREQAREQARSTgDpIQhCOfM5y6xbs5wjkaxZztnKMpZ7fXQ5J62cvRLX56zNOTbZuRLX5Zxz7fMl7pdznpz9co5Zk7+Qh5DzsMx0TTohv5qKgAiIQEkSyN1giJidYAWES1mxYoUt/Pff1QetOT7mjlu2bJn9G9/mdikgrYQzr15cc69Mvj26NsevPLomZz7kK1larAvb1z4y9/F5bS9ofTT96Hw4bs1VCHnJqyThCE1FQAREIB0ISIxPh6ugPIiACIiACIiACIiACIjAOhKISxNOqEHAiS+7dFiO2sqVK+2///7LtR4phXWIQon75xyd8z8vGSak78+9Og+rVq1aKy32y52bcGTONBzv90tSllzrKZf7BBkoHBuma+T83OfQkgiIgAiklkD8LuSSdRKwuy8tXbLYZsyYkXOa1WFUVrl77Ey3bqWbYuw3d+5ce+qpp2za33/n7OvvaKtn3WTBggX27LPP2pQpU3JWhpAs+d5J2TV6p82ZX758mc2cOcP++ecfn+6cObNt9uzZ9p+7V+fY6mNiq2ze3H/s559/tkmTJ6/eHi3j6t3jE47LeTpEz5o7Dznb44fkyt+atWvmcqcU1uc83RLPlbPvmjMkbg9HayoCIiAC6UdAYnz6XRPlSAREQAREQAREQAREQAQKILBGeJg/f74tWrTIYqvFlRUrV9jcefNs+fLlPo2lS5fa2LFj7a+//jIvlru1QfKYOXOmjRs3zkgDkShqOZJ3zr5sCZ/oPnhwTp8+3Yk9M/2U+RlufvHixV7kZ9/cqa6dzvz5C2yOE4oQqBCJyEv0OBoMEJL+cdsp1+w5c3zalGWeX57tjp9jCxcu9MfpnwiIgAiUNIGcOzD/V9+L3f1z9ozp1uehh2z5fzlCd8wJ3LNm/G0P933U3bNy1nFvfGbAANtwww2tYcOGa2WzghPe69ata3vttZc9+eSTCfe1nHPlHBSdD8mwLtxxcxoI5s+ba2+89prdcG0XO+qoo+yuu3vb+yM/dN73Oc+HnPzHXMPsKvtxwg/W8/Zudv6FF9m/i5esThRf8+i51qQfPWuYz2u6CiaxNemsWvWfff/NF9bpoovsm+8nxM/FzH9uW87zKGf/nL5PObusSWHN3OqD/ST52ugemhcBERCBsicgMb7sr4FyIAIiIAIiIAIiIAIiIALrRsAJP4gOfD7//HMbNmyYTZs2zYvUn332uQ0dOtTmONEaQWPE22/7sAcIPBUrVswlq2y22Wa2ZMkSL8gTFiEqs0RFjXCukMmwHwL6+++/b8cdd5zdeuutNnLkSBvmzt2rVy8b4AQnGgKi6XBcNC3yN378D3bP3XfboYceaq+88opNnDgx1z40KowePdouveQSO6VDBxszZrQP4bDCrf/oo4/smmuusdu73+49OqPnCnnVVAREQARSTSChL5Ktt956VqvuhlZh5VK75trrbZy7N73z9gi78aabbaPNtrSqVSr5+/OXX3xhv/z6q7Vu3drWX3/9pNli/U477WQbb7yxPffcc0n3yXvlmrsgwn69ehtb+xNOtD13a2I//vSTHdu2nbU59mirVrVKJIkKVqlSJdut6V528okn2BzXKLpqVbjL59yz1+y8Jv0166Jza2/HO/+VIa/Y0uUr4jvGXPozpv9tY9y9fdqMWfH1K11j8oihb9o/8wrTuLr2ueIJaUYEREAE0piAxPg0vjjKmgiIgAiIgAiIgAiIgAgkJeBEliCV4EH5/fffW48ePeyGG26wRx95xLbcYgvvefnzLz/b7y7UAcJO7dq140kFCQOxBhGc4//8808jpEKisW84V/y41esQ808//XQvRDVp0sROPPFEO/fcc+2KK66wPn362D333OND4USPi6bP+Vu0aGF7772399w/5ZRT/HI4H9Nq1arZ4Ycfbptvvrn37G9/fHvbYIMNrErVqnbIIYc4gf4Ua9/+BGvWrFk8n9FzaF4EREAEUk0gx1ubOxSfnDtcLXeP7XTxpVbZlttNN3a1B/r0tca7N7Nzzuxo3Ovwih84aJAddthhVqNGjXyzxHbue++9955vWM3ZOdwZ8zp07e3ruQbYGjVrWFV3v6Q3UY3q1a26+5CfRKtcpYpVr1nL38/XTilx70IuuwbXJf8ucI0TH1sF12ARrKIT/1u2OtyGDx9uBx/QPKw2xPiRoz60/9xxRbK1i1WkZHSQCIiACJQkgUolmbjSFgEREAEREAEREAEREAERKBkCaA7IFYQ7QIT/8MMPberUqdapUyfbdtttvafjh07UaNiwoRev88pF5cqVrUGDBvbJJ594wbuO86APekbiNJpG2IZ3Ox73CD3BNtpoI9t1111t8ODBPm9Rj/wlS5a6vFXM5RVKGnhmEtseC2mHKevwPGWfYGEb+Sc9mQiIgAiUFgGvFTtBO9yHOO9661Ww+ls3sFu6dbc//vjdli5baU2a7GzVXYMi90dChU128dj322+/ArPJPXML16haq1YtGzturLU9rq07Jnq2ZEkUtH1Nw2o4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IIAAAggggEBWBQjGZ1WM7RFAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQyKJAUgbjx44da23atLHixYtb8+bNbdu2bRFs77//vh177LFWokQJ6969uy1btixiPTMIIIAAAggggAACCCCAAAIIIIAAAggggAACCGRFICmD8d26dbOpU6faCSecYF999ZVdcsklEWZdu3a1J554wqpVq2bvvvuu1ahRI2I9MwgggAACCCCAAAIIIIAAAggggAACCCCAAAIIZEUgKYPxAsqfP781adLEWY0aNcoefvjhCDcF4itWrBixjJnEEtCDltGjR9u0adMS68Q4GwQQQAABBBBAAAEEEEAAAQQQQAABBBAInEDSBuP9K6EgfOXKle3uu++2iRMn+ovT/F6yZIkNHDjQevXqZY8++qitXbvWbbd371777LPP7OKLL7ZNmzbZCy+8YBdddJFNmjQpzXpYGAyBc889184++2x78MEHg9EgWoEAAggggAACCCCAAAIIIIAAAggggAACCSuQ9MH4KlWq2HvvvWeFChVyQfZFixalebEXL15srVq1stq1a9uFF15ob731lh1zzDG2dOlSGz58uPXu3duGDRtmPXr0cKlvvvzySzvzzDPd+jQrZCECCCCAAAIIIIAAAggggAACCCCAAAIIIIBA0ggUTJozzeBENYjryy+/bBdccIF16dLFZs2atd/W6vV+/PHHuwC7VlatWtWOOOIIu/POO+3NN9+0lStX2h133GH33XefHXfccfbJJ5/YKaecYvPmzbOaNWvuVx8L8l7glVdesT179pgeyFAQQAABBBBAAAEEEEAAAQQQQAABBBBAAIHcFCAYv0/3/PPPt2+++cYef/xx69mzpz333HMh961bt9qMGTPs1ltvDS1r3LixNWrUyCZPnuyWFS5c2H1rmUrdunXd9/r16933O++84wL2bsb70axZM2vZsqU/y3ceCOjhCwUBBBBAAAEEEEAAAQQQQAABBBBAAAEEEIiFAMH4MOVHHnnEvvvuO/voo4/slltuCa359ddfbffu3fbzzz+HlmmievXqtmrVKrcsX758EesKFoykVS/smTNnhra5/fbbCcaHNJhAIP4Fdu7caXr4lpWBn/WgTw/qTjjhBKtVq1aaCJ9//rnt2rXLOnTokOZ6FqYvsGDBAlu4cKFpfAgKAggggAACCCCAAAIIIIAAAgggkNcCSZ8zPvwCFChQwEaOHGn169e3999/3zQwq4ryxGvdf//73/DNbfv27ZkOqCttzebNm0Ofu+66K6IuZhBAIL4F3n77bbvyyiszfRLTpk1zb8hccsklpgd+6ZWbb77Zrr322vRW58lyPZjU2BklS5a0MmXKuHEywhvyww8/uDE4ihcv7sbWGDduXPjqmExfd911dtRRR0W85RSTA3MQBBBAAAEEEEAAAQQQQAABBBBAIB2BpA7G//nnn7Z69eoImlKlSpkCR/r2e7uXKFHClDNeeeE//fRTt/2aNWts7ty5ds0117j5DRs2uO+///7bfasnq8q2bdvcNz8QQCCxBQYPHmwTJ060ZcuWZepE27RpY0888cS/bvvuu+/ahx9+GLHd/fffb/69JmJFjGYOO+wwe/31123QoEGme98ZZ5wRektITWjQoIEbS0PB+ldffdWNxRGjpoUOo+uhdGAUBBBAAAEEEEAAAQQQQAABBBBAICgCSRmMV8qZ3r17u17wzzzzjCk9TXhRz3j1kFdveL8osHP22Wdb9+7d3Xfr1q1dfnkN0vrxxx/bsGHD3KYKzn/22WfWp08fN//CCy/Y1KlT3TQ/EEAgMQU0poRSXP3zzz+m/+czW/Sg79+K3sypU6dOaDP1OtfYFjpWXpemTZta/vz53YPKbt262Y4dOyKapIGus5K2J2LnHJhRz3wKAggggAACCCCAAAIIIIAAAgggEBSByMTmQWlVLrdD+dxffPFF90nvUKeeeqodeeSRodXFihWzUaNGuZzQ6iGvgVr9nvMKyC9dujS0rSbat28fMc8MAggkroAe1mnQ53vuuceGDh1q/fr1syJFioROWLnhlcZGb9S0bdvWXnvtNbv66qtD9xAF1ocMGeJSYR133HHuYaGC3Or9rvvO4sWL7YEHHnDjTmiA6S1btthTTz3lBorW9i+//LK75yhQv2jRIhs4cKC7V40fP96mT5/ugvkXXXSRS7ml9FvKQz9ixAi7++677dlnn7WyZcta+DgXyrGuMTGUz/63336zSpUqubQ0oRMKmzjttNPsoIMOstGjR7t269zSK0rVJaf58+dbjRo17Prrr7fy5cu7HvZ79uyxhg0bWufOnd3bSToXGWj8jvT8lIZm9uzZNmHCBNfOY4891q666qrQufj36PTaw3IEEEAAAQQQQAABBBBA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AAEEMhZIqjQ1pUqVchrKex6roh6kffv2dT34YnXM3DyOBmpUYfDF3FSmbgQQQAABBBBAAAEEEEAAAQQQQAABBBBINIGk6RmvC+enX/AvolI1TJkyxeU/Vv7iN99802bNmmVnn312KMfyb7/9ZkOHDrWzzjrLlL/5448/tiZNmtj111/v0jTodXkVDZJ42GGHucEJNd+oUSPTYIXKuzx9+nQ3qKLyrGsARAWylTbniy++sPr161v58uWtd+/e2i1uSv78SfUcJ26uCw1FAAEEEEAAAQQQQAABBBBAAAEEEEAAgWAKJFUwPvoSDB8+3Pr372+//PKLrV692g1o+OWXX9qoUaNcoH3VqlV20003mXLnzp4929asWWPKp6v9NOjgkCFDXPD+sssuczl2FVhXruAjjzzSunXrZscff7wL7E+cONGqV6/ulqtn+c0332xKCfHII4/YnXfeaT/99FPcBOP37NnjGJUGg4IAAggggAACCCCAAAIIIIAAAggggAACCCCQOYGk7t6sXuuXXnqpk7rvvvvstddeM+WS1wCH8+bNc4PXPfzww2597dq13TL1lC9XrpzbVsH6Zs2aRUg3aNDADYKohWXLlrV27dq59Rrs9JRTTrHChQvb2LFj7a+//rKqVau6QWQZgM4R8QMBBBBAAAEEEEAAAQQQQAABBBBAAAEEEEhYgaQOxuuqKjiuorQyKnXr1nXf69evd99FihRx3507d3bfCrB36NDB1EN84cKFbln0j+h0ONHr27Zta0888YS1aNHC5s+fb88880z0JszHQEADVB588MHmX9sYHJJDIIAAAggggAACCCCAAAIIIIAAAggggECSCiR9MD46cO4PUJrRn4eTTjopo9X/uk498K+77jqbM2eO6y2vtDWU2Ats3brVtmzZ4t6EiP3ROSICCCCAAAIIIIAAAggggAACCCCAAAIIJJNAUgXjNWDrgZZdu3aFdl26dKmbVm96v2e9grrhxc+t7i8LP/awYcNMA8bOnTvX5ZF/8sknTSlvKLEV0AC7bdq0sSOOOCK2B+ZoCCCAAAIIIIAAAggggAACCCCAAAIIIJB0AkkVjP/jjz/cBd60aVPoQm/YsMFN//333+7bD7pv27YttI0mwlPSfPjhh3bmmWe6QVmrVKnitpswYYKp3scee8wNyLpixQqXF75EiRJuvQLv48aNsyVLltj9999vyj2vIPBdd91lRYsWNQZEdUwx/TFlyhT74osvXMqgmB6YgyGAAAIIIIAAAggggAACCCCAAAIIIIBA0gkkTTB+1KhRdvXVV7sL/O6775pSw7z//vumXuoq11xzjX322WfWp08fN//CCy/Y1KlT3bR+PP3003bZZZfZ8ccfb4UKFbJnn33WrStZsqRdcsklNmbMGFMOcgXW69WrZ8uXL7c333zTLVOOeNU3ceJEq1Wrlss337x5c7viiits8ODBpp7xFSpUCB2LCQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAIHEEiiYWKeT/tn06NHD9IkuXbt2jVjUvn37iPn//e9/bv6VV16xOnXqWPHixa1mzZoR2wwdOtTuuOMOO+SQQ9zn1FNPdQPB5s+f8qxDQX31wC9durTb79dffzXlqlfv+IYNG4ZS3URUygwCCCCAAAIIIIAAAggggAACCCCAAAIIIIBAwggkTTD+QK+Yn/tdgXXliE+v1K1bN7RKPeOjix+I1/JSpUq51U2aNInejHkEEEAAAQQQQAABBBBAAAEEEEAAAQQQQACBBBRImjQ1B3LtFIifP3++23XevHnm55M/kLrYBwEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQCB5BQjGZ3DtZ86c6dLLDBgwwNQzfsaMGRlszSoEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBNIWIE1N2i5uacuWLU0fCgIIIIAAAggggAACCCCAAAIIIIAAAggggAAC2RGgZ3x29NgXAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAIFMCBCMzwQSmyCAAAIIIIAAAggggAACCCCAAAIIIIAAAgggkB0BgvHZ0WNfBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQyIUAwPhNIbIIAAggggAACCCCAAAIIIIAAAggggAACCCCAQHYECMZnR499EUAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBDIhADB+EwgsQkCCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAtkRIBifHT32RQABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAgEwIE4zOBxCYIIIAAAggggAACCCCAAAIIIIAAAggggAACCGRHgGB8dvTYFwEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQACBTAgQjM8EEpsggEBsBZYsWWIrV66M7UE5GgIIIIAAAggggAACCCCAAAIIIIAAArkoUDAX66ZqBHJNYPv27fbKK6+kWX/jxo1t4cKFoXUHHXSQXXLJJaF5JoIvULFiRdN1bNOmjQ0cONDKly8f/EbTQgQQQAABBBBAAAEEEEAAAQQQQAABBDIQIBifAQ6rgiuQP39+U+/pQYMG2e7du0MNPeuss6xly5Y2ZcoUe++996xOnTp2xRVXhNYzER8CxYoVs/POO8/69+9vr7/+ut15553Wt29fK1OmTHycAK1EAAEEEEAAAQQQQAABBBBAAAEEEEAgSoA0NVEgzMaHQOHChe3xxx+3AQMGRDR48+bN1rRpUytbtqxVr17dpk2bZrfeemvENszEh4CuW6FChVxjH3vsMatRo4Y98MADtmnTpvg4AVqJAAIIIIAAAggggAACCCCAAAIIIIBAmADB+DAMJuNP4KabbrJGjRqFGv7RRx+53tQjRoyw8ePHW5UqVULrmIgvgRIlSti9995rBQoUcG8/bNmyxV1bBeUVnN+6dWt8nRCtRQABBBBAAAEEEEAAAQQQQAABBBBIagHS1CT15Y//ky9YsKA9+uij1qlTp9DJKIDbr18/O/LII0PLEnli3bp19vDDD7ugtQLXSuGj7+hPWsvTWpZeHWltm9ayrOwfvW2+fPkiLlWfPn3c9VUgXkUpiTZu3OjS1iggf88999iVV15p0ftFVMIMAggggAACCCCAAAIIIIAAAggggAACARAgGB+Ai0ATsifQsWNHa926tU2fPj1UkVLU5GZZvny5S4OTm8fIbN1///23TZ482f755x/bs2eP+9a0/0lrWVrbaru9e/dm9rC5sp0f3Pe/FazftWuXe8Cg9vlF7V+7dq3dcMMN7jNkyBB/Fd8IIIAAAggggAACCCCAAAIIIIAAAggEUoBgfCAvC43KqoB6Sbdo0SK0m3KLawBQ5ZbPqaKg8Ntvv+1y1VeqVMk++eSTnKo6W/VUrVrV5s2bl606/J3TCtyntSytYH56y9Jbnla9aS176KGHbOXKlX4TQ996K0I95Xv16mXt27cPLWcCAQQQQAABBBBAAAEEEEAAAQQQQACBIAoQjA/iVaFNWRaoX7++Kce4n85k6dKlpt7SSnOSE+XNN990g8UuWrTIVadgfCIW9UjXxx84Na/PccKECaa3EMKLgvBq3zXXXGM333yz6Vrs2LEjfBOmEUAAAQQQQAABBBBAAAEEEEAAAQQQCJwAA7gG7pLQoAMRuPbaa61WrVqmQK1fBgwYEArO+8sO9Ltr1662cOFCq1u37oFWwX5ZFFDKnDvuuMM9HNCuSllTvHhxu+2222zZsmU2cOBAF4jPYrVsjgACCCCAAAIIIIAAAggggAACCCCAQJ4IpEYu8+TwHBSB7AsMGzbM1INawfL+/fvbyy+/7Cr9448/TClO9FEZN26cjR8/3k0fddRRLsXJO++8Y7Vr17ZHHnnElO4lvaIgsEr58uXtl19+SW8zluegwEsvveSuqaosVaqU6wWvNx1Kly6dg0ehKgQQQAABBBBAAAEEEEAAAQQQQAABBGIjQM/42DhzlFwSUID9qquusiuuuMINqKoBPcPLk08+abNnz3aLOnXqZF9++aW9+uqrLn3NnDlzXC7yESNGWN++fcN3YzqPBZRn/vHHH3et0HgAK1assHvuuYdAfB5fFw6PAAIIIIAAAggggAACCCCAAAIIIHDgAgTjD9yOPfNQYOvWrVazZk1T+pjt27e73vDPPfec9ejRI6JVyiXeqlUrUw945UKvVq2aW9+uXTt744037PTTT3fzCxYsiNiPmbwVmD59untgsm3bNrvlllvceAB52yKOjgACCCCAAAIIIIAAAggggAACCCCAQPYESFOTPT/2ziMBpY3RIK3RRYN6ZlTy5cvnVpcpU8Z9FytWzH37A4D269fPvvjii4gqRo4caRUrVoxYxkzuCuhhiT4UBBBAAAEEEEAAAQQQQAABBBBAAAEEEkWAYHyiXEnOI0cE5s6da1OnTo2oSz3vKQgggAACCCCAAAIIIIAAAggggAACCCCAQHYECMZnR499E05g+PDhtnPnzojzKlu2bGh+7969btr/Dq1gAgEEEEAAAQQQQAABBBBAAAEEEEAAAQQQyECAYHwGOKxKPAHlmlfZsmWL+46eL1WqlFue3o/169e7VRs3bkxvE5YjgAACcS8wZMgQmzhxYiDP45dffglku2gUAggggAACCCCAAAIIIIAAAv8mQDD+34RYHyGwe/duN1+wYPz90Xn//ffNH6h15syZNnToUBs7dqw7nzVr1tiLL75ovXv3jjhff0apa1555RX78ccf3aKvv/7aLrvsMje4aP369f3N+EYAAQTiWqBw4cLWsGFDmzVrVqDPQ20sUKBAoNtI4xBAAAEEEEAAAQQQQAABBBCIFoi/iGr0GTAfUwE/GJ8/f/6YHjcnDta1a1fbtm1bRFWXXnppxHx6M/6AoiNGjEhvE5YjgAACcS9QvXp1+/777+P+PDgBBBBAAAEEEEAAAQQQQAABBIIoEH8R1SAqJlGbihYt6s7277//TqKz5lQRQAABBBBAAAEEEEAAAQQQQAABBBBAAIHsCRCMz55f0u3tD2b6119/Jd25c8IIIIAAAggggAACCCCAAAIIIIAAAggggMCBCpCm5kDlknS/cuXK2UEHHWRLly5NUgFOO8gC8+fPtxIlSgS5ibQtwQXmzp2b4GfI6SGAAAIIIIAAAggggAACCCCAwIEKEIw/ULkk3S9fvnzWoEEDW7hwYZIKcNpBFhgwYECQm0fbEEAAAQQQQAABBBBAAAEEEEAAAQSSWIBgfBJf/AM99WbNmtlXX311oLuzHwI5LlC4cGFbu3ZtjtdLhQgcqABvaByoHPshgAACCCCAAAIIIIAAAgggkLgCBOMT99rm2pm1bdvWhg4dahs3brRSpUrl2nGoGIHMCuiNjUMOOSSzm7MdAggggAACCCCAAAIIIIAAAggggAACMRdgANeYk8f/ATt06OBO4sMPP4z/k+EMEEAAAQQQQAABBBBAAAEEEEAAAQQQQACBGAjk2+uVGByHQySYwKmnnmrFihWz9957L8HOjNNBAAEEEEAAAQQQQAABBBBAAAEEEEAAAQRyXoCe8TlvmhQ1XnzxxTZhwgSbMWNGUpwvJ4kAAggggAACCCCAAAIIIIAAAggggAACCGRHgJ7x2dFL4n3/+ecfO/HEE+3nn3+2yZMnW6NGjZJYg1NHAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQyFiAYn7EPazMQ+Ouvv+yUU06xH3/80U4++WTr2LGjtWjRwgoWTHtc4Dp16liBAgUyqJFVCCCAAAIIIIAAAggggAACCCCAAAIIIIBAYgoQjE/M6xqzs9q8ebM988wz9sYbb7igfEYHXrNmjZUvXz6jTViHAAIIIIAAAggggAACCCCAAAIIIIAAAggkpADB+IS8rHlzUgq2L1++3NIbE/jII49Mt9d83rSYoyKAAAIIIIAAAggggAACCCCAAAIIIIAAArERIBgfG2eOggACCCCAAAIIIIAAAggggAACCCCAAAIIIJDEAvmT+Nw5dQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEYiJAMD4mzBwEAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAIJkFCMYn89Xn3BFAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQRiIkAwPibMHAQBBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAgmQUIxifz1efcEUAAAQQQQAABBBBAAAEEEEAAAQQQQAABBGIiQDA+JswcBAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQCCZBQjGJ/PV59wRQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEYiJAMD4mzBwEAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAIJkFCMYn89Xn3BFAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQRiIkAwPibMHAQBBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAgmQUIxifz1efcEUAAAQQQQAABBBBAAAEEEEAAAQQQQAABBGIiQDA+JswcBAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQCCZBQjGJ/PV59wRQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEYiJAMD4mzBwEAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAIJkFCMYn89Xn3BFAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQRiIkAwPibMHAQBBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAgmQUIxifz1efcEUAAAQQQQAABBBBAAAEEEEAAAQQQQAABBGIiQDA+JswcBAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQCCZBQjGJ/PV59wRQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEYiJAMD4mzBwEAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAIJkFCMYn89Xn3BFAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQRiIkAwPibMHAQBBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAgmQUIxifz1efcEUAAAQQQQAABBBBAAAEEEEAAAQQQQAABBGIiQDA+JswcBAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQCCZBQjGJ/PV59wRQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEYiJAMD4mzBwEAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAIJkFCMYn89Xn3BFAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQRiIkAwPibMHAQBBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAgmQUIxifz1efcEUAAAQQQQAABBBBAAAEEEEAAAQQQQAABBGIiQDA+JswcBAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQCCZBQjGJ/PV59wRQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEYiJAMD4mzBwEAQQQQACB+BD4/fff7fnnn7d3333Xdu/eHR+NjuNW/vnnn/b555/b119/HcdnQdMzI7Br1y777LPP7Omnn87M5gm1zd69e+1///ufPfLII9k6L+5P2eJj5wQT2LJli82cOdMWLFhgW7duTbCz43QQQAABBBBIXIF83l+O9ybu6XFmCCCAAAIIJJbAddddZwsXLsyxkxo6dKjVqlXL1ad/2FetWtU2bdrk5m+99VZ79NFHc+xYVBQpsGfPHmvXrp1Nnz7dmjZtanPnzo3cIJfmMvozNGjQIDv88MP/9ci9evWy1atXZ7jdkCFDrG7duhluk+grf/rpJ/ewZfLkyfbJJ5+4/7cqV65sK1euTPRTt7///tumTJlikyZNsvHjx9uKFSusYMGCpocSB1K4Px2IGvskmsDOnTvtgQcesLFjx9qPP/5o+j3il1atWpl+b3fq1MlfxDcCCCCAAAIIBFCgYADbRJMQQAABBBBAIB2Bli1bmp6jjxo1ytSrOrtlw4YNoSoUMPQD8VqoeUruCehBhwLxsS5dunQxXfdx48ZFXG+1o2vXrq6XfunS/9/enYBfUdV/HD/Z3y1F/7mvKaIoBribqClELiCSSElq7qaJWy4BbiCVormmVLQopmBuoIAY5JK40AOiZanhRqKWhYlb+WiPPvP/fs6/M8/M/O793Zl75/5+F3jP8/y8s5w5c+Z1594r3znzPf/bbrP69+/vnnzySTdlyhT3j3/8Iy77qU99yh1wwAGuT58+7rOf/Wy8fkWcUcBszJgxK+Kp+3PebbfdSr1xyPfTCnspceL/FdCNeN0IVU/4StNjjz3m9HfppZe68847r1IR1iGAAAIIIIBACwjQM74F3gSagAACCCCAQFGBpUuXum7duvmgati3d+/e7o477nDrrrtuWOVfP/nkE/f++++7d9991/9DXT2W//znP/tt8+fPdwqaaVIv3u23396pvKZRo0a5cePG+Xn+U66AAtkKWIdewh3ZMz6ciXpV9uvXz73xxhthlX8dMGCAu/fee91KK9XOZrho0SJ/zXz00Ud+XwWfL7744lR9K+qCPm/qHf7EE0+4Y4891ukzq2lF6Rmv62rJkiVu2LBhvgevzr2RnvF8P0mQaUUVeO2111yvXr3877gM9P2sz5N6yleaJkyY4E4++eRKm1iHAAIIIIAAAp0sUPtfWZ3cQA6PAAIIIIAAAm0F1llnHbfffvulNiiovu2227r11lsv9bfhhhv6dCG77LKLO/PMM92cOXPc5ptv7vdN/kO+e/fuPgirwOF1113nzj///FT9LJQj8MEHH/jejSEQX06txWvRtXLjjTe22fHXv/61Gz16dJv1lVZstdVW7vDDD/ebVl99dTdy5MhKxVbIdWuvvbbbaKONfMoI3fRY0SbddNhhhx3cgQceWMqpF/1+evvtt92FF15YyrGbXcmy1FYsmi3Qtn49DXfcccf5QPx2223nZs6c6fQ7opt9uqmqm6CrrLJKasfhw4f7G+yplSwggAACCCCAQEsIEIxvibeBRiCAAAIIIFBcINsD/tOf/nSuStZff32nf6hrygaEFTibOHGiO/30012XLl1y1UehYgLnnHNO3FO42J7ll85eQ+EISnNwzz33hMV2X7t27eq3b7LJJk4Beaa2AgrMr6hTmddEke+nE0880U2ePHmZYF+W2tpsUCzaCs+aNcsP/qybn3PnznUDBw50q666qu8dr5tUehpJAySvttpq8c7KJf/LX/4yXmYGAQQQQAABBFpHgGB867wXtAQBBBBAAIFCAnpEvd5JQa1aecHrrZv9qgvMmDHDKX2A0tJcdNFF1Qt28hb1xDz66KPjdEbtNUe9vzUpGM9UWUC59Jk6TuCKK67wA1x23BHrP9Ky1Nb6zzLfnlhUdpo0aZLTd4jS0FUbi0O/KQrKJ6c//elPyUXmEUAAAQQQQKBFBAjGt8gbQTMQQAABBBDoSIEdd9zRKTVC3759O/KwK/SxNNCpen2q96KCK9m0Ap2Jo7EC1GM/OWmcgSFDhrQZ5DVZRvNrrbWWX7Ui9/7OmrDceQK//e1vl5nBK5eltjb7HcWisrBujN5///1OA28r1Vx7k35fklMZg7wn62MeAQQQQAABBMoRIBhfjiO1IIAAAgggsEwI6FH2X/3qVzXbqn/EP/roozXLqYCCBS+//LJTr28NVvnhhx/m2q8ZhZR25ze/+U08qJ2WH3/8cTd9+nSnYHi1SYPWLly40Jd75JFHXBiQtFr5etYff/zxfkDLyy+/3A96Wk8dyg/crN6Oald2HAId76ijjvLvca325u393RHWtdpaz3Widi9evNgpaDht2jQ/GHJyzIVaxyx7eyPtqef8k+1/66233AMPPOD//va3vyU3FZr/y1/+4gONGqfg9ddfz71vte8nDYw8dOjQeBDq3BX+t2AZ12Zem0bbWvTcsuXrvQbKMMq2pTMtlHdd15/OK0wff/yxmzdvnh9DJQx2HrbleS3TSL+nhxxyiM8LX+vYSjsWnlRS2eR8rX3ZjgACCCCAAAIdKGD/gGZCAAEEEEAAgWVQ4LTTTovsfxniv5NOOqnmWXz1q1+NrFd8xXL/+te/IuuxHQ0YMCCyFDiRDQhbsVxYaYHIaOzYsZH1iI7boPZY7vro85//fDRixIho6tSpkQV0o9dee83/vffee5ENQBetscYaqT/LOx6q9a9f+9rXUttDeUvtkioXFixAHZ177rmR5cP3bfn73/8e/eEPf4i22WabuG32eH/03HPPhV38qwVXIwveRZbXOi6nc/jMZz4TDR482Lc5tUOdCz/60Y98/RbsjiyXr6/le9/7XnxMSzFQs2br9RiXHzRoUGQBn5r71Cowf/58X6f1jPdFLZAYWV7i+Djh+tL7XG2ymzu+/MEHH1ytiF9fj3XZ10o914ndxIkuuOCCyAJdbVx07X/zm9+MbDDFds/9hBNOiPe1gU3bLVtrYyPtqef8Q3sseBtdeeWV0RZbbBGfS7g+ZDNu3LjIAoehePw6atSouLy+VzQtWLAg6tOnT7w+1LPrrrtGr7zySrxvcqbW95Plx44sj3aqTrtBlPoeOeuss5JVxvP1XJvxzjZT1CZvW8u+/tXmeq+BRo2SXsn5vBb6vQu/A5VeLaCerDbS72G2nN1Y9GX03Wk3Xf1n157s8dfMu+++G9kN2cjysUc2XkrqOvriF78Y2c2nVP2VFpplVOlY1daF30B9ps4+++xqxViPAAIIIIAAAp0ooJ5OTAgggAACCCCwDAoUDca/8847PqCYDcYraH344Yf7AHQIium1vWC86tphhx18wEJB7htuuCGyQeaik08+ORXESNan+e9///uRpT+JbrvttmjllVeOy2644Yapd0DBdAVLFBBP1jFy5MhUuUsuuSRSIDlZRvMPP/xwxeDpZZddFu//05/+1AdrdPPg61//ejR69OjIeq+nAnoKbNgTAvE+9cxYz0of7F9nnXWiv/71r3EVRYLxr776arTSSiulzlPvW6NTNhiv+p5++mnvkjRVUNOefKh4uDzB+Hqty7pW6r1OrOd2tOWWW3p3BZx1Hrq5pHPeY4894vejX79+PiBbEchWlhWMr7c99Z5/OB/ruRz17t3bn++mm24ajRkzJrKnTaLx48enrhUFj5cuXRp286/ZYPxdd92V+owlrzPNb7755pE9mRLXkff7yfKNR0cccUT8foV6tS783XnnnXG9YabeazPsX49N3raWdf2rrY1cA40aBatKr3kt/vnPf/rrLryv4VW/OQqiW2/2VPWWhi265ZZb4s/ooYceGtnTF9F5550X6YZY2D+8Kphf6YZb2K4bSbrmq03NNKp2zOx63VAI7dWrPcWTLcIyAggggAACCLSAAMH4FngTaAICCCCAAAL1COQNxqvX5h//+Eff40//QM8G46dMmeKD0HvttVfqH/LtBePVwzD8oz8bpFVvvLBNrwpiWG56/6fgSJgOOuiguFw2GB/KLFmyJC6jurLB+OHDh/ue7TpG8pgKom+wwQaRetgnt02cONFXrUC/gtvqEW+pe8Lh/Kul2knt87nPfS6yVAapMnkX9PTAzjvv7Ntmg++ldisSjH/22WdT56fg+Isvvpiqr56FSsF41XP77benjidb9QJ/4YUX2hymVjC+DOtGr5V6r5O99947drjmmmtS566bLMlrLvs5SBYuKxhfb3vqPX+dg26MWboLf65f+MIXojfeeCN5alEy2C6PU089td3t6r1ug0dHNtikv2k2e/bsqEePHinLX/ziF3EdRb+fjjzyyLgu3Uhpb2r02mzUJm9bG73+ZVDvNdCoUXv+yW15LfQkU/JzZwNiJ6tJzT/22GO+rL67FMzXdNVVV0WW9qXiDSH1kj/99NMjPcmkz6xuNCePZeN9RPrcZ6eOMsoeN7scvovV5q233jp+CitbjmUEEEAAAQQQ6FwBgvGd68/REUAAAQQQqFsgG4xXT3MFE5J/a665ZiqYoH+kZ4PxyQast956cflqwXjLpRuXUZAjO/373/9OPeYfUqBkyyUDlNWC8dpHPddDQCQbjA91HnvssXEZlVWQfdGiRX6z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)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def check_convexity_params(\n", + " names: List[str],\n", + " monotonicity_indicator: Dict[str, int],\n", + " is_convex: Union[bool, Dict[str, bool]] = False,\n", + " is_concave: Union[bool, Dict[str, bool]] = False,\n", + ") -> Tuple[Dict[str, bool], Dict[str, bool]]:\n", + " if not isinstance(is_convex, dict):\n", + " is_convex = {k: is_convex for k in names}\n", + " if not isinstance(is_concave, dict):\n", + " is_concave = {k: is_concave for k in names}\n", + "\n", + " # check keys\n", + " if set(is_convex.keys()) != set(names):\n", + " raise ValueError(f\"{set(is_convex.keys())} != {set(names)}\")\n", + " if set(is_concave.keys()) != set(names):\n", + " raise ValueError(f\"{set(is_concave.keys())} != {set(names)}\")\n", + "\n", + " # check compatibility\n", + " convex_names = set([k for k in names if is_convex[k]])\n", + " concave_names = set([k for k in names if is_concave[k]])\n", + " incompatibles = convex_names.intersection(concave_names)\n", + " if len(incompatibles) > 0:\n", + " raise ValueError(\n", + " f\"Inputs {', '.join(sorted(incompatibles))} are set to be both concave and convex!\"\n", + " )\n", + "\n", + " # check monotonicity indicator\n", + " for k, v in monotonicity_indicator.items():\n", + " if v == 0 and (is_concave[k] or is_convex[k]):\n", + " raise ValueError(\n", + " \"If monotonicity_indicator is 0, then is_concave and is_convex must be False, \"\n", + " + f\"but we have: monotonicity_indicator['{k}'] = {monotonicity_indicator[k]}, \"\n", + " + f\"is_convex['{k}'] = {is_convex[k]}, \"\n", + " + f\"is_concave['{k}'] = {is_concave[k]}\"\n", + " )\n", + "\n", + " return is_convex, is_concave" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "names = list(\"abcd\")\n", + "\n", + "expected = (\n", + " {\"a\": False, \"b\": False, \"c\": False, \"d\": False},\n", + " {\"a\": False, \"b\": False, \"c\": False, \"d\": False},\n", + ")\n", + "monotonicity_indicator = {\"a\": 0, \"b\": 1, \"c\": 0, \"d\": -1}\n", + "is_convex, is_concave = check_convexity_params(\n", + " names, monotonicity_indicator, False, False\n", + ")\n", + "assert (is_convex, is_concave) == expected, (is_convex, is_concave)\n", + "\n", + "monotonicity_indicator = {\"a\": 0, \"b\": 1, \"c\": 0, \"d\": -1}\n", + "with pytest.raises(ValueError) as e:\n", + " is_convex, is_concave = check_convexity_params(\n", + " names, monotonicity_indicator, True, False\n", + " )\n", + "assert e.value.args == (\n", + " \"If monotonicity_indicator is 0, then is_concave and is_convex must be False, but we have: monotonicity_indicator['a'] = 0, is_convex['a'] = True, is_concave['a'] = False\",\n", + ")\n", + "\n", + "expected = (\n", + " {\"a\": True, \"b\": True, \"c\": True, \"d\": True},\n", + " {\"a\": False, \"b\": False, \"c\": False, \"d\": False},\n", + ")\n", + "monotonicity_indicator = {\"a\": -1, \"b\": 1, \"c\": 1, \"d\": -1}\n", + "is_convex, is_concave = check_convexity_params(\n", + " names, monotonicity_indicator, True, False\n", + ")\n", + "assert (is_convex, is_concave) == expected, (is_convex, is_concave)\n", + "\n", + "monotonicity_indicator = {\"a\": 0, \"b\": 1, \"c\": 0, \"d\": -1}\n", + "with pytest.raises(ValueError) as e:\n", + " is_convex, is_concave = check_convexity_params(\n", + " names, monotonicity_indicator, False, True\n", + " )\n", + "\n", + "expected = (\n", + " {\"a\": False, \"b\": False, \"c\": False, \"d\": False},\n", + " {\"a\": True, \"b\": True, \"c\": True, \"d\": True},\n", + ")\n", + "monotonicity_indicator = {\"a\": -1, \"b\": 1, \"c\": 1, \"d\": -1}\n", + "is_convex, is_concave = check_convexity_params(\n", + " names, monotonicity_indicator, False, True\n", + ")\n", + "assert (is_convex, is_concave) == expected, (is_convex, is_concave)\n", + "\n", + "with pytest.raises(ValueError) as e:\n", + " check_convexity_params(names, monotonicity_indicator, True, True)\n", + "assert e.value.args == (\"Inputs a, b, c, d are set to be both concave and convex!\",)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "is_convex = {\"a\": False, \"b\": False, \"c\": False, \"d\": False}\n", + "is_concave = False\n", + "\n", + "expected = (\n", + " {\"a\": False, \"b\": False, \"c\": False, \"d\": False},\n", + " {\"a\": False, \"b\": False, \"c\": False, \"d\": False},\n", + ")\n", + "monotonicity_indicator = {\"a\": 0, \"b\": 1, \"c\": 0, \"d\": -1}\n", + "is_convex, is_concave = check_convexity_params(\n", + " names, monotonicity_indicator, is_convex, is_concave\n", + ")\n", + "assert (is_convex, is_concave) == expected, (is_convex, is_concave)\n", + "\n", + "is_convex = {\"a\": False, \"b\": False, \"c\": False, \"d\": False}\n", + "is_concave = True\n", + "\n", + "expected = (\n", + " {\"a\": False, \"b\": False, \"c\": False, \"d\": False},\n", + " {\"a\": True, \"b\": True, \"c\": True, \"d\": True},\n", + ")\n", + "monotonicity_indicator = {\"a\": -1, \"b\": 1, \"c\": 1, \"d\": -1}\n", + "is_convex, is_concave = check_convexity_params(\n", + " names, monotonicity_indicator, is_convex, is_concave\n", + ")\n", + "assert (is_convex, is_concave) == expected, (is_convex, is_concave)\n", + "\n", + "is_convex = {\"a\": False, \"b\": True, \"c\": False, \"d\": False}\n", + "is_concave = {\"a\": False, \"b\": False, \"c\": True, \"d\": False}\n", + "\n", + "expected = (\n", + " {\"a\": False, \"b\": True, \"c\": False, \"d\": False},\n", + " {\"a\": False, \"b\": False, \"c\": True, \"d\": False},\n", + ")\n", + "is_convex, is_concave = check_convexity_params(\n", + " names, monotonicity_indicator, is_convex, is_concave\n", + ")\n", + "assert (is_convex, is_concave) == expected, (is_convex, is_concave)\n", + "\n", + "is_convex = {\"a\": False, \"b\": True, \"c\": False, \"d\": True}\n", + "is_concave = {\"a\": False, \"b\": False, \"c\": True, \"d\": True}\n", + "\n", + "with pytest.raises(ValueError) as e:\n", + " check_convexity_params(names, monotonicity_indicator, is_convex, is_concave)\n", + "assert e.value.args == (\"Inputs d are set to be both concave and convex!\",)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from tensorflow.keras.layers import Concatenate\n", + "\n", + "\n", + "def build_monotonic_type2_model(\n", + " *,\n", + " col_names: List[str],\n", + " input_units: Optional[int] = None,\n", + " units: int,\n", + " final_units: int,\n", + " activation: Union[str, Callable[[TensorLike], TensorLike]],\n", + " n_layers: int,\n", + " final_activation: Optional[Union[str, Callable[[TensorLike], TensorLike]]] = None,\n", + " monotonicity_indicator: Union[int, Dict[str, TensorLike]] = 1,\n", + " is_convex: Union[bool, Dict[str, bool]] = False,\n", + " is_concave: Union[bool, Dict[str, bool]] = False,\n", + " dropout: Optional[float] = None,\n", + "):\n", + " if isinstance(monotonicity_indicator, int):\n", + " monotonicity_indicator = {name: monotonicity_indicator for name in col_names}\n", + "\n", + " if input_units is None:\n", + " input_units = max(units // 4, 1)\n", + "\n", + " is_convex, is_concave = check_convexity_params(\n", + " col_names, monotonicity_indicator, is_convex, is_concave\n", + " )\n", + "\n", + " # inputs\n", + " x = {name: Input(shape=1, name=name) for name in col_names}\n", + " inputs = list(x.values())\n", + "\n", + " y = {\n", + " name: (\n", + " MonoDense(\n", + " units=input_units,\n", + " activation=activation,\n", + " monotonicity_indicator=monotonicity_indicator[name],\n", + " is_convex=is_convex[name],\n", + " is_concave=is_concave[name],\n", + " name=f\"mono_dense_{name}\"\n", + " + (\n", + " \"_increasing\"\n", + " if monotonicity_indicator[name] == 1\n", + " else \"_decreasing\"\n", + " )\n", + " + (\"_convex\" if is_convex[name] else \"\")\n", + " + (\"_concave\" if is_concave[name] else \"\"),\n", + " )\n", + " if monotonicity_indicator[name] != 0\n", + " else Dense(units=input_units, activation=activation, name=f\"dense_{name}\")\n", + " )(v)\n", + " for name, v in x.items()\n", + " }\n", + "\n", + " y = Concatenate()([y[k] for k in sorted(col_names)])\n", + "\n", + " if dropout and dropout > 0.0:\n", + " y = Dropout(dropout)(y)\n", + "\n", + " has_convex = any(is_convex.values())\n", + " has_concave = any(is_concave.values())\n", + " if has_convex and has_concave:\n", + " print(\"WARNING: we have both convex and concave parameters\")\n", + "\n", + " y = create_mono_block(\n", + " units=[units] * (n_layers - 1) + [final_units],\n", + " activation=activation,\n", + " monotonicity_indicator=1,\n", + " is_convex=has_convex,\n", + " is_concave=has_concave and not has_convex,\n", + " dropout=dropout,\n", + " )(y)\n", + "\n", + " if final_activation is not None:\n", + " final_activation = tf.keras.activations.get(final_activation)\n", + " y = final_activation(y)\n", + "\n", + " model = Model(inputs=inputs, outputs=y)\n", + "\n", + " return model" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "************************************************************************************************************************\n", + "\n", + "dropout=False\n", + "\n", + "Model: \"model_3\"\n", + "__________________________________________________________________________________________________\n", + " Layer (type) Output Shape Param # Connected to \n", + "==================================================================================================\n", + " a (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " b (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " c (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " d (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " mono_dense_a_increasing_convex (None, 8) 16 ['a[0][0]'] \n", + " (MonoDense) \n", + " \n", + " dense_b (Dense) (None, 8) 16 ['b[0][0]'] \n", + " \n", + " mono_dense_c_decreasing (MonoD (None, 8) 16 ['c[0][0]'] \n", + " ense) \n", + " \n", + " dense_d (Dense) (None, 8) 16 ['d[0][0]'] \n", + " \n", + " concatenate (Concatenate) (None, 32) 0 ['mono_dense_a_increasing_convex[\n", + " 0][0]', \n", + " 'dense_b[0][0]', \n", + " 'mono_dense_c_decreasing[0][0]',\n", + " 'dense_d[0][0]'] \n", + " \n", + " mono_dense_0_convex (MonoDense (None, 32) 1056 ['concatenate[0][0]'] \n", + " ) \n", + " \n", + " mono_dense_1_increasing_convex (None, 32) 1056 ['mono_dense_0_convex[0][0]'] \n", + " (MonoDense) \n", + " \n", + " mono_dense_2_increasing_convex (None, 32) 1056 ['mono_dense_1_increasing_convex[\n", + " (MonoDense) 0][0]'] \n", + " \n", + " mono_dense_3_increasing_convex (None, 10) 330 ['mono_dense_2_increasing_convex[\n", + " (MonoDense) 0][0]'] \n", + " \n", + "==================================================================================================\n", + "Total params: 3,562\n", + "Trainable params: 3,562\n", + "Non-trainable params: 0\n", + "__________________________________________________________________________________________________\n", + "************************************************************************************************************************\n", + "\n", + "dropout=True\n", + "\n", + "Model: \"model_4\"\n", + "__________________________________________________________________________________________________\n", + " Layer (type) Output Shape Param # Connected to \n", + "==================================================================================================\n", + " a (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " b (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " c (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " d (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " mono_dense_a_increasing_convex (None, 8) 16 ['a[0][0]'] \n", + " (MonoDense) \n", + " \n", + " dense_b (Dense) (None, 8) 16 ['b[0][0]'] \n", + " \n", + " mono_dense_c_decreasing (MonoD (None, 8) 16 ['c[0][0]'] \n", + " ense) \n", + " \n", + " dense_d (Dense) (None, 8) 16 ['d[0][0]'] \n", + " \n", + " concatenate_1 (Concatenate) (None, 32) 0 ['mono_dense_a_increasing_convex[\n", + " 0][0]', \n", + " 'dense_b[0][0]', \n", + " 'mono_dense_c_decreasing[0][0]',\n", + " 'dense_d[0][0]'] \n", + " \n", + " dropout_6 (Dropout) (None, 32) 0 ['concatenate_1[0][0]'] \n", + " \n", + " mono_dense_0_convex (MonoDense (None, 32) 1056 ['dropout_6[0][0]'] \n", + " ) \n", + " \n", + " dropout_7 (Dropout) (None, 32) 0 ['mono_dense_0_convex[0][0]'] \n", + " \n", + " mono_dense_1_increasing_convex (None, 32) 1056 ['dropout_7[0][0]'] \n", + " (MonoDense) \n", + " \n", + " dropout_8 (Dropout) (None, 32) 0 ['mono_dense_1_increasing_convex[\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0][0]'] \n", + " \n", + " mono_dense_2_increasing_convex (None, 32) 1056 ['dropout_8[0][0]'] \n", + " (MonoDense) \n", + " \n", + " dropout_9 (Dropout) (None, 32) 0 ['mono_dense_2_increasing_convex[\n", + " 0][0]'] \n", + " \n", + " mono_dense_3_increasing_convex (None, 10) 330 ['dropout_9[0][0]'] \n", + " (MonoDense) \n", + " \n", + "==================================================================================================\n", + "Total params: 3,562\n", + "Trainable params: 3,562\n", + "Non-trainable params: 0\n", + "__________________________________________________________________________________________________\n" + ] + } + ], + "source": [ + "for dropout in [False, True]:\n", + " print(\"*\" * 120)\n", + " print()\n", + " print(f\"{dropout=}\")\n", + " print()\n", + " model = build_monotonic_type2_model(\n", + " col_names=list(\"abcd\"),\n", + " units=32,\n", + " final_units=10,\n", + " activation=\"elu\",\n", + " n_layers=4,\n", + " dropout=dropout,\n", + " monotonicity_indicator=dict(a=1, b=0, c=-1, d=0),\n", + " is_convex=dict(a=True, b=False, c=False, d=False),\n", + " is_concave=False,\n", + " )\n", + " model.summary()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Experiments\n", + "\n", + "For our experiments, we employ the datasets used by the authors of Certified Monotonic Network [1] and COMET [2]. We use the exact train-test split provided by the authors. Their respective repositories are linked below in the references. We directly load the saved train-test data split which have been saved after running the codes from respective papers' authors. \n", + "\n", + "\n", + "References:\n", + "\n", + "\n", + "1. Xingchao Liu, Xing Han, Na Zhang, and Qiang Liu. Certified monotonic neural networks. Advances in Neural Information Processing Systems, 33:15427–15438, 2020\n", + " \n", + " Github repo: https://github.com/gnobitab/CertifiedMonotonicNetwork\n", + "\n", + "\n", + "\n", + "2. Aishwarya Sivaraman, Golnoosh Farnadi, Todd Millstein, and Guy Van den Broeck. Counterexample-guided learning of monotonic neural networks. Advances in Neural Information Processing Systems, 33:11936–11948, 2020\n", + "\n", + " Github repo: https://github.com/AishwaryaSivaraman/COMET" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "total 114M\r\n", + "-rw-rw-r-- 1 davor davor 11K May 25 04:48 test_auto.csv\r\n", + "-rw-rw-r-- 1 davor davor 11M May 25 04:48 test_blog.csv\r\n", + "-rw-rw-r-- 1 davor davor 99K May 25 04:48 test_compas.csv\r\n", + "-rw-rw-r-- 1 davor davor 16K May 25 04:48 test_heart.csv\r\n", + "-rw-rw-r-- 1 davor davor 13M May 25 04:48 test_loan.csv\r\n", + "-rw-rw-r-- 1 davor davor 44K May 25 04:48 train_auto.csv\r\n", + "-rw-rw-r-- 1 davor davor 76M May 25 04:48 train_blog.csv\r\n", + "-rw-rw-r-- 1 davor davor 397K May 25 04:48 train_compas.csv\r\n", + "-rw-rw-r-- 1 davor davor 61K May 25 04:48 train_heart.csv\r\n", + "-rw-rw-r-- 1 davor davor 14M May 26 12:11 train_loan.csv\r\n", + "-rw-rw-r-- 1 davor davor 469 May 26 09:14 wget-log\r\n" + ] + } + ], + "source": [ + "# download data if needed\n", + "\n", + "data_path = Path(\"./data\")\n", + "\n", + "data_path.mkdir(exist_ok=True)\n", + "\n", + "for name in [\"auto\", \"blog\", \"compas\", \"heart\", \"loan\"]:\n", + " for prefix in [\"train\", \"test\"]:\n", + " if not (data_path / f\"{prefix}_{name}.csv\").exists():\n", + " !cd {data_path.resolve()}; wget https://zenodo.org/record/7968969/files/{prefix}_{name}.csv\n", + "\n", + "!ls -lh {data_path}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Set the following flags to `True` to trigger search for hyperparametrs for particular dataset." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "should_find_hyperparam = dict(\n", + " auto=False,\n", + " heart=True,\n", + " comet=True,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def sanitize_col_names(df: pd.DataFrame) -> pd.DataFrame:\n", + " columns = {c: c.replace(\" \", \"_\") for c in df}\n", + " df = df.rename(columns=columns)\n", + " return df" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
a_b
01
12
23
\n", + "
" + ], + "text/plain": [ + " a_b\n", + "0 1\n", + "1 2\n", + "2 3" + ] + }, + "execution_count": null, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sanitize_col_names(pd.DataFrame({\"a b\": [1, 2, 3]}))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def get_train_n_test_data(\n", + " dataset_name: str, *, data_path: Path = data_path\n", + ") -> Tuple[pd.DataFrame, pd.DataFrame]:\n", + " train_filename = \"train_\" + dataset_name + \".csv\"\n", + " train_df = pd.read_csv(data_path / train_filename)\n", + " test_filename = \"test_\" + dataset_name + \".csv\"\n", + " test_df = pd.read_csv(data_path / test_filename)\n", + "\n", + " return sanitize_col_names(train_df), sanitize_col_names(test_df)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
CylindersDisplacementHorsepowerWeightAccelerationModel_YearOriginground_truth
01.4828071.0730280.6505640.606625-1.275546-1.631803-0.70166918.0
11.4828071.4829021.5489930.828131-1.452517-1.631803-0.70166915.0
21.4828071.0444321.1639520.523413-1.275546-1.631803-0.70166916.0
31.4828071.0253680.9072580.542165-1.806460-1.631803-0.70166917.0
41.4828072.2359272.3960841.587581-1.983431-1.631803-0.70166915.0
...........................
3090.3100070.3581310.188515-0.177437-0.3199011.720778-0.70166922.0
310-0.862792-0.566468-0.530229-0.722413-0.9216041.720778-0.70166936.0
311-0.862792-0.928683-1.351650-1.0036913.1841311.7207780.55732544.0
312-0.862792-0.566468-0.530229-0.810312-1.4171231.720778-0.70166932.0
313-0.862792-0.709448-0.658576-0.4235551.0604751.720778-0.70166928.0
\n", + "

314 rows Γ— 8 columns

\n", + "
" + ], + "text/plain": [ + " Cylinders Displacement Horsepower Weight Acceleration Model_Year \n", + "0 1.482807 1.073028 0.650564 0.606625 -1.275546 -1.631803 \\\n", + "1 1.482807 1.482902 1.548993 0.828131 -1.452517 -1.631803 \n", + "2 1.482807 1.044432 1.163952 0.523413 -1.275546 -1.631803 \n", + "3 1.482807 1.025368 0.907258 0.542165 -1.806460 -1.631803 \n", + "4 1.482807 2.235927 2.396084 1.587581 -1.983431 -1.631803 \n", + ".. ... ... ... ... ... ... \n", + "309 0.310007 0.358131 0.188515 -0.177437 -0.319901 1.720778 \n", + "310 -0.862792 -0.566468 -0.530229 -0.722413 -0.921604 1.720778 \n", + "311 -0.862792 -0.928683 -1.351650 -1.003691 3.184131 1.720778 \n", + "312 -0.862792 -0.566468 -0.530229 -0.810312 -1.417123 1.720778 \n", + "313 -0.862792 -0.709448 -0.658576 -0.423555 1.060475 1.720778 \n", + "\n", + " Origin ground_truth \n", + "0 -0.701669 18.0 \n", + "1 -0.701669 15.0 \n", + "2 -0.701669 16.0 \n", + "3 -0.701669 17.0 \n", + "4 -0.701669 15.0 \n", + ".. ... ... \n", + "309 -0.701669 22.0 \n", + "310 -0.701669 36.0 \n", + "311 0.557325 44.0 \n", + "312 -0.701669 32.0 \n", + "313 -0.701669 28.0 \n", + "\n", + "[314 rows x 8 columns]" + ] + }, + "execution_count": null, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_df, test_df = get_train_n_test_data(\"auto\")\n", + "train_df" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def df2ds(df: pd.DataFrame) -> tf.data.Dataset:\n", + " x = df.to_dict(\"list\")\n", + " y = x.pop(\"ground_truth\")\n", + "\n", + " ds = tf.data.Dataset.from_tensor_slices((x, y))\n", + "\n", + " return ds\n", + "\n", + "\n", + "def peek(ds: tf.data.Dataset) -> tf.Tensor:\n", + " for x in ds:\n", + " return x" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "x, y = peek(df2ds(train_df).batch(8))\n", + "expected = {\n", + " \"Acceleration\",\n", + " \"Cylinders\",\n", + " \"Displacement\",\n", + " \"Horsepower\",\n", + " \"Model_Year\",\n", + " \"Origin\",\n", + " \"Weight\",\n", + "}\n", + "assert set(x.keys()) == expected\n", + "for k in expected:\n", + " assert x[k].shape == (8,)\n", + "assert y.shape == (8,)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def build_mono_model_f(\n", + " *,\n", + " monotonicity_indicator: Dict[str, int],\n", + " final_activation=None,\n", + " loss,\n", + " metrics,\n", + " units: int,\n", + " n_layers: int,\n", + " activation: str,\n", + " learning_rate: float,\n", + " weight_decay: float,\n", + " dropout: float,\n", + " decay_rate: float,\n", + " train_ds: tf.data.Dataset,\n", + ") -> Model:\n", + " model = build_monotonic_type2_model(\n", + " col_names=list(monotonicity_indicator.keys()),\n", + " units=units,\n", + " final_units=1,\n", + " activation=activation,\n", + " n_layers=n_layers,\n", + " monotonicity_indicator=monotonicity_indicator,\n", + " is_convex=False,\n", + " is_concave=False,\n", + " dropout=dropout,\n", + " final_activation=final_activation,\n", + " )\n", + "\n", + " lr_schedule = tf.keras.optimizers.schedules.ExponentialDecay(\n", + " learning_rate,\n", + " decay_steps=len(train_ds),\n", + " decay_rate=decay_rate,\n", + " staircase=True,\n", + " )\n", + "\n", + " optimizer = AdamW(learning_rate=lr_schedule, weight_decay=weight_decay)\n", + " model.compile(optimizer=optimizer, loss=loss, metrics=metrics)\n", + "\n", + " return model" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def find_hyperparameters(\n", + " build_model_f: Callable[..., Model],\n", + " tuner_name: str = \"BayesianOptimization\",\n", + " *,\n", + " max_trials: Optional[int] = None,\n", + " max_epochs: Optional[int] = None,\n", + " train_ds: tf.data.Dataset,\n", + " test_ds: tf.data.Dataset,\n", + " objective: Union[str, Objective],\n", + " dir_root: Union[Path, str],\n", + " project_name: str,\n", + " factor: int = 2,\n", + " seed: int = 42,\n", + " executions_per_trial: int = 1,\n", + " hyperband_iterations: int = 1,\n", + " max_consecutive_failed_trials: int = 5,\n", + ") -> Tuner:\n", + " tf.keras.utils.set_random_seed(seed)\n", + "\n", + " if tuner_name == \"BayesianOptimization\":\n", + " tuner = BayesianOptimization(\n", + " build_model_f,\n", + " objective=objective,\n", + " max_trials=max_trials,\n", + " seed=seed,\n", + " directory=Path(dir_root) / datetime.now().isoformat(),\n", + " project_name=project_name,\n", + " executions_per_trial=executions_per_trial,\n", + " max_consecutive_failed_trials=max_consecutive_failed_trials,\n", + " )\n", + " kwargs = dict(epochs=max_epochs)\n", + "\n", + " elif tuner_name == \"Hyperband\":\n", + " tuner = Hyperband(\n", + " build_model_f,\n", + " objective=objective,\n", + " max_epochs=max_epochs,\n", + " factor=factor,\n", + " seed=seed,\n", + " directory=Path(dir_root) / datetime.now().isoformat(),\n", + " project_name=project_name,\n", + " executions_per_trial=executions_per_trial,\n", + " hyperband_iterations=hyperband_iterations,\n", + " max_consecutive_failed_trials=max_consecutive_failed_trials,\n", + " )\n", + " kwargs = dict()\n", + " else:\n", + " raise ValueError(f\"tuner_name={tuner_name}\")\n", + "\n", + " stop_early = tf.keras.callbacks.EarlyStopping(monitor=\"val_loss\", patience=3)\n", + " tuner.search(\n", + " train_ds,\n", + " validation_data=test_ds,\n", + " callbacks=[stop_early],\n", + " **kwargs,\n", + " )\n", + "\n", + " return tuner" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# !ls /tmp/tuner/auto_tuner/2023-02-28T13:02:31.787216\n", + "\n", + "\n", + "def load_latest_tuner(\n", + " build_model_f: Callable[..., Model],\n", + " tuner_name: str = \"BayesianOptimization\",\n", + " *,\n", + " max_trials: Optional[int] = None,\n", + " max_epochs: Optional[int] = None,\n", + " train_ds: tf.data.Dataset,\n", + " test_ds: tf.data.Dataset,\n", + " objective: Union[str, Objective],\n", + " dir_root: Union[Path, str],\n", + " project_name: str,\n", + " factor: int = 2,\n", + " seed: int = 42,\n", + " executions_per_trial: int = 1,\n", + " hyperband_iterations: int = 1,\n", + " max_consecutive_failed_trials: int = 5,\n", + ") -> Tuner:\n", + " directory = sorted(Path(dir_root).glob(\"*\"))[-1]\n", + " print(f\"Loading tuner saved at: {directory}\")\n", + "\n", + " if tuner_name == \"BayesianOptimization\":\n", + " tuner = BayesianOptimization(\n", + " build_model_f,\n", + " objective=objective,\n", + " max_trials=max_trials,\n", + " seed=seed,\n", + " directory=directory,\n", + " project_name=project_name,\n", + " executions_per_trial=executions_per_trial,\n", + " max_consecutive_failed_trials=max_consecutive_failed_trials,\n", + " )\n", + " kwargs = dict(epochs=max_epochs)\n", + " elif tuner_name == \"Hyperband\":\n", + " tuner = Hyperband(\n", + " build_model_f,\n", + " objective=objective,\n", + " max_epochs=max_epochs,\n", + " factor=factor,\n", + " seed=seed,\n", + " directory=directory,\n", + " project_name=project_name,\n", + " executions_per_trial=executions_per_trial,\n", + " hyperband_iterations=hyperband_iterations,\n", + " max_consecutive_failed_trials=max_consecutive_failed_trials,\n", + " )\n", + " kwargs = dict()\n", + " else:\n", + " raise ValueError(f\"tuner_name={tuner_name}\")\n", + "\n", + " return tuner" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def count_model_params(model: Model) -> int:\n", + " return sum([sum([count_params(v) for v in l.variables]) for l in model.layers])\n", + "\n", + "\n", + "def create_model_stats(\n", + " tuner: Tuner,\n", + " hp: Dict[str, Any],\n", + " *,\n", + " epochs: int,\n", + " num_runs: int = 10,\n", + " train_ds: tf.data.Dataset,\n", + " test_ds: tf.data.Dataset,\n", + ") -> pd.DataFrame:\n", + " tf.keras.utils.set_random_seed(42)\n", + "\n", + " def model_stats(\n", + " tuner: Tuner = tuner,\n", + " hp: Dict[str, Any] = hp,\n", + " epochs: int = epochs,\n", + " train_ds: tf.data.Dataset = train_ds,\n", + " test_ds: tf.data.Dataset = test_ds,\n", + " ) -> Dict[str, Any]:\n", + " model = tuner.hypermodel.build(hp)\n", + " history = model.fit(train_ds, epochs=epochs, validation_data=test_ds, verbose=0)\n", + " objective = history.history[tuner.oracle.objective.name]\n", + " if tuner.oracle.objective.direction == \"max\":\n", + " best_epoch = objective.index(max(objective))\n", + " else:\n", + " best_epoch = objective.index(min(objective))\n", + " return objective[best_epoch]\n", + "\n", + " stats = pd.Series([model_stats() for _ in range(num_runs)])\n", + " stats = stats.describe()\n", + " stats = {\n", + " f\"{tuner.oracle.objective.name}_{k}\": stats[k]\n", + " for k in [\"mean\", \"std\", \"min\", \"max\"]\n", + " }\n", + " model = tuner.hypermodel.build(hp)\n", + " stats = pd.DataFrame(\n", + " dict(**hp.values, **stats, params=count_model_params(model)), index=[0]\n", + " )\n", + " # display(stats)\n", + " return stats\n", + "\n", + "\n", + "def create_tuner_stats(\n", + " tuner: Tuner,\n", + " *,\n", + " epochs: int,\n", + " num_runs: int,\n", + " num_models: int,\n", + " train_ds: tf.data.Dataset,\n", + " test_ds: tf.data.Dataset,\n", + ") -> pd.DataFrame:\n", + " stats = None\n", + "\n", + " for hp in tuner.get_best_hyperparameters(num_trials=num_models):\n", + " new_entry = create_model_stats(\n", + " tuner,\n", + " hp,\n", + " epochs=epochs,\n", + " num_runs=num_runs,\n", + " train_ds=train_ds,\n", + " test_ds=test_ds,\n", + " )\n", + " if stats is None:\n", + " stats = new_entry\n", + " else:\n", + " stats = pd.concat([stats, new_entry]).reset_index(drop=True)\n", + "\n", + " display(stats.sort_values(f\"{tuner.oracle.objective.name}_mean\"))\n", + "\n", + " return stats" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def hyperparameter_search(epochs, num_runs=10, num_models=10, **tuner_search_kwargs):\n", + " tuner = find_hyperparameters(**tuner_search_kwargs)\n", + " tuner = load_latest_tuner(**tuner_search_kwargs)\n", + "\n", + " stats = create_tuner_stats(\n", + " tuner,\n", + " epochs=epochs,\n", + " num_runs=num_runs,\n", + " num_models=num_models,\n", + " train_ds=tuner_search_kwargs[\"train_ds\"],\n", + " test_ds=tuner_search_kwargs[\"test_ds\"],\n", + " )\n", + "\n", + " return stats, tuner" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Comparison with methods and datasets from COMET [1] (Reference #20 in our paper)\n", + "\n", + "\n", + "References:\n", + "\n", + "\n", + "1. Aishwarya Sivaraman, Golnoosh Farnadi, Todd Millstein, and Guy Van den Broeck. Counterexample-guided learning of monotonic neural networks. Advances in Neural Information Processing Systems, 33:11936–11948, 2020\n", + "\n", + " Github repo: https://github.com/AishwaryaSivaraman/COMET\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Experiment for Auto MPG dataset\n", + "\n", + "The Auto MPG Dataset is a regression dataset [1] with 7 features - Cylinders, Displacement, Horsepower,Weight, Acceleration, Model Year, Origin. And the dependent variable is monotonically decreasing with\n", + "respect to features weigh, displacement, and horsepower. The `monotonicity_indicator` corresponding to these features are set to -1, since the relationship is a monotonically decreasing one with respect to the dependent variable.\n", + "\n", + "\n", + "\n", + "References:\n", + "\n", + "1. Quinlan,R. (1993). Combining Instance-Based and Model-Based Learning. In Proceedings on the Tenth International Conference of Machine Learning, 236-243, University of Massachusetts, Amherst. Morgan Kaufmann.\n", + " \n", + " https://archive.ics.uci.edu/ml/datasets/auto+mpg\n", + "\n", + "2. Aishwarya Sivaraman, Golnoosh Farnadi, Todd Millstein, and Guy Van den Broeck. Counterexample-guided learning of monotonic neural networks. Advances in Neural Information Processing Systems, 33:11936–11948, 2020\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
CylindersDisplacementHorsepowerWeightAccelerationModel_YearOriginground_truth
01.4828071.0730280.6505640.606625-1.275546-1.631803-0.70166918.0
11.4828071.4829021.5489930.828131-1.452517-1.631803-0.70166915.0
21.4828071.0444321.1639520.523413-1.275546-1.631803-0.70166916.0
31.4828071.0253680.9072580.542165-1.806460-1.631803-0.70166917.0
41.4828072.2359272.3960841.587581-1.983431-1.631803-0.70166915.0
...........................
3090.3100070.3581310.188515-0.177437-0.3199011.720778-0.70166922.0
310-0.862792-0.566468-0.530229-0.722413-0.9216041.720778-0.70166936.0
311-0.862792-0.928683-1.351650-1.0036913.1841311.7207780.55732544.0
312-0.862792-0.566468-0.530229-0.810312-1.4171231.720778-0.70166932.0
313-0.862792-0.709448-0.658576-0.4235551.0604751.720778-0.70166928.0
\n", + "

314 rows Γ— 8 columns

\n", + "
" + ], + "text/plain": [ + " Cylinders Displacement Horsepower Weight Acceleration Model_Year \n", + "0 1.482807 1.073028 0.650564 0.606625 -1.275546 -1.631803 \\\n", + "1 1.482807 1.482902 1.548993 0.828131 -1.452517 -1.631803 \n", + "2 1.482807 1.044432 1.163952 0.523413 -1.275546 -1.631803 \n", + "3 1.482807 1.025368 0.907258 0.542165 -1.806460 -1.631803 \n", + "4 1.482807 2.235927 2.396084 1.587581 -1.983431 -1.631803 \n", + ".. ... ... ... ... ... ... \n", + "309 0.310007 0.358131 0.188515 -0.177437 -0.319901 1.720778 \n", + "310 -0.862792 -0.566468 -0.530229 -0.722413 -0.921604 1.720778 \n", + "311 -0.862792 -0.928683 -1.351650 -1.003691 3.184131 1.720778 \n", + "312 -0.862792 -0.566468 -0.530229 -0.810312 -1.417123 1.720778 \n", + "313 -0.862792 -0.709448 -0.658576 -0.423555 1.060475 1.720778 \n", + "\n", + " Origin ground_truth \n", + "0 -0.701669 18.0 \n", + "1 -0.701669 15.0 \n", + "2 -0.701669 16.0 \n", + "3 -0.701669 17.0 \n", + "4 -0.701669 15.0 \n", + ".. ... ... \n", + "309 -0.701669 22.0 \n", + "310 -0.701669 36.0 \n", + "311 0.557325 44.0 \n", + "312 -0.701669 32.0 \n", + "313 -0.701669 28.0 \n", + "\n", + "[314 rows x 8 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "auto_train_df, auto_test_df = get_train_n_test_data(\n", + " data_path=data_path, dataset_name=\"auto\"\n", + ")\n", + "display(auto_train_df)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "auto_train_ds = (\n", + " df2ds(auto_train_df).repeat(10).shuffle(10 * auto_train_df.shape[0]).batch(16)\n", + ")\n", + "auto_test_ds = df2ds(auto_test_df).batch(16)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def build_auto_model_f(\n", + " **kwargs,\n", + ") -> Model:\n", + " monotonicity_indicator = {\n", + " \"Cylinders\": 0,\n", + " \"Displacement\": -1,\n", + " \"Horsepower\": -1,\n", + " \"Weight\": -1,\n", + " \"Acceleration\": 0,\n", + " \"Model_Year\": 0,\n", + " \"Origin\": 0,\n", + " }\n", + "\n", + " metrics = \"mse\"\n", + " loss = \"mse\"\n", + "\n", + " return build_mono_model_f(\n", + " monotonicity_indicator=monotonicity_indicator,\n", + " metrics=metrics,\n", + " loss=loss,\n", + " train_ds=auto_train_ds,\n", + " **kwargs,\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: \"model_5\"\n", + "__________________________________________________________________________________________________\n", + " Layer (type) Output Shape Param # Connected to \n", + "==================================================================================================\n", + " Acceleration (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " Cylinders (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " Displacement (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " Horsepower (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " Model_Year (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " Origin (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " Weight (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " dense_Acceleration (Dense) (None, 4) 8 ['Acceleration[0][0]'] \n", + " \n", + " dense_Cylinders (Dense) (None, 4) 8 ['Cylinders[0][0]'] \n", + " \n", + " mono_dense_Displacement_decrea (None, 4) 8 ['Displacement[0][0]'] \n", + " sing (MonoDense) \n", + " \n", + " mono_dense_Horsepower_decreasi (None, 4) 8 ['Horsepower[0][0]'] \n", + " ng (MonoDense) \n", + " \n", + " dense_Model_Year (Dense) (None, 4) 8 ['Model_Year[0][0]'] \n", + " \n", + " dense_Origin (Dense) (None, 4) 8 ['Origin[0][0]'] \n", + " \n", + " mono_dense_Weight_decreasing ( (None, 4) 8 ['Weight[0][0]'] \n", + " MonoDense) \n", + " \n", + " concatenate_2 (Concatenate) (None, 28) 0 ['dense_Acceleration[0][0]', \n", + " 'dense_Cylinders[0][0]', \n", + " 'mono_dense_Displacement_decreas\n", + " ing[0][0]', \n", + " 'mono_dense_Horsepower_decreasin\n", + " g[0][0]', \n", + " 'dense_Model_Year[0][0]', \n", + " 'dense_Origin[0][0]', \n", + " 'mono_dense_Weight_decreasing[0]\n", + " [0]'] \n", + " \n", + " dropout_10 (Dropout) (None, 28) 0 ['concatenate_2[0][0]'] \n", + " \n", + " mono_dense_0 (MonoDense) (None, 16) 464 ['dropout_10[0][0]'] \n", + " \n", + " dropout_11 (Dropout) (None, 16) 0 ['mono_dense_0[0][0]'] \n", + " \n", + " mono_dense_1_increasing (MonoD (None, 16) 272 ['dropout_11[0][0]'] \n", + " ense) \n", + " \n", + " dropout_12 (Dropout) (None, 16) 0 ['mono_dense_1_increasing[0][0]']\n", + " \n", + " mono_dense_2_increasing (MonoD (None, 1) 17 ['dropout_12[0][0]'] \n", + " ense) \n", + " \n", + "==================================================================================================\n", + "Total params: 809\n", + "Trainable params: 809\n", + "Non-trainable params: 0\n", + "__________________________________________________________________________________________________\n", + "197/197 [==============================] - 4s 7ms/step - loss: 41.2859 - mse: 41.2859 - val_loss: 14.7886 - val_mse: 14.7886\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": null, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "auto_model = build_auto_model_f(\n", + " units=16,\n", + " n_layers=3,\n", + " activation=\"relu\",\n", + " dropout=0.1,\n", + " weight_decay=0.1,\n", + " learning_rate=0.1,\n", + " decay_rate=0.8,\n", + ")\n", + "auto_model.summary()\n", + "auto_model.fit(\n", + " auto_train_ds,\n", + " validation_data=auto_test_ds,\n", + " epochs=1,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def build_auto_model(hp) -> Model:\n", + " return build_auto_model_f(\n", + " units=hp.Int(\"units\", min_value=8, max_value=32, step=1),\n", + " n_layers=hp.Int(\"n_layers\", min_value=1, max_value=4),\n", + " activation=hp.Choice(\"activation\", values=[\"elu\"]),\n", + " learning_rate=hp.Float(\n", + " \"learning_rate\", min_value=1e-2, max_value=0.3, sampling=\"log\"\n", + " ),\n", + " weight_decay=hp.Float(\n", + " \"weight_decay\", min_value=1e-2, max_value=0.3, sampling=\"log\"\n", + " ),\n", + " dropout=hp.Float(\"dropout\", min_value=0.0, max_value=0.25, sampling=\"linear\"),\n", + " decay_rate=hp.Float(\n", + " \"decay_rate\", min_value=0.1, max_value=1.0, sampling=\"reverse_log\"\n", + " ),\n", + " )\n", + "\n", + "\n", + "def get_auto_tuner_search_kwargs(build_auto_model, *, max_trials, executions_per_trial):\n", + " auto_tuner_search_kwargs = dict(\n", + " build_model_f=build_auto_model,\n", + " tuner_name=\"BayesianOptimization\",\n", + " train_ds=auto_train_ds,\n", + " test_ds=auto_test_ds,\n", + " objective=Objective(\"val_mse\", direction=\"min\"),\n", + " max_epochs=5,\n", + " executions_per_trial=executions_per_trial,\n", + " dir_root=\"/tmp/tuner/auto_tuner\",\n", + " project_name=\"auto_tuner\",\n", + " max_trials=max_trials,\n", + " )\n", + " return auto_tuner_search_kwargs" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "if should_find_hyperparam[\"auto\"]:\n", + " auto_tuner = find_hyperparameters(\n", + " **get_auto_tuner_search_kwargs(\n", + " build_auto_model, max_trials=100, executions_per_trial=5\n", + " )\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "if should_find_hyperparam[\"auto\"]:\n", + " auto_stats = create_tuner_stats(\n", + " auto_tuner,\n", + " epochs=5,\n", + " num_runs=10,\n", + " num_models=10,\n", + " train_ds=auto_train_ds,\n", + " test_ds=auto_test_ds,\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Trial 1 Complete [00h 00m 09s]\n", + "val_mse: 8.385748863220215\n", + "\n", + "Best val_mse So Far: 8.385748863220215\n", + "Total elapsed time: 00h 00m 09s\n", + "INFO:tensorflow:Oracle triggered exit\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_mse_meanval_mse_stdval_mse_minval_mse_maxparams
0162elu0.1243320.0269920.0325430.3032068.4271420.2054468.0883928.703953537
\n", + "
" + ], + "text/plain": [ + " units n_layers activation learning_rate weight_decay dropout \n", + "0 16 2 elu 0.124332 0.026992 0.032543 \\\n", + "\n", + " decay_rate val_mse_mean val_mse_std val_mse_min val_mse_max params \n", + "0 0.303206 8.427142 0.205446 8.088392 8.703953 537 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def final_build_auto_model(hp) -> Model:\n", + " return build_auto_model_f(\n", + " units=hp.Fixed(\"units\", 16),\n", + " n_layers=hp.Fixed(\"n_layers\", 2),\n", + " activation=hp.Fixed(\"activation\", \"elu\"),\n", + " learning_rate=hp.Fixed(\"learning_rate\", 0.124332),\n", + " weight_decay=hp.Fixed(\"weight_decay\", 0.026992),\n", + " dropout=hp.Fixed(\"dropout\", 0.032543),\n", + " decay_rate=hp.Fixed(\"decay_rate\", 0.303206),\n", + " )\n", + "\n", + "\n", + "final_auto_tuner = find_hyperparameters(\n", + " **get_auto_tuner_search_kwargs(\n", + " final_build_auto_model, max_trials=1, executions_per_trial=1\n", + " )\n", + ")\n", + "final_auto_stats = create_tuner_stats(\n", + " final_auto_tuner,\n", + " epochs=5,\n", + " num_runs=10,\n", + " num_models=1,\n", + " train_ds=auto_train_ds,\n", + " test_ds=auto_test_ds,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Experiment for Heart Disease Dataset [1]\n", + "\n", + "Heart Disease [1] is a classification dataset\n", + "used for predicting the presence of heart disease with 13 features (age, sex, cp, trestbps, chol, fbs, restecg, thalach, exang, oldpeak, slope, ca, thal) and monotonically increasing with respect to features- trestbps and cholestrol (chol). The `monotonicity_indicator` corresponding to these features are set to 1. \n", + "\n", + "\n", + "\n", + "References:\n", + "\n", + "\n", + "1. John H. Gennari, Pat Langley, and Douglas H. Fisher. Models of incremental concept formation. Artif. Intell., 40(1-3):11–61, 1989.\n", + "\n", + " https://archive.ics.uci.edu/ml/datasets/heart+disease\n", + "\n", + "2. Aishwarya Sivaraman, Golnoosh Farnadi, Todd Millstein, and Guy Van den Broeck. Counterexample-guided learning of monotonic neural networks. Advances in Neural Information Processing Systems, 33:11936–11948, 2020\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
agesexcptrestbpscholfbsrestecgthalachexangoldpeakslopecathalground_truth
00.9727780.649445-2.0200770.721008-0.2518552.4269011.070838-0.025055-0.7210100.9864402.334348-0.770198-2.0702380
11.4150740.6494450.8840341.5435270.740555-0.4103461.070838-1.8311511.3812120.3303950.6873742.425024-0.5143451
21.4150740.6494450.884034-0.649858-0.326754-0.4103461.070838-0.9281031.3812121.2324570.6873741.3599501.0415480
3-1.9021480.649445-0.084003-0.1015120.066465-0.410346-0.9537151.566030-0.7210101.9705082.334348-0.770198-0.5143450
4-1.459852-1.533413-1.052040-0.101512-0.794872-0.4103461.0708380.920995-0.7210100.248389-0.959601-0.770198-0.5143450
.............................................
237-0.2435370.649445-2.020077-0.759528-1.131917-0.4103461.0708381.695037-0.721010-0.8996900.687374-0.770198-2.0702380
238-1.238704-1.5334130.8840340.0081571.7704142.4269011.070838-0.6270871.3812121.5604800.687374-0.7701981.0415481
2391.1939260.6494450.8840340.1726610.141364-0.4103461.070838-1.014108-0.7210101.3964690.6873740.2948761.0415481
240-0.6858330.6494450.884034-0.1015120.1788132.4269011.070838-0.0250551.381212-0.899690-0.9596011.3599501.0415481
2410.972778-1.5334130.8840340.9951813.006245-0.4103461.0708380.146954-0.7210102.3805370.6873742.4250241.0415481
\n", + "

242 rows Γ— 14 columns

\n", + "
" + ], + "text/plain": [ + " age sex cp trestbps chol fbs restecg \n", + "0 0.972778 0.649445 -2.020077 0.721008 -0.251855 2.426901 1.070838 \\\n", + "1 1.415074 0.649445 0.884034 1.543527 0.740555 -0.410346 1.070838 \n", + "2 1.415074 0.649445 0.884034 -0.649858 -0.326754 -0.410346 1.070838 \n", + "3 -1.902148 0.649445 -0.084003 -0.101512 0.066465 -0.410346 -0.953715 \n", + "4 -1.459852 -1.533413 -1.052040 -0.101512 -0.794872 -0.410346 1.070838 \n", + ".. ... ... ... ... ... ... ... \n", + "237 -0.243537 0.649445 -2.020077 -0.759528 -1.131917 -0.410346 1.070838 \n", + "238 -1.238704 -1.533413 0.884034 0.008157 1.770414 2.426901 1.070838 \n", + "239 1.193926 0.649445 0.884034 0.172661 0.141364 -0.410346 1.070838 \n", + "240 -0.685833 0.649445 0.884034 -0.101512 0.178813 2.426901 1.070838 \n", + "241 0.972778 -1.533413 0.884034 0.995181 3.006245 -0.410346 1.070838 \n", + "\n", + " thalach exang oldpeak slope ca thal ground_truth \n", + "0 -0.025055 -0.721010 0.986440 2.334348 -0.770198 -2.070238 0 \n", + "1 -1.831151 1.381212 0.330395 0.687374 2.425024 -0.514345 1 \n", + "2 -0.928103 1.381212 1.232457 0.687374 1.359950 1.041548 0 \n", + "3 1.566030 -0.721010 1.970508 2.334348 -0.770198 -0.514345 0 \n", + "4 0.920995 -0.721010 0.248389 -0.959601 -0.770198 -0.514345 0 \n", + ".. ... ... ... ... ... ... ... \n", + "237 1.695037 -0.721010 -0.899690 0.687374 -0.770198 -2.070238 0 \n", + "238 -0.627087 1.381212 1.560480 0.687374 -0.770198 1.041548 1 \n", + "239 -1.014108 -0.721010 1.396469 0.687374 0.294876 1.041548 1 \n", + "240 -0.025055 1.381212 -0.899690 -0.959601 1.359950 1.041548 1 \n", + "241 0.146954 -0.721010 2.380537 0.687374 2.425024 1.041548 1 \n", + "\n", + "[242 rows x 14 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "heart_train_df, heart_test_df = get_train_n_test_data(\n", + " data_path=data_path, dataset_name=\"heart\"\n", + ")\n", + "display(heart_train_df)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(({'age': ,\n", + " 'sex': ,\n", + " 'cp': ,\n", + " 'trestbps': ,\n", + " 'chol': ,\n", + " 'fbs': ,\n", + " 'restecg': ,\n", + " 'thalach': ,\n", + " 'exang': ,\n", + " 'oldpeak': ,\n", + " 'slope': ,\n", + " 'ca': ,\n", + " 'thal': },\n", + " ),\n", + " 152)" + ] + }, + "execution_count": null, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "heart_train_ds = (\n", + " df2ds(heart_train_df).repeat(10).shuffle(10 * heart_train_df.shape[0]).batch(16)\n", + ")\n", + "heart_test_ds = df2ds(heart_test_df).batch(16)\n", + "\n", + "# peek(heart_train_ds), len(heart_train_ds)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def build_heart_model_f(\n", + " **kwargs,\n", + ") -> Model:\n", + " monotonicity_indicator = {\n", + " \"age\": 0,\n", + " \"sex\": 0,\n", + " \"cp\": 0,\n", + " \"trestbps\": 1,\n", + " \"chol\": 1,\n", + " \"fbs\": 0,\n", + " \"restecg\": 0,\n", + " \"thalach\": 0,\n", + " \"exang\": 0,\n", + " \"oldpeak\": 0,\n", + " \"slope\": 0,\n", + " \"ca\": 0,\n", + " \"thal\": 0,\n", + " }\n", + "\n", + " metrics = \"accuracy\"\n", + " loss = \"binary_crossentropy\"\n", + "\n", + " return build_mono_model_f(\n", + " monotonicity_indicator=monotonicity_indicator,\n", + " metrics=metrics,\n", + " loss=loss,\n", + " final_activation=\"sigmoid\",\n", + " train_ds=heart_train_ds,\n", + " **kwargs,\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: \"model_12\"\n", + "__________________________________________________________________________________________________\n", + " Layer (type) Output Shape Param # Connected to \n", + "==================================================================================================\n", + " age (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " ca (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " chol (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " cp (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " exang (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " fbs (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " oldpeak (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " restecg (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " sex (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " slope (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " thal (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " thalach (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " trestbps (InputLayer) [(None, 1)] 0 [] \n", + " \n", + " dense_age (Dense) (None, 4) 8 ['age[0][0]'] \n", + " \n", + " dense_ca (Dense) (None, 4) 8 ['ca[0][0]'] \n", + " \n", + " mono_dense_chol_increasing (Mo (None, 4) 8 ['chol[0][0]'] \n", + " noDense) \n", + " \n", + " dense_cp (Dense) (None, 4) 8 ['cp[0][0]'] \n", + " \n", + " dense_exang (Dense) (None, 4) 8 ['exang[0][0]'] \n", + " \n", + " dense_fbs (Dense) (None, 4) 8 ['fbs[0][0]'] \n", + " \n", + " dense_oldpeak (Dense) (None, 4) 8 ['oldpeak[0][0]'] \n", + " \n", + " dense_restecg (Dense) (None, 4) 8 ['restecg[0][0]'] \n", + " \n", + " dense_sex (Dense) (None, 4) 8 ['sex[0][0]'] \n", + " \n", + " dense_slope (Dense) (None, 4) 8 ['slope[0][0]'] \n", + " \n", + " dense_thal (Dense) (None, 4) 8 ['thal[0][0]'] \n", + " \n", + " dense_thalach (Dense) (None, 4) 8 ['thalach[0][0]'] \n", + " \n", + " mono_dense_trestbps_increasing (None, 4) 8 ['trestbps[0][0]'] \n", + " (MonoDense) \n", + " \n", + " concatenate_12 (Concatenate) (None, 52) 0 ['dense_age[0][0]', \n", + " 'dense_ca[0][0]', \n", + " 'mono_dense_chol_increasing[0][0\n", + " ]', \n", + " 'dense_cp[0][0]', \n", + " 'dense_exang[0][0]', \n", + " 'dense_fbs[0][0]', \n", + " 'dense_oldpeak[0][0]', \n", + " 'dense_restecg[0][0]', \n", + " 'dense_sex[0][0]', \n", + " 'dense_slope[0][0]', \n", + " 'dense_thal[0][0]', \n", + " 'dense_thalach[0][0]', \n", + " 'mono_dense_trestbps_increasing[\n", + " 0][0]'] \n", + " \n", + " dropout_24 (Dropout) (None, 52) 0 ['concatenate_12[0][0]'] \n", + " \n", + " mono_dense_0 (MonoDense) (None, 16) 848 ['dropout_24[0][0]'] \n", + " \n", + " dropout_25 (Dropout) (None, 16) 0 ['mono_dense_0[0][0]'] \n", + " \n", + " mono_dense_1_increasing (MonoD (None, 16) 272 ['dropout_25[0][0]'] \n", + " ense) \n", + " \n", + " dropout_26 (Dropout) (None, 16) 0 ['mono_dense_1_increasing[0][0]']\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " \n", + " mono_dense_2_increasing (MonoD (None, 1) 17 ['dropout_26[0][0]'] \n", + " ense) \n", + " \n", + " tf.math.sigmoid (TFOpLambda) (None, 1) 0 ['mono_dense_2_increasing[0][0]']\n", + " \n", + "==================================================================================================\n", + "Total params: 1,241\n", + "Trainable params: 1,241\n", + "Non-trainable params: 0\n", + "__________________________________________________________________________________________________\n" + ] + } + ], + "source": [ + "heart_model = build_heart_model_f(\n", + " units=16,\n", + " n_layers=3,\n", + " activation=\"relu\",\n", + " dropout=0.1,\n", + " weight_decay=0.1,\n", + " learning_rate=0.1,\n", + " decay_rate=0.8,\n", + ")\n", + "heart_model.summary()\n", + "heart_model.fit(\n", + " heart_train_ds,\n", + " validation_data=heart_test_ds,\n", + " epochs=1,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def build_heart_model(hp) -> Model:\n", + " return build_heart_model_f(\n", + " units=hp.Int(\"units\", min_value=12, max_value=24, step=1),\n", + " n_layers=hp.Int(\"n_layers\", min_value=2, max_value=3),\n", + " activation=hp.Choice(\"activation\", values=[\"elu\"]),\n", + " learning_rate=hp.Float(\n", + " \"learning_rate\", min_value=1e-2, max_value=0.3, sampling=\"log\"\n", + " ),\n", + " weight_decay=hp.Float(\n", + " \"weight_decay\", min_value=1e-2, max_value=0.3, sampling=\"log\"\n", + " ),\n", + " dropout=hp.Float(\"dropout\", min_value=0.0, max_value=0.5, sampling=\"linear\"),\n", + " decay_rate=hp.Float(\n", + " \"decay_rate\", min_value=0.1, max_value=1.0, sampling=\"reverse_log\"\n", + " ),\n", + " )\n", + "\n", + "\n", + "def get_heart_tuner_search_kwargs(\n", + " build_heart_model, *, max_trials, executions_per_trial\n", + "):\n", + " heart_tuner_search_kwargs = dict(\n", + " build_model_f=build_heart_model,\n", + " tuner_name=\"BayesianOptimization\",\n", + " train_ds=heart_train_ds,\n", + " test_ds=heart_test_ds,\n", + " objective=Objective(\"val_accuracy\", direction=\"max\"),\n", + " max_epochs=10,\n", + " executions_per_trial=executions_per_trial,\n", + " dir_root=\"/tmp/tuner/heart_tuner\",\n", + " project_name=\"heart_tuner\",\n", + " max_trials=max_trials,\n", + " )\n", + " return heart_tuner_search_kwargs" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Trial 55 Complete [00h 01m 05s]\n", + "val_accuracy: 0.8590163946151733\n", + "\n", + "Best val_accuracy So Far: 0.8688524603843689\n", + "Total elapsed time: 00h 55m 43s\n", + "\n", + "Search: Running Trial #56\n", + "\n", + "Value |Best Value So Far |Hyperparameter\n", + "12 |16 |units\n", + "3 |2 |n_layers\n", + "elu |elu |activation\n", + "0.041365 |0.06543 |learning_rate\n", + "0.10878 |0.01 |weight_decay\n", + "0.18908 |0.25 |dropout\n", + "0.93403 |0.99983 |decay_rate\n", + "\n", + "Epoch 1/10\n", + "152/152 [==============================] - 6s 11ms/step - loss: 0.3812 - accuracy: 0.8364 - val_loss: 0.3349 - val_accuracy: 0.8361\n", + "Epoch 2/10\n", + "152/152 [==============================] - 1s 9ms/step - loss: 0.3264 - accuracy: 0.8517 - val_loss: 0.3235 - val_accuracy: 0.8361\n", + "Epoch 3/10\n", + "152/152 [==============================] - 1s 9ms/step - loss: 0.3249 - accuracy: 0.8529 - val_loss: 0.3048 - val_accuracy: 0.8689\n", + "Epoch 4/10\n", + "152/152 [==============================] - 1s 9ms/step - loss: 0.3339 - accuracy: 0.8570 - val_loss: 0.3483 - val_accuracy: 0.8361\n", + "Epoch 5/10\n", + "152/152 [==============================] - 1s 9ms/step - loss: 0.3292 - accuracy: 0.8541 - val_loss: 0.3038 - val_accuracy: 0.8197\n", + "Epoch 6/10\n", + "152/152 [==============================] - 1s 9ms/step - loss: 0.3123 - accuracy: 0.8595 - val_loss: 0.3145 - val_accuracy: 0.8033\n", + "Epoch 7/10\n", + "152/152 [==============================] - 1s 9ms/step - loss: 0.3241 - accuracy: 0.8525 - val_loss: 0.3166 - val_accuracy: 0.8361\n", + "Epoch 8/10\n", + "152/152 [==============================] - 1s 9ms/step - loss: 0.3265 - accuracy: 0.8620 - val_loss: 0.3121 - val_accuracy: 0.8197\n", + "Epoch 1/10\n", + "152/152 [==============================] - 5s 10ms/step - loss: 0.3965 - accuracy: 0.8368 - val_loss: 0.3543 - val_accuracy: 0.8525\n", + "Epoch 2/10\n", + "152/152 [==============================] - 1s 9ms/step - loss: 0.3291 - accuracy: 0.8603 - val_loss: 0.3218 - val_accuracy: 0.8197\n", + "Epoch 3/10\n", + "152/152 [==============================] - 1s 9ms/step - loss: 0.3261 - accuracy: 0.8537 - val_loss: 0.3042 - val_accuracy: 0.8197\n", + "Epoch 4/10\n", + "152/152 [==============================] - 1s 9ms/step - loss: 0.3217 - accuracy: 0.8517 - val_loss: 0.3478 - val_accuracy: 0.8197\n", + "Epoch 5/10\n", + "152/152 [==============================] - 1s 9ms/step - loss: 0.3284 - accuracy: 0.8521 - val_loss: 0.3122 - val_accuracy: 0.8361\n", + "Epoch 6/10\n", + "152/152 [==============================] - 1s 9ms/step - loss: 0.3004 - accuracy: 0.8562 - val_loss: 0.3216 - val_accuracy: 0.8361\n", + "Epoch 1/10\n", + "152/152 [==============================] - 5s 10ms/step - loss: 0.3755 - accuracy: 0.8417 - val_loss: 0.3235 - val_accuracy: 0.8361\n", + "Epoch 2/10\n", + "152/152 [==============================] - 1s 9ms/step - loss: 0.3322 - accuracy: 0.8558 - val_loss: 0.2992 - val_accuracy: 0.8197\n", + "Epoch 3/10\n", + "152/152 [==============================] - 1s 9ms/step - loss: 0.3370 - accuracy: 0.8508 - val_loss: 0.3013 - val_accuracy: 0.8689\n", + "Epoch 4/10\n", + "152/152 [==============================] - 1s 9ms/step - loss: 0.3154 - accuracy: 0.8562 - val_loss: 0.2979 - val_accuracy: 0.8689\n", + "Epoch 5/10\n", + "152/152 [==============================] - 1s 9ms/step - loss: 0.3131 - accuracy: 0.8554 - val_loss: 0.3785 - val_accuracy: 0.8197\n", + "Epoch 6/10\n", + "152/152 [==============================] - 1s 9ms/step - loss: 0.3248 - accuracy: 0.8579 - val_loss: 0.3187 - val_accuracy: 0.8361\n", + "Epoch 7/10\n", + "102/152 [===================>..........] - ETA: 0s - loss: 0.3081 - accuracy: 0.8640" + ] + }, + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn [46], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m heart_tuner \u001b[38;5;241m=\u001b[39m \u001b[43mfind_hyperparameters\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mget_heart_tuner_search_kwargs\u001b[49m\u001b[43m(\u001b[49m\u001b[43mbuild_heart_model\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmax_trials\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m100\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mexecutions_per_trial\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m5\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n", + "Cell \u001b[0;32mIn [26], line 51\u001b[0m, in \u001b[0;36mfind_hyperparameters\u001b[0;34m(build_model_f, tuner_name, max_trials, max_epochs, train_ds, test_ds, objective, dir_root, project_name, factor, seed, executions_per_trial, hyperband_iterations, max_consecutive_failed_trials)\u001b[0m\n\u001b[1;32m 48\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtuner_name=\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mtuner_name\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 50\u001b[0m stop_early \u001b[38;5;241m=\u001b[39m tf\u001b[38;5;241m.\u001b[39mkeras\u001b[38;5;241m.\u001b[39mcallbacks\u001b[38;5;241m.\u001b[39mEarlyStopping(monitor\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mval_loss\u001b[39m\u001b[38;5;124m\"\u001b[39m, patience\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m3\u001b[39m)\n\u001b[0;32m---> 51\u001b[0m \u001b[43mtuner\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msearch\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 52\u001b[0m \u001b[43m \u001b[49m\u001b[43mtrain_ds\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 53\u001b[0m \u001b[43m \u001b[49m\u001b[43mvalidation_data\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtest_ds\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 54\u001b[0m \u001b[43m \u001b[49m\u001b[43mcallbacks\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m[\u001b[49m\u001b[43mstop_early\u001b[49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 55\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 56\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 58\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m tuner\n", + "File \u001b[0;32m~/.local/lib/python3.8/site-packages/keras_tuner/engine/base_tuner.py:230\u001b[0m, in \u001b[0;36mBaseTuner.search\u001b[0;34m(self, *fit_args, **fit_kwargs)\u001b[0m\n\u001b[1;32m 227\u001b[0m \u001b[38;5;28;01mcontinue\u001b[39;00m\n\u001b[1;32m 229\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mon_trial_begin(trial)\n\u001b[0;32m--> 230\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_try_run_and_update_trial\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtrial\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mfit_args\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mfit_kwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 231\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mon_trial_end(trial)\n\u001b[1;32m 232\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mon_search_end()\n", + "File \u001b[0;32m~/.local/lib/python3.8/site-packages/keras_tuner/engine/base_tuner.py:270\u001b[0m, in \u001b[0;36mBaseTuner._try_run_and_update_trial\u001b[0;34m(self, trial, *fit_args, **fit_kwargs)\u001b[0m\n\u001b[1;32m 268\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_try_run_and_update_trial\u001b[39m(\u001b[38;5;28mself\u001b[39m, trial, \u001b[38;5;241m*\u001b[39mfit_args, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mfit_kwargs):\n\u001b[1;32m 269\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 270\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_run_and_update_trial\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtrial\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mfit_args\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mfit_kwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 271\u001b[0m trial\u001b[38;5;241m.\u001b[39mstatus \u001b[38;5;241m=\u001b[39m trial_module\u001b[38;5;241m.\u001b[39mTrialStatus\u001b[38;5;241m.\u001b[39mCOMPLETED\n\u001b[1;32m 272\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m\n", + "File \u001b[0;32m~/.local/lib/python3.8/site-packages/keras_tuner/engine/base_tuner.py:235\u001b[0m, in \u001b[0;36mBaseTuner._run_and_update_trial\u001b[0;34m(self, trial, *fit_args, **fit_kwargs)\u001b[0m\n\u001b[1;32m 234\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_run_and_update_trial\u001b[39m(\u001b[38;5;28mself\u001b[39m, trial, \u001b[38;5;241m*\u001b[39mfit_args, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mfit_kwargs):\n\u001b[0;32m--> 235\u001b[0m results \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrun_trial\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtrial\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mfit_args\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mfit_kwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 236\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39moracle\u001b[38;5;241m.\u001b[39mget_trial(trial\u001b[38;5;241m.\u001b[39mtrial_id)\u001b[38;5;241m.\u001b[39mmetrics\u001b[38;5;241m.\u001b[39mexists(\n\u001b[1;32m 237\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39moracle\u001b[38;5;241m.\u001b[39mobjective\u001b[38;5;241m.\u001b[39mname\n\u001b[1;32m 238\u001b[0m ):\n\u001b[1;32m 239\u001b[0m \u001b[38;5;66;03m# The oracle is updated by calling `self.oracle.update_trial()` in\u001b[39;00m\n\u001b[1;32m 240\u001b[0m \u001b[38;5;66;03m# `Tuner.run_trial()`. For backward compatibility, we support this\u001b[39;00m\n\u001b[1;32m 241\u001b[0m \u001b[38;5;66;03m# use case. No further action needed in this case.\u001b[39;00m\n\u001b[1;32m 242\u001b[0m warnings\u001b[38;5;241m.\u001b[39mwarn(\n\u001b[1;32m 243\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mThe use case of calling \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 244\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m`self.oracle.update_trial(trial_id, metrics)` \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 250\u001b[0m stacklevel\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m2\u001b[39m,\n\u001b[1;32m 251\u001b[0m )\n", + "File \u001b[0;32m~/.local/lib/python3.8/site-packages/keras_tuner/engine/tuner.py:287\u001b[0m, in \u001b[0;36mTuner.run_trial\u001b[0;34m(self, trial, *args, **kwargs)\u001b[0m\n\u001b[1;32m 285\u001b[0m callbacks\u001b[38;5;241m.\u001b[39mappend(model_checkpoint)\n\u001b[1;32m 286\u001b[0m copied_kwargs[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcallbacks\u001b[39m\u001b[38;5;124m\"\u001b[39m] \u001b[38;5;241m=\u001b[39m callbacks\n\u001b[0;32m--> 287\u001b[0m obj_value \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_build_and_fit_model\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtrial\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mcopied_kwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 289\u001b[0m histories\u001b[38;5;241m.\u001b[39mappend(obj_value)\n\u001b[1;32m 290\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m histories\n", + "File \u001b[0;32m~/.local/lib/python3.8/site-packages/keras_tuner/engine/tuner.py:214\u001b[0m, in \u001b[0;36mTuner._build_and_fit_model\u001b[0;34m(self, trial, *args, **kwargs)\u001b[0m\n\u001b[1;32m 212\u001b[0m hp \u001b[38;5;241m=\u001b[39m trial\u001b[38;5;241m.\u001b[39mhyperparameters\n\u001b[1;32m 213\u001b[0m model \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_try_build(hp)\n\u001b[0;32m--> 214\u001b[0m results \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mhypermodel\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfit\u001b[49m\u001b[43m(\u001b[49m\u001b[43mhp\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmodel\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 215\u001b[0m tuner_utils\u001b[38;5;241m.\u001b[39mvalidate_trial_results(\n\u001b[1;32m 216\u001b[0m results, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39moracle\u001b[38;5;241m.\u001b[39mobjective, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mHyperModel.fit()\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 217\u001b[0m )\n\u001b[1;32m 218\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m results\n", + "File \u001b[0;32m~/.local/lib/python3.8/site-packages/keras_tuner/engine/hypermodel.py:144\u001b[0m, in \u001b[0;36mHyperModel.fit\u001b[0;34m(self, hp, model, *args, **kwargs)\u001b[0m\n\u001b[1;32m 120\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mfit\u001b[39m(\u001b[38;5;28mself\u001b[39m, hp, model, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 121\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Train the model.\u001b[39;00m\n\u001b[1;32m 122\u001b[0m \n\u001b[1;32m 123\u001b[0m \u001b[38;5;124;03m Args:\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 142\u001b[0m \u001b[38;5;124;03m If return a float, it should be the `objective` value.\u001b[39;00m\n\u001b[1;32m 143\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 144\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mmodel\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfit\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m/usr/local/lib/python3.8/dist-packages/keras/utils/traceback_utils.py:65\u001b[0m, in \u001b[0;36mfilter_traceback..error_handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 63\u001b[0m filtered_tb \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 64\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m---> 65\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfn\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 66\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 67\u001b[0m filtered_tb \u001b[38;5;241m=\u001b[39m _process_traceback_frames(e\u001b[38;5;241m.\u001b[39m__traceback__)\n", + "File \u001b[0;32m/usr/local/lib/python3.8/dist-packages/keras/engine/training.py:1650\u001b[0m, in \u001b[0;36mModel.fit\u001b[0;34m(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_batch_size, validation_freq, max_queue_size, workers, use_multiprocessing)\u001b[0m\n\u001b[1;32m 1642\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m tf\u001b[38;5;241m.\u001b[39mprofiler\u001b[38;5;241m.\u001b[39mexperimental\u001b[38;5;241m.\u001b[39mTrace(\n\u001b[1;32m 1643\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtrain\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 1644\u001b[0m epoch_num\u001b[38;5;241m=\u001b[39mepoch,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1647\u001b[0m _r\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m1\u001b[39m,\n\u001b[1;32m 1648\u001b[0m ):\n\u001b[1;32m 1649\u001b[0m callbacks\u001b[38;5;241m.\u001b[39mon_train_batch_begin(step)\n\u001b[0;32m-> 1650\u001b[0m tmp_logs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtrain_function\u001b[49m\u001b[43m(\u001b[49m\u001b[43miterator\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1651\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m data_handler\u001b[38;5;241m.\u001b[39mshould_sync:\n\u001b[1;32m 1652\u001b[0m context\u001b[38;5;241m.\u001b[39masync_wait()\n", + "File \u001b[0;32m/usr/local/lib/python3.8/dist-packages/tensorflow/python/util/traceback_utils.py:150\u001b[0m, in \u001b[0;36mfilter_traceback..error_handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 148\u001b[0m filtered_tb \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 149\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 150\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfn\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 151\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 152\u001b[0m filtered_tb \u001b[38;5;241m=\u001b[39m _process_traceback_frames(e\u001b[38;5;241m.\u001b[39m__traceback__)\n", + "File \u001b[0;32m/usr/local/lib/python3.8/dist-packages/tensorflow/python/eager/polymorphic_function/polymorphic_function.py:880\u001b[0m, in \u001b[0;36mFunction.__call__\u001b[0;34m(self, *args, **kwds)\u001b[0m\n\u001b[1;32m 877\u001b[0m compiler \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mxla\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_jit_compile \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mnonXla\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 879\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m OptionalXlaContext(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_jit_compile):\n\u001b[0;32m--> 880\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_call\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwds\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 882\u001b[0m new_tracing_count \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mexperimental_get_tracing_count()\n\u001b[1;32m 883\u001b[0m without_tracing \u001b[38;5;241m=\u001b[39m (tracing_count \u001b[38;5;241m==\u001b[39m new_tracing_count)\n", + "File \u001b[0;32m/usr/local/lib/python3.8/dist-packages/tensorflow/python/eager/polymorphic_function/polymorphic_function.py:912\u001b[0m, in \u001b[0;36mFunction._call\u001b[0;34m(self, *args, **kwds)\u001b[0m\n\u001b[1;32m 909\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_lock\u001b[38;5;241m.\u001b[39mrelease()\n\u001b[1;32m 910\u001b[0m \u001b[38;5;66;03m# In this case we have created variables on the first call, so we run the\u001b[39;00m\n\u001b[1;32m 911\u001b[0m \u001b[38;5;66;03m# defunned version which is guaranteed to never create variables.\u001b[39;00m\n\u001b[0;32m--> 912\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_no_variable_creation_fn\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwds\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;66;03m# pylint: disable=not-callable\u001b[39;00m\n\u001b[1;32m 913\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_variable_creation_fn \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 914\u001b[0m \u001b[38;5;66;03m# Release the lock early so that multiple threads can perform the call\u001b[39;00m\n\u001b[1;32m 915\u001b[0m \u001b[38;5;66;03m# in parallel.\u001b[39;00m\n\u001b[1;32m 916\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_lock\u001b[38;5;241m.\u001b[39mrelease()\n", + "File \u001b[0;32m/usr/local/lib/python3.8/dist-packages/tensorflow/python/eager/polymorphic_function/tracing_compiler.py:134\u001b[0m, in \u001b[0;36mTracingCompiler.__call__\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 131\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_lock:\n\u001b[1;32m 132\u001b[0m (concrete_function,\n\u001b[1;32m 133\u001b[0m filtered_flat_args) \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_maybe_define_function(args, kwargs)\n\u001b[0;32m--> 134\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mconcrete_function\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_call_flat\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 135\u001b[0m \u001b[43m \u001b[49m\u001b[43mfiltered_flat_args\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcaptured_inputs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mconcrete_function\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcaptured_inputs\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m/usr/local/lib/python3.8/dist-packages/tensorflow/python/eager/polymorphic_function/monomorphic_function.py:1745\u001b[0m, in \u001b[0;36mConcreteFunction._call_flat\u001b[0;34m(self, args, captured_inputs, cancellation_manager)\u001b[0m\n\u001b[1;32m 1741\u001b[0m possible_gradient_type \u001b[38;5;241m=\u001b[39m gradients_util\u001b[38;5;241m.\u001b[39mPossibleTapeGradientTypes(args)\n\u001b[1;32m 1742\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m (possible_gradient_type \u001b[38;5;241m==\u001b[39m gradients_util\u001b[38;5;241m.\u001b[39mPOSSIBLE_GRADIENT_TYPES_NONE\n\u001b[1;32m 1743\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m executing_eagerly):\n\u001b[1;32m 1744\u001b[0m \u001b[38;5;66;03m# No tape is watching; skip to running the function.\u001b[39;00m\n\u001b[0;32m-> 1745\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_build_call_outputs(\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_inference_function\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcall\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 1746\u001b[0m \u001b[43m \u001b[49m\u001b[43mctx\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcancellation_manager\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcancellation_manager\u001b[49m\u001b[43m)\u001b[49m)\n\u001b[1;32m 1747\u001b[0m forward_backward \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_select_forward_and_backward_functions(\n\u001b[1;32m 1748\u001b[0m args,\n\u001b[1;32m 1749\u001b[0m possible_gradient_type,\n\u001b[1;32m 1750\u001b[0m executing_eagerly)\n\u001b[1;32m 1751\u001b[0m forward_function, args_with_tangents \u001b[38;5;241m=\u001b[39m forward_backward\u001b[38;5;241m.\u001b[39mforward()\n", + "File \u001b[0;32m/usr/local/lib/python3.8/dist-packages/tensorflow/python/eager/polymorphic_function/monomorphic_function.py:415\u001b[0m, in \u001b[0;36m_EagerDefinedFunction.call\u001b[0;34m(self, ctx, args, cancellation_manager)\u001b[0m\n\u001b[1;32m 406\u001b[0m outputs \u001b[38;5;241m=\u001b[39m functional_ops\u001b[38;5;241m.\u001b[39mpartitioned_call(\n\u001b[1;32m 407\u001b[0m args\u001b[38;5;241m=\u001b[39margs,\n\u001b[1;32m 408\u001b[0m f\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 411\u001b[0m config\u001b[38;5;241m=\u001b[39mconfig,\n\u001b[1;32m 412\u001b[0m executor_type\u001b[38;5;241m=\u001b[39mexecutor_type)\n\u001b[1;32m 414\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m i, func_graph_output \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28menumerate\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_func_graph_outputs):\n\u001b[0;32m--> 415\u001b[0m \u001b[43mhandle_data_util\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcopy_handle_data\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfunc_graph_output\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43moutputs\u001b[49m\u001b[43m[\u001b[49m\u001b[43mi\u001b[49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 416\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m executing_eagerly:\n\u001b[1;32m 417\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m outputs\n", + "File \u001b[0;32m/usr/local/lib/python3.8/dist-packages/tensorflow/python/ops/handle_data_util.py:41\u001b[0m, in \u001b[0;36mcopy_handle_data\u001b[0;34m(source_t, target_t)\u001b[0m\n\u001b[1;32m 26\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mcopy_handle_data\u001b[39m(source_t, target_t):\n\u001b[1;32m 27\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Copies HandleData for variant and resource type tensors if available.\u001b[39;00m\n\u001b[1;32m 28\u001b[0m \n\u001b[1;32m 29\u001b[0m \u001b[38;5;124;03m The CppShapeInferenceResult::HandleData proto contains information about the\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 39\u001b[0m \u001b[38;5;124;03m target_t: The tensor to copy HandleData to.\u001b[39;00m\n\u001b[1;32m 40\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m---> 41\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m (\u001b[43mtarget_t\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdtype\u001b[49m \u001b[38;5;241m==\u001b[39m dtypes\u001b[38;5;241m.\u001b[39mresource \u001b[38;5;129;01mor\u001b[39;00m\n\u001b[1;32m 42\u001b[0m target_t\u001b[38;5;241m.\u001b[39mdtype \u001b[38;5;241m==\u001b[39m dtypes\u001b[38;5;241m.\u001b[39mvariant):\n\u001b[1;32m 43\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(source_t, ops\u001b[38;5;241m.\u001b[39mEagerTensor):\n\u001b[1;32m 44\u001b[0m handle_data \u001b[38;5;241m=\u001b[39m source_t\u001b[38;5;241m.\u001b[39m_handle_data \u001b[38;5;66;03m# pylint: disable=protected-access\u001b[39;00m\n", + "File \u001b[0;32m/usr/local/lib/python3.8/dist-packages/tensorflow/python/framework/ops.py:1129\u001b[0m, in \u001b[0;36m_EagerTensorBase.dtype\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1125\u001b[0m \u001b[38;5;129m@property\u001b[39m\n\u001b[1;32m 1126\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mdtype\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[1;32m 1127\u001b[0m \u001b[38;5;66;03m# Note: using the intern table directly here as this is\u001b[39;00m\n\u001b[1;32m 1128\u001b[0m \u001b[38;5;66;03m# performance-sensitive in some models.\u001b[39;00m\n\u001b[0;32m-> 1129\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mdtypes\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_INTERN_TABLE\u001b[49m[\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_datatype_enum()]\n", + "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + ] + } + ], + "source": [ + "heart_tuner = find_hyperparameters(\n", + " **get_heart_tuner_search_kwargs(\n", + " build_heart_model, max_trials=100, executions_per_trial=5\n", + " )\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "create_tuner_stats(\n", + " heart_tuner,\n", + " epochs=5,\n", + " num_runs=10,\n", + " num_models=10,\n", + " train_ds=heart_train_ds,\n", + " test_ds=heart_test_ds,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Trial 1 Complete [00h 00m 15s]\n", + "val_accuracy: 0.9016393423080444\n", + "\n", + "Best val_accuracy So Far: 0.9016393423080444\n", + "Total elapsed time: 00h 00m 15s\n", + "INFO:tensorflow:Oracle triggered exit\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_accuracy_meanval_accuracy_stdval_accuracy_minval_accuracy_maxparams
0162elu0.065430.010.250.999830.8557380.0169310.8360660.885246969
\n", + "
" + ], + "text/plain": [ + " units n_layers activation learning_rate weight_decay dropout \n", + "0 16 2 elu 0.06543 0.01 0.25 \\\n", + "\n", + " decay_rate val_accuracy_mean val_accuracy_std val_accuracy_min \n", + "0 0.99983 0.855738 0.016931 0.836066 \\\n", + "\n", + " val_accuracy_max params \n", + "0 0.885246 969 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_accuracy_meanval_accuracy_stdval_accuracy_minval_accuracy_maxparams
0162elu0.065430.010.250.999830.8557380.0169310.8360660.885246969
\n", + "
" + ], + "text/plain": [ + " units n_layers activation learning_rate weight_decay dropout \n", + "0 16 2 elu 0.06543 0.01 0.25 \\\n", + "\n", + " decay_rate val_accuracy_mean val_accuracy_std val_accuracy_min \n", + "0 0.99983 0.855738 0.016931 0.836066 \\\n", + "\n", + " val_accuracy_max params \n", + "0 0.885246 969 " + ] + }, + "execution_count": null, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def final_build_heart_model(hp) -> Model:\n", + " return build_heart_model_f(\n", + " units=hp.Fixed(\"units\", 16),\n", + " n_layers=hp.Fixed(\"n_layers\", 2),\n", + " activation=hp.Fixed(\"activation\", \"elu\"),\n", + " learning_rate=hp.Fixed(\"learning_rate\", 0.06543),\n", + " weight_decay=hp.Fixed(\"weight_decay\", 0.01),\n", + " dropout=hp.Fixed(\"dropout\", 0.25),\n", + " decay_rate=hp.Fixed(\"decay_rate\", 0.99983),\n", + " )\n", + "\n", + "\n", + "final_heart_tuner = find_hyperparameters(\n", + " **get_heart_tuner_search_kwargs(\n", + " final_build_heart_model, max_trials=1, executions_per_trial=1\n", + " )\n", + ")\n", + "create_tuner_stats(\n", + " final_heart_tuner,\n", + " epochs=5,\n", + " num_runs=10,\n", + " num_models=1,\n", + " train_ds=heart_train_ds,\n", + " test_ds=heart_test_ds,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![Screenshot%202023-01-26%20at%2015.15.44.png](attachment:Screenshot%202023-01-26%20at%2015.15.44.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The figure above shows the table from our paper for reference. As can be seen from our experiments above, our proposed methodology performs comparable to or better than state-of-the-art" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Comparison with methods and datasets from Certified Monotonic Network [1] (Reference #20 in our paper)\n", + "\n", + "\n", + "References:\n", + "\n", + "\n", + "1. Xingchao Liu, Xing Han, Na Zhang, and Qiang Liu. Certified monotonic neural networks. Advances in Neural Information Processing Systems, 33:15427–15438, 2020\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Experiment for Compas Dataset [1]\n", + "\n", + "COMPAS [1] is a dataset containing the criminal records of 6,172 individuals\n", + "arrested in Florida. The task is to predict whether the individual will commit a crime again\n", + "in 2 years. The probability predicted by the system will be used as a risk score. As mentioned in [2] 13 attributes for prediction. The risk score should be monotonically increasing w.r.t. four attributes, number of prior adult convictions, number of juvenile felony, number of juvenile misdemeanor, and number of other convictions. The `monotonicity_indicator` corresponding to these features are set to 1.\n", + "\n", + "References: \n", + "\n", + "1. S. Mattu J. Angwin, J. Larson and L. Kirchner. Machine bias: There’s software used across the country to predict future criminals. and it’s biased against blacks. ProPublica, 2016.\n", + "\n", + "2. Xingchao Liu, Xing Han, Na Zhang, and Qiang Liu. Certified monotonic neural networks. Advances in Neural Information Processing Systems, 33:15427–15438, 2020\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "compas_train_df, compas_test_df = get_train_n_test_data(\n", + " data_path=data_path, dataset_name=\"compas\"\n", + ")\n", + "display(compas_train_df)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# compas_train_ds = df2ds(compas_train_df).repeat(10).shuffle(10 * compas_train_df.shape[0]).batch(16)\n", + "# compas_test_ds = df2ds(compas_test_df).batch(16)\n", + "\n", + "compas_train_ds = df2ds(compas_train_df).shuffle(compas_train_df.shape[0]).batch(16)\n", + "compas_test_ds = df2ds(compas_test_df).batch(16)\n", + "\n", + "peek(compas_train_ds), len(compas_train_ds)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def build_compas_model_f(\n", + " **kwargs,\n", + ") -> Model:\n", + " monotonicity_indicator = {\n", + " \"priors_count\": 1,\n", + " \"juv_fel_count\": 1,\n", + " \"juv_misd_count\": 1,\n", + " \"juv_other_count\": 1,\n", + " \"age\": 0,\n", + " \"race_0\": 0,\n", + " \"race_1\": 0,\n", + " \"race_2\": 0,\n", + " \"race_3\": 0,\n", + " \"race_4\": 0,\n", + " \"race_5\": 0,\n", + " \"sex_0\": 0,\n", + " \"sex_1\": 0,\n", + " }\n", + "\n", + " metrics = \"accuracy\"\n", + " loss = \"binary_crossentropy\"\n", + "\n", + " return build_mono_model_f(\n", + " monotonicity_indicator=monotonicity_indicator,\n", + " metrics=metrics,\n", + " loss=loss,\n", + " final_activation=\"sigmoid\",\n", + " train_ds=compas_train_ds,\n", + " **kwargs,\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "compas_model = build_compas_model_f(\n", + " units=16,\n", + " n_layers=3,\n", + " activation=\"relu\",\n", + " dropout=0.1,\n", + " weight_decay=0.1,\n", + " learning_rate=0.1,\n", + " decay_rate=0.8,\n", + ")\n", + "compas_model.summary()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "compas_model.fit(\n", + " compas_train_ds,\n", + " validation_data=compas_test_ds,\n", + " epochs=2,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def build_compas_model(hp) -> Model:\n", + " return build_compas_model_f(\n", + " units=hp.Int(\"units\", min_value=8, max_value=32, step=1),\n", + " n_layers=hp.Int(\"n_layers\", min_value=1, max_value=3),\n", + " activation=hp.Choice(\"activation\", values=[\"elu\"]),\n", + " learning_rate=hp.Float(\n", + " \"learning_rate\", min_value=1e-2, max_value=0.3, sampling=\"log\"\n", + " ),\n", + " weight_decay=hp.Float(\n", + " \"weight_decay\", min_value=1e-2, max_value=0.3, sampling=\"log\"\n", + " ),\n", + " dropout=hp.Float(\"dropout\", min_value=0.0, max_value=0.5, sampling=\"linear\"),\n", + " decay_rate=hp.Float(\n", + " \"decay_rate\", min_value=0.1, max_value=1.0, sampling=\"reverse_log\"\n", + " ),\n", + " )\n", + "\n", + "\n", + "def get_compas_tuner_search_kwargs(\n", + " build_compas_model, *, max_trials, executions_per_trial\n", + "):\n", + " compas_tuner_search_kwargs = dict(\n", + " build_model_f=build_compas_model,\n", + " tuner_name=\"BayesianOptimization\",\n", + " train_ds=compas_train_ds,\n", + " test_ds=compas_test_ds,\n", + " objective=Objective(\"val_accuracy\", direction=\"max\"),\n", + " max_epochs=20,\n", + " executions_per_trial=executions_per_trial,\n", + " dir_root=\"/tmp/tuner/compas_tuner\",\n", + " project_name=\"compas_tuner\",\n", + " max_trials=max_trials,\n", + " )\n", + " return compas_tuner_search_kwargs" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "compas_tuner = find_hyperparameters(\n", + " **get_compas_tuner_search_kwargs(\n", + " build_compas_model, max_trials=100, executions_per_trial=5\n", + " )\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Experiment for Blog Dataset [1]\n", + "\n", + "Blog Feedback [1] is a dataset containing 54,270 data points from\n", + "blog posts. The raw HTML-documents of the blog posts were crawled and processed. The prediction\n", + "task associated with the data is the prediction of the number of comments in the upcoming 24 hours.\n", + "The feature of the dataset has 276 dimensions, and 8 attributes among them should be monotonically\n", + "non-decreasing with the prediction. They are A51, A52, A53, A54, A56, A57, A58, A59. Thus the `monotonicity_indicator` corresponding to these features are set to 1. As done in [2], we only use the data points with targets smaller than the 90th percentile.\n", + "\n", + "\n", + "\n", + "\n", + "References:\n", + "\n", + "1. Krisztian Buza. Feedback prediction for blogs. In Data analysis, machine learning and knowledge discovery, pages 145–152. Springer, 2014\n", + "2. Xingchao Liu, Xing Han, Na Zhang, and Qiang Liu. Certified monotonic neural networks. Advances in Neural Information Processing Systems, 33:15427–15438, 2020\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "tf.keras.utils.set_random_seed(42)\n", + "\n", + "monotonicity_indicator = np.zeros((276))\n", + "monotonicity_indicator[50:54] = 1.0\n", + "monotonicity_indicator[55:59] = 1.0\n", + "\n", + "# convexity_indicator = None\n", + "\n", + "train_params = dict(\n", + " batch_size=256,\n", + " num_epochs=100,\n", + " units=4,\n", + " n_layers=2,\n", + " activation=\"elu\",\n", + " loss=\"mean_squared_error\",\n", + " metrics=tf.keras.metrics.RootMeanSquaredError(),\n", + " learning_rate=0.01,\n", + " is_classification=False,\n", + ")\n", + "\n", + "\n", + "history, monotonic_model = train_dataset(\n", + " dataset_name=\"blog\",\n", + " monotonicity_indicator=monotonicity_indicator,\n", + " # convexity_indicator=convexity_indicator,\n", + " train_params=train_params,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Experiment for Loan Dataset [1]\n", + "\n", + "Lending club loan *data*\n", + "contains complete loan data for all loans\n", + "issued through 2007-2015 of several banks. Each data point is a 28-dimensional feature including\n", + "the current loan status, latest payment information, and other additional features. The task is to\n", + "predict loan defaulters given the feature vector. The possibility of loan default should be nondecreasing w.r.t. number of public record bankruptcies, Debt-to-Income ratio, and\n", + "non-increasing w.r.t. credit score, length of employment, annual income. Thus the `monotonicity_indicator` corresponding to these features are set to 1.\n", + "\n", + "\n", + "References:\n", + "\n", + "1. https://www.kaggle.com/wendykan/lending-club-loan-data (Note: Currently, the dataset seems to be withdrawn from kaggle)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "tf.keras.utils.set_random_seed(42)\n", + "\n", + "# monotonicity_indicator = np.array([-1, 1, -1, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + "# 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])\n", + "monotonicity_indicator = np.array([-1, 1, -1, -1, 1] + [0] * 24)\n", + "\n", + "convexity_indicator = None\n", + "\n", + "train_params = dict(\n", + " batch_size=256,\n", + " num_epochs=20,\n", + " units=4,\n", + " n_layers=1,\n", + " activation=\"elu\",\n", + " loss=\"binary_crossentropy\",\n", + " metrics=\"accuracy\",\n", + " learning_rate=0.008,\n", + " is_classification=True,\n", + ")\n", + "\n", + "\n", + "history, monotonic_model = train_dataset(\n", + " dataset_name=\"loan\",\n", + " monotonicity_indicator=monotonicity_indicator,\n", + " # convexity_indicator=convexity_indicator,\n", + " train_params=train_params,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The figure above shows the table from our paper for reference. As can be seen from our experiments above, our proposed methodology performs comparable to or better than state-of-the-art" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![Screenshot%202023-01-26%20at%2015.15.52.png](attachment:Screenshot%202023-01-26%20at%2015.15.52.png)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "python3", + "language": "python", + "name": "python3" + } }, - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 012345678910
00.30-1.040.750.94-1.95-1.300.13-0.32-0.02-0.850.88
10.780.071.130.47-0.860.37-0.960.88-0.05-0.18-0.68
21.22-0.15-0.43-0.350.530.370.410.432.14-0.41-0.51
3-0.810.621.13-0.11-0.84-0.820.650.740.54-0.670.23
40.120.220.870.220.680.070.290.63-1.46-0.32-0.47
5-0.64-0.281.49-0.870.97-1.68-0.330.160.590.710.79
6-0.35-0.460.86-0.19-1.28-1.13-0.920.500.140.69-0.43
70.160.63-0.310.46-0.66-0.36-0.38-1.200.49-0.470.01
80.480.450.67-0.10-0.42-0.08-1.69-1.45-1.32-1.000.40
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "monotonicity_indicator = [1, 1, 1, 1, 0, 0, 0, 0, -1, -1, -1]\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 0
01.00
11.00
21.00
31.00
40.00
50.00
60.00
70.00
8-1.00
9-1.00
10-1.00
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "kernel:\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 01234567891011121314151617
00.330.150.130.410.380.140.430.300.020.120.380.050.420.030.000.240.440.28
10.010.390.420.320.380.220.330.340.030.060.060.270.260.450.350.050.210.34
20.210.290.160.140.420.060.150.100.410.080.030.220.340.200.110.010.430.35
30.270.330.060.170.420.420.240.300.110.200.170.250.170.070.320.300.170.36
40.32-0.250.12-0.370.410.200.06-0.28-0.270.43-0.41-0.17-0.24-0.310.330.310.110.03
50.040.19-0.02-0.340.36-0.120.280.32-0.11-0.400.410.300.06-0.28-0.270.23-0.41-0.12
60.35-0.04-0.280.16-0.030.35-0.03-0.160.39-0.36-0.31-0.180.02-0.38-0.400.390.35-0.19
70.33-0.340.11-0.290.25-0.210.110.08-0.19-0.390.010.100.39-0.25-0.37-0.270.040.34
8-0.27-0.09-0.02-0.45-0.16-0.12-0.09-0.43-0.36-0.09-0.23-0.42-0.28-0.24-0.30-0.31-0.07-0.07
9-0.38-0.34-0.44-0.42-0.32-0.06-0.27-0.28-0.22-0.05-0.08-0.07-0.21-0.39-0.01-0.26-0.24-0.42
10-0.09-0.45-0.41-0.36-0.19-0.09-0.00-0.34-0.17-0.18-0.05-0.39-0.06-0.20-0.40-0.33-0.18-0.01
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "output:\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 01234567891011121314151617
00.010.400.001.380.000.100.00-0.00-0.00-0.13-0.00-0.26-0.00-0.00-0.55-0.520.790.64
10.451.020.960.711.220.000.86-0.00-0.00-0.09-0.00-0.00-0.00-0.000.26-0.170.541.00
20.300.000.330.000.410.000.42-0.53-0.89-0.29-0.23-0.84-0.16-0.93-0.900.080.370.08
30.210.260.330.420.000.000.00-0.16-0.00-0.61-0.53-0.07-0.00-0.00-0.55-0.660.830.78
41.380.490.700.821.470.540.63-0.00-0.00-0.00-0.00-0.00-0.00-0.000.730.970.940.91
50.000.000.000.000.000.000.00-1.86-0.25-0.00-1.57-1.19-0.61-0.230.13-1.000.50-0.06
60.000.000.000.170.000.000.00-0.15-0.00-0.00-0.00-0.00-0.00-0.000.06-1.000.000.12
70.000.960.350.930.000.320.17-0.00-0.00-0.00-0.00-0.00-0.17-0.000.670.060.120.17
80.001.330.921.630.520.000.66-0.00-0.00-0.00-0.00-0.00-0.00-0.001.000.230.180.81
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "************************************************************************************************************************\n", - "input:\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 012345678910
00.30-1.040.750.94-1.95-1.300.13-0.32-0.02-0.850.88
10.780.071.130.47-0.860.37-0.960.88-0.05-0.18-0.68
21.22-0.15-0.43-0.350.530.370.410.432.14-0.41-0.51
3-0.810.621.13-0.11-0.84-0.820.650.740.54-0.670.23
40.120.220.870.220.680.070.290.63-1.46-0.32-0.47
5-0.64-0.281.49-0.870.97-1.68-0.330.160.590.710.79
6-0.35-0.460.86-0.19-1.28-1.13-0.920.500.140.69-0.43
70.160.63-0.310.46-0.66-0.36-0.38-1.200.49-0.470.01
80.480.450.67-0.10-0.42-0.08-1.69-1.45-1.32-1.000.40
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "monotonicity_indicator = 1\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 0
01.00
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "kernel:\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 01234567891011121314151617
00.440.020.240.220.290.350.180.030.390.170.250.020.100.130.000.420.210.31
10.350.060.260.420.050.410.160.330.030.260.110.030.230.040.370.270.320.40
20.370.300.360.140.210.400.010.280.160.440.430.230.270.220.230.250.430.05
30.320.250.050.450.080.180.260.240.340.070.070.140.040.190.290.230.430.09
40.360.050.200.410.380.290.010.440.170.040.310.340.290.160.250.180.010.28
50.340.310.380.340.080.400.150.160.140.250.150.200.100.060.440.190.420.21
60.010.380.430.180.000.430.450.280.250.180.030.260.220.260.080.230.450.42
70.040.120.280.170.110.000.150.240.050.050.270.320.330.110.090.400.190.06
80.300.170.210.420.210.290.190.380.030.340.320.300.340.150.280.110.440.19
90.100.100.350.320.240.280.300.280.100.120.300.410.150.000.100.400.180.24
100.000.220.210.090.100.130.180.370.240.290.250.230.320.140.270.340.250.10
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "output:\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 01234567891011121314151617
00.000.010.000.000.000.000.00-0.93-0.00-0.07-0.58-0.88-0.58-0.00-0.87-0.49-0.05-1.00
10.730.100.220.180.180.160.00-0.23-0.00-0.00-0.00-0.09-0.00-0.000.160.470.53-0.27
21.150.360.821.200.801.060.61-0.00-0.00-0.00-0.00-0.00-0.00-0.000.530.611.000.94
30.000.450.280.000.000.110.14-0.00-0.21-0.00-0.00-0.00-0.00-0.000.150.080.72-0.08
40.340.190.360.050.150.300.00-0.00-0.00-0.08-0.00-0.00-0.00-0.000.060.380.040.14
50.000.000.260.000.670.050.00-0.00-0.16-0.00-0.00-0.00-0.00-0.00-0.080.30-0.17-0.17
60.000.000.000.000.000.000.00-0.76-0.68-0.28-0.11-0.37-0.42-0.40-0.88-0.41-0.67-1.00
70.010.000.000.000.000.000.00-0.45-0.17-0.04-0.57-0.82-0.50-0.22-0.07-0.62-0.13-0.18
80.000.000.000.000.000.000.00-1.32-0.35-0.39-0.77-1.63-1.12-0.60-0.47-0.99-1.00-1.00
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "************************************************************************************************************************\n", - "input:\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 012345678910
00.30-1.040.750.94-1.95-1.300.13-0.32-0.02-0.850.88
10.780.071.130.47-0.860.37-0.960.88-0.05-0.18-0.68
21.22-0.15-0.43-0.350.530.370.410.432.14-0.41-0.51
3-0.810.621.13-0.11-0.84-0.820.650.740.54-0.670.23
40.120.220.870.220.680.070.290.63-1.46-0.32-0.47
5-0.64-0.281.49-0.870.97-1.68-0.330.160.590.710.79
6-0.35-0.460.86-0.19-1.28-1.13-0.920.500.140.69-0.43
70.160.63-0.310.46-0.66-0.36-0.38-1.200.49-0.470.01
80.480.450.67-0.10-0.42-0.08-1.69-1.45-1.32-1.000.40
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "monotonicity_indicator = [1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 0
01.00
11.00
21.00
31.00
41.00
51.00
61.00
71.00
81.00
91.00
101.00
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "kernel:\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 01234567891011121314151617
00.310.020.110.290.100.330.370.060.390.350.150.130.150.450.070.190.030.06
10.120.020.060.410.320.240.340.280.220.060.330.270.250.230.430.090.450.27
20.190.110.190.250.070.420.320.350.150.050.000.240.220.390.440.110.190.10
30.150.370.210.410.250.040.370.040.050.220.310.350.350.080.380.010.250.29
40.170.450.240.320.010.000.190.340.170.190.180.340.020.240.030.410.260.00
50.290.100.070.340.040.300.390.270.390.160.330.450.060.190.230.040.360.04
60.130.150.220.400.140.300.110.450.140.170.260.160.360.100.170.320.140.08
70.250.250.240.450.170.450.300.350.410.400.110.260.320.080.220.340.050.09
80.160.270.100.230.080.210.190.160.060.040.170.050.390.110.260.250.130.05
90.170.170.000.130.120.030.390.110.010.290.430.200.210.430.390.180.190.27
100.260.230.430.040.250.360.210.360.370.360.080.140.250.240.300.330.040.07
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "output:\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 01234567891011121314151617
00.000.000.080.000.000.000.00-0.82-0.58-0.32-1.07-1.09-0.00-0.63-0.21-0.74-1.00-0.15
10.360.000.000.510.110.720.76-0.12-0.00-0.00-0.05-0.00-0.00-0.000.56-0.340.130.22
20.720.680.321.100.100.840.68-0.00-0.00-0.00-0.00-0.00-0.00-0.000.200.970.33-0.07
30.000.000.360.350.360.820.00-0.00-0.00-0.19-0.29-0.13-0.00-0.200.670.20-0.000.14
40.180.140.260.680.090.380.36-0.00-0.00-0.00-0.00-0.00-0.07-0.000.140.150.330.10
50.010.550.500.000.000.210.00-0.00-0.27-0.00-0.44-0.25-0.00-0.000.440.83-0.24-0.01
60.000.000.000.000.000.000.00-0.89-0.85-0.48-0.77-0.90-0.21-0.30-0.09-0.69-0.83-0.03
70.000.000.000.000.010.000.00-0.79-0.59-0.65-0.21-0.55-0.19-0.37-0.17-0.71-0.100.03
80.000.000.000.000.000.000.00-1.24-0.48-0.95-1.13-0.71-1.40-0.30-0.76-1.00-0.47-0.39
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "************************************************************************************************************************\n", - "input:\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 012345678910
00.30-1.040.750.94-1.95-1.300.13-0.32-0.02-0.850.88
10.780.071.130.47-0.860.37-0.960.88-0.05-0.18-0.68
21.22-0.15-0.43-0.350.530.370.410.432.14-0.41-0.51
3-0.810.621.13-0.11-0.84-0.820.650.740.54-0.670.23
40.120.220.870.220.680.070.290.63-1.46-0.32-0.47
5-0.64-0.281.49-0.870.97-1.68-0.330.160.590.710.79
6-0.35-0.460.86-0.19-1.28-1.13-0.920.500.140.69-0.43
70.160.63-0.310.46-0.66-0.36-0.38-1.200.49-0.470.01
80.480.450.67-0.10-0.42-0.08-1.69-1.45-1.32-1.000.40
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "monotonicity_indicator = -1\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 0
0-1.00
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "kernel:\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 01234567891011121314151617
0-0.29-0.12-0.00-0.17-0.33-0.17-0.33-0.36-0.28-0.16-0.24-0.22-0.10-0.13-0.02-0.38-0.23-0.02
1-0.36-0.13-0.05-0.07-0.41-0.30-0.38-0.06-0.40-0.42-0.44-0.03-0.27-0.03-0.32-0.31-0.35-0.40
2-0.30-0.07-0.40-0.06-0.10-0.21-0.16-0.22-0.06-0.36-0.40-0.42-0.23-0.22-0.20-0.33-0.45-0.06
3-0.05-0.08-0.07-0.30-0.44-0.23-0.40-0.25-0.13-0.31-0.11-0.13-0.13-0.34-0.15-0.05-0.36-0.13
4-0.45-0.34-0.41-0.39-0.15-0.10-0.40-0.32-0.19-0.13-0.29-0.39-0.43-0.29-0.13-0.05-0.39-0.01
5-0.09-0.38-0.00-0.12-0.07-0.42-0.01-0.12-0.26-0.28-0.16-0.06-0.08-0.43-0.23-0.28-0.28-0.07
6-0.34-0.38-0.15-0.44-0.41-0.19-0.25-0.41-0.34-0.22-0.43-0.36-0.25-0.28-0.06-0.12-0.15-0.16
7-0.17-0.39-0.40-0.26-0.40-0.20-0.10-0.14-0.42-0.21-0.18-0.25-0.15-0.21-0.13-0.41-0.14-0.14
8-0.38-0.03-0.10-0.21-0.13-0.04-0.19-0.00-0.09-0.38-0.01-0.27-0.24-0.24-0.13-0.18-0.37-0.21
9-0.43-0.08-0.20-0.29-0.10-0.27-0.08-0.43-0.22-0.37-0.27-0.24-0.15-0.22-0.01-0.45-0.35-0.31
10-0.38-0.44-0.20-0.31-0.42-0.23-0.03-0.31-0.11-0.35-0.01-0.00-0.00-0.39-0.45-0.14-0.03-0.10
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "output:\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 01234567891011121314151617
01.050.880.590.610.000.700.64-0.00-0.00-0.00-0.00-0.00-0.00-0.000.240.741.000.55
10.270.260.000.410.000.000.00-0.00-0.23-0.33-0.21-0.20-0.00-0.02-0.04-0.82-0.52-0.02
20.000.000.000.000.000.000.00-0.36-0.77-0.71-0.39-1.00-0.82-0.67-0.11-0.74-0.97-0.31
30.000.000.000.000.000.010.00-0.00-0.15-0.50-0.38-0.33-0.20-0.00-0.39-0.20-0.12-0.36
40.000.000.000.000.000.000.00-0.45-0.46-0.00-0.84-0.48-0.36-0.13-0.08-0.28-0.330.13
50.000.020.000.000.120.330.00-0.41-0.00-0.44-0.33-0.90-0.56-0.04-0.24-0.27-0.48-0.16
60.741.200.110.900.840.650.87-0.00-0.00-0.00-0.00-0.00-0.00-0.000.600.010.530.12
70.470.890.910.620.260.370.01-0.00-0.00-0.00-0.00-0.00-0.00-0.000.070.610.290.01
81.301.170.981.611.090.590.65-0.00-0.00-0.00-0.00-0.00-0.00-0.000.090.930.940.81
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "************************************************************************************************************************\n", - "input:\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 012345678910
00.30-1.040.750.94-1.95-1.300.13-0.32-0.02-0.850.88
10.780.071.130.47-0.860.37-0.960.88-0.05-0.18-0.68
21.22-0.15-0.43-0.350.530.370.410.432.14-0.41-0.51
3-0.810.621.13-0.11-0.84-0.820.650.740.54-0.670.23
40.120.220.870.220.680.070.290.63-1.46-0.32-0.47
5-0.64-0.281.49-0.870.97-1.68-0.330.160.590.710.79
6-0.35-0.460.86-0.19-1.28-1.13-0.920.500.140.69-0.43
70.160.63-0.310.46-0.66-0.36-0.38-1.200.49-0.470.01
80.480.450.67-0.10-0.42-0.08-1.69-1.45-1.32-1.000.40
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "monotonicity_indicator = [-1. -1. -1. -1. -1. -1. -1. -1. -1. -1. -1.]\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 0
0-1.00
1-1.00
2-1.00
3-1.00
4-1.00
5-1.00
6-1.00
7-1.00
8-1.00
9-1.00
10-1.00
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "kernel:\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 01234567891011121314151617
0-0.45-0.28-0.30-0.41-0.17-0.39-0.22-0.45-0.28-0.40-0.18-0.20-0.16-0.18-0.10-0.13-0.14-0.35
1-0.09-0.27-0.09-0.14-0.02-0.36-0.21-0.05-0.05-0.01-0.02-0.45-0.03-0.09-0.01-0.05-0.39-0.05
2-0.17-0.15-0.37-0.35-0.32-0.03-0.24-0.31-0.35-0.41-0.00-0.37-0.18-0.26-0.09-0.44-0.09-0.17
3-0.42-0.17-0.11-0.31-0.32-0.11-0.20-0.10-0.34-0.15-0.24-0.22-0.22-0.08-0.40-0.02-0.23-0.38
4-0.13-0.17-0.06-0.13-0.32-0.42-0.28-0.44-0.03-0.26-0.38-0.45-0.08-0.06-0.04-0.33-0.27-0.38
5-0.32-0.38-0.19-0.19-0.33-0.01-0.15-0.08-0.31-0.27-0.07-0.11-0.21-0.22-0.18-0.27-0.19-0.15
6-0.30-0.16-0.09-0.25-0.23-0.44-0.25-0.16-0.05-0.13-0.20-0.09-0.14-0.18-0.15-0.22-0.37-0.38
7-0.20-0.14-0.12-0.10-0.42-0.42-0.14-0.04-0.44-0.11-0.10-0.17-0.06-0.29-0.22-0.24-0.01-0.45
8-0.31-0.11-0.16-0.21-0.16-0.39-0.12-0.36-0.36-0.29-0.24-0.24-0.20-0.18-0.33-0.39-0.20-0.02
9-0.41-0.14-0.12-0.21-0.01-0.37-0.03-0.22-0.38-0.22-0.09-0.22-0.19-0.17-0.13-0.32-0.30-0.21
10-0.31-0.05-0.02-0.36-0.04-0.15-0.03-0.12-0.36-0.21-0.40-0.03-0.04-0.03-0.23-0.01-0.02-0.41
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "output:\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 01234567891011121314151617
00.200.840.110.000.551.240.55-0.00-0.02-0.00-0.00-0.00-0.00-0.00-0.200.981.000.30
10.000.000.000.000.000.190.00-0.14-0.87-0.50-0.00-0.34-0.28-0.53-0.24-0.340.23-0.09
20.000.000.000.000.000.000.00-1.34-0.82-1.02-0.75-0.74-0.56-0.68-0.71-1.00-0.65-0.56
30.230.180.000.000.000.000.00-0.00-0.27-0.00-0.00-0.21-0.00-0.28-0.21-0.240.020.00
40.090.000.000.000.000.000.00-0.08-0.00-0.14-0.00-0.50-0.01-0.250.23-0.20-0.14-0.66
50.180.490.000.000.030.000.00-0.79-0.36-0.49-0.39-0.69-0.00-0.090.08-0.840.10-0.25
60.640.760.080.500.620.790.68-0.00-0.06-0.00-0.00-0.00-0.00-0.000.280.240.860.87
70.320.240.230.180.760.620.28-0.00-0.00-0.00-0.00-0.00-0.00-0.000.130.730.090.87
81.230.500.270.511.082.000.60-0.00-0.00-0.00-0.00-0.00-0.00-0.001.001.001.001.00
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "ok\n" - ] - } - ], - "source": [ - "units = 18\n", - "activation = \"relu\"\n", - "batch_size = 9\n", - "x_len = 11\n", - "\n", - "tf.keras.utils.set_random_seed(42)\n", - "\n", - "\n", - "def display_kernel(kernel: Union[tf.Variable, np.typing.NDArray[float]]) -> None:\n", - " cm = sns.color_palette(\"coolwarm_r\", as_cmap=True)\n", - "\n", - " df = pd.DataFrame(kernel)\n", - "\n", - " display(\n", - " df.style.format(\"{:.2f}\").background_gradient(cmap=cm, vmin=-1e-8, vmax=1e-8)\n", - " )\n", - "\n", - "\n", - "x = np.random.default_rng(42).normal(size=(batch_size, x_len))\n", - "\n", - "for monotonicity_indicator in [\n", - " [1] * 4 + [0] * 4 + [-1] * 3,\n", - " 1,\n", - " np.ones((x_len,)),\n", - " -1,\n", - " -np.ones((x_len,)),\n", - "]:\n", - " print(\"*\" * 120)\n", - " mono_layer = MonoDense(\n", - " units=units,\n", - " activation=activation,\n", - " monotonicity_indicator=monotonicity_indicator,\n", - " activation_weights=(7, 7, 4),\n", - " )\n", - " print(\"input:\")\n", - " display_kernel(x)\n", - "\n", - " y = mono_layer(x)\n", - " print(f\"monotonicity_indicator = {monotonicity_indicator}\")\n", - " display_kernel(mono_layer.monotonicity_indicator)\n", - "\n", - " print(\"kernel:\")\n", - " with replace_kernel_using_monotonicity_indicator(\n", - " mono_layer, mono_layer.monotonicity_indicator\n", - " ):\n", - " display_kernel(mono_layer.kernel)\n", - "\n", - " print(\"output:\")\n", - " display_kernel(y)\n", - "print(\"ok\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Model: \"model\"\n", - "_________________________________________________________________\n", - " Layer (type) Output Shape Param # \n", - "=================================================================\n", - " input_1 (InputLayer) [(None, 5, 7, 8)] 0 \n", - " \n", - " mono_dense_5 (MonoDense) (None, 5, 7, 12) 108 \n", - " \n", - "=================================================================\n", - "Total params: 108\n", - "Trainable params: 108\n", - "Non-trainable params: 0\n", - "_________________________________________________________________\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
 0
01.00
11.00
21.00
3-1.00
4-1.00
5-1.00
60.00
70.00
\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "x = Input(shape=(5, 7, 8))\n", - "\n", - "layer = MonoDense(\n", - " units=12,\n", - " activation=activation,\n", - " monotonicity_indicator=[1] * 3 + [-1] * 3 + [0] * 2,\n", - " is_convex=False,\n", - " is_concave=False,\n", - ")\n", - "\n", - "y = layer(x)\n", - "\n", - "model = Model(inputs=x, outputs=y)\n", - "\n", - "model.summary()\n", - "\n", - "display_kernel(layer.monotonicity_indicator)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Arhitectures using Monotonic Dense Layer" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Common monotonic block\n", - "\n", - "Creates multiple layers of Monotonic Dense layers with Dropout layers in between them. The final layer does have non-linear activation to make it easier to use different activation functions for the prediction." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from tensorflow.keras.layers import Dropout\n", - "\n", - "\n", - "def create_mono_block(\n", - " *,\n", - " units: List[int],\n", - " activation: Union[str, Callable[[TensorLike], TensorLike]],\n", - " monotonicity_indicator: TensorLike = 1,\n", - " is_convex: bool = False,\n", - " is_concave: bool = False,\n", - " dropout: Optional[float] = None,\n", - ") -> Callable[[TensorLike], TensorLike]:\n", - " def create_mono_block_inner(\n", - " x: TensorLike,\n", - " *,\n", - " units: List[int] = units,\n", - " activation: Union[str, Callable[[TensorLike], TensorLike]] = activation,\n", - " monotonicity_indicator: TensorLike = monotonicity_indicator,\n", - " is_convex: bool = is_convex,\n", - " is_concave: bool = is_concave,\n", - " ) -> TensorLike:\n", - " if len(units) == 0:\n", - " return x\n", - "\n", - " y = x\n", - " for i in range(len(units)):\n", - " y = MonoDense(\n", - " units=units[i],\n", - " activation=activation if i < len(units) - 1 else None,\n", - " monotonicity_indicator=monotonicity_indicator if i == 0 else 1,\n", - " is_convex=is_convex,\n", - " is_concave=is_concave,\n", - " name=f\"mono_dense_{i}\"\n", - " + (\"_increasing\" if i != 0 else \"\")\n", - " + (\"_convex\" if is_convex else \"\")\n", - " + (\"_concave\" if is_concave else \"\"),\n", - " )(y)\n", - " if (i < len(units) - 1) and dropout:\n", - " y = Dropout(dropout)(y)\n", - "\n", - " return y\n", - "\n", - " return create_mono_block_inner" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Model: \"model_1\"\n", - "_________________________________________________________________\n", - " Layer (type) Output Shape Param # \n", - "=================================================================\n", - " input_2 (InputLayer) [(None, 5, 7, 8)] 0 \n", - " \n", - " mono_dense_0 (MonoDense) (None, 5, 7, 16) 144 \n", - " \n", - " dropout (Dropout) (None, 5, 7, 16) 0 \n", - " \n", - " mono_dense_1_increasing (Mo (None, 5, 7, 16) 272 \n", - " noDense) \n", - " \n", - " dropout_1 (Dropout) (None, 5, 7, 16) 0 \n", - " \n", - " mono_dense_2_increasing (Mo (None, 5, 7, 16) 272 \n", - " noDense) \n", - " \n", - " dropout_2 (Dropout) (None, 5, 7, 16) 0 \n", - " \n", - " mono_dense_3_increasing (Mo (None, 5, 7, 3) 51 \n", - " noDense) \n", - " \n", - "=================================================================\n", - "Total params: 739\n", - "Trainable params: 739\n", - "Non-trainable params: 0\n", - "_________________________________________________________________\n" - ] - } - ], - "source": [ - "x = Input(shape=(5, 7, 8))\n", - "\n", - "# monotonicity indicator must be broadcastable to input shape, so we use the vector of length 8\n", - "monotonicity_indicator = [1] * 3 + [0] * 2 + [-1] * 3\n", - "\n", - "# this mono block has 4 layers with the final one having the shape\n", - "mono_block = create_mono_block(\n", - " units=[16] * 3 + [3],\n", - " monotonicity_indicator=monotonicity_indicator,\n", - " activation=\"elu\",\n", - " dropout=0.1,\n", - ")\n", - "y = mono_block(x)\n", - "model = Model(inputs=x, outputs=y)\n", - "model.summary()\n", - "\n", - "mono_layers = [layer for layer in model.layers if isinstance(layer, MonoDense)]\n", - "assert not (mono_layers[0].monotonicity_indicator == 1).all()\n", - "for mono_layer in mono_layers[1:]:\n", - " assert (mono_layer.monotonicity_indicator == 1).all()\n", - "\n", - "for mono_layer in mono_layers[:-1]:\n", - " assert mono_layer.org_activation == \"elu\"\n", - "assert mono_layers[-1].org_activation == None" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Type-1 architecture" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The function `build_monotonic_type1_model()` can be used to build Neural Network models as shown in the figure below and is referred to in the paper as *Neural architecture type 1*. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "![Screenshot 2022-05-20 at 08.05.56.png](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABfkAAAJKCAYAAACf2U8gAAABR2lDQ1BJQ0MgUHJvZmlsZQAAKJFjYGASSSwoyGFhYGDIzSspCnJ3UoiIjFJgf8bAyiDCwMbAx8CTmFxc4BgQ4ANUwgCjUcG3awyMIPqyLsismKtPT9o6+zSm8rMYPFt7VR9TPQrgSkktTgbSf4A4LbmgqISBgTEFyFYuLykAsTuAbJEioKOA7DkgdjqEvQHEToKwj4DVhAQ5A9k3gGyB5IxEoBmML4BsnSQk8XQkNtReEOBxcfXxUQg1Mje0dCHgXNJBSWpFCYh2zi+oLMpMzyhRcASGUqqCZ16yno6CkYGREQMDKMwhqj8HgcOSUWwfQix/CQODxTcGBuaJCLGkKQwM29sYGCRuIcRU5jEw8LcwMGw7VJBYlAh3AOM3luI0YyMIm8eegYH17v//nzUYGNgnMjD8nfj//+/F////XQw0/zYDw4FKAKT1X/+fuz5FAAAAVmVYSWZNTQAqAAAACAABh2kABAAAAAEAAAAaAAAAAAADkoYABwAAABIAAABEoAIABAAAAAEAAAX5oAMABAAAAAEAAAJKAAAAAEFTQ0lJAAAAU2NyZWVuc2hvdMZzHvIAAAHXaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA1LjQuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjE1Mjk8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpVc2VyQ29tbWVudD5TY3JlZW5zaG90PC9leGlmOlVzZXJDb21tZW50PgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+NTg2PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Culg+vEAAEAASURBVHgB7N0JvG1j/Tjg15AxU2UKSWRIyFhkDomIRAmFjJnJrMhQ5syFBkmZKSK65mQIKaVrnjOT6Wa2/+/3/f/Wbp9zzzl333PPsNe5z/v53Lv3XuO7nrXOGr7rHSZp5JQkAgQIECBAgAABAgQIECBAgAABAgQIECBAoHYCk9YuxzJMgAABAgQIECBAgAABAgQIECBAgAABAgQIFAFBfgcCAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAIHJERAg0DkC9913X9p///07J0NyQmAIBI499tg011xzDcGarILAwAi8/PLLaautthqYhVkKgRoIzDrrrOmkk06qQU5lkQCBENhvv/3S/fffD4PARCPwuc99Lm233XYTzfbaUAIECPQkIMjfk4phBIZJ4IUXXkgXXHBB+sAHPpCmnnrqYcqF1RIYGoExY8akl156KR144IGC/ENDbi0DJPDmm2+Wc/X000+fpptuugFaqsUQ6EyBuDeZY445OjNzckWAQI8C11xzTbrzzjvTzDPP3ON4AwmMJIEnn3wyzTDDDCNpk2wLAQIE+iUgyN8vNjMRGFyBU045JX31q18d3JVYOoFhFjj99NPTNttsM8y5sHoC/RfYe++9S2nJ/i/BnAQ6X2CdddZJo0eP7vyMyiEBAl0EllhiiXTzzTd3GeYHgZEooMDFSNyrtokAgf4IaJO/P2rmIUCAAAECBAgQIECAAAECBAgQIECAAAECHSAgyN8BO0EWCBAgQIAAAQIECBAgQIAAAQIECBAgQIBAfwQE+fujZh4CBAgQIECAAAECBAgQIECAAAECBAgQINABAoL8HbATZIEAAQIECBAgQIAAAQIECBAgQIAAAQIECPRHQJC/P2rmIUCAAAECBAgQIECAAAECBAgQIECAAAECHSAgyN8BO0EWCBAgQIAAAQIECBAgQIAAAQIECBAgQIBAfwQE+fujZh4CBAgQIECAAAECBAgQIECAAAECBAgQINABAoL8HbATZIEAAQIECBAgQIAAAQIECBAgQIAAAQIECPRHQJC/P2rmIUCAAAECBAgQIECAAAECBAgQIECAAAECHSAgyN8BO0EWCBAgQIAAAQIECBAgQIAAAQIECBAgQIBAfwQE+fujZh4CBAgQIECAAAECBAgQIECAAAECBAgQINABAoL8HbATZIEAAQIECBAgQIAAAQIECBAgQIAAAQIECPRHQJC/P2rmIUCAAAECBAgQIECAAAECBAgQIECAAAECHSAgyN8BO0EWCBAgQIAAAQIECBAgQIAAAQIECBAgQIBAfwQE+fujZh4CBAgQIECAAAECBAgQIECAAAECBAgQINABAoL8HbATZIEAAQIECBAgQIAAAQIECBAgQIAAAQIECPRHQJC/P2rmIUCAAAECBAgQIECAAAECBAgQIECAAAECHSAgyN8BO0EWCBAgQIAAAQIECBAgQIAAAQIECBAgQIBAfwQE+fujZh4CBAgQIECAAAECBAgQIECAAAECBAgQINABAoL8HbATZIEAAQIECBAgQIAAAQIECBAgQIAAAQIECPRHQJC/P2rmIUCAAAECBAgQIECAAAECBAgQIECAAAECHSAgyN8BO0EWCBAgQIAAAQIECBAgQIAAAQIECBAgQIBAfwQE+fujZh4CBAgQIECAAAECBAgQIECAAAECBAgQINABAoL8HbATZIEAAQIECBAgQIAAAQIECBAgQIAAAQIECPRHQJC/P2rmIUCAAAECBAgQIECAAAECBAgQIECAAAECHSAgyN8BO0EWCBAgQIAAAQIECBAgQIAAAQIECBAgQIBAfwQE+fujZh4CBAgQIECAAAECBAgQIECAAAECBAgQINABAoL8HbATZIEAAQIECBAgQIAAAQIECBAgQIAAAQIECPRHQJC/P2rmIUCAAAECBAgQIECAAAECBAgQIECAAAECHSAgyN8BO0EWCBAgQIAAAQIECBAgQIAAAQIECBAgQIBAfwQE+fujZh4CBAgQIECAAAECBAgQIECAAAECBAgQINABAoL8HbATZIEAAQIECBAgQIAAAQIECBAgQIAAAQIECPRHQJC/P2rmIUCAAAECBAgQIECAAAECBAgQIECAAAECHSAgyN8BO0EWCBAgQIAAAQIECBAgQIAAAQIECBAgQIBAfwQE+fujZh4CBAgQIECAAAECBAgQIECAAAECBAgQINABAoL8HbATZIEAAQIECBAgQIAAAQIECBAgQIAAAQIECPRHQJC/P2rmIUCAAAECBAgQIECAAAECBAgQIECAAAECHSAgyN8BO0EWCBAgQIAAAQIECBAgQIAAAQIECBAgQIBAfwQE+fujZh4CBAgQIECAAAECBAgQIECAAAECBAgQINABAoL8HbATZIEAAQIECBAgQIAAAQIECBAgQIAAAQIECPRHQJC/P2rmIdCmwOOPP56eeuqpNqc2GQECBAgMtcBf//rX9Pbbbw/1aq2PAAECBAiMU+Chhx5Kzz///DinMwEBAgQIECBAQJDfMUBgEAVmmWWWtNJKK6UddtghPfbYY4O4JosmQIAAgf4IPPvss2mBBRZIP/7xj9Nbb73Vn0WYhwABAgQIDIrAhz70obTkkkum3XbbLT3zzDODsg4LJUCAAAECBEaGgCB/B+zHhx9+OJ166qnpO9/5TvrZz36WosTGfffdVwIOHZA9WZgAgSmnnLLclJ9yyilp7rnnTttvv3169NFHJ2CJZiVAYKgF3nvvvXTppZemgw8+OB100EHpmmuuSW+88UY6+eST04MPPjjU2bG+ARZYc801U+zjb3/72ylezEaw/8033xzgtVgcAQIEBkfANWpwXDtlqdNPP33adttt03HHHZdmm2228lzx5JNPdkr25IMAAQIECBDoIAFB/mHeGeeff35aZJFF0nbbbVcCC1tvvXWad9550yc/+cn0i1/8YphzZ/UDIfCtb32ruZif/OQnab755kuxn+NljkSAQGcLvPbaa2mNNdZI6667bjrwwAPT0UcfnT73uc+leOjecccd07333tvZGyB3bQnEi/ZIL7/8cgn2zzPPPOmEE05Ir7/+elvzm4gAAQLDIeAaNRzqQ7/OnXfeubnSCPbHNSruQaJZUIkAAQIECBAgUAkI8lcSw/AZbbVHAHjMmDFpwQUXTC+88EIpwf+1r32ttA8cN+5S/QWmmGKKdNpppzU35J133ik1Nuaff/60+eabl33eHOkLAQIdJfD9738/XX311SVP8eL1xRdfTOecc056//vfX4Y5T3fU7up3Zj7/+c+n5ZdfPk066f+/LYomEXbZZZf00Y9+NB177LHlOt3vhZuRAAECgyTgGjVIsB222LjnOPLII5u5iqblopZwFAyLgmKPPPJIc5wvBAgQIECAwMQrIMg/jPs+mn949dVXSw5eeeWVEuSPUt5nnXVWWnnllZPg0TDunAFedQTzI1hUBZAajUZ6991305lnnpkWWmihtOmmm6bRo0cP8FotjgCBCRX49a9/3VxENK0WL+2++tWvpqiFFcl5uslT+y+HHHJIabYnNiSav4gUnR3uscce5fx9xBFH2N9FxX8ECHSKgGtUp+yJwc9H9O8188wzd3mWiE7joyDRxz/+8bTVVltpQnDwd4M1ECBAgACBjhYQ5B/G3RMBoypF24qf+cxn0p/+9Kc02WSTpWOOOUbJwQqnwz4jQB8BoCiRHyVpom3u//73v2V/xUubaO7hP//5T3lpEwGi6NQxamlEVdsqcFRtUrWs3/zmN2nhhRdO+++/fzXKJwECwywQ7bJHjasqRZv80a9GNOESTfZEEz6C/JVOZ31WL1IjABL7sTpPx/6Kl+ovvfRS8zz93HPPlc4Mo/PdZZddthlAiS2qztlRg2OfffZJH/nIR1K8DIhlSAQIEBhOAdeo4dSfsHVX16juzxJxjer+LBHXqHiWiOtOBPqr61KVg1hWLOfnP/956UR+s80205RgheOTAAECBAhMZAKTT2Tb21GbG+0ptqYnnniilODfb7/9StvPt956a+voWnyPTinjhUXcgLb+q4LZrcPie0/Dh2tYu/mJ/E1ImmSSScp2ty6jWua1115bBkfJrCgtLBEgMHwC0XH27LPP3iXQH/1q3HDDDenss89OZ5xxxlgP28OX2/bWHB1//+AHP+hyfm733DcY0w3GMuN8Wp1T21MZ91SRz0jxAvd73/teacJn3HOZggABAoMnMBKvUaG11157lXNtnMfj3Nv6b6CHDdY1qDXPPa1joK9R4RbLjFrCUSM87lHi/mXOOeeMURIBAgQIECAwkQgI8g/jjt5ggw1KycAIGlQpbgQPPfTQdMstt6Tf/e531eCxPqMU4gUXXFCqZo41chgHRBNE99xzTykJGU3TVP8isF19rz57Ghbjehre07CY9n3ve1+X5fY0XbvDxmfd7S6zdbqnn346HX/88T0Gn2Ldse9je6LkafTLIBEgMPwC0Ul2lOBvTf/617/SMsssk84777xSmr91XHyPlwB333136WT7s5/9bJpmmmm6TzJsv6NE+q9+9asu583BPPe1nqNbz4exzt7W29vwduefkOkuv/zysv962kGRrzhPL7744unwww9P0Y6/RIAAgeEUaPcaFaXB4z60SlEraYYZZqh+dtTnRRddVPI6IefyduedfPLJx7oeDuc1aFzrjrb3q47iu++06hoV7fdHgYToPF4iQIAAAQIEJi4BQf5h3N8f/OAHU5TY/vKXv1yaEmjNylVXXZXWWmutdM0115Sbz2rcY489lo477rh0+umnlyYjov3FTkp33HFHJ2Wno/ISL3WqG/AqY9XvKG3z3e9+t7TPv9JKK5Umm6ppfBIgMHwC++67b/rLX/6Srrjiii6ZiGYSvvKVr6RLLrkkrbnmmmVcVKWPJnyuv/765rQf+tCHSse9iy66aHPYcH6JAHU0LyaNLRDNIUQnlt1TdZ5eddVVS1M90bReTCsRIEBguAXavUbdd999pQBJ1BqOFEHgbbfddriz3+P6H3jggR6HG5hSXIeqa1LlUf2ee+65S03wTTbZJMXLixNPPLGaxCcBAgQIECAwkQhok3+Yd/QXvvCFEhCKTlm7pwgURYn+SHFTHp2zzjvvvOlHP/qRdqC7Y3X473/+85/p4osvLqVAI6txQx5plllmKTfhDz74YHnYilKvEgECnSMw1VRTlVpVu+yyy1iZilo3xx57bHP4lltu2SXAHyOiX4411lijtJfbnNCXjhSIfRn9LVSpOk+vsMIKpXT/qFGjSt851XifBAgQGG6Bdq9RUats/fXXH+7sWv8ECPz5z39O0axn1CiLVF2j5phjjlL46957703f/OY3S4B/AlZjVgIECBAgQKDGAoL8w7jzIoB/7rnnlmYf7rzzzrThhhuOlZvLLrusDJt22mnTHnvska688sqxpjGg8wWiCaZoKzOqD0eKWhwRUHrooYfSjjvumKJdVYkAgc4TOOCAA0oTWlGDKppQi7/d1hQvY6OjvPvvv790nB7T/O1vfysP2tV0zzzzTLrxxhurnz47UCA6Rz/qqKNKzqrASXTCG7XprrvuuhSBfokAAQKdJtDuNSry3f361WnbIj99C1Q1zapnidlmmy2dcsopKWo+RM1uBYX69jOWAAECBAhMDAKC/MO4lx9//PG06667pmj2YcYZZyztOx9zzDFdchQdKEWaaaaZSjvAEXSQ6iUQfRTEy5xIsR+POOKI9PDDD6fddtstTT311PXaGLklMJEJRA2cn/70p2WroymeCOAvtNBCTYWqRN0bb7yR/vCHP5TmehZbbLF02mmndQmoTDfddM15fOk8gQiUVftyqaWWKi/U48XMKqus0nmZlSMCBAj8n0C716jewOJ+NO5Tq3/R55fUeQLRbGDUJosUtYCjvf2oBbz99tunKaaYovMyLEcECBAgQIDAsAgI8g8L+/9faXSMFJ1gtTYDsfvuu5fOGqtsdQ8wRBuLUr0EDjvssJLhuBGPDrP22muvFDUzJAIEOl8gztMHHXRQGj16dMnsnHPOmfbff/9mxiMgHNMsssgiaYkllmgOj4fuhRdeuPyOdvlbxzUn8qUjBCKodfbZZ5emD37/+9+nW2+9tTSx1BGZkwkCBAj0IdDuNaq3RVx44YUp+oyJl9dRYziC/lLnCRxyyCElU/vss0/ZRzvttFOKppokAgQIECBAgECrgCB/q8YQf48b80innnpqaW8/mm656aab0pNPPlmGR/AoOmGV6isQnTMuuOCCKYJIUaVWad767ks5nzgF4jwdf7/R2d3555+fnnrqqRQdo0eKZl2iRk5PKWpo3XbbbWXUeuut12yqq6dpDRtegWiO54wzzij9Jqy99trDmxlrJ0CAwHgI9PcaVa0iOpCPJiOjSbpoIjQ6Z5c6S+DRRx8tTcZF04A//OEP1QLurN0jNwQIECBAoKMEFAsfxt1RBXwjCHzeeeelX//6183cfPrTn06XX365UhpNkXp+iSq1raV+67kVck1g4hWI83S0YxwB/Y022qgJMc0005SgSOuw5sj8JTrIi05c55prrnTkkUe2jvK9wwTiJYxEgACBOgr09xoV2xqFitZcc810/PHHp+g4XupMgbnnnrvUAu7M3MkVAQIECBAg0EkCgvzDuDc+9rGPlTac4wY7gkHR3mI037P88sunOeaYYxhzZtUECBAgEALRvNZJJ52UopmeaMYgztNxfo4Xsb11chedbEfV+hgfL2+jLw6JAAECBAgMtEB/rlGRhyeeeCKtvPLK5bq25JJLDnS2LI8AAQIECBAgQGAYBAT5hwG9WuX0009fStDE7+iAVdM8lYxPAgQIdIbAcsst18zIPPPMk+LfuNKJJ56Y/vSnP5V23ldYYYVxTW48AQIECBDol0B/rlGxokMPPbS5vm984xuleTkduDZJfCFAgAABAgQI1FJAm/y13G0yTYAAAQKdKHDHHXekfffdN/3sZz9LG264YcnimDFjmi90OzHP8kSAAAECE5fA3nvvnRZbbLGy0XfddVc68MADJy4AW0uAAAECBAgQGIECgvw126nvvvtuM8fvvfde87svBAgQIDC8AtHR9vrrr5+iuZ5opmeNNdYoneXNN998vTbtM7w5tnYCBAgQmFgE4tpUpaiVduaZZ6aq9P5RRx2Vbr755mq0TwIECBAgQIAAgRoKCPLXbKc9/vjjzRzHzXp0miURIECAwPAKvP3226Xkfpyjo4+VUaNGlX833nhj6WtliSWWGN4MWjsBAgQITNQCr732WnP7n3rqqbToooum/fbbrwyLQkSbbrppeuWVV5rT+EKAAAECBAgQIFAvAUH+muyvKCEabWauvvrqXXK84oorpj333LPLMD8IECBAYGgFoqPdG264odeVCvL3SmMEAQIECAyywKWXXppOPfXU5lpOPvnkcs2acsopm8MeeuihtPjii6d///vfzWG+ECBAgAABAgQI1EdAx7s12VezzDJLqVZbk+zKJgECBCYqgYMPPjjFP4kAAQIECHSawDrrrJNeffXVsbIVhYX22WefsYYbQIAAAQIECBAgUD8BJfnrt8/kmAABAgQIECBAgAABAgQIECBAgAABAgQIFAFBfgcCAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqYAgf013nGwTIECAAAECBAgQIECAAAECBAgQIECAAAFBfscAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoqcDkNc23bBMgQIAAAQIECBAgQIAAAQIECBAgMIwC1157bXrzzTeHMQcT76rnnnvutNBCC028ALa8i4AgfxcOPwgQIECAAAECBAgQIECAAAECBAgQaEdg4403Ts8880w7k5pmgAV22mmndMIJJwzwUi2urgKC/HXdc/JNgAABAgQIECBAgAABAgQIECBAYJgFVlpppbTPPvsMcy4mrtWvtdZaE9cG29pxCgjyj5PIBAQIEBg4gVdffTU99dRTaf755x+4hVoSAQIECAyogHP1gHJaGAECBAgQIDDCBWafffa05pprjvCt7KzNm2SSSTorQ3Iz7AKC/MO+C2SAwMgUOOSQQ9Lo0aPLxsXF5+STT04zzjhjrxt7ySWXpHPOOaeMn2yyydLOO++cll566V6nr+uIr3zlK+mPf/xjuvvuu9MnPvGJum6GfBMgMEIEnKt73pHO1T27GEqAAAECBAgQIECAQGcKCPJ35n6RKwK1FzjggAPSWWedlb7xjW+UbVl44YXTfvvt1+N2NRqNtPfee6d77rknRccx119/ffnsceIhGHjbbbcN2guGddZZJ8X2zjnnnEOwJVZBgACBvgWcq3v2ca7u2cVQAgQIECBAgAABAgQ6U2DSzsyWXBEgUHeBKL3f2kZcdAbzxhtv9LhZl156aQnwx8jFFltsWAP8o0aNSieeeGKP+RyIgTvuuGMpyT/99NMPxOIsgwABAhMk4FzdM59zdc8uhhIgQIAAAQIECBAg0JkCgvyduV/kisCIEJhmmmnSpJNOmpZZZpn0zDPPpF/+8pc9btdRRx2Vll122TIu5hmu9Pzzz6dtt912uFZvvQQIEBgWAefqYWG3UgIECBAgQIAAAQIECAyYgCD/gFFaEAECvQnstddeZdTRRx+d3nvvvS6T3Xrrrekf//hH2mabbboMr36888476aSTTkpf+MIX0qc//em01VZblfbsq/EvvvhiOvbYY9MSSyyRHnnkkdL2/3LLLZfWXnvt9M9//rOarHz2tazIQ8z38MMPp+uuuy5961vfavYREDPfeeedadddd01LLrlkyctxxx3XZVtuuOGGtMkmm6Tdd9893XvvvWmLLbZIiy++eIr2rqv07LPPpsMPP7zUVvjPf/5TDS6f0UTQxhtvnD75yU+mzTffPF1++eVdxvtBgACBwRaow7k6DHo7V/d1jo/52r1e9Haufuutt9Khhx6aVlxxxZKHI444IsW0EgECBAgQIECAAAECBIZbQJv8w70HrJ/ARCCw/vrrp/nmmy898MAD6aKLLkrRoWGVohR/lJ7vrfmarbfeOv39739P0aTP66+/njbYYIP0mc98JkVHvausskr6zne+ky6++OL00ksvpW9+85tp6qmnTh/4wAfSZZddlp588skSnK/W1deyFlhggXTYYYeljTbaKC200EJlWbPPPnuZNdYf64q8xjQ//elPS8D/mmuuSb/97W9LQD7GRaA/5r3qqqtKm/5PP/10+t73vpcWXXTR8tJhjz32KHkdM2ZMevPNN6tspfPPP7+8FIiXIMccc0zacMMNy/Sx/FivRIAAgaEQqMO5Os6JvZ2r+zrHt3u9iBcFPZ2rI8C/wgorpOmmm6406XbfffeV60Wc9+N6IxEgQIAAAQIECBAgQGBYBXIHkBIBAh0icNNNNzXyCaFxzjnndEiOJiwb//3vfxu5uZ6ykB//+Mdl25ZaaqnmQu+///5GDso3/v3vfzcuvPDCMv5rX/tac/zpp59ehv35z39uDrv55pvLsI9//OONt99+uwzPnfuWYbnEf3O6XIq+DMsB9TKsnWU99dRTZZ7NNtusuZxc86Ax11xzNVZfffXmsPjy+c9/vkx7xhlnlOEPPfRQ+f2JT3yikZsmKsN+97vflWG5dGz5Hf+tu+66ZVisK1Iu0d+YeeaZG7mmQvkd/5199tmN3E52I78gaA4biV9OO+20YpFrUYzEzbNNI1gg/sbjXJ2DzSNiK0fCubqdc3zsrHauFzFd93N17OvY57n2WYwuKb/ULdew8BvJ6Ytf/GJj3nnnHcmbaNsIjDiBXPu1kQvFjLjtskEEehJ4//vf38i1sHsaZdgQCcw666yN1uf4IVrtRL+aiLXstNNOE70DgP8JaK5nWF+xWDmBiUcgStnnYHa6/fbbU5RQjxTN7OSbgfThD3+4R4iqdGSUhK9SlOKP3/kFQbrrrrvK4Kod/zXWWKOaLC288MLle9WUQrvLai7g/77EOh5//PGyztZxVdv9+eVEGRw1CCJ96lOfSrPMMkv5XuUh+iOoUpXX6nd+aZGee+659KUvfakaVEyiFsBBBx3UHOYLAQIEhkKgrufqds/x1Tm4r+tFOFfTVeb5pW2K2l1LL710NSj97W9/S/kldalB1hzoCwECBAgQIECAQEcJjB49OuVCGYOSp3jWjxqeEoFOEBDk74S9IA8EJgKBCILnt8xlS4888sgUndxGR7zR3E5v6cYbbyyjul+Qo+mfSI8++mj5zKXey2frf9NOO235WfUB0O6yWpcR39udLzoY7p665yHGd5+uuiFobb4nposXBT1tV4yTCBAgMFgCI/1c3dN5td1zdTTZk8vJNOmnmGKKNNNMMzV/+0KAAAECBAgQIDC4AnfffXdp6vbrX/966uvfY489VjIShepybfvS791A5iwKe0SBxVzrPx1//PEDuWjLItBvgbGjUv1elBkJECDQt8C3v/3tUjryyiuvLB3orrrqquWC29tcVUnK3FxPl0lmmGGG8js6qW039XdZ/Z2v3XxVAaIw6Z6qWgLdh/tNgACBwRRwrh5bN87VL7zwQrrjjju6jIwO3quXtV1G+EGAAAECBAgQIDDgAlFbPjcFXGpT5mZuS39J2223XYp/0b9etBJw7rnnptw8bll3bnIwRdwhN487oHnJzUSlJZdcMuUmhAd0uRZGYEIEBPknRM+8BAj0KfDuu+92KfX4wQ9+MOX2Ess80fTBnnvu2Zw/po3UWkpyueWWK8O6B/mjeYTc7l/K7fKX8T3917qcGD8+y3rjjTeai4zmgaLkZwRyXnnllebwyEOk6Iixt9Q9Dz1NV72ouO6661Ju1785SXQmHE0SSQQIEBhsgZFwrh6fc3x3z/E5V//85z9vzh5uURut6qS9OcIXAgQIECBAgACBQROYaqqpSoA9VjD//POnFVdcsfxbb7310tFHH11iDrlvvrL+qCF/9dVXl9L/A5mhaF1goF8cDGT+LGviFBDknzj3u60mMCQC0ZxOBE+i9GOVdt999zTZZJOl3CFYuRBXwx955JHytbX9+gMOOCBNOeWUpVmfKgAepSgjIH7yySdXs6YnnniifH/55Zebw6qLerXudpYVLyEib1Gl7/e//33aZ599Uu5YMW2yySYpmv35/ve/X5YfTeuceOKJZRui/epI7eQhpqvykzvcjZ9piSWWSGuuuWZpIzBeGETAaIMNNki77LJL2nnnncs0/iNAgMBgCoyEc3U75/gw7O+5er/99iu74Cc/+Un68pe/XM7V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Xjbyhb4Y5c5SxsrcTjvtVMbli3GXcRtssEEZnh8Wugyf0B/PP/98We76668/oYuaKOfPN1jFL/doP1Fuv42ur0B+ACjHbi6hV9+NGOScd9K5Or8MLvvr73//+yBv9chc/Be/+MVGDr6NzI2zVQRGqEAOKDVyQLyWW7fffvv1eI3NbW43ckCujMsvbxv33HNPLbavt+156KGHGrkpkcakk07ayEHE5rbEfXE8D377299uDhuILyP5uSW/HGnkQO1AMFlGPwVyTZvG1772tXHO/d577zXyy61Grq3SyEHwxtxzz12O99wm+ljz5lo9jWWWWaaRC/I1ci2XRi7kV6bNhfrKtPllX2Pdddctw/KLtMb111/fyEH+xqabbtqYdtppy/CnnnqqEevMgfvyO7e7XtZbrex3v/tdY6655mrE30d+EdfIQfbGggsu2MgvABq///3vyzyf/exnx2t91bI333zzRn5RUP6+c22aRq5N2ohj9ZprrimT5Bd+jVyTp6wjv8RofP7zn2/kAH/5nV9mVovp8zPOHxEDkQhUAkry9+vViJkIEBgugdae0LvnIV9Iy6ALL7ywy6jBKMkfKxis5XbJvB8ECBCooYBzdQ13miwTIECgAwSmmGKKHnMRzfb8+Mc/LiWAo7mP7bffvsfpOm1gb9szzzzzpJVWWinlAGRp/rPK92A9XwzWcqt8+yTQjsDll19eSrjn4Hxpdmu77bYrs/XUNNXRRx9d+tWLUvZRKj9q8Udnqddee22K2vRR62X22Wcv8+eXAaWW/TTTTJN+9atfpajhX6VJJpkk7bzzzikH79PDDz/crAkQ4y+99NK0//77pw9+8IPppZdeSjfffHNaYYUVSlPAUaI+ln/XXXeVRbW7vpg4ah5FM0TRZGR09FrV2nnttddK7YAo5f/zn/88hUOkjTbaKF1xxRUpv1goNQii6a7unQmXCf1HYBwCgvzjADKaAIH6CFQd4FYX+yrncWHvnsZVfa6a/rbbbitNBEWTD/ESIW5MektPPvlkqYZXVQWMGwyJAAECBLoKjM+5Oua8884706677loe5qLKc2tV52rJ43Ou/slPftKsth3VtKO6tESAAAECnS+QS62W5joipxHou++++5qZzqVj05e//OUSyMslYtMf/vCH5rgbbrghbbLJJqVJj+hkMZrMiaY4DjnkkOY08SUCgNEk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6y1fX/USVYBLYz+/5B5O1cGNU9m9R3ebM2eO772jIS304F6NZa1heTRMhLajZwZoXkMVff3rX/cXCFSfCRMm+DE535z2pt+OxtJUDx9d0FDPUe2X8ieSIbTMveA9AgggkEeByrZ65syZPoCvNlEXOWfPmu2HKTv55JP9XUwKkKuHvNpEBV/iX/Mfefhh3z5edNFFUbvu2jBNKkftWkc3BIHaat35NH78+FqD/GoD27u2Vj0gVYaOHdquHto7ZMgQfxFipLv4qosRkydP9nddad2RRx7pLyor0H/IwYfYFhfMUPuuequ9D/uosnT3lyZdtNCzWHRB4zvf+Y5fpl/HHHOMTXltinsw4m12jHuoou5uUDuvC7fah+SF5zhEMjczCCCAQNMWyAzLf+q+B8xyF5Jbt+vgjin9Pc7yT5faq6+8bFubt/btbJfOHW2dG76nsxs//hM3RryONepgE11SNjdc2yZXxkx7Y9rbttOoXWz0LqPSkHXurYu/uiCt83oFtbt07Wa7uCHo1q13x63KY5PPFMXrK4sOtU24XvytrH//fj6v0unhuxruRsewZs2jsem7devhvhvsbFPffMfv057jdvVFKoCuXv6fuecKhG0NdA+g381tf/aHi23JJ5/ayBFDfdq1az6zOe/Pts3uxrhxY8e47akq6QcUleGH53GvobOQgvK600BD1+lKwooVy22BO06OcRcmdJxWupDPb8j90jKt0wX6re5CiC7qf/LpirDa+vYf4B40PN5u/OPN9ujjT7oH/55g3d1nkHVyF0JkwYQAAgggUDoCBPlL57OgJgg0WoFw+qfhH/ZwY/ErQKJguE4yTznlFBvrbg3VvCY9JFGBFN1ymgycuOXjxu3uhtbp6wM54WRZ6TXcg8rUib+2o9foS0Cy40zGabJypaaVKzf5wLp6bYae+PoioYsMCgadddZZPoivQL4C+v3797dvfOMb/mHBulihwJOC+0PdBQH1Glrpegd9/vOf92Up6KQgmXr26Dx4v/328w9/DPvVo0cPO/644/140gsXLfR3BOiBVlruH57lAmJMCCCAQKEEQlv9yiuv+OHI9BB0BbM3b9lsxx13nI0ePdq3waqP2t1//vOfvg2M109D/Ki3onrQawplKqiuIc788D9uudrB0BYqXQiraD7btHbtGh+w2cc9GFBttC6I6jihoc90h9cF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Sg77pLxhn6I1sdzKwIQAAgggUCIC9OQvkQ+CaiCAAAIIIIAAAggggAACCCDQ+AQUMI76hEf75u4aq1xQOecXx+fTb3eN8kd5VU54X7XcyoKqpAl5k7lDBSpXpMp0C9Ju3wrb0vJk7uhN8rebCVtMS5NcqgTuTays5D5UrgrvK9OkUlbOpZWbWhvK9UtSv6LFoUy9q27bWcpNlV6pkpamcp9Sify2+IUAAgggUHwBevIX/zOgBggggAACCCCAAAIIIIAAAggggAACCCCAAAII5CRAkD8nNjIhgAACCCCAAAIIIIAAAggggAACCCCAAAIIIFB8AYL8xf8MqAECCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAjkJEOTPiY1MCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggUX4Agf/E/A2qAAAIIIIAAAggggAACCCCAAAIIIIAAAggggEBOAgT5c2IjEwIIIIAAAggggAACCCCAAAIIIIAAAggggAACxRcgyF/8z4AaIIAAAggggAACCCCAAAIIIIAAAggggAACCCCQkwBB/pzYyIQAAggggAACCCCAAAIIIIAAAggggAACCCCAQPEFCPIX/zOgBggggAACCCCAAAIIIIAAAggggAACCCCAAAII5CRAkD8nNjIhgAACCCCAAAIIIIAAAggggAACCCCAAAIIIFB8AYL8xf8MqAECCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAjkJEOTPiY1MCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggUX4Agf/E/A2qAAAIIIIAAAggggAACCCCAAAIIIIAAAggggEBOAgT5c2IjEwIIIIAAAggggAACCCCAAAIIIIAAAggggAACxRcgyF/8z4AaIIAAAggggAACCCCAAAIIIIAAAggggAACCCCQkwBB/pzYyIQAAggggAACCCCAAAIIIIAAAggggAACCCCAQPEFCPIX/zOgBggggAACCCCAAAIIIIAAAggggAACCCCAAAII5CRAkD8nNjIhgAACCCCAAAIIIIAAAggggAACCCCAAAIIIFB8AYL8xf8MqAECCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAjkJEOTPiY1MCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggUX4Agf/E/A2qAAAIIIIAAAggggAACCCCAAAIIIIAAAggggEBOAgT5c2IjEwIIIIAAAggggAACCCCAAAIIIIAAAggggAACxRcgyF/8z4AaIIAAAggggAACCCCAAAIIIIAAAggggAACCCCQkwBB/pzYyIQAAggggAACCCCAAAIIIIAAAggggAACCCCAQPEFCPIX/zOgBggggAACCCCAAAIIIIAAAggggAACCCCAAAII5CRAkD8nNjIhgAACCCCAAAIIIIAAAggggAACCCCAAAIIIFB8AYL8xf8MqAECCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAjkJEOTPiY1MCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggUX4Agf/E/A2qAAAIIIIAAAggggAACCCCAAAIIIIAAAggggEBOAgT5c2IjEwIIIIAAAggggAACCCCAAAIIIIAAAggggAACxRcgyF/8z4AaIIAAAggggAACCCCAAAIIIIAAAggggAACCCCQkwBB/pzYyIQAAggggAACCCCAAAIIIIAAAggggAACCCCAQPEFCPIX/zOgBggggAACCCCAAAIIIIAAAggggAACCCCAAAII5CRAkD8nNjIhgAACCCCAAAIIIIAAAggggAACCCCAAAIIIFB8AYL8xf8MqAECCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAjkJEOTPiY1MCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggUX4Agf/E/A2qAAAIIIIAAAggggAACCCCAAAIIIIAAAggggEBOAgT5c2IjEwIIIIAAAggggAACCCCAAAIIIIAAAggggAACxRcgyF/8z4AaIIAAAggggAACCCCAAAIIIIAAAggggAACCCCQkwBB/pzYyIQAAggggAACCCCAAAIIIIAAAggggAACCCCAQPEFCPIX/zOgBggggAACCCCAAAIIIIAAAggggAACCCCAAAII5CRAkD8nNjIhgAACCCCAAAIIIIAAAggggAACCCCAAAIIIFB8AYL8xf8MqAECCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAjkJEOTPiY1MCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggUX4Agf/E/A2qAAAIIIIAAAggggAACCCCAAAIIIIAAAggggEBOAgT5c2IjEwIIIIAAAggggAACCCCAAAIIIIAAAggggAACxRcgyF/8z4AaIIAAAggggAACCCCAAAIIIIAAAggggAACCCCQkwBB/pzYyIQAAggggAACCCCAAAIIIIAAAggggAACCCCAQPEFCPIX/zOgBggggAACCCCAAAIIIIAAAggggAACCCCAAAII5CRAkD8nNjIhgAACCCCAAAIIIIAAAggggAACCCCAAAIIIFB8AYL8xf8MqAECCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAjkJEOTPiY1MCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggUX4Agf/E/A2qAAAIIIIAAAggggAACCCCAAAIIIIAAAggggEBOAgT5c2IjEwIIIIAAAggggAACCCCAAAIIIIAAAggggAACxRcgyF/8z4AaIIAAAggggAACCCCAAAIIIIAAAggggAACCCCQkwBB/pzYyIQAAggggAACEtiyZYs99NBDtmjRIkAQQAABBBAoOQGOUyX3kVAhBBBAAAEEEGgAAYL8DYBKkQgggAACCDR2gbVr19qNN95oO+ywgx1++OH23HPPNfZdZv8QQAABBMpIgONUGX1YVBUBBBBAAAEEtlmAIP82E+a3gH//+9926qmn5rdQSkMAAQQQKBmBjRs32v7772/vvvtuydSpPhX55JNP7JJLLrFBgwbZGWecYXPmzKlPdtIigAACCJSwQGP4LsJxqoT/wKgaAggggAACCDSYQMsGK5mC6y0wf/58+973vmcTJkyod14yIIAAAgiUh8BPf/pT3+t99erV5VHhylouXrzYB/dvu+02W79+fVnVncoigAACCNQuUO7fRThO1f4ZkwIBBBBAAAEEGq8APflL5LPdunWrfetb37Lly5eXSI2oxrYKlFsAb1v3l/wIIFC7wFNPPWXXXHNN7QlLMIUC+926dbO77rrLzjnnnBKsIVVCAAEEEMhVoDF8F+E4leunTz4EEEAAAQQQaAwCBPlL4FPcvHmznXbaafb000+XQG2oQr4ELrvsMjv//PNNvYqYEEAAgVdeecVOOOEESyQSZYkxePBgu+KKK+yII46wyy+/vCz3IVulp06dahpCiQkBBBBoqgKN5btIYzxOzZ07l+8STfUfJvuNAAIIIIBAPQUI8tcTLN/J1dtbAZNbbrklWfSqVavszTff9D+zZ89OLmemvATOPvtsu/rqq61Pnz6med0CzYQAAk1T4H//+58deOCBpnGCwzRr1qxkW19ud/60a9fOmjVr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CCCAAAIIIFAmAjx4t0w+KKqJAAIIIIAAAggggAACCCCAAAIIIIAAAggggECmAEH+TBHeI4AAAggggAACCCCAAAIIIIAAAggggAACCCBQJgIE+cvkg6KaCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAghkChDkzxThPQIIIIAAAggggAACCCCAAAIIIIAAAggggAACZSJAkL9MPiiqiQACCCCAAAIIIIAAAggggAACCCCAAAIIIIBApgBB/kwR3iOAAAIIIIAAAggggAACCCCAAAIIIIAAAgggUCYCBPnL5IOimggggAACCCCAAAIIIIAAAggggAACCCCAAAIIZAoQ5M8U4T0CCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAmUiQJC/TD4oqokAAggggAACCCCAAAIIIIAAAggggAACCCCAQKYAQf5MEd4jgAACCCCAAAIIIIAAAggggAACCCCAAAIIIFAmAgT5y+SDopoIIIAAAggggAACCCCAAAIIIIAAAggggAACCGQKEOTPFOE9AggggAACCCCAAAIIIIAAAggggAACCCCAAAJlIkCQv0w+KKqJAAIIIIAAAggggAACCCCAAAIIIIAAAggggECmAEH+TBHeI4AAAggggAACCCCAAAIIIIAAAggggAACCCBQJgIE+cvkg6KaCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAghkChDkzxThPQIIIIAAAggggAACCCCAAAIIIIAAAggggAACZSJAkL9MPiiqiQACCCCAAAIIIIAAAggggAACCCCAAAIIIIBApgBB/kwR3iOAAAIIIIAAAggggAACCCCAAAIIIIAAAgggUCYCBK2rQUUAACl+SURBVPnL5IOimggggAACCCCAAAIIIIAAAggggAACCCCAAAIIZAoQ5M8U4T0CCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAmUiQJC/TD4oqokAAggggAACCCCAAAIIIIAAAggggAACCCCAQKYAQf5MEd4jgAACCCCAAAIIIIAAAggggAACCCCAAAIIIFAmAgT5y+SDopoIIIAAAggggAACCCCAAAIIIIAAAggggAACCGQKEOTPFOE9AggggAACCCCAAAIIIIAAAggggAACCCCAAAJlIkCQv0w+KKqJAAIIIIAAAggggAACCCCAAAIIIIAAAggggECmAEH+TBHeI4AAAggggAACCCCAAAIIIIAAAggggAACCCBQJgIE+cvkg6KaCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAghkChDkzxThPQIIIIAAAggggAACCCCAAAIIIIAAAggggAACZSJAkL9MPiiqiQACCCCAAAIIIIAAAggggAACCCCAAAIIIIBApgBB/kwR3iOAAAIIIIAAAggggAACCCCAAAIIIIAAAgggUCYCBPnL5IOimggggAACCCCAAAIIIIAAAggggAACCCCAAAIIZAoQ5M8U4T0CCCCAAAIIFFXg448/tptuusnuvvtu27x5c1Hr0hg3vnr1anv55Zft1VdftcWLFzfGXWSfqhHYtGmTPfnkk/a73/2umhSNd3EikbCXXnrJrrzyym3aSdqnbeIjcyMWeO2112zt2rWNeA/ZNQQQQAABBEpboJk74U2UdhWpHQIIIIAAAgiUksBZZ51l77zzTt6qdMstt1hFRYUv77PPPrP+/fvbqlWr/Pvzzz/frrrqqrxtq6kWtGXLFrvxxhvt97//vc2dO9fip39jxoyxSy65xL70pS8VjKemvyHVceedd661LieeeKItWrSoxnQ333yzDR8+vMY0jX3le++9Z08//bQ98cQT9thjj/l/W3379rUFCxY09l23devW2VNPPWUPPfSQ3XfffTZ//nxr2bKl6WJHLhPtUy5q5GnsAmpfdAyZNGmSTZ061caOHdvYd5n9QwABBBBAoCQFWpZkragUAggggAACCJSswMSJE32Q+M4777RPPvlkm+u5YsWKZBkKRIYAvxbqPdO2CcyZM8e+8pWv2Ouvv561IC0/9thj7c9//rOdfPLJWdPke6EuKOhz/9///pf2eWs7Rx99tE2ZMsW6du1a42Y/97nP+YDSPffck3ZHQrNmzewLX/iC7bXXXtatW7cay2jsKy+77DIffGvs+1nd/u2xxx55vSBJ+1SdNMubosBzzz1nv/jFL+zZZ59tirvPPiOAAAIIIFByAvTkL7mPhAohgAACCCBQHgKffvqpDRs2zAdrQ4133XVX+/e//209evQIi/yrepJrmJiVK1fa5MmTTT2sp0+f7te98sorpmCcJvU6HjlypCm9pgsvvNCuuOIKP8+v+gvogomC3e+++64PeJ9wwgk2dOhQ34v73nvvtXnz5iULVXBcw5mMHz8+uayhZ2bOnGkHHnigLVy4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7k5p45JLz5493WuvveZH9if3V1pft26dW7FihdPI/82bN8fFdBNaE8n37dvX/9tuu+3i91hBAAEEEEAAAQTaEyDI354Q7yOAAAIIIIBApxR488033bx589z69ev9P6Xm6dOnjx+1r5H7GvE/btw4p0l3WRBAAAEEECgqsHr1ap/2benSpa5r165uxIgRfrtHjx65qv7zzz9zpfRZuHChGzVqVK46KYQAAggggAACCEiAID/9AAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQACBFhXgufUW/eBoNgIIIIAAAggggAACCCCAAAIIIIAAAggggAACBPnpAwgggAACCCCAAAIIIIAAAggggAACCCCAAAIItKgAQf4W/eBoNgIIIIAAAggggAACCCCAAAIIIIAAAggggAACBPnpAwgggAACCCCAAAIIIIAAAggggAACCCCAAAIItKgAQf4W/eBoNgIIIIAAAggggAACCCCAAAIIIIAAAggggAACBPnpAwgggAACCCCAAAIIIIAAAggggAACCCCAAAIItKgAQf4W/eBoNgIIIIAAAggggAACCCCAAAIIIIAAAggggAACBPnpAwgggAACCCCAAAIIIIAAAggggAACCCCAAAIItKgAQf4W/eBoNgIIIIAAAggggAACCCCAAAIIIIAAAggggAACBPnpAwgggAACCCCAAAIIIIAAAggggAACCCCAAAIItKgAQf4W/eBoNgIIIIAAAggggAACCCCAAAIIIIAAAggggAACBPnpAwgggAACCCCAAAIIIIAAAggggAACCCCAAAIItKgAQf4W/eBoNgIIIIAAAggggAACCCCAAAIIIIAAAggggAACBPnpAwgggAACCCCAAAIIIIAAAggggAACCCCAAAIItKgAQf4W/eBoNgIIIIAAAggggAACCCCAAAIIIIAAAggggAACBPnpAwgggAACCCCAAAIIIIAAAggggAACCCCAAAIItKgAQf4W/eBoNgIIIIAAAggggAACCCCAAAIIIIAAAggggAACBPnpAwgggAACCCCAAAIIIIAAAggggAACCCCAAAIItKgAQf4W/eBoNgIIIIAAAggggAACCCCAAAIIIIAAAggggAACBPnpAwgggAACCCCAAAIIIIAAAggggAACCCCAAAIItKgAQf4W/eBoNgIIIIAAAggggAACCCCAAAIIIIAAAggggAACBPnpAwgggAACCCCAAAIIIIAAAggggAACCCCAAAIItKgAQf4W/eBoNgIIIIAAAggggAACCCCAAAIIIIAAAggggAACBPnpAwgggAACCCCAAAIIIIAAAggggAACCCCAAAIItKgAQf4W/eBoNgIIIIAAAggggAACCCCAAAIIIIAAAggggAACBPnpAwgggAACCCCAAAIIIIAAAggggAACCCCAAAIItKgAQf4W/eBoNgIIIIAAAggggAACCCCAAAIIIIAAAggggAACBPnpAwgggAACCCCAAAIIIIAAAggggAACCCCAAAIItKgAQf4W/eBoNgIIIIAAAggggAACCCCAAAIIIIAAAggggAACBPnpAwgggAACCCCAAAIIIIAAAggggAACCCCAAAIItKgAQf4W/eBoNgIIIIAAAggggAACCCCAAAIIIIAAAggggAACBPnpAwgggAACCCCAAAIIIIAAAggggAACCCCAAAIItKgAQf4W/eBoNgIIIIAAAggggAACCCCAAAIIIIAAAggggAACBPnpAwgggAACCCCAAAIIIIAAAggggAACCCCAAAIItKgAQf4W/eBoNgIIIIAAAggggAACCCCAAAIIIIAAAggggAAC/wuA/Gy28hTu6QAAAABJRU5ErkJggg==)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def build_monotonic_type1_model(\n", - " *,\n", - " col_names: List[str],\n", - " units: int,\n", - " final_units: int,\n", - " activation: Union[str, Callable[[TensorLike], TensorLike]],\n", - " n_layers: int,\n", - " final_activation: Optional[Union[str, Callable[[TensorLike], TensorLike]]] = None,\n", - " monotonicity_indicator: Union[int, Dict[str, TensorLike]] = 1,\n", - " is_convex: bool = False,\n", - " is_concave: bool = False,\n", - " dropout: Optional[float] = None,\n", - ") -> Model:\n", - " # input\n", - " x = [Input(shape=1, name=name) for name in sorted(col_names)]\n", - " y = tf.keras.layers.Concatenate(name=\"inputs\")(x)\n", - " if isinstance(monotonicity_indicator, dict):\n", - " monotonicity_indicator = [\n", - " monotonicity_indicator[name] for name in sorted(col_names)\n", - " ]\n", - "\n", - " y = create_mono_block(\n", - " units=[units] * (n_layers - 1) + [final_units],\n", - " activation=activation,\n", - " monotonicity_indicator=monotonicity_indicator,\n", - " is_convex=is_convex,\n", - " is_concave=is_concave,\n", - " dropout=dropout,\n", - " )(y)\n", - "\n", - " if final_activation is not None:\n", - " final_activation = tf.keras.activations.get(final_activation)\n", - " y = final_activation(y)\n", - "\n", - " model = Model(inputs=x, outputs=y)\n", - " return model" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Model: \"model_2\"\n", - "__________________________________________________________________________________________________\n", - " Layer (type) Output Shape Param # Connected to \n", - "==================================================================================================\n", - " a (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " b (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " c (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " d (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " inputs (Concatenate) (None, 4) 0 ['a[0][0]', \n", - " 'b[0][0]', \n", - " 'c[0][0]', \n", - " 'd[0][0]'] \n", - " \n", - " mono_dense_0_convex (MonoDense (None, 64) 320 ['inputs[0][0]'] \n", - " ) \n", - " \n", - " dropout_3 (Dropout) (None, 64) 0 ['mono_dense_0_convex[0][0]'] \n", - " \n", - " mono_dense_1_increasing_convex (None, 64) 4160 ['dropout_3[0][0]'] \n", - " (MonoDense) \n", - " \n", - " dropout_4 (Dropout) (None, 64) 0 ['mono_dense_1_increasing_convex[\n", - " 0][0]'] \n", - " \n", - " mono_dense_2_increasing_convex (None, 64) 4160 ['dropout_4[0][0]'] \n", - " (MonoDense) \n", - " \n", - " dropout_5 (Dropout) (None, 64) 0 ['mono_dense_2_increasing_convex[\n", - " 0][0]'] \n", - " \n", - " mono_dense_3_increasing_convex (None, 10) 650 ['dropout_5[0][0]'] \n", - " (MonoDense) \n", - " \n", - " tf.nn.softmax (TFOpLambda) (None, 10) 0 ['mono_dense_3_increasing_convex[\n", - " 0][0]'] \n", - " \n", - "==================================================================================================\n", - "Total params: 9,290\n", - "Trainable params: 9,290\n", - "Non-trainable params: 0\n", - "__________________________________________________________________________________________________\n" - ] - } - ], - "source": [ - "n_layers = 4\n", - "\n", - "model = build_monotonic_type1_model(\n", - " col_names=list(\"abcd\"),\n", - " units=64,\n", - " final_units=10,\n", - " activation=\"elu\",\n", - " n_layers=n_layers,\n", - " final_activation=\"softmax\",\n", - " monotonicity_indicator=dict(a=1, b=0, c=-1, d=0),\n", - " is_convex=True,\n", - " dropout=0.1,\n", - ")\n", - "model.summary()\n", - "\n", - "mono_layers = [layer for layer in model.layers if isinstance(layer, MonoDense)]\n", - "assert len(mono_layers) == n_layers\n", - "\n", - "# check monotonicity indicator\n", - "np.testing.assert_array_equal(\n", - " mono_layers[0].monotonicity_indicator, np.array([1, 0, -1, 0]).reshape((-1, 1))\n", - ")\n", - "for i in range(1, n_layers):\n", - " assert mono_layers[i].monotonicity_indicator == 1\n", - "\n", - "# check convexity and concavity\n", - "for i in range(n_layers):\n", - " assert mono_layers[i].is_convex\n", - " assert not mono_layers[i].is_concave" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Type-2 architecture" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The function `build_monotonic_type2_model()` can be used to build Neural Network models as shown in the figure below and is referred to in the paper as *Neural architecture type 2*. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "![Screenshot 2022-05-20 at 08.06.46.png](data:image/png;base64,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lSuXy5v++OOPuwlalapmyJAhbrR7CoclWv3rr7+6z146GwXmlQLHC+wn2jmTPhw6dMjlvddNBgoCCCCAAAIIIIAAAggggAACCCCAAAIZIUAkKiOUOQcCUSKgPPFKMaNUM3PmzHG54evWrevyxKe2C2vXrnW7epOf/v3336YJYPPly5faKsK+n244UBBAAAEEEEAAAQQQQAABBBBAAAEEEMhIAYLxGanNuRCIcIHGjRu7Fmo0fJMmTY7b2sOHDwe3a+S7V04//XS3qO16FS5cOKIC8V47eUcAAQQQQAABBBBAAAEEEEAAAQQQQCAjBcgZn5HanAsBHwkop7xXtm3b5i26XPH6oBHxu3fvNo2spyCAAAIIIIAAAggggAACCCCAAAIIIBDrAgTjY/0bQP8ROEmB9evX2/3332+vvfZa8Mgbb7zRxo4d6z63bNnSrr/+etPErStWrLDnn38+uB8LCCCAAAIIIIAAAggggAACCCCAAAIIxKoAaWpi9crTbwTSKFCiRAl78cUX3Su5KpQr/r333rNNmzZZwYIFXd755PZjHQIIIIAAAggggAACCCCAAAIIIIAAArEkQDA+lq42fUUgAwWKFi2agWfjVAgggAACCCCAAAIIIIAAAggggAACCES2AMH4yL4+tA4BBBBAAIEME9iwYYN17tw5w853Kid6++23LT4+/lSq4FgEEEAAAQQQQAABBBBAAAEEMlSAYHyGcnMyBBBAIHYFpk+fbgcOHLBLLrkkdhEivOe7du2y0aNH2wUXXGCFChWKyNZq3opvv/3WBg8eHJHto1EIIIAAAggggAACCCCAAAIIpCRAMD4lGdYjgAACYRR46aWX7OWXX7Z169bZNddcY0OGDEn2bLNmzbKLL77YsmXLZq1bt7Y+ffpYsWLFkt030ldq4l8Fe5cuXRrpTY359mni5fPPPz8iHSZMmGCXX355RLaNRiGAAAIIIIAAAggggAACCCBwPIGsx9vINgQQQACB8Ah06dLFHn74Ydu9e7e9++67tmbNmmRP1Lt3b7dPtWrVbNiwYRkWiD906JA9+uijybYprSvHjBljn332WVoP5zgEEEAAAQQQQAABBBBAAAEEEEAgqgUIxkf15aPxCCAQzQIlSpSwggULutQt/fr1O6YrGkE+Z84ct7548eLHbA/nCo3cnz9/frqe4owzzrAKFSqka51U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2tRat26dia3g1AgggAACCCCAAAIIIIAAAggggAACCCCAQHQIEIyPjusUUa3ctWuXm7T1uuuui6h20RgEEEAAAQQQQAABBBBAAAEEEEAAAQQQQCBSBQjGR+qVieB2KUf8/v377fLLL4/gVtI0BJIXWL16tWnyYQoCsSIwfvx4+/7772Olu/QTAQQQQAABBBBAAAEEEEAAgYgVIGd8xF6ayG3Yl19+aWeeeaYVL148ohqpyWR//vnnY9qUP39+S0hIsDVr1gS3NWnSxGrUqBH8zELsCOTOndvOOussu/nmm+3++++3PHnyRF3nv/vuO3vyySftq6++cm2Pj4+3okWL2r59+6x06dLWokUL69atm2XPnj3q+kaD01/gnHPOsbJly1qOHDls+vTpVq9evfQ/CTUigAACCCCAAAIIIIAAAggggMAJBRgZf0IidkgqMGfOHDv//POTro6Iz0OGDLHOnTsHXw899JApUJk1a1Z7+OGH3XoFMg8ePBgR7aURGS+goPW//vUve/zxx61IkSLWt2/fqBspr2DqqFGjbM+ePe7G2MaNG23hwoWmP5va9uijj9pll11mSilFQaBUqVJuom19X/S7++KLL7aZM2cCgwACCCCAAAIIIIAAAggggAACGSxAMD6Dwf1wul9//TUiR5VfeOGFbtRnyZIlg8xKR6JAVM2aNV1qnaefftreffddq1WrVnAfFmJPoFevXq7TCk7+97//tTJlykRdUD5fvnzuiY9s2bIFL2ChQoXsueeec32ZMmWKtWrVKriNhdgWGD58uBsZLwU93dSoUSN3U8p7uiK2deg9AggggAACCCCAAAIIIIAAAhkjQDA+Y5x9c5atW7fa9u3brXz58hHZpwIFClifPn0StU2j4++44w678sor7f/+7/8SbeNDbApodLyC8HFxcXbo0CH766+/ojYon9wVvPfee61KlSru5tTmzZuDuyiN0wMPPGCafPnll192T4gcOXLEpk2bZrfeeqvt2LHDBg0aZLfccotNnDgxeJwWFNy/7bbb3PEPPvhgom0apX/77bdbx44dXV2JNvIhIgRKlChh+l7oO+89GfTNN9+4EfMKzH/xxRcR0U4agQACCCCAAAIIIIAAAggggICfBcgZ7+erG4a+bdq0ydWqYGaklmuuucaNDPYmLNTIT40YXrJkSaQ2mXZlgoCC0gMGDAgG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gAACCCCAAAIIIIAAAgjEsgAj42P56tN3BBDwlcCSJUvs0ksvtS1btpiWFZzXZK3//ve/U+znoEGDXGB9586dLtA+dOhQl3dek7NefvnltmLFCnv++edt7Nix1qBBA6tQoYJ98sknpslgQ4tGxbdr187GjRtnF154YegmlhFAAAEEEEAAAQQQQAABBBBAAAEEAgIE4/kaxJSAAog7duxwfa5Zs6Yll7IjpkDorK8E9J3+8ssvXZ8OHDhgDz30kPXr188Fzr///vtk+zplyhQrU6aMC8RrB/2ZUJqaJ5980ubPn28//vijyzvfrFkzd3zx4sXdBLGhlf3yyy+miWRffPFFAvGhMCwjgAACCCCAAAIIIIAAAggggAACIQKkqQnBYNH/Al26dLGzzz7bvQ4ePOj/DtPDmBVQypi+ffta9erV7YcffnBpaJLD0Aj6NWvW2L59+4KbFZxXUUB/8+bNbnnhwoXu3fsR+uencOHCLpivAP5ff/3l7cI7AggggAACCCCAAAIIIIAAAggggECIACPjQzBY9L/AgAEDrGfPnq6jcXF8/f1/xWO7h8oHrxzyKlpOrlSqVMmltFHAXmloVHSM/nzUq1fP/vjjD7dOE7jqs4oC9M8995z16dPHfT7ttNPsrbfesn/9618u/7zyyWfLls1t4wcCCCAQ6QK6Ibl3795IbybtixGBkiVLWnx8fIz0lm4icOoCy5cvd09xnnpN1IDAqQuUK1fONCiKggACCBxPgGjk8XTY5juBsmXL+q5PdAgBBZG89EuexqZNm+zVV191Od8rV67sJl3Vtt27d7tdvPfOnTvb+PHjTbniFYw/cuSITZw40Tp06GB58+a1K664wgoWLOjyxickJFixYsVMeeaHDRuWqB5N6vrCCy9Y165d7f7777f+/fu77fxAAAEEIl2gffv29u2330Z6M2lfjAhoXhb9v5eCAAKpE6hdu7Zt27YtdTuzFwJhFvjtt9+sYsWKYT4L1SOAQLQLEIyP9itI+xFAIKYFZs2aZd27d3cjgubMmePyv2tEnUa0FylSxO68804XSM+aNatt377d7rvvPuelkexVq1a1q666ygYPHmxK4bRq1SqXZkaj5QcOHOj2K1SokI0cOdKuvfZae+CBB6xUqVL26KOPur9kKie9csqrPP7443bZZZe5nPMvvfSSuwmg0fPVqlVz2/mB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fCE1auvNN9805TekIIAAAggggEBkCiigPmvWLLvhhhsSNVCTt44YMcKt++uvv1wA/vLLL3eBnv/85z9uItE//vgj0TF8SB+BnTt3unzxCr57AZwrr7zSFi5caO+99x6B+PRhphYEok7gRL+vNTJcc+co4KsXE4VmziVesmSJjRw50k3eqt/het155522YsUK69u3L4H4zLksnBUBBBBAIJ0EoiYYr1x5d9xxh+XLl880OkCToqVUHnjgAbdPmTJl7Mknn0xpt4hfv2bNGuvYsaO98cYbEd9WGogAAggggEAsCujxeU0MrlHv7777rr3zzjuWJ0+eIIVGzKs89thj7u8wSo2iv8eo6BH8WBzt6Dof5h+PPPJIcPJc3QD56aefXGCnatWqYT4z1SOAQKQKpPb3td+fGorU6xPaLt08VdFI+A4dOtjy5cvt5ZdftpIlS4buxjICCCCAAAJRKRA1wfiEhAQbPHiwNWjQwJT7M6WZ0zWB2quvvur26dKlS4YG4/Uo3Z49e9Lti6BHIr/55hv3GF66VXqKFekvRCpJc/edYrUcjgACCCCAQFQK6P+L69ats4cffti1/6abbkqUP/6ss85y65U7/rvvvrNhw4bZ5MmTg31VQJ6SvgLKFT969Gg77bTT3KjWsWPHWo0aNdL3JNSGAAJRJ5Da39fKR07JPAEF3vU655xz3E1rzcmiyXcpCCCAAAII+EUgaoLxHrhywxUsWNC+/vprmz17trc6+K7/WefKlct91uRkGVUWL15sffr0cblI0/OcDRs2tPz586dnladUlyY+Utm/f/8p1cPBCCCAAAII+EUgb968bsBAr169TIMCvBvXCui0bdvWdbN///7uMXt9qF+/fnB0fNOmTf3CEDH9+PXXX90TlH/++aebpDZiGkZDEEAg0wVS8/s6aSP1hHaTJk2sUKFCphusx3tCO+mxfD55AQXi9Xt83rx5Vq5cuZOvgCMQQAABBBCIcIGoC8brH7j//e9/HWvv3r0T8WqSLo2K79atm1vv/WPY22nGjBl2//33u9Qvyhfqje7W+7Rp0+zWW2+1HTt22KBBg+yWW26xiRMneoe6d+Vuf+GFF+z66693I/OV/1VFNwU0SZtyw/br1y+YH1bbUjqn9lX6mZ49e9rq1avt0Ucftc6dOyfKD6/1//d//+cmelNdKnv37jX9g14j7158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gAACCCCAAAIIIIAAAggggAACCCDgO4GYyhmfJUuWRBfwyJEj9sUXX9h7773nRs0PHz7cvvvuO2vfvr21bNnS7btixQobMmSItWvXzn755RebNGmSnX322dalSxdbvHixTZgwwe3XunVrq1Spkr3wwgvuc/Xq1a1Ro0Z200032ddff23Fixe3TZs2WefOne3QoUOmtDkzZsywKlWqWNGiRe2uu+5K1LZI/VCiRAnbtWuX7dy50/LlyxepzaRdCCCAAAIIIIAAAggggAACCCCAAAIIIIBARAnEVDA+qfy7775rPXr0sGXLltn69etNgeZvvvnGRo4c6QLt69ats27dutns2bNt7ty5tnHjRlu+fLnpuEWLFtnrr7/ugve33367VaxY0QXWW7VqZbVq1bKrrrrK5ahXYH/8+PGmiU+1Pi4uzu6//34rW7asPffcc/boo4/a0qVLoyYYr3z7Kps3byYYn/QLxWcEEEAAAQQQQAABBBBAAAEEEEAAAQQQQCAFgZhKU5PUQKPWb7vtNrf6iSeesLffftvlkt+7d6/Nnz/fzj//fHv22Wfd9jPOOMOt00j5IkWKuH0VrK9Tp06iajXBqVK5qChw3aRJE7dco0YNa968ueXIkcPGjh3rgtmlSpWyPn36WIECBdw+0fDDS/WjkfHRWAYMGGAdOnRwLz2hQEEAAQQQQAABBBBAAAEEEEAAAQQQQAABBDJCIKaD8QJWcFxFaWVUNMJdxcvxnjNnTvf53//+t3tXgP2SSy6xw4cP28KFC926pD+SpsNJuv3CCy+0F1980erXr28LFiywl19+OekuEfs5V65crm26YRGNZdq0ae5Gim686BpSEEDgqICeDtKfD720TEEAAQQQQAABBBBAAAEEEEAAAQQQSF+BmA/GJw2cK43MicpFF110ol2Ou12B4Pvuu89++OEHN1peaWuipXg+BLKj5YrRTgRSJ6AgvH636aW5NCgIIIAAAggggAACCCCAAAIIIIAAAukrEFPBeE3YmtZy4MCB4KGrVq1yyxpN742s16SmoSVpsDr03EOHDnUTxs6bN8/lke/bt68p5U00FK8f2bJli4bmHtPGd955x1nLO3v27MdsZwUCCCCAAAIIIIAAAggggAACCCCAAAIIIBAOgZgKxm/YsMEZ7tixI2i5bds2t7xnzx737gXdd+/eHdxHC6EpaT77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aSQrEEAAAQQQQAABBBBAAAEEEEAAAQQQCIMAwfgwoFJl5Ap06dIlchuXgS1TnngF3TWCXUFzBcnr1q17UsHp+vXru2C8gvnKM6/AviZ8VbD9jTfecGmAfvvtt2CvKlaseFL1Bw8Mw0JojvwwVE+VCCCAAAIIIIAAAggggAACCCCAAAIIHCNAMP4YElYg4H8BjWZXUVC6SZMmbjmlH4cPHw5u0uSvSUvu3LlNKWhUNNpeyzrm/9k7DzApiq6NXgTJSTGLCmJCDKiooKiYEwhiQMWcMCtiwoQoKAZUFMOvfghmATESjCDBnBUwgSgqWZJkZP46tdTQO8wGdmd3Z2bfu89s5+qq0zPd1W/dusUAqU2aNInvTvianXfeOb6sGREQAREQAREQAREQAREQAREQAREQAREQAREoTwQkxpenq62yikARCBBTPti8efOsbt26YdFPowI982G5Ro0aXpAPO9eqVcvPEleej0wEREAEREAEREAEREAEREAEREAEREAEREAEyhOB8hs0uzxdZZVVBIpAYPr06dalSxd7/PHH40efccYZNmTIEL88cuRIPyVG/JgxY/z866+/bh999FF8e+3atS18KlSoYP3797cpU6bYn3/+ac8//7zfT/9EQAREQAREQAREQAREQAREQAREQAREQAREoDwQkGd8ebjKKqMIFIHAZpttZr179/afZIcTd55PonXu3DlxVXz57LPPNj4yERABERABERABERABERABERABERABERABEShvBOQZX96uuMorAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiJQ6gQkxpc6cp1QBERABERABERABERABERABERABERABERABERABESgvBFQmJrydsXLeXknTJhgc+bM8RRatmxpxDGXiYAIlA4BxhlYsWKFHXHEEaVzQp1FBERABERABERABERABERABERABERABNKIgDzj0+hiKCslT6Br16524IEH+s/KlStL/oQ6gwjkQaBPnz623XbbWY0aNey8887LYy/zA+KyDwPhnnnmmTZz5sw89033DQwIfNlll6V7NpU/ERABERABERABERABERABERABERABESgRAhLjSwSrEhUBERCB/AlceeWVdsMNN9jixYvt2WeftalTpyY94J577vH7NG7c2J555hnbZJNNku6X6pX//fef3XjjjSlNdvDgwTZ8+PCUpqnEREAEREAEREAEREAEREAEREAEREAERCBTCChMTaZcKeUzJQTOOOMMa968uU+rYsWKKUlTiYhAUQlsttlmtsEGG9jcuXPtgQcesPvvvz9XUj///LN99tlnft2mm26aa1tJL+C5//XXX6f0NNtuu21K01NiIiACIiACIiACIiACIiACIiACIiACIpBJBCTGZ9LVUl6LTeDEE08sdhpKQARSSYDv5HvvvWdPPvmk3XLLLV6cD+kjzl9xxRVGeKVEW7JkieFp/sEHH3hvedLZe++9/W6TJ0/26R166KFGo9MLL7xgCOHXX3+9rbdeToeo/I7v3bu337dRo0Z29913+xjve+yxh02ZMsUGDRpk33zzje222252/vnnW7169Qp1Ts738ssvG3m7/fbb48X59ddfrV+/fjZt2jQ76qijrE2bNla9evX4ds2IgAiIgAiIgAiIgAiIgAiIgAiIgAiIQLYQUJiabLmSKocIiEBGEqhUqZJdffXV9u+//9qjjz4aLwOx4V977TW78MIL4+vCDCFkTjnlFBs3bpw/dvr06bb//vvbiy++aBMnTrROnTpZr169vLiPmP7nn3/6kDMh/fyO5xxNmza1Bg0a+Dj1zG+00UZeRGfQY0T9s846ywv8zZo1s99//71Q56Sh4ZJLLrF33303FMPGjBljBx10kO28884+zdNOO00x5eN0NCMCIiACIiACIiACIiACIiACIiACIpBtBCTGZ9sVVXlEQAQyjsC5557rPcwfeughW7p0qc9/3759vUDNwK2J9thjj9mIESOM/XfddVfr37+/7bjjjl7Irl+/vj3++OP+kBYtWvj9iNNep04d+/jjj/36/I5fuHCh4VGPAM/nyCOPtK222srOOecc22+//eyEE07wnvJ42yPEE1eeePYFnfO+++4zxPuo0Whw8MEH2+mnn26tWrXyA9TiIS8TAREQAREQAREQAREQAREQAREQAREQgWwkIDE+G6+qyiQCIpBRBAjLctlllxne8E8//bQfsPWpp54yBnlNZniXb7311la5cmW/uUKFCkaYmn/++cfHea9SpYpfj8d5sO22287Hpme5oOPDMWG6aNEi++ijj2z77bcPq6xJkybeo50QO1hB54zuw/yMGTO8Rz3CfzDKrgFeAw1NRUAEREAEREAEREAEREAEREAEREAEso2AxPhsu6IqjwiIQEYSuPTSS61atWpGvHbixxM/fYsttkhalp9++smmTp1qy5Yti29HnMdWrFhhiPOJFh2wuKDjE4+dNGmSrVy50n755Zdcm/CYZz1W0DkT95k1a5Y/bvz48X4a/oX0wrKmIiACIiACIiACIiACIiACIiACIiACIpAtBCTGZ8uVVDlEQAQykkAsFvP53njjjX0oGITva665xn/yKhAe6gjxX375ZXwXBkgl/vy+++4bX5fXTGGPD3kjTjxiPjHqo0ZIHWLVF8UaNmzoDxs2bJiF87CCAWsXL15clCR1jAiIgAiIgAiIgAiIgAiIgAiIgAiIgAikNQGJ8Wl9eZQ5ERCBbCaAdziDrwZjIFdEb7ziQ4gZQtdg0Vjql19+uV9HrHgMMRtRm9jzNWvWjIejCfHn2QePc8LNYAUdzz6kgwc9n7fffts3FPz999/xAVjJ11dffWV49GNz587107zOyUZE9iC016hRw4fWYcDZjh07+sFqyT8iPWF7ZCIgAiIgAiIgAiIgAiIgAiIgAiIgAiKQbQQqZVuBVB4REAERyAQCDz74oN1///0+zjvx4u+8805r1KiRtW/f3sePpwwffPCB3Xzzzb4433zzjZ1//vl2xx13+AFUn3jiCR9TnkFU58yZ4+O5M+grsdg7d+7sj2FQVdIcNWqUffvttz7GPGFwunTpYnkd7w90/9q1a+e91Nu2bWujR4+2Y445xhYsWOAFdAZ1JT0GZWW+MOck3S+++ML+++8/69Gjhy8X+aWR4cUXX7QhQ4bYSSedFC97yIemIiACIiACIiACIiACIiACIiACIiACIpAtBCo4j8qcGAnZUiKVo0QJ/Pjjj9a4cWMvqu21114lei4lLgLpQODkk0+25cuXe8/tdMhPNA/Eh+c3ieBeFG/ygo6fN2+e1a1bN3pK7wGPhzye+8nixOfauZALkydPtjp16li9evUKeURqdhs4cKB16NDBX9/1118/NYlmeCqESWKw348//tiaN2+elqUZOnSotW7d2n8XE7+faZlhZSrtCbRo0cKaNWtmDz/8cNrnVRnMXgI0ePMsfOONN6xNmzbZW1CVTARSTGCDDTawnj172iWXXJLilJWcCBSewKeffurrzoyxRV1aJgIiIAL5EZBnfH50tE0EREAE0pgAAvKuu+5a5BwWdHwyoZMXHj6pNGLSy0RABERABERABERABERABERABERABEQg2wkoZny2X2GVTwREQAREQAREQAREQAREQAREQAREQAREQAREQAREoMwJSIwv80ugDIiACIiACIiACIiACIiACIiACIiACIiACIiACIiACGQ7AYnx2X6FVT4REAEREAEREAEREAEREAEREAEREAEREAEREAEREIEyJyAxvswvgTIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiKQ7QQkxmf7FVb5REAEREAEREAEREAEREAEREAEREAEREAEREAEREAEypyAxPgyvwTKgAiIQGkS+Ouvv2zZsmWleUqdSwTKlMDTTz9tjzzyiC1durRM86GTi4AIiIAIiIAIiIAIiIAIiIAIiEB5J1CpvANQ+TODwIcffmjff//9WpmtXbu21alTx6ZOnRrf1qpVK9tll13iy5oRgSiBihUr2u67726dOnWySy65xKpUqRLdnBHzn376qd122202evRon98aNWrYxhtv7BsZttpqKzvqqKPs6quvtvXXXz8jyqNMliyBE044wd8nL7vsMuvdu7f/7vOdkYmACIiACIiACIiACIiACIiACIiACJQuAXnGly5vna0YBP73v//Z5ZdfHv9cf/31hqC03nrr2Q033ODXI1KuXLmyGGfRodlOYLPNNrMWLVp4sXrTTTe1xx57LOM85ffdd18bOHCgLVmyxJo0aWIzZ8608ePH22effWZsu/HGG+3YY4+1f//9N9svp8pXCAI0WnLvxLp06WI02Nx11122YMGCQhytXURABERABERABERABERABERABERABFJFQGJ8qkgqnRIlcNBBB9nIkSNtiy22iJ9n8eLFtuWWW9quu+5qy5cvt9tvv92effZZa9q0aXwfzYhAMgIIkdj8+fMNb+EGDRpknChfq1Yt7+2Mp3+wDTfc0Hr16mX333+/vfvuu9a2bduwSdNyToDvPN8PbO7cuXbLLbdY/fr1rXv37n65nONR8UVABERABERABERABERABERABESgVAhIjC8VzDpJKgjUrVvX7rvvvlxJ4R1/4YUX2vHHH+/FpVwbtSACeRDAO75z585WqVIlW7Vqlc2YMSNjRflkRaSBYccdd/QNWLNnz47vQqina665xk477TR7+OGHfS+SWCxm77//vp1zzjneU5qeAmeffbYNGzYsfhwziPvnnXeeP/7aa6/NtQ0v/fPPP98uuOACn1aujVpICwL0IkKApycR9t9//9nChQutR48eXpSnN8WsWbPSIq/KhAiIgAiIgAiIgAiIgAiIgAiIgAhkKwHFjM/WK5ul5TrllFO81+8XX3zhS0jMbLw9f/rppywtsYpVUgSuu+46e/TRR+OCNKJ0EOXpZXHrrbfaueeeW1KnL9F08Zbff//9/e+CHiUnnXSSF8lpgMBrnkFsEdaZ7rzzznbHHXfYr7/+atOnTzcaKsaOHWsvv/yy/fjjj7bNNtvYqFGjrGfPnvbiiy/ae++950X3e++915fhqquu8twQ6B966CE77LDD7PPPP7dmzZqVaBnTIXG+MzTmIGyHT+Iy6wuzLlX7JDtfSJuBi6tVq2b0KiLvGGG9+HA98Z7neyETAREQAREQAREQAREQAREQAREQAREoGQIS40uGq1ItIQIVKlSwu+++2w499ND4GRjAFa/58matW7e23377rbwVO6XlRZhEiETAxBAogyjP4K58EJUJh5RphoiOff31116MR4hnYFcGeuXTuHFjH9aJwY///vtv69q1q3Xr1s2aN29u77zzjh155JH+WNIZMmSID+lTuXJlO+OMM/wyaU+YMMH69OnjhX4aANg2YMAAe+aZZzJKjCfuPtc9COrJBO1k6xC5y9rwdOcD/+gnr3V839kWvvMh/0GcDw2dYb2mIiACIiACIiACIiACIiACIiACIiACqSMgMT51LJVSKRE45JBDvFD49ttv+zMiSPfr18+HqymNLDAoJoJWWTcA4IEcDUFSGmXPtnO88MILSQc5JXzNihUr7IQTTrClS5dmZLH//PNPn2/EdL6zhKjZb7/9LPxuEM4xBvFEZMfwkse22247PyW2OHbggQf6sDZsJzQUHvIYAyavv/763hOehjKMxrJNNtnEz2fKvw4dOvhy5CVgF0bkju7DfGJaicvJ9km2rqDjAvfCsA4D/Eb35ZwI84y9ceedd9oOO+wQv/7R/dZ1nvvyiBEjbMqUKf5eyXdo7733jn/X1jU97S8CIiACIiACIiACIiACIiACIiAC2UBAYnw2XMVyWAa8lYOoSPEJK3LmmWda1apVS4wGITyIs01M7XvuucfHyC6xkxUiYcKDyIpOACGZ0CtRQ1jGQ5j46TfddJNtvfXWdvLJJ/sBgqP7pfs8ZaB82F577RWPBU5DFuVJtERBl8aIqJ144on23HPPGaFounTp4r3fCX9DjHEaLWgY4jyZaoQk4tpnu3GfpJxcM0R+PPsZWwAR/rjjjjO+B5MmTSoWBoR97k3/93//588TTYyeKE8++aR17NgxulrzIiACIiACIiACIiACIiACIiACIlBuCGgA13JzqbOnoD/88IOPe73bbrvFC0Xsa4TykjCEzYsuusgIZYFoFbyFS+JcSrP0CCDABtEZgZJ5RHjESIREhPhMtf79+9t3331n7dq18+FittpqK1++Bx98MFd4kquvvjou1OdXVnqetG/f3seQZ8Bk0n7++eetYcOG/rDBgwfHD1+0aJF16tQpvqyZ9CDw7bff2tChQ71Ajui+7bbb+nEB6DHRtm1bL8SnIqeMs9C3b18/9gCNODQAMDgs30XGI6DRlN+XTAREQAREQAREQAREQAREQAREQATKI4Hc7o/lkYDKnFEEGHiQkBIIgnhf4tW5fPlyXwa8nM8++2wfDzuVhUK46t27tz9nJnv/ppJJpqfFwL/ERceCCB884TOlbITPIcRM1PBKZhBV4r+3bNnSHnnkEb+ZMp566qk+Rjyx4E8//XSjUWvevHn+98IUW7JkidWuXTvu0czvDcPLnn0Q72n0Ii589erVfbioTTfd1PcU4XfYtGlTHy+e+PSy9CJw1lln+QzRyMS9ku8DIWpSaV999ZW//tyjaRBK7KlEw2aPHj38WAyM+xHCIaUyD0pLBERABERABERABERABERABERABNKZgMT4dL46ylsuAoiBCEgMGvnJJ59YrVq1rE2bNvbKK6/4/ebPn+892PHSJYTNoEGD/Ho82mvWrOmFyA022MBuu+02H7cYUej333/3aV5xxRW5zpW4UKNGDUN0lGUHAbziMRp1Mk2EJ998/wkZQ5gR4oDjoc6grAjiiK0MqkrZouFnHnjgASPU0rvvvusHXN1ll11s2LBh/reCcIpdeumldvHFF/vGJ5YJyRQGN4XTuHHjfJiTY4891jd8IebyO0N8vf/++znEh2865phj/Lz+pQeBiRMn2sKFC/33gkGJQ4+QVOfupZde8uMLMKZA9LsXzsO6W265xS/yPZQYH8hoKgIiIAIiIAIiIAIiIAIiIAIiUF4ISIwvL1c6ReVE/MOIN1yahpDIwJHEOsYOOOAAO++883LFjWf9kCFDbM899zQ8NAmN8PXXX/u8nnTSSWy2N99807744gvbcsstbd999/VhGhA2GdiSOPSy7CfAd6Jx48begzdTQ9E0b97cxowZs04Xq169er43AAO7MqArA3XyOyaEDY1SUcNrOWp77LGH97KfPHmybbTRRkZawfgtTp061YewYT2hSGTpRQDxHUE+DNRbUrnju9W6deukQnz0nMcff7x169bNN/xE12teBERABERABERABERABERABERABLKdQOkqqtlOsxyUL4SEKe3BDgl7wbkJc8Dnm2++scsvv9x7e4Z1YYrYigdmEFoR5/HUJB44Nm3aNL983333xa/YTz/9FJ/XTHYT2H333b3Hd/h+ZHdp1y5d/fr1baeddlqnBrU6dep4j3jCQkWF+JA6HvJ40EuID0TSa7r99tuXuBBPiWng4VOQValSpaBdtF0EREAEREAEREAEREAEREAEREAEspKAPOOz8rKWXKGCCB9E+ZI7U+pS3nDDDb04T6iZYKwjnjGewXj7MygrXvdHHHFE2MVPES0J1SHLHgKl3asje8ipJCKQPwF6VIwYMcIPCJvfnoQWa9WqVX67aJsIiIAIiIAIiIAIiIAIiIAIiIAIZCUBifFZeVlLrlB169b1iSNeZ4OFuMZ41SPKjxo1KlexFi1alGtZCyIgAiIgAskJEPrr3nvv9WMT5NVL4vvvv/eDAA8fPjx5IlorAiIgAiIgAiIgAiIgAiIgAiIgAllMQGFqsvjilkTRGMSU+MPEBs42I3TC7NmzbebMmfEPA8EGQ7APFmLnh2VNRUAERKC8EyAm/QsvvGC33367/fzzz7lw0PPorLPOskMOOcQ/Q9hPJgIiIAIiIAIiIAIiIAIiIAIiIALljYA848vbFS9meRHiGzZsaJkQYz14tS9cuNCXOhpah23VqlWz//77z29jQEssWTxsv8H9i/YGmD9/flitqQiIgAiIwGoCNWvWtD59+tisWbNyMSHEWb9+/YzxBWQiIAIiIAIiIAIiIAIiIAIiIAIiUF4JSIwvr1e+GOXeY4897MsvvyxGCiV/KB7tn3zyiT8RA7o+88wz9tBDD8VP3LVrV8PLP9jTTz9tHTt2jA/6GtaH6QMPPGAvvfRSWLQHH3zQEOR79OgRX6cZERABERABs7FjxxphaGj0bNmypR155JHGOB0S4vXtEAEREAEREAEREAEREAEREAERKO8EJMaX929AEcqPuHLTTTf5AU/DgK5FSKZED0H8CR7x4URnnnlmmI1Pe/fuHZ/Pb6Zz587GRyYCIiACIpA3geuuu87HjQ97PProo76Rk4FdGzduHFZrKgIiIAIiIAIiIAIiIAIiIAIiIALlkoDE+HJ52YtXaITuK664wsaNG2etWrUqXmI6WgREoFQJrFy50t544w2rX7++7bPPPsU+91dffWUTJ070PUuKnZgSyGgCo0ePNnoRnXPOOf7ZsN9++xmDZL/33nvWoUMH++677zK6fMq8CIiACIiACIiACIiACIiA2eDBg+2dd94RihQQuO2222yLLbZIQUpKIpMISIzPpKuVJnndYYcdbNddd/U3YInxaXJRlI1yS2DMmDHWs2dPY8qYDo0aNbIlS5YYovvOO+9s3bt3t6ZNm3o+U6ZMsdNPP903pCGaFleMv+yyywzP5wMOOEBifLn9Bq4p+IABA7wYz/cianwnCRf266+/2nbbbRfdpHkREAEREAEREAEREAEREIEMI0BI4BdffNH22muvDMt5+mSXcQsJ/3zllVdKjE+fy1JqOZEYX2qos+tEZ5xxht1xxx12yy235Iq9nl2lVGlEIP0JIIQPGjTI6tSpY/vuu699/PHHFovFDI/1q6++2leQBg4caCeccII1aNDAV5q23nrrlBSsb9++8bEZUpKgEsloAvS2SPbdWrZsmY8h36lTp4wunzIvAiIgAiIgAiIgAiIgAiKQQ2D77be3UaNGCUcRCXzzzTfGeIyy8klgvfJZbJW6uAQuvPBCq1mzpp1yyim2dOnS4ian40VABIpBoFatWl6MD0kQGgQvhXvuucdWrVpljz/+eNhkNWrUiM+nYibV6aUiT0qjbAgcc8wxdsMNN9jQoUO9FzwVzOeee872339/23HHHVXZLJvLorOKQMYT4Dn21FNPGb27ZCIgAiIgAiIgAiIgAiKQ6QQkxmf6FSyj/OOF+8orr9gXX3xhBx98sA9Zg/ejTAREIH0IbLTRRj4zy5cvj2cKoT7RCGvz7LPP+ljf119/vX3++eeJu3iB9eKLL/be9owXESya3oQJE+zuu+/2H8LgyMoXAXpm3Hjjjda+fXvDUwZPD3pR/fbbb/bwww+XLxgqrQiUEIH58+cbDhE0wtIYSuNXXnbNNdf4feixQjzSTLWpU6faBRdcYE8++WSmFkH5FgEREAEREAEREAEREIE4AYnxcRSaWVcCLVq0sJEjR9q0adPspJNOsrp16/p4wIgwyT7//PPPup5C+4uACKwDAUR3hPV58+bZZ599Fo/jnl94kP/++8/3cEFgJ6zN9OnTvSczMQCDIbASlgphtXLlytayZUsbMWJE2Byfrr/++nbXXXdZ1apVvbAf36CZckOAMQl++eUXI378ddddZ4899pj3kidEkkwERKD4BHCGeOKJJ4wBkhcvXuwbP5OlOnfuXD+mB/sQi7Q0xXieP6+++mqybBVp3TbbbGNjx441GotlIiACIiACIiACIiACIpDpBBQzPtOvYBnnv1mzZl5o+emnn+zbb7+1SZMm+bAYybJVpUqVZKu1TgREIEUE+B0effTRRsMX84jzxIo/7rjj8jwDYinC+sKFC73Q3r9/fx9vnkE4W7du7b2a8XYfMmSIF38YjPONN95YK1wAXvE0yr3++ut20EEH5Xk+bcheAgzmS0PNbrvtZmeeeWa8oDNmzPDCvLxa40g0IwLFJrDpppvaBhts4AfvZqwQHCSiRngyGkZpoN1kk02im0p0fsWKFYZH/tlnn53S8xDuSiYCIiACIiACIiACIiAC2UBAYnw2XMUyLkOlSpWsSZMm/lPGWdHpRaBcE9h1113jg+ggiOBFSLgY4uwSUiqZvfvuu37QTTzeMcLOnHjiid6L8uuvv/aNbMTrPfTQQ/12BCCE96j98MMPxkCyvXv3lhAfBVPO5ullQWiaLbfc0nguYHx3aBxiyvejdu3a5YyKiisCJUOAezW9T7p27erHB4l6ohM2kMYxejvdcsst/r4ezcWHH37oG1UXLFjg79kdO3b0+zD49wcffODHeujTp489//zz9umnn9rJJ59sjAkRjGcKA4czLgSNb+eff77Vq1fP8ManIW7MmDHGs2LWrFl2+eWXW/Xq1a045/zjjz98iJp99tnH2rRpE7LhQ/S89dZbVq1aNd/wLME+jkYzIiACIiACIiACIiACaUxAYWrS+OIoayIgAiJQVAKEjLn//vtt5513ti+//NKicd6jaeJBTzze6JgPxBfGEPRnz57t58ePH++n4d/KlSvDrBdhEPNvczGJ58yZE1+vmfJHADG+VatWduCBB/oP84iG9LL4+++/yx8QlVgESpAA4zTwW6NH0o8//hg/EwMnE8Zm2223ja8LM/R+YvwPPNd3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A+PlMYZfNlrpjAySjeRUJhEQgXJD4K233ipWLMVyAyrDCsrggrLUEcAjfuLEiRZix7dv397atWtnhxxyiB1++OGpO5FSEgEREAEREAEREAEREAEREAERyBoCHTt2tDFjxvixCxjYuk+fPt4rnrHxstEkxmfjVVWZREAEUkbgoosusiOPPDJl6Smh9CPAIIOy4hN49NFHrWXLltapU6d4YnjJz5gxw66++mp78skn4+s1IwIiIAIiIAIiIAIiIAIiUD4I4PWcqpCVf/75pw0bNswY1LOkBjweOXKkrVixwo444ojycYHSoJR///23z8W8efPskksu8df4559/ToOclUwWJMaXDFelKgIikCUE8OqViYAIFEyAngZ77LGHbbnllvGK8apVq+yff/4xpr1797batWsXnJD2EAEREAEREAEREAEREAERyAoCc+bM8e8Iv/76q/d6Lm6hnn32Wbvxxhtt3333td133724ySU9vkuXLvbvv/9aNovBSQtehitvvvlmI+zpokWL7PnnnzeuczaHOVXM+DL8sunUIiACIiACIpBNBBDjW7Vq5Ue9Z+R75hkzoHXr1ha8HbKpvCqLCJQnAt9++6298MILKSky3maDBw+2L774IiXpKREREAEREIGyITB79mx75JFHbOHChSnJwFdffeWFuJQkpkTSgsBTTz1lCPKEsiyKffbZZ/bqq6/GD73iiits9OjRKRPicShC3I8adZThw4dHV2m+hAmcffbZvkc1MeOnTZtmJ5xwQgmfsWyTlxhftvx1dhEQAREQARHICgLEjKfS+swzz1j//v3jn4EDB3rP+J122ikryqlCiEC2EHjssceM32WNGjVs8803t+bNm9sWW2xhjRo1smuuucbmzp0bLyovvnvuuacXXOIrizgzefJk31B30kkn2SeffFLEVHSYCIiACKQ/AQYgPProo/19lnstXp5NmjSx7bbbzg9uf/fdd/tQGOlUEmI2H3XUUT7PderU8ff+xo0b2/bbb29t27a1b775Jp7dQYMGeUEUb9YFCxbE1xd1hnSaNWtmTzzxRFGT0HFpRgChm/oG4WSYxmKxdcohjfeJdRJ+SwcccMA6pZPfzsQm//rrr3Ptsu222/r6UK6VWihxAlzb/fff37j3ZLtJjM/2K6zyiYAIiIAIiEApEKhevboli7+/9957ew/Y3377rRRy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gAiIgAiIQDknQBxovNjdy6M5gXKdaNDt9DYX/xGvF8JXYIS3wDvlvPPOsxtvvHGd0strZ7qEEp+R+I/BgyWvfbVeBApDwAkBPjwAXoSydSfAb/Hvv//2cYSThbTJy9Nt3c+U3UfgOYtHID0IXGNFdhdWpROBFBIgTETPnj3tkksuSWGqZZ8UA7syaCqhNUIPpYJy5Rr1vCc8992NNtpoLQ9hPIIJYUPdbLPNNisouWJtJ9QI52JgVnpEJRrPDuJ2RwcCT9wnk5bplUDdGe9p6tLZbtdcc433cqfuLysaAcI1devWzfd+wfNeVr4IKExN+breKq0IiIAIiIAIlAgB52Fl77zzjjlPLXPeULnOwcufTAREIDsJIITxycuIDywTAREQARFYNwL169dftwPc3jToYa6nk58m/sNZorREPwZ83XXXXROzEF8u6NkR31EzaUmA7xIN8YxNICs6AX4nyRwZip6ijswUAhLjM+VKKZ8iIAIiIAIikMYEiJ04ZMiQpINsEf/0zjvvLBeeQml8iZQ1ERABERABERABERABESg2AcZ74SMTAREoGgGJ8UXjpqNEQAREQAREQAQiBBjQy8URNULdJHrCM1iji0HqByQ75JBDIkdpVgREQAREQAREQAREQAREQAREQATKDwGJ8eXnWqukIiACIiACIlBiBF566SX76KOPzA3WFe8mHU729ttv28EHH+zFeOKGrms8+pCOpiIgAiIgAiIgAiIgAiIgAiIgAiKQyQQkxmfy1VPeRUAEREAERCBNCBx44IH2/vvv+8GcEgcaY8DVJ554IukAXmmSfWVDBERABERABERABERABERABERABEqcgMT4EkesE4iACIiACIhA9hPYf//97a677vJi/I8//mgLFiywRo0aWfv27a1bt25WpUqV7IegEoqACIiACIiACIiACIiACIiACIhAPgQkxucDR5tEQAREQAREQAQKR2DVqlXWq1cvP4grR9SqVcuWLVtmXbt2teeff94qVqxYuIS0lwiIgAiIgAiIgAiIgAiIgAiIgAhkKYH1srRcKpYIiIAIiIAIiEApEnj66ae9EE88+OHDh9vs2bPthBNOsC+//NKuu+46L8yXYnZ0KhEQAREQAREQAREQAREQAREQARFIOwLyjE+7S6IMiYAIiIAIiEDmERg7dqz3fn/ttdds0003jReAUDX77ruv/fDDD7bXXnvF12tGBERABERABERABERABERABERABMobAXnGl7crrvKKgAiIgAiIQAkQ2GabbaxmzZq20UYbxVNfsmSJIc7jKb/VVlvF12tGBERABERABERABERABERABERABMojAYnx5fGqq8wiIAIiIAIikGICl112mdWrV8/69u0bT/nzzz+3448/3g4++GDbZJNN4us1IwIiIAIiIAIiIAIiIAIiIAIiIALlkYDE+PJ41VVmERABERABEUgxATziJ06caFWrVo0P4tquXTt75ZVXrH///ik+m5ITAREQAREQAREQAREQAREQAREQgcwjoJjxmXfNlGMREAEREAERSEsClStXtk6dOsXzFvWSj6/UjAiIgAiIgAiIgAiIgAiIgAiIgAiUUwLyjC+nF17FFgEREAEREAEREAEREAEREAEREAEREAEREAEREAERKD0CEuNLj7XOJAIiIAIiIAIiIAIiIAIiIAIiIAIikAUEYr4MOf+NSSzmJ0zdQs58zobVq1bvu3pdzuE566L/OTbnk5Nm7rRWrwvnCumT2Frn9SvZwMzq7WEpui55vn0uVqe5OoGcSa60InldK9+cK7I9SVrR7dH5kEt/Qn9csrTcVl+McKRbWL3vmoxqTgREQATSj4DC1KTfNVGOREAEREAEREAEREAEREAEREAEREAE0pQA8m8F92f+40TgCjnz/M+ZZwtKsV+zelXOfFjHrmv29Qvu35pjWLP29uTrcp/XH+j+5U4r5vJYIWQ1V75X58iXIeQup3Th/IlphfWr91rrXGtvX5NvcpdwltVrAp8k+fZHRLavzmsOXnKRc0zuI32y+icCIiACabPonWsAAEAASURBVEdAYnzaXRJlSAREQAREQAREQAREQATyJ5DjB4gwkSg9sIwF0SJnac3/vLYnpsMRydatSSlnLtk+ietYxqJ5SrZuzV455Us8huXEtBPXBYGM9TIREAERKBkCeYrQuU4Xvefl2pDPQmGPSXYvjCa79nafcq7kw8La+0ZTKvi+y94hrdxHFm0pd1q5l/I619p7Fe3cOkoEREAESp6AwtSUPGOdQQREQAREQAREQAREQARSTgDpIQhCOfM5y6xbs5wjkaxZztnKMpZ7fXQ5J62cvRLX56zNOTbZuRLX5Zxz7fMl7pdznpz9co5Zk7+Qh5DzsMx0TTohv5qKgAiIQEkSyN1giJidYAWES1mxYoUt/Pff1QetOT7mjlu2bJn9G9/mdikgrYQzr15cc69Mvj26NsevPLomZz7kK1larAvb1z4y9/F5bS9ofTT96Hw4bs1VCHnJqyThCE1FQAREIB0ISIxPh6ugPIiACIiACIiACIiACIjAOhKISxNOqEHAiS+7dFiO2sqVK+2///7LtR4phXWIQon75xyd8z8vGSak78+9Og+rVq1aKy32y52bcGTONBzv90tSllzrKZf7BBkoHBuma+T83OfQkgiIgAiklkD8LuSSdRKwuy8tXbLYZsyYkXOa1WFUVrl77Ey3bqWbYuw3d+5ce+qpp2za33/n7OvvaKtn3WTBggX27LPP2pQpU3JWhpAs+d5J2TV6p82ZX758mc2cOcP++ecfn+6cObNt9uzZ9p+7V+fY6mNiq2ze3H/s559/tkmTJ6/eHi3j6t3jE47LeTpEz5o7Dznb44fkyt+atWvmcqcU1uc83RLPlbPvmjMkbg9HayoCIiAC6UdAYnz6XRPlSAREQAREQAREQAREQAQKILBGeJg/f74tWrTIYqvFlRUrV9jcefNs+fLlPo2lS5fa2LFj7a+//jIvlru1QfKYOXOmjRs3zkgDkShqOZJ3zr5sCZ/oPnhwTp8+3Yk9M/2U+RlufvHixV7kZ9/cqa6dzvz5C2yOE4oQqBCJyEv0OBoMEJL+cdsp1+w5c3zalGWeX57tjp9jCxcu9MfpnwiIgAiUNIGcOzD/V9+L3f1z9ozp1uehh2z5fzlCd8wJ3LNm/G0P933U3bNy1nFvfGbAANtwww2tYcOGa2WzghPe69ata3vttZc9+eSTCfe1nHPlHBSdD8mwLtxxcxoI5s+ba2+89prdcG0XO+qoo+yuu3vb+yM/dN73Oc+HnPzHXMPsKvtxwg/W8/Zudv6FF9m/i5esThRf8+i51qQfPWuYz2u6CiaxNemsWvWfff/NF9bpoovsm+8nxM/FzH9uW87zKGf/nL5PObusSWHN3OqD/ST52ugemhcBERCBsicgMb7sr4FyIAIiIAIiIAIiIAIiIALrRsAJP4gOfD7//HMbNmyYTZs2zYvUn332uQ0dOtTmONEaQWPE22/7sAcIPBUrVswlq2y22Wa2ZMkSL8gTFiEqs0RFjXCukMmwHwL6+++/b8cdd5zdeuutNnLkSBvmzt2rVy8b4AQnGgKi6XBcNC3yN378D3bP3XfboYceaq+88opNnDgx1z40KowePdouveQSO6VDBxszZrQP4bDCrf/oo4/smmuusdu73+49OqPnCnnVVAREQARSTSChL5Ktt956VqvuhlZh5VK75trrbZy7N73z9gi78aabbaPNtrSqVSr5+/OXX3xhv/z6q7Vu3drWX3/9pNli/U477WQbb7yxPffcc0n3yXvlmrsgwn69ehtb+xNOtD13a2I//vSTHdu2nbU59mirVrVKJIkKVqlSJdut6V528okn2BzXKLpqVbjL59yz1+y8Jv0166Jza2/HO/+VIa/Y0uUr4jvGXPozpv9tY9y9fdqMWfH1K11j8oihb9o/8wrTuLr2ueIJaUYEREAE0piAxPg0vjjKmgiIgAiIgAiIgAiIgAgkJeBEliCV4EH5/fffW48ePeyGG26wRx95xLbcYgvvefnzLz/b7y7UAcJO7dq140kFCQOxBhGc4//8808jpEKisW84V/y41esQ808//XQvRDVp0sROPPFEO/fcc+2KK66wPn362D333OND4USPi6bP+Vu0aGF7772399w/5ZRT/HI4H9Nq1arZ4Ycfbptvvrn37G9/fHvbYIMNrErVqnbIIYc4gf4Ua9/+BGvWrFk8n9FzaF4EREAEUk0gx1ubOxSfnDtcLXeP7XTxpVbZlttNN3a1B/r0tca7N7Nzzuxo3Ovwih84aJAddthhVqNGjXyzxHbue++9955vWM3ZOdwZ8zp07e3ruQbYGjVrWFV3v6Q3UY3q1a26+5CfRKtcpYpVr1nL38/XTilx70IuuwbXJf8ucI0TH1sF12ARrKIT/1u2OtyGDx9uBx/QPKw2xPiRoz60/9xxRbK1i1WkZHSQCIiACJQkgUolmbjSFgEREAEREAEREAEREAERKBkCaA7IFYQ7QIT/8MMPberUqdapUyfbdtttvafjh07UaNiwoRev88pF5cqVrUGDBvbJJ594wbuO86APekbiNJpG2IZ3Ox73CD3BNtpoI9t1111t8ODBPm9Rj/wlS5a6vFXM5RVKGnhmEtseC2mHKevwPGWfYGEb+Sc9mQiIgAiUFgGvFTtBO9yHOO9661Ww+ls3sFu6dbc//vjdli5baU2a7GzVXYMi90dChU128dj322+/ArPJPXML16haq1YtGzturLU9rq07Jnq2ZEkUtH1Nw2o4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IIAAAggggEBWBQjGZ1WM7RFAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQyKJAUgbjx44da23atLHixYtb8+bNbdu2bRFs77//vh177LFWokQJ6969uy1btixiPTMIIIAAAggggAACCCCAAAIIIIAAAggggAACCGRFICmD8d26dbOpU6faCSecYF999ZVdcsklEWZdu3a1J554wqpVq2bvvvuu1ahRI2I9MwgggAACCCCAAAIIIIAAAggggAACCCCAAAIIZEUgKYPxAsqfP781adLEWY0aNcoefvjhCDcF4itWrBixjJnEEtCDltGjR9u0adMS68Q4GwQQQAABBBBAAAEEEEAAAQQQQAABBBAInEDSBuP9K6EgfOXKle3uu++2iRMn+ovT/F6yZIkNHDjQevXqZY8++qitXbvWbbd371777LPP7OKLL7ZNmzbZCy+8YBdddJFNmjQpzXpYGAyBc889184++2x78MEHg9EgWoEAAggggAACCCCAAAIIIIAAAggggAACCSuQ9MH4KlWq2HvvvWeFChVyQfZFixalebEXL15srVq1stq1a9uFF15ob731lh1zzDG2dOlSGz58uPXu3duGDRtmPXr0cKlvvvzySzvzzDPd+jQrZCECCCCAAAIIIIAAAggggAACCCCAAAIIIIBA0ggUTJozzeBENYjryy+/bBdccIF16dLFZs2atd/W6vV+/PHHuwC7VlatWtWOOOIIu/POO+3NN9+0lStX2h133GH33XefHXfccfbJJ5/YKaecYvPmzbOaNWvuVx8L8l7glVdesT179pgeyFAQQAABBBBAAAEEEEAAAQQQQAABBBBAAIHcFCAYv0/3/PPPt2+++cYef/xx69mzpz333HMh961bt9qMGTPs1ltvDS1r3LixNWrUyCZPnuyWFS5c2H1rmUrdunXd9/r16933O++84wL2bsb70axZM2vZsqU/y3ceCOjhCwUBBBBAAAEEEEAAAQQQQAABBBBAAAEEEIiFAMH4MOVHHnnEvvvuO/voo4/slltuCa359ddfbffu3fbzzz+HlmmievXqtmrVKrcsX758EesKFoykVS/smTNnhra5/fbbCcaHNJhAIP4Fdu7caXr4lpWBn/WgTw/qTjjhBKtVq1aaCJ9//rnt2rXLOnTokOZ6FqYvsGDBAlu4cKFpfAgKAggggAACCCCAAAIIIIAAAgggkNcCSZ8zPvwCFChQwEaOHGn169e3999/3zQwq4ryxGvdf//73/DNbfv27ZkOqCttzebNm0Ofu+66K6IuZhBAIL4F3n77bbvyyiszfRLTpk1zb8hccsklpgd+6ZWbb77Zrr322vRW58lyPZjU2BklS5a0MmXKuHEywhvyww8/uDE4ihcv7sbWGDduXPjqmExfd911dtRRR0W85RSTA3MQBBBAAAEEEEAAAQQQQAABBBBAIB2BpA7G//nnn7Z69eoImlKlSpkCR/r2e7uXKFHClDNeeeE//fRTt/2aNWts7ty5ds0117j5DRs2uO+///7bfasnq8q2bdvcNz8QQCCxBQYPHmwTJ060ZcuWZepE27RpY0888cS/bvvuu+/ahx9+GLHd/fffb/69JmJFjGYOO+wwe/31123QoEGme98ZZ5wRektITWjQoIEbS0PB+ldffdWNxRGjpoUOo+uhdGAUBBBAAAEEEEAAAQQQQAABBBBAICgCSRmMV8qZ3r17u17wzzzzjCk9TXhRz3j1kFdveL8osHP22Wdb9+7d3Xfr1q1dfnkN0vrxxx/bsGHD3KYKzn/22WfWp08fN//CCy/Y1KlT3TQ/EEAgMQU0poRSXP3zzz+m/+czW/Sg79+K3sypU6dOaDP1OtfYFjpWXpemTZta/vz53YPKbt262Y4dOyKapIGus5K2J2LnHJhRz3wKAggggAACCCCAAAIIIIAAAgggEBSByMTmQWlVLrdD+dxffPFF90nvUKeeeqodeeSRodXFihWzUaNGuZzQ6iGvgVr9nvMKyC9dujS0rSbat28fMc8MAggkroAe1mnQ53vuuceGDh1q/fr1syJFioROWLnhlcZGb9S0bdvWXnvtNbv66qtD9xAF1ocMGeJSYR133HHuYaGC3Or9rvvO4sWL7YEHHnDjTmiA6S1btthTTz3lBorW9i+//LK75yhQv2jRIhs4cKC7V40fP96mT5/ugvkXXXSRS7ml9FvKQz9ixAi7++677dlnn7WyZcta+DgXyrGuMTGUz/63336zSpUqubQ0oRMKmzjttNPsoIMOstGjR7t269zSK0rVJaf58+dbjRo17Prrr7fy5cu7HvZ79uyxhg0bWufOnd3bSToXGWj8jvT8lIZm9uzZNmHCBNfOY4891q666qrQufj36PTaw3IEEEAAAQQQQAABBBBA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AAEEMhZIqjQ1pUqVchrKex6roh6kffv2dT34YnXM3DyOBmpUYfDF3FSmbgQQQAABBBBAAAEEEEAAAQQQQAABBBBINIGk6RmvC+enX/AvolI1TJkyxeU/Vv7iN99802bNmmVnn312KMfyb7/9ZkOHDrWzzjrLlL/5448/tiZNmtj111/v0jTodXkVDZJ42GGHucEJNd+oUSPTYIXKuzx9+nQ3qKLyrGsARAWylTbniy++sPr161v58uWtd+/e2i1uSv78SfUcJ26uCw1FAAEEEEAAAQQQQAABBBBAAAEEEEAAgWAKJFUwPvoSDB8+3Pr372+//PKLrV692g1o+OWXX9qoUaNcoH3VqlV20003mXLnzp4929asWWPKp6v9NOjgkCFDXPD+sssuczl2FVhXruAjjzzSunXrZscff7wL7E+cONGqV6/ulqtn+c0332xKCfHII4/YnXfeaT/99FPcBOP37NnjGJUGg4IAAggggAACCCCAAAIIIIAAAggggAACCCCQOYGk7t6sXuuXXnqpk7rvvvvstddeM+WS1wCH8+bNc4PXPfzww2597dq13TL1lC9XrpzbVsH6Zs2aRUg3aNDADYKohWXLlrV27dq59Rrs9JRTTrHChQvb2LFj7a+//rKqVau6QWQZgM4R8QMBBBBAAAEEEEAAAQQQQAABBBBAAAEEEEhYgaQOxuuqKjiuorQyKnXr1nXf69evd99FihRx3507d3bfCrB36NDB1EN84cKFbln0j+h0ONHr27Zta0888YS1aNHC5s+fb88880z0JszHQEADVB588MHmX9sYHJJDIIAAAggggAACCCCAAAIIIIAAAggggECSCiR9MD46cO4PUJrRn4eTTjopo9X/uk498K+77jqbM2eO6y2vtDWU2Ats3brVtmzZ4t6EiP3ROSICCCCAAAIIIIAAAggggAACCCCAAAIIJJNAUgXjNWDrgZZdu3aFdl26dKmbVm96v2e9grrhxc+t7i8LP/awYcNMA8bOnTvX5ZF/8sknTSlvKLEV0AC7bdq0sSOOOCK2B+ZoCCCAAAIIIIAAAggggAACCCCAAAIIIJB0AkkVjP/jjz/cBd60aVPoQm/YsMFN//333+7bD7pv27YttI0mwlPSfPjhh3bmmWe6QVmrVKnitpswYYKp3scee8wNyLpixQqXF75EiRJuvQLv48aNsyVL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FBBP1jFy5MhUuUsuuSRSIDlZRvMPP/xwxeDpZZddFu//05/+1AdrdPPg61//ejR69OjIeq+nAnoKbNgTAvE+9cxYz0of7F9nnXWiv/71r3EVRYLxr776arTSSiulzlPvW6NTNhiv+p5++mnvkjRVUNOefKh4uDzB+Hqty7pW6r1OrOd2tOWWW3p3BZx1Hrq5pHPeY4894vejX79+PiBbEchWlhWMr7c99Z5/OB/ruRz17t3bn++mm24ajRkzJrKnTaLx48enrhUFj5cuXRp286/ZYPxdd92V+owlrzPNb7755pE9mRLXkff7yfKNR0cccUT8foV6tS783XnnnXG9YabeazPsX49N3raWdf2rrY1cA40aBatKr3kt/vnPf/rrLryv4VW/OQqiW2/2VPWWhi265ZZb4s/ooYceGtnTF9F5550X6YZY2D+8Kphf6YZb2K4bSbrmq03NNKp2zOx63VAI7dWrPcWTLcIyAggggAACCLSAAMH4FngTaAICCCCAAAL1COQNxqvX5h//+Eff40//QM8G46dMmeKD0HvttVfqH/LtBePVwzD8oz8bpFVvvLBNrwpiWG56/6fgSJgOOuiguFw2GB/KLFmyJC6jurLB+OHDh/ue7TpG8pgKom+wwQaRetgnt02cONFXrUC/gtvqEW+pe8Lh/Kul2knt87nPfS6yVAapMnkX9PTAzjvv7Ntmg++ldisSjH/22WdT56fg+Isvvpiqr56FSsF41XP77benjidb9QJ/4YUX2hymVjC+DOtGr5V6r5O99947drjmmmtS566bLMlrLvs5SBYuKxhfb3vqPX+dg26MWboLf65f+MIXojfeeCN5alEy2C6PU089td3t6r1ug0dHNtikv2k2e/bsqEePHinLX/ziF3EdRb+fjjzyyLgu3Uhpb2r02mzUJm9bG73+ZVDvNdCoUXv+yW15LfQkU/JzZwNiJ6tJzT/22GO+rL67FMzXdNVVV0WW9qXiDSH1kj/99NMjPcmkz6xuNCePZeN9RPrcZ6eOMsoeN7scvovV5q233jp+CitbjmUEEEAAAQQQ6FwBgvGd68/REUAAAQQQqFsgG4xXT3MFE5J/a665ZiqYoH+kZ4PxyQast956cflqwXjLpRuXUZAjO/373/9OPeYfUqBkyyUDlNWC8dpHPddDQCQbjA91HnvssXEZlVWQfdGiRX6z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)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def check_convexity_params(\n", - " names: List[str],\n", - " monotonicity_indicator: Dict[str, int],\n", - " is_convex: Union[bool, Dict[str, bool]] = False,\n", - " is_concave: Union[bool, Dict[str, bool]] = False,\n", - ") -> Tuple[Dict[str, bool], Dict[str, bool]]:\n", - " if not isinstance(is_convex, dict):\n", - " is_convex = {k: is_convex for k in names}\n", - " if not isinstance(is_concave, dict):\n", - " is_concave = {k: is_concave for k in names}\n", - "\n", - " # check keys\n", - " if set(is_convex.keys()) != set(names):\n", - " raise ValueError(f\"{set(is_convex.keys())} != {set(names)}\")\n", - " if set(is_concave.keys()) != set(names):\n", - " raise ValueError(f\"{set(is_concave.keys())} != {set(names)}\")\n", - "\n", - " # check compatibility\n", - " convex_names = set([k for k in names if is_convex[k]])\n", - " concave_names = set([k for k in names if is_concave[k]])\n", - " incompatibles = convex_names.intersection(concave_names)\n", - " if len(incompatibles) > 0:\n", - " raise ValueError(\n", - " f\"Inputs {', '.join(sorted(incompatibles))} are set to be both concave and convex!\"\n", - " )\n", - "\n", - " # check monotonicity indicator\n", - " for k, v in monotonicity_indicator.items():\n", - " if v == 0 and (is_concave[k] or is_convex[k]):\n", - " raise ValueError(\n", - " \"If monotonicity_indicator is 0, then is_concave and is_convex must be False, \"\n", - " + f\"but we have: monotonicity_indicator['{k}'] = {monotonicity_indicator[k]}, \"\n", - " + f\"is_convex['{k}'] = {is_convex[k]}, \"\n", - " + f\"is_concave['{k}'] = {is_concave[k]}\"\n", - " )\n", - "\n", - " return is_convex, is_concave" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "names = list(\"abcd\")\n", - "\n", - "expected = (\n", - " {\"a\": False, \"b\": False, \"c\": False, \"d\": False},\n", - " {\"a\": False, \"b\": False, \"c\": False, \"d\": False},\n", - ")\n", - "monotonicity_indicator = {\"a\": 0, \"b\": 1, \"c\": 0, \"d\": -1}\n", - "is_convex, is_concave = check_convexity_params(\n", - " names, monotonicity_indicator, False, False\n", - ")\n", - "assert (is_convex, is_concave) == expected, (is_convex, is_concave)\n", - "\n", - "monotonicity_indicator = {\"a\": 0, \"b\": 1, \"c\": 0, \"d\": -1}\n", - "with pytest.raises(ValueError) as e:\n", - " is_convex, is_concave = check_convexity_params(\n", - " names, monotonicity_indicator, True, False\n", - " )\n", - "assert e.value.args == (\n", - " \"If monotonicity_indicator is 0, then is_concave and is_convex must be False, but we have: monotonicity_indicator['a'] = 0, is_convex['a'] = True, is_concave['a'] = False\",\n", - ")\n", - "\n", - "expected = (\n", - " {\"a\": True, \"b\": True, \"c\": True, \"d\": True},\n", - " {\"a\": False, \"b\": False, \"c\": False, \"d\": False},\n", - ")\n", - "monotonicity_indicator = {\"a\": -1, \"b\": 1, \"c\": 1, \"d\": -1}\n", - "is_convex, is_concave = check_convexity_params(\n", - " names, monotonicity_indicator, True, False\n", - ")\n", - "assert (is_convex, is_concave) == expected, (is_convex, is_concave)\n", - "\n", - "monotonicity_indicator = {\"a\": 0, \"b\": 1, \"c\": 0, \"d\": -1}\n", - "with pytest.raises(ValueError) as e:\n", - " is_convex, is_concave = check_convexity_params(\n", - " names, monotonicity_indicator, False, True\n", - " )\n", - "\n", - "expected = (\n", - " {\"a\": False, \"b\": False, \"c\": False, \"d\": False},\n", - " {\"a\": True, \"b\": True, \"c\": True, \"d\": True},\n", - ")\n", - "monotonicity_indicator = {\"a\": -1, \"b\": 1, \"c\": 1, \"d\": -1}\n", - "is_convex, is_concave = check_convexity_params(\n", - " names, monotonicity_indicator, False, True\n", - ")\n", - "assert (is_convex, is_concave) == expected, (is_convex, is_concave)\n", - "\n", - "with pytest.raises(ValueError) as e:\n", - " check_convexity_params(names, monotonicity_indicator, True, True)\n", - "assert e.value.args == (\"Inputs a, b, c, d are set to be both concave and convex!\",)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "is_convex = {\"a\": False, \"b\": False, \"c\": False, \"d\": False}\n", - "is_concave = False\n", - "\n", - "expected = (\n", - " {\"a\": False, \"b\": False, \"c\": False, \"d\": False},\n", - " {\"a\": False, \"b\": False, \"c\": False, \"d\": False},\n", - ")\n", - "monotonicity_indicator = {\"a\": 0, \"b\": 1, \"c\": 0, \"d\": -1}\n", - "is_convex, is_concave = check_convexity_params(\n", - " names, monotonicity_indicator, is_convex, is_concave\n", - ")\n", - "assert (is_convex, is_concave) == expected, (is_convex, is_concave)\n", - "\n", - "is_convex = {\"a\": False, \"b\": False, \"c\": False, \"d\": False}\n", - "is_concave = True\n", - "\n", - "expected = (\n", - " {\"a\": False, \"b\": False, \"c\": False, \"d\": False},\n", - " {\"a\": True, \"b\": True, \"c\": True, \"d\": True},\n", - ")\n", - "monotonicity_indicator = {\"a\": -1, \"b\": 1, \"c\": 1, \"d\": -1}\n", - "is_convex, is_concave = check_convexity_params(\n", - " names, monotonicity_indicator, is_convex, is_concave\n", - ")\n", - "assert (is_convex, is_concave) == expected, (is_convex, is_concave)\n", - "\n", - "is_convex = {\"a\": False, \"b\": True, \"c\": False, \"d\": False}\n", - "is_concave = {\"a\": False, \"b\": False, \"c\": True, \"d\": False}\n", - "\n", - "expected = (\n", - " {\"a\": False, \"b\": True, \"c\": False, \"d\": False},\n", - " {\"a\": False, \"b\": False, \"c\": True, \"d\": False},\n", - ")\n", - "is_convex, is_concave = check_convexity_params(\n", - " names, monotonicity_indicator, is_convex, is_concave\n", - ")\n", - "assert (is_convex, is_concave) == expected, (is_convex, is_concave)\n", - "\n", - "is_convex = {\"a\": False, \"b\": True, \"c\": False, \"d\": True}\n", - "is_concave = {\"a\": False, \"b\": False, \"c\": True, \"d\": True}\n", - "\n", - "with pytest.raises(ValueError) as e:\n", - " check_convexity_params(names, monotonicity_indicator, is_convex, is_concave)\n", - "assert e.value.args == (\"Inputs d are set to be both concave and convex!\",)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from tensorflow.keras.layers import Concatenate\n", - "\n", - "\n", - "def build_monotonic_type2_model(\n", - " *,\n", - " col_names: List[str],\n", - " input_units: Optional[int] = None,\n", - " units: int,\n", - " final_units: int,\n", - " activation: Union[str, Callable[[TensorLike], TensorLike]],\n", - " n_layers: int,\n", - " final_activation: Optional[Union[str, Callable[[TensorLike], TensorLike]]] = None,\n", - " monotonicity_indicator: Union[int, Dict[str, TensorLike]] = 1,\n", - " is_convex: Union[bool, Dict[str, bool]] = False,\n", - " is_concave: Union[bool, Dict[str, bool]] = False,\n", - " dropout: Optional[float] = None,\n", - "):\n", - " if isinstance(monotonicity_indicator, int):\n", - " monotonicity_indicator = {name: monotonicity_indicator for name in col_names}\n", - "\n", - " if input_units is None:\n", - " input_units = max(units // 4, 1)\n", - "\n", - " is_convex, is_concave = check_convexity_params(\n", - " col_names, monotonicity_indicator, is_convex, is_concave\n", - " )\n", - "\n", - " # inputs\n", - " x = {name: Input(shape=1, name=name) for name in col_names}\n", - " inputs = list(x.values())\n", - "\n", - " y = {\n", - " name: (\n", - " MonoDense(\n", - " units=input_units,\n", - " activation=activation,\n", - " monotonicity_indicator=monotonicity_indicator[name],\n", - " is_convex=is_convex[name],\n", - " is_concave=is_concave[name],\n", - " name=f\"mono_dense_{name}\"\n", - " + (\n", - " \"_increasing\"\n", - " if monotonicity_indicator[name] == 1\n", - " else \"_decreasing\"\n", - " )\n", - " + (\"_convex\" if is_convex[name] else \"\")\n", - " + (\"_concave\" if is_concave[name] else \"\"),\n", - " )\n", - " if monotonicity_indicator[name] != 0\n", - " else Dense(units=input_units, activation=activation, name=f\"dense_{name}\")\n", - " )(v)\n", - " for name, v in x.items()\n", - " }\n", - "\n", - " y = Concatenate()([y[k] for k in sorted(col_names)])\n", - "\n", - " if dropout and dropout > 0.0:\n", - " y = Dropout(dropout)(y)\n", - "\n", - " has_convex = any(is_convex.values())\n", - " has_concave = any(is_concave.values())\n", - " if has_convex and has_concave:\n", - " print(\"WARNING: we have both convex and concave parameters\")\n", - "\n", - " y = create_mono_block(\n", - " units=[units] * (n_layers - 1) + [final_units],\n", - " activation=activation,\n", - " monotonicity_indicator=1,\n", - " is_convex=has_convex,\n", - " is_concave=has_concave and not has_convex,\n", - " dropout=dropout,\n", - " )(y)\n", - "\n", - " if final_activation is not None:\n", - " final_activation = tf.keras.activations.get(final_activation)\n", - " y = final_activation(y)\n", - "\n", - " model = Model(inputs=inputs, outputs=y)\n", - "\n", - " return model" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "************************************************************************************************************************\n", - "\n", - "dropout=False\n", - "\n", - "Model: \"model_3\"\n", - "__________________________________________________________________________________________________\n", - " Layer (type) Output Shape Param # Connected to \n", - "==================================================================================================\n", - " a (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " b (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " c (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " d (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " mono_dense_a_increasing_convex (None, 8) 16 ['a[0][0]'] \n", - " (MonoDense) \n", - " \n", - " dense_b (Dense) (None, 8) 16 ['b[0][0]'] \n", - " \n", - " mono_dense_c_decreasing (MonoD (None, 8) 16 ['c[0][0]'] \n", - " ense) \n", - " \n", - " dense_d (Dense) (None, 8) 16 ['d[0][0]'] \n", - " \n", - " concatenate (Concatenate) (None, 32) 0 ['mono_dense_a_increasing_convex[\n", - " 0][0]', \n", - " 'dense_b[0][0]', \n", - " 'mono_dense_c_decreasing[0][0]',\n", - " 'dense_d[0][0]'] \n", - " \n", - " mono_dense_0_convex (MonoDense (None, 32) 1056 ['concatenate[0][0]'] \n", - " ) \n", - " \n", - " mono_dense_1_increasing_convex (None, 32) 1056 ['mono_dense_0_convex[0][0]'] \n", - " (MonoDense) \n", - " \n", - " mono_dense_2_increasing_convex (None, 32) 1056 ['mono_dense_1_increasing_convex[\n", - " (MonoDense) 0][0]'] \n", - " \n", - " mono_dense_3_increasing_convex (None, 10) 330 ['mono_dense_2_increasing_convex[\n", - " (MonoDense) 0][0]'] \n", - " \n", - "==================================================================================================\n", - "Total params: 3,562\n", - "Trainable params: 3,562\n", - "Non-trainable params: 0\n", - "__________________________________________________________________________________________________\n", - "************************************************************************************************************************\n", - "\n", - "dropout=True\n", - "\n", - "Model: \"model_4\"\n", - "__________________________________________________________________________________________________\n", - " Layer (type) Output Shape Param # Connected to \n", - "==================================================================================================\n", - " a (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " b (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " c (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " d (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " mono_dense_a_increasing_convex (None, 8) 16 ['a[0][0]'] \n", - " (MonoDense) \n", - " \n", - " dense_b (Dense) (None, 8) 16 ['b[0][0]'] \n", - " \n", - " mono_dense_c_decreasing (MonoD (None, 8) 16 ['c[0][0]'] \n", - " ense) \n", - " \n", - " dense_d (Dense) (None, 8) 16 ['d[0][0]'] \n", - " \n", - " concatenate_1 (Concatenate) (None, 32) 0 ['mono_dense_a_increasing_convex[\n", - " 0][0]', \n", - " 'dense_b[0][0]', \n", - " 'mono_dense_c_decreasing[0][0]',\n", - " 'dense_d[0][0]'] \n", - " \n", - " dropout_6 (Dropout) (None, 32) 0 ['concatenate_1[0][0]'] \n", - " \n", - " mono_dense_0_convex (MonoDense (None, 32) 1056 ['dropout_6[0][0]'] \n", - " ) \n", - " \n", - " dropout_7 (Dropout) (None, 32) 0 ['mono_dense_0_convex[0][0]'] \n", - " \n", - " mono_dense_1_increasing_convex (None, 32) 1056 ['dropout_7[0][0]'] \n", - " (MonoDense) \n", - " \n", - " dropout_8 (Dropout) (None, 32) 0 ['mono_dense_1_increasing_convex[\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - " 0][0]'] \n", - " \n", - " mono_dense_2_increasing_convex (None, 32) 1056 ['dropout_8[0][0]'] \n", - " (MonoDense) \n", - " \n", - " dropout_9 (Dropout) (None, 32) 0 ['mono_dense_2_increasing_convex[\n", - " 0][0]'] \n", - " \n", - " mono_dense_3_increasing_convex (None, 10) 330 ['dropout_9[0][0]'] \n", - " (MonoDense) \n", - " \n", - "==================================================================================================\n", - "Total params: 3,562\n", - "Trainable params: 3,562\n", - "Non-trainable params: 0\n", - "__________________________________________________________________________________________________\n" - ] - } - ], - "source": [ - "for dropout in [False, True]:\n", - " print(\"*\" * 120)\n", - " print()\n", - " print(f\"{dropout=}\")\n", - " print()\n", - " model = build_monotonic_type2_model(\n", - " col_names=list(\"abcd\"),\n", - " units=32,\n", - " final_units=10,\n", - " activation=\"elu\",\n", - " n_layers=4,\n", - " dropout=dropout,\n", - " monotonicity_indicator=dict(a=1, b=0, c=-1, d=0),\n", - " is_convex=dict(a=True, b=False, c=False, d=False),\n", - " is_concave=False,\n", - " )\n", - " model.summary()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Experiments\n", - "\n", - "For our experiments, we employ the datasets used by the authors of Certified Monotonic Network [1] and COMET [2]. We use the exact train-test split provided by the authors. Their respective repositories are linked below in the references. We directly load the saved train-test data split which have been saved after running the codes from respective papers' authors. \n", - "\n", - "\n", - "References:\n", - "\n", - "\n", - "1. Xingchao Liu, Xing Han, Na Zhang, and Qiang Liu. Certified monotonic neural networks. Advances in Neural Information Processing Systems, 33:15427–15438, 2020\n", - " \n", - " Github repo: https://github.com/gnobitab/CertifiedMonotonicNetwork\n", - "\n", - "\n", - "\n", - "2. Aishwarya Sivaraman, Golnoosh Farnadi, Todd Millstein, and Guy Van den Broeck. Counterexample-guided learning of monotonic neural networks. Advances in Neural Information Processing Systems, 33:11936–11948, 2020\n", - "\n", - " Github repo: https://github.com/AishwaryaSivaraman/COMET" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "total 114M\r\n", - "-rw-rw-r-- 1 davor davor 11K May 25 04:48 test_auto.csv\r\n", - "-rw-rw-r-- 1 davor davor 11M May 25 04:48 test_blog.csv\r\n", - "-rw-rw-r-- 1 davor davor 99K May 25 04:48 test_compas.csv\r\n", - "-rw-rw-r-- 1 davor davor 16K May 25 04:48 test_heart.csv\r\n", - "-rw-rw-r-- 1 davor davor 13M May 25 04:48 test_loan.csv\r\n", - "-rw-rw-r-- 1 davor davor 44K May 25 04:48 train_auto.csv\r\n", - "-rw-rw-r-- 1 davor davor 76M May 25 04:48 train_blog.csv\r\n", - "-rw-rw-r-- 1 davor davor 397K May 25 04:48 train_compas.csv\r\n", - "-rw-rw-r-- 1 davor davor 61K May 25 04:48 train_heart.csv\r\n", - "-rw-rw-r-- 1 davor davor 14M May 26 12:11 train_loan.csv\r\n", - "-rw-rw-r-- 1 davor davor 469 May 26 09:14 wget-log\r\n" - ] - } - ], - "source": [ - "# download data if needed\n", - "\n", - "data_path = Path(\"./data\")\n", - "\n", - "data_path.mkdir(exist_ok=True)\n", - "\n", - "for name in [\"auto\", \"blog\", \"compas\", \"heart\", \"loan\"]:\n", - " for prefix in [\"train\", \"test\"]:\n", - " if not (data_path / f\"{prefix}_{name}.csv\").exists():\n", - " !cd {data_path.resolve()}; wget https://zenodo.org/record/7968969/files/{prefix}_{name}.csv\n", - "\n", - "!ls -lh {data_path}" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Set the following flags to `True` to trigger search for hyperparametrs for particular dataset." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "should_find_hyperparam = dict(\n", - " auto=False,\n", - " heart=True,\n", - " comet=True,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def sanitize_col_names(df: pd.DataFrame) -> pd.DataFrame:\n", - " columns = {c: c.replace(\" \", \"_\") for c in df}\n", - " df = df.rename(columns=columns)\n", - " return df" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
a_b
01
12
23
\n", - "
" - ], - "text/plain": [ - " a_b\n", - "0 1\n", - "1 2\n", - "2 3" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sanitize_col_names(pd.DataFrame({\"a b\": [1, 2, 3]}))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def get_train_n_test_data(\n", - " dataset_name: str, *, data_path: Path = data_path\n", - ") -> Tuple[pd.DataFrame, pd.DataFrame]:\n", - " train_filename = \"train_\" + dataset_name + \".csv\"\n", - " train_df = pd.read_csv(data_path / train_filename)\n", - " test_filename = \"test_\" + dataset_name + \".csv\"\n", - " test_df = pd.read_csv(data_path / test_filename)\n", - "\n", - " return sanitize_col_names(train_df), sanitize_col_names(test_df)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CylindersDisplacementHorsepowerWeightAccelerationModel_YearOriginground_truth
01.4828071.0730280.6505640.606625-1.275546-1.631803-0.70166918.0
11.4828071.4829021.5489930.828131-1.452517-1.631803-0.70166915.0
21.4828071.0444321.1639520.523413-1.275546-1.631803-0.70166916.0
31.4828071.0253680.9072580.542165-1.806460-1.631803-0.70166917.0
41.4828072.2359272.3960841.587581-1.983431-1.631803-0.70166915.0
...........................
3090.3100070.3581310.188515-0.177437-0.3199011.720778-0.70166922.0
310-0.862792-0.566468-0.530229-0.722413-0.9216041.720778-0.70166936.0
311-0.862792-0.928683-1.351650-1.0036913.1841311.7207780.55732544.0
312-0.862792-0.566468-0.530229-0.810312-1.4171231.720778-0.70166932.0
313-0.862792-0.709448-0.658576-0.4235551.0604751.720778-0.70166928.0
\n", - "

314 rows Γ— 8 columns

\n", - "
" - ], - "text/plain": [ - " Cylinders Displacement Horsepower Weight Acceleration Model_Year \n", - "0 1.482807 1.073028 0.650564 0.606625 -1.275546 -1.631803 \\\n", - "1 1.482807 1.482902 1.548993 0.828131 -1.452517 -1.631803 \n", - "2 1.482807 1.044432 1.163952 0.523413 -1.275546 -1.631803 \n", - "3 1.482807 1.025368 0.907258 0.542165 -1.806460 -1.631803 \n", - "4 1.482807 2.235927 2.396084 1.587581 -1.983431 -1.631803 \n", - ".. ... ... ... ... ... ... \n", - "309 0.310007 0.358131 0.188515 -0.177437 -0.319901 1.720778 \n", - "310 -0.862792 -0.566468 -0.530229 -0.722413 -0.921604 1.720778 \n", - "311 -0.862792 -0.928683 -1.351650 -1.003691 3.184131 1.720778 \n", - "312 -0.862792 -0.566468 -0.530229 -0.810312 -1.417123 1.720778 \n", - "313 -0.862792 -0.709448 -0.658576 -0.423555 1.060475 1.720778 \n", - "\n", - " Origin ground_truth \n", - "0 -0.701669 18.0 \n", - "1 -0.701669 15.0 \n", - "2 -0.701669 16.0 \n", - "3 -0.701669 17.0 \n", - "4 -0.701669 15.0 \n", - ".. ... ... \n", - "309 -0.701669 22.0 \n", - "310 -0.701669 36.0 \n", - "311 0.557325 44.0 \n", - "312 -0.701669 32.0 \n", - "313 -0.701669 28.0 \n", - "\n", - "[314 rows x 8 columns]" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "train_df, test_df = get_train_n_test_data(\"auto\")\n", - "train_df" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def df2ds(df: pd.DataFrame) -> tf.data.Dataset:\n", - " x = df.to_dict(\"list\")\n", - " y = x.pop(\"ground_truth\")\n", - "\n", - " ds = tf.data.Dataset.from_tensor_slices((x, y))\n", - "\n", - " return ds\n", - "\n", - "\n", - "def peek(ds: tf.data.Dataset) -> tf.Tensor:\n", - " for x in ds:\n", - " return x" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "x, y = peek(df2ds(train_df).batch(8))\n", - "expected = {\n", - " \"Acceleration\",\n", - " \"Cylinders\",\n", - " \"Displacement\",\n", - " \"Horsepower\",\n", - " \"Model_Year\",\n", - " \"Origin\",\n", - " \"Weight\",\n", - "}\n", - "assert set(x.keys()) == expected\n", - "for k in expected:\n", - " assert x[k].shape == (8,)\n", - "assert y.shape == (8,)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def build_mono_model_f(\n", - " *,\n", - " monotonicity_indicator: Dict[str, int],\n", - " final_activation=None,\n", - " loss,\n", - " metrics,\n", - " units: int,\n", - " n_layers: int,\n", - " activation: str,\n", - " learning_rate: float,\n", - " weight_decay: float,\n", - " dropout: float,\n", - " decay_rate: float,\n", - " train_ds: tf.data.Dataset,\n", - ") -> Model:\n", - " model = build_monotonic_type2_model(\n", - " col_names=list(monotonicity_indicator.keys()),\n", - " units=units,\n", - " final_units=1,\n", - " activation=activation,\n", - " n_layers=n_layers,\n", - " monotonicity_indicator=monotonicity_indicator,\n", - " is_convex=False,\n", - " is_concave=False,\n", - " dropout=dropout,\n", - " final_activation=final_activation,\n", - " )\n", - "\n", - " lr_schedule = tf.keras.optimizers.schedules.ExponentialDecay(\n", - " learning_rate,\n", - " decay_steps=len(train_ds),\n", - " decay_rate=decay_rate,\n", - " staircase=True,\n", - " )\n", - "\n", - " optimizer = AdamW(learning_rate=lr_schedule, weight_decay=weight_decay)\n", - " model.compile(optimizer=optimizer, loss=loss, metrics=metrics)\n", - "\n", - " return model" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def find_hyperparameters(\n", - " build_model_f: Callable[..., Model],\n", - " tuner_name: str = \"BayesianOptimization\",\n", - " *,\n", - " max_trials: Optional[int] = None,\n", - " max_epochs: Optional[int] = None,\n", - " train_ds: tf.data.Dataset,\n", - " test_ds: tf.data.Dataset,\n", - " objective: Union[str, Objective],\n", - " dir_root: Union[Path, str],\n", - " project_name: str,\n", - " factor: int = 2,\n", - " seed: int = 42,\n", - " executions_per_trial: int = 1,\n", - " hyperband_iterations: int = 1,\n", - " max_consecutive_failed_trials: int = 5,\n", - ") -> Tuner:\n", - " tf.keras.utils.set_random_seed(seed)\n", - "\n", - " if tuner_name == \"BayesianOptimization\":\n", - " tuner = BayesianOptimization(\n", - " build_model_f,\n", - " objective=objective,\n", - " max_trials=max_trials,\n", - " seed=seed,\n", - " directory=Path(dir_root) / datetime.now().isoformat(),\n", - " project_name=project_name,\n", - " executions_per_trial=executions_per_trial,\n", - " max_consecutive_failed_trials=max_consecutive_failed_trials,\n", - " )\n", - " kwargs = dict(epochs=max_epochs)\n", - "\n", - " elif tuner_name == \"Hyperband\":\n", - " tuner = Hyperband(\n", - " build_model_f,\n", - " objective=objective,\n", - " max_epochs=max_epochs,\n", - " factor=factor,\n", - " seed=seed,\n", - " directory=Path(dir_root) / datetime.now().isoformat(),\n", - " project_name=project_name,\n", - " executions_per_trial=executions_per_trial,\n", - " hyperband_iterations=hyperband_iterations,\n", - " max_consecutive_failed_trials=max_consecutive_failed_trials,\n", - " )\n", - " kwargs = dict()\n", - " else:\n", - " raise ValueError(f\"tuner_name={tuner_name}\")\n", - "\n", - " stop_early = tf.keras.callbacks.EarlyStopping(monitor=\"val_loss\", patience=3)\n", - " tuner.search(\n", - " train_ds,\n", - " validation_data=test_ds,\n", - " callbacks=[stop_early],\n", - " **kwargs,\n", - " )\n", - "\n", - " return tuner" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# !ls /tmp/tuner/auto_tuner/2023-02-28T13:02:31.787216\n", - "\n", - "\n", - "def load_latest_tuner(\n", - " build_model_f: Callable[..., Model],\n", - " tuner_name: str = \"BayesianOptimization\",\n", - " *,\n", - " max_trials: Optional[int] = None,\n", - " max_epochs: Optional[int] = None,\n", - " train_ds: tf.data.Dataset,\n", - " test_ds: tf.data.Dataset,\n", - " objective: Union[str, Objective],\n", - " dir_root: Union[Path, str],\n", - " project_name: str,\n", - " factor: int = 2,\n", - " seed: int = 42,\n", - " executions_per_trial: int = 1,\n", - " hyperband_iterations: int = 1,\n", - " max_consecutive_failed_trials: int = 5,\n", - ") -> Tuner:\n", - " directory = sorted(Path(dir_root).glob(\"*\"))[-1]\n", - " print(f\"Loading tuner saved at: {directory}\")\n", - "\n", - " if tuner_name == \"BayesianOptimization\":\n", - " tuner = BayesianOptimization(\n", - " build_model_f,\n", - " objective=objective,\n", - " max_trials=max_trials,\n", - " seed=seed,\n", - " directory=directory,\n", - " project_name=project_name,\n", - " executions_per_trial=executions_per_trial,\n", - " max_consecutive_failed_trials=max_consecutive_failed_trials,\n", - " )\n", - " kwargs = dict(epochs=max_epochs)\n", - " elif tuner_name == \"Hyperband\":\n", - " tuner = Hyperband(\n", - " build_model_f,\n", - " objective=objective,\n", - " max_epochs=max_epochs,\n", - " factor=factor,\n", - " seed=seed,\n", - " directory=directory,\n", - " project_name=project_name,\n", - " executions_per_trial=executions_per_trial,\n", - " hyperband_iterations=hyperband_iterations,\n", - " max_consecutive_failed_trials=max_consecutive_failed_trials,\n", - " )\n", - " kwargs = dict()\n", - " else:\n", - " raise ValueError(f\"tuner_name={tuner_name}\")\n", - "\n", - " return tuner" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def count_model_params(model: Model) -> int:\n", - " return sum([sum([count_params(v) for v in l.variables]) for l in model.layers])\n", - "\n", - "\n", - "def create_model_stats(\n", - " tuner: Tuner,\n", - " hp: Dict[str, Any],\n", - " *,\n", - " epochs: int,\n", - " num_runs: int = 10,\n", - " train_ds: tf.data.Dataset,\n", - " test_ds: tf.data.Dataset,\n", - ") -> pd.DataFrame:\n", - " tf.keras.utils.set_random_seed(42)\n", - "\n", - " def model_stats(\n", - " tuner: Tuner = tuner,\n", - " hp: Dict[str, Any] = hp,\n", - " epochs: int = epochs,\n", - " train_ds: tf.data.Dataset = train_ds,\n", - " test_ds: tf.data.Dataset = test_ds,\n", - " ) -> Dict[str, Any]:\n", - " model = tuner.hypermodel.build(hp)\n", - " history = model.fit(train_ds, epochs=epochs, validation_data=test_ds, verbose=0)\n", - " objective = history.history[tuner.oracle.objective.name]\n", - " if tuner.oracle.objective.direction == \"max\":\n", - " best_epoch = objective.index(max(objective))\n", - " else:\n", - " best_epoch = objective.index(min(objective))\n", - " return objective[best_epoch]\n", - "\n", - " stats = pd.Series([model_stats() for _ in range(num_runs)])\n", - " stats = stats.describe()\n", - " stats = {\n", - " f\"{tuner.oracle.objective.name}_{k}\": stats[k]\n", - " for k in [\"mean\", \"std\", \"min\", \"max\"]\n", - " }\n", - " model = tuner.hypermodel.build(hp)\n", - " stats = pd.DataFrame(\n", - " dict(**hp.values, **stats, params=count_model_params(model)), index=[0]\n", - " )\n", - " # display(stats)\n", - " return stats\n", - "\n", - "\n", - "def create_tuner_stats(\n", - " tuner: Tuner,\n", - " *,\n", - " epochs: int,\n", - " num_runs: int,\n", - " num_models: int,\n", - " train_ds: tf.data.Dataset,\n", - " test_ds: tf.data.Dataset,\n", - ") -> pd.DataFrame:\n", - " stats = None\n", - "\n", - " for hp in tuner.get_best_hyperparameters(num_trials=num_models):\n", - " new_entry = create_model_stats(\n", - " tuner,\n", - " hp,\n", - " epochs=epochs,\n", - " num_runs=num_runs,\n", - " train_ds=train_ds,\n", - " test_ds=test_ds,\n", - " )\n", - " if stats is None:\n", - " stats = new_entry\n", - " else:\n", - " stats = pd.concat([stats, new_entry]).reset_index(drop=True)\n", - "\n", - " display(stats.sort_values(f\"{tuner.oracle.objective.name}_mean\"))\n", - "\n", - " return stats" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def hyperparameter_search(epochs, num_runs=10, num_models=10, **tuner_search_kwargs):\n", - " tuner = find_hyperparameters(**tuner_search_kwargs)\n", - " tuner = load_latest_tuner(**tuner_search_kwargs)\n", - "\n", - " stats = create_tuner_stats(\n", - " tuner,\n", - " epochs=epochs,\n", - " num_runs=num_runs,\n", - " num_models=num_models,\n", - " train_ds=tuner_search_kwargs[\"train_ds\"],\n", - " test_ds=tuner_search_kwargs[\"test_ds\"],\n", - " )\n", - "\n", - " return stats, tuner" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Comparison with methods and datasets from COMET [1] (Reference #20 in our paper)\n", - "\n", - "\n", - "References:\n", - "\n", - "\n", - "1. Aishwarya Sivaraman, Golnoosh Farnadi, Todd Millstein, and Guy Van den Broeck. Counterexample-guided learning of monotonic neural networks. Advances in Neural Information Processing Systems, 33:11936–11948, 2020\n", - "\n", - " Github repo: https://github.com/AishwaryaSivaraman/COMET\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Experiment for Auto MPG dataset\n", - "\n", - "The Auto MPG Dataset is a regression dataset [1] with 7 features - Cylinders, Displacement, Horsepower,Weight, Acceleration, Model Year, Origin. And the dependant variable is monotonically decreasing with\n", - "respect to features weigh, displacement, and horsepower. The `monotonicity_indicator` corrsponding to these features are set to -1, since the relationship is a monotonically decreasing one with respect to the dependant variable.\n", - "\n", - "\n", - "\n", - "References:\n", - "\n", - "1. Quinlan,R. (1993). Combining Instance-Based and Model-Based Learning. In Proceedings on the Tenth International Conference of Machine Learning, 236-243, University of Massachusetts, Amherst. Morgan Kaufmann.\n", - " \n", - " https://archive.ics.uci.edu/ml/datasets/auto+mpg\n", - "\n", - "2. Aishwarya Sivaraman, Golnoosh Farnadi, Todd Millstein, and Guy Van den Broeck. Counterexample-guided learning of monotonic neural networks. Advances in Neural Information Processing Systems, 33:11936–11948, 2020\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CylindersDisplacementHorsepowerWeightAccelerationModel_YearOriginground_truth
01.4828071.0730280.6505640.606625-1.275546-1.631803-0.70166918.0
11.4828071.4829021.5489930.828131-1.452517-1.631803-0.70166915.0
21.4828071.0444321.1639520.523413-1.275546-1.631803-0.70166916.0
31.4828071.0253680.9072580.542165-1.806460-1.631803-0.70166917.0
41.4828072.2359272.3960841.587581-1.983431-1.631803-0.70166915.0
...........................
3090.3100070.3581310.188515-0.177437-0.3199011.720778-0.70166922.0
310-0.862792-0.566468-0.530229-0.722413-0.9216041.720778-0.70166936.0
311-0.862792-0.928683-1.351650-1.0036913.1841311.7207780.55732544.0
312-0.862792-0.566468-0.530229-0.810312-1.4171231.720778-0.70166932.0
313-0.862792-0.709448-0.658576-0.4235551.0604751.720778-0.70166928.0
\n", - "

314 rows Γ— 8 columns

\n", - "
" - ], - "text/plain": [ - " Cylinders Displacement Horsepower Weight Acceleration Model_Year \n", - "0 1.482807 1.073028 0.650564 0.606625 -1.275546 -1.631803 \\\n", - "1 1.482807 1.482902 1.548993 0.828131 -1.452517 -1.631803 \n", - "2 1.482807 1.044432 1.163952 0.523413 -1.275546 -1.631803 \n", - "3 1.482807 1.025368 0.907258 0.542165 -1.806460 -1.631803 \n", - "4 1.482807 2.235927 2.396084 1.587581 -1.983431 -1.631803 \n", - ".. ... ... ... ... ... ... \n", - "309 0.310007 0.358131 0.188515 -0.177437 -0.319901 1.720778 \n", - "310 -0.862792 -0.566468 -0.530229 -0.722413 -0.921604 1.720778 \n", - "311 -0.862792 -0.928683 -1.351650 -1.003691 3.184131 1.720778 \n", - "312 -0.862792 -0.566468 -0.530229 -0.810312 -1.417123 1.720778 \n", - "313 -0.862792 -0.709448 -0.658576 -0.423555 1.060475 1.720778 \n", - "\n", - " Origin ground_truth \n", - "0 -0.701669 18.0 \n", - "1 -0.701669 15.0 \n", - "2 -0.701669 16.0 \n", - "3 -0.701669 17.0 \n", - "4 -0.701669 15.0 \n", - ".. ... ... \n", - "309 -0.701669 22.0 \n", - "310 -0.701669 36.0 \n", - "311 0.557325 44.0 \n", - "312 -0.701669 32.0 \n", - "313 -0.701669 28.0 \n", - "\n", - "[314 rows x 8 columns]" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "auto_train_df, auto_test_df = get_train_n_test_data(\n", - " data_path=data_path, dataset_name=\"auto\"\n", - ")\n", - "display(auto_train_df)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "auto_train_ds = (\n", - " df2ds(auto_train_df).repeat(10).shuffle(10 * auto_train_df.shape[0]).batch(16)\n", - ")\n", - "auto_test_ds = df2ds(auto_test_df).batch(16)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def build_auto_model_f(\n", - " **kwargs,\n", - ") -> Model:\n", - " monotonicity_indicator = {\n", - " \"Cylinders\": 0,\n", - " \"Displacement\": -1,\n", - " \"Horsepower\": -1,\n", - " \"Weight\": -1,\n", - " \"Acceleration\": 0,\n", - " \"Model_Year\": 0,\n", - " \"Origin\": 0,\n", - " }\n", - "\n", - " metrics = \"mse\"\n", - " loss = \"mse\"\n", - "\n", - " return build_mono_model_f(\n", - " monotonicity_indicator=monotonicity_indicator,\n", - " metrics=metrics,\n", - " loss=loss,\n", - " train_ds=auto_train_ds,\n", - " **kwargs,\n", - " )" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Model: \"model_5\"\n", - "__________________________________________________________________________________________________\n", - " Layer (type) Output Shape Param # Connected to \n", - "==================================================================================================\n", - " Acceleration (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " Cylinders (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " Displacement (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " Horsepower (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " Model_Year (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " Origin (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " Weight (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " dense_Acceleration (Dense) (None, 4) 8 ['Acceleration[0][0]'] \n", - " \n", - " dense_Cylinders (Dense) (None, 4) 8 ['Cylinders[0][0]'] \n", - " \n", - " mono_dense_Displacement_decrea (None, 4) 8 ['Displacement[0][0]'] \n", - " sing (MonoDense) \n", - " \n", - " mono_dense_Horsepower_decreasi (None, 4) 8 ['Horsepower[0][0]'] \n", - " ng (MonoDense) \n", - " \n", - " dense_Model_Year (Dense) (None, 4) 8 ['Model_Year[0][0]'] \n", - " \n", - " dense_Origin (Dense) (None, 4) 8 ['Origin[0][0]'] \n", - " \n", - " mono_dense_Weight_decreasing ( (None, 4) 8 ['Weight[0][0]'] \n", - " MonoDense) \n", - " \n", - " concatenate_2 (Concatenate) (None, 28) 0 ['dense_Acceleration[0][0]', \n", - " 'dense_Cylinders[0][0]', \n", - " 'mono_dense_Displacement_decreas\n", - " ing[0][0]', \n", - " 'mono_dense_Horsepower_decreasin\n", - " g[0][0]', \n", - " 'dense_Model_Year[0][0]', \n", - " 'dense_Origin[0][0]', \n", - " 'mono_dense_Weight_decreasing[0]\n", - " [0]'] \n", - " \n", - " dropout_10 (Dropout) (None, 28) 0 ['concatenate_2[0][0]'] \n", - " \n", - " mono_dense_0 (MonoDense) (None, 16) 464 ['dropout_10[0][0]'] \n", - " \n", - " dropout_11 (Dropout) (None, 16) 0 ['mono_dense_0[0][0]'] \n", - " \n", - " mono_dense_1_increasing (MonoD (None, 16) 272 ['dropout_11[0][0]'] \n", - " ense) \n", - " \n", - " dropout_12 (Dropout) (None, 16) 0 ['mono_dense_1_increasing[0][0]']\n", - " \n", - " mono_dense_2_increasing (MonoD (None, 1) 17 ['dropout_12[0][0]'] \n", - " ense) \n", - " \n", - "==================================================================================================\n", - "Total params: 809\n", - "Trainable params: 809\n", - "Non-trainable params: 0\n", - "__________________________________________________________________________________________________\n", - "197/197 [==============================] - 4s 7ms/step - loss: 41.2859 - mse: 41.2859 - val_loss: 14.7886 - val_mse: 14.7886\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "auto_model = build_auto_model_f(\n", - " units=16,\n", - " n_layers=3,\n", - " activation=\"relu\",\n", - " dropout=0.1,\n", - " weight_decay=0.1,\n", - " learning_rate=0.1,\n", - " decay_rate=0.8,\n", - ")\n", - "auto_model.summary()\n", - "auto_model.fit(\n", - " auto_train_ds,\n", - " validation_data=auto_test_ds,\n", - " epochs=1,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def build_auto_model(hp) -> Model:\n", - " return build_auto_model_f(\n", - " units=hp.Int(\"units\", min_value=8, max_value=32, step=1),\n", - " n_layers=hp.Int(\"n_layers\", min_value=1, max_value=4),\n", - " activation=hp.Choice(\"activation\", values=[\"elu\"]),\n", - " learning_rate=hp.Float(\n", - " \"learning_rate\", min_value=1e-2, max_value=0.3, sampling=\"log\"\n", - " ),\n", - " weight_decay=hp.Float(\n", - " \"weight_decay\", min_value=1e-2, max_value=0.3, sampling=\"log\"\n", - " ),\n", - " dropout=hp.Float(\"dropout\", min_value=0.0, max_value=0.25, sampling=\"linear\"),\n", - " decay_rate=hp.Float(\n", - " \"decay_rate\", min_value=0.1, max_value=1.0, sampling=\"reverse_log\"\n", - " ),\n", - " )\n", - "\n", - "\n", - "def get_auto_tuner_search_kwargs(build_auto_model, *, max_trials, executions_per_trial):\n", - " auto_tuner_search_kwargs = dict(\n", - " build_model_f=build_auto_model,\n", - " tuner_name=\"BayesianOptimization\",\n", - " train_ds=auto_train_ds,\n", - " test_ds=auto_test_ds,\n", - " objective=Objective(\"val_mse\", direction=\"min\"),\n", - " max_epochs=5,\n", - " executions_per_trial=executions_per_trial,\n", - " dir_root=\"/tmp/tuner/auto_tuner\",\n", - " project_name=\"auto_tuner\",\n", - " max_trials=max_trials,\n", - " )\n", - " return auto_tuner_search_kwargs" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "if should_find_hyperparam[\"auto\"]:\n", - " auto_tuner = find_hyperparameters(\n", - " **get_auto_tuner_search_kwargs(\n", - " build_auto_model, max_trials=100, executions_per_trial=5\n", - " )\n", - " )" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "if should_find_hyperparam[\"auto\"]:\n", - " auto_stats = create_tuner_stats(\n", - " auto_tuner,\n", - " epochs=5,\n", - " num_runs=10,\n", - " num_models=10,\n", - " train_ds=auto_train_ds,\n", - " test_ds=auto_test_ds,\n", - " )" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Trial 1 Complete [00h 00m 09s]\n", - "val_mse: 8.385748863220215\n", - "\n", - "Best val_mse So Far: 8.385748863220215\n", - "Total elapsed time: 00h 00m 09s\n", - "INFO:tensorflow:Oracle triggered exit\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_mse_meanval_mse_stdval_mse_minval_mse_maxparams
0162elu0.1243320.0269920.0325430.3032068.4271420.2054468.0883928.703953537
\n", - "
" - ], - "text/plain": [ - " units n_layers activation learning_rate weight_decay dropout \n", - "0 16 2 elu 0.124332 0.026992 0.032543 \\\n", - "\n", - " decay_rate val_mse_mean val_mse_std val_mse_min val_mse_max params \n", - "0 0.303206 8.427142 0.205446 8.088392 8.703953 537 " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "def final_build_auto_model(hp) -> Model:\n", - " return build_auto_model_f(\n", - " units=hp.Fixed(\"units\", 16),\n", - " n_layers=hp.Fixed(\"n_layers\", 2),\n", - " activation=hp.Fixed(\"activation\", \"elu\"),\n", - " learning_rate=hp.Fixed(\"learning_rate\", 0.124332),\n", - " weight_decay=hp.Fixed(\"weight_decay\", 0.026992),\n", - " dropout=hp.Fixed(\"dropout\", 0.032543),\n", - " decay_rate=hp.Fixed(\"decay_rate\", 0.303206),\n", - " )\n", - "\n", - "\n", - "final_auto_tuner = find_hyperparameters(\n", - " **get_auto_tuner_search_kwargs(\n", - " final_build_auto_model, max_trials=1, executions_per_trial=1\n", - " )\n", - ")\n", - "final_auto_stats = create_tuner_stats(\n", - " final_auto_tuner,\n", - " epochs=5,\n", - " num_runs=10,\n", - " num_models=1,\n", - " train_ds=auto_train_ds,\n", - " test_ds=auto_test_ds,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Experiment for Heart Disease Dataset [1]\n", - "\n", - "Heart Disease [1] is a classification dataset\n", - "used for predicting the presence of heart disease with 13 features (age, sex, cp, trestbps, chol, fbs, restecg, thalach, exang, oldpeak, slope, ca, thal) and monotonically increasing with respect to features- trestbps and cholestrol (chol). The `monotonicity_indicator` corrsponding to these features are set to 1. \n", - "\n", - "\n", - "\n", - "References:\n", - "\n", - "\n", - "1. John H. Gennari, Pat Langley, and Douglas H. Fisher. Models of incremental concept formation. Artif. Intell., 40(1-3):11–61, 1989.\n", - "\n", - " https://archive.ics.uci.edu/ml/datasets/heart+disease\n", - "\n", - "2. Aishwarya Sivaraman, Golnoosh Farnadi, Todd Millstein, and Guy Van den Broeck. Counterexample-guided learning of monotonic neural networks. Advances in Neural Information Processing Systems, 33:11936–11948, 2020\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
agesexcptrestbpscholfbsrestecgthalachexangoldpeakslopecathalground_truth
00.9727780.649445-2.0200770.721008-0.2518552.4269011.070838-0.025055-0.7210100.9864402.334348-0.770198-2.0702380
11.4150740.6494450.8840341.5435270.740555-0.4103461.070838-1.8311511.3812120.3303950.6873742.425024-0.5143451
21.4150740.6494450.884034-0.649858-0.326754-0.4103461.070838-0.9281031.3812121.2324570.6873741.3599501.0415480
3-1.9021480.649445-0.084003-0.1015120.066465-0.410346-0.9537151.566030-0.7210101.9705082.334348-0.770198-0.5143450
4-1.459852-1.533413-1.052040-0.101512-0.794872-0.4103461.0708380.920995-0.7210100.248389-0.959601-0.770198-0.5143450
.............................................
237-0.2435370.649445-2.020077-0.759528-1.131917-0.4103461.0708381.695037-0.721010-0.8996900.687374-0.770198-2.0702380
238-1.238704-1.5334130.8840340.0081571.7704142.4269011.070838-0.6270871.3812121.5604800.687374-0.7701981.0415481
2391.1939260.6494450.8840340.1726610.141364-0.4103461.070838-1.014108-0.7210101.3964690.6873740.2948761.0415481
240-0.6858330.6494450.884034-0.1015120.1788132.4269011.070838-0.0250551.381212-0.899690-0.9596011.3599501.0415481
2410.972778-1.5334130.8840340.9951813.006245-0.4103461.0708380.146954-0.7210102.3805370.6873742.4250241.0415481
\n", - "

242 rows Γ— 14 columns

\n", - "
" - ], - "text/plain": [ - " age sex cp trestbps chol fbs restecg \n", - "0 0.972778 0.649445 -2.020077 0.721008 -0.251855 2.426901 1.070838 \\\n", - "1 1.415074 0.649445 0.884034 1.543527 0.740555 -0.410346 1.070838 \n", - "2 1.415074 0.649445 0.884034 -0.649858 -0.326754 -0.410346 1.070838 \n", - "3 -1.902148 0.649445 -0.084003 -0.101512 0.066465 -0.410346 -0.953715 \n", - "4 -1.459852 -1.533413 -1.052040 -0.101512 -0.794872 -0.410346 1.070838 \n", - ".. ... ... ... ... ... ... ... \n", - "237 -0.243537 0.649445 -2.020077 -0.759528 -1.131917 -0.410346 1.070838 \n", - "238 -1.238704 -1.533413 0.884034 0.008157 1.770414 2.426901 1.070838 \n", - "239 1.193926 0.649445 0.884034 0.172661 0.141364 -0.410346 1.070838 \n", - "240 -0.685833 0.649445 0.884034 -0.101512 0.178813 2.426901 1.070838 \n", - "241 0.972778 -1.533413 0.884034 0.995181 3.006245 -0.410346 1.070838 \n", - "\n", - " thalach exang oldpeak slope ca thal ground_truth \n", - "0 -0.025055 -0.721010 0.986440 2.334348 -0.770198 -2.070238 0 \n", - "1 -1.831151 1.381212 0.330395 0.687374 2.425024 -0.514345 1 \n", - "2 -0.928103 1.381212 1.232457 0.687374 1.359950 1.041548 0 \n", - "3 1.566030 -0.721010 1.970508 2.334348 -0.770198 -0.514345 0 \n", - "4 0.920995 -0.721010 0.248389 -0.959601 -0.770198 -0.514345 0 \n", - ".. ... ... ... ... ... ... ... \n", - "237 1.695037 -0.721010 -0.899690 0.687374 -0.770198 -2.070238 0 \n", - "238 -0.627087 1.381212 1.560480 0.687374 -0.770198 1.041548 1 \n", - "239 -1.014108 -0.721010 1.396469 0.687374 0.294876 1.041548 1 \n", - "240 -0.025055 1.381212 -0.899690 -0.959601 1.359950 1.041548 1 \n", - "241 0.146954 -0.721010 2.380537 0.687374 2.425024 1.041548 1 \n", - "\n", - "[242 rows x 14 columns]" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "heart_train_df, heart_test_df = get_train_n_test_data(\n", - " data_path=data_path, dataset_name=\"heart\"\n", - ")\n", - "display(heart_train_df)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(({'age': ,\n", - " 'sex': ,\n", - " 'cp': ,\n", - " 'trestbps': ,\n", - " 'chol': ,\n", - " 'fbs': ,\n", - " 'restecg': ,\n", - " 'thalach': ,\n", - " 'exang': ,\n", - " 'oldpeak': ,\n", - " 'slope': ,\n", - " 'ca': ,\n", - " 'thal': },\n", - " ),\n", - " 152)" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "heart_train_ds = (\n", - " df2ds(heart_train_df).repeat(10).shuffle(10 * heart_train_df.shape[0]).batch(16)\n", - ")\n", - "heart_test_ds = df2ds(heart_test_df).batch(16)\n", - "\n", - "# peek(heart_train_ds), len(heart_train_ds)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def build_heart_model_f(\n", - " **kwargs,\n", - ") -> Model:\n", - " monotonicity_indicator = {\n", - " \"age\": 0,\n", - " \"sex\": 0,\n", - " \"cp\": 0,\n", - " \"trestbps\": 1,\n", - " \"chol\": 1,\n", - " \"fbs\": 0,\n", - " \"restecg\": 0,\n", - " \"thalach\": 0,\n", - " \"exang\": 0,\n", - " \"oldpeak\": 0,\n", - " \"slope\": 0,\n", - " \"ca\": 0,\n", - " \"thal\": 0,\n", - " }\n", - "\n", - " metrics = \"accuracy\"\n", - " loss = \"binary_crossentropy\"\n", - "\n", - " return build_mono_model_f(\n", - " monotonicity_indicator=monotonicity_indicator,\n", - " metrics=metrics,\n", - " loss=loss,\n", - " final_activation=\"sigmoid\",\n", - " train_ds=heart_train_ds,\n", - " **kwargs,\n", - " )" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Model: \"model_12\"\n", - "__________________________________________________________________________________________________\n", - " Layer (type) Output Shape Param # Connected to \n", - "==================================================================================================\n", - " age (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " ca (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " chol (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " cp (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " exang (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " fbs (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " oldpeak (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " restecg (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " sex (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " slope (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " thal (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " thalach (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " trestbps (InputLayer) [(None, 1)] 0 [] \n", - " \n", - " dense_age (Dense) (None, 4) 8 ['age[0][0]'] \n", - " \n", - " dense_ca (Dense) (None, 4) 8 ['ca[0][0]'] \n", - " \n", - " mono_dense_chol_increasing (Mo (None, 4) 8 ['chol[0][0]'] \n", - " noDense) \n", - " \n", - " dense_cp (Dense) (None, 4) 8 ['cp[0][0]'] \n", - " \n", - " dense_exang (Dense) (None, 4) 8 ['exang[0][0]'] \n", - " \n", - " dense_fbs (Dense) (None, 4) 8 ['fbs[0][0]'] \n", - " \n", - " dense_oldpeak (Dense) (None, 4) 8 ['oldpeak[0][0]'] \n", - " \n", - " dense_restecg (Dense) (None, 4) 8 ['restecg[0][0]'] \n", - " \n", - " dense_sex (Dense) (None, 4) 8 ['sex[0][0]'] \n", - " \n", - " dense_slope (Dense) (None, 4) 8 ['slope[0][0]'] \n", - " \n", - " dense_thal (Dense) (None, 4) 8 ['thal[0][0]'] \n", - " \n", - " dense_thalach (Dense) (None, 4) 8 ['thalach[0][0]'] \n", - " \n", - " mono_dense_trestbps_increasing (None, 4) 8 ['trestbps[0][0]'] \n", - " (MonoDense) \n", - " \n", - " concatenate_12 (Concatenate) (None, 52) 0 ['dense_age[0][0]', \n", - " 'dense_ca[0][0]', \n", - " 'mono_dense_chol_increasing[0][0\n", - " ]', \n", - " 'dense_cp[0][0]', \n", - " 'dense_exang[0][0]', \n", - " 'dense_fbs[0][0]', \n", - " 'dense_oldpeak[0][0]', \n", - " 'dense_restecg[0][0]', \n", - " 'dense_sex[0][0]', \n", - " 'dense_slope[0][0]', \n", - " 'dense_thal[0][0]', \n", - " 'dense_thalach[0][0]', \n", - " 'mono_dense_trestbps_increasing[\n", - " 0][0]'] \n", - " \n", - " dropout_24 (Dropout) (None, 52) 0 ['concatenate_12[0][0]'] \n", - " \n", - " mono_dense_0 (MonoDense) (None, 16) 848 ['dropout_24[0][0]'] \n", - " \n", - " dropout_25 (Dropout) (None, 16) 0 ['mono_dense_0[0][0]'] \n", - " \n", - " mono_dense_1_increasing (MonoD (None, 16) 272 ['dropout_25[0][0]'] \n", - " ense) \n", - " \n", - " dropout_26 (Dropout) (None, 16) 0 ['mono_dense_1_increasing[0][0]']\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - " \n", - " mono_dense_2_increasing (MonoD (None, 1) 17 ['dropout_26[0][0]'] \n", - " ense) \n", - " \n", - " tf.math.sigmoid (TFOpLambda) (None, 1) 0 ['mono_dense_2_increasing[0][0]']\n", - " \n", - "==================================================================================================\n", - "Total params: 1,241\n", - "Trainable params: 1,241\n", - "Non-trainable params: 0\n", - "__________________________________________________________________________________________________\n" - ] - } - ], - "source": [ - "heart_model = build_heart_model_f(\n", - " units=16,\n", - " n_layers=3,\n", - " activation=\"relu\",\n", - " dropout=0.1,\n", - " weight_decay=0.1,\n", - " learning_rate=0.1,\n", - " decay_rate=0.8,\n", - ")\n", - "heart_model.summary()\n", - "heart_model.fit(\n", - " heart_train_ds,\n", - " validation_data=heart_test_ds,\n", - " epochs=1,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def build_heart_model(hp) -> Model:\n", - " return build_heart_model_f(\n", - " units=hp.Int(\"units\", min_value=12, max_value=24, step=1),\n", - " n_layers=hp.Int(\"n_layers\", min_value=2, max_value=3),\n", - " activation=hp.Choice(\"activation\", values=[\"elu\"]),\n", - " learning_rate=hp.Float(\n", - " \"learning_rate\", min_value=1e-2, max_value=0.3, sampling=\"log\"\n", - " ),\n", - " weight_decay=hp.Float(\n", - " \"weight_decay\", min_value=1e-2, max_value=0.3, sampling=\"log\"\n", - " ),\n", - " dropout=hp.Float(\"dropout\", min_value=0.0, max_value=0.5, sampling=\"linear\"),\n", - " decay_rate=hp.Float(\n", - " \"decay_rate\", min_value=0.1, max_value=1.0, sampling=\"reverse_log\"\n", - " ),\n", - " )\n", - "\n", - "\n", - "def get_heart_tuner_search_kwargs(\n", - " build_heart_model, *, max_trials, executions_per_trial\n", - "):\n", - " heart_tuner_search_kwargs = dict(\n", - " build_model_f=build_heart_model,\n", - " tuner_name=\"BayesianOptimization\",\n", - " train_ds=heart_train_ds,\n", - " test_ds=heart_test_ds,\n", - " objective=Objective(\"val_accuracy\", direction=\"max\"),\n", - " max_epochs=10,\n", - " executions_per_trial=executions_per_trial,\n", - " dir_root=\"/tmp/tuner/heart_tuner\",\n", - " project_name=\"heart_tuner\",\n", - " max_trials=max_trials,\n", - " )\n", - " return heart_tuner_search_kwargs" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Trial 55 Complete [00h 01m 05s]\n", - "val_accuracy: 0.8590163946151733\n", - "\n", - "Best val_accuracy So Far: 0.8688524603843689\n", - "Total elapsed time: 00h 55m 43s\n", - "\n", - "Search: Running Trial #56\n", - "\n", - "Value |Best Value So Far |Hyperparameter\n", - "12 |16 |units\n", - "3 |2 |n_layers\n", - "elu |elu |activation\n", - "0.041365 |0.06543 |learning_rate\n", - "0.10878 |0.01 |weight_decay\n", - "0.18908 |0.25 |dropout\n", - "0.93403 |0.99983 |decay_rate\n", - "\n", - "Epoch 1/10\n", - "152/152 [==============================] - 6s 11ms/step - loss: 0.3812 - accuracy: 0.8364 - val_loss: 0.3349 - val_accuracy: 0.8361\n", - "Epoch 2/10\n", - "152/152 [==============================] - 1s 9ms/step - loss: 0.3264 - accuracy: 0.8517 - val_loss: 0.3235 - val_accuracy: 0.8361\n", - "Epoch 3/10\n", - "152/152 [==============================] - 1s 9ms/step - loss: 0.3249 - accuracy: 0.8529 - val_loss: 0.3048 - val_accuracy: 0.8689\n", - "Epoch 4/10\n", - "152/152 [==============================] - 1s 9ms/step - loss: 0.3339 - accuracy: 0.8570 - val_loss: 0.3483 - val_accuracy: 0.8361\n", - "Epoch 5/10\n", - "152/152 [==============================] - 1s 9ms/step - loss: 0.3292 - accuracy: 0.8541 - val_loss: 0.3038 - val_accuracy: 0.8197\n", - "Epoch 6/10\n", - "152/152 [==============================] - 1s 9ms/step - loss: 0.3123 - accuracy: 0.8595 - val_loss: 0.3145 - val_accuracy: 0.8033\n", - "Epoch 7/10\n", - "152/152 [==============================] - 1s 9ms/step - loss: 0.3241 - accuracy: 0.8525 - val_loss: 0.3166 - val_accuracy: 0.8361\n", - "Epoch 8/10\n", - "152/152 [==============================] - 1s 9ms/step - loss: 0.3265 - accuracy: 0.8620 - val_loss: 0.3121 - val_accuracy: 0.8197\n", - "Epoch 1/10\n", - "152/152 [==============================] - 5s 10ms/step - loss: 0.3965 - accuracy: 0.8368 - val_loss: 0.3543 - val_accuracy: 0.8525\n", - "Epoch 2/10\n", - "152/152 [==============================] - 1s 9ms/step - loss: 0.3291 - accuracy: 0.8603 - val_loss: 0.3218 - val_accuracy: 0.8197\n", - "Epoch 3/10\n", - "152/152 [==============================] - 1s 9ms/step - loss: 0.3261 - accuracy: 0.8537 - val_loss: 0.3042 - val_accuracy: 0.8197\n", - "Epoch 4/10\n", - "152/152 [==============================] - 1s 9ms/step - loss: 0.3217 - accuracy: 0.8517 - val_loss: 0.3478 - val_accuracy: 0.8197\n", - "Epoch 5/10\n", - "152/152 [==============================] - 1s 9ms/step - loss: 0.3284 - accuracy: 0.8521 - val_loss: 0.3122 - val_accuracy: 0.8361\n", - "Epoch 6/10\n", - "152/152 [==============================] - 1s 9ms/step - loss: 0.3004 - accuracy: 0.8562 - val_loss: 0.3216 - val_accuracy: 0.8361\n", - "Epoch 1/10\n", - "152/152 [==============================] - 5s 10ms/step - loss: 0.3755 - accuracy: 0.8417 - val_loss: 0.3235 - val_accuracy: 0.8361\n", - "Epoch 2/10\n", - "152/152 [==============================] - 1s 9ms/step - loss: 0.3322 - accuracy: 0.8558 - val_loss: 0.2992 - val_accuracy: 0.8197\n", - "Epoch 3/10\n", - "152/152 [==============================] - 1s 9ms/step - loss: 0.3370 - accuracy: 0.8508 - val_loss: 0.3013 - val_accuracy: 0.8689\n", - "Epoch 4/10\n", - "152/152 [==============================] - 1s 9ms/step - loss: 0.3154 - accuracy: 0.8562 - val_loss: 0.2979 - val_accuracy: 0.8689\n", - "Epoch 5/10\n", - "152/152 [==============================] - 1s 9ms/step - loss: 0.3131 - accuracy: 0.8554 - val_loss: 0.3785 - val_accuracy: 0.8197\n", - "Epoch 6/10\n", - "152/152 [==============================] - 1s 9ms/step - loss: 0.3248 - accuracy: 0.8579 - val_loss: 0.3187 - val_accuracy: 0.8361\n", - "Epoch 7/10\n", - "102/152 [===================>..........] - ETA: 0s - loss: 0.3081 - accuracy: 0.8640" - ] - }, - { - "ename": "KeyboardInterrupt", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn [46], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m heart_tuner \u001b[38;5;241m=\u001b[39m \u001b[43mfind_hyperparameters\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mget_heart_tuner_search_kwargs\u001b[49m\u001b[43m(\u001b[49m\u001b[43mbuild_heart_model\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmax_trials\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m100\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mexecutions_per_trial\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m5\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n", - "Cell \u001b[0;32mIn [26], line 51\u001b[0m, in \u001b[0;36mfind_hyperparameters\u001b[0;34m(build_model_f, tuner_name, max_trials, max_epochs, train_ds, test_ds, objective, dir_root, project_name, factor, seed, executions_per_trial, hyperband_iterations, max_consecutive_failed_trials)\u001b[0m\n\u001b[1;32m 48\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtuner_name=\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mtuner_name\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 50\u001b[0m stop_early \u001b[38;5;241m=\u001b[39m tf\u001b[38;5;241m.\u001b[39mkeras\u001b[38;5;241m.\u001b[39mcallbacks\u001b[38;5;241m.\u001b[39mEarlyStopping(monitor\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mval_loss\u001b[39m\u001b[38;5;124m\"\u001b[39m, patience\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m3\u001b[39m)\n\u001b[0;32m---> 51\u001b[0m \u001b[43mtuner\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msearch\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 52\u001b[0m \u001b[43m \u001b[49m\u001b[43mtrain_ds\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 53\u001b[0m \u001b[43m \u001b[49m\u001b[43mvalidation_data\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtest_ds\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 54\u001b[0m \u001b[43m \u001b[49m\u001b[43mcallbacks\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m[\u001b[49m\u001b[43mstop_early\u001b[49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 55\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 56\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 58\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m tuner\n", - "File \u001b[0;32m~/.local/lib/python3.8/site-packages/keras_tuner/engine/base_tuner.py:230\u001b[0m, in \u001b[0;36mBaseTuner.search\u001b[0;34m(self, *fit_args, **fit_kwargs)\u001b[0m\n\u001b[1;32m 227\u001b[0m \u001b[38;5;28;01mcontinue\u001b[39;00m\n\u001b[1;32m 229\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mon_trial_begin(trial)\n\u001b[0;32m--> 230\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_try_run_and_update_trial\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtrial\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mfit_args\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mfit_kwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 231\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mon_trial_end(trial)\n\u001b[1;32m 232\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mon_search_end()\n", - "File \u001b[0;32m~/.local/lib/python3.8/site-packages/keras_tuner/engine/base_tuner.py:270\u001b[0m, in \u001b[0;36mBaseTuner._try_run_and_update_trial\u001b[0;34m(self, trial, *fit_args, **fit_kwargs)\u001b[0m\n\u001b[1;32m 268\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_try_run_and_update_trial\u001b[39m(\u001b[38;5;28mself\u001b[39m, trial, \u001b[38;5;241m*\u001b[39mfit_args, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mfit_kwargs):\n\u001b[1;32m 269\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 270\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_run_and_update_trial\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtrial\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mfit_args\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mfit_kwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 271\u001b[0m trial\u001b[38;5;241m.\u001b[39mstatus \u001b[38;5;241m=\u001b[39m trial_module\u001b[38;5;241m.\u001b[39mTrialStatus\u001b[38;5;241m.\u001b[39mCOMPLETED\n\u001b[1;32m 272\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m\n", - "File \u001b[0;32m~/.local/lib/python3.8/site-packages/keras_tuner/engine/base_tuner.py:235\u001b[0m, in \u001b[0;36mBaseTuner._run_and_update_trial\u001b[0;34m(self, trial, *fit_args, **fit_kwargs)\u001b[0m\n\u001b[1;32m 234\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_run_and_update_trial\u001b[39m(\u001b[38;5;28mself\u001b[39m, trial, \u001b[38;5;241m*\u001b[39mfit_args, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mfit_kwargs):\n\u001b[0;32m--> 235\u001b[0m results \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrun_trial\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtrial\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mfit_args\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mfit_kwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 236\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39moracle\u001b[38;5;241m.\u001b[39mget_trial(trial\u001b[38;5;241m.\u001b[39mtrial_id)\u001b[38;5;241m.\u001b[39mmetrics\u001b[38;5;241m.\u001b[39mexists(\n\u001b[1;32m 237\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39moracle\u001b[38;5;241m.\u001b[39mobjective\u001b[38;5;241m.\u001b[39mname\n\u001b[1;32m 238\u001b[0m ):\n\u001b[1;32m 239\u001b[0m \u001b[38;5;66;03m# The oracle is updated by calling `self.oracle.update_trial()` in\u001b[39;00m\n\u001b[1;32m 240\u001b[0m \u001b[38;5;66;03m# `Tuner.run_trial()`. For backward compatibility, we support this\u001b[39;00m\n\u001b[1;32m 241\u001b[0m \u001b[38;5;66;03m# use case. No further action needed in this case.\u001b[39;00m\n\u001b[1;32m 242\u001b[0m warnings\u001b[38;5;241m.\u001b[39mwarn(\n\u001b[1;32m 243\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mThe use case of calling \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 244\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m`self.oracle.update_trial(trial_id, metrics)` \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 250\u001b[0m stacklevel\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m2\u001b[39m,\n\u001b[1;32m 251\u001b[0m )\n", - "File \u001b[0;32m~/.local/lib/python3.8/site-packages/keras_tuner/engine/tuner.py:287\u001b[0m, in \u001b[0;36mTuner.run_trial\u001b[0;34m(self, trial, *args, **kwargs)\u001b[0m\n\u001b[1;32m 285\u001b[0m callbacks\u001b[38;5;241m.\u001b[39mappend(model_checkpoint)\n\u001b[1;32m 286\u001b[0m copied_kwargs[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcallbacks\u001b[39m\u001b[38;5;124m\"\u001b[39m] \u001b[38;5;241m=\u001b[39m callbacks\n\u001b[0;32m--> 287\u001b[0m obj_value \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_build_and_fit_model\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtrial\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mcopied_kwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 289\u001b[0m histories\u001b[38;5;241m.\u001b[39mappend(obj_value)\n\u001b[1;32m 290\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m histories\n", - "File \u001b[0;32m~/.local/lib/python3.8/site-packages/keras_tuner/engine/tuner.py:214\u001b[0m, in \u001b[0;36mTuner._build_and_fit_model\u001b[0;34m(self, trial, *args, **kwargs)\u001b[0m\n\u001b[1;32m 212\u001b[0m hp \u001b[38;5;241m=\u001b[39m trial\u001b[38;5;241m.\u001b[39mhyperparameters\n\u001b[1;32m 213\u001b[0m model \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_try_build(hp)\n\u001b[0;32m--> 214\u001b[0m results \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mhypermodel\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfit\u001b[49m\u001b[43m(\u001b[49m\u001b[43mhp\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmodel\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 215\u001b[0m tuner_utils\u001b[38;5;241m.\u001b[39mvalidate_trial_results(\n\u001b[1;32m 216\u001b[0m results, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39moracle\u001b[38;5;241m.\u001b[39mobjective, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mHyperModel.fit()\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 217\u001b[0m )\n\u001b[1;32m 218\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m results\n", - "File \u001b[0;32m~/.local/lib/python3.8/site-packages/keras_tuner/engine/hypermodel.py:144\u001b[0m, in \u001b[0;36mHyperModel.fit\u001b[0;34m(self, hp, model, *args, **kwargs)\u001b[0m\n\u001b[1;32m 120\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mfit\u001b[39m(\u001b[38;5;28mself\u001b[39m, hp, model, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 121\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Train the model.\u001b[39;00m\n\u001b[1;32m 122\u001b[0m \n\u001b[1;32m 123\u001b[0m \u001b[38;5;124;03m Args:\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 142\u001b[0m \u001b[38;5;124;03m If return a float, it should be the `objective` value.\u001b[39;00m\n\u001b[1;32m 143\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 144\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mmodel\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfit\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m/usr/local/lib/python3.8/dist-packages/keras/utils/traceback_utils.py:65\u001b[0m, in \u001b[0;36mfilter_traceback..error_handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 63\u001b[0m filtered_tb \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 64\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m---> 65\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfn\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 66\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 67\u001b[0m filtered_tb \u001b[38;5;241m=\u001b[39m _process_traceback_frames(e\u001b[38;5;241m.\u001b[39m__traceback__)\n", - "File \u001b[0;32m/usr/local/lib/python3.8/dist-packages/keras/engine/training.py:1650\u001b[0m, in \u001b[0;36mModel.fit\u001b[0;34m(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_batch_size, validation_freq, max_queue_size, workers, use_multiprocessing)\u001b[0m\n\u001b[1;32m 1642\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m tf\u001b[38;5;241m.\u001b[39mprofiler\u001b[38;5;241m.\u001b[39mexperimental\u001b[38;5;241m.\u001b[39mTrace(\n\u001b[1;32m 1643\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtrain\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 1644\u001b[0m epoch_num\u001b[38;5;241m=\u001b[39mepoch,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1647\u001b[0m _r\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m1\u001b[39m,\n\u001b[1;32m 1648\u001b[0m ):\n\u001b[1;32m 1649\u001b[0m callbacks\u001b[38;5;241m.\u001b[39mon_train_batch_begin(step)\n\u001b[0;32m-> 1650\u001b[0m tmp_logs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtrain_function\u001b[49m\u001b[43m(\u001b[49m\u001b[43miterator\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1651\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m data_handler\u001b[38;5;241m.\u001b[39mshould_sync:\n\u001b[1;32m 1652\u001b[0m context\u001b[38;5;241m.\u001b[39masync_wait()\n", - "File \u001b[0;32m/usr/local/lib/python3.8/dist-packages/tensorflow/python/util/traceback_utils.py:150\u001b[0m, in \u001b[0;36mfilter_traceback..error_handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 148\u001b[0m filtered_tb \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 149\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 150\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfn\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 151\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 152\u001b[0m filtered_tb \u001b[38;5;241m=\u001b[39m _process_traceback_frames(e\u001b[38;5;241m.\u001b[39m__traceback__)\n", - "File \u001b[0;32m/usr/local/lib/python3.8/dist-packages/tensorflow/python/eager/polymorphic_function/polymorphic_function.py:880\u001b[0m, in \u001b[0;36mFunction.__call__\u001b[0;34m(self, *args, **kwds)\u001b[0m\n\u001b[1;32m 877\u001b[0m compiler \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mxla\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_jit_compile \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mnonXla\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 879\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m OptionalXlaContext(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_jit_compile):\n\u001b[0;32m--> 880\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_call\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwds\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 882\u001b[0m new_tracing_count \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mexperimental_get_tracing_count()\n\u001b[1;32m 883\u001b[0m without_tracing \u001b[38;5;241m=\u001b[39m (tracing_count \u001b[38;5;241m==\u001b[39m new_tracing_count)\n", - "File \u001b[0;32m/usr/local/lib/python3.8/dist-packages/tensorflow/python/eager/polymorphic_function/polymorphic_function.py:912\u001b[0m, in \u001b[0;36mFunction._call\u001b[0;34m(self, *args, **kwds)\u001b[0m\n\u001b[1;32m 909\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_lock\u001b[38;5;241m.\u001b[39mrelease()\n\u001b[1;32m 910\u001b[0m \u001b[38;5;66;03m# In this case we have created variables on the first call, so we run the\u001b[39;00m\n\u001b[1;32m 911\u001b[0m \u001b[38;5;66;03m# defunned version which is guaranteed to never create variables.\u001b[39;00m\n\u001b[0;32m--> 912\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_no_variable_creation_fn\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwds\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;66;03m# pylint: disable=not-callable\u001b[39;00m\n\u001b[1;32m 913\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_variable_creation_fn \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 914\u001b[0m \u001b[38;5;66;03m# Release the lock early so that multiple threads can perform the call\u001b[39;00m\n\u001b[1;32m 915\u001b[0m \u001b[38;5;66;03m# in parallel.\u001b[39;00m\n\u001b[1;32m 916\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_lock\u001b[38;5;241m.\u001b[39mrelease()\n", - "File \u001b[0;32m/usr/local/lib/python3.8/dist-packages/tensorflow/python/eager/polymorphic_function/tracing_compiler.py:134\u001b[0m, in \u001b[0;36mTracingCompiler.__call__\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 131\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_lock:\n\u001b[1;32m 132\u001b[0m (concrete_function,\n\u001b[1;32m 133\u001b[0m filtered_flat_args) \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_maybe_define_function(args, kwargs)\n\u001b[0;32m--> 134\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mconcrete_function\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_call_flat\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 135\u001b[0m \u001b[43m \u001b[49m\u001b[43mfiltered_flat_args\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcaptured_inputs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mconcrete_function\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcaptured_inputs\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m/usr/local/lib/python3.8/dist-packages/tensorflow/python/eager/polymorphic_function/monomorphic_function.py:1745\u001b[0m, in \u001b[0;36mConcreteFunction._call_flat\u001b[0;34m(self, args, captured_inputs, cancellation_manager)\u001b[0m\n\u001b[1;32m 1741\u001b[0m possible_gradient_type \u001b[38;5;241m=\u001b[39m gradients_util\u001b[38;5;241m.\u001b[39mPossibleTapeGradientTypes(args)\n\u001b[1;32m 1742\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m (possible_gradient_type \u001b[38;5;241m==\u001b[39m gradients_util\u001b[38;5;241m.\u001b[39mPOSSIBLE_GRADIENT_TYPES_NONE\n\u001b[1;32m 1743\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m executing_eagerly):\n\u001b[1;32m 1744\u001b[0m \u001b[38;5;66;03m# No tape is watching; skip to running the function.\u001b[39;00m\n\u001b[0;32m-> 1745\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_build_call_outputs(\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_inference_function\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcall\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 1746\u001b[0m \u001b[43m \u001b[49m\u001b[43mctx\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcancellation_manager\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcancellation_manager\u001b[49m\u001b[43m)\u001b[49m)\n\u001b[1;32m 1747\u001b[0m forward_backward \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_select_forward_and_backward_functions(\n\u001b[1;32m 1748\u001b[0m args,\n\u001b[1;32m 1749\u001b[0m possible_gradient_type,\n\u001b[1;32m 1750\u001b[0m executing_eagerly)\n\u001b[1;32m 1751\u001b[0m forward_function, args_with_tangents \u001b[38;5;241m=\u001b[39m forward_backward\u001b[38;5;241m.\u001b[39mforward()\n", - "File \u001b[0;32m/usr/local/lib/python3.8/dist-packages/tensorflow/python/eager/polymorphic_function/monomorphic_function.py:415\u001b[0m, in \u001b[0;36m_EagerDefinedFunction.call\u001b[0;34m(self, ctx, args, cancellation_manager)\u001b[0m\n\u001b[1;32m 406\u001b[0m outputs \u001b[38;5;241m=\u001b[39m functional_ops\u001b[38;5;241m.\u001b[39mpartitioned_call(\n\u001b[1;32m 407\u001b[0m args\u001b[38;5;241m=\u001b[39margs,\n\u001b[1;32m 408\u001b[0m f\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 411\u001b[0m config\u001b[38;5;241m=\u001b[39mconfig,\n\u001b[1;32m 412\u001b[0m executor_type\u001b[38;5;241m=\u001b[39mexecutor_type)\n\u001b[1;32m 414\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m i, func_graph_output \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28menumerate\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_func_graph_outputs):\n\u001b[0;32m--> 415\u001b[0m \u001b[43mhandle_data_util\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcopy_handle_data\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfunc_graph_output\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43moutputs\u001b[49m\u001b[43m[\u001b[49m\u001b[43mi\u001b[49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 416\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m executing_eagerly:\n\u001b[1;32m 417\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m outputs\n", - "File \u001b[0;32m/usr/local/lib/python3.8/dist-packages/tensorflow/python/ops/handle_data_util.py:41\u001b[0m, in \u001b[0;36mcopy_handle_data\u001b[0;34m(source_t, target_t)\u001b[0m\n\u001b[1;32m 26\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mcopy_handle_data\u001b[39m(source_t, target_t):\n\u001b[1;32m 27\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Copies HandleData for variant and resource type tensors if available.\u001b[39;00m\n\u001b[1;32m 28\u001b[0m \n\u001b[1;32m 29\u001b[0m \u001b[38;5;124;03m The CppShapeInferenceResult::HandleData proto contains information about the\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 39\u001b[0m \u001b[38;5;124;03m target_t: The tensor to copy HandleData to.\u001b[39;00m\n\u001b[1;32m 40\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m---> 41\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m (\u001b[43mtarget_t\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdtype\u001b[49m \u001b[38;5;241m==\u001b[39m dtypes\u001b[38;5;241m.\u001b[39mresource \u001b[38;5;129;01mor\u001b[39;00m\n\u001b[1;32m 42\u001b[0m target_t\u001b[38;5;241m.\u001b[39mdtype \u001b[38;5;241m==\u001b[39m dtypes\u001b[38;5;241m.\u001b[39mvariant):\n\u001b[1;32m 43\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(source_t, ops\u001b[38;5;241m.\u001b[39mEagerTensor):\n\u001b[1;32m 44\u001b[0m handle_data \u001b[38;5;241m=\u001b[39m source_t\u001b[38;5;241m.\u001b[39m_handle_data \u001b[38;5;66;03m# pylint: disable=protected-access\u001b[39;00m\n", - "File \u001b[0;32m/usr/local/lib/python3.8/dist-packages/tensorflow/python/framework/ops.py:1129\u001b[0m, in \u001b[0;36m_EagerTensorBase.dtype\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1125\u001b[0m \u001b[38;5;129m@property\u001b[39m\n\u001b[1;32m 1126\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mdtype\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[1;32m 1127\u001b[0m \u001b[38;5;66;03m# Note: using the intern table directly here as this is\u001b[39;00m\n\u001b[1;32m 1128\u001b[0m \u001b[38;5;66;03m# performance-sensitive in some models.\u001b[39;00m\n\u001b[0;32m-> 1129\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mdtypes\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_INTERN_TABLE\u001b[49m[\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_datatype_enum()]\n", - "\u001b[0;31mKeyboardInterrupt\u001b[0m: " - ] - } - ], - "source": [ - "heart_tuner = find_hyperparameters(\n", - " **get_heart_tuner_search_kwargs(\n", - " build_heart_model, max_trials=100, executions_per_trial=5\n", - " )\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "create_tuner_stats(\n", - " heart_tuner,\n", - " epochs=5,\n", - " num_runs=10,\n", - " num_models=10,\n", - " train_ds=heart_train_ds,\n", - " test_ds=heart_test_ds,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Trial 1 Complete [00h 00m 15s]\n", - "val_accuracy: 0.9016393423080444\n", - "\n", - "Best val_accuracy So Far: 0.9016393423080444\n", - "Total elapsed time: 00h 00m 15s\n", - "INFO:tensorflow:Oracle triggered exit\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_accuracy_meanval_accuracy_stdval_accuracy_minval_accuracy_maxparams
0162elu0.065430.010.250.999830.8557380.0169310.8360660.885246969
\n", - "
" - ], - "text/plain": [ - " units n_layers activation learning_rate weight_decay dropout \n", - "0 16 2 elu 0.06543 0.01 0.25 \\\n", - "\n", - " decay_rate val_accuracy_mean val_accuracy_std val_accuracy_min \n", - "0 0.99983 0.855738 0.016931 0.836066 \\\n", - "\n", - " val_accuracy_max params \n", - "0 0.885246 969 " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
unitsn_layersactivationlearning_rateweight_decaydropoutdecay_rateval_accuracy_meanval_accuracy_stdval_accuracy_minval_accuracy_maxparams
0162elu0.065430.010.250.999830.8557380.0169310.8360660.885246969
\n", - "
" - ], - "text/plain": [ - " units n_layers activation learning_rate weight_decay dropout \n", - "0 16 2 elu 0.06543 0.01 0.25 \\\n", - "\n", - " decay_rate val_accuracy_mean val_accuracy_std val_accuracy_min \n", - "0 0.99983 0.855738 0.016931 0.836066 \\\n", - "\n", - " val_accuracy_max params \n", - "0 0.885246 969 " - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "def final_build_heart_model(hp) -> Model:\n", - " return build_heart_model_f(\n", - " units=hp.Fixed(\"units\", 16),\n", - " n_layers=hp.Fixed(\"n_layers\", 2),\n", - " activation=hp.Fixed(\"activation\", \"elu\"),\n", - " learning_rate=hp.Fixed(\"learning_rate\", 0.06543),\n", - " weight_decay=hp.Fixed(\"weight_decay\", 0.01),\n", - " dropout=hp.Fixed(\"dropout\", 0.25),\n", - " decay_rate=hp.Fixed(\"decay_rate\", 0.99983),\n", - " )\n", - "\n", - "\n", - "final_heart_tuner = find_hyperparameters(\n", - " **get_heart_tuner_search_kwargs(\n", - " final_build_heart_model, max_trials=1, executions_per_trial=1\n", - " )\n", - ")\n", - "create_tuner_stats(\n", - " final_heart_tuner,\n", - " epochs=5,\n", - " num_runs=10,\n", - " num_models=1,\n", - " train_ds=heart_train_ds,\n", - " test_ds=heart_test_ds,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "![Screenshot%202023-01-26%20at%2015.15.44.png](attachment:Screenshot%202023-01-26%20at%2015.15.44.png)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The figure above shows the table from our paper for reference. As can be seen from our experiments above, our proposed methodology performs comparable to or better than state-of-the-art" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Comparison with methods and datasets from Certified Monotonic Network [1] (Reference #20 in our paper)\n", - "\n", - "\n", - "References:\n", - "\n", - "\n", - "1. Xingchao Liu, Xing Han, Na Zhang, and Qiang Liu. Certified monotonic neural networks. Advances in Neural Information Processing Systems, 33:15427–15438, 2020\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Experiment for Compas Dataset [1]\n", - "\n", - "COMPAS [1] is a dataset containing the criminal records of 6,172 individuals\n", - "arrested in Florida. The task is to predict whether the individual will commit a crime again\n", - "in 2 years. The probability predicted by the system will be used as a risk score. As mentioned in [2] 13 attributes for prediction. The risk score should be monotonically increasing w.r.t. four attributes, number of prior adult convictions, number of juvenile felony, number of juvenile misdemeanor, and number of other convictions. The `monotonicity_indicator` corrsponding to these features are set to 1.\n", - "\n", - "References: \n", - "\n", - "1. S. Mattu J. Angwin, J. Larson and L. Kirchner. Machine bias: There’s software used across the country to predict future criminals. and it’s biased against blacks. ProPublica, 2016.\n", - "\n", - "2. Xingchao Liu, Xing Han, Na Zhang, and Qiang Liu. Certified monotonic neural networks. Advances in Neural Information Processing Systems, 33:15427–15438, 2020\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "compas_train_df, compas_test_df = get_train_n_test_data(\n", - " data_path=data_path, dataset_name=\"compas\"\n", - ")\n", - "display(compas_train_df)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# compas_train_ds = df2ds(compas_train_df).repeat(10).shuffle(10 * compas_train_df.shape[0]).batch(16)\n", - "# compas_test_ds = df2ds(compas_test_df).batch(16)\n", - "\n", - "compas_train_ds = df2ds(compas_train_df).shuffle(compas_train_df.shape[0]).batch(16)\n", - "compas_test_ds = df2ds(compas_test_df).batch(16)\n", - "\n", - "peek(compas_train_ds), len(compas_train_ds)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def build_compas_model_f(\n", - " **kwargs,\n", - ") -> Model:\n", - " monotonicity_indicator = {\n", - " \"priors_count\": 1,\n", - " \"juv_fel_count\": 1,\n", - " \"juv_misd_count\": 1,\n", - " \"juv_other_count\": 1,\n", - " \"age\": 0,\n", - " \"race_0\": 0,\n", - " \"race_1\": 0,\n", - " \"race_2\": 0,\n", - " \"race_3\": 0,\n", - " \"race_4\": 0,\n", - " \"race_5\": 0,\n", - " \"sex_0\": 0,\n", - " \"sex_1\": 0,\n", - " }\n", - "\n", - " metrics = \"accuracy\"\n", - " loss = \"binary_crossentropy\"\n", - "\n", - " return build_mono_model_f(\n", - " monotonicity_indicator=monotonicity_indicator,\n", - " metrics=metrics,\n", - " loss=loss,\n", - " final_activation=\"sigmoid\",\n", - " train_ds=compas_train_ds,\n", - " **kwargs,\n", - " )" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "compas_model = build_compas_model_f(\n", - " units=16,\n", - " n_layers=3,\n", - " activation=\"relu\",\n", - " dropout=0.1,\n", - " weight_decay=0.1,\n", - " learning_rate=0.1,\n", - " decay_rate=0.8,\n", - ")\n", - "compas_model.summary()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "compas_model.fit(\n", - " compas_train_ds,\n", - " validation_data=compas_test_ds,\n", - " epochs=2,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def build_compas_model(hp) -> Model:\n", - " return build_compas_model_f(\n", - " units=hp.Int(\"units\", min_value=8, max_value=32, step=1),\n", - " n_layers=hp.Int(\"n_layers\", min_value=1, max_value=3),\n", - " activation=hp.Choice(\"activation\", values=[\"elu\"]),\n", - " learning_rate=hp.Float(\n", - " \"learning_rate\", min_value=1e-2, max_value=0.3, sampling=\"log\"\n", - " ),\n", - " weight_decay=hp.Float(\n", - " \"weight_decay\", min_value=1e-2, max_value=0.3, sampling=\"log\"\n", - " ),\n", - " dropout=hp.Float(\"dropout\", min_value=0.0, max_value=0.5, sampling=\"linear\"),\n", - " decay_rate=hp.Float(\n", - " \"decay_rate\", min_value=0.1, max_value=1.0, sampling=\"reverse_log\"\n", - " ),\n", - " )\n", - "\n", - "\n", - "def get_compas_tuner_search_kwargs(\n", - " build_compas_model, *, max_trials, executions_per_trial\n", - "):\n", - " compas_tuner_search_kwargs = dict(\n", - " build_model_f=build_compas_model,\n", - " tuner_name=\"BayesianOptimization\",\n", - " train_ds=compas_train_ds,\n", - " test_ds=compas_test_ds,\n", - " objective=Objective(\"val_accuracy\", direction=\"max\"),\n", - " max_epochs=20,\n", - " executions_per_trial=executions_per_trial,\n", - " dir_root=\"/tmp/tuner/compas_tuner\",\n", - " project_name=\"compas_tuner\",\n", - " max_trials=max_trials,\n", - " )\n", - " return compas_tuner_search_kwargs" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "compas_tuner = find_hyperparameters(\n", - " **get_compas_tuner_search_kwargs(\n", - " build_compas_model, max_trials=100, executions_per_trial=5\n", - " )\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Experiment for Blog Dataset [1]\n", - "\n", - "Blog Feedback [1] is a dataset containing 54,270 data points from\n", - "blog posts. The raw HTML-documents of the blog posts were crawled and processed. The prediction\n", - "task associated with the data is the prediction of the number of comments in the upcoming 24 hours.\n", - "The feature of the dataset has 276 dimensions, and 8 attributes among them should be monotonically\n", - "non-decreasing with the prediction. They are A51, A52, A53, A54, A56, A57, A58, A59. Thus the `monotonicity_indicator` corrsponding to these features are set to 1. As done in [2], we only use the data points with targets smaller than the 90th percentile.\n", - "\n", - "\n", - "\n", - "\n", - "References:\n", - "\n", - "1. Krisztian Buza. Feedback prediction for blogs. In Data analysis, machine learning and knowledge discovery, pages 145–152. Springer, 2014\n", - "2. Xingchao Liu, Xing Han, Na Zhang, and Qiang Liu. Certified monotonic neural networks. Advances in Neural Information Processing Systems, 33:15427–15438, 2020\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "tf.keras.utils.set_random_seed(42)\n", - "\n", - "monotonicity_indicator = np.zeros((276))\n", - "monotonicity_indicator[50:54] = 1.0\n", - "monotonicity_indicator[55:59] = 1.0\n", - "\n", - "# convexity_indicator = None\n", - "\n", - "train_params = dict(\n", - " batch_size=256,\n", - " num_epochs=100,\n", - " units=4,\n", - " n_layers=2,\n", - " activation=\"elu\",\n", - " loss=\"mean_squared_error\",\n", - " metrics=tf.keras.metrics.RootMeanSquaredError(),\n", - " learning_rate=0.01,\n", - " is_classification=False,\n", - ")\n", - "\n", - "\n", - "history, monotonic_model = train_dataset(\n", - " dataset_name=\"blog\",\n", - " monotonicity_indicator=monotonicity_indicator,\n", - " # convexity_indicator=convexity_indicator,\n", - " train_params=train_params,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Experiment for Loan Dataset [1]\n", - "\n", - "Lending club loan *data*\n", - "contains complete loan data for all loans\n", - "issued through 2007-2015 of several banks. Each data point is a 28-dimensional feature including\n", - "the current loan status, latest payment information, and other additional features. The task is to\n", - "predict loan defaulters given the feature vector. The possibility of loan default should be nondecreasing w.r.t. number of public record bankruptcies, Debt-to-Income ratio, and\n", - "non-increasing w.r.t. credit score, length of employment, annual income. Thus the `monotonicity_indicator` corrsponding to these features are set to 1.\n", - "\n", - "\n", - "References:\n", - "\n", - "1. https://www.kaggle.com/wendykan/lending-club-loan-data (Note: Currently, the dataset seems to be withdrawn from kaggle)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "tf.keras.utils.set_random_seed(42)\n", - "\n", - "# monotonicity_indicator = np.array([-1, 1, -1, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", - "# 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])\n", - "monotonicity_indicator = np.array([-1, 1, -1, -1, 1] + [0] * 24)\n", - "\n", - "convexity_indicator = None\n", - "\n", - "train_params = dict(\n", - " batch_size=256,\n", - " num_epochs=20,\n", - " units=4,\n", - " n_layers=1,\n", - " activation=\"elu\",\n", - " loss=\"binary_crossentropy\",\n", - " metrics=\"accuracy\",\n", - " learning_rate=0.008,\n", - " is_classification=True,\n", - ")\n", - "\n", - "\n", - "history, monotonic_model = train_dataset(\n", - " dataset_name=\"loan\",\n", - " monotonicity_indicator=monotonicity_indicator,\n", - " # convexity_indicator=convexity_indicator,\n", - " train_params=train_params,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The figure above shows the table from our paper for reference. As can be seen from our experiments above, our proposed methodology performs comparable to or better than state-of-the-art" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "![Screenshot%202023-01-26%20at%2015.15.52.png](attachment:Screenshot%202023-01-26%20at%2015.15.52.png)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "python3", - "language": "python", - "name": "python3" - } - }, - "nbformat": 4, - "nbformat_minor": 1 + "nbformat": 4, + "nbformat_minor": 1 } diff --git a/nbs/index.ipynb b/nbs/index.ipynb index a8a401a..765c8ed 100644 --- a/nbs/index.ipynb +++ b/nbs/index.ipynb @@ -1,460 +1,460 @@ { - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Introduction\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Running in Google Colab\n", - "\n", - "You can execute this interactive tutorial in Google Colab by clicking the button below:\n", - " \n", - "\n", - " \"Open\n", - "" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | hide\n", - "\n", - "from IPython.display import Markdown, display_markdown\n", - "\n", - "try:\n", - " import google.colab\n", - "\n", - " in_colab = True\n", - "except:\n", - " in_colab = False\n", - "\n", - "if in_colab:\n", - " display(\n", - " Markdown(\n", - " \"\"\"\n", - "### If you see this message, you are running in Google Colab\n", - "Along with this interactive tutorial the content of this notebook is organized and formatted for documentation purpuoses. \n", - "\n", - "You can ignore the '# | hide', '# | notest' and '# | echo: false' comments, they are not important for the tutorial.\n", - " \"\"\"\n", - " )\n", - " )" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Summary" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This Python library implements Constrained Monotonic Neural Networks as described in:\n", - "\n", - "Davor Runje, Sharath M. Shankaranarayana, \"Constrained Monotonic Neural Networks\", in Proceedings of the 40th International Conference on Machine Learning, 2023. [[PDF](https://arxiv.org/pdf/2205.11775.pdf)].\n", - "\n", - "#### Abstract\n", - "\n", - "Wider adoption of neural networks in many critical domains such as finance and healthcare is\n", - "being hindered by the need to explain their predictions and to impose additional constraints on\n", - "them. Monotonicity constraint is one of the most\n", - "requested properties in real-world scenarios and\n", - "is the focus of this paper. One of the oldest ways\n", - "to construct a monotonic fully connected neural\n", - "network is to constrain signs on its weights. Unfortunately, this construction does not work with\n", - "popular non-saturated activation functions as it\n", - "can only approximate convex functions. We show\n", - "this shortcoming can be fixed by constructing two\n", - "additional activation functions from a typical unsaturated monotonic activation function and employing each of them on the part of neurons. Our\n", - "experiments show this approach of building monotonic neural networks has better accuracy when\n", - "compared to other state-of-the-art methods, while\n", - "being the simplest one in the sense of having the\n", - "least number of parameters, and not requiring\n", - "any modifications to the learning procedure or\n", - "post-learning steps. Finally, we prove it can approximate any continuous monotone function on\n", - "a compact subset of $\\mathbb{R}^n$.\n", - "\n", - "#### Citation\n", - "\n", - "If you use this library, please cite:\n", - "\n", - "``` title=\"bibtex\"\n", - "@inproceedings{runje2023,\n", - " title={Constrained Monotonic Neural Networks},\n", - " author={Davor Runje and Sharath M. Shankaranarayana},\n", - " booktitle={Proceedings of the 40th {International Conference on Machine Learning}},\n", - " year={2023}\n", - "}\n", - "```\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Python package" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This package contains an implementation of our Monotonic Dense Layer `MonoDense` (Constrained Monotonic Fully Connected Layer). Below is the figure from the paper for reference.\n", - "\n", - "In the code, the variable `monotonicity_indicator` corresponds to **t** in the figure and parameters `is_convex`, `is_concave` and `activation_weights` are used to calculate the activation selector **s** as follows:\n", - "\n", - "- if `is_convex` or `is_concave` is **True**, then the activation selector **s** will be (`units`, 0, 0) and (0, `units`, 0), respecively.\n", - "\n", - "- if both `is_convex` or `is_concave` is **False**, then the `activation_weights` represent ratios between $\\breve{s}$, $\\hat{s}$ and $\\tilde{s}$, respecively. E.g. if `activation_weights = (2, 2, 1)` and `units = 10`, then\n", - "\n", - "$$\n", - "(\\breve{s}, \\hat{s}, \\tilde{s}) = (4, 4, 2)\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "![mono-dense-layer-diagram](https://github.com/airtai/monotonic-nn/raw/main/nbs/images/mono-dense-layer-diagram.png)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Install" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "``` sh\n", - "pip install monotonic-nn\n", - "```" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | hide\n", - "\n", - "if in_colab:\n", - " !pip install monotonic-nn" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### How to use" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# | hide\n", - "\n", - "import os\n", - "\n", - "os.environ[\"TF_FORCE_GPU_ALLOW_GROWTH\"] = \"true\"" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In this example, we'll assume we have a simple dataset with three inputs values $x_1$, $x_2$ and $x_3$ sampled from the normal distribution, while the output value $y$ is calculated according to the following formula before adding Gaussian noise to it:\n", - "\n", - "$y = x_1^3 + \\sin\\left(\\frac{x_2}{2 \\pi}\\right) + e^{-x_3}$" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
x0x1x2y
0.304717-1.0399840.7504510.234541
0.940565-1.951035-1.3021804.199094
0.127840-0.316243-0.0168010.834086
-0.8530440.8793980.777792-0.093359
0.0660311.1272410.4675090.780875
\n" - ], - "text/plain": [ - "" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# | echo: false\n", - "\n", - "import numpy as np\n", - "import pandas as pd\n", - "\n", - "rng = np.random.default_rng(42)\n", - "\n", - "\n", - "def generate_data(no_samples: int, noise: float):\n", - " x = rng.normal(size=(no_samples, 3))\n", - " y = x[:, 0] ** 3\n", - " y += np.sin(x[:, 1] / (2 * np.pi))\n", - " y += np.exp(-x[:, 2])\n", - " y += noise * rng.normal(size=no_samples)\n", - " return x, y\n", - "\n", - "\n", - "x_train, y_train = generate_data(10_000, noise=0.1)\n", - "x_val, y_val = generate_data(10_000, noise=0.0)\n", - "\n", - "d = {f\"x{i}\": x_train[:5, i] for i in range(3)}\n", - "d[\"y\"] = y_train[:5]\n", - "pd.DataFrame(d).style.hide(axis=\"index\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now, we'll use the `MonoDense` layer instead of `Dense` layer to build a simple monotonic network. By default, the `MonoDense` layer assumes the output of the layer is monotonically increasing with all inputs. This assumtion is always true for all layers except possibly the first one. For the first layer, we use `monotonicity_indicator` to specify which input parameters are monotonic and to specify are they increasingly or decreasingly monotonic:\n", - "\n", - "- set 1 for increasingly monotonic parameter,\n", - "\n", - "- set -1 for decreasingly monotonic parameter, and\n", - "\n", - "- set 0 otherwise.\n", - "\n", - "In our case, the `monotonicity_indicator` is `[1, 0, -1]` because $y$ is:\n", - "\n", - "- monotonically increasing w.r.t. $x_1$ $\\left(\\frac{\\partial y}{x_1} = 3 {x_1}^2 \\geq 0\\right)$, and\n", - "\n", - "- monotonically decreasing w.r.t. $x_3$ $\\left(\\frac{\\partial y}{x_3} = - e^{-x_2} \\leq 0\\right)$.\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Model: \"sequential\"\n", - "_________________________________________________________________\n", - " Layer (type) Output Shape Param # \n", - "=================================================================\n", - " mono_dense (MonoDense) (None, 128) 512 \n", - " \n", - " mono_dense_1 (MonoDense) (None, 128) 16512 \n", - " \n", - " mono_dense_2 (MonoDense) (None, 1) 129 \n", - " \n", - "=================================================================\n", - "Total params: 17,153\n", - "Trainable params: 17,153\n", - "Non-trainable params: 0\n", - "_________________________________________________________________\n" - ] - } - ], - "source": [ - "from tensorflow.keras import Sequential\n", - "from tensorflow.keras.layers import Dense, Input\n", - "\n", - "from airt.keras.layers import MonoDense\n", - "\n", - "model = Sequential()\n", - "\n", - "model.add(Input(shape=(3,)))\n", - "monotonicity_indicator = [1, 0, -1]\n", - "model.add(\n", - " MonoDense(128, activation=\"elu\", monotonicity_indicator=monotonicity_indicator)\n", - ")\n", - "model.add(MonoDense(128, activation=\"elu\"))\n", - "model.add(MonoDense(1))\n", - "\n", - "model.summary()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now we can train the model as usual using `Model.fit`:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 1/10\n", - "313/313 [==============================] - 3s 5ms/step - loss: 9.4221 - val_loss: 6.1277\n", - "Epoch 2/10\n", - "313/313 [==============================] - 1s 4ms/step - loss: 4.6001 - val_loss: 2.7813\n", - "Epoch 3/10\n", - "313/313 [==============================] - 1s 4ms/step - loss: 1.6221 - val_loss: 2.1111\n", - "Epoch 4/10\n", - "313/313 [==============================] - 1s 4ms/step - loss: 0.9479 - val_loss: 0.2976\n", - "Epoch 5/10\n", - "313/313 [==============================] - 1s 4ms/step - loss: 0.9008 - val_loss: 0.3240\n", - "Epoch 6/10\n", - "313/313 [==============================] - 1s 4ms/step - loss: 0.5027 - val_loss: 0.1455\n", - "Epoch 7/10\n", - "313/313 [==============================] - 1s 4ms/step - loss: 0.4360 - val_loss: 0.1144\n", - "Epoch 8/10\n", - "313/313 [==============================] - 1s 4ms/step - loss: 0.4993 - val_loss: 0.1211\n", - "Epoch 9/10\n", - "313/313 [==============================] - 1s 4ms/step - loss: 0.3162 - val_loss: 1.0021\n", - "Epoch 10/10\n", - "313/313 [==============================] - 1s 4ms/step - loss: 0.2640 - val_loss: 0.2522\n" - ] + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Introduction\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Running in Google Colab\n", + "\n", + "You can execute this interactive tutorial in Google Colab by clicking the button below:\n", + " \n", + "\n", + " \"Open\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | hide\n", + "\n", + "from IPython.display import Markdown, display_markdown\n", + "\n", + "try:\n", + " import google.colab\n", + "\n", + " in_colab = True\n", + "except:\n", + " in_colab = False\n", + "\n", + "if in_colab:\n", + " display(\n", + " Markdown(\n", + " \"\"\"\n", + "### If you see this message, you are running in Google Colab\n", + "Along with this interactive tutorial the content of this notebook is organized and formatted for documentation purpuoses. \n", + "\n", + "You can ignore the '# | hide', '# | notest' and '# | echo: false' comments, they are not important for the tutorial.\n", + " \"\"\"\n", + " )\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Summary" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This Python library implements Constrained Monotonic Neural Networks as described in:\n", + "\n", + "Davor Runje, Sharath M. Shankaranarayana, \"Constrained Monotonic Neural Networks\", in Proceedings of the 40th International Conference on Machine Learning, 2023. [[PDF](https://arxiv.org/pdf/2205.11775.pdf)].\n", + "\n", + "#### Abstract\n", + "\n", + "Wider adoption of neural networks in many critical domains such as finance and healthcare is\n", + "being hindered by the need to explain their predictions and to impose additional constraints on\n", + "them. Monotonicity constraint is one of the most\n", + "requested properties in real-world scenarios and\n", + "is the focus of this paper. One of the oldest ways\n", + "to construct a monotonic fully connected neural\n", + "network is to constrain signs on its weights. Unfortunately, this construction does not work with\n", + "popular non-saturated activation functions as it\n", + "can only approximate convex functions. We show\n", + "this shortcoming can be fixed by constructing two\n", + "additional activation functions from a typical unsaturated monotonic activation function and employing each of them on the part of neurons. Our\n", + "experiments show this approach of building monotonic neural networks has better accuracy when\n", + "compared to other state-of-the-art methods, while\n", + "being the simplest one in the sense of having the\n", + "least number of parameters, and not requiring\n", + "any modifications to the learning procedure or\n", + "post-learning steps. Finally, we prove it can approximate any continuous monotone function on\n", + "a compact subset of $\\mathbb{R}^n$.\n", + "\n", + "#### Citation\n", + "\n", + "If you use this library, please cite:\n", + "\n", + "``` title=\"bibtex\"\n", + "@inproceedings{runje2023,\n", + " title={Constrained Monotonic Neural Networks},\n", + " author={Davor Runje and Sharath M. Shankaranarayana},\n", + " booktitle={Proceedings of the 40th {International Conference on Machine Learning}},\n", + " year={2023}\n", + "}\n", + "```\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Python package" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This package contains an implementation of our Monotonic Dense Layer `MonoDense` (Constrained Monotonic Fully Connected Layer). Below is the figure from the paper for reference.\n", + "\n", + "In the code, the variable `monotonicity_indicator` corresponds to **t** in the figure and parameters `is_convex`, `is_concave` and `activation_weights` are used to calculate the activation selector **s** as follows:\n", + "\n", + "- if `is_convex` or `is_concave` is **True**, then the activation selector **s** will be (`units`, 0, 0) and (0, `units`, 0), respectively.\n", + "\n", + "- if both `is_convex` or `is_concave` is **False**, then the `activation_weights` represent ratios between $\\breve{s}$, $\\hat{s}$ and $\\tilde{s}$, respectively. E.g. if `activation_weights = (2, 2, 1)` and `units = 10`, then\n", + "\n", + "$$\n", + "(\\breve{s}, \\hat{s}, \\tilde{s}) = (4, 4, 2)\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![mono-dense-layer-diagram](https://github.com/airtai/monotonic-nn/raw/main/nbs/images/mono-dense-layer-diagram.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Install" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "``` sh\n", + "pip install monotonic-nn\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | hide\n", + "\n", + "if in_colab:\n", + " !pip install monotonic-nn" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### How to use" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | hide\n", + "\n", + "import os\n", + "\n", + "os.environ[\"TF_FORCE_GPU_ALLOW_GROWTH\"] = \"true\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this example, we'll assume we have a simple dataset with three inputs values $x_1$, $x_2$ and $x_3$ sampled from the normal distribution, while the output value $y$ is calculated according to the following formula before adding Gaussian noise to it:\n", + "\n", + "$y = x_1^3 + \\sin\\left(\\frac{x_2}{2 \\pi}\\right) + e^{-x_3}$" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
x0x1x2y
0.304717-1.0399840.7504510.234541
0.940565-1.951035-1.3021804.199094
0.127840-0.316243-0.0168010.834086
-0.8530440.8793980.777792-0.093359
0.0660311.1272410.4675090.780875
\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": null, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# | echo: false\n", + "\n", + "import numpy as np\n", + "import pandas as pd\n", + "\n", + "rng = np.random.default_rng(42)\n", + "\n", + "\n", + "def generate_data(no_samples: int, noise: float):\n", + " x = rng.normal(size=(no_samples, 3))\n", + " y = x[:, 0] ** 3\n", + " y += np.sin(x[:, 1] / (2 * np.pi))\n", + " y += np.exp(-x[:, 2])\n", + " y += noise * rng.normal(size=no_samples)\n", + " return x, y\n", + "\n", + "\n", + "x_train, y_train = generate_data(10_000, noise=0.1)\n", + "x_val, y_val = generate_data(10_000, noise=0.0)\n", + "\n", + "d = {f\"x{i}\": x_train[:5, i] for i in range(3)}\n", + "d[\"y\"] = y_train[:5]\n", + "pd.DataFrame(d).style.hide(axis=\"index\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, we'll use the `MonoDense` layer instead of `Dense` layer to build a simple monotonic network. By default, the `MonoDense` layer assumes the output of the layer is monotonically increasing with all inputs. This assumption is always true for all layers except possibly the first one. For the first layer, we use `monotonicity_indicator` to specify which input parameters are monotonic and to specify are they increasingly or decreasingly monotonic:\n", + "\n", + "- set 1 for increasingly monotonic parameter,\n", + "\n", + "- set -1 for decreasingly monotonic parameter, and\n", + "\n", + "- set 0 otherwise.\n", + "\n", + "In our case, the `monotonicity_indicator` is `[1, 0, -1]` because $y$ is:\n", + "\n", + "- monotonically increasing w.r.t. $x_1$ $\\left(\\frac{\\partial y}{x_1} = 3 {x_1}^2 \\geq 0\\right)$, and\n", + "\n", + "- monotonically decreasing w.r.t. $x_3$ $\\left(\\frac{\\partial y}{x_3} = - e^{-x_2} \\leq 0\\right)$.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: \"sequential\"\n", + "_________________________________________________________________\n", + " Layer (type) Output Shape Param # \n", + "=================================================================\n", + " mono_dense (MonoDense) (None, 128) 512 \n", + " \n", + " mono_dense_1 (MonoDense) (None, 128) 16512 \n", + " \n", + " mono_dense_2 (MonoDense) (None, 1) 129 \n", + " \n", + "=================================================================\n", + "Total params: 17,153\n", + "Trainable params: 17,153\n", + "Non-trainable params: 0\n", + "_________________________________________________________________\n" + ] + } + ], + "source": [ + "from tensorflow.keras import Sequential\n", + "from tensorflow.keras.layers import Dense, Input\n", + "\n", + "from airt.keras.layers import MonoDense\n", + "\n", + "model = Sequential()\n", + "\n", + "model.add(Input(shape=(3,)))\n", + "monotonicity_indicator = [1, 0, -1]\n", + "model.add(\n", + " MonoDense(128, activation=\"elu\", monotonicity_indicator=monotonicity_indicator)\n", + ")\n", + "model.add(MonoDense(128, activation=\"elu\"))\n", + "model.add(MonoDense(1))\n", + "\n", + "model.summary()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can train the model as usual using `Model.fit`:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/10\n", + "313/313 [==============================] - 3s 5ms/step - loss: 9.4221 - val_loss: 6.1277\n", + "Epoch 2/10\n", + "313/313 [==============================] - 1s 4ms/step - loss: 4.6001 - val_loss: 2.7813\n", + "Epoch 3/10\n", + "313/313 [==============================] - 1s 4ms/step - loss: 1.6221 - val_loss: 2.1111\n", + "Epoch 4/10\n", + "313/313 [==============================] - 1s 4ms/step - loss: 0.9479 - val_loss: 0.2976\n", + "Epoch 5/10\n", + "313/313 [==============================] - 1s 4ms/step - loss: 0.9008 - val_loss: 0.3240\n", + "Epoch 6/10\n", + "313/313 [==============================] - 1s 4ms/step - loss: 0.5027 - val_loss: 0.1455\n", + "Epoch 7/10\n", + "313/313 [==============================] - 1s 4ms/step - loss: 0.4360 - val_loss: 0.1144\n", + "Epoch 8/10\n", + "313/313 [==============================] - 1s 4ms/step - loss: 0.4993 - val_loss: 0.1211\n", + "Epoch 9/10\n", + "313/313 [==============================] - 1s 4ms/step - loss: 0.3162 - val_loss: 1.0021\n", + "Epoch 10/10\n", + "313/313 [==============================] - 1s 4ms/step - loss: 0.2640 - val_loss: 0.2522\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": null, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from tensorflow.keras.optimizers import Adam\n", + "from tensorflow.keras.optimizers.schedules import ExponentialDecay\n", + "\n", + "lr_schedule = ExponentialDecay(\n", + " initial_learning_rate=0.01,\n", + " decay_steps=10_000 // 32,\n", + " decay_rate=0.9,\n", + ")\n", + "optimizer = Adam(learning_rate=lr_schedule)\n", + "model.compile(optimizer=optimizer, loss=\"mse\")\n", + "\n", + "model.fit(\n", + " x=x_train, y=y_train, batch_size=32, validation_data=(x_val, y_val), epochs=10\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## License" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\"Creative
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.\n", + "\n", + "You are free to:\n", + "\n", + "- Share β€” copy and redistribute the material in any medium or format\n", + "\n", + "- Adapt β€” remix, transform, and build upon the material\n", + "\n", + "The licensor cannot revoke these freedoms as long as you follow the license terms.\n", + "\n", + "Under the following terms:\n", + "\n", + "- Attribution β€” You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.\n", + "\n", + "- NonCommercial β€” You may not use the material for commercial purposes.\n", + "\n", + "- ShareAlike β€” If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original.\n", + "\n", + "- No additional restrictions β€” You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "python3", + "language": "python", + "name": "python3" + } }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from tensorflow.keras.optimizers import Adam\n", - "from tensorflow.keras.optimizers.schedules import ExponentialDecay\n", - "\n", - "lr_schedule = ExponentialDecay(\n", - " initial_learning_rate=0.01,\n", - " decay_steps=10_000 // 32,\n", - " decay_rate=0.9,\n", - ")\n", - "optimizer = Adam(learning_rate=lr_schedule)\n", - "model.compile(optimizer=optimizer, loss=\"mse\")\n", - "\n", - "model.fit(\n", - " x=x_train, y=y_train, batch_size=32, validation_data=(x_val, y_val), epochs=10\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## License" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\"Creative
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.\n", - "\n", - "You are free to:\n", - "\n", - "- Share β€” copy and redistribute the material in any medium or format\n", - "\n", - "- Adapt β€” remix, transform, and build upon the material\n", - "\n", - "The licensor cannot revoke these freedoms as long as you follow the license terms.\n", - "\n", - "Under the following terms:\n", - "\n", - "- Attribution β€” You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.\n", - "\n", - "- NonCommercial β€” You may not use the material for commercial purposes.\n", - "\n", - "- ShareAlike β€” If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original.\n", - "\n", - "- No additional restrictions β€” You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "python3", - "language": "python", - "name": "python3" - } - }, - "nbformat": 4, - "nbformat_minor": 4 + "nbformat": 4, + "nbformat_minor": 4 } diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..e3bafc1 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,251 @@ +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" + +[project] +name = "monotonic-nn" +description = "Implementation of the constrained monotonic neural networks." +readme = "README.md" +authors = [ + { name = "airt", email = "info@airt.ai" }, +] + +keywords = ["python"] + +requires-python = ">=3.9,<3.13" + +classifiers = [ + "Development Status :: 5 - Production/Stable", + "License :: OSI Approved :: Apache Software License", + "Programming Language :: Python", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Operating System :: OS Independent", + "Topic :: Internet", + "Topic :: Software Development :: Libraries :: Application Frameworks", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: Software Development :: Libraries", + "Topic :: Software Development", + "Typing :: Typed", + "Intended Audience :: Developers", + "Intended Audience :: Information Technology", + "Intended Audience :: System Administrators", +] + +dynamic = ["version"] + +dependencies = [ + "tensorflow>=2.10,<3" +] + +[project.optional-dependencies] + +docs = [ +] + +# dev dependencies +devdocs = [ + "mkdocs-material==9.5.17", + "mkdocs-static-i18n==1.2.2", + "mdx-include==1.4.2", + "mkdocstrings[python]==0.24.3", + "mkdocs-literate-nav==0.6.1", + "mkdocs-git-revision-date-localized-plugin==1.2.4", + "mike==2.0.0", # versioning + "mkdocs-minify-plugin==0.8.0", + "mkdocs-macros-plugin==1.0.5", # includes with variables + "mkdocs-glightbox==0.3.7", # img zoom + "pillow==10.3.0", + "cairosvg==2.7.1", + "matplotlib==3.8.4", + "pandas==2.2.1", + "seaborn==0.13.2", + "typer==0.12.1", +] + +lint = [ + "types-PyYAML", + "types-setuptools", + "types-Pygments", + "types-docutils", + "mypy==1.9.0", + "ruff==0.3.5", + "bandit==1.7.8", + "semgrep==1.67.0", +] + +test-core = [ + "coverage[toml]==7.4.4", + "pytest==8.1.1", +] + +testing = [ + "monotonic-nn[test-core]", +] + +dev = [ + "monotonic-nn[lint,testing,devdocs]", + "pre-commit==3.7.0", + "detect-secrets==1.4.0", +] + +[project.urls] +Homepage = "https://monotonic.airt.ai/" +Documentation = "https://monotonic.airt.ai/" +Tracker = "https://github.com/airtai/monotonic-nn/issues" +Source = "https://github.com/airtai/monotonic-nn" + +[tool.hatch.version] +path = "airt/__about__.py" + +[tool.hatch.build] +skip-excluded-dirs = true +exclude = [ + "/tests", + "/docs", +] + +[tool.hatch.build.targets.wheel] +packages = ["airt"] + +[tool.mypy] + +files = [ + "airt", + "tests", + "docs", + "examples", +] + +strict = true +python_version = "3.9" +ignore_missing_imports = true +install_types = true +non_interactive = true +plugins = [] + +# from https://blog.wolt.com/engineering/2021/09/30/professional-grade-mypy-configuration/ +disallow_untyped_defs = true +no_implicit_optional = true +check_untyped_defs = true +warn_return_any = true +show_error_codes = true +warn_unused_ignores = false + +disallow_incomplete_defs = true +disallow_untyped_decorators = true +disallow_any_unimported = false + +[tool.ruff] +fix = true +line-length = 88 +target-version = "py39" +include = [ + "airt/**/*.py", + "tests/**/*.pyi", + "examples/**/*.py", + "docs/*.py", + "docs/docs_src/**/*.py", + "pyproject.toml", +] +exclude = ["docs/docs_src"] + +[tool.ruff.lint] +select = [ + "E", # pycodestyle errors https://docs.astral.sh/ruff/rules/#error-e + "W", # pycodestyle warnings https://docs.astral.sh/ruff/rules/#warning-w + "C90", # mccabe https://docs.astral.sh/ruff/rules/#mccabe-c90 + "N", # pep8-naming https://docs.astral.sh/ruff/rules/#pep8-naming-n + "D", # pydocstyle https://docs.astral.sh/ruff/rules/#pydocstyle-d + "I", # isort https://docs.astral.sh/ruff/rules/#isort-i + "F", # pyflakes https://docs.astral.sh/ruff/rules/#pyflakes-f + "ASYNC", # flake8-async https://docs.astral.sh/ruff/rules/#flake8-async-async + "C4", # flake8-comprehensions https://docs.astral.sh/ruff/rules/#flake8-comprehensions-c4 + "B", # flake8-bugbear https://docs.astral.sh/ruff/rules/#flake8-bugbear-b + "Q", # flake8-quotes https://docs.astral.sh/ruff/rules/#flake8-quotes-q + "T20", # flake8-print https://docs.astral.sh/ruff/rules/#flake8-print-t20 + "SIM", # flake8-simplify https://docs.astral.sh/ruff/rules/#flake8-simplify-sim + "PT", # flake8-pytest-style https://docs.astral.sh/ruff/rules/#flake8-pytest-style-pt + "PTH", # flake8-use-pathlib https://docs.astral.sh/ruff/rules/#flake8-use-pathlib-pth + "TCH", # flake8-type-checking https://docs.astral.sh/ruff/rules/#flake8-type-checking-tch + "RUF", # Ruff-specific rules https://docs.astral.sh/ruff/rules/#ruff-specific-rules-ruf + "PERF", # Perflint https://docs.astral.sh/ruff/rules/#perflint-perf + "UP", # pyupgrade https://docs.astral.sh/ruff/rules/#pyupgrade-up +] + +ignore = [ + "E501", # line too long, handled by formatter later + "C901", # too complex +] + +[tool.ruff.lint.isort] +case-sensitive = true + +[tool.ruff.format] +docstring-code-format = true + +[tool.ruff.pydocstyle] +convention = "google" + +[tool.ruff.flake8-bugbear] +extend-immutable-calls = [ +] + +[tool.pytest.ini_options] +minversion = "7.0" +addopts = "-q -m 'not slow'" +testpaths = [ + "tests", +] +markers = [ + "slow", + "all", +] + +[tool.coverage.run] +parallel = true +branch = true +concurrency = [ + "multiprocessing", + "thread" +] +source = [ + "docs/docs_src", + "examples", + "airt", + "tests" +] +context = '${CONTEXT}' +omit = [ + "**/__init__.py", +] + +[tool.coverage.report] +show_missing = true +skip_empty = true +exclude_also = [ + "if __name__ == .__main__.:", + "self.logger", + "def __repr__", + "lambda: None", + "from .*", + "import .*", + '@(abc\.)?abstractmethod', + "raise NotImplementedError", + 'raise AssertionError', + 'logger\..*', + "pass", + '\.\.\.', +] +omit = [ + '*/__about__.py', + '*/__main__.py', + '*/__init__.py', +] + +[tool.bandit] diff --git a/scripts/build-docs-pre-commit.sh b/scripts/build-docs-pre-commit.sh new file mode 100755 index 0000000..2e1e1d9 --- /dev/null +++ b/scripts/build-docs-pre-commit.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash + +# from: https://jaredkhan.com/blog/mypy-pre-commit + +# A script for running mypy, +# with all its dependencies installed. + +set -o errexit + +# Change directory to the project root directory. +cd "$(dirname "$0")"/.. + +# Install the dependencies into the mypy env. +# Note that this can take seconds to run. +# In my case, I need to use a custom index URL. +# Avoid pip spending time quietly retrying since +# likely cause of failure is lack of VPN connection. +pip install --editable ".[dev]" \ + --retries 1 \ + --no-input \ + --quiet + +# Run on all files, +# ignoring the paths passed to this script, +# so as not to miss type errors. +# My repo makes use of namespace packages. +# Use the namespace-packages flag +# and specify the package to run on explicitly. +# Note that we do not use --ignore-missing-imports, +# as this can give us false confidence in our results. +./scripts/build-docs.sh diff --git a/scripts/build-docs.sh b/scripts/build-docs.sh new file mode 100755 index 0000000..254f4a0 --- /dev/null +++ b/scripts/build-docs.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +set -e +set -x + +cd docs; python docs.py build diff --git a/scripts/lint-pre-commit.sh b/scripts/lint-pre-commit.sh new file mode 100755 index 0000000..9b4c7c7 --- /dev/null +++ b/scripts/lint-pre-commit.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash + +# from: https://jaredkhan.com/blog/mypy-pre-commit + +# A script for running mypy, +# with all its dependencies installed. + +set -o errexit + +# Change directory to the project root directory. +cd "$(dirname "$0")"/.. + +# Install the dependencies into the mypy env. +# Note that this can take seconds to run. +# In my case, I need to use a custom index URL. +# Avoid pip spending time quietly retrying since +# likely cause of failure is lack of VPN connection. +pip install --editable ".[dev]" \ + --retries 1 \ + --no-input \ + --quiet + +# Run on all files, +# ignoring the paths passed to this script, +# so as not to miss type errors. +# My repo makes use of namespace packages. +# Use the namespace-packages flag +# and specify the package to run on explicitly. +# Note that we do not use --ignore-missing-imports, +# as this can give us false confidence in our results. +./scripts/lint.sh diff --git a/scripts/lint.sh b/scripts/lint.sh new file mode 100755 index 0000000..b91e472 --- /dev/null +++ b/scripts/lint.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +echo "Running ruff linter (isort, flake, pyupgrade, etc. replacement)..." +ruff check + +echo "Running ruff formatter (black replacement)..." +ruff format diff --git a/scripts/publish.sh b/scripts/publish.sh new file mode 100755 index 0000000..bc704d5 --- /dev/null +++ b/scripts/publish.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +hatch clean +hatch build +hatch publish diff --git a/scripts/serve-docs.sh b/scripts/serve-docs.sh new file mode 100755 index 0000000..5cd16f6 --- /dev/null +++ b/scripts/serve-docs.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +set -e +set -x + +cd docs; python docs.py live "$@" diff --git a/scripts/static-analysis.sh b/scripts/static-analysis.sh new file mode 100755 index 0000000..b9fb4d6 --- /dev/null +++ b/scripts/static-analysis.sh @@ -0,0 +1,11 @@ +#!/bin/bash +set -e + +echo "Running mypy..." +mypy airt tests docs/*.py docs/docs_src examples + +echo "Running bandit..." +bandit -c pyproject.toml -r airt + +echo "Running semgrep..." +semgrep scan --config auto --error diff --git a/scripts/static-pre-commit.sh b/scripts/static-pre-commit.sh new file mode 100755 index 0000000..b8b6d1b --- /dev/null +++ b/scripts/static-pre-commit.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash + +# taken from: https://jaredkhan.com/blog/mypy-pre-commit + +# A script for running mypy, +# with all its dependencies installed. + +set -o errexit + +# Change directory to the project root directory. +cd "$(dirname "$0")"/.. + +# Install the dependencies into the mypy env. +# Note that this can take seconds to run. +# In my case, I need to use a custom index URL. +# Avoid pip spending time quietly retrying since +# likely cause of failure is lack of VPN connection. +pip install --editable ".[dev]" \ + --retries 1 \ + --no-input \ + --quiet + +# Run on all files, +# ignoring the paths passed to this script, +# so as not to miss type errors. +# My repo makes use of namespace packages. +# Use the namespace-packages flag +# and specify the package to run on explicitly. +# Note that we do not use --ignore-missing-imports, +# as this can give us false confidence in our results. +./scripts/static-analysis.sh diff --git a/scripts/test-cov.sh b/scripts/test-cov.sh new file mode 100755 index 0000000..f8a4389 --- /dev/null +++ b/scripts/test-cov.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +bash scripts/test.sh -m "all" "$@" + +coverage combine +coverage report --show-missing --skip-covered --sort=cover --precision=2 + +rm .coverage* diff --git a/scripts/test.sh b/scripts/test.sh new file mode 100755 index 0000000..f5529a2 --- /dev/null +++ b/scripts/test.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +coverage run -m pytest -x --ff "$@" diff --git a/settings.ini b/settings.ini deleted file mode 100644 index 0e6d135..0000000 --- a/settings.ini +++ /dev/null @@ -1,39 +0,0 @@ -[DEFAULT] -# All sections below are required unless otherwise specified. -# See https://github.com/fastai/nbdev/blob/master/settings.ini for examples. - -### Python library ### -repo = monotonic-nn -lib_name = %(repo)s -version = 0.3.4 -min_python = 3.8 -license = cc - -### nbdev ### -doc_path = _docs -lib_path = airt -nbs_path = nbs -recursive = True -tst_flags = notest skip -put_version_in_init = True -black_formatting = True -docs_versioning = minor - -### Docs ### -branch = main -custom_sidebar = True -doc_host = https://%(user)s.github.io -doc_baseurl = /%(repo)s -git_url = https://github.com/%(user)s/%(repo)s -title = %(lib_name)s - -### PyPI ### -audience = Developers -author = AIRT Technologies d.o.o. -author_email = info@airt.ai -copyright = 2022 onwards, %(author)s -description = Monotonic Neural Networks -keywords = tensorflow keras monotone "monotonic neural networks" "dense layer" -language = English -status = 4 -user = airtai diff --git a/setup.py b/setup.py deleted file mode 100644 index 81701d7..0000000 --- a/setup.py +++ /dev/null @@ -1,84 +0,0 @@ -from pkg_resources import parse_version -from configparser import ConfigParser -import setuptools -assert parse_version(setuptools.__version__)>=parse_version('36.2') - -# note: all settings are in settings.ini; edit there, not here -config = ConfigParser(delimiters=['=']) -config.read('settings.ini') -cfg = config['DEFAULT'] - -cfg_keys = 'version description keywords author author_email'.split() -expected = cfg_keys + "lib_name user branch license status min_python audience language".split() -for o in expected: assert o in cfg, "missing expected setting: {}".format(o) -setup_cfg = {o:cfg[o] for o in cfg_keys} - -licenses = { - 'apache2': ('Apache Software License 2.0','OSI Approved :: Apache Software License'), - 'mit': ('MIT License', 'OSI Approved :: MIT License'), - 'gpl2': ('GNU General Public License v2', 'OSI Approved :: GNU General Public License v2 (GPLv2)'), - 'gpl3': ('GNU General Public License v3', 'OSI Approved :: GNU General Public License v3 (GPLv3)'), - 'bsd3': ('BSD License', 'OSI Approved :: BSD License'), - 'cc': ('Creative Commons License', 'Free for non-commercial use'), -} -statuses = [ '1 - Planning', '2 - Pre-Alpha', '3 - Alpha', - '4 - Beta', '5 - Production/Stable', '6 - Mature', '7 - Inactive' ] -py_versions = '3.6 3.7 3.8 3.9 3.10 3.11'.split() - -min_python = cfg['min_python'] -lic = licenses.get(cfg['license'].lower(), (cfg['license'], None)) - -requirements = ["tensorflow>=2.10.0"] - -experiments_requirements = [ - "keras-tuner[bayesian]==1.3.5" -] - -dev_requirements = [ - "nbdev_mkdocs==0.5.1", - "pytest==7.3.1", - "pandas>=1.3.5", - "nbqa==1.7.0", - "black==23.3.0", - "isort==5.12.0", - "matplotlib==3.7.1", - "seaborn==0.12.2", - "mypy==1.3.0", - "bandit==1.7.5", - "semgrep==1.23.0", - "tqdm", -] - -project_urls = { - 'Bug Tracker': cfg['git_url'] + '/issues', - 'CI': cfg['git_url'] + '/actions', - 'Documentation': 'https://monotonic.airt.ai/', - 'Tutorial': 'https://colab.research.google.com/github/airtai/monotonic-nn/blob/main/nbs/index.ipynb' -} - -setuptools.setup( - name = cfg['lib_name'], - license = lic[0], - classifiers = [ - 'Development Status :: ' + statuses[int(cfg['status'])], - 'Intended Audience :: ' + cfg['audience'].title(), - 'Natural Language :: ' + cfg['language'].title(), - ] + ['Programming Language :: Python :: '+o for o in py_versions[py_versions.index(min_python):]] + (['License :: ' + lic[1] ] if lic[1] else []), - url = cfg['git_url'], - project_urls=project_urls, - packages = setuptools.find_packages(), - include_package_data = True, - install_requires = requirements, - extras_require={ 'dev': dev_requirements + experiments_requirements, "experiments": experiments_requirements }, - dependency_links = cfg.get('dep_links','').split(), - python_requires = '>=' + cfg['min_python'], - long_description = open('README.md').read(), - long_description_content_type = 'text/markdown', - zip_safe = False, - entry_points = { - 'console_scripts': cfg.get('console_scripts','').split(), - 'nbdev': [f'{cfg.get("lib_path")}={cfg.get("lib_path")}._modidx:d'] - }, - **setup_cfg) - - diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/keras/__init__.py b/tests/keras/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/keras/layers/__init__.py b/tests/keras/layers/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/keras/layers/test_mono_dense_layer.py b/tests/keras/layers/test_mono_dense_layer.py new file mode 100644 index 0000000..4ac4b81 --- /dev/null +++ b/tests/keras/layers/test_mono_dense_layer.py @@ -0,0 +1,30 @@ +import numpy as np +import tensorflow as tf + +from airt.keras.layers._mono_dense import get_activation_functions, apply_activations + + +def test_activation_functions() -> None: + a_convex, a_concave = get_activation_functions("relu") + assert a_convex(0) == 0 + assert a_concave(0) == 0 + assert a_convex(1) == 1 + assert a_concave(1) == 0 + assert a_convex(-1) == 0 + assert a_concave(-1) == -1 + + x = tf.constant(np.arange(-10, 10.001, 0.1)) + y_convex = a_convex(x) + y_concave = a_concave(x) + np.testing.assert_almost_equal(y_convex.numpy(), -y_concave.numpy()[::-1]) + +def test_apply_activations() -> None: + a_convex, a_concave = get_activation_functions("relu") + rng = np.random.default_rng(42) + x = tf.constant(rng.normal(size=255)) + units = x.shape[0] + assert units % 2 == 1 + + y = apply_activations(x, units=units, convex_activation=a_convex, concave_activation=a_concave) + assert (y.numpy()[:units // 2 + 1] >= 0).all() + assert (y.numpy()[units // 2 + 1:] <= 0).all() diff --git a/tests/test_version.py b/tests/test_version.py new file mode 100644 index 0000000..287d10a --- /dev/null +++ b/tests/test_version.py @@ -0,0 +1,5 @@ +import airt + + +def test_version() -> None: + assert airt.__version__ is not None