Metadata-Version: 2.1
Name: easynas
Version: 0.2.1
Summary: A simple utility for generating CNN architectures automatically, using genetic algorithms.
Home-page: https://github.com/erap129/EasyNAS
Author: Elad Rapaport
Author-email: erap129@gmail.com
License: MIT
Download-URL: https://github.com/erap129/EasyNAS/archive/0.1.tar.gz
Keywords: NAS,GENETIC,CNN
Platform: UNKNOWN
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Topic :: Software Development :: Build Tools
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Description-Content-Type: text/markdown
Requires-Dist: tqdm
Requires-Dist: torch
Requires-Dist: numpy
Requires-Dist: pytorch-lightning
Requires-Dist: scikit-learn
Requires-Dist: pyeasyga

# EasyNAS - a simple and effective CNN architecture generator

## Purpose
Given a dataset, this python package will utilize genetic algorithms and Pytorch to optimize the structure a simple CNN for the task of classification. With simple meaning that the generated architecture is built of a series of layers, where each layers input is the output the previous one. 

## Installation
```python
pip install easynas
```

## Input data format
The input data should be split into training and validation sets, with the following dimensions:  
```math
[#samples, #channels, height, width]
```
This means that 2D image-like data is the expected input. If dealing, for example, with 1D time series data that contains a 'channels' dimension, one should include an extra dimension as such (example with numpy):  
```python
X = X[:, :, :, None]
```

## Usage example
```python
from easynas.genetic_algorithm import EasyNASGA
import torchvision
from sklearn.model_selection import train_test_split

train_data = torchvision.datasets.MNIST('/files/', train=True, download=True)
test_data = torchvision.datasets.MNIST('/files/', train=False, download=True)
X_train = train_data.data[:, None, :, :].float()
y_train = train_data.targets.float()
X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.2, random_state=42)
easyga = EasyNASGA(X_train, y_train, X_val, y_val, generations=5, population_size=10, max_epochs=1, weight_inheritance=True)
easyga.ga.run()
best_individual = easyga.get_best_individual()
print(f'best individual: {best_individual}')
```

## Credits
Anyone using this package for research/production purposes is requested to cite the following research articles:
```markdown
Rapaport, E., Poese, I., Zilberman, P., Holschke, O., & Puzis, R. (2020).
Predicting traffic overflows on private peering.
arXiv preprint arXiv:2010.01380.
```
https://arxiv.org/abs/2010.01380  
```markdown
Rapaport, Elad, Oren Shriki, and Rami Puzis.
"EEGNAS: Neural Architecture Search for Electroencephalography Data Analysis and Decoding."
International Workshop on Human Brain and Artificial Intelligence.
Springer, Singapore, 2019.
```
https://link.springer.com/chapter/10.1007/978-981-15-1398-5_1




