Coder Social home page Coder Social logo

ahijevyc / hwt_mode Goto Github PK

View Code? Open in Web Editor NEW

This project forked from ncar/hwt_mode

0.0 0.0 0.0 225.15 MB

Using image recognition to classify storm modes in a numerical model.

License: MIT License

Shell 0.02% Python 0.46% Jupyter Notebook 99.52%

hwt_mode's Introduction

HWT_mode

The HWT_mode package uses machine learning image recognition to classify storm mode from convection-allowing numerical weather prediction model output. This initial package uses interpretation of the latent representations in a convolutional neural network to determine which storm mode they represent.

Requirements

HWT_mode requires Python >= 3.6. The HWT_mode package requires the following Python libraries:

  • tensorflow>=2.0
  • tensorflow-probability
  • numpy
  • scipy
  • matplotlib
  • pandas
  • scikit-learn
  • xarray
  • netcdf4
  • pyyaml
  • tqdm

This module is designed to operate on netCDF patch data generated by the hsdata script in the hagelslag package. If you have a large collection of model output, please install and run hagelslag first to generate the data needed for this package.

Installation

Install the miniconda python distribution in your chosen directory. The $ indicates command line inputs and should not be copied into your terminal.

$ wget -q https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
$ sh Miniconda3-latest-Linux-x86_64.sh -b

Include the base miniconda bin directory in your $PATH environment variable. Change $HOME to the appropriate path if you are not installing miniconda in your home directory.

$ export PATH="$HOME/miniconda/bin:$PATH"

Add the conda-forge channel and set it as the priority channel to prevent conflicts between the Anaconda and conda-forge versions of core libraries like numpy.

$ conda config --add channels conda-forge
$ conda config --set channel_priority strict

Now, create a new conda environment with the main dependencies (except tensorflow) installed in it. The --yes command will automatically install everything without any extra confirmation from you.

$ conda create -n mode --yes -c conda-forge python=3.7 pip numpy scipy matplotlib pandas xarray pyyaml netcdf4 scikit-learn tqdm pytest

To activate the newly created environment, run the following command.

$ conda activate mode

You can also edit your $PATH environment variable directly. Note that the environment path may differ depending on the version of miniconda you are using.

$ export PATH="$HOME/miniconda/envs/mode/bin:$PATH"

Verify that the correct Python environment is being used.

$ which python

Install tensorflow using pip. There is a tensorflow channel on conda-forge, but I have experienced issues with it in the past. For this package, I recommend using tensorflow 2.1.0, but any version of tensorflow beyond 2.0.0 should work (barring future significant API changes).

$ pip install tensorflow==2.1.0

If you have not already, clone the HWT_mode repository locally with git.

$ git clone https://github.com/djgagne/HWT_mode.git

Install the hwtmode package with pip. Note that any missing dependencies will also be installed with pip. Theoretically you could install everything with the command below once you have created a basic Python environment, but that may be risky.

$ cd HWT_mode
$ pip install .

Test your installation by first running pytest to verify the unit tests pass. Pytest will automatically detect any unit test files in your package and run them.

$ python -m pytest .

The final test is to run the train_mode_cnn.py script with the test data.

$ python -u train_mode_cnn.py config/ws_mode_cnn_train_small.yml -t -i -p

If all tests pass, and the train_mode_cnn.py script completes without any errors, you should be good to go for full-scale runs.

How to Run

Creating new convolutional neural networks and interpreting them can be done with the train_mode_cnn.py script. To run it, use the following command.

$ python -u train_mode_cnn.py config/config_file.yml -t -i -p

The -t option runs the training of the network, the -i option runs the interpretation functions (neuron activations and saliency maps), and the -p option runs the plotting functions. If one encounters an issue in any step, they can re-run that step only with the command flags. The script will reload the data, models, and interpretation information and continue from that point.

The config file format is described below.

data_path: "testdata/track_data_ncarstorm_3km_REFL_COM_ws_nc_small/" # path to netCDF patch files
patch_radius: 16 # number of grid cells from center to include from each patch.
input_variables: ["REFL_1KM_AGL_curr", "U10_curr", "V10_curr"] # Input variables to CNN
output_variables: ["UP_HELI_MAX_curr"] # Output variable for CNN
meta_variables: ["masks", "i", "j", "time", "centroid_lon", "centroid_lat",
                 "centroid_i", "centroid_j", "track_id", "track_step", "run_date"] 
# metadata variables to include in csv files generated from script.
train_start_date: "2011-04-26" # Beginning of training period
train_end_date: "2011-04-27" # Ending of training period
val_start_date: "2011-04-28" # Beginning of validation period
val_end_date: "2011-04-28" # End of validation period
test_start_date: "2011-04-28" # Beginning of testing period
test_end_date: "2011-04-28" # End of testing period
out_path: "model_cnn_20200416/" # Path to store model output and other derived files
classifier: 1 # If 1, classifier model used. If 0, regression model used.
classifier_threshold: 50 # Threshold for output variable if classifier is 1.
models: # You can specify multiple CNN model configurations below.
  cnn_20200416_000:
    min_filters: 8
    filter_width: 3
    filter_growth_rate: 1.5
    pooling_width: 2
    min_data_width: 4
    output_type: "sigmoid"
    pooling: "max"
    loss: "binary_crossentropy"
    learning_rate: 0.0001
    batch_size: 8
    epochs: 20
    dense_neurons: 4
    early_stopping: 0
    verbose: 1

Once the model is trained, running the interpretation code in real-time can be performed with run_mode_cnn.py.

hwt_mode's People

Contributors

ahijevyc avatar charlie-becker avatar djgagne avatar ggantos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.