Package: dnnet
dnnetImplementation of Deep Neural Network with numpy.Now dnnet can run with GPU through cupy.dnnet provides high-level API to define and run neural network model.
User can turn on/off GPU layer-wise, that is, you can compute convolution layer with GPU, activation layer with CPU, and dropout layer with CPU, for example.Table of ContentsBrief tour of dnnet; Introduce small examples, supported methodologiesInstallationExample; Run sample scriptsUse in your projectBrief tour of dnnetQuick glance of usageUser can creates instance of NeuralNetwork, add layer one by one,finalize model, set optimizer, execute model fitting, and save model.In the below, some arguments are not specified to simplify the example.from dnnet.neuralnet import NeuralNetwork
from dnnet.training.optimizer import AdaGrad
from dnnet.training.weight_initialization import DefaultInitialization, He
from dnnet.training.loss_function import MultinomialCrossEntropy
from dnnet.layers.activation import Activation, ActivationLayer
from dnnet.layers.affine import AffineLayer
from dnnet.layers.batch_norm import BatchNormLayer
from dnnet.layers.convolution import ConvolutionLayer
from dnnet.layers.dropout import DropoutLayer


# Load x, y here

model = NeuralNetwork(input_shape=(1, 28, 28), dtype=np.float32)

model.add(ConvolutionLayer(filter_shape=(32, 3, 3))
model.add(BatchNormLayer())
model.add(ActivationLayer(activation=Activation.Type.relu))
model.add(DropoutLayer(drop_ratio=0.25))

model.add(AffineLayer(output_shape=10)
model.add(ActivationLayer(activation=Activation.Type.softmax)
model.compile()

optimizer = AdaGrad(learning_rate=1e-3, weight_decay=1e-3)
learning_curve = model.fit(
    x=x, y=y, epochs=5, batch=size=100, optimizer=optimizer,
    loss_function=MultinomialCrossEntropy())
model.save(path='./data/output', name='my_cnn.dat')User can also load model, and predict output.model.load(path='./data/output', name='my_cnn.dat')
y = model.predict(x)GPU is easily enabled. Do the follows at the top of your script.from dnnet.config import Config
Config.enable_gpu()If GPU is enabled but you'd like to turn it off for some specific layers, you can use force_cpu flag. Here, ConvolutionLayer and AffineLayer don't have the flag.from dnnet.config import Config
Config.enable_gpu()

# Do something here.

# AffineLayer uses GPU.
model.add(AffineLayer(output=512, weight_initialization=He()))
# BatchNormLayer uses CPU regardless of Config.enable_gpu().
model.add(BatchNormLayer(force_cpu=True))Supported MethodsLayersAffineConvolutionActivationPoolBatch NormalizationDropoutActivation FunctionsSigmoidReLUELUTanhSoftmaxOptimization MethodsSGDMomentumAdaGradAdamAdaDeltaRMSPropWeight Initialization MethodsXavier's methodHe's methodDefaultLoss FunctionsMultinomialCrossEntropy for multinomial classification.BinomialCrossEntropy for binary classification.SquaredError for regression.InstallationRequisitespython 3.4 or laternumpy 1.12.0 or latermatplotlibIf you'd like to use GPU, you need to install the follows additionally.CUDA (eg. CUDA 10.0)CuDNN (eg. CuDNN7.6.5)cupy (eg. cupy-cuda100==7.0.0)Install dnnet by pip.pip install dnnetInstall dnnet from source.dnnet doesn't require any complicated path-settings.You just download scripts from github, place it wherever you like,and you add some lines like below in your scripts.import sys
sys.path.append('<path-to-dnnet-root-dir>')

from dnnet.neuralnet import NeuralNetworkSetup environment from scratch (Optional)In this section, setting up python environment from scratch is described."From scratch" means that you're supposed to use brand-new computer,no python packages (even python itself!) and relevant libraries are installed.It may also be useful when you start new python project. In this case,you will partially execute the following steps.Setup Python Virtual EnvironmentAssumptionUse python3Make directory for pyenv in "/home//Documents"Root directory of your python virtual env is in "/home//Work/py352_ws""/home//Work/py352_ws/" is your working directorySetup procedureInstall required packages$ sudo apt-get install git gcc make openssl libssl-dev libbz2-dev libreadline-dev libsqlite3-devInstall tkinter(This is required to use matplotlib in virtualenv)$ sudo apt-get install python3-tk python-tk tk-devInstall pyenv$ cd ~
   $ git clone git://github.com/yyuu/pyenv.git ./pyenv
   $ mkdir -p ./pyenv/versions ./pyenv/shimsSet paths
Add the following description in ~/.bashrcexport PYENV_ROOT=${HOME}/Documents/pyenv
if [ -d "${PYENV_ROOT}" ]; then
  export PATH=${PYENV_ROOT}/bin:$PATH
  eval "$(pyenv init -)"
fiAnd then execute the follows.$ exec $SHELL -l
   $ . ~/.bashrcInstall pyenv-virtualenv$ cd $PYENV_ROOT/plugins
   $ git clone git://github.com/yyuu/pyenv-virtualenv.gitInstall python 3.5.2$ pyenv install 3.5.2Setup local pyenv$ mkdir -p ~/Work/py352_ws
   $ pyenv virtualenv 3.5.2 <name of this environment>can be like py352_env, python3_env, or anything you like.Here, it's assumed that you named the environment as "py352_env".$ cd ~/Work/py352_ws
   $ pyenv local py352_env
   $ pip install --upgrade pipExampleMNISTRun neural network for mnist.cd <path-to-dnnet>/examples/mnist
python mnist.pyIf you get an error "ImportError: Python is not installed as a framework.",
it might be because of matplotlib issue.(This happened to me when working with MacOS.)In the case, please try the follow.cd ~/.matplotlib
echo "backend: TkAgg" >> matplotlibrcUsage in your projectIf you pip installed dnnetfrom dnnet.neuralnet import NeuralNetworkIf you git cloned dnnetimport sys
sys.path.append('<path-to-dnnet-root-dir>')

from dnnet.neuralnet import NeuralNetworkFor example, if dnnet directory is in ~/Work/dnnet,
do like below.import os
import sys
sys.path.append(os.path.join(os.getenv('HOME'), 'Work/dnnet'))

from dnnet.neuralnet import NeuralNetwork