examples/cifar10_example.rb in ruby-dnn-0.15.1 vs examples/cifar10_example.rb in ruby-dnn-0.15.2
- old
+ new
@@ -5,63 +5,60 @@
include DNN::Models
include DNN::Layers
include DNN::Optimizers
include DNN::Losses
-CIFAR10 = DNN::CIFAR10
-x_train, y_train = CIFAR10.load_train
-x_test, y_test = CIFAR10.load_test
+x_train, y_train = DNN::CIFAR10.load_train
+x_test, y_test = DNN::CIFAR10.load_test
-x_train = Numo::SFloat.cast(x_train)
-x_test = Numo::SFloat.cast(x_test)
+x_train = Numo::SFloat.cast(x_train) / 255
+x_test = Numo::SFloat.cast(x_test) / 255
-x_train /= 255
-x_test /= 255
-
y_train = DNN::Utils.to_categorical(y_train, 10, Numo::SFloat)
y_test = DNN::Utils.to_categorical(y_test, 10, Numo::SFloat)
model = Sequential.new
model << InputLayer.new([32, 32, 3])
-model << Conv2D.new(16, 5, padding: true)
-model << BatchNormalization.new
+model << Conv2D.new(32, 3, padding: true)
+model << Dropout.new(0.25)
model << ReLU.new
-model << Conv2D.new(16, 5, padding: true)
+model << Conv2D.new(32, 3, padding: true)
model << BatchNormalization.new
model << ReLU.new
-
model << MaxPool2D.new(2)
-model << Conv2D.new(32, 5, padding: true)
-model << BatchNormalization.new
+model << Conv2D.new(64, 3, padding: true)
+model << Dropout.new(0.25)
model << ReLU.new
-model << Conv2D.new(32, 5, padding: true)
+model << Conv2D.new(64, 3, padding: true)
model << BatchNormalization.new
model << ReLU.new
-
model << MaxPool2D.new(2)
-model << Conv2D.new(64, 5, padding: true)
-model << BatchNormalization.new
+model << Conv2D.new(128, 3, padding: true)
+model << Dropout.new(0.25)
model << ReLU.new
-model << Conv2D.new(64, 5, padding: true)
+model << Conv2D.new(128, 3, padding: true)
model << BatchNormalization.new
model << ReLU.new
model << Flatten.new
model << Dense.new(512)
model << BatchNormalization.new
model << ReLU.new
-model << Dropout.new(0.5)
model << Dense.new(10)
model.setup(Adam.new, SoftmaxCrossEntropy.new)
-model.train(x_train, y_train, 10, batch_size: 100, test: [x_test, y_test])
+model.train(x_train, y_train, 10, batch_size: 128, test: [x_test, y_test])
+
+accuracy, loss = model.evaluate(x_test, y_test)
+puts "accuracy: #{accuracy}"
+puts "loss: #{loss}"