File size: 2,240 Bytes
07cb7d3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
from deep_learning.data.cats_vs_dogs import CatsVsDogsDataSource
from deep_learning.env.resolve import resolve_env, resolve_path, resolve_saved
from deep_learning.models.image_classification import ImageClassificationModelBuilder
from deep_learning.pipeline import (
    SupervisedModelPipeline,
    PipelineRunner
)
from deep_learning.pipeline.specs.configs import CheckpointConfig, CheckpointLoadRules, TrainingRule


pipeline = resolve_env(
    # 开发配置
    SupervisedModelPipeline(
        name="image_classification",
        data_source=CatsVsDogsDataSource(
            train_path=resolve_path("~/data/cat-vs-dog/PetImagesMini/train"),
            validation_path=resolve_path("~/data/cat-vs-dog/PetImagesMini/val"),
            test_path=resolve_path("~/data/cat-vs-dog/PetImagesMini/test"),
            image_size=(180, 180),
            label_mode="binary",
            batch_size=2,
            example_count=5
        ),
        model_builder=ImageClassificationModelBuilder(
            image_size=(180, 180),
            model_filters=(32,)
        ),
        training_rule=TrainingRule(
            epochs=1,
            steps_per_epoch=1
        )
    ),

    # 生产配置
    SupervisedModelPipeline(
        name="image_classification",
        data_source=CatsVsDogsDataSource(
            train_path=resolve_path("~/data/cat-vs-dog/PetImagesMini/train"),
            validation_path=resolve_path("~/data/cat-vs-dog/PetImagesMini/val"),
            test_path=resolve_path("~/data/cat-vs-dog/PetImagesMini/test"),
            image_size=(180, 180),
            label_mode="binary",
            batch_size=32,
            example_count=5
        ),
        model_builder=ImageClassificationModelBuilder(
            image_size=(180, 180),
            model_filters=(128, 256, 512, 728)
        ),
        training_rule=TrainingRule(
            epochs=30,
            steps_per_epoch=None
        ),
        checkpoint_load_rules=CheckpointLoadRules(
            export=CheckpointConfig(epoch=13),
            test=CheckpointConfig(dirs=[resolve_saved("models/image_classification")], suffix=".keras")
        )
    )
)

pipeline_runner = PipelineRunner(pipeline)


if __name__ == "__main__":
    pipeline_runner()