All Projects → peteryuX → pcdarts-tf2

peteryuX / pcdarts-tf2

Licence: MIT license
PC-DARTS (PC-DARTS: Partial Channel Connections for Memory-Efficient Differentiable Architecture Search, published in ICLR 2020) implemented in Tensorflow 2.0+. This is an unofficial implementation.

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to pcdarts-tf2

gans-2.0
Generative Adversarial Networks in TensorFlow 2.0
Stars: ✭ 76 (+204%)
Mutual labels:  cifar10, cifar-10, tensorflow2
muzero
A clean implementation of MuZero and AlphaZero following the AlphaZero General framework. Train and Pit both algorithms against each other, and investigate reliability of learned MuZero MDP models.
Stars: ✭ 126 (+404%)
Mutual labels:  tf2, tensorflow2
Naszilla
Naszilla is a Python library for neural architecture search (NAS)
Stars: ✭ 181 (+624%)
Mutual labels:  cifar10, neural-architecture-search
Awesome-Tensorflow2
基于Tensorflow2开发的优秀扩展包及项目
Stars: ✭ 45 (+80%)
Mutual labels:  tf2, tensorflow2
srVAE
VAE with RealNVP prior and Super-Resolution VAE in PyTorch. Code release for https://arxiv.org/abs/2006.05218.
Stars: ✭ 56 (+124%)
Mutual labels:  cifar10, cifar-10
Autogan
[ICCV 2019] "AutoGAN: Neural Architecture Search for Generative Adversarial Networks" by Xinyu Gong, Shiyu Chang, Yifan Jiang and Zhangyang Wang
Stars: ✭ 388 (+1452%)
Mutual labels:  cifar10, neural-architecture-search
spectral normalization-tf2
🌈 Spectral Normalization implemented as Tensorflow 2
Stars: ✭ 36 (+44%)
Mutual labels:  tf2, tensorflow2
transformer-tensorflow2.0
transformer in tensorflow 2.0
Stars: ✭ 53 (+112%)
Mutual labels:  tf2, tensorflow2
tf-faster-rcnn
Tensorflow 2 Faster-RCNN implementation from scratch supporting to the batch processing with MobileNetV2 and VGG16 backbones
Stars: ✭ 88 (+252%)
Mutual labels:  tf2, tensorflow2
keras efficientnet v2
self defined efficientnetV2 according to official version. Including converted ImageNet/21K/21k-ft1k weights.
Stars: ✭ 56 (+124%)
Mutual labels:  tf2, tensorflow2
manning tf2 in action
The official code repository for "TensorFlow in Action" by Manning.
Stars: ✭ 61 (+144%)
Mutual labels:  tf2, tensorflow2
cifar10
Predict CIFAR-10 labels with 88% accuracy using keras.
Stars: ✭ 32 (+28%)
Mutual labels:  cifar10, cifar-10
DenseNet-Cifar10
Train DenseNet on Cifar-10 based on Keras
Stars: ✭ 39 (+56%)
Mutual labels:  cifar10, cifar-10
Petridishnn
Code for the neural architecture search methods contained in the paper Efficient Forward Neural Architecture Search
Stars: ✭ 112 (+348%)
Mutual labels:  cifar10, neural-architecture-search
CRNN.tf2
Convolutional Recurrent Neural Network(CRNN) for End-to-End Text Recognition - TensorFlow 2
Stars: ✭ 131 (+424%)
Mutual labels:  tf2, tensorflow2
numpy-cnn
A numpy based CNN implementation for classifying images
Stars: ✭ 47 (+88%)
Mutual labels:  cifar10, cifar-10
TF2-GAN
🐳 GAN implemented as Tensorflow 2.X
Stars: ✭ 61 (+144%)
Mutual labels:  tf2, tensorflow2
GLOM-TensorFlow
An attempt at the implementation of GLOM, Geoffrey Hinton's paper for emergent part-whole hierarchies from data
Stars: ✭ 32 (+28%)
Mutual labels:  tensorflow2
DARTS
Differentiable architecture search for convolutional and recurrent networks
Stars: ✭ 59 (+136%)
Mutual labels:  darts
tensorflow-ml-nlp-tf2
텐서플로2와 머신러닝으로 시작하는 자연어처리 (로지스틱회귀부터 BERT와 GPT3까지) 실습자료
Stars: ✭ 245 (+880%)
Mutual labels:  tf2

pcdarts-tf2

Language grade: Python Star Fork License

🔥 PC-DARTS (PC-DARTS: Partial Channel Connections for Memory-Efficient Differentiable Architecture Search, published in ICLR 2020) implemented in Tensorflow 2.0+. This is an unofficial implementation. 🔥

PC-DARTS is a memory efficient differentiable architecture search method, which can be trained with a larger batch size and, consequently, enjoys both faster speed and higher training stability. Experimental results achieve an error rate of 2.57% on CIFAR10 with merely 0.1 GPU-days for architecture search.

Original Paper:   Arxiv   OpenReview

Offical Implementation:   PyTorch


Contents

📑


Installation

🍕

Create a new python virtual environment by Anaconda or just use pip in your python environment and then clone this repository as following.

Clone this repo

git clone https://github.com/peteryuX/pcdarts-tf2.git
cd pcdarts-tf2

Conda

conda env create -f environment.yml
conda activate pcdarts-tf2

Pip

pip install -r requirements.txt

Usage

🍭

Config File

You can modify your own dataset path or other settings of model in ./configs/*.yaml for training and testing, which would like below.

# general setting
batch_size: 128
input_size: 32
init_channels: 36
layers: 20
num_classes: 10
auxiliary_weight: 0.4
drop_path_prob: 0.3
arch: PCDARTS
sub_name: 'pcdarts_cifar10'
using_normalize: True

# training dataset
dataset_len: 50000  # number of training samples
using_crop: True
using_flip: True
using_cutout: True
cutout_length: 16

# training setting
epoch: 600
init_lr: 0.025
lr_min: 0.0
momentum: 0.9
weights_decay: !!float 3e-4
grad_clip: 5.0

val_steps: 1000
save_steps: 1000

Note:

Architecture Searching on CIFAR-10 (using small proxy model)

Step1: Search cell architecture on CIFAR-10 using small proxy model.

python train_search.py --cfg_path="./configs/pcdarts_cifar10_search.yaml" --gpu=0

Note:

  • The --gpu is used to choose the id of your avaliable GPU devices with CUDA_VISIBLE_DEVICES system varaible.
  • You can visualize the training status on tensorboard by running "tensorboard --logdir=./logs/". My logs can be found from search_log and full_train_log.
  • You can visualize the learning rate scheduling by running "python ./modules/lr_scheduler.py".
  • You can visualize the dataset augmantation by running "python ./dataset_checker.py".

Step2: After the searching completed, you can find the result genotypes in ./logs/{sub_name}/search_arch_genotype.py. Open it and copy the latest genotype into the ./modules/genotypes.py, which will be used for further training later. The genotype like bellow:

TheNameYouWantToCall = Genotype(
    normal=[
        ('sep_conv_3x3', 1),
        ('skip_connect', 0),
        ('sep_conv_3x3', 0),
        ('dil_conv_3x3', 1),
        ('sep_conv_5x5', 0),
        ('sep_conv_3x3', 1),
        ('avg_pool_3x3', 0),
        ('dil_conv_3x3', 1)],
    normal_concat=range(2, 6),
    reduce=[
        ('sep_conv_5x5', 1),
        ('max_pool_3x3', 0),
        ('sep_conv_5x5', 1),
        ('sep_conv_5x5', 2),
        ('sep_conv_3x3', 0),
        ('sep_conv_3x3', 3),
        ('sep_conv_3x3', 1),
        ('sep_conv_3x3', 2)],
    reduce_concat=range(2, 6))

Note:

  • You can visualize the genotype by running "python ./visualize_genotype.py TheNameYouWantToCall".

Training on CIFAR-10 (using full-sized model)

Step1: Make sure that you already modifed the flag arch in ./configs/pcdarts_cifar10.yaml to match the genotype you want to use in ./modules/genotypes.py.

Note:

  • The default flag arch (PCDARTS) is the genotype proposed by official paper. You can train this model by yourself, or use dowload it from BenchmarkModels.

Step2: Train the full-sized model on CIFAR-10 with specific genotype.

python train.py --cfg_path="./configs/pcdarts_cifar10.yaml" --gpu=0

Testing on CIFAR-10 (using full-sized model)

To evaluate the full-sized model with the corresponding cfg file on the testing dataset. You can also download my trained model for testing from Models without training it yourself, which default arch (PCDARTS) is the best cell proposed in paper.

python test.py --cfg_path="./configs/pcdarts_cifar10.yaml" --gpu=0

Benchmark

Results on CIFAR-10

Method Search Method Params(M) Test Error(%) Search-Cost(GPU-days)
NASNet-A RL 3.3 2.65 1800
AmoebaNet-B Evolution 2.8 2.55 3150
ENAS RL 4.6 2.89 0.5
DARTSV1 gradient-based 3.3 3.00 0.4
DARTSV2 gradient-based 3.3 2.76 1.0
SNAS gradient-based 2.8 2.85 1.5
PC-DARTS (official PyTorch version) gradient-based 3.63 2.57 0.1
PC-DARTS TF2 (paper architecture) gradient-based 3.63 2.73 -
PC-DARTS TF2 (searched by myself) gradient-based 3.56 2.88 0.12

Note:

  • Above results are referenced from official repository and orignal paper.
  • There still have a slight performance gap between my PC-DARTS TF2 and official version. In both cases, we used Nvidia 1080ti (11G memory). My PC-DARTS TF2 pre-trained model can be found in Models.
  • My tensorboard logs can be found from search_log and full_train_log.
  • If you get unsatisfactory results with the archecture searched by yourself, you might try to search it more than one time. (see the discussions here)

Models

🍩

Dowload these models bellow, then extract them into ./checkpoints/ for restoring.

Model Name Config File arch Download Link
PC-DARTS (CIFAR-10, paper architecture) pcdarts_cifar10.yaml PCDARTS GoogleDrive
PC-DARTS (CIFAR-10, searched by myself) pcdarts_cifar10_TF2.yaml PCDARTS_TF2_SEARCH GoogleDrive

Note:

  • You can find the training settings of the models in the corresponding ./configs/*.yaml files, and make sure that the arch flag in it is matched with the genotypes name in ./modules/genotypes.py.
  • Based on the property of the training dataset, all the pre-trained models can only be used for non-commercial applications.

References

🍔

Thanks for these source codes porviding me with knowledges to complete this repository.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].