d-e-e-k-11 commited on
Commit
b0898f2
·
verified ·
1 Parent(s): 06fb995

Upload tf_models.py with huggingface_hub

Browse files
Files changed (1) hide show
  1. tf_models.py +76 -0
tf_models.py ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import tensorflow as tf
2
+ from tensorflow.keras import layers
3
+
4
+ def downsample(filters, size, apply_instancenorm=True):
5
+ initializer = tf.random_normal_initializer(0., 0.02)
6
+ result = tf.keras.Sequential()
7
+ result.add(layers.Conv2D(filters, size, strides=2, padding='same',
8
+ kernel_initializer=initializer, use_bias=False))
9
+ if apply_instancenorm:
10
+ result.add(tf.keras.layers.GroupNormalization(groups=-1))
11
+ result.add(layers.LeakyReLU())
12
+ return result
13
+
14
+ def upsample(filters, size, apply_dropout=False):
15
+ initializer = tf.random_normal_initializer(0., 0.02)
16
+ result = tf.keras.Sequential()
17
+ result.add(layers.Conv2DTranspose(filters, size, strides=2, padding='same',
18
+ kernel_initializer=initializer, use_bias=False))
19
+ result.add(tf.keras.layers.GroupNormalization(groups=-1))
20
+ if apply_dropout:
21
+ result.add(layers.Dropout(0.5))
22
+ result.add(layers.ReLU())
23
+ return result
24
+
25
+ def resnet_block(filters, size=3):
26
+ initializer = tf.random_normal_initializer(0., 0.02)
27
+ result = tf.keras.Sequential()
28
+ result.add(layers.Conv2D(filters, size, padding='same', kernel_initializer=initializer, use_bias=False))
29
+ result.add(tf.keras.layers.GroupNormalization(groups=-1))
30
+ result.add(layers.ReLU())
31
+ result.add(layers.Conv2D(filters, size, padding='same', kernel_initializer=initializer, use_bias=False))
32
+ result.add(tf.keras.layers.GroupNormalization(groups=-1))
33
+ return result
34
+
35
+ def Generator(output_channels=3, num_resnet=9):
36
+ inputs = layers.Input(shape=[256, 256, 3])
37
+
38
+ # Downsampling
39
+ x = layers.Conv2D(64, 7, padding='same', kernel_initializer=tf.random_normal_initializer(0., 0.02), use_bias=False)(inputs)
40
+ x = tf.keras.layers.GroupNormalization(groups=-1)(x)
41
+ x = layers.ReLU()(x)
42
+
43
+ x = downsample(128, 3)(x)
44
+ x = downsample(256, 3)(x)
45
+
46
+ # Residual blocks
47
+ for _ in range(num_resnet):
48
+ res = resnet_block(256)(x)
49
+ x = layers.Add()([x, res])
50
+
51
+ # Upsampling
52
+ x = upsample(128, 3)(x)
53
+ x = upsample(64, 3)(x)
54
+
55
+ last = layers.Conv2D(output_channels, 7, padding='same', activation='tanh',
56
+ kernel_initializer=tf.random_normal_initializer(0., 0.02))(x)
57
+
58
+ return tf.keras.Model(inputs=inputs, outputs=last)
59
+
60
+ def Discriminator():
61
+ initializer = tf.random_normal_initializer(0., 0.02)
62
+ inputs = layers.Input(shape=[256, 256, 3])
63
+
64
+ down1 = downsample(64, 4, False)(inputs) # (bs, 128, 128, 64)
65
+ down2 = downsample(128, 4)(down1) # (bs, 64, 64, 128)
66
+ down3 = downsample(256, 4)(down2) # (bs, 32, 32, 256)
67
+
68
+ zero_pad1 = layers.ZeroPadding2D()(down3) # (bs, 34, 34, 256)
69
+ conv = layers.Conv2D(512, 4, strides=1, kernel_initializer=initializer, use_bias=False)(zero_pad1)
70
+ norm1 = tf.keras.layers.GroupNormalization(groups=-1)(conv)
71
+ leaky_relu = layers.LeakyReLU()(norm1)
72
+
73
+ zero_pad2 = layers.ZeroPadding2D()(leaky_relu)
74
+ last = layers.Conv2D(1, 4, strides=1, kernel_initializer=initializer)(zero_pad2)
75
+
76
+ return tf.keras.Model(inputs=inputs, outputs=last)