Skip to content

A Library on TensorFlow for Fast Model Training and Serving

Notifications You must be signed in to change notification settings

stmharry/slender

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

94 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Slender

Fast prototyping

from slender.producer import LocalFileProducer as Producer
from slender.processor import TrainProcessor as Processor
from slender.net import ClassifyNet, TrainScheme
from slender.util import new_working_dir

IMAGE_DIR = '/path/to/image/dir/that/contains/class_names/as/subdirectories/'
WORKING_DIR = new_working_dir('/path/to/root/working/dir')

BATCH_SIZE = awesomeness_of_your_gpu
GPU_FRAC = between_zero_and_one__but_leave_some_gpu_for_evaluation
NUM_TRAIN_EPOCHS = your_patience__make_sure_not_too_small
NUM_DECAY_EPOCHS = one_ish__make_sure_not_too_small_as_well

class Net(ClassifyNet, TrainScheme):
    pass

producer = Producer(
    image_dir=IMAGE_DIR,
    working_dir=WORKING_DIR,
    batch_size=BATCH_SIZE,
    subsample_fn=TRAIN_SUBSAMPLE_FN,
)
processor = Processor()
net = Net(
    working_dir=WORKING_DIR,
    num_classes=producer.num_classes,
    learning_rate_decay_steps=NUM_DECAY_EPOCHS * producer.num_batches_per_epoch,
    gpu_frac=GPU_FRAC,
)
blob = producer.blob().f(processor.preprocess).f(net.build)

net.run(NUM_TRAIN_EPOCHS * producer.num_batches_per_epoch)

Easy evaluation

from slender.producer import LocalFileProducer as Producer
from slender.processor import TestProcessor as Processor
from slender.net import ClassifyNet, TestScheme
from slender.util import latest_working_dir

class Net(ClassifyNet, TestScheme):
    pass

producer = Producer(
    image_dir=IMAGE_DIR,
    working_dir=WORKING_DIR,
    subsample_fn=TEST_SUBSAMPLE_FN,
)
processor = Processor()
net = Net(
    working_dir=WORKING_DIR,
    num_classes=producer.num_classes,
)
blob = producer.blob().f(processor.preprocess).f(net.build)

net.run(producer.num_batches_per_epoch)

Quick model deployment

from slender.producer import PlaceholderProducer as Producer
from slender.processor import List, TestProcessor as Processor
from slender.net import ClassifyNet, OnlineScheme
from slender.model import BatchFactory

class Net(ClassifyNet, OnlineScheme):
    pass

class Factory(BatchFactory):
    def __init__(self)
        super(Factory, self).__init__()

        self.producer = Producer(
            working_dir=WORKING_DIR,
        )
        self.processor = Processor()
        self.net = Net(
            working_dir=WORKING_DIR,
            num_classes=self.producer.num_classes,
        )

        self.blob = (
            self.producer.blob()
            .f(self.processor.preprocess)
            .f(self.net.build)
            .f(self.processor.postprocess)
        )
        self.net.run()
        self.start()

    def run_one(self, inputs):
        return your_awesome_service(inputs)

About

A Library on TensorFlow for Fast Model Training and Serving

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published