Metadata-Version: 2.1
Name: model-zoo
Version: 0.3.1
Summary: A framework to help you build model much more easily.
Home-page: https://github.com/ModelZoo/ModelZoo
Author: Germey
Author-email: cqc@cuiqingcai.com
License: MIT
Platform: UNKNOWN
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Requires-Python: >=3.5.0
Description-Content-Type: text/markdown
Requires-Dist: absl-py (>=0.5.0)
Requires-Dist: astor (>=0.7.1)
Requires-Dist: cycler (>=0.10.0)
Requires-Dist: gast (>=0.2.0)
Requires-Dist: grpcio (>=1.15.0)
Requires-Dist: h5py (>=2.8.0)
Requires-Dist: kiwisolver (>=1.0.1)
Requires-Dist: matplotlib (>=3.0.0)
Requires-Dist: numpy (>=1.15.2)
Requires-Dist: pandas (>=0.23.4)
Requires-Dist: protobuf (>=3.6.1)
Requires-Dist: pyparsing (>=2.2.2)
Requires-Dist: python-dateutil (==2.7.3)
Requires-Dist: scipy (>=1.1.0)
Requires-Dist: six (>=1.11.0)
Requires-Dist: sklearn
Requires-Dist: tensorflow (>=2.0.0)
Requires-Dist: tensorflow-gpu (>=2.0.0)
Requires-Dist: termcolor (>=1.1.0)
Requires-Dist: werkzeug (>=0.15.3)
Requires-Dist: loguru (>=0.3.2)
Requires-Dist: pyyaml (>=5.1.2)


# ModelZoo

A Scaffold to help you build Deep-learning Model much more easily, implemented with TensorFlow Eager Execution and Keras.

## Installation

You can install this package easily with pip:

```
pip3 install model-zoo
```

## Usage

Let's implement a linear-regression model quickly.

Here we use boston_housing dataset as example.

Define a linear model in models folder, named `model.py` and import its Class from `__init__.py`:

```python
from model_zoo.model import BaseModel
import tensorflow as tf

class HousePricePredictionModel(BaseModel):
    def __init__(self, config):
        super(HousePricePredictionModel, self).__init__(config)
        self.dense = tf.keras.layers.Dense(1)

    def call(self, inputs, training=None, mask=None):
        o = self.dense(inputs)
        return o
```

Then define a trainer like this, named `train.py`:

```python
from model_zoo.trainer import BaseTrainer
from model_zoo.preprocess import standardize
from model_zoo import flags, datasets

flags.DEFINE_integer('epochs', 100, 'Max epochs')
flags.DEFINE_string('model_class_name', 'HousePricePredictionModel', 'Model class name')

class Trainer(BaseTrainer):

    def prepare_data(self):
        (x_train, y_train), (x_eval, y_eval) = datasets.boston_housing.load_data()
        x_train, x_eval = standardize(x_train, x_eval)
        train_data, eval_data = (x_train, y_train), (x_eval, y_eval)
        return train_data, eval_data

if __name__ == '__main__':
    Trainer().run()

```

Now, we've finished this model!

Next we can run this model using this cmd:

```
python3 train.py
```

Outputs like this:

```
Epoch 1/100
 1/13 [=>............................] - ETA: 0s - loss: 816.1798
13/13 [==============================] - 0s 4ms/step - loss: 457.9925 - val_loss: 343.2489

Epoch 2/100
 1/13 [=>............................] - ETA: 0s - loss: 361.5632
13/13 [==============================] - 0s 3ms/step - loss: 274.7090 - val_loss: 206.7015
Epoch 00002: saving model to checkpoints/model-2.ckpt

Epoch 3/100
 1/13 [=>............................] - ETA: 0s - loss: 163.5308
13/13 [==============================] - 0s 3ms/step - loss: 172.4033 - val_loss: 128.0830

Epoch 4/100
 1/13 [=>............................] - ETA: 0s - loss: 115.4743
13/13 [==============================] - 0s 3ms/step - loss: 112.6434 - val_loss: 85.0848
Epoch 00004: saving model to checkpoints/model-4.ckpt

Epoch 5/100
 1/13 [=>............................] - ETA: 0s - loss: 149.8252
13/13 [==============================] - 0s 3ms/step - loss: 77.0281 - val_loss: 57.9716
....

Epoch 42/100
 7/13 [===============>..............] - ETA: 0s - loss: 20.5911
13/13 [==============================] - 0s 8ms/step - loss: 22.4666 - val_loss: 23.7161
Epoch 00042: saving model to checkpoints/model-42.ckpt
```

It runs only 42 epochs and stopped early, because the framework auto enabled early stop mechanism and there are no more good evaluation results for 20 epochs.

When finished, we can find two folders generated named `checkpoints` and `events`.

Go to `events` and run TensorBoard:

```
cd events
tensorboard --logdir=.
```

TensorBoard like this:

![](https://qiniu.cuiqingcai.com/2019-11-12-190237.png)

There are training and validation loss in the graph.

And also we can find checkpoints in `checkpoints` dir.

It saved the best model named `model.ckpt` according to eval score, and it also saved checkpoints every 2 epochs.

Next we can predict using existing checkpoints, define `infer.py` like this:

```python
from model_zoo.inferer import BaseInferer
from model_zoo.preprocess import standardize
from model_zoo import flags, datasets

flags.DEFINE_string('checkpoint_name', 'model-best.ckpt', help='Model name')

class Inferer(BaseInferer):

    def prepare_data(self):
        (x_train, y_train), (x_test, y_test) = datasets.boston_housing.load_data()
        _, x_test = standardize(x_train, x_test)
        return x_test

if __name__ == '__main__':
    result = Inferer().run()
    print(result)
```

Now we've restored the specified model `model.ckpt-38` and prepared test data, outputs like this:

```python
[[ 9.637125 ]
 [21.368305 ]
 [20.898445 ]
 [33.832504 ]
 [25.756516 ]
 [21.264557 ]
 [29.069794 ]
 [24.968184 ]
 ...
 [36.027283 ]
 [39.06852  ]
 [25.728745 ]
 [41.62165  ]
 [34.340042 ]
 [24.821484 ]]
```

OK, we've finished restoring and predicting. Just so convenient. [Here](https://github.com/ModelZoo/PricePrediction) is the code.

# More

If you want to find more models, just see [ModelZoo](https://github.com/ModelZoo).

