rishigami / Swin-Transformer-TF

Tensorflow implementation of Swin Transformer model.
Apache License 2.0
202 stars 49 forks source link

Argument `name` must be a string and cannot contain character `/` #25

Open SEOYUNJE opened 2 months ago

SEOYUNJE commented 2 months ago

sys.path.append('/kaggle/input/swintransformertf') ​ from swintransformer import SwinTransformer ​ model = SwinTransformer('swin_tiny_224', num_classes=1000, include_top=True, pretrained=False)


ValueError Traceback (most recent call last) Cell In[17], line 5 1 sys.path.append('/kaggle/input/swintransformertf') 3 from swintransformer import SwinTransformer ----> 5 model = SwinTransformer('swin_tiny_224', num_classes=1000, include_top=True, pretrained=False)

File /kaggle/input/swintransformertf/swintransformer/model.py:430, in SwinTransformer(model_name, num_classes, include_top, pretrained, use_tpu, cfgs) 428 def SwinTransformer(model_name='swin_tiny_224', num_classes=1000, include_top=True, pretrained=True, use_tpu=False, cfgs=CFGS): 429 cfg = cfgs[model_name] --> 430 net = SwinTransformerModel( 431 model_name=model_name, include_top=include_top, num_classes=num_classes, img_size=cfg['input_size'], window_size=cfg[ 432 'window_size'], embed_dim=cfg['embed_dim'], depths=cfg['depths'], num_heads=cfg['num_heads'] 433 ) 434 net(tf.keras.Input(shape=(cfg['input_size'][0], cfg['input_size'][1], 3))) 435 if pretrained is True:

File /kaggle/input/swintransformertf/swintransformer/model.py:387, in SwinTransformerModel.init(self, model_name, include_top, img_size, patch_size, in_chans, num_classes, embed_dim, depths, num_heads, window_size, mlp_ratio, qkv_bias, qk_scale, drop_rate, attn_drop_rate, drop_path_rate, norm_layer, ape, patch_norm, use_checkpoint, *kwargs) 384 dpr = [x for x in np.linspace(0., drop_path_rate, sum(depths))] 386 # build layers --> 387 self.basic_layers = tf.keras.Sequential([BasicLayer(dim=int(embed_dim 2 i_layer), 388 input_resolution=(patches_resolution[0] // (2 i_layer), 389 patches_resolution[1] // (2 ** i_layer)), 390 depth=depths[i_layer], 391 num_heads=num_heads[i_layer], 392 window_size=window_size, 393 mlp_ratio=self.mlp_ratio, 394 qkv_bias=qkv_bias, qk_scale=qk_scale, 395 drop=drop_rate, attn_drop=attn_drop_rate, 396 drop_path_prob=dpr[sum(depths[:i_layer]):sum( 397 depths[:i_layer + 1])], 398 norm_layer=norm_layer, 399 downsample=PatchMerging if ( 400 i_layer < self.num_layers - 1) else None, 401 use_checkpoint=use_checkpoint, 402 prefix=f'layers{i_layer}') for i_layer in range(self.num_layers)]) 403 self.norm = norm_layer(epsilon=1e-5, name='norm') 404 self.avgpool = GlobalAveragePooling1D()

File /kaggle/input/swintransformertf/swintransformer/model.py:387, in (.0) 384 dpr = [x for x in np.linspace(0., drop_path_rate, sum(depths))] 386 # build layers --> 387 self.basic_layers = tf.keras.Sequential([BasicLayer(dim=int(embed_dim * 2 i_layer), 388 input_resolution=(patches_resolution[0] // (2 i_layer), 389 patches_resolution[1] // (2 ** i_layer)), 390 depth=depths[i_layer], 391 num_heads=num_heads[i_layer], 392 window_size=window_size, 393 mlp_ratio=self.mlp_ratio, 394 qkv_bias=qkv_bias, qk_scale=qk_scale, 395 drop=drop_rate, attn_drop=attn_drop_rate, 396 drop_path_prob=dpr[sum(depths[:i_layer]):sum( 397 depths[:i_layer + 1])], 398 norm_layer=norm_layer, 399 downsample=PatchMerging if ( 400 i_layer < self.num_layers - 1) else None, 401 use_checkpoint=use_checkpoint, 402 prefix=f'layers{i_layer}') for i_layer in range(self.num_layers)]) 403 self.norm = norm_layer(epsilon=1e-5, name='norm') 404 self.avgpool = GlobalAveragePooling1D()

File /kaggle/input/swintransformertf/swintransformer/model.py:289, in BasicLayer.init(self, dim, input_resolution, depth, num_heads, window_size, mlp_ratio, qkv_bias, qk_scale, drop, attn_drop, drop_path_prob, norm_layer, downsample, use_checkpoint, prefix) 286 self.use_checkpoint = use_checkpoint 288 # build blocks --> 289 self.blocks = tf.keras.Sequential([SwinTransformerBlock(dim=dim, input_resolution=input_resolution, 290 num_heads=num_heads, window_size=window_size, 291 shift_size=0 if ( 292 i % 2 == 0) else window_size // 2, 293 mlp_ratio=mlp_ratio, 294 qkv_bias=qkv_bias, qk_scale=qk_scale, 295 drop=drop, attn_drop=attn_drop, 296 drop_path_prob=drop_path_prob[i] if isinstance( 297 drop_path_prob, list) else drop_path_prob, 298 norm_layer=norm_layer, 299 prefix=f'{prefix}/blocks{i}') for i in range(depth)]) 300 if downsample is not None: 301 self.downsample = downsample( 302 input_resolution, dim=dim, norm_layer=norm_layer, prefix=prefix)

File /kaggle/input/swintransformertf/swintransformer/model.py:289, in (.0) 286 self.use_checkpoint = use_checkpoint 288 # build blocks --> 289 self.blocks = tf.keras.Sequential([SwinTransformerBlock(dim=dim, input_resolution=input_resolution, 290 num_heads=num_heads, window_size=window_size, 291 shift_size=0 if ( 292 i % 2 == 0) else window_size // 2, 293 mlp_ratio=mlp_ratio, 294 qkv_bias=qkv_bias, qk_scale=qk_scale, 295 drop=drop, attn_drop=attn_drop, 296 drop_path_prob=drop_path_prob[i] if isinstance( 297 drop_path_prob, list) else drop_path_prob, 298 norm_layer=norm_layer, 299 prefix=f'{prefix}/blocks{i}') for i in range(depth)]) 300 if downsample is not None: 301 self.downsample = downsample( 302 input_resolution, dim=dim, norm_layer=norm_layer, prefix=prefix)

File /kaggle/input/swintransformertf/swintransformer/model.py:163, in SwinTransformerBlock.init(self, dim, input_resolution, num_heads, window_size, shift_size, mlp_ratio, qkv_bias, qk_scale, drop, attn_drop, drop_path_prob, norm_layer, prefix) 160 assert 0 <= self.shift_size < self.window_size, "shift_size must in 0-window_size" 161 self.prefix = prefix --> 163 self.norm1 = norm_layer(epsilon=1e-5, name=f'{self.prefix}/norm1') 164 self.attn = WindowAttention(dim, window_size=(self.window_size, self.window_size), num_heads=num_heads, 165 qkv_bias=qkv_bias, qk_scale=qk_scale, attn_drop=attn_drop, proj_drop=drop, prefix=self.prefix) 166 self.drop_path = DropPath( 167 drop_path_prob if drop_path_prob > 0. else 0.)

File /opt/conda/lib/python3.10/site-packages/keras/src/layers/normalization/layer_normalization.py:122, in LayerNormalization.init(self, axis, epsilon, center, scale, rms_scaling, beta_initializer, gamma_initializer, beta_regularizer, gamma_regularizer, beta_constraint, gamma_constraint, kwargs) 107 def init( 108 self, 109 axis=-1, (...) 120 kwargs 121 ): --> 122 super().init(**kwargs) 123 if isinstance(axis, (list, tuple)): 124 self.axis = list(axis)

File /opt/conda/lib/python3.10/site-packages/keras/src/layers/layer.py:249, in Layer.init(self, activity_regularizer, trainable, dtype, autocast, name, **kwargs) 247 BackendLayer.init(self) 248 self._lock = False --> 249 Operation.init(self, dtype=dtype, name=name) 250 self.activity_regularizer = regularizers.get(activity_regularizer) 251 input_dim_arg = kwargs.pop("input_dim", None)

File /opt/conda/lib/python3.10/site-packages/keras/src/ops/operation.py:21, in Operation.init(self, dtype, name) 19 name = auto_name(self.class.name) 20 if not isinstance(name, str) or "/" in name: ---> 21 raise ValueError( 22 "Argument name must be a string and " 23 "cannot contain character /. " 24 f"Received: name={name} (of type {type(name)})" 25 ) 26 self._dtype_policy = dtype_policies.get(dtype) 27 self.name = name

ValueError: Argument name must be a string and cannot contain character /. Received: name=layers0/blocks0/norm1 (of type <class 'str'>)

SEOYUNJE commented 2 months ago

my keras version >= 3.0.0

But, after i changed keras version 2.15.0. This problem solved.