@@ -131,7 +131,7 @@ using static Tensorflow.KerasApi; | |||||
using Tensorflow; | using Tensorflow; | ||||
using Tensorflow.NumPy; | using Tensorflow.NumPy; | ||||
var layers = new LayersApi(); | |||||
var layers = keras.layers; | |||||
// input layer | // input layer | ||||
var inputs = keras.Input(shape: (32, 32, 3), name: "img"); | var inputs = keras.Input(shape: (32, 32, 3), name: "img"); | ||||
// convolutional layer | // convolutional layer | ||||
@@ -155,17 +155,19 @@ var model = keras.Model(inputs, outputs, name: "toy_resnet"); | |||||
model.summary(); | model.summary(); | ||||
// compile keras model in tensorflow static graph | // compile keras model in tensorflow static graph | ||||
model.compile(optimizer: keras.optimizers.RMSprop(1e-3f), | model.compile(optimizer: keras.optimizers.RMSprop(1e-3f), | ||||
loss: keras.losses.CategoricalCrossentropy(from_logits: true), | |||||
loss: keras.losses.SparseCategoricalCrossentropy(from_logits: true), | |||||
metrics: new[] { "acc" }); | metrics: new[] { "acc" }); | ||||
// prepare dataset | // prepare dataset | ||||
var ((x_train, y_train), (x_test, y_test)) = keras.datasets.cifar10.load_data(); | var ((x_train, y_train), (x_test, y_test)) = keras.datasets.cifar10.load_data(); | ||||
// normalize the input | |||||
x_train = x_train / 255.0f; | x_train = x_train / 255.0f; | ||||
y_train = np_utils.to_categorical(y_train, 10); | |||||
// training | // training | ||||
model.fit(x_train[new Slice(0, 2000)], y_train[new Slice(0, 2000)], | model.fit(x_train[new Slice(0, 2000)], y_train[new Slice(0, 2000)], | ||||
batch_size: 64, | |||||
epochs: 10, | |||||
validation_split: 0.2f); | |||||
batch_size: 64, | |||||
epochs: 10, | |||||
validation_split: 0.2f); | |||||
// save the model | |||||
model.save("./toy_resnet_model"); | |||||
``` | ``` | ||||
The F# example for linear regression is available [here](docs/Example-fsharp.md). | The F# example for linear regression is available [here](docs/Example-fsharp.md). | ||||
@@ -130,7 +130,7 @@ using static Tensorflow.KerasApi; | |||||
using Tensorflow; | using Tensorflow; | ||||
using Tensorflow.NumPy; | using Tensorflow.NumPy; | ||||
var layers = new LayersApi(); | |||||
var layers = keras.layers; | |||||
// input layer | // input layer | ||||
var inputs = keras.Input(shape: (32, 32, 3), name: "img"); | var inputs = keras.Input(shape: (32, 32, 3), name: "img"); | ||||
// convolutional layer | // convolutional layer | ||||
@@ -154,17 +154,19 @@ var model = keras.Model(inputs, outputs, name: "toy_resnet"); | |||||
model.summary(); | model.summary(); | ||||
// compile keras model in tensorflow static graph | // compile keras model in tensorflow static graph | ||||
model.compile(optimizer: keras.optimizers.RMSprop(1e-3f), | model.compile(optimizer: keras.optimizers.RMSprop(1e-3f), | ||||
loss: keras.losses.CategoricalCrossentropy(from_logits: true), | |||||
loss: keras.losses.SparseCategoricalCrossentropy(from_logits: true), | |||||
metrics: new[] { "acc" }); | metrics: new[] { "acc" }); | ||||
// prepare dataset | // prepare dataset | ||||
var ((x_train, y_train), (x_test, y_test)) = keras.datasets.cifar10.load_data(); | var ((x_train, y_train), (x_test, y_test)) = keras.datasets.cifar10.load_data(); | ||||
// normalize the input | |||||
x_train = x_train / 255.0f; | x_train = x_train / 255.0f; | ||||
y_train = np_utils.to_categorical(y_train, 10); | |||||
// training | // training | ||||
model.fit(x_train[new Slice(0, 2000)], y_train[new Slice(0, 2000)], | model.fit(x_train[new Slice(0, 2000)], y_train[new Slice(0, 2000)], | ||||
batch_size: 64, | |||||
epochs: 10, | |||||
validation_split: 0.2f); | |||||
batch_size: 64, | |||||
epochs: 10, | |||||
validation_split: 0.2f); | |||||
// save the model | |||||
model.save("./toy_resnet_model"); | |||||
``` | ``` | ||||
此外,Tensorflow.NET也支持用F#搭建上述模型进行训练和推理。 | 此外,Tensorflow.NET也支持用F#搭建上述模型进行训练和推理。 | ||||