HaidYi commited on
Commit
6b92ed2
·
1 Parent(s): 7595de5

Upload model

Browse files
Files changed (4) hide show
  1. config.json +26 -0
  2. model.py +52 -0
  3. pytorch_model.bin +3 -0
  4. resnet_config.py +34 -0
config.json ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "architectures": [
3
+ "ResnetModelForImageClassification"
4
+ ],
5
+ "auto_map": {
6
+ "AutoConfig": "resnet_config.ResnetConfig",
7
+ "AutoModelForImageClassification": "model.ResnetModelForImageClassification"
8
+ },
9
+ "avg_down": true,
10
+ "base_width": 64,
11
+ "block_type": "bottleneck",
12
+ "cardinality": 1,
13
+ "input_channels": 3,
14
+ "layers": [
15
+ 3,
16
+ 4,
17
+ 6,
18
+ 3
19
+ ],
20
+ "model_type": "resnet",
21
+ "num_classes": 1000,
22
+ "stem_type": "deep",
23
+ "stem_width": 32,
24
+ "torch_dtype": "float32",
25
+ "transformers_version": "4.26.1"
26
+ }
model.py ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from transformers import PreTrainedModel
2
+ from timm.models.resnet import BasicBlock, Bottleneck, ResNet
3
+ from .resnet_config import ResnetConfig
4
+
5
+ BLOCK_MAPPING = {"basic": BasicBlock, "bottleneck": Bottleneck}
6
+
7
+ class ResnetModel(PreTrainedModel):
8
+ config_class = ResnetConfig
9
+
10
+ def __init__(self, config):
11
+ super().__init__(config)
12
+ block_layer = BLOCK_MAPPING[config.block_type]
13
+ self.model = ResNet(
14
+ block_layer,
15
+ config.layers,
16
+ num_classes=config.num_classes,
17
+ in_chans=config.input_channels,
18
+ cardinality=config.cardinality,
19
+ base_width=config.base_width,
20
+ stem_width=config.stem_width,
21
+ stem_type=config.stem_type,
22
+ avg_down=config.avg_down,
23
+ )
24
+
25
+ def forward(self, tensor):
26
+ return self.model.forward_features(tensor)
27
+
28
+
29
+ class ResnetModelForImageClassification(PreTrainedModel):
30
+ config_class = ResnetConfig
31
+
32
+ def __init__(self, config):
33
+ super().__init__(config)
34
+ block_layer = BLOCK_MAPPING[config.block_type]
35
+ self.model = ResNet(
36
+ block_layer,
37
+ config.layers,
38
+ num_classes=config.num_classes,
39
+ in_chans=config.input_channels,
40
+ cardinality=config.cardinality,
41
+ base_width=config.base_width,
42
+ stem_width=config.stem_width,
43
+ stem_type=config.stem_type,
44
+ avg_down=config.avg_down,
45
+ )
46
+
47
+ def forward(self, tensor, labels=None):
48
+ logits = self.model(tensor)
49
+ if label is not None:
50
+ loss = torch.nn.cross_entropy(logits, labels)
51
+ return {"loss": loss, "logits": logits}
52
+ return {"logits": logits}
pytorch_model.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:eecd20b2d48d10c073f948eaaed1f89dd1bd7157f33646c8291d679ce28ccf15
3
+ size 102617769
resnet_config.py ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from transformers import PretrainedConfig
2
+ from typing import List
3
+
4
+ class ResnetConfig(PretrainedConfig):
5
+ model_type = "resnet"
6
+
7
+ def __init__(
8
+ self,
9
+ block_type="bottleneck",
10
+ layers: List[int] = [3, 4, 6, 3],
11
+ num_classes: int = 1000,
12
+ input_channels: int = 3,
13
+ cardinality: int = 1,
14
+ base_width: int = 64,
15
+ stem_width: int = 64,
16
+ stem_type: str = "",
17
+ avg_down: bool = False,
18
+ **kwargs,
19
+ ):
20
+ if block_type not in ["basic", "bottleneck"]:
21
+ raise ValueError(f"`block_type` must be 'basic' or bottleneck', got {block_type}.")
22
+ if stem_type not in ["", "deep", "deep-tiered"]:
23
+ raise ValueError(f"`stem_type` must be '', 'deep' or 'deep-tiered', got {stem_type}.")
24
+
25
+ self.block_type = block_type
26
+ self.layers = layers
27
+ self.num_classes = num_classes
28
+ self.input_channels = input_channels
29
+ self.cardinality = cardinality
30
+ self.base_width = base_width
31
+ self.stem_width = stem_width
32
+ self.stem_type = stem_type
33
+ self.avg_down = avg_down
34
+ super().__init__(**kwargs)