@@ -23,34 +23,20 @@ let imageHeight = 28
23
23
let imageWidth = 28
24
24
25
25
let outputFolder = " ./output/ "
26
-
27
- /// An autoencoder.
28
- struct Autoencoder : Layer {
29
- var encoder1 = Dense < Float > (
30
- inputSize: imageHeight * imageWidth, outputSize: 128 ,
31
- activation: relu)
32
-
33
- var encoder2 = Dense < Float > ( inputSize: 128 , outputSize: 64 , activation: relu)
34
- var encoder3 = Dense < Float > ( inputSize: 64 , outputSize: 12 , activation: relu)
35
- var encoder4 = Dense < Float > ( inputSize: 12 , outputSize: 3 , activation: relu)
36
-
37
- var decoder1 = Dense < Float > ( inputSize: 3 , outputSize: 12 , activation: relu)
38
- var decoder2 = Dense < Float > ( inputSize: 12 , outputSize: 64 , activation: relu)
39
- var decoder3 = Dense < Float > ( inputSize: 64 , outputSize: 128 , activation: relu)
40
-
41
- var decoder4 = Dense < Float > (
42
- inputSize: 128 , outputSize: imageHeight * imageWidth,
43
- activation: tanh)
44
-
45
- @differentiable
46
- func callAsFunction( _ input: Tensor < Float > ) -> Tensor < Float > {
47
- let encoder = input. sequenced ( through: encoder1, encoder2, encoder3, encoder4)
48
- return encoder. sequenced ( through: decoder1, decoder2, decoder3, decoder4)
49
- }
50
- }
51
-
52
26
let dataset = MNIST ( batchSize: batchSize, flattening: true )
53
- var autoencoder = Autoencoder ( )
27
+ // An autoencoder.
28
+ var autoencoder = Sequential {
29
+ // The encoder.
30
+ Dense < Float > ( inputSize: imageHeight * imageWidth, outputSize: 128 , activation: relu)
31
+ Dense < Float > ( inputSize: 128 , outputSize: 64 , activation: relu)
32
+ Dense < Float > ( inputSize: 64 , outputSize: 12 , activation: relu)
33
+ Dense < Float > ( inputSize: 12 , outputSize: 3 , activation: relu)
34
+ // The decoder.
35
+ Dense < Float > ( inputSize: 3 , outputSize: 12 , activation: relu)
36
+ Dense < Float > ( inputSize: 12 , outputSize: 64 , activation: relu)
37
+ Dense < Float > ( inputSize: 64 , outputSize: 128 , activation: relu)
38
+ Dense < Float > ( inputSize: 128 , outputSize: imageHeight * imageWidth, activation: tanh)
39
+ }
54
40
let optimizer = RMSProp ( for: autoencoder)
55
41
56
42
// Training loop
0 commit comments