| @@ -112,46 +112,40 @@ Run this example in [Jupyter Notebook](https://github.com/SciSharp/SciSharpCube) | |||
| Toy version of `ResNet` in `Keras` functional API: | |||
| ```csharp | |||
| var layers = new LayersApi(); | |||
| // input layer | |||
| var inputs = keras.Input(shape: (32, 32, 3), name: "img"); | |||
| // convolutional layer | |||
| var x = layers.Conv2D(32, 3, activation: "relu").Apply(inputs); | |||
| x = layers.Conv2D(64, 3, activation: "relu").Apply(x); | |||
| var block_1_output = layers.MaxPooling2D(3).Apply(x); | |||
| x = layers.Conv2D(64, 3, activation: "relu", padding: "same").Apply(block_1_output); | |||
| x = layers.Conv2D(64, 3, activation: "relu", padding: "same").Apply(x); | |||
| var block_2_output = layers.add(x, block_1_output); | |||
| var block_2_output = layers.Add().Apply(new Tensors(x, block_1_output)); | |||
| x = layers.Conv2D(64, 3, activation: "relu", padding: "same").Apply(block_2_output); | |||
| x = layers.Conv2D(64, 3, activation: "relu", padding: "same").Apply(x); | |||
| var block_3_output = layers.add(x, block_2_output); | |||
| var block_3_output = layers.Add().Apply(new Tensors(x, block_2_output)); | |||
| x = layers.Conv2D(64, 3, activation: "relu").Apply(block_3_output); | |||
| x = layers.GlobalAveragePooling2D().Apply(x); | |||
| x = layers.Dense(256, activation: "relu").Apply(x); | |||
| x = layers.Dropout(0.5f).Apply(x); | |||
| // output layer | |||
| var outputs = layers.Dense(10).Apply(x); | |||
| // build keras model | |||
| model = keras.Model(inputs, outputs, name: "toy_resnet"); | |||
| var model = keras.Model(inputs, outputs, name: "toy_resnet"); | |||
| model.summary(); | |||
| // compile keras model in tensorflow static graph | |||
| model.compile(optimizer: keras.optimizers.RMSprop(1e-3f), | |||
| loss: keras.losses.CategoricalCrossentropy(from_logits: true), | |||
| metrics: new[] { "acc" }); | |||
| loss: keras.losses.CategoricalCrossentropy(from_logits: true), | |||
| metrics: new[] { "acc" }); | |||
| // prepare dataset | |||
| var ((x_train, y_train), (x_test, y_test)) = keras.datasets.cifar10.load_data(); | |||
| x_train = x_train / 255.0f; | |||
| y_train = np_utils.to_categorical(y_train, 10); | |||
| // training | |||
| model.fit(x_train[new Slice(0, 1000)], y_train[new Slice(0, 1000)], | |||
| batch_size: 64, | |||
| epochs: 10, | |||
| model.fit(x_train[new Slice(0, 2000)], y_train[new Slice(0, 2000)], | |||
| batch_size: 64, | |||
| epochs: 10, | |||
| validation_split: 0.2f); | |||
| ``` | |||
| @@ -260,4 +254,4 @@ WeChat Sponsor 微信打赏: | |||
| TensorFlow.NET is a part of [SciSharp STACK](https://scisharp.github.io/SciSharp/) | |||
| <br> | |||
| <a href="http://scisharpstack.org"><img src="https://github.com/SciSharp/SciSharp/blob/master/art/scisharp-stack.png" width="391" height="100" /></a> | |||
| <a href="http://scisharpstack.org"><img src="https://github.com/SciSharp/SciSharp/blob/master/art/scisharp-stack.png" width="391" height="100" /></a> | |||