From 4d2701438f75a37bdf21254575f0b0a295fd2bcf Mon Sep 17 00:00:00 2001 From: jjallaire Date: Mon, 28 Aug 2017 11:29:05 -0700 Subject: [PATCH] add website folder --- .Rbuildignore | 1 + website/LICENSE.html | 152 ++++ website/articles/about_keras_layers.html | 252 ++++++ website/articles/about_keras_models.html | 356 ++++++++ website/articles/applications.html | 281 ++++++ website/articles/backend.html | 809 ++++++++++++++++++ website/articles/checkpoints.h5 | Bin 0 -> 222272 bytes website/articles/custom_layers.html | 219 +++++ website/articles/examples/addition_rnn.R | 210 +++++ website/articles/examples/addition_rnn.html | 327 +++++++ website/articles/examples/babi_memnn.R | 229 +++++ website/articles/examples/babi_memnn.html | 352 ++++++++ website/articles/examples/babi_rnn.R | 238 ++++++ website/articles/examples/babi_rnn.html | 438 ++++++++++ website/articles/examples/cifar10_cnn.R | 95 ++ website/articles/examples/cifar10_cnn.html | 228 +++++ .../examples/conv_filter_visualization.R | 1 + .../examples/conv_filter_visualization.html | 137 +++ .../examples/conv_filter_visualization.py | 135 +++ website/articles/examples/conv_lstm.R | 187 ++++ website/articles/examples/conv_lstm.html | 323 +++++++ website/articles/examples/deep_dream.R | 205 +++++ website/articles/examples/deep_dream.html | 334 ++++++++ website/articles/examples/deep_dream.jpg | Bin 0 -> 107261 bytes website/articles/examples/image_ocr.R | 1 + website/articles/examples/image_ocr.html | 137 +++ website/articles/examples/image_ocr.py | 491 +++++++++++ .../examples/imdb_bidirectional_lstm.R | 54 ++ .../examples/imdb_bidirectional_lstm.html | 185 ++++ website/articles/examples/imdb_cnn.R | 93 ++ website/articles/examples/imdb_cnn.html | 224 +++++ website/articles/examples/imdb_cnn_lstm.R | 91 ++ website/articles/examples/imdb_cnn_lstm.html | 224 +++++ website/articles/examples/imdb_fasttext.R | 117 +++ website/articles/examples/imdb_fasttext.html | 244 ++++++ website/articles/examples/imdb_lstm.R | 64 ++ website/articles/examples/imdb_lstm.html | 192 +++++ website/articles/examples/lstm_benchmark.R | 1 + website/articles/examples/lstm_benchmark.html | 137 +++ website/articles/examples/lstm_benchmark.py | 88 ++ .../articles/examples/lstm_text_generation.R | 137 +++ .../examples/lstm_text_generation.html | 261 ++++++ website/articles/examples/mnist_acgan.R | 351 ++++++++ website/articles/examples/mnist_acgan.html | 498 +++++++++++ .../articles/examples/mnist_antirectifier.R | 121 +++ .../examples/mnist_antirectifier.html | 247 ++++++ website/articles/examples/mnist_cnn.R | 75 ++ website/articles/examples/mnist_cnn.html | 204 +++++ .../examples/mnist_hierarchical_rnn.R | 103 +++ .../examples/mnist_hierarchical_rnn.html | 218 +++++ .../examples/mnist_hierarchical_rnn.py | 91 ++ website/articles/examples/mnist_irnn.R | 85 ++ website/articles/examples/mnist_irnn.html | 203 +++++ website/articles/examples/mnist_mlp.R | 67 ++ website/articles/examples/mnist_mlp.html | 197 +++++ website/articles/examples/mnist_net2net.R | 1 + website/articles/examples/mnist_net2net.html | 137 +++ website/articles/examples/mnist_net2net.py | 389 +++++++++ .../articles/examples/mnist_siamese_graph.R | 1 + .../examples/mnist_siamese_graph.html | 137 +++ .../articles/examples/mnist_siamese_graph.py | 131 +++ website/articles/examples/mnist_swwae.R | 1 + website/articles/examples/mnist_swwae.html | 137 +++ website/articles/examples/mnist_swwae.py | 203 +++++ .../articles/examples/mnist_transfer_cnn.R | 87 ++ .../articles/examples/mnist_transfer_cnn.html | 215 +++++ .../examples/neural-style-base-img.png | Bin 0 -> 142952 bytes .../articles/examples/neural-style-style.jpg | Bin 0 -> 562577 bytes website/articles/examples/neural_doodle.py | 366 ++++++++ .../articles/examples/neural_style_transfer.R | 256 ++++++ .../examples/neural_style_transfer.html | 372 ++++++++ website/articles/examples/nueral_doodle.R | 1 + website/articles/examples/nueral_doodle.html | 137 +++ .../examples/pretrained_word_embeddings.R | 185 ++++ .../examples/pretrained_word_embeddings.html | 299 +++++++ .../examples/pretrained_word_embeddings.py | 150 ++++ website/articles/examples/reuters_mlp.R | 69 ++ website/articles/examples/reuters_mlp.html | 203 +++++ .../examples/reuters_mlp_relu_vs_selu.R | 1 + .../examples/reuters_mlp_relu_vs_selu.html | 137 +++ .../examples/reuters_mlp_relu_vs_selu.py | 174 ++++ website/articles/examples/stateful_lstm.R | 76 ++ website/articles/examples/stateful_lstm.html | 203 +++++ .../examples/variational_autoencoder.R | 117 +++ .../examples/variational_autoencoder.html | 250 ++++++ .../examples/variational_autoencoder_deconv.R | 220 +++++ .../variational_autoencoder_deconv.html | 353 ++++++++ website/articles/faq.html | 549 ++++++++++++ website/articles/functional_api.html | 491 +++++++++++ website/articles/getting_started.html | 269 ++++++ website/articles/images/MNIST.png | Bin 0 -> 16334 bytes .../images/multi-input-multi-output-graph.png | Bin 0 -> 82918 bytes .../articles/images/regular_stacked_lstm.png | Bin 0 -> 38047 bytes website/articles/images/tensorboard.png | Bin 0 -> 261943 bytes .../articles/images/tensorboard_compare.png | Bin 0 -> 285319 bytes .../images/training_history_ggplot2.png | Bin 0 -> 186933 bytes website/articles/sequential_model.html | 554 ++++++++++++ website/articles/training_callbacks.html | 361 ++++++++ website/articles/training_visualization.html | 343 ++++++++ website/authors.html | 183 ++++ website/extra.css | 64 ++ website/extra.js | 16 + website/images/training_history_ggplot2.png | Bin 0 -> 186933 bytes website/jquery.sticky-kit.min.js | 9 + website/link.svg | 12 + website/pkgdown.css | 163 ++++ website/pkgdown.js | 45 + website/reference/KerasCallback.html | 227 +++++ website/reference/KerasLayer.html | 184 ++++ website/reference/activation_relu.html | 209 +++++ .../reference/application_inception_v3.html | 237 +++++ website/reference/application_mobilenet.html | 277 ++++++ website/reference/application_resnet50.html | 250 ++++++ website/reference/application_vgg.html | 246 ++++++ website/reference/application_xception.html | 240 ++++++ website/reference/backend.html | 185 ++++ website/reference/bidirectional.html | 223 +++++ website/reference/callback_csv_logger.html | 192 +++++ .../reference/callback_early_stopping.html | 207 +++++ website/reference/callback_lambda.html | 211 +++++ .../callback_learning_rate_scheduler.html | 184 ++++ .../reference/callback_model_checkpoint.html | 228 +++++ .../reference/callback_progbar_logger.html | 184 ++++ .../callback_reduce_lr_on_plateau.html | 224 +++++ .../reference/callback_remote_monitor.html | 197 +++++ website/reference/callback_tensorboard.html | 242 ++++++ .../reference/callback_terminate_on_naan.html | 173 ++++ website/reference/compile.html | 223 +++++ website/reference/constraint_maxnorm.html | 188 ++++ website/reference/constraint_minmaxnorm.html | 199 +++++ website/reference/constraint_nonneg.html | 167 ++++ website/reference/constraint_unitnorm.html | 182 ++++ website/reference/count_params.html | 183 ++++ website/reference/create_layer.html | 192 +++++ website/reference/dataset_boston_housing.html | 199 +++++ website/reference/dataset_cifar10.html | 179 ++++ website/reference/dataset_cifar100.html | 187 ++++ website/reference/dataset_imdb.html | 236 +++++ website/reference/dataset_mnist.html | 186 ++++ website/reference/dataset_reuters.html | 231 +++++ website/reference/evaluate.html | 223 +++++ website/reference/evaluate_generator.html | 208 +++++ website/reference/fit.html | 269 ++++++ website/reference/fit_generator.html | 268 ++++++ .../reference/fit_image_data_generator.html | 200 +++++ website/reference/fit_text_tokenizer.html | 199 +++++ website/reference/flow_images_from_data.html | 230 +++++ .../reference/flow_images_from_directory.html | 263 ++++++ website/reference/get_config.html | 216 +++++ website/reference/get_file.html | 216 +++++ website/reference/get_input_at.html | 204 +++++ website/reference/get_layer.html | 201 +++++ website/reference/get_weights.html | 188 ++++ website/reference/hdf5_matrix.html | 199 +++++ website/reference/image_data_generator.html | 262 ++++++ website/reference/image_load.html | 192 +++++ website/reference/image_to_array.html | 188 ++++ .../imagenet_decode_predictions.html | 180 ++++ .../reference/imagenet_preprocess_input.html | 175 ++++ website/reference/implementation.html | 178 ++++ website/reference/initializer_constant.html | 188 ++++ .../reference/initializer_glorot_normal.html | 198 +++++ .../reference/initializer_glorot_uniform.html | 198 +++++ website/reference/initializer_he_normal.html | 196 +++++ website/reference/initializer_he_uniform.html | 196 +++++ website/reference/initializer_identity.html | 188 ++++ .../reference/initializer_lecun_normal.html | 200 +++++ .../reference/initializer_lecun_uniform.html | 197 +++++ website/reference/initializer_ones.html | 178 ++++ website/reference/initializer_orthogonal.html | 199 +++++ .../reference/initializer_random_normal.html | 196 +++++ .../reference/initializer_random_uniform.html | 196 +++++ .../initializer_truncated_normal.html | 199 +++++ .../initializer_variance_scaling.html | 213 +++++ website/reference/initializer_zeros.html | 178 ++++ website/reference/install_keras.html | 269 ++++++ website/reference/is_keras_available.html | 195 +++++ website/reference/keras_model.html | 213 +++++ website/reference/keras_model_sequential.html | 218 +++++ website/reference/layer_activation.html | 228 +++++ website/reference/layer_activation_elu.html | 222 +++++ .../layer_activation_leaky_relu.html | 222 +++++ .../layer_activation_parametric_relu.html | 239 ++++++ .../layer_activation_thresholded_relu.html | 221 +++++ .../layer_activity_regularization.html | 241 ++++++ website/reference/layer_add.html | 184 ++++ website/reference/layer_alpha_dropout.html | 221 +++++ website/reference/layer_average.html | 184 ++++ .../reference/layer_average_pooling_1d.html | 230 +++++ .../reference/layer_average_pooling_2d.html | 249 ++++++ .../reference/layer_average_pooling_3d.html | 248 ++++++ .../reference/layer_batch_normalization.html | 294 +++++++ website/reference/layer_concatenate.html | 189 ++++ website/reference/layer_conv_1d.html | 323 +++++++ website/reference/layer_conv_2d.html | 331 +++++++ .../reference/layer_conv_2d_transpose.html | 332 +++++++ website/reference/layer_conv_3d.html | 335 ++++++++ .../reference/layer_conv_3d_transpose.html | 325 +++++++ website/reference/layer_conv_lstm_2d.html | 377 ++++++++ website/reference/layer_cropping_1d.html | 226 +++++ website/reference/layer_cropping_2d.html | 244 ++++++ website/reference/layer_cropping_3d.html | 247 ++++++ website/reference/layer_dense.html | 283 ++++++ website/reference/layer_dot.html | 192 +++++ website/reference/layer_dropout.html | 220 +++++ website/reference/layer_embedding.html | 256 ++++++ website/reference/layer_flatten.html | 200 +++++ website/reference/layer_gaussian_dropout.html | 242 ++++++ website/reference/layer_gaussian_noise.html | 235 +++++ .../layer_global_average_pooling_1d.html | 218 +++++ .../layer_global_average_pooling_2d.html | 228 +++++ .../layer_global_average_pooling_3d.html | 229 +++++ .../layer_global_max_pooling_1d.html | 218 +++++ .../layer_global_max_pooling_2d.html | 228 +++++ .../layer_global_max_pooling_3d.html | 229 +++++ website/reference/layer_gru.html | 415 +++++++++ website/reference/layer_input.html | 225 +++++ website/reference/layer_lambda.html | 253 ++++++ .../reference/layer_locally_connected_1d.html | 281 ++++++ .../reference/layer_locally_connected_2d.html | 286 +++++++ website/reference/layer_lstm.html | 424 +++++++++ website/reference/layer_masking.html | 227 +++++ website/reference/layer_max_pooling_1d.html | 230 +++++ website/reference/layer_max_pooling_2d.html | 249 ++++++ website/reference/layer_max_pooling_3d.html | 248 ++++++ website/reference/layer_maximum.html | 185 ++++ website/reference/layer_multiply.html | 185 ++++ website/reference/layer_permute.html | 240 ++++++ website/reference/layer_repeat_vector.html | 215 +++++ website/reference/layer_reshape.html | 233 +++++ .../reference/layer_separable_conv_2d.html | 327 +++++++ website/reference/layer_simple_rnn.html | 407 +++++++++ .../reference/layer_spatial_dropout_1d.html | 224 +++++ .../reference/layer_spatial_dropout_2d.html | 233 +++++ .../reference/layer_spatial_dropout_3d.html | 232 +++++ website/reference/layer_upsampling_1d.html | 224 +++++ website/reference/layer_upsampling_2d.html | 243 ++++++ website/reference/layer_upsampling_3d.html | 246 ++++++ website/reference/layer_zero_padding_1d.html | 229 +++++ website/reference/layer_zero_padding_2d.html | 244 ++++++ website/reference/layer_zero_padding_3d.html | 244 ++++++ .../reference/loss_mean_squared_error.html | 235 +++++ website/reference/make_sampling_table.html | 204 +++++ website/reference/metric_binary_accuracy.html | 238 ++++++ website/reference/model_to_json.html | 191 +++++ website/reference/model_to_yaml.html | 191 +++++ website/reference/normalize.html | 183 ++++ website/reference/optimizer_adadelta.html | 210 +++++ website/reference/optimizer_adagrad.html | 206 +++++ website/reference/optimizer_adam.html | 215 +++++ website/reference/optimizer_adamax.html | 210 +++++ website/reference/optimizer_nadam.html | 220 +++++ website/reference/optimizer_rmsprop.html | 211 +++++ website/reference/optimizer_sgd.html | 210 +++++ website/reference/pad_sequences.html | 214 +++++ website/reference/pipe.html | 159 ++++ .../plot.keras_training_history.html | 195 +++++ website/reference/pop_layer.html | 186 ++++ .../predict.keras.engine.training.Model.html | 210 +++++ website/reference/predict_generator.html | 217 +++++ website/reference/predict_on_batch.html | 195 +++++ website/reference/predict_proba.html | 205 +++++ website/reference/reexports.html | 165 ++++ website/reference/regularizer_l1.html | 181 ++++ website/reference/reset_states.html | 177 ++++ website/reference/save_model_hdf5.html | 225 +++++ .../reference/save_model_weights_hdf5.html | 214 +++++ website/reference/sequences_to_matrix.html | 194 +++++ website/reference/serialize_model.html | 210 +++++ website/reference/skipgrams.html | 232 +++++ .../summary.keras.engine.training.Model.html | 199 +++++ website/reference/text_hashing_trick.html | 216 +++++ website/reference/text_one_hot.html | 202 +++++ website/reference/text_to_word_sequence.html | 198 +++++ website/reference/text_tokenizer.html | 229 +++++ website/reference/texts_to_matrix.html | 194 +++++ website/reference/texts_to_sequences.html | 184 ++++ .../texts_to_sequences_generator.html | 190 ++++ website/reference/time_distributed.html | 228 +++++ website/reference/to_categorical.html | 185 ++++ website/reference/to_numpy_array.html | 188 ++++ website/reference/train_on_batch.html | 213 +++++ 282 files changed, 57691 insertions(+) create mode 100644 website/LICENSE.html create mode 100644 website/articles/about_keras_layers.html create mode 100644 website/articles/about_keras_models.html create mode 100644 website/articles/applications.html create mode 100644 website/articles/backend.html create mode 100644 website/articles/checkpoints.h5 create mode 100644 website/articles/custom_layers.html create mode 100644 website/articles/examples/addition_rnn.R create mode 100644 website/articles/examples/addition_rnn.html create mode 100644 website/articles/examples/babi_memnn.R create mode 100644 website/articles/examples/babi_memnn.html create mode 100644 website/articles/examples/babi_rnn.R create mode 100644 website/articles/examples/babi_rnn.html create mode 100644 website/articles/examples/cifar10_cnn.R create mode 100644 website/articles/examples/cifar10_cnn.html create mode 100644 website/articles/examples/conv_filter_visualization.R create mode 100644 website/articles/examples/conv_filter_visualization.html create mode 100755 website/articles/examples/conv_filter_visualization.py create mode 100644 website/articles/examples/conv_lstm.R create mode 100644 website/articles/examples/conv_lstm.html create mode 100644 website/articles/examples/deep_dream.R create mode 100644 website/articles/examples/deep_dream.html create mode 100644 website/articles/examples/deep_dream.jpg create mode 100644 website/articles/examples/image_ocr.R create mode 100644 website/articles/examples/image_ocr.html create mode 100755 website/articles/examples/image_ocr.py create mode 100644 website/articles/examples/imdb_bidirectional_lstm.R create mode 100644 website/articles/examples/imdb_bidirectional_lstm.html create mode 100644 website/articles/examples/imdb_cnn.R create mode 100644 website/articles/examples/imdb_cnn.html create mode 100644 website/articles/examples/imdb_cnn_lstm.R create mode 100644 website/articles/examples/imdb_cnn_lstm.html create mode 100644 website/articles/examples/imdb_fasttext.R create mode 100644 website/articles/examples/imdb_fasttext.html create mode 100644 website/articles/examples/imdb_lstm.R create mode 100644 website/articles/examples/imdb_lstm.html create mode 100644 website/articles/examples/lstm_benchmark.R create mode 100644 website/articles/examples/lstm_benchmark.html create mode 100755 website/articles/examples/lstm_benchmark.py create mode 100644 website/articles/examples/lstm_text_generation.R create mode 100644 website/articles/examples/lstm_text_generation.html create mode 100644 website/articles/examples/mnist_acgan.R create mode 100644 website/articles/examples/mnist_acgan.html create mode 100644 website/articles/examples/mnist_antirectifier.R create mode 100644 website/articles/examples/mnist_antirectifier.html create mode 100644 website/articles/examples/mnist_cnn.R create mode 100644 website/articles/examples/mnist_cnn.html create mode 100644 website/articles/examples/mnist_hierarchical_rnn.R create mode 100644 website/articles/examples/mnist_hierarchical_rnn.html create mode 100755 website/articles/examples/mnist_hierarchical_rnn.py create mode 100644 website/articles/examples/mnist_irnn.R create mode 100644 website/articles/examples/mnist_irnn.html create mode 100644 website/articles/examples/mnist_mlp.R create mode 100644 website/articles/examples/mnist_mlp.html create mode 100644 website/articles/examples/mnist_net2net.R create mode 100644 website/articles/examples/mnist_net2net.html create mode 100755 website/articles/examples/mnist_net2net.py create mode 100644 website/articles/examples/mnist_siamese_graph.R create mode 100644 website/articles/examples/mnist_siamese_graph.html create mode 100755 website/articles/examples/mnist_siamese_graph.py create mode 100644 website/articles/examples/mnist_swwae.R create mode 100644 website/articles/examples/mnist_swwae.html create mode 100755 website/articles/examples/mnist_swwae.py create mode 100644 website/articles/examples/mnist_transfer_cnn.R create mode 100644 website/articles/examples/mnist_transfer_cnn.html create mode 100644 website/articles/examples/neural-style-base-img.png create mode 100644 website/articles/examples/neural-style-style.jpg create mode 100755 website/articles/examples/neural_doodle.py create mode 100644 website/articles/examples/neural_style_transfer.R create mode 100644 website/articles/examples/neural_style_transfer.html create mode 100644 website/articles/examples/nueral_doodle.R create mode 100644 website/articles/examples/nueral_doodle.html create mode 100644 website/articles/examples/pretrained_word_embeddings.R create mode 100644 website/articles/examples/pretrained_word_embeddings.html create mode 100755 website/articles/examples/pretrained_word_embeddings.py create mode 100644 website/articles/examples/reuters_mlp.R create mode 100644 website/articles/examples/reuters_mlp.html create mode 100644 website/articles/examples/reuters_mlp_relu_vs_selu.R create mode 100644 website/articles/examples/reuters_mlp_relu_vs_selu.html create mode 100644 website/articles/examples/reuters_mlp_relu_vs_selu.py create mode 100644 website/articles/examples/stateful_lstm.R create mode 100644 website/articles/examples/stateful_lstm.html create mode 100644 website/articles/examples/variational_autoencoder.R create mode 100644 website/articles/examples/variational_autoencoder.html create mode 100644 website/articles/examples/variational_autoencoder_deconv.R create mode 100644 website/articles/examples/variational_autoencoder_deconv.html create mode 100644 website/articles/faq.html create mode 100644 website/articles/functional_api.html create mode 100644 website/articles/getting_started.html create mode 100644 website/articles/images/MNIST.png create mode 100644 website/articles/images/multi-input-multi-output-graph.png create mode 100644 website/articles/images/regular_stacked_lstm.png create mode 100644 website/articles/images/tensorboard.png create mode 100644 website/articles/images/tensorboard_compare.png create mode 100644 website/articles/images/training_history_ggplot2.png create mode 100644 website/articles/sequential_model.html create mode 100644 website/articles/training_callbacks.html create mode 100644 website/articles/training_visualization.html create mode 100644 website/authors.html create mode 100644 website/extra.css create mode 100644 website/extra.js create mode 100644 website/images/training_history_ggplot2.png create mode 100644 website/jquery.sticky-kit.min.js create mode 100644 website/link.svg create mode 100644 website/pkgdown.css create mode 100644 website/pkgdown.js create mode 100644 website/reference/KerasCallback.html create mode 100644 website/reference/KerasLayer.html create mode 100644 website/reference/activation_relu.html create mode 100644 website/reference/application_inception_v3.html create mode 100644 website/reference/application_mobilenet.html create mode 100644 website/reference/application_resnet50.html create mode 100644 website/reference/application_vgg.html create mode 100644 website/reference/application_xception.html create mode 100644 website/reference/backend.html create mode 100644 website/reference/bidirectional.html create mode 100644 website/reference/callback_csv_logger.html create mode 100644 website/reference/callback_early_stopping.html create mode 100644 website/reference/callback_lambda.html create mode 100644 website/reference/callback_learning_rate_scheduler.html create mode 100644 website/reference/callback_model_checkpoint.html create mode 100644 website/reference/callback_progbar_logger.html create mode 100644 website/reference/callback_reduce_lr_on_plateau.html create mode 100644 website/reference/callback_remote_monitor.html create mode 100644 website/reference/callback_tensorboard.html create mode 100644 website/reference/callback_terminate_on_naan.html create mode 100644 website/reference/compile.html create mode 100644 website/reference/constraint_maxnorm.html create mode 100644 website/reference/constraint_minmaxnorm.html create mode 100644 website/reference/constraint_nonneg.html create mode 100644 website/reference/constraint_unitnorm.html create mode 100644 website/reference/count_params.html create mode 100644 website/reference/create_layer.html create mode 100644 website/reference/dataset_boston_housing.html create mode 100644 website/reference/dataset_cifar10.html create mode 100644 website/reference/dataset_cifar100.html create mode 100644 website/reference/dataset_imdb.html create mode 100644 website/reference/dataset_mnist.html create mode 100644 website/reference/dataset_reuters.html create mode 100644 website/reference/evaluate.html create mode 100644 website/reference/evaluate_generator.html create mode 100644 website/reference/fit.html create mode 100644 website/reference/fit_generator.html create mode 100644 website/reference/fit_image_data_generator.html create mode 100644 website/reference/fit_text_tokenizer.html create mode 100644 website/reference/flow_images_from_data.html create mode 100644 website/reference/flow_images_from_directory.html create mode 100644 website/reference/get_config.html create mode 100644 website/reference/get_file.html create mode 100644 website/reference/get_input_at.html create mode 100644 website/reference/get_layer.html create mode 100644 website/reference/get_weights.html create mode 100644 website/reference/hdf5_matrix.html create mode 100644 website/reference/image_data_generator.html create mode 100644 website/reference/image_load.html create mode 100644 website/reference/image_to_array.html create mode 100644 website/reference/imagenet_decode_predictions.html create mode 100644 website/reference/imagenet_preprocess_input.html create mode 100644 website/reference/implementation.html create mode 100644 website/reference/initializer_constant.html create mode 100644 website/reference/initializer_glorot_normal.html create mode 100644 website/reference/initializer_glorot_uniform.html create mode 100644 website/reference/initializer_he_normal.html create mode 100644 website/reference/initializer_he_uniform.html create mode 100644 website/reference/initializer_identity.html create mode 100644 website/reference/initializer_lecun_normal.html create mode 100644 website/reference/initializer_lecun_uniform.html create mode 100644 website/reference/initializer_ones.html create mode 100644 website/reference/initializer_orthogonal.html create mode 100644 website/reference/initializer_random_normal.html create mode 100644 website/reference/initializer_random_uniform.html create mode 100644 website/reference/initializer_truncated_normal.html create mode 100644 website/reference/initializer_variance_scaling.html create mode 100644 website/reference/initializer_zeros.html create mode 100644 website/reference/install_keras.html create mode 100644 website/reference/is_keras_available.html create mode 100644 website/reference/keras_model.html create mode 100644 website/reference/keras_model_sequential.html create mode 100644 website/reference/layer_activation.html create mode 100644 website/reference/layer_activation_elu.html create mode 100644 website/reference/layer_activation_leaky_relu.html create mode 100644 website/reference/layer_activation_parametric_relu.html create mode 100644 website/reference/layer_activation_thresholded_relu.html create mode 100644 website/reference/layer_activity_regularization.html create mode 100644 website/reference/layer_add.html create mode 100644 website/reference/layer_alpha_dropout.html create mode 100644 website/reference/layer_average.html create mode 100644 website/reference/layer_average_pooling_1d.html create mode 100644 website/reference/layer_average_pooling_2d.html create mode 100644 website/reference/layer_average_pooling_3d.html create mode 100644 website/reference/layer_batch_normalization.html create mode 100644 website/reference/layer_concatenate.html create mode 100644 website/reference/layer_conv_1d.html create mode 100644 website/reference/layer_conv_2d.html create mode 100644 website/reference/layer_conv_2d_transpose.html create mode 100644 website/reference/layer_conv_3d.html create mode 100644 website/reference/layer_conv_3d_transpose.html create mode 100644 website/reference/layer_conv_lstm_2d.html create mode 100644 website/reference/layer_cropping_1d.html create mode 100644 website/reference/layer_cropping_2d.html create mode 100644 website/reference/layer_cropping_3d.html create mode 100644 website/reference/layer_dense.html create mode 100644 website/reference/layer_dot.html create mode 100644 website/reference/layer_dropout.html create mode 100644 website/reference/layer_embedding.html create mode 100644 website/reference/layer_flatten.html create mode 100644 website/reference/layer_gaussian_dropout.html create mode 100644 website/reference/layer_gaussian_noise.html create mode 100644 website/reference/layer_global_average_pooling_1d.html create mode 100644 website/reference/layer_global_average_pooling_2d.html create mode 100644 website/reference/layer_global_average_pooling_3d.html create mode 100644 website/reference/layer_global_max_pooling_1d.html create mode 100644 website/reference/layer_global_max_pooling_2d.html create mode 100644 website/reference/layer_global_max_pooling_3d.html create mode 100644 website/reference/layer_gru.html create mode 100644 website/reference/layer_input.html create mode 100644 website/reference/layer_lambda.html create mode 100644 website/reference/layer_locally_connected_1d.html create mode 100644 website/reference/layer_locally_connected_2d.html create mode 100644 website/reference/layer_lstm.html create mode 100644 website/reference/layer_masking.html create mode 100644 website/reference/layer_max_pooling_1d.html create mode 100644 website/reference/layer_max_pooling_2d.html create mode 100644 website/reference/layer_max_pooling_3d.html create mode 100644 website/reference/layer_maximum.html create mode 100644 website/reference/layer_multiply.html create mode 100644 website/reference/layer_permute.html create mode 100644 website/reference/layer_repeat_vector.html create mode 100644 website/reference/layer_reshape.html create mode 100644 website/reference/layer_separable_conv_2d.html create mode 100644 website/reference/layer_simple_rnn.html create mode 100644 website/reference/layer_spatial_dropout_1d.html create mode 100644 website/reference/layer_spatial_dropout_2d.html create mode 100644 website/reference/layer_spatial_dropout_3d.html create mode 100644 website/reference/layer_upsampling_1d.html create mode 100644 website/reference/layer_upsampling_2d.html create mode 100644 website/reference/layer_upsampling_3d.html create mode 100644 website/reference/layer_zero_padding_1d.html create mode 100644 website/reference/layer_zero_padding_2d.html create mode 100644 website/reference/layer_zero_padding_3d.html create mode 100644 website/reference/loss_mean_squared_error.html create mode 100644 website/reference/make_sampling_table.html create mode 100644 website/reference/metric_binary_accuracy.html create mode 100644 website/reference/model_to_json.html create mode 100644 website/reference/model_to_yaml.html create mode 100644 website/reference/normalize.html create mode 100644 website/reference/optimizer_adadelta.html create mode 100644 website/reference/optimizer_adagrad.html create mode 100644 website/reference/optimizer_adam.html create mode 100644 website/reference/optimizer_adamax.html create mode 100644 website/reference/optimizer_nadam.html create mode 100644 website/reference/optimizer_rmsprop.html create mode 100644 website/reference/optimizer_sgd.html create mode 100644 website/reference/pad_sequences.html create mode 100644 website/reference/pipe.html create mode 100644 website/reference/plot.keras_training_history.html create mode 100644 website/reference/pop_layer.html create mode 100644 website/reference/predict.keras.engine.training.Model.html create mode 100644 website/reference/predict_generator.html create mode 100644 website/reference/predict_on_batch.html create mode 100644 website/reference/predict_proba.html create mode 100644 website/reference/reexports.html create mode 100644 website/reference/regularizer_l1.html create mode 100644 website/reference/reset_states.html create mode 100644 website/reference/save_model_hdf5.html create mode 100644 website/reference/save_model_weights_hdf5.html create mode 100644 website/reference/sequences_to_matrix.html create mode 100644 website/reference/serialize_model.html create mode 100644 website/reference/skipgrams.html create mode 100644 website/reference/summary.keras.engine.training.Model.html create mode 100644 website/reference/text_hashing_trick.html create mode 100644 website/reference/text_one_hot.html create mode 100644 website/reference/text_to_word_sequence.html create mode 100644 website/reference/text_tokenizer.html create mode 100644 website/reference/texts_to_matrix.html create mode 100644 website/reference/texts_to_sequences.html create mode 100644 website/reference/texts_to_sequences_generator.html create mode 100644 website/reference/time_distributed.html create mode 100644 website/reference/to_categorical.html create mode 100644 website/reference/to_numpy_array.html create mode 100644 website/reference/train_on_batch.html diff --git a/.Rbuildignore b/.Rbuildignore index e8db4ca60..00df434de 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -5,6 +5,7 @@ ^.*\.hdf5$ ^README.R?md$ ^docs$ +^website$ ^pkgdown$ ^dev$ ^runs$ diff --git a/website/LICENSE.html b/website/LICENSE.html new file mode 100644 index 000000000..2300cf017 --- /dev/null +++ b/website/LICENSE.html @@ -0,0 +1,152 @@ + + + + + + + + +License • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+
+ + +
YEAR: 2017
+COPYRIGHT HOLDER: RStudio, Inc; Google, Inc; François Chollet; Yuan Tang
+
+ +
+ +
+ + +
+ + +
+

Site built with pkgdown.

+
+ +
+
+ + + diff --git a/website/articles/about_keras_layers.html b/website/articles/about_keras_layers.html new file mode 100644 index 000000000..47147a272 --- /dev/null +++ b/website/articles/about_keras_layers.html @@ -0,0 +1,252 @@ + + + + + + + +About Keras Layers • keras + + + + + + + +
+
+ + + +
+
+ + + + +
+
+

+Overview

+

Keras layers are the fundamental building block of keras models. Layers are created using a wide variety of layer_ functions and are typically composed together by stacking calls to them using the pipe %>% operator. For example:

+
model <- keras_model_sequential() 
+model %>% 
+  layer_dense(units = 32, input_shape = c(784)) %>% 
+  layer_activation('relu') %>% 
+  layer_dense(units = 10) %>% 
+  layer_activation('softmax')
+

A wide variety of layers are available, including:

+ +
+
+

+Properties

+

All layers share the following properties:

+
    +
  • layer$name — String, must be unique within a model.

  • +
  • layer$input_spec — List of input specifications. Each entry describes one required input: (ndim, dtype). A layer with n input tensors must have an input_spec of length n.

  • +
  • layer$trainable — Boolean, whether the layer weights will be updated during training.

  • +
  • layer$uses_learning_phase – Whether any operation of the layer uses K.in_training_phase() or K.in_test_phase().

  • +
  • layer$input_shape — Input shape. Provided for convenience, but note that there may be cases in which this attribute is ill-defined (e.g. a shared layer with multiple input shapes), in which case requesting input_shape will result in an error. Prefer using get_input_shape_at(layer, node_index).

  • +
  • layer$output_shape — Output shape. See above.

  • +
  • layer$inbound_nodes — List of nodes.

  • +
  • layer$outbound_nodes — List of nodes.

  • +
  • layer$input, layer$output — Input/output tensor(s). Note that if the layer is used more than once (shared layer), this is ill-defined and will result in an error. In such cases, use get_input_at(layer, node_index).

  • +
  • layer$input_mask, layer$output_mask — Same as above, for masks.

  • +
  • layer$trainable_weights — List of variables.

  • +
  • layer$non_trainable_weights — List of variables.

  • +
  • layer$weights — The concatenation of the lists trainable_weights and non_trainable_weights (in this order).

  • +
  • layer$constraints — Mapping of weights to constraints.

  • +
+
+
+

+Functions

+

The following functions are available for interacting with layers:

+ ++++ + + + + + + + + + + + + + + + + + + + + + + +
+get_config() from_config() + +

+Layer/Model configuration +

+
+get_weights() set_weights() + +

+Layer/Model weights as R arrays +

+
+count_params() + +

+Count the total number of scalars composing the weights. +

+
+get_input_at() get_output_at() get_input_shape_at() get_output_shape_at() get_input_mask_at() get_output_mask_at() + +

+Retrieve tensors for layers with multiple nodes +

+
+reset_states() + +

+Reset the states for a layer +

+
+
+
+
+ + + +
+ + +
+ +
+

Site built with pkgdown.

+
+ +
+
+ + + diff --git a/website/articles/about_keras_models.html b/website/articles/about_keras_models.html new file mode 100644 index 000000000..adbf19d70 --- /dev/null +++ b/website/articles/about_keras_models.html @@ -0,0 +1,356 @@ + + + + + + + +About Keras Models • keras + + + + + + + +
+
+ + + +
+
+ + + + +
+
+

+Overview

+

There are two types of models available in Keras: sequential models and models created with the functional API.

+
+

+Sequential

+

Sequential models are created using the keras_model_sequential() function and are composed of a set of linear layers:

+
model <- keras_model_sequential() 
+model %>% 
+  layer_dense(units = 32, input_shape = c(784)) %>% 
+  layer_activation('relu') %>% 
+  layer_dense(units = 10) %>% 
+  layer_activation('softmax')
+

Note that Keras objects are modified in place which is why it’s not necessary for model to be assigned back to after the layers are added.

+

Learn more by reading the Guide to the Sequential Model.

+
+
+

+Functional

+

The functional API enables you to define more complex models, such as multi-output models, directed acyclic graphs, or models with shared layers. To create a model with the functional API compose a set of input and output layers then pass them to the keras_model() function:

+
tweet_a <- layer_input(shape = c(140, 256))
+tweet_b <- layer_input(shape = c(140, 256))
+
+# This layer can take as input a matrix and will return a vector of size 64
+shared_lstm <- layer_lstm(units = 64)
+
+# When we reuse the same layer instance multiple times, the weights of the layer are also
+# being reused (it is effectively *the same* layer)
+encoded_a <- tweet_a %>% shared_lstm
+encoded_b <- tweet_b %>% shared_lstm
+
+# We can then concatenate the two vectors and add a logistic regression on top
+predictions <- layer_concatenate(c(encoded_a, encoded_b), axis=-1) %>% 
+  layer_dense(units = 1, activation = 'sigmoid')
+
+# We define a trainable model linking the tweet inputs to the predictions
+model <- keras_model(inputs = c(tweet_a, tweet_b), outputs = predictions)
+

Learn more by reading the Guide to the Functional API.

+
+
+
+

+Properites

+

All models share the following properties:

+
    +
  • model$layers — A flattened list of the layers comprising the model graph.

  • +
  • model$inputs — List of input tensors.

  • +
  • model$outputs — List of output tensors.

  • +
+
+
+

+Functions

+

These functions enable you to create, train, evaluate, persist, and generate predictions with models:

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+keras_model() + +

+Keras Model +

+
+keras_model_sequential() + +

+Keras Model composed of a linear stack of layers +

+
+compile() + +

+Configure a Keras model for training +

+
+fit() + +

+Train a Keras model +

+
+evaluate() + +

+Evaluate a Keras model +

+
+predict() + +

+Predict Method for Keras Models +

+
+summary() + +

+Print a summary of a model +

+
+save_model_hdf5() load_model_hdf5() + +

+Save/Load models using HDF5 files +

+
+get_layer() + +

+Retrieves a layer based on either its name (unique) or index. +

+
+pop_layer() + +

+Remove the last layer in a model +

+
+save_model_weights_hdf5() load_model_weights_hdf5() + +

+Save/Load model weights using HDF5 files +

+
+get_weights() set_weights() + +

+Layer/Model weights as R arrays +

+
+get_config() from_config() + +

+Layer/Model configuration +

+
+model_to_json() model_from_json() + +

+Model configuration as JSON +

+
+model_to_yaml() model_from_yaml() + +

+Model configuration as YAML +

+
+
+
+
+ + + +
+ + +
+ +
+

Site built with pkgdown.

+
+ +
+
+ + + diff --git a/website/articles/applications.html b/website/articles/applications.html new file mode 100644 index 000000000..10610824c --- /dev/null +++ b/website/articles/applications.html @@ -0,0 +1,281 @@ + + + + + + + +Using Pre-Trained Models • keras + + + + + + + +
+
+ + + +
+
+ + + + +
+
+

+Applications

+

Keras Applications are deep learning models that are made available alongside pre-trained weights. These models can be used for prediction, feature extraction, and fine-tuning.

+

Weights are downloaded automatically when instantiating a model. They are stored at ~/.keras/models/.

+

The following image classification models (with weights trained on ImageNet) are available:

+ +
+
+

+Usage Examples

+
+

+Classify ImageNet classes with ResNet50

+
# instantiate the model
+model <- application_resnet50(weights = 'imagenet')
+
+# load the image
+img_path <- "elephant.jpg"
+img <- image_load(img_path, target_size = c(224,224))
+x <- image_to_array(img)
+
+# ensure we have a 4d tensor with single element in the batch dimension,
+# the preprocess the input for prediction using resnet50
+dim(x) <- c(1, dim(x))
+x <- imagenet_preprocess_input(x)
+
+# make predictions then decode and print them
+preds <- model %>% predict(x)
+imagenet_decode_predictions(preds, top = 3)[[1]]
+
  class_name class_description      score
+1  n02504013   Indian_elephant 0.90117526
+2  n01871265            tusker 0.08774310
+3  n02504458  African_elephant 0.01046011
+
+
+

+Extract features with VGG16

+
model <- application_vgg16(weights = 'imagenet', include_top = FALSE)
+
+img_path <- "elephant.jpg"
+img <- image_load(img_path, target_size = c(224,224))
+x <- image_to_array(img)
+dim(x) <- c(1, dim(x))
+x <- imagenet_preprocess_input(x)
+
+features <- model %>% predict(x)
+
+
+

+Extract features from an arbitrary intermediate layer with VGG19

+
base_model <- application_vgg19(weights = 'imagenet')
+model <- keras_model(inputs = base_model$input, 
+                     outputs = get_layer(base_model, 'block4_pool')$output)
+
+img_path <- "elephant.jpg"
+img <- image_load(img_path, target_size = c(224,224))
+x <- image_to_array(img)
+dim(x) <- c(1, dim(x)) 
+x <- imagenet_preprocess_input(x)
+
+block4_pool_features <- model %>% predict(x)
+
+
+

+Fine-tune InceptionV3 on a new set of classes

+
# create the base pre-trained model
+base_model <- application_inception_v3(weights = 'imagenet', include_top = FALSE)
+
+# add our custom layers
+predictions <- base_model$output %>% 
+  layer_global_average_pooling_2d() %>% 
+  layer_dense(units = 1024, activation = 'relu') %>% 
+  layer_dense(units = 200, activation = 'softmax')
+
+# this is the model we will train
+model <- keras_model(inputs = base_model$input, outputs = predictions)
+
+# first: train only the top layers (which were randomly initialized)
+# i.e. freeze all convolutional InceptionV3 layers
+for (layer in base_model$layers)
+  layer$trainable <- FALSE
+
+# compile the model (should be done *after* setting layers to non-trainable)
+model %>% compile(optimizer = 'rmsprop', loss = 'categorical_crossentropy')
+
+# train the model on the new data for a few epochs
+model %>% fit_generator(...)
+
+# at this point, the top layers are well trained and we can start fine-tuning
+# convolutional layers from inception V3. We will freeze the bottom N layers
+# and train the remaining top layers.
+
+# let's visualize layer names and layer indices to see how many layers
+# we should freeze:
+layers <- base_model$layers
+for (i in 1:length(layers))
+  cat(i, layers[[i]]$name, "\n")
+
+# we chose to train the top 2 inception blocks, i.e. we will freeze
+# the first 172 layers and unfreeze the rest:
+for (i in 1:172)
+  layers[[i]]$trainable <- FALSE
+for (i in 173:length(layers))
+  layers[[i]]$trainable <- TRUE
+
+# we need to recompile the model for these modifications to take effect
+# we use SGD with a low learning rate
+model %>% compile(
+  optimizer = optimizer_sgd(lr = 0.0001, momentum = 0.9), 
+  loss = 'categorical_crossentropy'
+)
+
+# we train our model again (this time fine-tuning the top 2 inception blocks
+# alongside the top Dense layers
+model %>% fit_generator(...)
+
+
+

+Build InceptionV3 over a custom input tensor

+
# this could also be the output a different Keras model or layer
+input_tensor <- layer_input(shape = c(224, 224, 3))
+
+model <- application_inception_V3(input_tensor = input_tensor, 
+                                  weights='imagenet', 
+                                  include_top = TRUE)
+
+
+

+Additional examples

+

The VGG16 model is the basis for the Deep dream Keras example script.

+
+
+
+
+ + + +
+ + +
+ +
+

Site built with pkgdown.

+
+ +
+
+ + + diff --git a/website/articles/backend.html b/website/articles/backend.html new file mode 100644 index 000000000..b0a68b824 --- /dev/null +++ b/website/articles/backend.html @@ -0,0 +1,809 @@ + + + + + + + +Keras Backend • keras + + + + + + + +
+
+ + + +
+
+ + + + +
+
+

+Overview

+

Keras is a model-level library, providing high-level building blocks for developing deep learning models. It does not handle itself low-level operations such as tensor products, convolutions and so on. Instead, it relies on a specialized, well-optimized tensor manipulation library to do so, serving as the “backend engine” of Keras.

+

The R interface to Keras uses TensorFlow™ as it’s default tensor backend engine, however it’s possible to use other backends if desired. At this time, Keras has three backend implementations available:

+
    +
  • TensorFlow is an open-source symbolic tensor manipulation framework developed by Google, Inc.

  • +
  • Theano is an open-source symbolic tensor manipulation framework developed by LISA/MILA Lab at Université de Montréal.

  • +
  • CNTK is an open-source, commercial-grade toolkit for deep learning developed by Microsoft.

  • +
+
+
+

+Selecting a Backend

+

Keras uses the TensorFlow backend by default. If you want to switch to Theano set the KERAS_BACKEND environment variable before loading the Keras package as follows:

+
Sys.setenv(KERAS_BACKEND = "theano")
+library(keras)
+

If you want to use the CNTK backend then you should follow the installation instructions for CNTK and then set the KERAS_BACKEND environment variable before loading the keras R package as follows:

+
Sys.setenv(KERAS_BACKEND = "cntk")
+library(keras)
+
+

+Environment Variables

+

If you want to use a backend provided by the keras Python package you typically need only to install the package and the backend, then set the KERAS_BACKEND environment variable as described above.

+

If you need to customize things further there are several environment variables that affect the version of Keras used:

+ ++++ + + + + + + + + + + + + + + + + + + +
VariableDescription
KERAS_IMPLEMENTATIONKeras specifies an API that can be implemented by multiple providers. By default, the Keras R package uses the implementation provided by the Keras Python package (“keras”). TensorFlow also provides an integrated implementation of Keras which you can use by specifying “tensorflow” as the implementation.
KERAS_BACKENDThe “keras” implementation supports the “tensorflow”, “keras”, and “cntk” backends. Note that the “tensorflow” implementation supports only the “tensorflow” backend.
KERAS_PYTHONThe Keras R package will automatically scan installed versions of Python (and virtual/conda environments) to find the one that includes the selected implementation of Keras. If this scanning doesn’t find the right version or you want to override its behavior, you can set the KERAS_PYTHON environment variable to the location of the Python binary you want to use.
+

Note that if you want to use TensorFlow as the backend engine you wouldn’t need to set any of these variables, as it will be used automatically by default.

+
+
+
+

+Accessing the Backend in Code

+

If you want the Keras modules you write to be compatible with all available backends, you have to write them via the abstract Keras backend API. You can obtain a reference to the TensorFlow backend by calling the backend() function:

+
library(keras)
+K <- backend()
+

The code below instantiates an input placeholder. It’s equivalent to tf$placeholder():

+
input <- K$placeholder(shape = list(2L, 4L, 5L))
+# also works:
+input <-  K$placeholder(shape = list(NULL, 4L, 5L))
+# also works:
+input <- K$placeholder(ndim = 3L)
+

The code below instantiates a shared variable. It’s equivalent to tf$Variable():

+
val <- array(runif(60), dim = c(3L, 4L, 5L))
+var <- K$variable(value = val)
+
+# all-zeros variable:
+var <- K$zeros(shape = list(3L, 4L, 5L))
+# all-ones:
+var <- K$ones(shape = list(3L, 4L, 5L))
+

Note that the examples above all pass integer values explicitly (e.g. 5L). This is because unlike the high level R functions in the Keras package the backend APIs are all strongly typed (i.e. float values are not automatically converted to integers).

+
+
+

+Backend Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescription
absElement-wise absolute value.
allBitwise reduction (logical AND).
anyBitwise reduction (logical OR).
arangeCreates a 1D tensor containing a sequence of integers.
argmaxReturns the index of the maximum value along an axis.
argminReturns the index of the minimum value along an axis.
backendPublicly accessible method for determining the current backend.
batch_dotBatchwise dot product.
batch_flattenTurn a nD tensor into a 2D tensor with same 0th dimension.
batch_get_valueReturns the value of more than one tensor variable.
batch_normalizationApplies batch normalization on x given mean, var, beta and gamma.
batch_set_valueSets the values of many tensor variables at once.
bias_addAdds a bias vector to a tensor.
binary_crossentropyBinary crossentropy between an output tensor and a target tensor.
castCasts a tensor to a different dtype and returns it.
cast_to_floatxCast a Numpy array to the default Keras float type.
categorical_crossentropyCategorical crossentropy between an output tensor and a target tensor.
clear_sessionDestroys the current TF graph and creates a new one.
clipElement-wise value clipping.
concatenateConcatenates a list of tensors alongside the specified axis.
constantCreates a constant tensor.
conv1d1D convolution.
conv2d2D convolution.
conv2d_transpose2D deconvolution (i.e.
conv3d3D convolution.
cosComputes cos of x element-wise.
count_paramsReturns the number of scalars in a Keras variable.
ctc_batch_costRuns CTC loss algorithm on each batch element.
ctc_decodeDecodes the output of a softmax.
ctc_label_dense_to_sparseConverts CTC labels from dense to sparse.
cumprodCumulative product of the values in a tensor, alongside the specified axis.
cumsumCumulative sum of the values in a tensor, alongside the specified axis.
dotMultiplies 2 tensors (and/or variables) and returns a tensor.
dropoutSets entries in x to zero at random, while scaling the entire tensor.
dtypeReturns the dtype of a Keras tensor or variable, as a string.
eluExponential linear unit.
epsilonReturns the value of the fuzz factor used in numeric expressions.
equalElement-wise equality between two tensors.
evalEvaluates the value of a variable.
expElement-wise exponential.
expand_dimsAdds a 1-sized dimension at index “axis”.
eyeInstantiate an identity matrix and returns it.
flattenFlatten a tensor.
floatxReturns the default float type, as a string.
foldlReduce elems using fn to combine them from left to right.
foldrReduce elems using fn to combine them from right to left.
gatherRetrieves the elements of indices indices in the tensor reference.
get_sessionReturns the TF session to be used by the backend.
get_uidAssociates a string prefix with an integer counter in a TensorFlow graph.
get_valueReturns the value of a variable.
gradientsReturns the gradients of variables w.r.t. loss.
greaterElement-wise truth value of (x > y).
greater_equalElement-wise truth value of (x >= y).
hard_sigmoidSegment-wise linear approximation of sigmoid.
identityReturns a tensor with the same content as the input tensor.
image_data_formatReturns the default image data format convention.
in_test_phaseSelects x in test phase, and alt otherwise.
in_top_kReturns whether the targets are in the top k predictions.
in_train_phaseSelects x in train phase, and alt otherwise.
int_shapeReturns the shape tensor or variable as a list of int or NULL entries.
is_sparseReturns whether a tensor is a sparse tensor.
l2_normalizeNormalizes a tensor wrt the L2 norm alongside the specified axis.
learning_phaseReturns the learning phase flag.
lessElement-wise truth value of (x < y).
less_equalElement-wise truth value of (x <= y).
local_conv1dApply 1D conv with un-shared weights.
local_conv2dApply 2D conv with un-shared weights.
logElement-wise log.
logsumexpComputes log(sum(exp(elements across dimensions of a tensor))).
manual_variable_initializationSets the manual variable initialization flag.
map_fnMap the function fn over the elements elems and return the outputs.
maxMaximum value in a tensor.
maximumElement-wise maximum of two tensors.
meanMean of a tensor, alongside the specified axis.
minMinimum value in a tensor.
minimumElement-wise minimum of two tensors.
moving_average_updateCompute the moving average of a variable.
name_scopeReturns a context manager for use when defining a Python op.
ndimReturns the number of axes in a tensor, as an integer.
normalize_batch_in_trainingComputes mean and std for batch then apply batch_normalization on batch.
not_equalElement-wise inequality between two tensors.
one_hotComputes the one-hot representation of an integer tensor.
onesInstantiates an all-ones tensor variable and returns it.
ones_likeInstantiates an all-ones variable of the same shape as another tensor.
permute_dimensionsPermutes axes in a tensor.
placeholderInstantiates a placeholder tensor and returns it.
pool2d2D Pooling.
pool3d3D Pooling.
powElement-wise exponentiation.
print_tensorPrints message and the tensor value when evaluated.
prodMultiplies the values in a tensor, alongside the specified axis.
py_allall(iterable) -> bool
py_sumsum(sequence[, start]) -> value
random_binomialReturns a tensor with random binomial distribution of values.
random_normalReturns a tensor with normal distribution of values.
random_normal_variableInstantiates a variable with values drawn from a normal distribution.
random_uniformReturns a tensor with uniform distribution of values.
random_uniform_variableInstantiates a variable with values drawn from a uniform distribution.
reluRectified linear unit.
repeat_elementsRepeats the elements of a tensor along an axis, like np.repeat.
reset_uids
reshapeReshapes a tensor to the specified shape.
resize_imagesResizes the images contained in a 4D tensor.
resize_volumesResizes the volume contained in a 5D tensor.
reverseReverse a tensor along the specified axes.
rnnIterates over the time dimension of a tensor.
roundElement-wise rounding to the closest integer.
separable_conv2d2D convolution with separable filters.
set_epsilonSets the value of the fuzz factor used in numeric expressions.
set_floatxSets the default float type.
set_image_data_formatSets the value of the image data format convention.
set_learning_phaseSets the learning phase to a fixed value.
set_sessionSets the global TensorFlow session.
set_valueSets the value of a variable, from a Numpy array.
shapeReturns the symbolic shape of a tensor or variable.
sigmoidElement-wise sigmoid.
signElement-wise sign.
sinComputes sin of x element-wise.
softmaxSoftmax of a tensor.
softplusSoftplus of a tensor.
softsignSoftsign of a tensor.
sparse_categorical_crossentropyCategorical crossentropy with integer targets.
spatial_2d_paddingPads the 2nd and 3rd dimensions of a 4D tensor.
spatial_3d_paddingPads 5D tensor with zeros along the depth, height, width dimensions.
sqrtElement-wise square root.
squareElement-wise square.
squeezeRemoves a 1-dimension from the tensor at index “axis”.
stackStacks a list of rank R tensors into a rank R+1 tensor.
stdStandard deviation of a tensor, alongside the specified axis.
stop_gradientReturns variables but with zero gradient w.r.t. every other variable.
sumSum of the values in a tensor, alongside the specified axis.
switchSwitches between two operations depending on a scalar value.
tanhElement-wise tanh.
temporal_paddingPads the middle dimension of a 3D tensor.
tileCreates a tensor by tiling x by n.
to_denseConverts a sparse tensor into a dense tensor and returns it.
transposeTransposes a tensor and returns it.
truncated_normalReturns a tensor with truncated random normal distribution of values.
update
update_addUpdate the value of x by adding increment.
update_subUpdate the value of x by subtracting decrement.
varVariance of a tensor, alongside the specified axis.
variableInstantiates a variable and returns it.
zerosInstantiates an all-zeros variable and returns it.
zeros_likeInstantiates an all-zeros variable of the same shape as another tensor.
+
+
+
+ + + +
+ + +
+ +
+

Site built with pkgdown.

+
+ +
+
+ + + diff --git a/website/articles/checkpoints.h5 b/website/articles/checkpoints.h5 new file mode 100644 index 0000000000000000000000000000000000000000..cc23b2163d7b911abdede398509d6efa3d9ee1d6 GIT binary patch literal 222272 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

rpRT($gg^y(omY&< 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 + + + + + + +Writing Custom Keras Layers • keras + + + + + + + +

+
+ + + +
+
+ + + + +
+

If the existing Keras layers don’t meet your requirements you can create a custom layer. For simple, stateless custom operations, you are probably better off using layer_lambda() layers. But for any custom operation that has trainable weights, you should implement your own layer.

+

The example below illustrates the skeleton of a Keras custom layer. The mnist_antirectifier example includes another demonstration of creating a custom layer.

+
+

+KerasLayer R6 Class

+

To create a custom Keras layer, you create an R6 class derived from KerasLayer. There are three methods to implement (only one of which, call(), is required for all types of layer):

+
    +
  • +build(input_shape): This is where you will define your weights. Note that if your layer doesn’t define trainable weights then you need not implemented this method.
  • +
  • +call(x): This is where the layer’s logic lives. Unless you want your layer to support masking, you only have to care about the first argument passed to call: the input tensor.
  • +
  • +compute_output_shape(input_shape): In case your layer modifies the shape of its input, you should specify here the shape transformation logic. This allows Keras to do automatic shape inference. If you don’t modify the shape of the input then you need not implement this method.
  • +
+
library(keras)
+
+K <- backend()
+
+CustomLayer <- R6::R6Class("KerasLayer",
+                                  
+  inherit = KerasLayer,
+  
+  public = list(
+    
+    output_dim = NULL,
+    
+    kernel = NULL,
+    
+    initialize = function(output_dim) {
+      self$output_dim <- output_dim
+    },
+    
+    build = function(input_shape) {
+      self$kernel <- self$add_weight(
+        name = 'kernel', 
+        shape = list(input_shape[[2]], self$output_dim),
+        initializer = initializer_random_normal(),
+        trainable = TRUE
+      )
+    },
+    
+    call = function(x, mask = NULL) {
+      K$dot(x, self$kernel)
+    },
+    
+    compute_output_shape = function(input_shape) {
+      list(input_shape[[1]], self$output_dim)
+    }
+  )
+)
+

Note that tensor operations are executed using the Keras backend(). See the Keras Backend article for details on the various functions available from Keras backends.

+
+
+

+Layer Wrapper Function

+

In order to use the custom layer within a Keras model you also need to create a wrapper function which instantiates the layer using the create_layer() function. For example:

+
# define layer wrapper function
+layer_custom <- function(object, output_dim, name = NULL, trainable = TRUE) {
+  create_layer(CustomLayer, object, list(
+    output_dim = as.integer(output_dim),
+    name = name,
+    trainable = trainable
+  ))
+}
+
+# use it in a model
+model <- keras_model_sequential()
+model %>% 
+  layer_dense(units = 32, input_shape = c(32,32)) %>% 
+  layer_custom(output_dim = 32)
+

Some important things to note about the layer wrapper function:

+
    +
  1. It accepts object as its first parameter (the object will either be a Keras sequential model or another Keras layer). The object parameter enables the layer to be composed with other layers using the magrittr pipe (%>%) operator.

  2. +
  3. It converts it’s output_dim to integer using the as.integer() function. This is done as convenience to the user because Keras variables are strongly typed (you can’t pass a float if an integer is expected). This enables users of the function to write output_dim = 32 rather than output_dim = 32L.

  4. +
  5. Some additional parameters not used by the layer (name and trainable) are in the function signature. Custom layer functions can include any of the core layer function arguments (input_shape, batch_input_shape, batch_size, dtype, name, trainable, and weights) and they will be automatically forwarded to the Layer base class.

  6. +
+

See the mnist_antirectifier example for another demonstration of creating a custom layer.

+
+
+
+ + + +
+ + +
+ +
+

Site built with pkgdown.

+
+ +
+
+ + + diff --git a/website/articles/examples/addition_rnn.R b/website/articles/examples/addition_rnn.R new file mode 100644 index 000000000..cc25eaa85 --- /dev/null +++ b/website/articles/examples/addition_rnn.R @@ -0,0 +1,210 @@ +#' An implementation of sequence to sequence learning for performing addition +#' +#' Input: "535+61" +#' Output: "596" +#' +#' Padding is handled by using a repeated sentinel character (space) +#' +#' Input may optionally be inverted, shown to increase performance in many tasks in: +#' "Learning to Execute" +#' http://arxiv.org/abs/1410.4615 +#' and +#' "Sequence to Sequence Learning with Neural Networks" +#' http://papers.nips.cc/paper/5346-sequence-to-sequence-learning-with-neural-networks.pdf +#' Theoretically it introduces shorter term dependencies between source and target. +#' +#' Two digits inverted: +#' One layer LSTM (128 HN), 5k training examples = 99% train/test accuracy in 55 epochs +#' +#' Three digits inverted: +#' One layer LSTM (128 HN), 50k training examples = 99% train/test accuracy in 100 epochs +#' +#' Four digits inverted: +#' One layer LSTM (128 HN), 400k training examples = 99% train/test accuracy in 20 epochs +#' +#' Five digits inverted: +#' One layer LSTM (128 HN), 550k training examples = 99% train/test accuracy in 30 epochs +#' + +library(keras) +library(stringi) + +# Function Definitions ---------------------------------------------------- + +# Creates the char table +# Just sorts them.. +learn_encoding <- function(chars){ + sort(chars) +} + +# Encode to a character sequence to a one hot +# integer representation. +# > encode("22+22", char_table) +# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] +# 2 0 0 0 0 1 0 0 0 0 0 0 0 +# 2 0 0 0 0 1 0 0 0 0 0 0 0 +# + 0 1 0 0 0 0 0 0 0 0 0 0 +# 2 0 0 0 0 1 0 0 0 0 0 0 0 +# 2 0 0 0 0 1 0 0 0 0 0 0 0 +encode <- function(char, char_table){ + strsplit(char, "") %>% + unlist() %>% + sapply(function(x){ + as.numeric(x == char_table) + }) %>% + t() +} + +# Decode the one hot representation/probabilities representation +# to their character output. +decode <- function(x, char_table){ + apply(x,1, function(y){ + char_table[which.max(y)] + }) %>% paste0(collapse = "") +} + +# Returns a list of questions and expected answers. +generate_data <- function(size, digits, invert = TRUE){ + + max_num <- as.integer(paste0(rep(9, digits), collapse = "")) + + # generate integers for both sides of question + x <- sample(1:max_num, size = size, replace = TRUE) + y <- sample(1:max_num, size = size, replace = TRUE) + + # make left side always samalller then right side + left_side <- ifelse(x <= y, x, y) + right_side <- ifelse(x >= y, x, y) + + results <- left_side + right_side + + # pad with spaces on the right + questions <- paste0(left_side, "+", right_side) + questions <- stri_pad(questions, width = 2*digits+1, + side = "right", pad = " ") + if(invert){ + questions <- stri_reverse(questions) + } + # pad with spaces on the left + results <- stri_pad(results, width = digits + 1, + side = "left", pad = " ") + + list( + questions = questions, + results = results + ) +} + +# Parameters -------------------------------------------------------------- + +# Parameters for the model and dataset. +TRAINING_SIZE <- 50000 +DIGITS <- 2 + +# Maximum length of input is 'int + int' (e.g., '345+678'). Maximum length of +# int is DIGITS. +MAXLEN <- DIGITS + 1 + DIGITS + +# All the numbers, plus sign and space for padding. +charset <- c(0:9, "+", " ") +char_table <- learn_encoding(charset) + + +# Data Preparation -------------------------------------------------------- + +# Generate Data + +examples <- generate_data(size = TRAINING_SIZE, digits = DIGITS) + +# Vectorization + +x <- array(0, dim = c(length(examples$questions), MAXLEN, length(char_table))) +y <- array(0, dim = c(length(examples$questions), DIGITS + 1, length(char_table))) + +for(i in 1:TRAINING_SIZE){ + x[i,,] <- encode(examples$questions[i], char_table) + y[i,,] <- encode(examples$results[i], char_table) +} + +# Shuffle + +indices <- sample(1:TRAINING_SIZE, size = TRAINING_SIZE) +x <- x[indices,,] +y <- y[indices,,] + + +# Explicitly set apart 10% for validation data that we never train over. + +split_at <- trunc(TRAINING_SIZE/10) +x_val <- x[1:split_at,,] +y_val <- y[1:split_at,,] +x_train <- x[(split_at + 1):TRAINING_SIZE,,] +y_train <- y[(split_at + 1):TRAINING_SIZE,,] + +print('Training Data:') +print(dim(x_train)) +print(dim(y_train)) + +print('Validation Data:') +print(dim(x_val)) +print(dim(y_val)) + + +# Training ---------------------------------------------------------------- + +HIDDEN_SIZE <- 128 +BATCH_SIZE <- 128 +LAYERS <- 1 + +# Initialize sequential model +model <- keras_model_sequential() + +model %>% + # "Encode" the input sequence using an RNN, producing an output of HIDDEN_SIZE. + # Note: In a situation where your input sequences have a variable length, + # use input_shape=(None, num_feature). + layer_lstm(HIDDEN_SIZE, input_shape=c(MAXLEN, length(char_table))) %>% + # As the decoder RNN's input, repeatedly provide with the last hidden state of + # RNN for each time step. Repeat 'DIGITS + 1' times as that's the maximum + # length of output, e.g., when DIGITS=3, max output is 999+999=1998. + layer_repeat_vector(DIGITS + 1) + +# The decoder RNN could be multiple layers stacked or a single layer. +# By setting return_sequences to True, return not only the last output but +# all the outputs so far in the form of (num_samples, timesteps, +# output_dim). This is necessary as TimeDistributed in the below expects +# the first dimension to be the timesteps. +for(i in 1:LAYERS) + model %>% layer_lstm(HIDDEN_SIZE, return_sequences = TRUE) + +model %>% + # Apply a dense layer to the every temporal slice of an input. For each of step + # of the output sequence, decide which character should be chosen. + time_distributed(layer_dense(units = length(char_table))) %>% + layer_activation("softmax") + +# Compiling the model +model %>% compile( + loss = "categorical_crossentropy", + optimizer = "adam", + metrics = "accuracy" +) + +# Get the model summary +summary(model) + +# Fitting loop +model %>% fit( + x = x_train, + y = y_train, + batch_size = BATCH_SIZE, + epochs = 70, + validation_data = list(x_val, y_val) +) + +# Predict for a new obs +new_obs <- encode("55+22", char_table) %>% + array(dim = c(1,5,12)) +result <- predict(model, new_obs) +result <- result[1,,] +decode(result, char_table) diff --git a/website/articles/examples/addition_rnn.html b/website/articles/examples/addition_rnn.html new file mode 100644 index 000000000..d58142d20 --- /dev/null +++ b/website/articles/examples/addition_rnn.html @@ -0,0 +1,327 @@ + + + + + + + +addition_rnn • keras + + + + + + + +
+
+ + + +
+
+ + + + +
+ +

An implementation of sequence to sequence learning for performing addition

+

Input: “535+61”
+Output: “596”

+

Padding is handled by using a repeated sentinel character (space)

+

Input may optionally be inverted, shown to increase performance in many tasks in: “Learning to Execute” http://arxiv.org/abs/1410.4615 and “Sequence to Sequence Learning with Neural Networks” http://papers.nips.cc/paper/5346-sequence-to-sequence-learning-with-neural-networks.pdf Theoretically it introduces shorter term dependencies between source and target.

+

Two digits inverted: One layer LSTM (128 HN), 5k training examples = 99% train/test accuracy in 55 epochs

+

Three digits inverted: One layer LSTM (128 HN), 50k training examples = 99% train/test accuracy in 100 epochs

+

Four digits inverted: One layer LSTM (128 HN), 400k training examples = 99% train/test accuracy in 20 epochs

+

Five digits inverted: One layer LSTM (128 HN), 550k training examples = 99% train/test accuracy in 30 epochs

+
library(keras)
+library(stringi)
+
+# Function Definitions ----------------------------------------------------
+
+# Creates the char table
+# Just sorts them..
+learn_encoding <- function(chars){
+  sort(chars)
+}
+
+# Encode to a character sequence to a one hot
+# integer representation. 
+# > encode("22+22", char_table)
+# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
+# 2    0    0    0    0    1    0    0    0    0     0     0     0
+# 2    0    0    0    0    1    0    0    0    0     0     0     0
+# +    0    1    0    0    0    0    0    0    0     0     0     0
+# 2    0    0    0    0    1    0    0    0    0     0     0     0
+# 2    0    0    0    0    1    0    0    0    0     0     0     0
+encode <- function(char, char_table){
+  strsplit(char, "") %>%
+    unlist() %>%
+    sapply(function(x){
+      as.numeric(x == char_table)
+    }) %>% 
+    t()
+}
+
+# Decode the one hot representation/probabilities representation
+# to their character output.
+decode <- function(x, char_table){
+  apply(x,1, function(y){
+    char_table[which.max(y)]
+  }) %>% paste0(collapse = "")
+}
+
+# Returns a list of questions and expected answers.
+generate_data <- function(size, digits, invert = TRUE){
+  
+  max_num <- as.integer(paste0(rep(9, digits), collapse = ""))
+  
+  # generate integers for both sides of question
+  x <- sample(1:max_num, size = size, replace = TRUE)
+  y <- sample(1:max_num, size = size, replace = TRUE)
+  
+  # make left side always samalller then right side
+  left_side <- ifelse(x <= y, x, y)
+  right_side <- ifelse(x >= y, x, y)
+  
+  results <- left_side + right_side
+  
+  # pad with spaces on the right
+  questions <- paste0(left_side, "+", right_side)
+  questions <- stri_pad(questions, width = 2*digits+1, 
+                        side = "right", pad = " ")
+  if(invert){
+    questions <- stri_reverse(questions)
+  }
+  # pad with spaces on the left
+  results <- stri_pad(results, width = digits + 1, 
+                      side = "left", pad = " ")
+  
+  list(
+    questions = questions,
+    results = results
+  )
+}
+
+# Parameters --------------------------------------------------------------
+
+# Parameters for the model and dataset.
+TRAINING_SIZE <- 50000
+DIGITS <- 2
+
+# Maximum length of input is 'int + int' (e.g., '345+678'). Maximum length of
+# int is DIGITS.
+MAXLEN <- DIGITS + 1 + DIGITS
+
+# All the numbers, plus sign and space for padding.
+charset <- c(0:9, "+", " ")
+char_table <- learn_encoding(charset)
+
+
+# Data Preparation --------------------------------------------------------
+
+# Generate Data
+
+examples <- generate_data(size = TRAINING_SIZE, digits = DIGITS)
+
+# Vectorization
+
+x <- array(0, dim = c(length(examples$questions), MAXLEN, length(char_table)))
+y <- array(0, dim = c(length(examples$questions), DIGITS + 1, length(char_table)))
+
+for(i in 1:TRAINING_SIZE){
+  x[i,,] <- encode(examples$questions[i], char_table)
+  y[i,,] <- encode(examples$results[i], char_table)
+}
+
+# Shuffle
+
+indices <- sample(1:TRAINING_SIZE, size = TRAINING_SIZE)
+x <- x[indices,,]
+y <- y[indices,,]
+
+
+# Explicitly set apart 10% for validation data that we never train over.
+
+split_at <- trunc(TRAINING_SIZE/10)
+x_val <- x[1:split_at,,]
+y_val <- y[1:split_at,,]
+x_train <- x[(split_at + 1):TRAINING_SIZE,,]
+y_train <- y[(split_at + 1):TRAINING_SIZE,,]
+
+print('Training Data:')
+print(dim(x_train))
+print(dim(y_train))
+
+print('Validation Data:')
+print(dim(x_val))
+print(dim(y_val))
+
+
+# Training ----------------------------------------------------------------
+
+HIDDEN_SIZE <- 128
+BATCH_SIZE <- 128
+LAYERS <- 1
+
+# Initialize sequential model
+model <- keras_model_sequential() 
+
+model %>%
+  # "Encode" the input sequence using an RNN, producing an output of HIDDEN_SIZE.
+  # Note: In a situation where your input sequences have a variable length,
+  # use input_shape=(None, num_feature).
+  layer_lstm(HIDDEN_SIZE, input_shape=c(MAXLEN, length(char_table))) %>%
+  # As the decoder RNN's input, repeatedly provide with the last hidden state of
+  # RNN for each time step. Repeat 'DIGITS + 1' times as that's the maximum
+  # length of output, e.g., when DIGITS=3, max output is 999+999=1998.
+  layer_repeat_vector(DIGITS + 1)
+
+# The decoder RNN could be multiple layers stacked or a single layer.
+# By setting return_sequences to True, return not only the last output but
+# all the outputs so far in the form of (num_samples, timesteps,
+# output_dim). This is necessary as TimeDistributed in the below expects
+# the first dimension to be the timesteps.
+for(i in 1:LAYERS)
+  model %>% layer_lstm(HIDDEN_SIZE, return_sequences = TRUE)
+
+model %>% 
+  # Apply a dense layer to the every temporal slice of an input. For each of step
+  # of the output sequence, decide which character should be chosen.
+  time_distributed(layer_dense(units = length(char_table))) %>%
+  layer_activation("softmax")
+
+# Compiling the model
+model %>% compile(
+  loss = "categorical_crossentropy", 
+  optimizer = "adam", 
+  metrics = "accuracy"
+)
+
+# Get the model summary
+summary(model)
+
+# Fitting loop
+model %>% fit( 
+  x = x_train, 
+  y = y_train, 
+  batch_size = BATCH_SIZE, 
+  epochs = 70,
+  validation_data = list(x_val, y_val)
+)
+
+# Predict for a new obs
+new_obs <- encode("55+22", char_table) %>%
+  array(dim = c(1,5,12))
+result <- predict(model, new_obs)
+result <- result[1,,]
+decode(result, char_table)
+
+
+ + + +
+ + +
+ +
+

Site built with pkgdown.

+
+ +
+
+ + + diff --git a/website/articles/examples/babi_memnn.R b/website/articles/examples/babi_memnn.R new file mode 100644 index 000000000..255b94f25 --- /dev/null +++ b/website/articles/examples/babi_memnn.R @@ -0,0 +1,229 @@ +#' Trains a memory network on the bAbI dataset. +#' +#' References: +#' +#' - Jason Weston, Antoine Bordes, Sumit Chopra, Tomas Mikolov, Alexander M. Rush, +#' "Towards AI-Complete Question Answering: A Set of Prerequisite Toy Tasks", +#' http://arxiv.org/abs/1502.05698 +#' +#' - Sainbayar Sukhbaatar, Arthur Szlam, Jason Weston, Rob Fergus, +#' "End-To-End Memory Networks", http://arxiv.org/abs/1503.08895 +#' +#' Reaches 98.6% accuracy on task 'single_supporting_fact_10k' after 120 epochs. +#' Time per epoch: 3s on CPU (core i7). +#' + +library(keras) +library(readr) +library(stringr) +library(purrr) +library(tibble) +library(dplyr) + + +# Function definition ----------------------------------------------------- + +tokenize_words <- function(x){ + x <- x %>% + str_replace_all('([[:punct:]]+)', ' \\1') %>% + str_split(' ') %>% + unlist() + x[x != ""] +} + +parse_stories <- function(lines, only_supporting = FALSE){ + lines <- lines %>% + str_split(" ", n = 2) %>% + map_df(~tibble(nid = as.integer(.x[[1]]), line = .x[[2]])) + + lines <- lines %>% + mutate( + split = map(line, ~str_split(.x, "\t")[[1]]), + q = map_chr(split, ~.x[1]), + a = map_chr(split, ~.x[2]), + supporting = map(split, ~.x[3] %>% str_split(" ") %>% unlist() %>% as.integer()), + story_id = c(0, cumsum(nid[-nrow(.)] > nid[-1])) + ) %>% + select(-split) + + stories <- lines %>% + filter(is.na(a)) %>% + select(nid_story = nid, story_id, story = q) + + questions <- lines %>% + filter(!is.na(a)) %>% + select(-line) %>% + left_join(stories, by = "story_id") %>% + filter(nid_story < nid) + + if(only_supporting){ + questions <- questions %>% + filter(map2_lgl(nid_story, supporting, ~.x %in% .y)) + } + + questions %>% + group_by(story_id, nid, question = q, answer = a) %>% + summarise(story = paste(story, collapse = " ")) %>% + ungroup() %>% + mutate( + question = map(question, ~tokenize_words(.x)), + story = map(story, ~tokenize_words(.x)), + id = row_number() + ) %>% + select(id, question, answer, story) +} + +vectorize_stories <- function(data, vocab, story_maxlen, query_maxlen){ + + questions <- map(data$question, function(x){ + map_int(x, ~which(.x == vocab)) + }) + + stories <- map(data$story, function(x){ + map_int(x, ~which(.x == vocab)) + }) + + # "" represents padding + answers <- sapply(c("", vocab), function(x){ + as.integer(x == data$answer) + }) + + + list( + questions = pad_sequences(questions, maxlen = query_maxlen), + stories = pad_sequences(stories, maxlen = story_maxlen), + answers = answers + ) +} + + +# Parameters -------------------------------------------------------------- + +challenges <- list( + # QA1 with 10,000 samples + single_supporting_fact_10k = "%stasks_1-20_v1-2/en-10k/qa1_single-supporting-fact_%s.txt", + # QA2 with 10,000 samples + two_supporting_facts_10k = "%stasks_1-20_v1-2/en-10k/qa2_two-supporting-facts_%s.txt" +) + +challenge_type <- "single_supporting_fact_10k" +challenge <- challenges[[challenge_type]] +max_length <- 999999 + +# Data Preparation -------------------------------------------------------- + +# Download data +path <- get_file( + fname = "babi-tasks-v1-2.tar.gz", + origin = "https://s3.amazonaws.com/text-datasets/babi_tasks_1-20_v1-2.tar.gz" +) +untar(path, exdir = str_replace(path, fixed(".tar.gz"), "/")) +path <- str_replace(path, fixed(".tar.gz"), "/") + +# Reading training and test data +train <- read_lines(sprintf(challenge, path, "train")) %>% + parse_stories() %>% + filter(map_int(story, ~length(.x)) <= max_length) + +test <- read_lines(sprintf(challenge, path, "test")) %>% + parse_stories() %>% + filter(map_int(story, ~length(.x)) <= max_length) + +# extract the vocabulary +all_data <- bind_rows(train, test) +vocab <- c(unlist(all_data$question), all_data$answer, + unlist(all_data$story)) %>% + unique() %>% + sort() + +# Reserve 0 for masking via pad_sequences +vocab_size <- length(vocab) + 1 +story_maxlen <- map_int(all_data$story, ~length(.x)) %>% max() +query_maxlen <- map_int(all_data$question, ~length(.x)) %>% max() + +# vectorized versions of training and test sets +train_vec <- vectorize_stories(train, vocab, story_maxlen, query_maxlen) +test_vec <- vectorize_stories(test, vocab, story_maxlen, query_maxlen) + +# Defining the model ------------------------------------------------------ + +# placeholders +sequence <- layer_input(shape = c(story_maxlen)) +question <- layer_input(shape = c(query_maxlen)) + +# encoders +# embed the input sequence into a sequence of vectors +sequence_encoder_m <- keras_model_sequential() +sequence_encoder_m %>% + layer_embedding(input_dim = vocab_size, output_dim = 64) %>% + layer_dropout(rate = 0.3) +# output: (samples, story_maxlen, embedding_dim) + +# embed the input into a sequence of vectors of size query_maxlen +sequence_encoder_c <- keras_model_sequential() +sequence_encoder_c %>% + layer_embedding(input_dim = vocab_size, output = query_maxlen) %>% + layer_dropout(rate = 0.3) +# output: (samples, story_maxlen, query_maxlen) + +# embed the question into a sequence of vectors +question_encoder <- keras_model_sequential() +question_encoder %>% + layer_embedding(input_dim = vocab_size, output_dim = 64, + input_length = query_maxlen) %>% + layer_dropout(rate = 0.3) +# output: (samples, query_maxlen, embedding_dim) + +# encode input sequence and questions (which are indices) +# to sequences of dense vectors +sequence_encoded_m <- sequence_encoder_m(sequence) +sequence_encoded_c <- sequence_encoder_c(sequence) +question_encoded <- question_encoder(question) + +# compute a 'match' between the first input vector sequence +# and the question vector sequence +# shape: `(samples, story_maxlen, query_maxlen)` +match <- list(sequence_encoded_m, question_encoded) %>% + layer_dot(axes = c(2,2)) %>% + layer_activation("softmax") + +# add the match matrix with the second input vector sequence +response <- list(match, sequence_encoded_c) %>% + layer_add() %>% + layer_permute(c(2,1)) + +# concatenate the match matrix with the question vector sequence +answer <- list(response, question_encoded) %>% + layer_concatenate() %>% + # the original paper uses a matrix multiplication for this reduction step. + # we choose to use a RNN instead. + layer_lstm(32) %>% + # one regularization layer -- more would probably be needed. + layer_dropout(rate = 0.3) %>% + layer_dense(vocab_size) %>% + # we output a probability distribution over the vocabulary + layer_activation("softmax") + +# build the final model +model <- keras_model(inputs = list(sequence, question), answer) +model %>% compile( + optimizer = "rmsprop", + loss = "categorical_crossentropy", + metrics = "accuracy" +) + + +# Training ---------------------------------------------------------------- + +model %>% fit( + x = list(train_vec$stories, train_vec$questions), + y = train_vec$answers, + batch_size = 32, + epochs = 120, + validation_data = list(list(test_vec$stories, test_vec$questions), test_vec$answers) +) + + + + + diff --git a/website/articles/examples/babi_memnn.html b/website/articles/examples/babi_memnn.html new file mode 100644 index 000000000..a81ccad46 --- /dev/null +++ b/website/articles/examples/babi_memnn.html @@ -0,0 +1,352 @@ + + + + + + + +babi_memnn • keras + + + + + + + +
+
+ + + +
+
+ + + + +
+ +

Trains a memory network on the bAbI dataset.

+

References:

+
    +
  • Jason Weston, Antoine Bordes, Sumit Chopra, Tomas Mikolov, Alexander M. Rush, “Towards AI-Complete Question Answering: A Set of Prerequisite Toy Tasks”, http://arxiv.org/abs/1502.05698

  • +
  • Sainbayar Sukhbaatar, Arthur Szlam, Jason Weston, Rob Fergus, “End-To-End Memory Networks”, http://arxiv.org/abs/1503.08895

  • +
+

Reaches 98.6% accuracy on task ‘single_supporting_fact_10k’ after 120 epochs. Time per epoch: 3s on CPU (core i7).

+
library(keras)
+library(readr)
+library(stringr)
+library(purrr)
+library(tibble)
+library(dplyr)
+
+
+# Function definition -----------------------------------------------------
+
+tokenize_words <- function(x){
+  x <- x %>% 
+    str_replace_all('([[:punct:]]+)', ' \\1') %>% 
+    str_split(' ') %>%
+    unlist()
+  x[x != ""]
+}
+
+parse_stories <- function(lines, only_supporting = FALSE){
+  lines <- lines %>% 
+    str_split(" ", n = 2) %>%
+    map_df(~tibble(nid = as.integer(.x[[1]]), line = .x[[2]]))
+  
+  lines <- lines %>%
+    mutate(
+      split = map(line, ~str_split(.x, "\t")[[1]]),
+      q = map_chr(split, ~.x[1]),
+      a = map_chr(split, ~.x[2]),
+      supporting = map(split, ~.x[3] %>% str_split(" ") %>% unlist() %>% as.integer()),
+      story_id = c(0, cumsum(nid[-nrow(.)] > nid[-1]))
+    ) %>%
+    select(-split)
+  
+  stories <- lines %>%
+    filter(is.na(a)) %>%
+    select(nid_story = nid, story_id, story = q)
+  
+  questions <- lines %>%
+    filter(!is.na(a)) %>%
+    select(-line) %>%
+    left_join(stories, by = "story_id") %>%
+    filter(nid_story < nid)
+  
+  if(only_supporting){
+    questions <- questions %>%
+      filter(map2_lgl(nid_story, supporting, ~.x %in% .y))
+  }
+  
+  questions %>%
+    group_by(story_id, nid, question = q, answer = a) %>%
+    summarise(story = paste(story, collapse = " ")) %>%
+    ungroup() %>% 
+    mutate(
+      question = map(question, ~tokenize_words(.x)),
+      story = map(story, ~tokenize_words(.x)),
+      id = row_number()
+    ) %>%
+    select(id, question, answer, story)
+}
+
+vectorize_stories <- function(data, vocab, story_maxlen, query_maxlen){
+  
+  questions <- map(data$question, function(x){
+    map_int(x, ~which(.x == vocab))
+  })
+  
+  stories <- map(data$story, function(x){
+    map_int(x, ~which(.x == vocab))
+  })
+  
+  # "" represents padding
+  answers <- sapply(c("", vocab), function(x){
+    as.integer(x == data$answer)
+  })
+  
+  
+  list(
+    questions = pad_sequences(questions, maxlen = query_maxlen),
+    stories   = pad_sequences(stories, maxlen = story_maxlen),
+    answers   = answers
+  )
+}
+
+
+# Parameters --------------------------------------------------------------
+
+challenges <- list(
+  # QA1 with 10,000 samples
+  single_supporting_fact_10k = "%stasks_1-20_v1-2/en-10k/qa1_single-supporting-fact_%s.txt",
+  # QA2 with 10,000 samples
+  two_supporting_facts_10k = "%stasks_1-20_v1-2/en-10k/qa2_two-supporting-facts_%s.txt"
+)
+
+challenge_type <- "single_supporting_fact_10k"
+challenge <- challenges[[challenge_type]]
+max_length <- 999999
+
+# Data Preparation --------------------------------------------------------
+
+# Download data
+path <- get_file(
+  fname = "babi-tasks-v1-2.tar.gz",
+  origin = "https://s3.amazonaws.com/text-datasets/babi_tasks_1-20_v1-2.tar.gz"
+)
+untar(path, exdir = str_replace(path, fixed(".tar.gz"), "/"))
+path <- str_replace(path, fixed(".tar.gz"), "/")
+
+# Reading training and test data
+train <- read_lines(sprintf(challenge, path, "train")) %>%
+  parse_stories() %>%
+  filter(map_int(story, ~length(.x)) <= max_length)
+
+test <- read_lines(sprintf(challenge, path, "test")) %>%
+  parse_stories() %>%
+  filter(map_int(story, ~length(.x)) <= max_length)
+
+# extract the vocabulary
+all_data <- bind_rows(train, test)
+vocab <- c(unlist(all_data$question), all_data$answer, 
+           unlist(all_data$story)) %>%
+  unique() %>%
+  sort()
+
+# Reserve 0 for masking via pad_sequences
+vocab_size <- length(vocab) + 1
+story_maxlen <- map_int(all_data$story, ~length(.x)) %>% max()
+query_maxlen <- map_int(all_data$question, ~length(.x)) %>% max()
+
+# vectorized versions of training and test sets
+train_vec <- vectorize_stories(train, vocab, story_maxlen, query_maxlen)
+test_vec <- vectorize_stories(test, vocab, story_maxlen, query_maxlen)
+
+# Defining the model ------------------------------------------------------
+
+# placeholders
+sequence <- layer_input(shape = c(story_maxlen))
+question <- layer_input(shape = c(query_maxlen))
+
+# encoders
+# embed the input sequence into a sequence of vectors
+sequence_encoder_m <- keras_model_sequential()
+sequence_encoder_m %>%
+  layer_embedding(input_dim = vocab_size, output_dim = 64) %>%
+  layer_dropout(rate = 0.3)
+# output: (samples, story_maxlen, embedding_dim)
+
+# embed the input into a sequence of vectors of size query_maxlen
+sequence_encoder_c <- keras_model_sequential()
+sequence_encoder_c %>%
+  layer_embedding(input_dim = vocab_size, output = query_maxlen) %>%
+  layer_dropout(rate = 0.3)
+# output: (samples, story_maxlen, query_maxlen)
+
+# embed the question into a sequence of vectors
+question_encoder <- keras_model_sequential()
+question_encoder %>%
+  layer_embedding(input_dim = vocab_size, output_dim = 64, 
+                  input_length = query_maxlen) %>%
+  layer_dropout(rate = 0.3)
+# output: (samples, query_maxlen, embedding_dim)
+
+# encode input sequence and questions (which are indices)
+# to sequences of dense vectors
+sequence_encoded_m <- sequence_encoder_m(sequence)
+sequence_encoded_c <- sequence_encoder_c(sequence)
+question_encoded <- question_encoder(question)
+
+# compute a 'match' between the first input vector sequence
+# and the question vector sequence
+# shape: `(samples, story_maxlen, query_maxlen)`
+match <- list(sequence_encoded_m, question_encoded) %>%
+  layer_dot(axes = c(2,2)) %>%
+  layer_activation("softmax")
+
+# add the match matrix with the second input vector sequence
+response <- list(match, sequence_encoded_c) %>%
+  layer_add() %>%
+  layer_permute(c(2,1))
+
+# concatenate the match matrix with the question vector sequence
+answer <- list(response, question_encoded) %>%
+  layer_concatenate() %>%
+  # the original paper uses a matrix multiplication for this reduction step.
+  # we choose to use a RNN instead.
+  layer_lstm(32) %>%
+  # one regularization layer -- more would probably be needed.
+  layer_dropout(rate = 0.3) %>%
+  layer_dense(vocab_size) %>%
+  # we output a probability distribution over the vocabulary
+  layer_activation("softmax")
+
+# build the final model
+model <- keras_model(inputs = list(sequence, question), answer)
+model %>% compile(
+  optimizer = "rmsprop",
+  loss = "categorical_crossentropy",
+  metrics = "accuracy"
+)
+
+
+# Training ----------------------------------------------------------------
+
+model %>% fit(
+  x = list(train_vec$stories, train_vec$questions),
+  y = train_vec$answers,
+  batch_size = 32,
+  epochs = 120,
+  validation_data = list(list(test_vec$stories, test_vec$questions), test_vec$answers)
+)
+
+
+ + + +
+ + +
+ +
+

Site built with pkgdown.

+
+ +
+
+ + + diff --git a/website/articles/examples/babi_rnn.R b/website/articles/examples/babi_rnn.R new file mode 100644 index 000000000..39ee7807d --- /dev/null +++ b/website/articles/examples/babi_rnn.R @@ -0,0 +1,238 @@ +#' Trains two recurrent neural networks based upon a story and a question. +#' The resulting merged vector is then queried to answer a range of bAbI tasks. +#' +#' The results are comparable to those for an LSTM model provided in Weston et al.: +#' "Towards AI-Complete Question Answering: A Set of Prerequisite Toy Tasks" +#' http://arxiv.org/abs/1502.05698 +#' +#' Task Number | FB LSTM Baseline | Keras QA +#' --- | --- | --- +#' QA1 - Single Supporting Fact | 50 | 100.0 +#' QA2 - Two Supporting Facts | 20 | 50.0 +#' QA3 - Three Supporting Facts | 20 | 20.5 +#' QA4 - Two Arg. Relations | 61 | 62.9 +#' QA5 - Three Arg. Relations | 70 | 61.9 +#' QA6 - yes/No Questions | 48 | 50.7 +#' QA7 - Counting | 49 | 78.9 +#' QA8 - Lists/Sets | 45 | 77.2 +#' QA9 - Simple Negation | 64 | 64.0 +#' QA10 - Indefinite Knowledge | 44 | 47.7 +#' QA11 - Basic Coreference | 72 | 74.9 +#' QA12 - Conjunction | 74 | 76.4 +#' QA13 - Compound Coreference | 94 | 94.4 +#' QA14 - Time Reasoning | 27 | 34.8 +#' QA15 - Basic Deduction | 21 | 32.4 +#' QA16 - Basic Induction | 23 | 50.6 +#' QA17 - Positional Reasoning | 51 | 49.1 +#' QA18 - Size Reasoning | 52 | 90.8 +#' QA19 - Path Finding | 8 | 9.0 +#' QA20 - Agent's Motivations | 91 | 90.7 +#' +#' For the resources related to the bAbI project, refer to: +#' https://research.facebook.com/researchers/1543934539189348 +#' +#' Notes: +#' +#' - With default word, sentence, and query vector sizes, the GRU model achieves: +#' - 100% test accuracy on QA1 in 20 epochs (2 seconds per epoch on CPU) +#' - 50% test accuracy on QA2 in 20 epochs (16 seconds per epoch on CPU) +#' In comparison, the Facebook paper achieves 50% and 20% for the LSTM baseline. +#' +#' - The task does not traditionally parse the question separately. This likely +#' improves accuracy and is a good example of merging two RNNs. +#' +#' - The word vector embeddings are not shared between the story and question RNNs. +#' +#' - See how the accuracy changes given 10,000 training samples (en-10k) instead +#' of only 1000. 1000 was used in order to be comparable to the original paper. +#' +#' - Experiment with GRU, LSTM, and JZS1-3 as they give subtly different results. +#' +#' - The length and noise (i.e. 'useless' story components) impact the ability for +#' LSTMs / GRUs to provide the correct answer. Given only the supporting facts, +#' these RNNs can achieve 100% accuracy on many tasks. Memory networks and neural +#' networks that use attentional processes can efficiently search through this +#' noise to find the relevant statements, improving performance substantially. +#' This becomes especially obvious on QA2 and QA3, both far longer than QA1. +#' + +library(keras) +library(readr) +library(stringr) +library(purrr) +library(tibble) +library(dplyr) + +# Function definition ----------------------------------------------------- + +tokenize_words <- function(x){ + x <- x %>% + str_replace_all('([[:punct:]]+)', ' \\1') %>% + str_split(' ') %>% + unlist() + x[x != ""] +} + +parse_stories <- function(lines, only_supporting = FALSE){ + lines <- lines %>% + str_split(" ", n = 2) %>% + map_df(~tibble(nid = as.integer(.x[[1]]), line = .x[[2]])) + + lines <- lines %>% + mutate( + split = map(line, ~str_split(.x, "\t")[[1]]), + q = map_chr(split, ~.x[1]), + a = map_chr(split, ~.x[2]), + supporting = map(split, ~.x[3] %>% str_split(" ") %>% unlist() %>% as.integer()), + story_id = c(0, cumsum(nid[-nrow(.)] > nid[-1])) + ) %>% + select(-split) + + stories <- lines %>% + filter(is.na(a)) %>% + select(nid_story = nid, story_id, story = q) + + questions <- lines %>% + filter(!is.na(a)) %>% + select(-line) %>% + left_join(stories, by = "story_id") %>% + filter(nid_story < nid) + + if(only_supporting){ + questions <- questions %>% + filter(map2_lgl(nid_story, supporting, ~.x %in% .y)) + } + + questions %>% + group_by(story_id, nid, question = q, answer = a) %>% + summarise(story = paste(story, collapse = " ")) %>% + ungroup() %>% + mutate( + question = map(question, ~tokenize_words(.x)), + story = map(story, ~tokenize_words(.x)), + id = row_number() + ) %>% + select(id, question, answer, story) +} + +vectorize_stories <- function(data, vocab, story_maxlen, query_maxlen){ + + questions <- map(data$question, function(x){ + map_int(x, ~which(.x == vocab)) + }) + + stories <- map(data$story, function(x){ + map_int(x, ~which(.x == vocab)) + }) + + # "" represents padding + answers <- sapply(c("", vocab), function(x){ + as.integer(x == data$answer) + }) + + + list( + questions = pad_sequences(questions, maxlen = query_maxlen), + stories = pad_sequences(stories, maxlen = story_maxlen), + answers = answers + ) +} + +# Parameters -------------------------------------------------------------- + +max_length <- 99999 +embed_hidden_size <- 50 +batch_size <- 32 +epochs <- 40 + +# Data Preparation -------------------------------------------------------- + +path <- get_file( + fname = "babi-tasks-v1-2.tar.gz", + origin = "https://s3.amazonaws.com/text-datasets/babi_tasks_1-20_v1-2.tar.gz" +) +untar(path, exdir = str_replace(path, fixed(".tar.gz"), "/")) +path <- str_replace(path, fixed(".tar.gz"), "/") + +# Default QA1 with 1000 samples +# challenge = '%stasks_1-20_v1-2/en/qa1_single-supporting-fact_%s.txt' +# QA1 with 10,000 samples +# challenge = '%stasks_1-20_v1-2/en-10k/qa1_single-supporting-fact_%s.txt' +# QA2 with 1000 samples +challenge <- "%stasks_1-20_v1-2/en/qa2_two-supporting-facts_%s.txt" +# QA2 with 10,000 samples +# challenge = '%stasks_1-20_v1-2/en-10k/qa2_two-supporting-facts_%s.txt' + +train <- read_lines(sprintf(challenge, path, "train")) %>% + parse_stories() %>% + filter(map_int(story, ~length(.x)) <= max_length) + +test <- read_lines(sprintf(challenge, path, "test")) %>% + parse_stories() %>% + filter(map_int(story, ~length(.x)) <= max_length) + +# extract the vocabulary +all_data <- bind_rows(train, test) +vocab <- c(unlist(all_data$question), all_data$answer, + unlist(all_data$story)) %>% + unique() %>% + sort() + +# Reserve 0 for masking via pad_sequences +vocab_size <- length(vocab) + 1 +story_maxlen <- map_int(all_data$story, ~length(.x)) %>% max() +query_maxlen <- map_int(all_data$question, ~length(.x)) %>% max() + +# vectorized versions of training and test sets +train_vec <- vectorize_stories(train, vocab, story_maxlen, query_maxlen) +test_vec <- vectorize_stories(test, vocab, story_maxlen, query_maxlen) + +# Defining the model ------------------------------------------------------ + +sentence <- layer_input(shape = c(story_maxlen), dtype = "int32") +encoded_sentence <- sentence %>% + layer_embedding(input_dim = vocab_size, output_dim = embed_hidden_size) %>% + layer_dropout(rate = 0.3) + +question <- layer_input(shape = c(query_maxlen), dtype = "int32") +encoded_question <- question %>% + layer_embedding(input_dim = vocab_size, output_dim = embed_hidden_size) %>% + layer_dropout(rate = 0.3) %>% + layer_lstm(units = embed_hidden_size) %>% + layer_repeat_vector(n = story_maxlen) + +merged <- list(encoded_sentence, encoded_question) %>% + layer_add() %>% + layer_lstm(units = embed_hidden_size) %>% + layer_dropout(rate = 0.3) + +preds <- merged %>% + layer_dense(units = vocab_size, activation = "softmax") + +model <- keras_model(inputs = list(sentence, question), outputs = preds) +model %>% compile( + optimizer = "adam", + loss = "categorical_crossentropy", + metrics = "accuracy" +) + +model + +# Training ---------------------------------------------------------------- + +model %>% fit( + x = list(train_vec$stories, train_vec$questions), + y = train_vec$answers, + batch_size = batch_size, + epochs = epochs, + validation_split=0.05 +) + +evaluation <- model %>% evaluate( + x = list(test_vec$stories, test_vec$questions), + y = test_vec$answers, + batch_size = batch_size +) + +evaluation + diff --git a/website/articles/examples/babi_rnn.html b/website/articles/examples/babi_rnn.html new file mode 100644 index 000000000..6f2fd4d9d --- /dev/null +++ b/website/articles/examples/babi_rnn.html @@ -0,0 +1,438 @@ + + + + + + + +babi_rnn • keras + + + + + + + +
+
+ + + +
+
+ + + + +
+ +

Trains two recurrent neural networks based upon a story and a question. The resulting merged vector is then queried to answer a range of bAbI tasks.

+

The results are comparable to those for an LSTM model provided in Weston et al.: “Towards AI-Complete Question Answering: A Set of Prerequisite Toy Tasks” http://arxiv.org/abs/1502.05698

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Task NumberFB LSTM BaselineKeras QA
QA1 - Single Supporting Fact50100.0
QA2 - Two Supporting Facts2050.0
QA3 - Three Supporting Facts2020.5
QA4 - Two Arg. Relations6162.9
QA5 - Three Arg. Relations7061.9
QA6 - yes/No Questions4850.7
QA7 - Counting4978.9
QA8 - Lists/Sets4577.2
QA9 - Simple Negation6464.0
QA10 - Indefinite Knowledge4447.7
QA11 - Basic Coreference7274.9
QA12 - Conjunction7476.4
QA13 - Compound Coreference9494.4
QA14 - Time Reasoning2734.8
QA15 - Basic Deduction2132.4
QA16 - Basic Induction2350.6
QA17 - Positional Reasoning5149.1
QA18 - Size Reasoning5290.8
QA19 - Path Finding89.0
QA20 - Agent’s Motivations9190.7
+

For the resources related to the bAbI project, refer to: https://research.facebook.com/researchers/1543934539189348

+

Notes:

+
    +
  • With default word, sentence, and query vector sizes, the GRU model achieves:
  • +
  • 100% test accuracy on QA1 in 20 epochs (2 seconds per epoch on CPU)
  • +
  • 50% test accuracy on QA2 in 20 epochs (16 seconds per epoch on CPU) In comparison, the Facebook paper achieves 50% and 20% for the LSTM baseline.

  • +
  • The task does not traditionally parse the question separately. This likely improves accuracy and is a good example of merging two RNNs.

  • +
  • The word vector embeddings are not shared between the story and question RNNs.

  • +
  • See how the accuracy changes given 10,000 training samples (en-10k) instead of only 1000. 1000 was used in order to be comparable to the original paper.

  • +
  • Experiment with GRU, LSTM, and JZS1-3 as they give subtly different results.

  • +
  • The length and noise (i.e. ‘useless’ story components) impact the ability for LSTMs / GRUs to provide the correct answer. Given only the supporting facts, these RNNs can achieve 100% accuracy on many tasks. Memory networks and neural networks that use attentional processes can efficiently search through this noise to find the relevant statements, improving performance substantially. This becomes especially obvious on QA2 and QA3, both far longer than QA1.

  • +
+
library(keras)
+library(readr)
+library(stringr)
+library(purrr)
+library(tibble)
+library(dplyr)
+
+# Function definition -----------------------------------------------------
+
+tokenize_words <- function(x){
+  x <- x %>% 
+    str_replace_all('([[:punct:]]+)', ' \\1') %>% 
+    str_split(' ') %>%
+    unlist()
+  x[x != ""]
+}
+
+parse_stories <- function(lines, only_supporting = FALSE){
+  lines <- lines %>% 
+    str_split(" ", n = 2) %>%
+    map_df(~tibble(nid = as.integer(.x[[1]]), line = .x[[2]]))
+  
+  lines <- lines %>%
+    mutate(
+      split = map(line, ~str_split(.x, "\t")[[1]]),
+      q = map_chr(split, ~.x[1]),
+      a = map_chr(split, ~.x[2]),
+      supporting = map(split, ~.x[3] %>% str_split(" ") %>% unlist() %>% as.integer()),
+      story_id = c(0, cumsum(nid[-nrow(.)] > nid[-1]))
+    ) %>%
+    select(-split)
+  
+  stories <- lines %>%
+    filter(is.na(a)) %>%
+    select(nid_story = nid, story_id, story = q)
+  
+  questions <- lines %>%
+    filter(!is.na(a)) %>%
+    select(-line) %>%
+    left_join(stories, by = "story_id") %>%
+    filter(nid_story < nid)
+
+  if(only_supporting){
+    questions <- questions %>%
+      filter(map2_lgl(nid_story, supporting, ~.x %in% .y))
+  }
+    
+  questions %>%
+    group_by(story_id, nid, question = q, answer = a) %>%
+    summarise(story = paste(story, collapse = " ")) %>%
+    ungroup() %>% 
+    mutate(
+      question = map(question, ~tokenize_words(.x)),
+      story = map(story, ~tokenize_words(.x)),
+      id = row_number()
+    ) %>%
+    select(id, question, answer, story)
+}
+
+vectorize_stories <- function(data, vocab, story_maxlen, query_maxlen){
+  
+  questions <- map(data$question, function(x){
+    map_int(x, ~which(.x == vocab))
+  })
+  
+  stories <- map(data$story, function(x){
+    map_int(x, ~which(.x == vocab))
+  })
+  
+  # "" represents padding
+  answers <- sapply(c("", vocab), function(x){
+    as.integer(x == data$answer)
+  })
+  
+
+  list(
+    questions = pad_sequences(questions, maxlen = query_maxlen),
+    stories   = pad_sequences(stories, maxlen = story_maxlen),
+    answers   = answers
+  )
+}
+
+# Parameters --------------------------------------------------------------
+
+max_length <- 99999
+embed_hidden_size <- 50
+batch_size <- 32
+epochs <- 40
+
+# Data Preparation --------------------------------------------------------
+
+path <- get_file(
+  fname = "babi-tasks-v1-2.tar.gz",
+  origin = "https://s3.amazonaws.com/text-datasets/babi_tasks_1-20_v1-2.tar.gz"
+)
+untar(path, exdir = str_replace(path, fixed(".tar.gz"), "/"))
+path <- str_replace(path, fixed(".tar.gz"), "/")
+
+# Default QA1 with 1000 samples
+# challenge = '%stasks_1-20_v1-2/en/qa1_single-supporting-fact_%s.txt'
+# QA1 with 10,000 samples
+# challenge = '%stasks_1-20_v1-2/en-10k/qa1_single-supporting-fact_%s.txt'
+# QA2 with 1000 samples
+challenge <- "%stasks_1-20_v1-2/en/qa2_two-supporting-facts_%s.txt"
+# QA2 with 10,000 samples
+# challenge = '%stasks_1-20_v1-2/en-10k/qa2_two-supporting-facts_%s.txt'
+
+train <- read_lines(sprintf(challenge, path, "train")) %>%
+  parse_stories() %>%
+  filter(map_int(story, ~length(.x)) <= max_length)
+
+test <- read_lines(sprintf(challenge, path, "test")) %>%
+  parse_stories() %>%
+  filter(map_int(story, ~length(.x)) <= max_length)
+
+# extract the vocabulary
+all_data <- bind_rows(train, test)
+vocab <- c(unlist(all_data$question), all_data$answer, 
+           unlist(all_data$story)) %>%
+  unique() %>%
+  sort()
+
+# Reserve 0 for masking via pad_sequences
+vocab_size <- length(vocab) + 1
+story_maxlen <- map_int(all_data$story, ~length(.x)) %>% max()
+query_maxlen <- map_int(all_data$question, ~length(.x)) %>% max()
+
+# vectorized versions of training and test sets
+train_vec <- vectorize_stories(train, vocab, story_maxlen, query_maxlen)
+test_vec <- vectorize_stories(test, vocab, story_maxlen, query_maxlen)
+
+# Defining the model ------------------------------------------------------
+
+sentence <- layer_input(shape = c(story_maxlen), dtype = "int32")
+encoded_sentence <- sentence %>% 
+  layer_embedding(input_dim = vocab_size, output_dim = embed_hidden_size) %>%
+  layer_dropout(rate = 0.3)
+
+question <- layer_input(shape = c(query_maxlen), dtype = "int32")
+encoded_question <- question %>%
+  layer_embedding(input_dim = vocab_size, output_dim = embed_hidden_size) %>%
+  layer_dropout(rate = 0.3) %>%
+  layer_lstm(units = embed_hidden_size) %>%
+  layer_repeat_vector(n = story_maxlen)
+
+merged <- list(encoded_sentence, encoded_question) %>%
+  layer_add() %>%
+  layer_lstm(units = embed_hidden_size) %>%
+  layer_dropout(rate = 0.3)
+
+preds <- merged %>%
+  layer_dense(units = vocab_size, activation = "softmax")
+
+model <- keras_model(inputs = list(sentence, question), outputs = preds)
+model %>% compile(
+  optimizer = "adam",
+  loss = "categorical_crossentropy",
+  metrics = "accuracy"
+)
+
+model
+
+# Training ----------------------------------------------------------------
+
+model %>% fit(
+  x = list(train_vec$stories, train_vec$questions),
+  y = train_vec$answers,
+  batch_size = batch_size,
+  epochs = epochs,
+  validation_split=0.05
+)
+
+evaluation <- model %>% evaluate(
+  x = list(test_vec$stories, test_vec$questions),
+  y = test_vec$answers,
+  batch_size = batch_size
+)
+
+evaluation
+
+
+ + + +
+ + +
+ +
+

Site built with pkgdown.

+
+ +
+
+ + + diff --git a/website/articles/examples/cifar10_cnn.R b/website/articles/examples/cifar10_cnn.R new file mode 100644 index 000000000..d2210c11c --- /dev/null +++ b/website/articles/examples/cifar10_cnn.R @@ -0,0 +1,95 @@ +#' Train a simple deep CNN on the CIFAR10 small images dataset. +#' +#' It gets down to 0.65 test logloss in 25 epochs, and down to 0.55 after 50 epochs. +#' (it's still underfitting at that point, though). + +library(keras) + +# Parameters -------------------------------------------------------------- + +batch_size <- 32 +epochs <- 200 +data_augmentation <- TRUE + + +# Data Preparation -------------------------------------------------------- + +# see ?dataset_cifar10 for more info +cifar10 <- dataset_cifar10() + +x_train <- cifar10$train$x/255 +x_test <- cifar10$test$x/255 +y_train <- to_categorical(cifar10$train$y, num_classes = 10) +y_test <- to_categorical(cifar10$test$y, num_classes = 10) + +# Defining the model ------------------------------------------------------ + +model <- keras_model_sequential() + +model %>% + layer_conv_2d( + filter = 32, kernel_size = c(3,3), padding = "same", + input_shape = c(32, 32, 3) + ) %>% + layer_activation("relu") %>% + layer_conv_2d(filter = 32, kernel_size = c(3,3)) %>% + layer_activation("relu") %>% + layer_max_pooling_2d(pool_size = c(2,2)) %>% + layer_dropout(0.25) %>% + + layer_conv_2d(filter = 32, kernel_size = c(3,3), padding = "same") %>% + layer_activation("relu") %>% + layer_conv_2d(filter = 32, kernel_size = c(3,3)) %>% + layer_activation("relu") %>% + layer_max_pooling_2d(pool_size = c(2,2)) %>% + layer_dropout(0.25) %>% + + layer_flatten() %>% + layer_dense(512) %>% + layer_activation("relu") %>% + layer_dropout(0.5) %>% + layer_dense(10) %>% + layer_activation("softmax") + +opt <- optimizer_rmsprop(lr = 0.0001, decay = 1e-6) + +model %>% compile( + loss = "categorical_crossentropy", + optimizer = opt, + metrics = "accuracy" +) + + +# Training ---------------------------------------------------------------- + +if(!data_augmentation){ + + model %>% fit( + x_train, y_train, + batch_size = batch_size, + epochs = epochs, + validation_data = list(x_test, y_test), + shuffle = TRUE + ) + +} else { + + datagen <- image_data_generator( + featurewise_center = TRUE, + featurewise_std_normalization = TRUE, + rotation_range = 20, + width_shift_range = 0.2, + height_shift_range = 0.2, + horizontal_flip = TRUE + ) + + datagen %>% fit_image_data_generator(x_train) + + model %>% fit_generator( + flow_images_from_data(x_train, y_train, datagen, batch_size = batch_size), + steps_per_epoch = as.integer(50000/batch_size), + epochs = epochs, + validation_data = list(x_test, y_test) + ) + +} diff --git a/website/articles/examples/cifar10_cnn.html b/website/articles/examples/cifar10_cnn.html new file mode 100644 index 000000000..7d86f2f8b --- /dev/null +++ b/website/articles/examples/cifar10_cnn.html @@ -0,0 +1,228 @@ + + + + + + + +cifar10_cnn • keras + + + + + + + +
+
+ + + +
+
+ + + + +
+ +

Train a simple deep CNN on the CIFAR10 small images dataset.

+

It gets down to 0.65 test logloss in 25 epochs, and down to 0.55 after 50 epochs. (it’s still underfitting at that point, though).

+
library(keras)
+
+# Parameters --------------------------------------------------------------
+
+batch_size <- 32
+epochs <- 200
+data_augmentation <- TRUE
+
+
+# Data Preparation --------------------------------------------------------
+
+# see ?dataset_cifar10 for more info
+cifar10 <- dataset_cifar10()
+
+x_train <- cifar10$train$x/255
+x_test <- cifar10$test$x/255
+y_train <- to_categorical(cifar10$train$y, num_classes = 10)
+y_test <- to_categorical(cifar10$test$y, num_classes = 10)
+
+# Defining the model ------------------------------------------------------
+
+model <- keras_model_sequential()
+
+model %>%
+  layer_conv_2d(
+    filter = 32, kernel_size = c(3,3), padding = "same", 
+    input_shape = c(32, 32, 3)
+  ) %>%
+  layer_activation("relu") %>%
+  layer_conv_2d(filter = 32, kernel_size = c(3,3)) %>%
+  layer_activation("relu") %>%
+  layer_max_pooling_2d(pool_size = c(2,2)) %>%
+  layer_dropout(0.25) %>%
+  
+  layer_conv_2d(filter = 32, kernel_size = c(3,3), padding = "same") %>%
+  layer_activation("relu") %>%
+  layer_conv_2d(filter = 32, kernel_size = c(3,3)) %>%
+  layer_activation("relu") %>%
+  layer_max_pooling_2d(pool_size = c(2,2)) %>%
+  layer_dropout(0.25) %>%
+  
+  layer_flatten() %>%
+  layer_dense(512) %>%
+  layer_activation("relu") %>%
+  layer_dropout(0.5) %>%
+  layer_dense(10) %>%
+  layer_activation("softmax")
+
+opt <- optimizer_rmsprop(lr = 0.0001, decay = 1e-6)
+
+model %>% compile(
+  loss = "categorical_crossentropy",
+  optimizer = opt,
+  metrics = "accuracy"
+)
+
+
+# Training ----------------------------------------------------------------
+
+if(!data_augmentation){
+  
+  model %>% fit(
+    x_train, y_train,
+    batch_size = batch_size,
+    epochs = epochs,
+    validation_data = list(x_test, y_test),
+    shuffle = TRUE
+  )
+  
+} else {
+  
+  datagen <- image_data_generator(
+    featurewise_center = TRUE,
+    featurewise_std_normalization = TRUE,
+    rotation_range = 20,
+    width_shift_range = 0.2,
+    height_shift_range = 0.2,
+    horizontal_flip = TRUE
+  )
+  
+  datagen %>% fit_image_data_generator(x_train)
+  
+  model %>% fit_generator(
+    flow_images_from_data(x_train, y_train, datagen, batch_size = batch_size),
+    steps_per_epoch = as.integer(50000/batch_size), 
+    epochs = epochs, 
+    validation_data = list(x_test, y_test)
+  )
+  
+}
+
+
+ + + +
+ + +
+ +
+

Site built with pkgdown.

+
+ +
+
+ + + diff --git a/website/articles/examples/conv_filter_visualization.R b/website/articles/examples/conv_filter_visualization.R new file mode 100644 index 000000000..0ab13681d --- /dev/null +++ b/website/articles/examples/conv_filter_visualization.R @@ -0,0 +1 @@ +library(keras) diff --git a/website/articles/examples/conv_filter_visualization.html b/website/articles/examples/conv_filter_visualization.html new file mode 100644 index 000000000..37489a8d5 --- /dev/null +++ b/website/articles/examples/conv_filter_visualization.html @@ -0,0 +1,137 @@ + + + + + + + +conv_filter_visualization • keras + + + + + + + +
+
+ + + +
+
+ + + + + +
+ + + +
+ + +
+ +
+

Site built with pkgdown.

+
+ +
+
+ + + diff --git a/website/articles/examples/conv_filter_visualization.py b/website/articles/examples/conv_filter_visualization.py new file mode 100755 index 000000000..b85b86797 --- /dev/null +++ b/website/articles/examples/conv_filter_visualization.py @@ -0,0 +1,135 @@ +'''Visualization of the filters of VGG16, via gradient ascent in input space. + +This script can run on CPU in a few minutes (with the TensorFlow backend). + +Results example: http://i.imgur.com/4nj4KjN.jpg +''' +from __future__ import print_function + +from scipy.misc import imsave +import numpy as np +import time +from keras.applications import vgg16 +from keras import backend as K + +# dimensions of the generated pictures for each filter. +img_width = 128 +img_height = 128 + +# the name of the layer we want to visualize +# (see model definition at keras/applications/vgg16.py) +layer_name = 'block5_conv1' + +# util function to convert a tensor into a valid image + + +def deprocess_image(x): + # normalize tensor: center on 0., ensure std is 0.1 + x -= x.mean() + x /= (x.std() + 1e-5) + x *= 0.1 + + # clip to [0, 1] + x += 0.5 + x = np.clip(x, 0, 1) + + # convert to RGB array + x *= 255 + if K.image_data_format() == 'channels_first': + x = x.transpose((1, 2, 0)) + x = np.clip(x, 0, 255).astype('uint8') + return x + +# build the VGG16 network with ImageNet weights +model = vgg16.VGG16(weights='imagenet', include_top=False) +print('Model loaded.') + +model.summary() + +# this is the placeholder for the input images +input_img = model.input + +# get the symbolic outputs of each "key" layer (we gave them unique names). +layer_dict = dict([(layer.name, layer) for layer in model.layers[1:]]) + + +def normalize(x): + # utility function to normalize a tensor by its L2 norm + return x / (K.sqrt(K.mean(K.square(x))) + 1e-5) + + +kept_filters = [] +for filter_index in range(0, 200): + # we only scan through the first 200 filters, + # but there are actually 512 of them + print('Processing filter %d' % filter_index) + start_time = time.time() + + # we build a loss function that maximizes the activation + # of the nth filter of the layer considered + layer_output = layer_dict[layer_name].output + if K.image_data_format() == 'channels_first': + loss = K.mean(layer_output[:, filter_index, :, :]) + else: + loss = K.mean(layer_output[:, :, :, filter_index]) + + # we compute the gradient of the input picture wrt this loss + grads = K.gradients(loss, input_img)[0] + + # normalization trick: we normalize the gradient + grads = normalize(grads) + + # this function returns the loss and grads given the input picture + iterate = K.function([input_img], [loss, grads]) + + # step size for gradient ascent + step = 1. + + # we start from a gray image with some random noise + if K.image_data_format() == 'channels_first': + input_img_data = np.random.random((1, 3, img_width, img_height)) + else: + input_img_data = np.random.random((1, img_width, img_height, 3)) + input_img_data = (input_img_data - 0.5) * 20 + 128 + + # we run gradient ascent for 20 steps + for i in range(20): + loss_value, grads_value = iterate([input_img_data]) + input_img_data += grads_value * step + + print('Current loss value:', loss_value) + if loss_value <= 0.: + # some filters get stuck to 0, we can skip them + break + + # decode the resulting input image + if loss_value > 0: + img = deprocess_image(input_img_data[0]) + kept_filters.append((img, loss_value)) + end_time = time.time() + print('Filter %d processed in %ds' % (filter_index, end_time - start_time)) + +# we will stich the best 64 filters on a 8 x 8 grid. +n = 8 + +# the filters that have the highest loss are assumed to be better-looking. +# we will only keep the top 64 filters. +kept_filters.sort(key=lambda x: x[1], reverse=True) +kept_filters = kept_filters[:n * n] + +# build a black picture with enough space for +# our 8 x 8 filters of size 128 x 128, with a 5px margin in between +margin = 5 +width = n * img_width + (n - 1) * margin +height = n * img_height + (n - 1) * margin +stitched_filters = np.zeros((width, height, 3)) + +# fill the picture with our saved filters +for i in range(n): + for j in range(n): + img, loss = kept_filters[i * n + j] + stitched_filters[(img_width + margin) * i: (img_width + margin) * i + img_width, + (img_height + margin) * j: (img_height + margin) * j + img_height, :] = img + +# save the result to disk +imsave('stitched_filters_%dx%d.png' % (n, n), stitched_filters) diff --git a/website/articles/examples/conv_lstm.R b/website/articles/examples/conv_lstm.R new file mode 100644 index 000000000..dd15dc9a2 --- /dev/null +++ b/website/articles/examples/conv_lstm.R @@ -0,0 +1,187 @@ +# This script demonstrates the use of a convolutional LSTM network. +# This network is used to predict the next frame of an artificially +# generated movie which contains moving squares. +library(keras) +library(abind) +library(raster) + +# Function Definition ----------------------------------------------------- + +generate_movies <- function(n_samples = 1200, n_frames = 15){ + + rows <- 80 + cols <- 80 + + noisy_movies <- array(0, dim = c(n_samples, n_frames, rows, cols)) + shifted_movies <- array(0, dim = c(n_samples, n_frames, rows, cols)) + + n <- sample(3:8, 1) + + for(s in 1:n_samples){ + for(i in 1:n){ + # Initial position + xstart <- sample(20:60, 1) + ystart <- sample(20:60, 1) + + # Direction of motion + directionx <- sample(-1:1, 1) + directiony <- sample(-1:1, 1) + + # Size of the square + w <- sample(2:3, 1) + + x_shift <- xstart + directionx*(0:(n_frames)) + y_shift <- ystart + directiony*(0:(n_frames)) + + for(t in 1:n_frames){ + square_x <- (x_shift[t] - w):(x_shift[t] + w) + square_y <- (y_shift[t] - w):(y_shift[t] + w) + + noisy_movies[s, t, square_x, square_y] <- + noisy_movies[s, t, square_x, square_y] + 1 + + # Make it more robust by adding noise. + # The idea is that if during inference, + # the value of the pixel is not exactly one, + # we need to train the network to be robust and still + # consider it as a pixel belonging to a square. + if(runif(1) > 0.5){ + noise_f <- sample(c(-1, 1), 1) + + square_x_n <- (x_shift[t] - w - 1):(x_shift[t] + w + 1) + square_y_n <- (y_shift[t] - w - 1):(y_shift[t] + w + 1) + + noisy_movies[s, t, square_x_n, square_y_n] <- + noisy_movies[s, t, square_x_n, square_y_n] + noise_f*0.1 + + } + + # Shift the ground truth by 1 + square_x_s <- (x_shift[t+1] - w):(x_shift[t+1] + w) + square_y_s <- (y_shift[t+1] - w):(y_shift[t+1] + w) + + shifted_movies[s, t, square_x_s, square_y_s] <- + shifted_movies[s, t, square_x_s, square_y_s] + 1 + } + } + } + + # Cut to a 40x40 window + noisy_movies <- noisy_movies[,,21:60, 21:60] + shifted_movies = shifted_movies[,,21:60, 21:60] + + noisy_movies[noisy_movies > 1] <- 1 + shifted_movies[shifted_movies > 1] <- 1 + + # add channel dimension + dim(noisy_movies) <- c(dim(noisy_movies), 1) + dim(shifted_movies) <- c(dim(shifted_movies), 1) + + list( + noisy_movies = noisy_movies, + shifted_movies = shifted_movies + ) +} + + +# Data Preparation -------------------------------------------------------- + +# Artificial data generation: +# Generate movies with 3 to 7 moving squares inside. +# The squares are of shape 1x1 or 2x2 pixels, +# which move linearly over time. +# For convenience we first create movies with bigger width and height (80x80) +# and at the end we select a 40x40 window. +movies <- generate_movies(n_samples = 1000, n_frames = 15) +more_movies <- generate_movies(n_samples = 200, n_frames = 15) + + +# Model definition -------------------------------------------------------- + +model <- keras_model_sequential() + +model %>% + layer_conv_lstm_2d( + input_shape = list(NULL,40,40,1), + filters = 40, kernel_size = c(3,3), + padding = "same", + return_sequences = TRUE + ) %>% + layer_batch_normalization() %>% + + layer_conv_lstm_2d( + filters = 40, kernel_size = c(3,3), + padding = "same", return_sequences = TRUE + ) %>% + layer_batch_normalization() %>% + + layer_conv_lstm_2d( + filters = 40, kernel_size = c(3,3), + padding = "same", return_sequences = TRUE + ) %>% + layer_batch_normalization() %>% + + layer_conv_lstm_2d( + filters = 40, kernel_size = c(3,3), + padding = "same", return_sequences = TRUE + ) %>% + layer_batch_normalization() %>% + + layer_conv_3d( + filters = 1, kernel_size = c(3,3,3), + activation = "sigmoid", + padding = "same", data_format ="channels_last" + ) + +model %>% compile( + loss = "binary_crossentropy", + optimizer = "adadelta" +) + +model + + +# Training ---------------------------------------------------------------- + +model %>% fit( + movies$noisy_movies, + movies$shifted_movies, + batch_size = 10, + epochs = 30, + validation_split = 0.05 +) + +# Visualization ---------------------------------------------------------------- +# Testing the network on one movie +# feed it with the first 7 positions and then +# predict the new positions + +which <- 100 #Example to visualize on + +track <- more_movies$noisy_movies[which,1:8,,,1] +track <- array(track, c(1,8,40,40,1)) +for (k in 1:15){ +if (k<8){ + png(paste0(k,'_animate.png')) + par(mfrow=c(1,2),bg = 'white') + (more_movies$noisy_movies[which,k,,,1]) %>% raster() %>% plot() %>% title (main=paste0('Ground_',k)) + (more_movies$noisy_movies[which,k,,,1]) %>% raster() %>% plot() %>% title (main=paste0('Ground_',k)) + dev.off() +} else { + # And then compare the predictions + # to the ground truth + png(paste0(k,'_animate.png')) + par(mfrow=c(1,2),bg = 'white') + (more_movies$noisy_movies[which,k,,,1]) %>% raster() %>% plot() %>% title (main=paste0('Ground_',k)) + + new_pos <- model %>% predict(track) #Make Prediction + new_pos_loc <- new_pos[1,k,1:40,1:40,1] #Slice the last row + new_pos_loc %>% raster() %>% plot() %>% title (main=paste0('Pred_',k)) + + new_pos <- array(new_pos_loc, c(1,1, 40,40,1)) #Reshape it + track <- abind(track,new_pos,along = 2) #Bind it to the earlier data + dev.off() +} +} +# you can also create a gif by running +system("convert -delay 40 *.png animation.gif") diff --git a/website/articles/examples/conv_lstm.html b/website/articles/examples/conv_lstm.html new file mode 100644 index 000000000..1f320b353 --- /dev/null +++ b/website/articles/examples/conv_lstm.html @@ -0,0 +1,323 @@ + + + + + + + +conv_lstm • keras + + + + + + + +
+
+ + + +
+
+ + + + +
+ +
# This script demonstrates the use of a convolutional LSTM network.
+# This network is used to predict the next frame of an artificially
+# generated movie which contains moving squares.
+library(keras)
+library(abind)
+library(raster)
+
+# Function Definition -----------------------------------------------------
+
+generate_movies <- function(n_samples = 1200, n_frames = 15){
+  
+  rows <- 80
+  cols <- 80
+  
+  noisy_movies <- array(0, dim = c(n_samples, n_frames, rows, cols))
+  shifted_movies <- array(0, dim = c(n_samples, n_frames, rows, cols))
+  
+  n <- sample(3:8, 1)
+  
+  for(s in 1:n_samples){
+    for(i in 1:n){
+      # Initial position
+      xstart <- sample(20:60, 1)
+      ystart <- sample(20:60, 1)
+      
+      # Direction of motion
+      directionx <- sample(-1:1, 1)
+      directiony <- sample(-1:1, 1)
+      
+      # Size of the square
+      w <- sample(2:3, 1)
+      
+      x_shift <- xstart + directionx*(0:(n_frames))
+      y_shift <- ystart + directiony*(0:(n_frames))
+      
+      for(t in 1:n_frames){
+        square_x <- (x_shift[t] - w):(x_shift[t] + w)
+        square_y <- (y_shift[t] - w):(y_shift[t] + w)
+        
+        noisy_movies[s, t, square_x, square_y] <- 
+          noisy_movies[s, t, square_x, square_y] + 1
+        
+        # Make it more robust by adding noise.
+        # The idea is that if during inference,
+        # the value of the pixel is not exactly one,
+        # we need to train the network to be robust and still
+        # consider it as a pixel belonging to a square.
+        if(runif(1) > 0.5){
+          noise_f <- sample(c(-1, 1), 1)
+          
+          square_x_n <- (x_shift[t] - w - 1):(x_shift[t] + w + 1)
+          square_y_n <- (y_shift[t] - w - 1):(y_shift[t] + w + 1)
+          
+          noisy_movies[s, t, square_x_n, square_y_n] <- 
+            noisy_movies[s, t, square_x_n, square_y_n] + noise_f*0.1
+          
+        }
+        
+        # Shift the ground truth by 1
+        square_x_s <- (x_shift[t+1] - w):(x_shift[t+1] + w)
+        square_y_s <- (y_shift[t+1] - w):(y_shift[t+1] + w)
+        
+        shifted_movies[s, t, square_x_s, square_y_s] <- 
+          shifted_movies[s, t, square_x_s, square_y_s] + 1
+      }
+    }  
+  }
+  
+  # Cut to a 40x40 window
+  noisy_movies <- noisy_movies[,,21:60, 21:60]
+  shifted_movies = shifted_movies[,,21:60, 21:60]
+  
+  noisy_movies[noisy_movies > 1] <- 1
+  shifted_movies[shifted_movies > 1] <- 1
+
+  # add channel dimension
+  dim(noisy_movies) <- c(dim(noisy_movies), 1)
+  dim(shifted_movies) <- c(dim(shifted_movies), 1)
+  
+  list(
+    noisy_movies = noisy_movies,
+    shifted_movies = shifted_movies
+  )
+}
+
+
+# Data Preparation --------------------------------------------------------
+
+# Artificial data generation:
+# Generate movies with 3 to 7 moving squares inside.
+# The squares are of shape 1x1 or 2x2 pixels,
+# which move linearly over time.
+# For convenience we first create movies with bigger width and height (80x80)
+# and at the end we select a 40x40 window.
+movies <- generate_movies(n_samples = 1000, n_frames = 15)
+more_movies <- generate_movies(n_samples = 200, n_frames = 15)
+
+
+# Model definition --------------------------------------------------------
+
+model <- keras_model_sequential()
+
+model %>%
+  layer_conv_lstm_2d(
+    input_shape = list(NULL,40,40,1), 
+    filters = 40, kernel_size = c(3,3),
+    padding = "same", 
+    return_sequences = TRUE
+  ) %>%
+  layer_batch_normalization() %>%
+  
+  layer_conv_lstm_2d(
+    filters = 40, kernel_size = c(3,3),
+    padding = "same", return_sequences = TRUE
+  ) %>%
+  layer_batch_normalization() %>%
+  
+  layer_conv_lstm_2d(
+    filters = 40, kernel_size = c(3,3),
+    padding = "same", return_sequences = TRUE
+  ) %>%
+  layer_batch_normalization() %>%
+  
+  layer_conv_lstm_2d(
+    filters = 40, kernel_size = c(3,3),
+    padding = "same", return_sequences = TRUE
+  ) %>%
+  layer_batch_normalization() %>%
+  
+  layer_conv_3d(
+    filters = 1, kernel_size = c(3,3,3),
+    activation = "sigmoid", 
+    padding = "same", data_format ="channels_last"
+  )
+
+model %>% compile(
+  loss = "binary_crossentropy", 
+  optimizer = "adadelta"
+)
+
+model
+
+
+# Training ----------------------------------------------------------------
+
+model %>% fit(
+  movies$noisy_movies,
+  movies$shifted_movies,
+  batch_size = 10,
+  epochs = 30, 
+  validation_split = 0.05
+)
+
+# Visualization  ----------------------------------------------------------------
+# Testing the network on one movie
+# feed it with the first 7 positions and then
+# predict the new positions
+
+which <- 100 #Example to visualize on
+
+track <- more_movies$noisy_movies[which,1:8,,,1]
+track <- array(track, c(1,8,40,40,1))
+for (k in 1:15){
+if (k<8){
+  png(paste0(k,'_animate.png'))
+  par(mfrow=c(1,2),bg = 'white')
+  (more_movies$noisy_movies[which,k,,,1])  %>% raster() %>% plot() %>% title (main=paste0('Ground_',k)) 
+  (more_movies$noisy_movies[which,k,,,1])  %>% raster() %>% plot() %>% title (main=paste0('Ground_',k)) 
+  dev.off()
+}  else {
+  # And then compare the predictions
+  # to the ground truth
+  png(paste0(k,'_animate.png'))
+  par(mfrow=c(1,2),bg = 'white')
+  (more_movies$noisy_movies[which,k,,,1])  %>% raster() %>% plot() %>% title (main=paste0('Ground_',k))
+   
+  new_pos <- model %>% predict(track)  #Make Prediction
+  new_pos_loc <- new_pos[1,k,1:40,1:40,1]  #Slice the last row
+  new_pos_loc  %>% raster() %>% plot() %>% title (main=paste0('Pred_',k))
+  
+  new_pos <- array(new_pos_loc, c(1,1, 40,40,1)) #Reshape it
+  track <- abind(track,new_pos,along = 2)  #Bind it to the earlier data
+  dev.off()
+}
+}  
+# you can also create a gif by running
+system("convert -delay 40 *.png animation.gif")
+
+
+ + + +
+ + +
+ +
+

Site built with pkgdown.

+
+ +
+
+ + + diff --git a/website/articles/examples/deep_dream.R b/website/articles/examples/deep_dream.R new file mode 100644 index 000000000..c89108220 --- /dev/null +++ b/website/articles/examples/deep_dream.R @@ -0,0 +1,205 @@ +#' Deep Dreaming in Keras. +#' +#' It is preferable to run this script on GPU, for speed. +#' +#' Example results: http://i.imgur.com/FX6ROg9.jpg +#' + +library(keras) +library(tensorflow) +library(purrr) +library(R6) +K <- backend() + +# Function Definitions ---------------------------------------------------- + +preprocess_image <- function(image_path, height, width){ + image_load(image_path, target_size = c(height, width)) %>% + image_to_array() %>% + array(dim = c(1, dim(.))) %>% + imagenet_preprocess_input() +} + +deprocess_image <- function(x){ + x <- x[1,,,] + # Remove zero-center by mean pixel + x[,,1] <- x[,,1] + 103.939 + x[,,2] <- x[,,2] + 116.779 + x[,,3] <- x[,,3] + 123.68 + # 'BGR'->'RGB' + x <- x[,,c(3,2,1)] + # clip to interval 0, 255 + x[x > 255] <- 255 + x[x < 0] <- 0 + x[] <- as.integer(x)/255 + x +} + +# calculates the total variation loss +# https://en.wikipedia.org/wiki/Total_variation_denoising +total_variation_loss <- function(x, h, w){ + + y_ij <- x[,0:(h - 2L), 0:(w - 2L),] + y_i1j <- x[,1:(h - 1L), 0:(w - 2L),] + y_ij1 <- x[,0:(h - 2L), 1:(w - 1L),] + + a <- K$square(y_ij - y_i1j) + b <- K$square(y_ij - y_ij1) + K$sum(K$pow(a + b, 1.25)) +} + + +# Parameters -------------------------------------------------------- + +# some settings we found interesting +saved_settings = list( + bad_trip = list( + features = list( + block4_conv1 = 0.05, + block4_conv2 = 0.01, + block4_conv3 = 0.01 + ), + continuity = 0.1, + dream_l2 = 0.8, + jitter = 5 + ), + dreamy = list( + features = list( + block5_conv1 = 0.05, + block5_conv2 = 0.02 + ), + continuity = 0.1, + dream_l2 = 0.02, + jitter = 0 + ) +) + +# the settings we will use in this experiment +img_height <- 600L +img_width <- 600L +img_size <- c(img_height, img_width, 3) +settings <- saved_settings$dreamy +image <- preprocess_image("deep_dream.jpg", img_height, img_width) + +# Model definition -------------------------------------------------------- + +# this will contain our generated image +dream <- layer_input(batch_shape = c(1, img_size)) + +# build the VGG16 network with our placeholder +# the model will be loaded with pre-trained ImageNet weights +model <- application_vgg16(input_tensor = dream, weights = "imagenet", + include_top = FALSE) + + +# get the symbolic outputs of each "key" layer (we gave them unique names). +layer_dict <- model$layers +names(layer_dict) <- map_chr(layer_dict ,~.x$name) + +# define the loss +loss <- tf$Variable(0.0) +for(layer_name in names(settings$features)){ + # add the L2 norm of the features of a layer to the loss + coeff <- settings$features[[layer_name]] + x <- layer_dict[[layer_name]]$output + out_shape <- layer_dict[[layer_name]]$output_shape %>% unlist() + # we avoid border artifacts by only involving non-border pixels in the loss + loss <- loss - + coeff*K$sum(K$square(x[,3:(out_shape[2] - 2), 3:(out_shape[3] - 2),])) / + prod(out_shape[-1]) +} + +# add continuity loss (gives image local coherence, can result in an artful blur) +loss <- loss + settings$continuity* + total_variation_loss(x = dream, img_height, img_width)/ + prod(img_size) +# add image L2 norm to loss (prevents pixels from taking very high values, makes image darker) +loss <- loss + settings$dream_l2*K$sum(K$square(dream))/prod(img_size) + +# feel free to further modify the loss as you see fit, to achieve new effects... + +# compute the gradients of the dream wrt the loss +grads <- K$gradients(loss, dream)[[1]] + +f_outputs <- K$`function`(list(dream), list(loss,grads)) + +eval_loss_and_grads <- function(image){ + dim(image) <- c(1, img_size) + outs <- f_outputs(list(image)) + list( + loss_value = outs[[1]], + grad_values = as.numeric(outs[[2]]) + ) +} + +# Loss and gradients evaluator. +# +# This Evaluator class makes it possible +# to compute loss and gradients in one pass +# while retrieving them via two separate functions, +# "loss" and "grads". This is done because scipy.optimize +# requires separate functions for loss and gradients, +# but computing them separately would be inefficient. +Evaluator <- R6Class( + "Evaluator", + public = list( + + loss_value = NULL, + grad_values = NULL, + + initialize = function() { + self$loss_value <- NULL + self$grad_values <- NULL + }, + + loss = function(x){ + loss_and_grad <- eval_loss_and_grads(x) + self$loss_value <- loss_and_grad$loss_value + self$grad_values <- loss_and_grad$grad_values + self$loss_value + }, + + grads = function(x){ + grad_values <- self$grad_values + self$loss_value <- NULL + self$grad_values <- NULL + grad_values + } + + ) +) + +evaluator <- Evaluator$new() + +# Run optimization (L-BFGS) over the pixels of the generated image +# so as to minimize the loss +for(i in 1:5){ + + # add random jitter to initial image + random_jitter <- settings$jitter*2*(runif(prod(img_size)) - 0.5) %>% + array(dim = c(1, img_size)) + image <- image + random_jitter + + # Run L-BFGS + opt <- optim( + as.numeric(image), fn = evaluator$loss, gr = evaluator$grads, + method = "L-BFGS-B", + control = list(maxit = 2) + ) + + # Print loss value + print(opt$value) + + # decode the image + image <- opt$par + dim(image) <- c(1, img_size) + image <- image - random_jitter + + # plot + im <- deprocess_image(image) + plot(as.raster(im)) + +} + + + diff --git a/website/articles/examples/deep_dream.html b/website/articles/examples/deep_dream.html new file mode 100644 index 000000000..198ff4c44 --- /dev/null +++ b/website/articles/examples/deep_dream.html @@ -0,0 +1,334 @@ + + + + + + + +deep_dream • keras + + + + + + + +
+
+ + + +
+
+ + + + +
+ +

Deep Dreaming in Keras.

+

It is preferable to run this script on GPU, for speed.

+

Example results: http://i.imgur.com/FX6ROg9.jpg

+
library(keras)
+library(tensorflow)
+library(purrr)
+library(R6)
+K <- backend()
+
+# Function Definitions ----------------------------------------------------
+
+preprocess_image <- function(image_path, height, width){
+  image_load(image_path, target_size = c(height, width)) %>%
+    image_to_array() %>%
+    array(dim = c(1, dim(.))) %>%
+    imagenet_preprocess_input()
+}
+
+deprocess_image <- function(x){
+  x <- x[1,,,]
+  # Remove zero-center by mean pixel
+  x[,,1] <- x[,,1] + 103.939
+  x[,,2] <- x[,,2] + 116.779
+  x[,,3] <- x[,,3] + 123.68
+  # 'BGR'->'RGB'
+  x <- x[,,c(3,2,1)]
+  # clip to interval 0, 255
+  x[x > 255] <- 255
+  x[x < 0] <- 0
+  x[] <- as.integer(x)/255
+  x
+}
+
+# calculates the total variation loss
+# https://en.wikipedia.org/wiki/Total_variation_denoising
+total_variation_loss <- function(x, h, w){
+  
+  y_ij  <- x[,0:(h - 2L), 0:(w - 2L),]
+  y_i1j <- x[,1:(h - 1L), 0:(w - 2L),]
+  y_ij1 <- x[,0:(h - 2L), 1:(w - 1L),]
+  
+  a <- K$square(y_ij - y_i1j)
+  b <- K$square(y_ij - y_ij1)
+  K$sum(K$pow(a + b, 1.25))
+}
+
+
+# Parameters --------------------------------------------------------
+
+# some settings we found interesting
+saved_settings = list(
+  bad_trip = list(
+    features = list(
+      block4_conv1 = 0.05,
+      block4_conv2 = 0.01,
+      block4_conv3 = 0.01
+    ),
+    continuity = 0.1,
+    dream_l2 = 0.8,
+    jitter =  5
+  ),
+  dreamy = list(
+    features = list(
+      block5_conv1 = 0.05,
+      block5_conv2 = 0.02
+    ),
+    continuity = 0.1,
+    dream_l2 = 0.02,
+    jitter = 0
+  )
+)
+
+# the settings we will use in this experiment
+img_height <- 600L
+img_width <- 600L
+img_size <- c(img_height, img_width, 3)
+settings <- saved_settings$dreamy
+image <- preprocess_image("deep_dream.jpg", img_height, img_width)
+
+# Model definition --------------------------------------------------------
+
+# this will contain our generated image
+dream <- layer_input(batch_shape = c(1, img_size))
+
+# build the VGG16 network with our placeholder
+# the model will be loaded with pre-trained ImageNet weights
+model <- application_vgg16(input_tensor = dream, weights = "imagenet",
+                           include_top = FALSE)
+
+
+# get the symbolic outputs of each "key" layer (we gave them unique names).
+layer_dict <- model$layers
+names(layer_dict) <- map_chr(layer_dict ,~.x$name)
+
+# define the loss
+loss <- tf$Variable(0.0)
+for(layer_name in names(settings$features)){
+  # add the L2 norm of the features of a layer to the loss
+  coeff <- settings$features[[layer_name]]
+  x <- layer_dict[[layer_name]]$output
+  out_shape <- layer_dict[[layer_name]]$output_shape %>% unlist()
+  # we avoid border artifacts by only involving non-border pixels in the loss
+  loss <- loss - 
+    coeff*K$sum(K$square(x[,3:(out_shape[2] - 2), 3:(out_shape[3] - 2),])) / 
+    prod(out_shape[-1])
+}
+
+# add continuity loss (gives image local coherence, can result in an artful blur)
+loss <- loss + settings$continuity*
+  total_variation_loss(x = dream, img_height, img_width)/
+  prod(img_size)
+# add image L2 norm to loss (prevents pixels from taking very high values, makes image darker)
+loss <- loss + settings$dream_l2*K$sum(K$square(dream))/prod(img_size)
+
+# feel free to further modify the loss as you see fit, to achieve new effects...
+
+# compute the gradients of the dream wrt the loss
+grads <- K$gradients(loss, dream)[[1]] 
+
+f_outputs <- K$`function`(list(dream), list(loss,grads))
+
+eval_loss_and_grads <- function(image){
+  dim(image) <- c(1, img_size)
+  outs <- f_outputs(list(image))
+  list(
+    loss_value = outs[[1]],
+    grad_values = as.numeric(outs[[2]])
+  )
+}
+
+# Loss and gradients evaluator.
+# 
+# This Evaluator class makes it possible
+# to compute loss and gradients in one pass
+# while retrieving them via two separate functions,
+# "loss" and "grads". This is done because scipy.optimize
+# requires separate functions for loss and gradients,
+# but computing them separately would be inefficient.
+Evaluator <- R6Class(
+  "Evaluator",
+  public = list(
+    
+    loss_value = NULL,
+    grad_values = NULL,
+    
+    initialize = function() {
+      self$loss_value <- NULL
+      self$grad_values <- NULL
+    },
+    
+    loss = function(x){
+      loss_and_grad <- eval_loss_and_grads(x)
+      self$loss_value <- loss_and_grad$loss_value
+      self$grad_values <- loss_and_grad$grad_values
+      self$loss_value
+    },
+    
+    grads = function(x){
+      grad_values <- self$grad_values
+      self$loss_value <- NULL
+      self$grad_values <- NULL
+      grad_values
+    }
+      
+  )
+)
+
+evaluator <- Evaluator$new()
+
+# Run optimization (L-BFGS) over the pixels of the generated image
+# so as to minimize the loss
+for(i in 1:5){
+  
+  # add random jitter to initial image
+  random_jitter <- settings$jitter*2*(runif(prod(img_size)) - 0.5) %>%
+    array(dim = c(1, img_size))
+  image <- image + random_jitter
+
+  # Run L-BFGS
+  opt <- optim(
+    as.numeric(image), fn = evaluator$loss, gr = evaluator$grads, 
+    method = "L-BFGS-B",
+    control = list(maxit = 2)
+    )
+  
+  # Print loss value
+  print(opt$value)
+  
+  # decode the image
+  image <- opt$par
+  dim(image) <- c(1, img_size)
+  image <- image - random_jitter
+
+  # plot
+  im <- deprocess_image(image)
+  plot(as.raster(im))
+  
+}
+
+
+ + + +
+ + +
+ +
+

Site built with pkgdown.

+
+ +
+
+ + + diff --git a/website/articles/examples/deep_dream.jpg b/website/articles/examples/deep_dream.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0f39f13f09db6dafbcd7940a8d6965689eeee2fb GIT binary patch literal 107261 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%0Ag~GTW$+mQmF4kMsCfj(*9GN5Tz4CT*e{={{mO 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 V1_9t#ol_B3thIJVZXC+&|Jkbg3g7?$ literal 0 HcmV?d00001 diff --git a/website/articles/examples/image_ocr.R b/website/articles/examples/image_ocr.R new file mode 100644 index 000000000..0ab13681d --- /dev/null +++ b/website/articles/examples/image_ocr.R @@ -0,0 +1 @@ +library(keras) diff --git a/website/articles/examples/image_ocr.html b/website/articles/examples/image_ocr.html new file mode 100644 index 000000000..9bd76ccb3 --- /dev/null +++ b/website/articles/examples/image_ocr.html @@ -0,0 +1,137 @@ + + + + + + + +image_ocr • keras + + + + + + + +
+
+ + + +
+
+ + + + + +
+ + + +
+ + +
+ +
+

Site built with pkgdown.

+
+ +
+
+ + + diff --git a/website/articles/examples/image_ocr.py b/website/articles/examples/image_ocr.py new file mode 100755 index 000000000..04d13ee14 --- /dev/null +++ b/website/articles/examples/image_ocr.py @@ -0,0 +1,491 @@ +'''This example uses a convolutional stack followed by a recurrent stack +and a CTC logloss function to perform optical character recognition +of generated text images. I have no evidence of whether it actually +learns general shapes of text, or just is able to recognize all +the different fonts thrown at it...the purpose is more to demonstrate CTC +inside of Keras. Note that the font list may need to be updated +for the particular OS in use. + +This starts off with 4 letter words. For the first 12 epochs, the +difficulty is gradually increased using the TextImageGenerator class +which is both a generator class for test/train data and a Keras +callback class. After 20 epochs, longer sequences are thrown at it +by recompiling the model to handle a wider image and rebuilding +the word list to include two words separated by a space. + +The table below shows normalized edit distance values. Theano uses +a slightly different CTC implementation, hence the different results. + + Norm. ED +Epoch | TF | TH +------------------------ + 10 0.027 0.064 + 15 0.038 0.035 + 20 0.043 0.045 + 25 0.014 0.019 + +This requires cairo and editdistance packages: +pip install cairocffi +pip install editdistance + +Created by Mike Henry +https://github.com/mbhenry/ +''' +import os +import itertools +import re +import datetime +import cairocffi as cairo +import editdistance +import numpy as np +from scipy import ndimage +import pylab +from keras import backend as K +from keras.layers.convolutional import Conv2D, MaxPooling2D +from keras.layers import Input, Dense, Activation +from keras.layers import Reshape, Lambda +from keras.layers.merge import add, concatenate +from keras.models import Model +from keras.layers.recurrent import GRU +from keras.optimizers import SGD +from keras.utils.data_utils import get_file +from keras.preprocessing import image +import keras.callbacks + + +OUTPUT_DIR = 'image_ocr' + +np.random.seed(55) + + +# this creates larger "blotches" of noise which look +# more realistic than just adding gaussian noise +# assumes greyscale with pixels ranging from 0 to 1 + +def speckle(img): + severity = np.random.uniform(0, 0.6) + blur = ndimage.gaussian_filter(np.random.randn(*img.shape) * severity, 1) + img_speck = (img + blur) + img_speck[img_speck > 1] = 1 + img_speck[img_speck <= 0] = 0 + return img_speck + + +# paints the string in a random location the bounding box +# also uses a random font, a slight random rotation, +# and a random amount of speckle noise + +def paint_text(text, w, h, rotate=False, ud=False, multi_fonts=False): + surface = cairo.ImageSurface(cairo.FORMAT_RGB24, w, h) + with cairo.Context(surface) as context: + context.set_source_rgb(1, 1, 1) # White + context.paint() + # this font list works in Centos 7 + if multi_fonts: + fonts = ['Century Schoolbook', 'Courier', 'STIX', 'URW Chancery L', 'FreeMono'] + context.select_font_face(np.random.choice(fonts), cairo.FONT_SLANT_NORMAL, + np.random.choice([cairo.FONT_WEIGHT_BOLD, cairo.FONT_WEIGHT_NORMAL])) + else: + context.select_font_face('Courier', cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_BOLD) + context.set_font_size(25) + box = context.text_extents(text) + border_w_h = (4, 4) + if box[2] > (w - 2 * border_w_h[1]) or box[3] > (h - 2 * border_w_h[0]): + raise IOError('Could not fit string into image. Max char count is too large for given image width.') + + # teach the RNN translational invariance by + # fitting text box randomly on canvas, with some room to rotate + max_shift_x = w - box[2] - border_w_h[0] + max_shift_y = h - box[3] - border_w_h[1] + top_left_x = np.random.randint(0, int(max_shift_x)) + if ud: + top_left_y = np.random.randint(0, int(max_shift_y)) + else: + top_left_y = h // 2 + context.move_to(top_left_x - int(box[0]), top_left_y - int(box[1])) + context.set_source_rgb(0, 0, 0) + context.show_text(text) + + buf = surface.get_data() + a = np.frombuffer(buf, np.uint8) + a.shape = (h, w, 4) + a = a[:, :, 0] # grab single channel + a = a.astype(np.float32) / 255 + a = np.expand_dims(a, 0) + if rotate: + a = image.random_rotation(a, 3 * (w - top_left_x) / w + 1) + a = speckle(a) + + return a + + +def shuffle_mats_or_lists(matrix_list, stop_ind=None): + ret = [] + assert all([len(i) == len(matrix_list[0]) for i in matrix_list]) + len_val = len(matrix_list[0]) + if stop_ind is None: + stop_ind = len_val + assert stop_ind <= len_val + + a = list(range(stop_ind)) + np.random.shuffle(a) + a += list(range(stop_ind, len_val)) + for mat in matrix_list: + if isinstance(mat, np.ndarray): + ret.append(mat[a]) + elif isinstance(mat, list): + ret.append([mat[i] for i in a]) + else: + raise TypeError('shuffle_mats_or_lists only supports ' + 'numpy.array and list objects') + return ret + + +def text_to_labels(text, num_classes): + ret = [] + for char in text: + if char >= 'a' and char <= 'z': + ret.append(ord(char) - ord('a')) + elif char == ' ': + ret.append(26) + return ret + + +# only a-z and space..probably not to difficult +# to expand to uppercase and symbols + +def is_valid_str(in_str): + search = re.compile(r'[^a-z\ ]').search + return not bool(search(in_str)) + + +# Uses generator functions to supply train/test with +# data. Image renderings are text are created on the fly +# each time with random perturbations + +class TextImageGenerator(keras.callbacks.Callback): + + def __init__(self, monogram_file, bigram_file, minibatch_size, + img_w, img_h, downsample_factor, val_split, + absolute_max_string_len=16): + + self.minibatch_size = minibatch_size + self.img_w = img_w + self.img_h = img_h + self.monogram_file = monogram_file + self.bigram_file = bigram_file + self.downsample_factor = downsample_factor + self.val_split = val_split + self.blank_label = self.get_output_size() - 1 + self.absolute_max_string_len = absolute_max_string_len + + def get_output_size(self): + return 28 + + # num_words can be independent of the epoch size due to the use of generators + # as max_string_len grows, num_words can grow + def build_word_list(self, num_words, max_string_len=None, mono_fraction=0.5): + assert max_string_len <= self.absolute_max_string_len + assert num_words % self.minibatch_size == 0 + assert (self.val_split * num_words) % self.minibatch_size == 0 + self.num_words = num_words + self.string_list = [''] * self.num_words + tmp_string_list = [] + self.max_string_len = max_string_len + self.Y_data = np.ones([self.num_words, self.absolute_max_string_len]) * -1 + self.X_text = [] + self.Y_len = [0] * self.num_words + + # monogram file is sorted by frequency in english speech + with open(self.monogram_file, 'rt') as f: + for line in f: + if len(tmp_string_list) == int(self.num_words * mono_fraction): + break + word = line.rstrip() + if max_string_len == -1 or max_string_len is None or len(word) <= max_string_len: + tmp_string_list.append(word) + + # bigram file contains common word pairings in english speech + with open(self.bigram_file, 'rt') as f: + lines = f.readlines() + for line in lines: + if len(tmp_string_list) == self.num_words: + break + columns = line.lower().split() + word = columns[0] + ' ' + columns[1] + if is_valid_str(word) and \ + (max_string_len == -1 or max_string_len is None or len(word) <= max_string_len): + tmp_string_list.append(word) + if len(tmp_string_list) != self.num_words: + raise IOError('Could not pull enough words from supplied monogram and bigram files. ') + # interlace to mix up the easy and hard words + self.string_list[::2] = tmp_string_list[:self.num_words // 2] + self.string_list[1::2] = tmp_string_list[self.num_words // 2:] + + for i, word in enumerate(self.string_list): + self.Y_len[i] = len(word) + self.Y_data[i, 0:len(word)] = text_to_labels(word, self.get_output_size()) + self.X_text.append(word) + self.Y_len = np.expand_dims(np.array(self.Y_len), 1) + + self.cur_val_index = self.val_split + self.cur_train_index = 0 + + # each time an image is requested from train/val/test, a new random + # painting of the text is performed + def get_batch(self, index, size, train): + # width and height are backwards from typical Keras convention + # because width is the time dimension when it gets fed into the RNN + if K.image_data_format() == 'channels_first': + X_data = np.ones([size, 1, self.img_w, self.img_h]) + else: + X_data = np.ones([size, self.img_w, self.img_h, 1]) + + labels = np.ones([size, self.absolute_max_string_len]) + input_length = np.zeros([size, 1]) + label_length = np.zeros([size, 1]) + source_str = [] + for i in range(0, size): + # Mix in some blank inputs. This seems to be important for + # achieving translational invariance + if train and i > size - 4: + if K.image_data_format() == 'channels_first': + X_data[i, 0, 0:self.img_w, :] = self.paint_func('')[0, :, :].T + else: + X_data[i, 0:self.img_w, :, 0] = self.paint_func('',)[0, :, :].T + labels[i, 0] = self.blank_label + input_length[i] = self.img_w // self.downsample_factor - 2 + label_length[i] = 1 + source_str.append('') + else: + if K.image_data_format() == 'channels_first': + X_data[i, 0, 0:self.img_w, :] = self.paint_func(self.X_text[index + i])[0, :, :].T + else: + X_data[i, 0:self.img_w, :, 0] = self.paint_func(self.X_text[index + i])[0, :, :].T + labels[i, :] = self.Y_data[index + i] + input_length[i] = self.img_w // self.downsample_factor - 2 + label_length[i] = self.Y_len[index + i] + source_str.append(self.X_text[index + i]) + inputs = {'the_input': X_data, + 'the_labels': labels, + 'input_length': input_length, + 'label_length': label_length, + 'source_str': source_str # used for visualization only + } + outputs = {'ctc': np.zeros([size])} # dummy data for dummy loss function + return (inputs, outputs) + + def next_train(self): + while 1: + ret = self.get_batch(self.cur_train_index, self.minibatch_size, train=True) + self.cur_train_index += self.minibatch_size + if self.cur_train_index >= self.val_split: + self.cur_train_index = self.cur_train_index % 32 + (self.X_text, self.Y_data, self.Y_len) = shuffle_mats_or_lists( + [self.X_text, self.Y_data, self.Y_len], self.val_split) + yield ret + + def next_val(self): + while 1: + ret = self.get_batch(self.cur_val_index, self.minibatch_size, train=False) + self.cur_val_index += self.minibatch_size + if self.cur_val_index >= self.num_words: + self.cur_val_index = self.val_split + self.cur_val_index % 32 + yield ret + + def on_train_begin(self, logs={}): + self.build_word_list(16000, 4, 1) + self.paint_func = lambda text: paint_text(text, self.img_w, self.img_h, + rotate=False, ud=False, multi_fonts=False) + + def on_epoch_begin(self, epoch, logs={}): + # rebind the paint function to implement curriculum learning + if epoch >= 3 and epoch < 6: + self.paint_func = lambda text: paint_text(text, self.img_w, self.img_h, + rotate=False, ud=True, multi_fonts=False) + elif epoch >= 6 and epoch < 9: + self.paint_func = lambda text: paint_text(text, self.img_w, self.img_h, + rotate=False, ud=True, multi_fonts=True) + elif epoch >= 9: + self.paint_func = lambda text: paint_text(text, self.img_w, self.img_h, + rotate=True, ud=True, multi_fonts=True) + if epoch >= 21 and self.max_string_len < 12: + self.build_word_list(32000, 12, 0.5) + + +# the actual loss calc occurs here despite it not being +# an internal Keras loss function + +def ctc_lambda_func(args): + y_pred, labels, input_length, label_length = args + # the 2 is critical here since the first couple outputs of the RNN + # tend to be garbage: + y_pred = y_pred[:, 2:, :] + return K.ctc_batch_cost(labels, y_pred, input_length, label_length) + + +# For a real OCR application, this should be beam search with a dictionary +# and language model. For this example, best path is sufficient. + +def decode_batch(test_func, word_batch): + out = test_func([word_batch])[0] + ret = [] + for j in range(out.shape[0]): + out_best = list(np.argmax(out[j, 2:], 1)) + out_best = [k for k, g in itertools.groupby(out_best)] + # 26 is space, 27 is CTC blank char + outstr = '' + for c in out_best: + if c >= 0 and c < 26: + outstr += chr(c + ord('a')) + elif c == 26: + outstr += ' ' + ret.append(outstr) + return ret + + +class VizCallback(keras.callbacks.Callback): + + def __init__(self, run_name, test_func, text_img_gen, num_display_words=6): + self.test_func = test_func + self.output_dir = os.path.join( + OUTPUT_DIR, run_name) + self.text_img_gen = text_img_gen + self.num_display_words = num_display_words + if not os.path.exists(self.output_dir): + os.makedirs(self.output_dir) + + def show_edit_distance(self, num): + num_left = num + mean_norm_ed = 0.0 + mean_ed = 0.0 + while num_left > 0: + word_batch = next(self.text_img_gen)[0] + num_proc = min(word_batch['the_input'].shape[0], num_left) + decoded_res = decode_batch(self.test_func, word_batch['the_input'][0:num_proc]) + for j in range(0, num_proc): + edit_dist = editdistance.eval(decoded_res[j], word_batch['source_str'][j]) + mean_ed += float(edit_dist) + mean_norm_ed += float(edit_dist) / len(word_batch['source_str'][j]) + num_left -= num_proc + mean_norm_ed = mean_norm_ed / num + mean_ed = mean_ed / num + print('\nOut of %d samples: Mean edit distance: %.3f Mean normalized edit distance: %0.3f' + % (num, mean_ed, mean_norm_ed)) + + def on_epoch_end(self, epoch, logs={}): + self.model.save_weights(os.path.join(self.output_dir, 'weights%02d.h5' % (epoch))) + self.show_edit_distance(256) + word_batch = next(self.text_img_gen)[0] + res = decode_batch(self.test_func, word_batch['the_input'][0:self.num_display_words]) + if word_batch['the_input'][0].shape[0] < 256: + cols = 2 + else: + cols = 1 + for i in range(self.num_display_words): + pylab.subplot(self.num_display_words // cols, cols, i + 1) + if K.image_data_format() == 'channels_first': + the_input = word_batch['the_input'][i, 0, :, :] + else: + the_input = word_batch['the_input'][i, :, :, 0] + pylab.imshow(the_input.T, cmap='Greys_r') + pylab.xlabel('Truth = \'%s\'\nDecoded = \'%s\'' % (word_batch['source_str'][i], res[i])) + fig = pylab.gcf() + fig.set_size_inches(10, 13) + pylab.savefig(os.path.join(self.output_dir, 'e%02d.png' % (epoch))) + pylab.close() + + +def train(run_name, start_epoch, stop_epoch, img_w): + # Input Parameters + img_h = 64 + words_per_epoch = 16000 + val_split = 0.2 + val_words = int(words_per_epoch * (val_split)) + + # Network parameters + conv_filters = 16 + kernel_size = (3, 3) + pool_size = 2 + time_dense_size = 32 + rnn_size = 512 + + if K.image_data_format() == 'channels_first': + input_shape = (1, img_w, img_h) + else: + input_shape = (img_w, img_h, 1) + + fdir = os.path.dirname(get_file('wordlists.tgz', + origin='http://www.mythic-ai.com/datasets/wordlists.tgz', untar=True)) + + img_gen = TextImageGenerator(monogram_file=os.path.join(fdir, 'wordlist_mono_clean.txt'), + bigram_file=os.path.join(fdir, 'wordlist_bi_clean.txt'), + minibatch_size=32, + img_w=img_w, + img_h=img_h, + downsample_factor=(pool_size ** 2), + val_split=words_per_epoch - val_words + ) + act = 'relu' + input_data = Input(name='the_input', shape=input_shape, dtype='float32') + inner = Conv2D(conv_filters, kernel_size, padding='same', + activation=act, kernel_initializer='he_normal', + name='conv1')(input_data) + inner = MaxPooling2D(pool_size=(pool_size, pool_size), name='max1')(inner) + inner = Conv2D(conv_filters, kernel_size, padding='same', + activation=act, kernel_initializer='he_normal', + name='conv2')(inner) + inner = MaxPooling2D(pool_size=(pool_size, pool_size), name='max2')(inner) + + conv_to_rnn_dims = (img_w // (pool_size ** 2), (img_h // (pool_size ** 2)) * conv_filters) + inner = Reshape(target_shape=conv_to_rnn_dims, name='reshape')(inner) + + # cuts down input size going into RNN: + inner = Dense(time_dense_size, activation=act, name='dense1')(inner) + + # Two layers of bidirecitonal GRUs + # GRU seems to work as well, if not better than LSTM: + gru_1 = GRU(rnn_size, return_sequences=True, kernel_initializer='he_normal', name='gru1')(inner) + gru_1b = GRU(rnn_size, return_sequences=True, go_backwards=True, kernel_initializer='he_normal', name='gru1_b')(inner) + gru1_merged = add([gru_1, gru_1b]) + gru_2 = GRU(rnn_size, return_sequences=True, kernel_initializer='he_normal', name='gru2')(gru1_merged) + gru_2b = GRU(rnn_size, return_sequences=True, go_backwards=True, kernel_initializer='he_normal', name='gru2_b')(gru1_merged) + + # transforms RNN output to character activations: + inner = Dense(img_gen.get_output_size(), kernel_initializer='he_normal', + name='dense2')(concatenate([gru_2, gru_2b])) + y_pred = Activation('softmax', name='softmax')(inner) + Model(inputs=input_data, outputs=y_pred).summary() + + labels = Input(name='the_labels', shape=[img_gen.absolute_max_string_len], dtype='float32') + input_length = Input(name='input_length', shape=[1], dtype='int64') + label_length = Input(name='label_length', shape=[1], dtype='int64') + # Keras doesn't currently support loss funcs with extra parameters + # so CTC loss is implemented in a lambda layer + loss_out = Lambda(ctc_lambda_func, output_shape=(1,), name='ctc')([y_pred, labels, input_length, label_length]) + + # clipnorm seems to speeds up convergence + sgd = SGD(lr=0.02, decay=1e-6, momentum=0.9, nesterov=True, clipnorm=5) + + model = Model(inputs=[input_data, labels, input_length, label_length], outputs=loss_out) + + # the loss calc occurs elsewhere, so use a dummy lambda func for the loss + model.compile(loss={'ctc': lambda y_true, y_pred: y_pred}, optimizer=sgd) + if start_epoch > 0: + weight_file = os.path.join(OUTPUT_DIR, os.path.join(run_name, 'weights%02d.h5' % (start_epoch - 1))) + model.load_weights(weight_file) + # captures output of softmax so we can decode the output during visualization + test_func = K.function([input_data], [y_pred]) + + viz_cb = VizCallback(run_name, test_func, img_gen.next_val()) + + model.fit_generator(generator=img_gen.next_train(), steps_per_epoch=(words_per_epoch - val_words), + epochs=stop_epoch, validation_data=img_gen.next_val(), validation_steps=val_words, + callbacks=[viz_cb, img_gen], initial_epoch=start_epoch) + + +if __name__ == '__main__': + run_name = datetime.datetime.now().strftime('%Y:%m:%d:%H:%M:%S') + train(run_name, 0, 20, 128) + # increase to wider images and start at epoch 20. The learned weights are reloaded + train(run_name, 20, 25, 512) diff --git a/website/articles/examples/imdb_bidirectional_lstm.R b/website/articles/examples/imdb_bidirectional_lstm.R new file mode 100644 index 000000000..9090eff45 --- /dev/null +++ b/website/articles/examples/imdb_bidirectional_lstm.R @@ -0,0 +1,54 @@ +#' Train a Bidirectional LSTM on the IMDB sentiment classification task. +#' +#' Output after 4 epochs on CPU: ~0.8146 +#' Time per epoch on CPU (Core i7): ~150s. + +library(keras) + +max_features <- 20000 + +# cut texts after this number of words +# (among top max_features most common words) +maxlen <- 100 + +batch_size <- 32 + +cat('Loading data...\n') +imdb <- dataset_imdb(num_words = max_features) +x_train <- imdb$train$x +y_train <- imdb$train$y +x_test <- imdb$test$x +y_test <- imdb$test$y + +cat(length(x_train), 'train sequences\n') +cat(length(x_test), 'test sequences\n') + +cat('Pad sequences (samples x time)\n') +x_train <- pad_sequences(x_train, maxlen = maxlen) +x_test <- pad_sequences(x_test, maxlen = maxlen) +cat('x_train shape:', dim(x_train), '\n') +cat('x_test shape:', dim(x_test), '\n') + +model <- keras_model_sequential() +model %>% + layer_embedding(input_dim = max_features, output_dim = 128, input_length = maxlen) %>% + bidirectional(layer_lstm(units = 64)) %>% + layer_dropout(rate = 0.5) %>% + layer_dense(units = 1, activation = 'sigmoid') + +# try using different optimizers and different optimizer configs +model %>% compile( + loss = 'binary_crossentropy', + optimizer = 'adam', + metrics = c('accuracy') +) + +cat('Train...\n') +model %>% fit( + x_train, y_train, + batch_size = batch_size, + epochs = 4, + validation_data = list(x_test, y_test) +) + + diff --git a/website/articles/examples/imdb_bidirectional_lstm.html b/website/articles/examples/imdb_bidirectional_lstm.html new file mode 100644 index 000000000..72ed07963 --- /dev/null +++ b/website/articles/examples/imdb_bidirectional_lstm.html @@ -0,0 +1,185 @@ + + + + + + + +imdb_bidirectional_lstm • keras + + + + + + + +
+
+ + + +
+
+ + + + +
+ +

Train a Bidirectional LSTM on the IMDB sentiment classification task.

+

Output after 4 epochs on CPU: ~0.8146 Time per epoch on CPU (Core i7): ~150s.

+
library(keras)
+
+max_features <- 20000
+
+# cut texts after this number of words
+# (among top max_features most common words)
+maxlen <- 100
+
+batch_size <- 32
+
+cat('Loading data...\n')
+imdb <- dataset_imdb(num_words = max_features)
+x_train <- imdb$train$x
+y_train <- imdb$train$y
+x_test <- imdb$test$x
+y_test <- imdb$test$y
+
+cat(length(x_train), 'train sequences\n')
+cat(length(x_test), 'test sequences\n')
+
+cat('Pad sequences (samples x time)\n')
+x_train <- pad_sequences(x_train, maxlen = maxlen)
+x_test <- pad_sequences(x_test, maxlen = maxlen)
+cat('x_train shape:', dim(x_train), '\n')
+cat('x_test shape:', dim(x_test), '\n')
+
+model <- keras_model_sequential()
+model %>%
+  layer_embedding(input_dim = max_features, output_dim = 128, input_length = maxlen) %>% 
+  bidirectional(layer_lstm(units = 64)) %>% 
+  layer_dropout(rate = 0.5) %>% 
+  layer_dense(units = 1, activation = 'sigmoid')
+
+# try using different optimizers and different optimizer configs
+model %>% compile(
+  loss = 'binary_crossentropy',
+  optimizer = 'adam',
+  metrics = c('accuracy')
+)
+
+cat('Train...\n')
+model %>% fit(
+  x_train, y_train,
+  batch_size = batch_size,
+  epochs = 4,
+  validation_data = list(x_test, y_test)
+)
+
+
+ + + +
+ + +
+ +
+

Site built with pkgdown.

+
+ +
+
+ + + diff --git a/website/articles/examples/imdb_cnn.R b/website/articles/examples/imdb_cnn.R new file mode 100644 index 000000000..81984f976 --- /dev/null +++ b/website/articles/examples/imdb_cnn.R @@ -0,0 +1,93 @@ +#' This example demonstrates the use of Convolution1D for text classification. +#' +#' Gets to 0.89 test accuracy after 2 epochs. +#' 90s/epoch on Intel i5 2.4Ghz CPU. +#' 10s/epoch on Tesla K40 GPU. +#' + +library(keras) + +# set parameters: +max_features <- 5000 +maxlen <- 400 +batch_size <- 32 +embedding_dims <- 50 +filters <- 250 +kernel_size <- 3 +hidden_dims <- 250 +epochs <- 2 + + +# Data Preparation -------------------------------------------------------- + +# Keras load all data into a list with the following structure: +# List of 2 +# $ train:List of 2 +# ..$ x:List of 25000 +# .. .. [list output truncated] +# .. ..- attr(*, "dim")= int 25000 +# ..$ y: num [1:25000(1d)] 1 0 0 1 0 0 1 0 1 0 ... +# $ test :List of 2 +# ..$ x:List of 25000 +# .. .. [list output truncated] +# .. ..- attr(*, "dim")= int 25000 +# ..$ y: num [1:25000(1d)] 1 1 1 1 1 0 0 0 1 1 ... +# +# The x data includes integer sequences, each integer is a word. +# The y data includes a set of integer labels (0 or 1). +# The num_words argument indicates that only the max_fetures most frequent +# words will be integerized. All other will be ignored. +# See help(dataset_imdb) +imdb <- dataset_imdb(num_words = max_features) + +# pad the sequences, so they have all the same lenght +# this will conver our dataset into a matrix: each line is a review +# and each column a word on the sequence. +# we pad the sequences with 0 to the left. +x_train <- imdb$train$x %>% + pad_sequences(maxlen = maxlen) + +x_test <- imdb$test$x %>% + pad_sequences(maxlen = maxlen) + +# Defining the model ------------------------------------------------------ + +model <- keras_model_sequential() + +model %>% + # we start off with an efficient embedding layer which maps + # our vocab indices into embedding_dims dimensions + layer_embedding(max_features, embedding_dims, input_length = maxlen) %>% + layer_dropout(0.2) %>% + # we add a Convolution1D, which will learn filters + # word group filters of size filter_length: + layer_conv_1d( + filters, kernel_size, + padding = "valid", activation = "relu", strides = 1 + ) %>% + # we use max pooling: + layer_global_max_pooling_1d() %>% + # We add a vanilla hidden layer: + layer_dense(hidden_dims) %>% + layer_dropout(0.2) %>% + layer_activation("relu") %>% + # We project onto a single unit output layer, and squash it with a sigmoid: + layer_dense(1) %>% + layer_activation("sigmoid") + + +model %>% compile( + loss = "binary_crossentropy", + optimizer = "adam", + metrics = "accuracy" +) + +# Training ---------------------------------------------------------------- + +model %>% + fit( + x_train, imdb$train$y, + batch_size = batch_size, + epochs = epochs, + validation_data = list(x_test, imdb$test$y) + ) diff --git a/website/articles/examples/imdb_cnn.html b/website/articles/examples/imdb_cnn.html new file mode 100644 index 000000000..a7bf34ab4 --- /dev/null +++ b/website/articles/examples/imdb_cnn.html @@ -0,0 +1,224 @@ + + + + + + + +imdb_cnn • keras + + + + + + + +
+
+ + + +
+
+ + + + +
+ +

This example demonstrates the use of Convolution1D for text classification.

+

Gets to 0.89 test accuracy after 2 epochs. 90s/epoch on Intel i5 2.4Ghz CPU. 10s/epoch on Tesla K40 GPU.

+
library(keras)
+
+# set parameters:
+max_features <- 5000
+maxlen <- 400
+batch_size <- 32
+embedding_dims <- 50
+filters <- 250
+kernel_size <- 3
+hidden_dims <- 250
+epochs <- 2
+
+
+# Data Preparation --------------------------------------------------------
+
+# Keras load all data into a list with the following structure:
+# List of 2
+# $ train:List of 2
+# ..$ x:List of 25000
+# .. .. [list output truncated]
+# .. ..- attr(*, "dim")= int 25000
+# ..$ y: num [1:25000(1d)] 1 0 0 1 0 0 1 0 1 0 ...
+# $ test :List of 2
+# ..$ x:List of 25000
+# .. .. [list output truncated]
+# .. ..- attr(*, "dim")= int 25000
+# ..$ y: num [1:25000(1d)] 1 1 1 1 1 0 0 0 1 1 ...
+#
+# The x data includes integer sequences, each integer is a word.
+# The y data includes a set of integer labels (0 or 1).
+# The num_words argument indicates that only the max_fetures most frequent
+# words will be integerized. All other will be ignored.
+# See help(dataset_imdb)
+imdb <- dataset_imdb(num_words = max_features)
+
+# pad the sequences, so they have all the same lenght
+# this will conver our dataset into a matrix: each line is a review
+# and each column a word on the sequence. 
+# we pad the sequences with 0 to the left.
+x_train <- imdb$train$x %>%
+  pad_sequences(maxlen = maxlen)
+
+x_test <- imdb$test$x %>%
+  pad_sequences(maxlen = maxlen)
+
+# Defining the model ------------------------------------------------------
+
+model <- keras_model_sequential()
+
+model %>% 
+  # we start off with an efficient embedding layer which maps
+  # our vocab indices into embedding_dims dimensions
+  layer_embedding(max_features, embedding_dims, input_length = maxlen) %>%
+  layer_dropout(0.2) %>%
+  # we add a Convolution1D, which will learn filters
+  # word group filters of size filter_length:
+  layer_conv_1d(
+    filters, kernel_size, 
+    padding = "valid", activation = "relu", strides = 1
+  ) %>%
+  # we use max pooling:
+  layer_global_max_pooling_1d() %>%
+  # We add a vanilla hidden layer:
+  layer_dense(hidden_dims) %>%
+  layer_dropout(0.2) %>%
+  layer_activation("relu") %>%
+  # We project onto a single unit output layer, and squash it with a sigmoid:
+  layer_dense(1) %>%
+  layer_activation("sigmoid")
+
+
+model %>% compile(
+  loss = "binary_crossentropy",
+  optimizer = "adam",
+  metrics = "accuracy"
+)
+
+# Training ----------------------------------------------------------------
+
+model %>%
+  fit(
+    x_train, imdb$train$y,
+    batch_size = batch_size,
+    epochs = epochs,
+    validation_data = list(x_test, imdb$test$y)
+  )
+
+
+ + + +
+ + +
+ +
+

Site built with pkgdown.

+
+ +
+
+ + + diff --git a/website/articles/examples/imdb_cnn_lstm.R b/website/articles/examples/imdb_cnn_lstm.R new file mode 100644 index 000000000..f5bef9ae1 --- /dev/null +++ b/website/articles/examples/imdb_cnn_lstm.R @@ -0,0 +1,91 @@ +#' Train a recurrent convolutional network on the IMDB sentiment +#' classification task. +#' +#' Gets to 0.8498 test accuracy after 2 epochs. 41s/epoch on K520 GPU. + +library(keras) + +# Parameters -------------------------------------------------------------- + +# Embedding +max_features = 20000 +maxlen = 100 +embedding_size = 128 + +# Convolution +kernel_size = 5 +filters = 64 +pool_size = 4 + +# LSTM +lstm_output_size = 70 + +# Training +batch_size = 30 +epochs = 2 + +# Data Preparation -------------------------------------------------------- + +# Keras load all data into a list with the following structure: +# List of 2 +# $ train:List of 2 +# ..$ x:List of 25000 +# .. .. [list output truncated] +# .. ..- attr(*, "dim")= int 25000 +# ..$ y: num [1:25000(1d)] 1 0 0 1 0 0 1 0 1 0 ... +# $ test :List of 2 +# ..$ x:List of 25000 +# .. .. [list output truncated] +# .. ..- attr(*, "dim")= int 25000 +# ..$ y: num [1:25000(1d)] 1 1 1 1 1 0 0 0 1 1 ... +# +# The x data includes integer sequences, each integer is a word. +# The y data includes a set of integer labels (0 or 1). +# The num_words argument indicates that only the max_fetures most frequent +# words will be integerized. All other will be ignored. +# See help(dataset_imdb) +imdb <- dataset_imdb(num_words = max_features) + +# pad the sequences, so they have all the same lenght +# this will conver our dataset into a matrix: each line is a review +# and each column a word on the sequence. +# we pad the sequences with 0 to the left. +x_train <- imdb$train$x %>% + pad_sequences(maxlen = maxlen) + +x_test <- imdb$test$x %>% + pad_sequences(maxlen = maxlen) + +# Defining the model ------------------------------------------------------ + +model <- keras_model_sequential() + +model %>% + layer_embedding(max_features, embedding_size, input_length = maxlen) %>% + layer_dropout(0.25) %>% + layer_conv_1d( + filters, + kernel_size, + padding = "valid", + activation = "relu", + strides = 1 + ) %>% + layer_max_pooling_1d(pool_size) %>% + layer_lstm(lstm_output_size) %>% + layer_dense(1) %>% + layer_activation("sigmoid") + +model %>% compile( + loss = "binary_crossentropy", + optimizer = "adam", + metrics = "accuracy" +) + +# Training ---------------------------------------------------------------- + +model %>% fit( + x_train, imdb$train$y, + batch_size = batch_size, + epochs = epochs, + validation_data = list(x_test, imdb$test$y) +) diff --git a/website/articles/examples/imdb_cnn_lstm.html b/website/articles/examples/imdb_cnn_lstm.html new file mode 100644 index 000000000..74dbc8204 --- /dev/null +++ b/website/articles/examples/imdb_cnn_lstm.html @@ -0,0 +1,224 @@ + + + + + + + +imdb_cnn_lstm • keras + + + + + + + +
+
+ + + +
+
+ + + + +
+ +

Train a recurrent convolutional network on the IMDB sentiment classification task.

+

Gets to 0.8498 test accuracy after 2 epochs. 41s/epoch on K520 GPU.

+
library(keras)
+
+# Parameters --------------------------------------------------------------
+
+# Embedding
+max_features = 20000
+maxlen = 100
+embedding_size = 128
+
+# Convolution
+kernel_size = 5
+filters = 64
+pool_size = 4
+
+# LSTM
+lstm_output_size = 70
+
+# Training
+batch_size = 30
+epochs = 2
+
+# Data Preparation --------------------------------------------------------
+
+# Keras load all data into a list with the following structure:
+# List of 2
+# $ train:List of 2
+# ..$ x:List of 25000
+# .. .. [list output truncated]
+# .. ..- attr(*, "dim")= int 25000
+# ..$ y: num [1:25000(1d)] 1 0 0 1 0 0 1 0 1 0 ...
+# $ test :List of 2
+# ..$ x:List of 25000
+# .. .. [list output truncated]
+# .. ..- attr(*, "dim")= int 25000
+# ..$ y: num [1:25000(1d)] 1 1 1 1 1 0 0 0 1 1 ...
+#
+# The x data includes integer sequences, each integer is a word.
+# The y data includes a set of integer labels (0 or 1).
+# The num_words argument indicates that only the max_fetures most frequent
+# words will be integerized. All other will be ignored.
+# See help(dataset_imdb)
+imdb <- dataset_imdb(num_words = max_features)
+
+# pad the sequences, so they have all the same lenght
+# this will conver our dataset into a matrix: each line is a review
+# and each column a word on the sequence. 
+# we pad the sequences with 0 to the left.
+x_train <- imdb$train$x %>%
+  pad_sequences(maxlen = maxlen)
+
+x_test <- imdb$test$x %>%
+  pad_sequences(maxlen = maxlen)
+
+# Defining the model ------------------------------------------------------
+
+model <- keras_model_sequential()
+
+model %>%
+  layer_embedding(max_features, embedding_size, input_length = maxlen) %>%
+  layer_dropout(0.25) %>%
+  layer_conv_1d(
+    filters, 
+    kernel_size, 
+    padding = "valid",
+    activation = "relu",
+    strides = 1
+  ) %>%
+  layer_max_pooling_1d(pool_size) %>%
+  layer_lstm(lstm_output_size) %>%
+  layer_dense(1) %>%
+  layer_activation("sigmoid")
+
+model %>% compile(
+  loss = "binary_crossentropy",
+  optimizer = "adam",
+  metrics = "accuracy"
+)
+
+# Training ----------------------------------------------------------------
+
+model %>% fit(
+  x_train, imdb$train$y,
+  batch_size = batch_size,
+  epochs = epochs,
+  validation_data = list(x_test, imdb$test$y)
+)
+
+
+ + + +
+ + +
+ +
+

Site built with pkgdown.

+
+ +
+
+ + + diff --git a/website/articles/examples/imdb_fasttext.R b/website/articles/examples/imdb_fasttext.R new file mode 100644 index 000000000..8e2066fe8 --- /dev/null +++ b/website/articles/examples/imdb_fasttext.R @@ -0,0 +1,117 @@ +#' This example demonstrates the use of fasttext for text classification +#' +#' Based on Joulin et al's paper: +#' +#' Bags of Tricks for Efficient Text Classification +#' https://arxiv.org/abs/1607.01759 +#' +#' Results on IMDB datasets with uni and bi-gram embeddings: +#' Uni-gram: 0.8813 test accuracy after 5 epochs. 8s/epoch on i7 cpu. +#' Bi-gram : 0.9056 test accuracy after 5 epochs. 2s/epoch on GTx 980M gpu. +#' + +library(keras) +library(purrr) + +# Function definition ----------------------------------------------------- + +create_ngram_set <- function(input_list, ngram_value = 2){ + indices <- map(0:(length(input_list) - ngram_value), ~1:ngram_value + .x) + indices %>% + map_chr(~input_list[.x] %>% paste(collapse = "|")) %>% + unique() +} + +add_ngram <- function(sequences, token_indice, ngram_range = 2){ + ngrams <- map( + sequences, + create_ngram_set, ngram_value = ngram_range + ) + + seqs <- map2(sequences, ngrams, function(x, y){ + tokens <- token_indice$token[token_indice$ngrams %in% y] + c(x, tokens) + }) + + seqs +} + + +# Parameters -------------------------------------------------------------- + +# ngram_range = 2 will add bi-grams features +ngram_range <- 2 +max_features <- 20000 +maxlen <- 400 +batch_size <- 32 +embedding_dims <- 50 +epochs <- 5 + + +# Data preparation -------------------------------------------------------- + +imdb_data <- dataset_imdb(num_words = max_features) + +print(length(imdb_data$train$x)) # train sequences +print(length(imdb_data$test$x)) # test sequences +print(sprintf("Average train sequence length: %f", mean(map_int(imdb_data$train$x, length)))) +print(sprintf("Average test sequence length: %f", mean(map_int(imdb_data$test$x, length)))) + +if(ngram_range > 1) { + + # Create set of unique n-gram from the training set. + ngrams <- imdb_data$train$x %>% + map(create_ngram_set) %>% + unlist() %>% + unique() + + # Dictionary mapping n-gram token to a unique integer. + # Integer values are greater than max_features in order + # to avoid collision with existing features. + token_indice <- data.frame( + ngrams = ngrams, + token = 1:length(ngrams) + (max_features), + stringsAsFactors = FALSE + ) + + # max_features is the highest integer that could be found in the dataset. + max_features <- max(token_indice$token) + 1 + + # Augmenting x_train and x_test with n-grams features + imdb_data$train$x <- add_ngram(imdb_data$train$x, token_indice, ngram_range) + imdb_data$test$x <- add_ngram(imdb_data$test$x, token_indice, ngram_range) +} + +# pad sequences +imdb_data$train$x <- pad_sequences(imdb_data$train$x, maxlen = maxlen) +imdb_data$test$x <- pad_sequences(imdb_data$test$x, maxlen = maxlen) + + +# Model definition -------------------------------------------------------- + +model <- keras_model_sequential() + +model %>% + layer_embedding( + input_dim = max_features, output_dim = embedding_dims, + input_length = maxlen + ) %>% + layer_global_average_pooling_1d() %>% + layer_dense(1, activation = "sigmoid") + +model %>% compile( + loss = "binary_crossentropy", + optimizer = "adam", + metrics = "accuracy" +) + + +# Fitting ----------------------------------------------------------------- + +model %>% fit( + imdb_data$train$x, imdb_data$train$y, + batch_size = batch_size, + epochs = epochs, + validation_data = list(imdb_data$test$x, imdb_data$test$y) +) + diff --git a/website/articles/examples/imdb_fasttext.html b/website/articles/examples/imdb_fasttext.html new file mode 100644 index 000000000..5e2796b8f --- /dev/null +++ b/website/articles/examples/imdb_fasttext.html @@ -0,0 +1,244 @@ + + + + + + + +imdb_fasttext • keras + + + + + + + +
+
+ + + +
+
+ + + + +
+ +

This example demonstrates the use of fasttext for text classification

+

Based on Joulin et al’s paper:

+

Bags of Tricks for Efficient Text Classification https://arxiv.org/abs/1607.01759

+

Results on IMDB datasets with uni and bi-gram embeddings: Uni-gram: 0.8813 test accuracy after 5 epochs. 8s/epoch on i7 cpu. Bi-gram : 0.9056 test accuracy after 5 epochs. 2s/epoch on GTx 980M gpu.

+
library(keras)
+library(purrr)
+
+# Function definition -----------------------------------------------------
+
+create_ngram_set <- function(input_list, ngram_value = 2){
+  indices <- map(0:(length(input_list) - ngram_value), ~1:ngram_value + .x)
+  indices %>%
+    map_chr(~input_list[.x] %>% paste(collapse = "|")) %>%
+    unique()
+}
+
+add_ngram <- function(sequences, token_indice, ngram_range = 2){
+  ngrams <- map(
+    sequences, 
+    create_ngram_set, ngram_value = ngram_range
+  )
+  
+  seqs <- map2(sequences, ngrams, function(x, y){
+    tokens <- token_indice$token[token_indice$ngrams %in% y]  
+    c(x, tokens)
+  })
+  
+  seqs
+}
+
+
+# Parameters --------------------------------------------------------------
+
+# ngram_range = 2 will add bi-grams features
+ngram_range <- 2
+max_features <- 20000
+maxlen <- 400
+batch_size <- 32
+embedding_dims <- 50
+epochs <- 5
+
+
+# Data preparation --------------------------------------------------------
+
+imdb_data <- dataset_imdb(num_words = max_features)
+
+print(length(imdb_data$train$x)) # train sequences
+print(length(imdb_data$test$x)) # test sequences
+print(sprintf("Average train sequence length: %f", mean(map_int(imdb_data$train$x, length))))
+print(sprintf("Average test sequence length: %f", mean(map_int(imdb_data$test$x, length))))
+
+if(ngram_range > 1) {
+  
+  # Create set of unique n-gram from the training set.
+  ngrams <- imdb_data$train$x %>% 
+    map(create_ngram_set) %>%
+    unlist() %>%
+    unique()
+
+  # Dictionary mapping n-gram token to a unique integer.
+  # Integer values are greater than max_features in order
+  # to avoid collision with existing features.
+  token_indice <- data.frame(
+    ngrams = ngrams,
+    token  = 1:length(ngrams) + (max_features), 
+    stringsAsFactors = FALSE
+  )
+  
+  # max_features is the highest integer that could be found in the dataset.
+  max_features <- max(token_indice$token) + 1
+  
+  # Augmenting x_train and x_test with n-grams features
+  imdb_data$train$x <- add_ngram(imdb_data$train$x, token_indice, ngram_range)
+  imdb_data$test$x <- add_ngram(imdb_data$test$x, token_indice, ngram_range)
+}
+
+# pad sequences
+imdb_data$train$x <- pad_sequences(imdb_data$train$x, maxlen = maxlen)
+imdb_data$test$x <- pad_sequences(imdb_data$test$x, maxlen = maxlen)
+
+
+# Model definition --------------------------------------------------------
+
+model <- keras_model_sequential()
+
+model %>%
+  layer_embedding(
+    input_dim = max_features, output_dim = embedding_dims, 
+    input_length = maxlen
+    ) %>%
+  layer_global_average_pooling_1d() %>%
+  layer_dense(1, activation = "sigmoid")
+
+model %>% compile(
+  loss = "binary_crossentropy",
+  optimizer = "adam",
+  metrics = "accuracy"
+)
+
+
+# Fitting -----------------------------------------------------------------
+
+model %>% fit(
+  imdb_data$train$x, imdb_data$train$y, 
+  batch_size = batch_size,
+  epochs = epochs,
+  validation_data = list(imdb_data$test$x, imdb_data$test$y)
+)
+
+
+ + + +
+ + +
+ +
+

Site built with pkgdown.

+
+ +
+
+ + + diff --git a/website/articles/examples/imdb_lstm.R b/website/articles/examples/imdb_lstm.R new file mode 100644 index 000000000..4e3d8c983 --- /dev/null +++ b/website/articles/examples/imdb_lstm.R @@ -0,0 +1,64 @@ +#' Trains a LSTM on the IMDB sentiment classification task. +#' +#' The dataset is actually too small for LSTM to be of any advantage compared to +#' simpler, much faster methods such as TF-IDF + LogReg. +#' +#' Notes: +#' +#' - RNNs are tricky. Choice of batch size is important, choice of loss and +#' optimizer is critical, etc. Some configurations won't converge. +#' +#' - LSTM loss decrease patterns during training can be quite different from +#' what you see with CNNs/MLPs/etc. + +library(keras) + +max_features <- 20000 +maxlen <- 80 # cut texts after this number of words (among top max_features most common words) +batch_size <- 32 + +cat('Loading data...\n') +imdb <- dataset_imdb(num_words = max_features) +x_train <- imdb$train$x +y_train <- imdb$train$y +x_test <- imdb$test$x +y_test <- imdb$test$y + +cat(length(x_train), 'train sequences\n') +cat(length(x_test), 'test sequences\n') + +cat('Pad sequences (samples x time)\n') +x_train <- pad_sequences(x_train, maxlen = maxlen) +x_test <- pad_sequences(x_test, maxlen = maxlen) +cat('x_train shape:', dim(x_train), '\n') +cat('x_test shape:', dim(x_test), '\n') + +cat('Build model...\n') +model <- keras_model_sequential() +model %>% + layer_embedding(input_dim = max_features, output_dim = 128) %>% + layer_lstm(units = 64, dropout = 0.2, recurrent_dropout = 0.2) %>% + layer_dense(units = 1, activation = 'sigmoid') + +# try using different optimizers and different optimizer configs +model %>% compile( + loss = 'binary_crossentropy', + optimizer = 'adam', + metrics = c('accuracy') +) + +cat('Train...\n') +model %>% fit( + x_train, y_train, + batch_size = batch_size, + epochs = 15, + validation_data = list(x_test, y_test) +) +scores <- model %>% evaluate( + x_test, y_test, + batch_size = batch_size +) +cat('Test score:', scores[[1]]) +cat('Test accuracy', scores[[2]]) + + diff --git a/website/articles/examples/imdb_lstm.html b/website/articles/examples/imdb_lstm.html new file mode 100644 index 000000000..8a7e30adc --- /dev/null +++ b/website/articles/examples/imdb_lstm.html @@ -0,0 +1,192 @@ + + + + + + + +imdb_lstm • keras + + + + + + + +
+
+ + + +
+
+ + + + +
+ +

Trains a LSTM on the IMDB sentiment classification task.

+

The dataset is actually too small for LSTM to be of any advantage compared to simpler, much faster methods such as TF-IDF + LogReg.

+

Notes:

+
    +
  • RNNs are tricky. Choice of batch size is important, choice of loss and optimizer is critical, etc. Some configurations won’t converge.

  • +
  • LSTM loss decrease patterns during training can be quite different from what you see with CNNs/MLPs/etc.

  • +
+
library(keras)
+
+max_features <- 20000
+maxlen <- 80  # cut texts after this number of words (among top max_features most common words)
+batch_size <- 32
+
+cat('Loading data...\n')
+imdb <- dataset_imdb(num_words = max_features)
+x_train <- imdb$train$x
+y_train <- imdb$train$y
+x_test <- imdb$test$x
+y_test <- imdb$test$y
+
+cat(length(x_train), 'train sequences\n')
+cat(length(x_test), 'test sequences\n')
+
+cat('Pad sequences (samples x time)\n')
+x_train <- pad_sequences(x_train, maxlen = maxlen)
+x_test <- pad_sequences(x_test, maxlen = maxlen)
+cat('x_train shape:', dim(x_train), '\n')
+cat('x_test shape:', dim(x_test), '\n')
+
+cat('Build model...\n')
+model <- keras_model_sequential()
+model %>%
+  layer_embedding(input_dim = max_features, output_dim = 128) %>% 
+  layer_lstm(units = 64, dropout = 0.2, recurrent_dropout = 0.2) %>% 
+  layer_dense(units = 1, activation = 'sigmoid')
+
+# try using different optimizers and different optimizer configs
+model %>% compile(
+  loss = 'binary_crossentropy',
+  optimizer = 'adam',
+  metrics = c('accuracy')
+)
+
+cat('Train...\n')
+model %>% fit(
+  x_train, y_train,
+  batch_size = batch_size,
+  epochs = 15,
+  validation_data = list(x_test, y_test)
+)
+scores <- model %>% evaluate(
+  x_test, y_test,
+  batch_size = batch_size
+)
+cat('Test score:', scores[[1]])
+cat('Test accuracy', scores[[2]])
+
+
+ + + +
+ + +
+ +
+

Site built with pkgdown.

+
+ +
+
+ + + diff --git a/website/articles/examples/lstm_benchmark.R b/website/articles/examples/lstm_benchmark.R new file mode 100644 index 000000000..0ab13681d --- /dev/null +++ b/website/articles/examples/lstm_benchmark.R @@ -0,0 +1 @@ +library(keras) diff --git a/website/articles/examples/lstm_benchmark.html b/website/articles/examples/lstm_benchmark.html new file mode 100644 index 000000000..039a698e7 --- /dev/null +++ b/website/articles/examples/lstm_benchmark.html @@ -0,0 +1,137 @@ + + + + + + + +lstm_benchmark • keras + + + + + + + +
+
+ + + +
+
+ + + + + +
+ + + +
+ + +
+ +
+

Site built with pkgdown.

+
+ +
+
+ + + diff --git a/website/articles/examples/lstm_benchmark.py b/website/articles/examples/lstm_benchmark.py new file mode 100755 index 000000000..009f25bdc --- /dev/null +++ b/website/articles/examples/lstm_benchmark.py @@ -0,0 +1,88 @@ +'''Compare LSTM implementations on the IMDB sentiment classification task. + +implementation=0 preprocesses input to the LSTM which typically results in +faster computations at the expense of increased peak memory usage as the +preprocessed input must be kept in memory. + +implementation=1 does away with the preprocessing, meaning that it might take +a little longer, but should require less peak memory. + +implementation=2 concatenates the input, output and forget gate's weights +into one, large matrix, resulting in faster computation time as the GPU can +utilize more cores, at the expense of reduced regularization because the same +dropout is shared across the gates. + +Note that the relative performance of the different implementations can +vary depending on your device, your model and the size of your data. +''' + +import time +import numpy as np +import matplotlib.pyplot as plt + +from keras.preprocessing import sequence +from keras.models import Sequential +from keras.layers import Embedding, Dense, LSTM, Dropout +from keras.datasets import imdb + +max_features = 20000 +max_length = 80 +embedding_dim = 256 +batch_size = 128 +epochs = 10 +modes = [0, 1, 2] + +print('Loading data...') +(X_train, y_train), (X_test, y_test) = imdb.load_data(num_words=max_features) +X_train = sequence.pad_sequences(X_train, max_length) +X_test = sequence.pad_sequences(X_test, max_length) + +# Compile and train different models while meauring performance. +results = [] +for mode in modes: + print('Testing mode: implementation={}'.format(mode)) + + model = Sequential() + model.add(Embedding(max_features, embedding_dim, + input_length=max_length)) + model.add(Dropout(0.2)) + model.add(LSTM(embedding_dim, + dropout=0.2, + recurrent_dropout=0.2, + implementation=mode)) + model.add(Dense(1, activation='sigmoid')) + model.compile(loss='binary_crossentropy', + optimizer='adam', + metrics=['accuracy']) + + start_time = time.time() + history = model.fit(X_train, y_train, + batch_size=batch_size, + epochs=epochs, + validation_data=(X_test, y_test)) + average_time_per_epoch = (time.time() - start_time) / epochs + + results.append((history, average_time_per_epoch)) + +# Compare models' accuracy, loss and elapsed time per epoch. +plt.style.use('ggplot') +ax1 = plt.subplot2grid((2, 2), (0, 0)) +ax1.set_title('Accuracy') +ax1.set_ylabel('Validation Accuracy') +ax1.set_xlabel('Epochs') +ax2 = plt.subplot2grid((2, 2), (1, 0)) +ax2.set_title('Loss') +ax2.set_ylabel('Validation Loss') +ax2.set_xlabel('Epochs') +ax3 = plt.subplot2grid((2, 2), (0, 1), rowspan=2) +ax3.set_title('Time') +ax3.set_ylabel('Seconds') +for mode, result in zip(modes, results): + ax1.plot(result[0].epoch, result[0].history['val_acc'], label=mode) + ax2.plot(result[0].epoch, result[0].history['val_loss'], label=mode) +ax1.legend() +ax2.legend() +ax3.bar(np.arange(len(results)), [x[1] for x in results], + tick_label=modes, align='center') +plt.tight_layout() +plt.show() diff --git a/website/articles/examples/lstm_text_generation.R b/website/articles/examples/lstm_text_generation.R new file mode 100644 index 000000000..aceb554e8 --- /dev/null +++ b/website/articles/examples/lstm_text_generation.R @@ -0,0 +1,137 @@ +#' Example script to generate text from Nietzsche's writings. +#' +#' At least 20 epochs are required before the generated text starts sounding +#' coherent. +#' +#' It is recommended to run this script on GPU, as recurrent networks are quite +#' computationally intensive. +#' +#' If you try this script on new data, make sure your corpus has at least ~100k +#' characters. ~1M is better. +#' + +library(keras) +library(readr) +library(stringr) +library(purrr) +library(tokenizers) + + +# Parameters -------------------------------------------------------------- + +maxlen <- 40 + +# Data preparation -------------------------------------------------------- + +path <- get_file( + 'nietzsche.txt', + origin='https://s3.amazonaws.com/text-datasets/nietzsche.txt' + ) + +text <- read_lines(path) %>% + str_to_lower() %>% + str_c(collapse = "\n") %>% + tokenize_characters(strip_non_alphanum = FALSE, simplify = TRUE) + +print(sprintf("corpus length: %d", length(text))) + +chars <- text %>% + unique() %>% + sort() + +print(sprintf("total chars: %d", length(chars))) + +# cut the text in semi-redundant sequences of maxlen characters +dataset <- map( + seq(1, length(text) - maxlen - 1, by = 3), + ~list(sentece = text[.x:(.x + maxlen - 1)], next_char = text[.x + maxlen]) + ) + +dataset <- transpose(dataset) + +# vectorization +X <- array(0, dim = c(length(dataset$sentece), maxlen, length(chars))) +y <- array(0, dim = c(length(dataset$sentece), length(chars))) + +for(i in 1:length(dataset$sentece)){ + + X[i,,] <- sapply(chars, function(x){ + as.integer(x == dataset$sentece[[i]]) + }) + + y[i,] <- as.integer(chars == dataset$next_char[[i]]) + +} + +# Model definition -------------------------------------------------------- + +model <- keras_model_sequential() + +model %>% + layer_lstm(128, input_shape = c(maxlen, length(chars))) %>% + layer_dense(length(chars)) %>% + layer_activation("softmax") + +optimizer <- optimizer_rmsprop(lr = 0.01) + +model %>% compile( + loss = "categorical_crossentropy", + optimizer = optimizer +) + + +# Training and results ---------------------------------------------------- + +sample_mod <- function(preds, temperature = 1){ + preds <- log(preds)/temperature + exp_preds <- exp(preds) + preds <- exp_preds/sum(exp(preds)) + + rmultinom(1, 1, preds) %>% + as.integer() %>% + which.max() +} + +for(iteration in 1:60){ + + cat(sprintf("iteration: %02d ---------------\n\n", iteration)) + + model %>% fit( + X, y, + batch_size = 128, + epochs = 1 + ) + + for(diversity in c(0.2, 0.5, 1, 1.2)){ + + cat(sprintf("diversity: %f ---------------\n\n", diversity)) + + start_index <- sample(1:(length(text) - maxlen), size = 1) + sentence <- text[start_index:(start_index + maxlen - 1)] + generated <- "" + + for(i in 1:400){ + + x <- sapply(chars, function(x){ + as.integer(x == sentence) + }) + dim(x) <- c(1, dim(x)) + + preds <- predict(model, x) + next_index <- sample_mod(preds, diversity) + next_char <- chars[next_index] + + generated <- str_c(generated, next_char, collapse = "") + sentence <- c(sentence[-1], next_char) + + } + + cat(generated) + cat("\n\n") + + } +} + + + + diff --git a/website/articles/examples/lstm_text_generation.html b/website/articles/examples/lstm_text_generation.html new file mode 100644 index 000000000..f0feb29d8 --- /dev/null +++ b/website/articles/examples/lstm_text_generation.html @@ -0,0 +1,261 @@ + + + + + + + +lstm_text_generation • keras + + + + + + + +
+
+ + + +
+
+ + + + +
+ +

Example script to generate text from Nietzsche’s writings.

+

At least 20 epochs are required before the generated text starts sounding coherent.

+

It is recommended to run this script on GPU, as recurrent networks are quite computationally intensive.

+

If you try this script on new data, make sure your corpus has at least ~100k characters. ~1M is better.

+
library(keras)
+library(readr)
+library(stringr)
+library(purrr)
+library(tokenizers)
+
+
+# Parameters --------------------------------------------------------------
+
+maxlen <- 40
+
+# Data preparation --------------------------------------------------------
+
+path <- get_file(
+  'nietzsche.txt', 
+  origin='https://s3.amazonaws.com/text-datasets/nietzsche.txt'
+  )
+
+text <- read_lines(path) %>%
+  str_to_lower() %>%
+  str_c(collapse = "\n") %>%
+  tokenize_characters(strip_non_alphanum = FALSE, simplify = TRUE)
+
+print(sprintf("corpus length: %d", length(text)))
+
+chars <- text %>%
+  unique() %>%
+  sort()
+
+print(sprintf("total chars: %d", length(chars)))  
+
+# cut the text in semi-redundant sequences of maxlen characters
+dataset <- map(
+  seq(1, length(text) - maxlen - 1, by = 3), 
+  ~list(sentece = text[.x:(.x + maxlen - 1)], next_char = text[.x + maxlen])
+  )
+
+dataset <- transpose(dataset)
+
+# vectorization
+X <- array(0, dim = c(length(dataset$sentece), maxlen, length(chars)))
+y <- array(0, dim = c(length(dataset$sentece), length(chars)))
+
+for(i in 1:length(dataset$sentece)){
+  
+  X[i,,] <- sapply(chars, function(x){
+    as.integer(x == dataset$sentece[[i]])
+  })
+  
+  y[i,] <- as.integer(chars == dataset$next_char[[i]])
+  
+}
+
+# Model definition --------------------------------------------------------
+
+model <- keras_model_sequential()
+
+model %>%
+  layer_lstm(128, input_shape = c(maxlen, length(chars))) %>%
+  layer_dense(length(chars)) %>%
+  layer_activation("softmax")
+
+optimizer <- optimizer_rmsprop(lr = 0.01)
+
+model %>% compile(
+  loss = "categorical_crossentropy", 
+  optimizer = optimizer
+)
+
+
+# Training and results ----------------------------------------------------
+
+sample_mod <- function(preds, temperature = 1){
+  preds <- log(preds)/temperature
+  exp_preds <- exp(preds)
+  preds <- exp_preds/sum(exp(preds))
+  
+  rmultinom(1, 1, preds) %>% 
+    as.integer() %>%
+    which.max()
+}
+
+for(iteration in 1:60){
+  
+  cat(sprintf("iteration: %02d ---------------\n\n", iteration))
+  
+  model %>% fit(
+    X, y,
+    batch_size = 128,
+    epochs = 1
+  )
+  
+  for(diversity in c(0.2, 0.5, 1, 1.2)){
+    
+    cat(sprintf("diversity: %f ---------------\n\n", diversity))
+    
+    start_index <- sample(1:(length(text) - maxlen), size = 1)
+    sentence <- text[start_index:(start_index + maxlen - 1)]
+    generated <- ""
+    
+    for(i in 1:400){
+      
+      x <- sapply(chars, function(x){
+        as.integer(x == sentence)
+      })
+      dim(x) <- c(1, dim(x))
+      
+      preds <- predict(model, x)
+      next_index <- sample_mod(preds, diversity)
+      next_char <- chars[next_index]
+      
+      generated <- str_c(generated, next_char, collapse = "")
+      sentence <- c(sentence[-1], next_char)
+      
+    }
+    
+    cat(generated)
+    cat("\n\n")
+    
+  }
+}
+
+
+ + + +
+ + +
+ +
+

Site built with pkgdown.

+
+ +
+
+ + + diff --git a/website/articles/examples/mnist_acgan.R b/website/articles/examples/mnist_acgan.R new file mode 100644 index 000000000..df099c53f --- /dev/null +++ b/website/articles/examples/mnist_acgan.R @@ -0,0 +1,351 @@ +#' Train an Auxiliary Classifier Generative Adversarial Network (ACGAN) on the +#' MNIST dataset. See https://arxiv.org/abs/1610.09585 for more details. +#' +#' You should start to see reasonable images after ~5 epochs, and good images by +#' ~15 epochs. You should use a GPU, as the convolution-heavy operations are +#' very slow on the CPU. Prefer the TensorFlow backend if you plan on iterating, +#' as the compilation time can be a blocker using Theano. +#' +#' Hardware | Backend | Time / Epoch +#' | -----------------| ------- | ------------------- | +#' | CPU | TF | 3 hrs | +#' | Titan X (maxwell) | TF | 4 min | +#' | Titan X (maxwell) | TH | 7 min | +#' + +library(keras) +library(progress) +library(abind) +K <- keras::backend() +K$set_image_data_format('channels_first') + +# Functions --------------------------------------------------------------- + +build_generator <- function(latent_size){ + + # we will map a pair of (z, L), where z is a latent vector and L is a + # label drawn from P_c, to image space (..., 1, 28, 28) + cnn <- keras_model_sequential() + + cnn %>% + layer_dense(1024, input_shape = latent_size, activation = "relu") %>% + layer_dense(128*7*7, activation = "relu") %>% + layer_reshape(c(128, 7, 7)) %>% + # upsample to (..., 14, 14) + layer_upsampling_2d(size = c(2, 2)) %>% + layer_conv_2d( + 256, c(5,5), padding = "same", activation = "relu", + kernel_initializer = "glorot_normal" + ) %>% + # upsample to (..., 28, 28) + layer_upsampling_2d(size = c(2, 2)) %>% + layer_conv_2d( + 128, c(5,5), padding = "same", activation = "tanh", + kernel_initializer = "glorot_normal" + ) %>% + # take a channel axis reduction + layer_conv_2d( + 1, c(2,2), padding = "same", activation = "tanh", + kernel_initializer = "glorot_normal" + ) + + + # this is the z space commonly refered to in GAN papers + latent <- layer_input(shape = list(latent_size)) + + # this will be our label + image_class <- layer_input(shape = list(1)) + + # 10 classes in MNIST + cls <- image_class %>% + layer_embedding( + input_dim = 10, output_dim = latent_size, + embeddings_initializer='glorot_normal' + ) %>% + layer_flatten() + + + # hadamard product between z-space and a class conditional embedding + h <- layer_multiply(list(latent, cls)) + + fake_image <- cnn(h) + + keras_model(list(latent, image_class), fake_image) +} + +build_discriminator <- function(){ + + # build a relatively standard conv net, with LeakyReLUs as suggested in + # the reference paper + cnn <- keras_model_sequential() + + cnn %>% + layer_conv_2d( + 32, c(3,3), padding = "same", strides = c(2,2), + input_shape = c(1, 28, 28) + ) %>% + layer_activation_leaky_relu() %>% + layer_dropout(0.3) %>% + + layer_conv_2d(64, c(3, 3), padding = "same", strides = c(1,1)) %>% + layer_activation_leaky_relu() %>% + layer_dropout(0.3) %>% + + layer_conv_2d(128, c(3, 3), padding = "same", strides = c(2,2)) %>% + layer_activation_leaky_relu() %>% + layer_dropout(0.3) %>% + + layer_conv_2d(256, c(3, 3), padding = "same", strides = c(1,1)) %>% + layer_activation_leaky_relu() %>% + layer_dropout(0.3) %>% + + layer_flatten() + + + + image <- layer_input(shape = c(1, 28, 28)) + features <- cnn(image) + + # first output (name=generation) is whether or not the discriminator + # thinks the image that is being shown is fake, and the second output + # (name=auxiliary) is the class that the discriminator thinks the image + # belongs to. + fake <- features %>% + layer_dense(1, activation = "sigmoid", name = "generation") + + aux <- features %>% + layer_dense(10, activation = "softmax", name = "auxiliary") + + keras_model(image, list(fake, aux)) +} + +# Parameters -------------------------------------------------------------- + +# batch and latent size taken from the paper +epochs <- 50 +batch_size <- 100 +latent_size <- 100 + +# Adam parameters suggested in https://arxiv.org/abs/1511.06434 +adam_lr <- 0.00005 +adam_beta_1 <- 0.5 + +# Model definition -------------------------------------------------------- + +# build the discriminator +discriminator <- build_discriminator() +discriminator %>% compile( + optimizer = optimizer_adam(lr = adam_lr, beta_1 = adam_beta_1), + loss = list("binary_crossentropy", "sparse_categorical_crossentropy") +) + +# build the generator +generator <- build_generator(latent_size) +generator %>% compile( + optimizer = optimizer_adam(lr = adam_lr, beta_1 = adam_beta_1), + loss = "binary_crossentropy" +) + +latent <- layer_input(shape = list(latent_size)) +image_class <- layer_input(shape = list(1), dtype = "int32") + +fake <- generator(list(latent, image_class)) + +# we only want to be able to train generation for the combined model + +discriminator$trainable <- FALSE +results <- discriminator(fake) + +combined <- keras_model(list(latent, image_class), results) +combined %>% compile( + optimizer = optimizer_adam(lr = adam_lr, beta_1 = adam_beta_1), + loss = list("binary_crossentropy", "sparse_categorical_crossentropy") +) + + +# Data preparation -------------------------------------------------------- + +# get our mnist data, and force it to be of shape (..., 1, 28, 28) with +# range [-1, 1] +mnist <- dataset_mnist() +mnist$train$x <- (mnist$train$x - 127.5)/127.5 +mnist$test$x <- (mnist$test$x - 127.5)/127.5 +dim(mnist$train$x) <- c(60000, 1, 28, 28) +dim(mnist$test$x) <- c(10000, 1, 28, 28) + +num_train <- dim(mnist$train$x)[1] +num_test <- dim(mnist$test$x)[1] + +# Training ---------------------------------------------------------------- + +for(epoch in 1:epochs){ + + num_batches <- trunc(num_train/batch_size) + pb <- progress_bar$new( + total = num_batches, + format = sprintf("epoch %s/%s :elapsed [:bar] :percent :eta", epoch, epochs), + clear = FALSE + ) + + epoch_gen_loss <- NULL + epoch_disc_loss <- NULL + + possible_indexes <- 1:num_train + + for(index in 1:num_batches){ + + pb$tick() + + # generate a new batch of noise + noise <- runif(n = batch_size*latent_size, min = -1, max = 1) %>% + matrix(nrow = batch_size, ncol = latent_size) + + # get a batch of real images + batch <- sample(possible_indexes, size = batch_size) + possible_indexes <- possible_indexes[!possible_indexes %in% batch] + image_batch <- mnist$train$x[batch,,,,drop = FALSE] + label_batch <- mnist$train$y[batch] + + # sample some labels from p_c + sampled_labels <- sample(0:9, batch_size, replace = TRUE) %>% + matrix(ncol = 1) + + # generate a batch of fake images, using the generated labels as a + # conditioner. We reshape the sampled labels to be + # (batch_size, 1) so that we can feed them into the embedding + # layer as a length one sequence + generated_images <- predict(generator, list(noise, sampled_labels)) + + X <- abind(image_batch, generated_images, along = 1) + y <- c(rep(1L, batch_size), rep(0L, batch_size)) %>% matrix(ncol = 1) + aux_y <- c(label_batch, sampled_labels) %>% matrix(ncol = 1) + + # see if the discriminator can figure itself out... + disc_loss <- train_on_batch( + discriminator, x = X, + y = list(y, aux_y) + ) + + epoch_disc_loss <- rbind(epoch_disc_loss, unlist(disc_loss)) + + # make new noise. we generate 2 * batch size here such that we have + # the generator optimize over an identical number of images as the + # discriminator + noise <- runif(2*batch_size*latent_size, min = -1, max = 1) %>% + matrix(nrow = 2*batch_size, ncol = latent_size) + sampled_labels <- sample(0:9, size = 2*batch_size, replace = TRUE) %>% + matrix(ncol = 1) + + # we want to train the generator to trick the discriminator + # For the generator, we want all the {fake, not-fake} labels to say + # not-fake + trick <- rep(1, 2*batch_size) %>% matrix(ncol = 1) + + combined_loss <- train_on_batch( + combined, + list(noise, sampled_labels), + list(trick, sampled_labels) + ) + + epoch_gen_loss <- rbind(epoch_gen_loss, unlist(combined_loss)) + + } + + cat(sprintf("\nTesting for epoch %02d:", epoch)) + + # evaluate the testing loss here + + # generate a new batch of noise + noise <- runif(num_test*latent_size, min = -1, max = 1) %>% + matrix(nrow = num_test, ncol = latent_size) + + # sample some labels from p_c and generate images from them + sampled_labels <- sample(0:9, size = num_test, replace = TRUE) %>% + matrix(ncol = 1) + generated_images <- predict(generator, list(noise, sampled_labels)) + + X <- abind(mnist$test$x, generated_images, along = 1) + y <- c(rep(1, num_test), rep(0, num_test)) %>% matrix(ncol = 1) + aux_y <- c(mnist$test$y, sampled_labels) %>% matrix(ncol = 1) + + # see if the discriminator can figure itself out... + discriminator_test_loss <- evaluate( + discriminator, X, list(y, aux_y), + verbose = FALSE + ) %>% unlist() + + discriminator_train_loss <- apply(epoch_disc_loss, 2, mean) + + # make new noise + noise <- runif(2*num_test*latent_size, min = -1, max = 1) %>% + matrix(nrow = 2*num_test, ncol = latent_size) + sampled_labels <- sample(0:9, size = 2*num_test, replace = TRUE) %>% + matrix(ncol = 1) + + trick <- rep(1, 2*num_test) %>% matrix(ncol = 1) + + generator_test_loss = combined %>% evaluate( + list(noise, sampled_labels), + list(trick, sampled_labels), + verbose = FALSE + ) + + generator_train_loss <- apply(epoch_gen_loss, 2, mean) + + + # generate an epoch report on performance + row_fmt <- "\n%22s : loss %4.2f | %5.2f | %5.2f" + cat(sprintf( + row_fmt, + "generator (train)", + generator_train_loss[1], + generator_train_loss[2], + generator_train_loss[3] + )) + cat(sprintf( + row_fmt, + "generator (test)", + generator_test_loss[1], + generator_test_loss[2], + generator_test_loss[3] + )) + + cat(sprintf( + row_fmt, + "discriminator (train)", + discriminator_train_loss[1], + discriminator_train_loss[2], + discriminator_train_loss[3] + )) + cat(sprintf( + row_fmt, + "discriminator (test)", + discriminator_test_loss[1], + discriminator_test_loss[2], + discriminator_test_loss[3] + )) + + cat("\n") + + # generate some digits to display + noise <- runif(10*latent_size, min = -1, max = 1) %>% + matrix(nrow = 10, ncol = latent_size) + + sampled_labels <- 0:9 %>% + matrix(ncol = 1) + + # get a batch to display + generated_images <- predict( + generator, + list(noise, sampled_labels) + ) + + img <- NULL + for(i in 1:10){ + img <- cbind(img, generated_images[i,,,]) + } + + ((img + 1)/2) %>% as.raster() %>% + plot() + +} diff --git a/website/articles/examples/mnist_acgan.html b/website/articles/examples/mnist_acgan.html new file mode 100644 index 000000000..22af3e1de --- /dev/null +++ b/website/articles/examples/mnist_acgan.html @@ -0,0 +1,498 @@ + + + + + + + +mnist_acgan • keras + + + + + + + +
+
+ + + +
+
+ + + + +
+ +

Train an Auxiliary Classifier Generative Adversarial Network (ACGAN) on the MNIST dataset. See https://arxiv.org/abs/1610.09585 for more details.

+

You should start to see reasonable images after ~5 epochs, and good images by ~15 epochs. You should use a GPU, as the convolution-heavy operations are very slow on the CPU. Prefer the TensorFlow backend if you plan on iterating, as the compilation time can be a blocker using Theano.

+ + + + + + + + + + + + + + + + + + + + + + + +
HardwareBackendTime / Epoch
CPUTF3 hrs
Titan X (maxwell)TF4 min
Titan X (maxwell)TH7 min
+
library(keras)
+library(progress)
+library(abind)
+K <- keras::backend()
+K$set_image_data_format('channels_first')
+
+# Functions ---------------------------------------------------------------
+
+build_generator <- function(latent_size){
+  
+  # we will map a pair of (z, L), where z is a latent vector and L is a
+  # label drawn from P_c, to image space (..., 1, 28, 28)
+  cnn <- keras_model_sequential()
+  
+  cnn %>%
+    layer_dense(1024, input_shape = latent_size, activation = "relu") %>%
+    layer_dense(128*7*7, activation = "relu") %>%
+    layer_reshape(c(128, 7, 7)) %>%
+    # upsample to (..., 14, 14)
+    layer_upsampling_2d(size = c(2, 2)) %>%
+    layer_conv_2d(
+      256, c(5,5), padding = "same", activation = "relu",
+      kernel_initializer = "glorot_normal"
+    ) %>%
+    # upsample to (..., 28, 28)
+    layer_upsampling_2d(size = c(2, 2)) %>%
+    layer_conv_2d(
+      128, c(5,5), padding = "same", activation = "tanh",
+      kernel_initializer = "glorot_normal"
+    ) %>%
+    # take a channel axis reduction
+    layer_conv_2d(
+      1, c(2,2), padding = "same", activation = "tanh",
+      kernel_initializer = "glorot_normal"
+    )
+  
+  
+  # this is the z space commonly refered to in GAN papers
+  latent <- layer_input(shape = list(latent_size))
+  
+  # this will be our label
+  image_class <- layer_input(shape = list(1))
+  
+  # 10 classes in MNIST
+  cls <-  image_class %>%
+    layer_embedding(
+      input_dim = 10, output_dim = latent_size, 
+      embeddings_initializer='glorot_normal'
+    ) %>%
+    layer_flatten()
+  
+  
+  # hadamard product between z-space and a class conditional embedding
+  h <- layer_multiply(list(latent, cls))
+  
+  fake_image <- cnn(h)
+  
+  keras_model(list(latent, image_class), fake_image)
+}
+
+build_discriminator <- function(){
+  
+  # build a relatively standard conv net, with LeakyReLUs as suggested in
+  # the reference paper
+  cnn <- keras_model_sequential()
+  
+  cnn %>%
+    layer_conv_2d(
+      32, c(3,3), padding = "same", strides = c(2,2),
+      input_shape = c(1, 28, 28)
+    ) %>%
+    layer_activation_leaky_relu() %>%
+    layer_dropout(0.3) %>%
+    
+    layer_conv_2d(64, c(3, 3), padding = "same", strides = c(1,1)) %>%
+    layer_activation_leaky_relu() %>%
+    layer_dropout(0.3) %>%  
+    
+    layer_conv_2d(128, c(3, 3), padding = "same", strides = c(2,2)) %>%
+    layer_activation_leaky_relu() %>%
+    layer_dropout(0.3) %>%  
+    
+    layer_conv_2d(256, c(3, 3), padding = "same", strides = c(1,1)) %>%
+    layer_activation_leaky_relu() %>%
+    layer_dropout(0.3) %>%  
+    
+    layer_flatten()
+  
+  
+  
+  image <- layer_input(shape = c(1, 28, 28))
+  features <- cnn(image)
+  
+  # first output (name=generation) is whether or not the discriminator
+  # thinks the image that is being shown is fake, and the second output
+  # (name=auxiliary) is the class that the discriminator thinks the image
+  # belongs to.
+  fake <- features %>% 
+    layer_dense(1, activation = "sigmoid", name = "generation")
+  
+  aux <- features %>%
+    layer_dense(10, activation = "softmax", name = "auxiliary")
+  
+  keras_model(image, list(fake, aux))
+}
+
+# Parameters --------------------------------------------------------------
+
+# batch and latent size taken from the paper
+epochs <- 50
+batch_size <- 100
+latent_size <- 100
+
+# Adam parameters suggested in https://arxiv.org/abs/1511.06434
+adam_lr <- 0.00005 
+adam_beta_1 <- 0.5
+
+# Model definition --------------------------------------------------------
+
+# build the discriminator
+discriminator <- build_discriminator()
+discriminator %>% compile(
+  optimizer = optimizer_adam(lr = adam_lr, beta_1 = adam_beta_1),
+  loss = list("binary_crossentropy", "sparse_categorical_crossentropy")
+)
+
+# build the generator
+generator <- build_generator(latent_size)
+generator %>% compile(
+  optimizer = optimizer_adam(lr = adam_lr, beta_1 = adam_beta_1),
+  loss = "binary_crossentropy"
+)
+
+latent <- layer_input(shape = list(latent_size))
+image_class <- layer_input(shape = list(1), dtype = "int32")
+
+fake <- generator(list(latent, image_class))
+
+# we only want to be able to train generation for the combined model
+
+discriminator$trainable <- FALSE
+results <- discriminator(fake)
+
+combined <- keras_model(list(latent, image_class), results)
+combined %>% compile(
+  optimizer = optimizer_adam(lr = adam_lr, beta_1 = adam_beta_1),
+  loss = list("binary_crossentropy", "sparse_categorical_crossentropy")
+)
+
+
+# Data preparation --------------------------------------------------------
+
+# get our mnist data, and force it to be of shape (..., 1, 28, 28) with
+# range [-1, 1]
+mnist <- dataset_mnist()
+mnist$train$x <- (mnist$train$x - 127.5)/127.5
+mnist$test$x <- (mnist$test$x - 127.5)/127.5
+dim(mnist$train$x) <- c(60000, 1, 28, 28) 
+dim(mnist$test$x) <- c(10000, 1, 28, 28) 
+
+num_train <- dim(mnist$train$x)[1]
+num_test <- dim(mnist$test$x)[1]
+
+# Training ----------------------------------------------------------------
+
+for(epoch in 1:epochs){
+  
+  num_batches <- trunc(num_train/batch_size)
+  pb <- progress_bar$new(
+    total = num_batches, 
+    format = sprintf("epoch %s/%s :elapsed [:bar] :percent :eta", epoch, epochs),
+    clear = FALSE
+  )
+  
+  epoch_gen_loss <- NULL
+  epoch_disc_loss <- NULL
+  
+  possible_indexes <- 1:num_train
+  
+  for(index in 1:num_batches){
+    
+    pb$tick()
+    
+    # generate a new batch of noise
+    noise <- runif(n = batch_size*latent_size, min = -1, max = 1) %>%
+      matrix(nrow = batch_size, ncol = latent_size)
+    
+    # get a batch of real images
+    batch <- sample(possible_indexes, size = batch_size)
+    possible_indexes <- possible_indexes[!possible_indexes %in% batch]
+    image_batch <- mnist$train$x[batch,,,,drop = FALSE]
+    label_batch <- mnist$train$y[batch]
+    
+    # sample some labels from p_c
+    sampled_labels <- sample(0:9, batch_size, replace = TRUE) %>%
+      matrix(ncol = 1)
+    
+    # generate a batch of fake images, using the generated labels as a
+    # conditioner. We reshape the sampled labels to be
+    # (batch_size, 1) so that we can feed them into the embedding
+    # layer as a length one sequence
+    generated_images <- predict(generator, list(noise, sampled_labels))
+    
+    X <- abind(image_batch, generated_images, along = 1)
+    y <- c(rep(1L, batch_size), rep(0L, batch_size)) %>% matrix(ncol = 1)
+    aux_y <- c(label_batch, sampled_labels) %>% matrix(ncol = 1)
+    
+    # see if the discriminator can figure itself out...
+    disc_loss <- train_on_batch(
+      discriminator, x = X, 
+      y = list(y, aux_y)
+    )
+    
+    epoch_disc_loss <- rbind(epoch_disc_loss, unlist(disc_loss))
+    
+    # make new noise. we generate 2 * batch size here such that we have
+    # the generator optimize over an identical number of images as the
+    # discriminator
+    noise <- runif(2*batch_size*latent_size, min = -1, max = 1) %>%
+      matrix(nrow = 2*batch_size, ncol = latent_size)
+    sampled_labels <- sample(0:9, size = 2*batch_size, replace = TRUE) %>%
+      matrix(ncol = 1)
+    
+    # we want to train the generator to trick the discriminator
+    # For the generator, we want all the {fake, not-fake} labels to say
+    # not-fake
+    trick <- rep(1, 2*batch_size) %>% matrix(ncol = 1)
+    
+    combined_loss <- train_on_batch(
+      combined, 
+      list(noise, sampled_labels),
+      list(trick, sampled_labels)
+    )
+    
+    epoch_gen_loss <- rbind(epoch_gen_loss, unlist(combined_loss))
+    
+  }
+  
+  cat(sprintf("\nTesting for epoch %02d:", epoch))
+  
+  # evaluate the testing loss here
+  
+  # generate a new batch of noise
+  noise <- runif(num_test*latent_size, min = -1, max = 1) %>%
+    matrix(nrow = num_test, ncol = latent_size)
+  
+  # sample some labels from p_c and generate images from them
+  sampled_labels <- sample(0:9, size = num_test, replace = TRUE) %>%
+    matrix(ncol = 1)
+  generated_images <- predict(generator, list(noise, sampled_labels))
+  
+  X <- abind(mnist$test$x, generated_images, along = 1)
+  y <- c(rep(1, num_test), rep(0, num_test)) %>% matrix(ncol = 1)
+  aux_y <- c(mnist$test$y, sampled_labels) %>% matrix(ncol = 1)
+  
+  # see if the discriminator can figure itself out...
+  discriminator_test_loss <- evaluate(
+    discriminator, X, list(y, aux_y), 
+    verbose = FALSE
+  ) %>% unlist()
+  
+  discriminator_train_loss <- apply(epoch_disc_loss, 2, mean)
+  
+  # make new noise
+  noise <- runif(2*num_test*latent_size, min = -1, max = 1) %>%
+    matrix(nrow = 2*num_test, ncol = latent_size)
+  sampled_labels <- sample(0:9, size = 2*num_test, replace = TRUE) %>%
+    matrix(ncol = 1)
+  
+  trick <- rep(1, 2*num_test) %>% matrix(ncol = 1)
+  
+  generator_test_loss = combined %>% evaluate(
+    list(noise, sampled_labels),
+    list(trick, sampled_labels),
+    verbose = FALSE
+  )
+  
+  generator_train_loss <- apply(epoch_gen_loss, 2, mean)
+  
+  
+  # generate an epoch report on performance
+  row_fmt <- "\n%22s : loss %4.2f | %5.2f | %5.2f"
+  cat(sprintf(
+    row_fmt, 
+    "generator (train)",
+    generator_train_loss[1],
+    generator_train_loss[2],
+    generator_train_loss[3]
+  ))
+  cat(sprintf(
+    row_fmt, 
+    "generator (test)",
+    generator_test_loss[1],
+    generator_test_loss[2],
+    generator_test_loss[3]
+  ))
+  
+  cat(sprintf(
+    row_fmt, 
+    "discriminator (train)",
+    discriminator_train_loss[1],
+    discriminator_train_loss[2],
+    discriminator_train_loss[3]
+  ))
+  cat(sprintf(
+    row_fmt, 
+    "discriminator (test)",
+    discriminator_test_loss[1],
+    discriminator_test_loss[2],
+    discriminator_test_loss[3]
+  ))
+  
+  cat("\n")
+  
+  # generate some digits to display
+  noise <- runif(10*latent_size, min = -1, max = 1) %>%
+    matrix(nrow = 10, ncol = latent_size)
+  
+  sampled_labels <- 0:9 %>%
+    matrix(ncol = 1)
+  
+  # get a batch to display
+  generated_images <- predict(
+    generator,    
+    list(noise, sampled_labels)
+  )
+  
+  img <- NULL
+  for(i in 1:10){
+    img <- cbind(img, generated_images[i,,,])
+  }
+  
+  ((img + 1)/2) %>% as.raster() %>%
+    plot()
+  
+}
+
+
+ + + +
+ + +
+ +
+

Site built with pkgdown.

+
+ +
+
+ + + diff --git a/website/articles/examples/mnist_antirectifier.R b/website/articles/examples/mnist_antirectifier.R new file mode 100644 index 000000000..c29821da7 --- /dev/null +++ b/website/articles/examples/mnist_antirectifier.R @@ -0,0 +1,121 @@ +#' Demonstrates how to write custom layers for Keras. +#' +#' We build a custom activation layer called 'Antirectifier', which modifies the +#' shape of the tensor that passes through it. We need to specify two methods: +#' `compute_output_shape` and `call`. +#' +#' Note that the same result can also be achieved via a Lambda layer. +#' + +#' ## Data Preparation + +library(keras) + +batch_size <- 128 +num_classes <- 10 +epochs <- 40 + +# the data, shuffled and split between train and test sets +mnist <- dataset_mnist() +x_train <- mnist$train$x +y_train <- mnist$train$y +x_test <- mnist$test$x +y_test <- mnist$test$y + +dim(x_train) <- c(nrow(x_train), 784) +dim(x_test) <- c(nrow(x_test), 784) + +x_train <- x_train / 255 +x_test <- x_test / 255 + +cat(nrow(x_train), 'train samples\n') +cat(nrow(x_test), 'test samples\n') + +# convert class vectors to binary class matrices +y_train <- to_categorical(y_train, num_classes) +y_test <- to_categorical(y_test, num_classes) + +#' ## Antirectifier Layer +#' +#' This is the combination of a sample-wise L2 normalization +#' with the concatenation of the positive part of the input with the negative +#' part of the input. The result is a tensor of samples that are twice as large +#' as the input samples. +#' +#' It can be used in place of a ReLU. +#' +#' Input shape: 2D tensor of shape (samples, n) +#' +#' Output shape: 2D tensor of shape (samples, 2*n) +#' +#' When applying ReLU, assuming that the distribution of the previous output is +#' approximately centered around 0., you are discarding half of your input. This +#' is inefficient. +#' +#' Antirectifier allows to return all-positive outputs like ReLU, without +#' discarding any data. +#' +#' Tests on MNIST show that Antirectifier allows to train networks with twice +#' less parameters yet with comparable classification accuracy as an equivalent +#' ReLU-based network. + +# Because our custom layer is written with primitives from the Keras backend +# (`K`), our code can run both on TensorFlow and Theano. +K <- backend() + +# Custom layer class +AntirectifierLayer <- R6::R6Class("KerasLayer", + + inherit = KerasLayer, + + public = list( + + call = function(x, mask = NULL) { + x <- x - K$mean(x, axis = 1L, keepdims = TRUE) + x <- K$l2_normalize(x, axis = 1L) + pos <- K$relu(x) + neg <- K$relu(-x) + K$concatenate(c(pos, neg), axis = 1L) + + }, + + compute_output_shape = function(input_shape) { + input_shape[[2]] <- input_shape[[2]] * 2 + tuple(input_shape) + } + ) +) + +# create layer wrapper function +layer_antirectifier <- function(object) { + create_layer(AntirectifierLayer, object) +} + + +#' ## Define and Train Model + +model <- keras_model_sequential() +model %>% + layer_dense(units = 256, input_shape = c(784)) %>% + layer_antirectifier() %>% + layer_dropout(rate = 0.1) %>% + layer_dense(units = 256) %>% + layer_antirectifier() %>% + layer_dropout(rate = 0.1) %>% + layer_dense(units = 10, activation = 'softmax') + +# compile the model +model %>% compile( + loss = 'categorical_crossentropy', + optimizer = 'rmsprop', + metrics = c('accuracy') +) + +# train the model +model %>% fit(x_train, y_train, + batch_size = batch_size, + epochs = epochs, + verbose = 1, + validation_data= list(x_test, y_test) +) + diff --git a/website/articles/examples/mnist_antirectifier.html b/website/articles/examples/mnist_antirectifier.html new file mode 100644 index 000000000..59b3a8475 --- /dev/null +++ b/website/articles/examples/mnist_antirectifier.html @@ -0,0 +1,247 @@ + + + + + + + +mnist_antirectifier • keras + + + + + + + +
+
+ + + +
+
+ + + + +
+ +

Demonstrates how to write custom layers for Keras.

+

We build a custom activation layer called ‘Antirectifier’, which modifies the shape of the tensor that passes through it. We need to specify two methods: compute_output_shape and call.

+

Note that the same result can also be achieved via a Lambda layer.

+
+

+Data Preparation

+
library(keras)
+
+batch_size <- 128
+num_classes <- 10
+epochs <- 40
+
+# the data, shuffled and split between train and test sets
+mnist <- dataset_mnist()
+x_train <- mnist$train$x
+y_train <- mnist$train$y
+x_test <- mnist$test$x
+y_test <- mnist$test$y
+
+dim(x_train) <- c(nrow(x_train), 784)
+dim(x_test) <- c(nrow(x_test), 784)
+
+x_train <- x_train / 255
+x_test <- x_test / 255
+
+cat(nrow(x_train), 'train samples\n')
+cat(nrow(x_test), 'test samples\n')
+
+# convert class vectors to binary class matrices
+y_train <- to_categorical(y_train, num_classes)
+y_test <- to_categorical(y_test, num_classes)
+
+
+

+Antirectifier Layer

+

This is the combination of a sample-wise L2 normalization with the concatenation of the positive part of the input with the negative part of the input. The result is a tensor of samples that are twice as large as the input samples.

+

It can be used in place of a ReLU.

+

Input shape: 2D tensor of shape (samples, n)

+

Output shape: 2D tensor of shape (samples, 2*n)

+

When applying ReLU, assuming that the distribution of the previous output is approximately centered around 0., you are discarding half of your input. This is inefficient.

+

Antirectifier allows to return all-positive outputs like ReLU, without discarding any data.

+

Tests on MNIST show that Antirectifier allows to train networks with twice less parameters yet with comparable classification accuracy as an equivalent ReLU-based network.

+
# Because our custom layer is written with primitives from the Keras backend
+# (`K`), our code can run both on TensorFlow and Theano.
+K <- backend()
+
+# Custom layer class
+AntirectifierLayer <- R6::R6Class("KerasLayer",
+  
+  inherit = KerasLayer,
+                           
+  public = list(
+   
+    call = function(x, mask = NULL) {
+      x <- x - K$mean(x, axis = 1L, keepdims = TRUE)
+      x <- K$l2_normalize(x, axis = 1L)
+      pos <- K$relu(x)
+      neg <- K$relu(-x)
+      K$concatenate(c(pos, neg), axis = 1L)
+      
+    },
+     
+    compute_output_shape = function(input_shape) {
+      input_shape[[2]] <- input_shape[[2]] * 2 
+      tuple(input_shape)
+    }
+  )
+)
+
+# create layer wrapper function
+layer_antirectifier <- function(object) {
+  create_layer(AntirectifierLayer, object)
+}
+
+
+

+Define and Train Model

+
model <- keras_model_sequential()
+model %>% 
+  layer_dense(units = 256, input_shape = c(784)) %>% 
+  layer_antirectifier() %>% 
+  layer_dropout(rate = 0.1) %>% 
+  layer_dense(units = 256) %>%
+  layer_antirectifier() %>% 
+  layer_dropout(rate = 0.1) %>%
+  layer_dense(units = 10, activation = 'softmax')
+
+# compile the model
+model %>% compile(
+  loss = 'categorical_crossentropy',
+  optimizer = 'rmsprop',
+  metrics = c('accuracy')
+)
+
+# train the model
+model %>% fit(x_train, y_train,
+  batch_size = batch_size,
+  epochs = epochs,
+  verbose = 1,
+  validation_data= list(x_test, y_test)
+)
+
+
+
+ + + +
+ + +
+ +
+

Site built with pkgdown.

+
+ +
+
+ + + diff --git a/website/articles/examples/mnist_cnn.R b/website/articles/examples/mnist_cnn.R new file mode 100644 index 000000000..fc66693a6 --- /dev/null +++ b/website/articles/examples/mnist_cnn.R @@ -0,0 +1,75 @@ + +#' Trains a simple convnet on the MNIST dataset. +#' +#' Gets to 99.25% test accuracy after 12 epochs +#' (there is still a lot of margin for parameter tuning). +#' 16 seconds per epoch on a GRID K520 GPU. + +library(keras) + +batch_size <- 128 +num_classes <- 10 +epochs <- 12 + +# input image dimensions +img_rows <- 28 +img_cols <- 28 + +# the data, shuffled and split between train and test sets +mnist <- dataset_mnist() +x_train <- mnist$train$x +y_train <- mnist$train$y +x_test <- mnist$test$x +y_test <- mnist$test$y + +dim(x_train) <- c(nrow(x_train), img_rows, img_cols, 1) +dim(x_test) <- c(nrow(x_test), img_rows, img_cols, 1) +input_shape <- c(img_rows, img_cols, 1) + +x_train <- x_train / 255 +x_test <- x_test / 255 + +cat('x_train_shape:', dim(x_train), '\n') +cat(nrow(x_train), 'train samples\n') +cat(nrow(x_test), 'test samples\n') + +# convert class vectors to binary class matrices +y_train <- to_categorical(y_train, num_classes) +y_test <- to_categorical(y_test, num_classes) + +# define model +model <- keras_model_sequential() +model %>% + layer_conv_2d(filters = 32, kernel_size = c(3,3), activation = 'relu', + input_shape = input_shape) %>% + layer_conv_2d(filters = 64, kernel_size = c(3,3), activation = 'relu') %>% + layer_max_pooling_2d(pool_size = c(2, 2)) %>% + layer_dropout(rate = 0.25) %>% + layer_flatten() %>% + layer_dense(units = 128, activation = 'relu') %>% + layer_dropout(rate = 0.5) %>% + layer_dense(units = num_classes, activation = 'softmax') + +# compile model +model %>% compile( + loss = loss_categorical_crossentropy, + optimizer = optimizer_adadelta(), + metrics = c('accuracy') +) + +# train and evaluate +model %>% fit( + x_train, y_train, + batch_size = batch_size, + epochs = epochs, + verbose = 1, + validation_data = list(x_test, y_test) +) +scores <- model %>% evaluate( + x_test, y_test, verbose = 0 +) + +cat('Test loss:', scores[[1]], '\n') +cat('Test accuracy:', scores[[2]], '\n') + + diff --git a/website/articles/examples/mnist_cnn.html b/website/articles/examples/mnist_cnn.html new file mode 100644 index 000000000..5b734efc1 --- /dev/null +++ b/website/articles/examples/mnist_cnn.html @@ -0,0 +1,204 @@ + + + + + + + +mnist_cnn • keras + + + + + + + +
+
+ + + +
+
+ + + + +
+ +

Trains a simple convnet on the MNIST dataset.

+

Gets to 99.25% test accuracy after 12 epochs (there is still a lot of margin for parameter tuning). 16 seconds per epoch on a GRID K520 GPU.

+
library(keras)
+
+batch_size <- 128
+num_classes <- 10
+epochs <- 12
+
+# input image dimensions
+img_rows <- 28
+img_cols <- 28
+
+# the data, shuffled and split between train and test sets
+mnist <- dataset_mnist()
+x_train <- mnist$train$x
+y_train <- mnist$train$y
+x_test <- mnist$test$x
+y_test <- mnist$test$y
+
+dim(x_train) <- c(nrow(x_train), img_rows, img_cols, 1) 
+dim(x_test) <- c(nrow(x_test), img_rows, img_cols, 1)
+input_shape <- c(img_rows, img_cols, 1)
+
+x_train <- x_train / 255
+x_test <- x_test / 255
+
+cat('x_train_shape:', dim(x_train), '\n')
+cat(nrow(x_train), 'train samples\n')
+cat(nrow(x_test), 'test samples\n')
+
+# convert class vectors to binary class matrices
+y_train <- to_categorical(y_train, num_classes)
+y_test <- to_categorical(y_test, num_classes)
+
+# define model
+model <- keras_model_sequential()
+model %>%
+  layer_conv_2d(filters = 32, kernel_size = c(3,3), activation = 'relu',
+                input_shape = input_shape) %>% 
+  layer_conv_2d(filters = 64, kernel_size = c(3,3), activation = 'relu') %>% 
+  layer_max_pooling_2d(pool_size = c(2, 2)) %>% 
+  layer_dropout(rate = 0.25) %>% 
+  layer_flatten() %>% 
+  layer_dense(units = 128, activation = 'relu') %>% 
+  layer_dropout(rate = 0.5) %>% 
+  layer_dense(units = num_classes, activation = 'softmax')
+
+# compile model
+model %>% compile(
+  loss = loss_categorical_crossentropy,
+  optimizer = optimizer_adadelta(),
+  metrics = c('accuracy')
+)
+
+# train and evaluate
+model %>% fit(
+  x_train, y_train,
+  batch_size = batch_size,
+  epochs = epochs,
+  verbose = 1,
+  validation_data = list(x_test, y_test)
+)
+scores <- model %>% evaluate(
+  x_test, y_test, verbose = 0
+)
+
+cat('Test loss:', scores[[1]], '\n')
+cat('Test accuracy:', scores[[2]], '\n')
+
+
+ + + +
+ + +
+ +
+

Site built with pkgdown.

+
+ +
+
+ + + diff --git a/website/articles/examples/mnist_hierarchical_rnn.R b/website/articles/examples/mnist_hierarchical_rnn.R new file mode 100644 index 000000000..b5b6078b4 --- /dev/null +++ b/website/articles/examples/mnist_hierarchical_rnn.R @@ -0,0 +1,103 @@ +#' This is an example of using Hierarchical RNN (HRNN) to classify MNIST digits. +#' +#' HRNNs can learn across multiple levels of temporal hiearchy over a complex sequence. +#' Usually, the first recurrent layer of an HRNN encodes a sentence (e.g. of word vectors) +#' into a sentence vector. The second recurrent layer then encodes a sequence of +#' such vectors (encoded by the first layer) into a document vector. This +#' document vector is considered to preserve both the word-level and +#' sentence-level structure of the context. +#' +#' References: +#' +#' - [A Hierarchical Neural Autoencoder for Paragraphs and Documents](https://arxiv.org/abs/1506.01057) +#' Encodes paragraphs and documents with HRNN. +#' Results have shown that HRNN outperforms standard +#' RNNs and may play some role in more sophisticated generation tasks like +#' summarization or question answering. +#' - [Hierarchical recurrent neural network for skeleton based action recognition](http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7298714) +#' Achieved state-of-the-art results on skeleton based action recognition with 3 levels +#' of bidirectional HRNN combined with fully connected layers. +#' +#' In the below MNIST example the first LSTM layer first encodes every +#' column of pixels of shape (28, 1) to a column vector of shape (128,). The second LSTM +#' layer encodes then these 28 column vectors of shape (28, 128) to a image vector +#' representing the whole image. A final Dense layer is added for prediction. +#' +#' After 5 epochs: train acc: 0.9858, val acc: 0.9864 +#' + +library(keras) + +# Training parameters. +batch_size <- 32 +num_classes <- 10 +epochs <- 5 + +# Embedding dimensions. +row_hidden <- 128 +col_hidden <- 128 + +# the data, shuffled and split between train and test sets +mnist <- dataset_mnist() +x_train <- mnist$train$x +y_train <- mnist$train$y +x_test <- mnist$test$x +y_test <- mnist$test$y + +# Reshapes data to 4D for Hierarchical RNN. +dim(x_train) <- c(nrow(x_train), 28, 28, 1) +dim(x_test) <- c(nrow(x_test), 28, 28, 1) +x_train <- x_train / 255 +x_test <- x_test / 255 + +dim_x_train <- dim(x_train) +cat('x_train_shape:', dim_x_train) +cat(nrow(x_train), 'train samples') +cat(nrow(x_test), 'test samples') + +# Converts class vectors to binary class matrices +y_train <- to_categorical(y_train, num_classes) +y_test <- to_categorical(y_test, num_classes) + +row <- dim_x_train[[2]] +col <- dim_x_train[[3]] +pixel <- dim_x_train[[4]] + +# Model input (4D) +input <- layer_input(shape = c(row, col, pixel)) + +# Encodes a row of pixels using TimeDistributed Wrapper +encoded_rows <- input %>% time_distributed(layer_lstm(units = row_hidden)) + +# Encodes columns of encoded rows. +encoded_columns <- encoded_rows %>% layer_lstm(units = col_hidden) + +# Model output +prediction <- encoded_columns %>% + layer_dense(units = num_classes, activation = 'softmax') + +# Define and compile model +model <- keras_model(input, prediction) +model %>% compile( + loss = 'categorical_crossentropy', + optimizer = 'rmsprop', + metrics = c('accuracy') +) + +# Training +model %>% fit( + x_train, y_train, + batch_size = batch_size, + epochs = epochs, + verbose = 1, + validation_data = list(x_test, y_test) +) + +# Evaluation +scores <- model %>% evaluate(x_test, y_test, verbose = 0) +cat('Test loss:', scores[[1]], '\n') +cat('Test accuracy:', scores[[2]], '\n') + + + + diff --git a/website/articles/examples/mnist_hierarchical_rnn.html b/website/articles/examples/mnist_hierarchical_rnn.html new file mode 100644 index 000000000..8bc0c3c05 --- /dev/null +++ b/website/articles/examples/mnist_hierarchical_rnn.html @@ -0,0 +1,218 @@ + + + + + + + +mnist_hierarchical_rnn • keras + + + + + + + +
+
+ + + +
+
+ + + + +
+ +

This is an example of using Hierarchical RNN (HRNN) to classify MNIST digits.

+

HRNNs can learn across multiple levels of temporal hiearchy over a complex sequence. Usually, the first recurrent layer of an HRNN encodes a sentence (e.g. of word vectors) into a sentence vector. The second recurrent layer then encodes a sequence of such vectors (encoded by the first layer) into a document vector. This document vector is considered to preserve both the word-level and sentence-level structure of the context.

+

References:

+ +

In the below MNIST example the first LSTM layer first encodes every column of pixels of shape (28, 1) to a column vector of shape (128,). The second LSTM layer encodes then these 28 column vectors of shape (28, 128) to a image vector representing the whole image. A final Dense layer is added for prediction.

+

After 5 epochs: train acc: 0.9858, val acc: 0.9864

+
library(keras)
+
+# Training parameters.
+batch_size <- 32
+num_classes <- 10
+epochs <- 5
+
+# Embedding dimensions.
+row_hidden <- 128
+col_hidden <- 128
+
+# the data, shuffled and split between train and test sets
+mnist <- dataset_mnist()
+x_train <- mnist$train$x
+y_train <- mnist$train$y
+x_test <- mnist$test$x
+y_test <- mnist$test$y
+
+# Reshapes data to 4D for Hierarchical RNN.
+dim(x_train) <- c(nrow(x_train), 28, 28, 1) 
+dim(x_test) <- c(nrow(x_test), 28, 28, 1)
+x_train <- x_train / 255
+x_test <- x_test / 255
+
+dim_x_train <- dim(x_train)
+cat('x_train_shape:', dim_x_train)
+cat(nrow(x_train), 'train samples')
+cat(nrow(x_test), 'test samples')
+
+# Converts class vectors to binary class matrices
+y_train <- to_categorical(y_train, num_classes)
+y_test <- to_categorical(y_test, num_classes)
+
+row <- dim_x_train[[2]]
+col <- dim_x_train[[3]]
+pixel <- dim_x_train[[4]]
+
+# Model input (4D)
+input <- layer_input(shape = c(row, col, pixel))
+
+# Encodes a row of pixels using TimeDistributed Wrapper
+encoded_rows <- input %>% time_distributed(layer_lstm(units = row_hidden))
+
+# Encodes columns of encoded rows.
+encoded_columns <- encoded_rows %>% layer_lstm(units = col_hidden)
+
+# Model output
+prediction <- encoded_columns %>%
+  layer_dense(units = num_classes, activation = 'softmax')
+
+# Define and compile model
+model <- keras_model(input, prediction)
+model %>% compile(
+  loss = 'categorical_crossentropy',
+  optimizer = 'rmsprop',
+  metrics = c('accuracy')
+)
+
+# Training
+model %>% fit(
+  x_train, y_train,
+  batch_size = batch_size,
+  epochs = epochs,
+  verbose = 1,
+  validation_data = list(x_test, y_test)
+)
+
+# Evaluation
+scores <- model %>% evaluate(x_test, y_test, verbose = 0)
+cat('Test loss:', scores[[1]], '\n')
+cat('Test accuracy:', scores[[2]], '\n')
+
+
+ + + +
+ + +
+ +
+

Site built with pkgdown.

+
+ +
+
+ + + diff --git a/website/articles/examples/mnist_hierarchical_rnn.py b/website/articles/examples/mnist_hierarchical_rnn.py new file mode 100755 index 000000000..06de4171a --- /dev/null +++ b/website/articles/examples/mnist_hierarchical_rnn.py @@ -0,0 +1,91 @@ +"""This is an example of using Hierarchical RNN (HRNN) to classify MNIST digits. + +HRNNs can learn across multiple levels of temporal hiearchy over a complex sequence. +Usually, the first recurrent layer of an HRNN encodes a sentence (e.g. of word vectors) +into a sentence vector. The second recurrent layer then encodes a sequence of +such vectors (encoded by the first layer) into a document vector. This +document vector is considered to preserve both the word-level and +sentence-level structure of the context. + +# References + - [A Hierarchical Neural Autoencoder for Paragraphs and Documents](https://arxiv.org/abs/1506.01057) + Encodes paragraphs and documents with HRNN. + Results have shown that HRNN outperforms standard + RNNs and may play some role in more sophisticated generation tasks like + summarization or question answering. + - [Hierarchical recurrent neural network for skeleton based action recognition](http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7298714) + Achieved state-of-the-art results on skeleton based action recognition with 3 levels + of bidirectional HRNN combined with fully connected layers. + +In the below MNIST example the first LSTM layer first encodes every +column of pixels of shape (28, 1) to a column vector of shape (128,). The second LSTM +layer encodes then these 28 column vectors of shape (28, 128) to a image vector +representing the whole image. A final Dense layer is added for prediction. + +After 5 epochs: train acc: 0.9858, val acc: 0.9864 +""" +from __future__ import print_function + +import tensorflow.contrib.keras.api.keras as keras +from tensorflow.contrib.keras.api.keras.datasets import mnist +from tensorflow.contrib.keras.api.keras.models import Model +from tensorflow.contrib.keras.api.keras.layers import Input, Dense +from tensorflow.contrib.keras.python.keras.layers import TimeDistributed +from tensorflow.contrib.keras.api.keras.layers import LSTM + +# Training parameters. +batch_size = 32 +num_classes = 10 +epochs = 5 + +# Embedding dimensions. +row_hidden = 128 +col_hidden = 128 + +# The data, shuffled and split between train and test sets. +(x_train, y_train), (x_test, y_test) = mnist.load_data() + +# Reshapes data to 4D for Hierarchical RNN. +x_train = x_train.reshape(x_train.shape[0], 28, 28, 1) +x_test = x_test.reshape(x_test.shape[0], 28, 28, 1) +x_train = x_train.astype('float32') +x_test = x_test.astype('float32') +x_train /= 255 +x_test /= 255 +print('x_train shape:', x_train.shape) +print(x_train.shape[0], 'train samples') +print(x_test.shape[0], 'test samples') + +# Converts class vectors to binary class matrices. +y_train = keras.utils.to_categorical(y_train, num_classes) +y_test = keras.utils.to_categorical(y_test, num_classes) + +row, col, pixel = x_train.shape[1:] + +# 4D input. +x = Input(shape=(row, col, pixel)) + +# Encodes a row of pixels using TimeDistributed Wrapper. +encoded_rows = TimeDistributed(LSTM(row_hidden))(x) + +# Encodes columns of encoded rows. +encoded_columns = LSTM(col_hidden)(encoded_rows) + +# Final predictions and model. +prediction = Dense(num_classes, activation='softmax')(encoded_columns) +model = Model(x, prediction) +model.compile(loss='categorical_crossentropy', + optimizer='rmsprop', + metrics=['accuracy']) + +# Training. +model.fit(x_train, y_train, + batch_size=batch_size, + epochs=epochs, + verbose=1, + validation_data=(x_test, y_test)) + +# Evaluation. +scores = model.evaluate(x_test, y_test, verbose=0) +print('Test loss:', scores[0]) +print('Test accuracy:', scores[1]) diff --git a/website/articles/examples/mnist_irnn.R b/website/articles/examples/mnist_irnn.R new file mode 100644 index 000000000..c7a5a8176 --- /dev/null +++ b/website/articles/examples/mnist_irnn.R @@ -0,0 +1,85 @@ +#' This is a reproduction of the IRNN experiment +#' with pixel-by-pixel sequential MNIST in +#' "A Simple Way to Initialize Recurrent Networks of Rectified Linear Units" +#' by Quoc V. Le, Navdeep Jaitly, Geoffrey E. Hinton +#' +#' arxiv:1504.00941v2 [cs.NE] 7 Apr 2015 +#' http://arxiv.org/pdf/1504.00941v2.pdf +#' +#' Optimizer is replaced with RMSprop which yields more stable and steady +#' improvement. +#' +#' Reaches 0.93 train/test accuracy after 900 epochs +#' (which roughly corresponds to 1687500 steps in the original paper.) + +library(keras) + +batch_size <- 32 +num_classes <- 10 +epochs <- 200 +hidden_units <- 100 + +img_rows <- 28 +img_cols <- 28 + +learning_rate <- 1e-6 +clip_norm <- 1.0 + +# the data, shuffled and split between train and test sets +mnist <- dataset_mnist() +x_train <- mnist$train$x +y_train <- mnist$train$y +x_test <- mnist$test$x +y_test <- mnist$test$y + +dim(x_train) <- c(nrow(x_train), img_rows * img_cols, 1) +dim(x_test) <- c(nrow(x_test), img_rows * img_cols, 1) +input_shape <- c(img_rows, img_cols, 1) + +x_train <- x_train / 255 +x_test <- x_test / 255 + +cat('x_train_shape:', dim(x_train), '\n') +cat(nrow(x_train), 'train samples\n') +cat(nrow(x_test), 'test samples\n') + +# convert class vectors to binary class matrices +y_train <- to_categorical(y_train, num_classes) +y_test <- to_categorical(y_test, num_classes) + +cat("Evaliate IRNN...\n") +model <- keras_model_sequential() +model %>% + layer_simple_rnn(units = hidden_units, + kernel_initializer = initializer_random_normal(stddev = 0.01), + recurrent_initializer = initializer_identity(gain = 1.0), + activation = 'relu', + input_shape = dim(x_train)[-1]) %>% + layer_dense(units = num_classes) %>% + layer_activation(activation = 'softmax') + +model %>% compile( + loss = 'categorical_crossentropy', + optimizer = optimizer_rmsprop(lr = learning_rate), + metrics = c('accuracy') +) + +model %>% fit( + x_train, y_train, + batch_size = batch_size, + epochs = epochs, + verbose = 1, + validation_data = list(x_test, y_test) +) + +scores <- model %>% evaluate(x_test, y_test, verbose = 0) +cat('IRNN test score:', scores[[1]], '\n') +cat('IRNN test accuracy:', scores[[2]], '\n') + + + + + + + + diff --git a/website/articles/examples/mnist_irnn.html b/website/articles/examples/mnist_irnn.html new file mode 100644 index 000000000..81b1e25e4 --- /dev/null +++ b/website/articles/examples/mnist_irnn.html @@ -0,0 +1,203 @@ + + + + + + + +mnist_irnn • keras + + + + + + + +
+
+ + + +
+
+ + + + +
+ +

This is a reproduction of the IRNN experiment with pixel-by-pixel sequential MNIST in “A Simple Way to Initialize Recurrent Networks of Rectified Linear Units” by Quoc V. Le, Navdeep Jaitly, Geoffrey E. Hinton

+

arxiv:1504.00941v2 [cs.NE] 7 Apr 2015 http://arxiv.org/pdf/1504.00941v2.pdf

+

Optimizer is replaced with RMSprop which yields more stable and steady improvement.

+

Reaches 0.93 train/test accuracy after 900 epochs (which roughly corresponds to 1687500 steps in the original paper.)

+
library(keras)
+
+batch_size <- 32
+num_classes <- 10
+epochs <- 200
+hidden_units <- 100
+
+img_rows <- 28
+img_cols <- 28
+
+learning_rate <- 1e-6
+clip_norm <- 1.0
+
+# the data, shuffled and split between train and test sets
+mnist <- dataset_mnist()
+x_train <- mnist$train$x
+y_train <- mnist$train$y
+x_test <- mnist$test$x
+y_test <- mnist$test$y
+
+dim(x_train) <- c(nrow(x_train), img_rows * img_cols, 1)
+dim(x_test) <- c(nrow(x_test), img_rows * img_cols, 1)
+input_shape <- c(img_rows, img_cols, 1)
+
+x_train <- x_train / 255
+x_test <- x_test / 255
+
+cat('x_train_shape:', dim(x_train), '\n')
+cat(nrow(x_train), 'train samples\n')
+cat(nrow(x_test), 'test samples\n')
+
+# convert class vectors to binary class matrices
+y_train <- to_categorical(y_train, num_classes)
+y_test <- to_categorical(y_test, num_classes)
+
+cat("Evaliate IRNN...\n")
+model <- keras_model_sequential()
+model %>% 
+  layer_simple_rnn(units = hidden_units,
+                   kernel_initializer = initializer_random_normal(stddev = 0.01),
+                   recurrent_initializer = initializer_identity(gain = 1.0),
+                   activation = 'relu',
+                   input_shape = dim(x_train)[-1]) %>% 
+  layer_dense(units = num_classes) %>% 
+  layer_activation(activation = 'softmax')
+
+model %>% compile(
+  loss = 'categorical_crossentropy',
+  optimizer = optimizer_rmsprop(lr = learning_rate),
+  metrics = c('accuracy')
+)
+  
+model %>% fit(
+  x_train, y_train,
+  batch_size = batch_size,
+  epochs = epochs,
+  verbose = 1,
+  validation_data = list(x_test, y_test)
+)
+  
+scores <- model %>% evaluate(x_test, y_test, verbose = 0)
+cat('IRNN test score:', scores[[1]], '\n')
+cat('IRNN test accuracy:', scores[[2]], '\n')
+
+
+ + + +
+ + +
+ +
+

Site built with pkgdown.

+
+ +
+
+ + + diff --git a/website/articles/examples/mnist_mlp.R b/website/articles/examples/mnist_mlp.R new file mode 100644 index 000000000..633147fb3 --- /dev/null +++ b/website/articles/examples/mnist_mlp.R @@ -0,0 +1,67 @@ +#' Trains a simple deep NN on the MNIST dataset. +#' +#' Gets to 98.40% test accuracy after 20 epochs +#' (there is *a lot* of margin for parameter tuning). +#' 2 seconds per epoch on a K520 GPU. +#' + +library(keras) + +batch_size <- 128 +num_classes <- 10 +epochs <- 30 + +# the data, shuffled and split between train and test sets +mnist <- dataset_mnist() +x_train <- mnist$train$x +y_train <- mnist$train$y +x_test <- mnist$test$x +y_test <- mnist$test$y + +dim(x_train) <- c(nrow(x_train), 784) +dim(x_test) <- c(nrow(x_test), 784) + +x_train <- x_train / 255 +x_test <- x_test / 255 + +cat(nrow(x_train), 'train samples\n') +cat(nrow(x_test), 'test samples\n') + +# convert class vectors to binary class matrices +y_train <- to_categorical(y_train, num_classes) +y_test <- to_categorical(y_test, num_classes) + +model <- keras_model_sequential() +model %>% + layer_dense(units = 256, activation = 'relu', input_shape = c(784)) %>% + layer_dropout(rate = 0.4) %>% + layer_dense(units = 128, activation = 'relu') %>% + layer_dropout(rate = 0.3) %>% + layer_dense(units = 10, activation = 'softmax') + +summary(model) + +model %>% compile( + loss = 'categorical_crossentropy', + optimizer = optimizer_rmsprop(), + metrics = c('accuracy') +) + +history <- model %>% fit( + x_train, y_train, + batch_size = batch_size, + epochs = epochs, + verbose = 1, + validation_split = 0.2 +) + +plot(history) + +score <- model %>% evaluate( + x_test, y_test, + verbose = 0 +) + +cat('Test loss:', score[[1]], '\n') +cat('Test accuracy:', score[[2]], '\n') + diff --git a/website/articles/examples/mnist_mlp.html b/website/articles/examples/mnist_mlp.html new file mode 100644 index 000000000..a184b853d --- /dev/null +++ b/website/articles/examples/mnist_mlp.html @@ -0,0 +1,197 @@ + + + + + + + +mnist_mlp • keras + + + + + + + +
+
+ + + +
+
+ + + + +
+ +

Trains a simple deep NN on the MNIST dataset.

+

Gets to 98.40% test accuracy after 20 epochs (there is a lot of margin for parameter tuning). 2 seconds per epoch on a K520 GPU.

+
library(keras)
+
+batch_size <- 128
+num_classes <- 10
+epochs <- 30
+
+# the data, shuffled and split between train and test sets
+mnist <- dataset_mnist()
+x_train <- mnist$train$x
+y_train <- mnist$train$y
+x_test <- mnist$test$x
+y_test <- mnist$test$y
+
+dim(x_train) <- c(nrow(x_train), 784)
+dim(x_test) <- c(nrow(x_test), 784)
+
+x_train <- x_train / 255
+x_test <- x_test / 255
+
+cat(nrow(x_train), 'train samples\n')
+cat(nrow(x_test), 'test samples\n')
+
+# convert class vectors to binary class matrices
+y_train <- to_categorical(y_train, num_classes)
+y_test <- to_categorical(y_test, num_classes)
+
+model <- keras_model_sequential()
+model %>% 
+  layer_dense(units = 256, activation = 'relu', input_shape = c(784)) %>% 
+  layer_dropout(rate = 0.4) %>% 
+  layer_dense(units = 128, activation = 'relu') %>%
+  layer_dropout(rate = 0.3) %>%
+  layer_dense(units = 10, activation = 'softmax')
+
+summary(model)
+
+model %>% compile(
+  loss = 'categorical_crossentropy',
+  optimizer = optimizer_rmsprop(),
+  metrics = c('accuracy')
+)
+
+history <- model %>% fit(
+  x_train, y_train,
+  batch_size = batch_size,
+  epochs = epochs,
+  verbose = 1,
+  validation_split = 0.2
+)
+
+plot(history)
+  
+score <- model %>% evaluate(
+  x_test, y_test,
+  verbose = 0
+)
+  
+cat('Test loss:', score[[1]], '\n')
+cat('Test accuracy:', score[[2]], '\n')
+
+
+ + + +
+ + +
+ +
+

Site built with pkgdown.

+
+ +
+
+ + + diff --git a/website/articles/examples/mnist_net2net.R b/website/articles/examples/mnist_net2net.R new file mode 100644 index 000000000..0ab13681d --- /dev/null +++ b/website/articles/examples/mnist_net2net.R @@ -0,0 +1 @@ +library(keras) diff --git a/website/articles/examples/mnist_net2net.html b/website/articles/examples/mnist_net2net.html new file mode 100644 index 000000000..870d7f119 --- /dev/null +++ b/website/articles/examples/mnist_net2net.html @@ -0,0 +1,137 @@ + + + + + + + +mnist_net2net • keras + + + + + + + +
+
+ + + +
+
+ + + + + +
+ + + +
+ + +
+ +
+

Site built with pkgdown.

+
+ +
+
+ + + diff --git a/website/articles/examples/mnist_net2net.py b/website/articles/examples/mnist_net2net.py new file mode 100755 index 000000000..260f922f4 --- /dev/null +++ b/website/articles/examples/mnist_net2net.py @@ -0,0 +1,389 @@ +'''This is an implementation of Net2Net experiment with MNIST in +'Net2Net: Accelerating Learning via Knowledge Transfer' +by Tianqi Chen, Ian Goodfellow, and Jonathon Shlens + +arXiv:1511.05641v4 [cs.LG] 23 Apr 2016 +http://arxiv.org/abs/1511.05641 + +Notes +- What: + + Net2Net is a group of methods to transfer knowledge from a teacher neural + net to a student net,so that the student net can be trained faster than + from scratch. + + The paper discussed two specific methods of Net2Net, i.e. Net2WiderNet + and Net2DeeperNet. + + Net2WiderNet replaces a model with an equivalent wider model that has + more units in each hidden layer. + + Net2DeeperNet replaces a model with an equivalent deeper model. + + Both are based on the idea of 'function-preserving transformations of + neural nets'. +- Why: + + Enable fast exploration of multiple neural nets in experimentation and + design process,by creating a series of wider and deeper models with + transferable knowledge. + + Enable 'lifelong learning system' by gradually adjusting model complexity + to data availability,and reusing transferable knowledge. + +Experiments +- Teacher model: a basic CNN model trained on MNIST for 3 epochs. +- Net2WiderNet experiment: + + Student model has a wider Conv2D layer and a wider FC layer. + + Comparison of 'random-padding' vs 'net2wider' weight initialization. + + With both methods, student model should immediately perform as well as + teacher model, but 'net2wider' is slightly better. +- Net2DeeperNet experiment: + + Student model has an extra Conv2D layer and an extra FC layer. + + Comparison of 'random-init' vs 'net2deeper' weight initialization. + + Starting performance of 'net2deeper' is better than 'random-init'. +- Hyper-parameters: + + SGD with momentum=0.9 is used for training teacher and student models. + + Learning rate adjustment: it's suggested to reduce learning rate + to 1/10 for student model. + + Addition of noise in 'net2wider' is used to break weight symmetry + and thus enable full capacity of student models. It is optional + when a Dropout layer is used. + +Results +- Tested with 'Theano' backend and 'channels_first' image_data_format. +- Running on GPU GeForce GTX 980M +- Performance Comparisons - validation loss values during first 3 epochs: +(1) teacher_model: 0.075 0.041 0.041 +(2) wider_random_pad: 0.036 0.034 0.032 +(3) wider_net2wider: 0.032 0.030 0.030 +(4) deeper_random_init: 0.061 0.043 0.041 +(5) deeper_net2deeper: 0.032 0.031 0.029 +''' + +from __future__ import print_function +from six.moves import xrange +import numpy as np +import keras +from keras.models import Sequential +from keras.layers import Conv2D, MaxPooling2D, Dense, Flatten +from keras.optimizers import SGD +from keras.datasets import mnist + +if keras.backend.image_data_format() == 'channels_first': + input_shape = (1, 28, 28) # image shape +else: + input_shape = (28, 28, 1) # image shape +num_class = 10 # number of class + + +# load and pre-process data +def preprocess_input(x): + return x.reshape((-1, ) + input_shape) / 255. + + +def preprocess_output(y): + return keras.utils.to_categorical(y) + +(train_x, train_y), (validation_x, validation_y) = mnist.load_data() +train_x, validation_x = map(preprocess_input, [train_x, validation_x]) +train_y, validation_y = map(preprocess_output, [train_y, validation_y]) +print('Loading MNIST data...') +print('train_x shape:', train_x.shape, 'train_y shape:', train_y.shape) +print('validation_x shape:', validation_x.shape, + 'validation_y shape', validation_y.shape) + + +# knowledge transfer algorithms +def wider2net_conv2d(teacher_w1, teacher_b1, teacher_w2, new_width, init): + '''Get initial weights for a wider conv2d layer with a bigger filters, + by 'random-padding' or 'net2wider'. + + # Arguments + teacher_w1: `weight` of conv2d layer to become wider, + of shape (filters1, num_channel1, kh1, kw1) + teacher_b1: `bias` of conv2d layer to become wider, + of shape (filters1, ) + teacher_w2: `weight` of next connected conv2d layer, + of shape (filters2, num_channel2, kh2, kw2) + new_width: new `filters` for the wider conv2d layer + init: initialization algorithm for new weights, + either 'random-pad' or 'net2wider' + ''' + assert teacher_w1.shape[0] == teacher_w2.shape[1], ( + 'successive layers from teacher model should have compatible shapes') + assert teacher_w1.shape[0] == teacher_b1.shape[0], ( + 'weight and bias from same layer should have compatible shapes') + assert new_width > teacher_w1.shape[0], ( + 'new width (filters) should be bigger than the existing one') + + n = new_width - teacher_w1.shape[0] + if init == 'random-pad': + new_w1 = np.random.normal(0, 0.1, size=(n, ) + teacher_w1.shape[1:]) + new_b1 = np.ones(n) * 0.1 + new_w2 = np.random.normal(0, 0.1, size=( + teacher_w2.shape[0], n) + teacher_w2.shape[2:]) + elif init == 'net2wider': + index = np.random.randint(teacher_w1.shape[0], size=n) + factors = np.bincount(index)[index] + 1. + new_w1 = teacher_w1[index, :, :, :] + new_b1 = teacher_b1[index] + new_w2 = teacher_w2[:, index, :, :] / factors.reshape((1, -1, 1, 1)) + else: + raise ValueError('Unsupported weight initializer: %s' % init) + + student_w1 = np.concatenate((teacher_w1, new_w1), axis=0) + if init == 'random-pad': + student_w2 = np.concatenate((teacher_w2, new_w2), axis=1) + elif init == 'net2wider': + # add small noise to break symmetry, so that student model will have + # full capacity later + noise = np.random.normal(0, 5e-2 * new_w2.std(), size=new_w2.shape) + student_w2 = np.concatenate((teacher_w2, new_w2 + noise), axis=1) + student_w2[:, index, :, :] = new_w2 + student_b1 = np.concatenate((teacher_b1, new_b1), axis=0) + + return student_w1, student_b1, student_w2 + + +def wider2net_fc(teacher_w1, teacher_b1, teacher_w2, new_width, init): + '''Get initial weights for a wider fully connected (dense) layer + with a bigger nout, by 'random-padding' or 'net2wider'. + + # Arguments + teacher_w1: `weight` of fc layer to become wider, + of shape (nin1, nout1) + teacher_b1: `bias` of fc layer to become wider, + of shape (nout1, ) + teacher_w2: `weight` of next connected fc layer, + of shape (nin2, nout2) + new_width: new `nout` for the wider fc layer + init: initialization algorithm for new weights, + either 'random-pad' or 'net2wider' + ''' + assert teacher_w1.shape[1] == teacher_w2.shape[0], ( + 'successive layers from teacher model should have compatible shapes') + assert teacher_w1.shape[1] == teacher_b1.shape[0], ( + 'weight and bias from same layer should have compatible shapes') + assert new_width > teacher_w1.shape[1], ( + 'new width (nout) should be bigger than the existing one') + + n = new_width - teacher_w1.shape[1] + if init == 'random-pad': + new_w1 = np.random.normal(0, 0.1, size=(teacher_w1.shape[0], n)) + new_b1 = np.ones(n) * 0.1 + new_w2 = np.random.normal(0, 0.1, size=(n, teacher_w2.shape[1])) + elif init == 'net2wider': + index = np.random.randint(teacher_w1.shape[1], size=n) + factors = np.bincount(index)[index] + 1. + new_w1 = teacher_w1[:, index] + new_b1 = teacher_b1[index] + new_w2 = teacher_w2[index, :] / factors[:, np.newaxis] + else: + raise ValueError('Unsupported weight initializer: %s' % init) + + student_w1 = np.concatenate((teacher_w1, new_w1), axis=1) + if init == 'random-pad': + student_w2 = np.concatenate((teacher_w2, new_w2), axis=0) + elif init == 'net2wider': + # add small noise to break symmetry, so that student model will have + # full capacity later + noise = np.random.normal(0, 5e-2 * new_w2.std(), size=new_w2.shape) + student_w2 = np.concatenate((teacher_w2, new_w2 + noise), axis=0) + student_w2[index, :] = new_w2 + student_b1 = np.concatenate((teacher_b1, new_b1), axis=0) + + return student_w1, student_b1, student_w2 + + +def deeper2net_conv2d(teacher_w): + '''Get initial weights for a deeper conv2d layer by net2deeper'. + + # Arguments + teacher_w: `weight` of previous conv2d layer, + of shape (filters, num_channel, kh, kw) + ''' + filters, num_channel, kh, kw = teacher_w.shape + student_w = np.zeros((filters, filters, kh, kw)) + for i in xrange(filters): + student_w[i, i, (kh - 1) / 2, (kw - 1) / 2] = 1. + student_b = np.zeros(filters) + return student_w, student_b + + +def copy_weights(teacher_model, student_model, layer_names): + '''Copy weights from teacher_model to student_model, + for layers with names listed in layer_names + ''' + for name in layer_names: + weights = teacher_model.get_layer(name=name).get_weights() + student_model.get_layer(name=name).set_weights(weights) + + +# methods to construct teacher_model and student_models +def make_teacher_model(train_data, validation_data, epochs=3): + '''Train a simple CNN as teacher model. + ''' + model = Sequential() + model.add(Conv2D(64, 3, input_shape=input_shape, + padding='same', name='conv1')) + model.add(MaxPooling2D(2, name='pool1')) + model.add(Conv2D(64, 3, padding='same', name='conv2')) + model.add(MaxPooling2D(2, name='pool2')) + model.add(Flatten(name='flatten')) + model.add(Dense(64, activation='relu', name='fc1')) + model.add(Dense(num_class, activation='softmax', name='fc2')) + model.compile(loss='categorical_crossentropy', + optimizer=SGD(lr=0.01, momentum=0.9), + metrics=['accuracy']) + + train_x, train_y = train_data + history = model.fit(train_x, train_y, + epochs=epochs, + validation_data=validation_data) + return model, history + + +def make_wider_student_model(teacher_model, train_data, + validation_data, init, epochs=3): + '''Train a wider student model based on teacher_model, + with either 'random-pad' (baseline) or 'net2wider' + ''' + new_conv1_width = 128 + new_fc1_width = 128 + + model = Sequential() + # a wider conv1 compared to teacher_model + model.add(Conv2D(new_conv1_width, 3, input_shape=input_shape, + padding='same', name='conv1')) + model.add(MaxPooling2D(2, name='pool1')) + model.add(Conv2D(64, 3, padding='same', name='conv2')) + model.add(MaxPooling2D(2, name='pool2')) + model.add(Flatten(name='flatten')) + # a wider fc1 compared to teacher model + model.add(Dense(new_fc1_width, activation='relu', name='fc1')) + model.add(Dense(num_class, activation='softmax', name='fc2')) + + # The weights for other layers need to be copied from teacher_model + # to student_model, except for widened layers + # and their immediate downstreams, which will be initialized separately. + # For this example there are no other layers that need to be copied. + + w_conv1, b_conv1 = teacher_model.get_layer('conv1').get_weights() + w_conv2, b_conv2 = teacher_model.get_layer('conv2').get_weights() + new_w_conv1, new_b_conv1, new_w_conv2 = wider2net_conv2d( + w_conv1, b_conv1, w_conv2, new_conv1_width, init) + model.get_layer('conv1').set_weights([new_w_conv1, new_b_conv1]) + model.get_layer('conv2').set_weights([new_w_conv2, b_conv2]) + + w_fc1, b_fc1 = teacher_model.get_layer('fc1').get_weights() + w_fc2, b_fc2 = teacher_model.get_layer('fc2').get_weights() + new_w_fc1, new_b_fc1, new_w_fc2 = wider2net_fc( + w_fc1, b_fc1, w_fc2, new_fc1_width, init) + model.get_layer('fc1').set_weights([new_w_fc1, new_b_fc1]) + model.get_layer('fc2').set_weights([new_w_fc2, b_fc2]) + + model.compile(loss='categorical_crossentropy', + optimizer=SGD(lr=0.001, momentum=0.9), + metrics=['accuracy']) + + train_x, train_y = train_data + history = model.fit(train_x, train_y, + epochs=epochs, + validation_data=validation_data) + return model, history + + +def make_deeper_student_model(teacher_model, train_data, + validation_data, init, epochs=3): + '''Train a deeper student model based on teacher_model, + with either 'random-init' (baseline) or 'net2deeper' + ''' + model = Sequential() + model.add(Conv2D(64, 3, input_shape=input_shape, + padding='same', name='conv1')) + model.add(MaxPooling2D(2, name='pool1')) + model.add(Conv2D(64, 3, padding='same', name='conv2')) + # add another conv2d layer to make original conv2 deeper + if init == 'net2deeper': + prev_w, _ = model.get_layer('conv2').get_weights() + new_weights = deeper2net_conv2d(prev_w) + model.add(Conv2D(64, 3, padding='same', + name='conv2-deeper', weights=new_weights)) + elif init == 'random-init': + model.add(Conv2D(64, 3, padding='same', name='conv2-deeper')) + else: + raise ValueError('Unsupported weight initializer: %s' % init) + model.add(MaxPooling2D(2, name='pool2')) + model.add(Flatten(name='flatten')) + model.add(Dense(64, activation='relu', name='fc1')) + # add another fc layer to make original fc1 deeper + if init == 'net2deeper': + # net2deeper for fc layer with relu, is just an identity initializer + model.add(Dense(64, init='identity', + activation='relu', name='fc1-deeper')) + elif init == 'random-init': + model.add(Dense(64, activation='relu', name='fc1-deeper')) + else: + raise ValueError('Unsupported weight initializer: %s' % init) + model.add(Dense(num_class, activation='softmax', name='fc2')) + + # copy weights for other layers + copy_weights(teacher_model, model, layer_names=[ + 'conv1', 'conv2', 'fc1', 'fc2']) + + model.compile(loss='categorical_crossentropy', + optimizer=SGD(lr=0.001, momentum=0.9), + metrics=['accuracy']) + + train_x, train_y = train_data + history = model.fit(train_x, train_y, + epochs=epochs, + validation_data=validation_data) + return model, history + + +# experiments setup +def net2wider_experiment(): + '''Benchmark performances of + (1) a teacher model, + (2) a wider student model with `random_pad` initializer + (3) a wider student model with `Net2WiderNet` initializer + ''' + train_data = (train_x, train_y) + validation_data = (validation_x, validation_y) + print('\nExperiment of Net2WiderNet ...') + print('\nbuilding teacher model ...') + teacher_model, _ = make_teacher_model(train_data, + validation_data, + epochs=3) + + print('\nbuilding wider student model by random padding ...') + make_wider_student_model(teacher_model, train_data, + validation_data, 'random-pad', + epochs=3) + print('\nbuilding wider student model by net2wider ...') + make_wider_student_model(teacher_model, train_data, + validation_data, 'net2wider', + epochs=3) + + +def net2deeper_experiment(): + '''Benchmark performances of + (1) a teacher model, + (2) a deeper student model with `random_init` initializer + (3) a deeper student model with `Net2DeeperNet` initializer + ''' + train_data = (train_x, train_y) + validation_data = (validation_x, validation_y) + print('\nExperiment of Net2DeeperNet ...') + print('\nbuilding teacher model ...') + teacher_model, _ = make_teacher_model(train_data, + validation_data, + epochs=3) + + print('\nbuilding deeper student model by random init ...') + make_deeper_student_model(teacher_model, train_data, + validation_data, 'random-init', + epochs=3) + print('\nbuilding deeper student model by net2deeper ...') + make_deeper_student_model(teacher_model, train_data, + validation_data, 'net2deeper', + epochs=3) + +# run the experiments +net2wider_experiment() +net2deeper_experiment() diff --git a/website/articles/examples/mnist_siamese_graph.R b/website/articles/examples/mnist_siamese_graph.R new file mode 100644 index 000000000..0ab13681d --- /dev/null +++ b/website/articles/examples/mnist_siamese_graph.R @@ -0,0 +1 @@ +library(keras) diff --git a/website/articles/examples/mnist_siamese_graph.html b/website/articles/examples/mnist_siamese_graph.html new file mode 100644 index 000000000..2c9207867 --- /dev/null +++ b/website/articles/examples/mnist_siamese_graph.html @@ -0,0 +1,137 @@ + + + + + + + +mnist_siamese_graph • keras + + + + + + + +
+
+ + + +
+
+ + + + + +
+ + + +
+ + +
+ +
+

Site built with pkgdown.

+
+ +
+
+ + + diff --git a/website/articles/examples/mnist_siamese_graph.py b/website/articles/examples/mnist_siamese_graph.py new file mode 100755 index 000000000..7448e7fd6 --- /dev/null +++ b/website/articles/examples/mnist_siamese_graph.py @@ -0,0 +1,131 @@ +'''Train a Siamese MLP on pairs of digits from the MNIST dataset. + +It follows Hadsell-et-al.'06 [1] by computing the Euclidean distance on the +output of the shared network and by optimizing the contrastive loss (see paper +for mode details). + +[1] "Dimensionality Reduction by Learning an Invariant Mapping" + http://yann.lecun.com/exdb/publis/pdf/hadsell-chopra-lecun-06.pdf + +Gets to 99.5% test accuracy after 20 epochs. +3 seconds per epoch on a Titan X GPU +''' +from __future__ import absolute_import +from __future__ import print_function +import numpy as np + +import random +from keras.datasets import mnist +from keras.models import Sequential, Model +from keras.layers import Dense, Dropout, Input, Lambda +from keras.optimizers import RMSprop +from keras import backend as K + + +def euclidean_distance(vects): + x, y = vects + return K.sqrt(K.maximum(K.sum(K.square(x - y), axis=1, keepdims=True), K.epsilon())) + + +def eucl_dist_output_shape(shapes): + shape1, shape2 = shapes + return (shape1[0], 1) + + +def contrastive_loss(y_true, y_pred): + '''Contrastive loss from Hadsell-et-al.'06 + http://yann.lecun.com/exdb/publis/pdf/hadsell-chopra-lecun-06.pdf + ''' + margin = 1 + return K.mean(y_true * K.square(y_pred) + + (1 - y_true) * K.square(K.maximum(margin - y_pred, 0))) + + +def create_pairs(x, digit_indices): + '''Positive and negative pair creation. + Alternates between positive and negative pairs. + ''' + pairs = [] + labels = [] + n = min([len(digit_indices[d]) for d in range(10)]) - 1 + for d in range(10): + for i in range(n): + z1, z2 = digit_indices[d][i], digit_indices[d][i + 1] + pairs += [[x[z1], x[z2]]] + inc = random.randrange(1, 10) + dn = (d + inc) % 10 + z1, z2 = digit_indices[d][i], digit_indices[dn][i] + pairs += [[x[z1], x[z2]]] + labels += [1, 0] + return np.array(pairs), np.array(labels) + + +def create_base_network(input_dim): + '''Base network to be shared (eq. to feature extraction). + ''' + seq = Sequential() + seq.add(Dense(128, input_shape=(input_dim,), activation='relu')) + seq.add(Dropout(0.1)) + seq.add(Dense(128, activation='relu')) + seq.add(Dropout(0.1)) + seq.add(Dense(128, activation='relu')) + return seq + + +def compute_accuracy(predictions, labels): + '''Compute classification accuracy with a fixed threshold on distances. + ''' + return labels[predictions.ravel() < 0.5].mean() + + +# the data, shuffled and split between train and test sets +(x_train, y_train), (x_test, y_test) = mnist.load_data() +x_train = x_train.reshape(60000, 784) +x_test = x_test.reshape(10000, 784) +x_train = x_train.astype('float32') +x_test = x_test.astype('float32') +x_train /= 255 +x_test /= 255 +input_dim = 784 +epochs = 20 + +# create training+test positive and negative pairs +digit_indices = [np.where(y_train == i)[0] for i in range(10)] +tr_pairs, tr_y = create_pairs(x_train, digit_indices) + +digit_indices = [np.where(y_test == i)[0] for i in range(10)] +te_pairs, te_y = create_pairs(x_test, digit_indices) + +# network definition +base_network = create_base_network(input_dim) + +input_a = Input(shape=(input_dim,)) +input_b = Input(shape=(input_dim,)) + +# because we re-use the same instance `base_network`, +# the weights of the network +# will be shared across the two branches +processed_a = base_network(input_a) +processed_b = base_network(input_b) + +distance = Lambda(euclidean_distance, + output_shape=eucl_dist_output_shape)([processed_a, processed_b]) + +model = Model([input_a, input_b], distance) + +# train +rms = RMSprop() +model.compile(loss=contrastive_loss, optimizer=rms) +model.fit([tr_pairs[:, 0], tr_pairs[:, 1]], tr_y, + batch_size=128, + epochs=epochs, + validation_data=([te_pairs[:, 0], te_pairs[:, 1]], te_y)) + +# compute final accuracy on training and test sets +pred = model.predict([tr_pairs[:, 0], tr_pairs[:, 1]]) +tr_acc = compute_accuracy(pred, tr_y) +pred = model.predict([te_pairs[:, 0], te_pairs[:, 1]]) +te_acc = compute_accuracy(pred, te_y) + +print('* Accuracy on training set: %0.2f%%' % (100 * tr_acc)) +print('* Accuracy on test set: %0.2f%%' % (100 * te_acc)) diff --git a/website/articles/examples/mnist_swwae.R b/website/articles/examples/mnist_swwae.R new file mode 100644 index 000000000..0ab13681d --- /dev/null +++ b/website/articles/examples/mnist_swwae.R @@ -0,0 +1 @@ +library(keras) diff --git a/website/articles/examples/mnist_swwae.html b/website/articles/examples/mnist_swwae.html new file mode 100644 index 000000000..735070c55 --- /dev/null +++ b/website/articles/examples/mnist_swwae.html @@ -0,0 +1,137 @@ + + + + + + + +mnist_swwae • keras + + + + + + + +
+
+ + + +
+
+ + + + + +
+ + + +
+ + +
+ +
+

Site built with pkgdown.

+
+ +
+
+ + + diff --git a/website/articles/examples/mnist_swwae.py b/website/articles/examples/mnist_swwae.py new file mode 100755 index 000000000..80b34e216 --- /dev/null +++ b/website/articles/examples/mnist_swwae.py @@ -0,0 +1,203 @@ +'''Trains a stacked what-where autoencoder built on residual blocks on the +MNIST dataset. It exemplifies two influential methods that have been developed +in the past few years. + +The first is the idea of properly 'unpooling.' During any max pool, the +exact location (the 'where') of the maximal value in a pooled receptive field +is lost, however it can be very useful in the overall reconstruction of an +input image. Therefore, if the 'where' is handed from the encoder +to the corresponding decoder layer, features being decoded can be 'placed' in +the right location, allowing for reconstructions of much higher fidelity. + +References: +[1] +'Visualizing and Understanding Convolutional Networks' +Matthew D Zeiler, Rob Fergus +https://arxiv.org/abs/1311.2901v3 + +[2] +'Stacked What-Where Auto-encoders' +Junbo Zhao, Michael Mathieu, Ross Goroshin, Yann LeCun +https://arxiv.org/abs/1506.02351v8 + +The second idea exploited here is that of residual learning. Residual blocks +ease the training process by allowing skip connections that give the network +the ability to be as linear (or non-linear) as the data sees fit. This allows +for much deep networks to be easily trained. The residual element seems to +be advantageous in the context of this example as it allows a nice symmetry +between the encoder and decoder. Normally, in the decoder, the final +projection to the space where the image is reconstructed is linear, however +this does not have to be the case for a residual block as the degree to which +its output is linear or non-linear is determined by the data it is fed. +However, in order to cap the reconstruction in this example, a hard softmax is +applied as a bias because we know the MNIST digits are mapped to [0,1]. + +References: +[3] +'Deep Residual Learning for Image Recognition' +Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun +https://arxiv.org/abs/1512.03385v1 + +[4] +'Identity Mappings in Deep Residual Networks' +Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun +https://arxiv.org/abs/1603.05027v3 + +''' +from __future__ import print_function +import numpy as np + +from keras.datasets import mnist +from keras.models import Model +from keras.layers import Activation +from keras.layers import UpSampling2D, Conv2D, MaxPooling2D +from keras.layers import Input, BatchNormalization, ELU +import matplotlib.pyplot as plt +import keras.backend as K +from keras import layers + + +def convresblock(x, nfeats=8, ksize=3, nskipped=2, elu=True): + """The proposed residual block from [4]. + + Running with elu=True will use ELU nonlinearity and running with + elu=False will use BatchNorm + RELU nonlinearity. While ELU's are fast + due to the fact they do not suffer from BatchNorm overhead, they may + overfit because they do not offer the stochastic element of the batch + formation process of BatchNorm, which acts as a good regularizer. + + # Arguments + x: 4D tensor, the tensor to feed through the block + nfeats: Integer, number of feature maps for conv layers. + ksize: Integer, width and height of conv kernels in first convolution. + nskipped: Integer, number of conv layers for the residual function. + elu: Boolean, whether to use ELU or BN+RELU. + + # Input shape + 4D tensor with shape: + `(batch, channels, rows, cols)` + + # Output shape + 4D tensor with shape: + `(batch, filters, rows, cols)` + """ + y0 = Conv2D(nfeats, ksize, padding='same')(x) + y = y0 + for i in range(nskipped): + if elu: + y = ELU()(y) + else: + y = BatchNormalization(axis=1)(y) + y = Activation('relu')(y) + y = Conv2D(nfeats, 1, padding='same')(y) + return layers.add([y0, y]) + + +def getwhere(x): + ''' Calculate the 'where' mask that contains switches indicating which + index contained the max value when MaxPool2D was applied. Using the + gradient of the sum is a nice trick to keep everything high level.''' + y_prepool, y_postpool = x + return K.gradients(K.sum(y_postpool), y_prepool) + +if K.backend() == 'tensorflow': + raise RuntimeError('This example can only run with the ' + 'Theano backend for the time being, ' + 'because it requires taking the gradient ' + 'of a gradient, which isn\'t ' + 'supported for all TF ops.') + +# This example assume 'channels_first' data format. +K.set_image_data_format('channels_first') + +# input image dimensions +img_rows, img_cols = 28, 28 + +# the data, shuffled and split between train and test sets +(x_train, _), (x_test, _) = mnist.load_data() + +x_train = x_train.reshape(x_train.shape[0], 1, img_rows, img_cols) +x_test = x_test.reshape(x_test.shape[0], 1, img_rows, img_cols) +x_train = x_train.astype('float32') +x_test = x_test.astype('float32') +x_train /= 255 +x_test /= 255 +print('x_train shape:', x_train.shape) +print(x_train.shape[0], 'train samples') +print(x_test.shape[0], 'test samples') + +# The size of the kernel used for the MaxPooling2D +pool_size = 2 +# The total number of feature maps at each layer +nfeats = [8, 16, 32, 64, 128] +# The sizes of the pooling kernel at each layer +pool_sizes = np.array([1, 1, 1, 1, 1]) * pool_size +# The convolution kernel size +ksize = 3 +# Number of epochs to train for +epochs = 5 +# Batch size during training +batch_size = 128 + +if pool_size == 2: + # if using a 5 layer net of pool_size = 2 + x_train = np.pad(x_train, [[0, 0], [0, 0], [2, 2], [2, 2]], + mode='constant') + x_test = np.pad(x_test, [[0, 0], [0, 0], [2, 2], [2, 2]], mode='constant') + nlayers = 5 +elif pool_size == 3: + # if using a 3 layer net of pool_size = 3 + x_train = x_train[:, :, :-1, :-1] + x_test = x_test[:, :, :-1, :-1] + nlayers = 3 +else: + import sys + sys.exit('Script supports pool_size of 2 and 3.') + +# Shape of input to train on (note that model is fully convolutional however) +input_shape = x_train.shape[1:] +# The final list of the size of axis=1 for all layers, including input +nfeats_all = [input_shape[0]] + nfeats + +# First build the encoder, all the while keeping track of the 'where' masks +img_input = Input(shape=input_shape) + +# We push the 'where' masks to the following list +wheres = [None] * nlayers +y = img_input +for i in range(nlayers): + y_prepool = convresblock(y, nfeats=nfeats_all[i + 1], ksize=ksize) + y = MaxPooling2D(pool_size=(pool_sizes[i], pool_sizes[i]))(y_prepool) + wheres[i] = layers.Lambda( + getwhere, output_shape=lambda x: x[0])([y_prepool, y]) + +# Now build the decoder, and use the stored 'where' masks to place the features +for i in range(nlayers): + ind = nlayers - 1 - i + y = UpSampling2D(size=(pool_sizes[ind], pool_sizes[ind]))(y) + y = layers.multiply([y, wheres[ind]]) + y = convresblock(y, nfeats=nfeats_all[ind], ksize=ksize) + +# Use hard_simgoid to clip range of reconstruction +y = Activation('hard_sigmoid')(y) + +# Define the model and it's mean square error loss, and compile it with Adam +model = Model(img_input, y) +model.compile('adam', 'mse') + +# Fit the model +model.fit(x_train, x_train, + batch_size=batch_size, + epochs=epochs, + validation_data=(x_test, x_test)) + +# Plot +x_recon = model.predict(x_test[:25]) +x_plot = np.concatenate((x_test[:25], x_recon), axis=1) +x_plot = x_plot.reshape((5, 10, input_shape[-2], input_shape[-1])) +x_plot = np.vstack([np.hstack(x) for x in x_plot]) +plt.figure() +plt.axis('off') +plt.title('Test Samples: Originals/Reconstructions') +plt.imshow(x_plot, interpolation='none', cmap='gray') +plt.savefig('reconstructions.png') diff --git a/website/articles/examples/mnist_transfer_cnn.R b/website/articles/examples/mnist_transfer_cnn.R new file mode 100644 index 000000000..de42bdf58 --- /dev/null +++ b/website/articles/examples/mnist_transfer_cnn.R @@ -0,0 +1,87 @@ +#' Transfer learning toy example: +#' +#' 1) Train a simple convnet on the MNIST dataset the first 5 digits [0..4]. +#' 2) Freeze convolutional layers and fine-tune dense layers +#' for the classification of digits [5..9]. +#' + +library(keras) + +now <- Sys.time() + +batch_size <- 128 +num_classes <- 5 +epochs <- 5 + +# input image dimensions +img_rows <- 28 +img_cols <- 28 + +# number of convolutional filters to use +filters <- 32 + +# size of pooling area for max pooling +pool_size <- 2 + +# convolution kernel size +kernel_size <- c(3, 3) + +# input shape +input_shape <- c(img_rows, img_cols, 1) + +# the data, shuffled and split between train and test sets +data <- dataset_mnist() +x_train <- data$train$x +y_train <- data$train$y +x_test <- data$test$x +y_test <- data$test$y + +# create two datasets one with digits below 5 and one with 5 and above +x_train_lt5 <- x_train[y_train < 5] +y_train_lt5 <- y_train[y_train < 5] +x_test_lt5 <- x_test[y_test < 5] +y_test_lt5 <- y_test[y_test < 5] + +x_train_gte5 <- x_train[y_train >= 5] +y_train_gte5 <- y_train[y_train >= 5] - 5 +x_test_gte5 <- x_test[y_test >= 5] +y_test_gte5 <- y_test[y_test >= 5] - 5 + +# define two groups of layers: feature (convolutions) and classification (dense) +feature_layers <- + layer_conv_2d(filters = filters, kernel_size = kernel_size, + input_shape = input_shape) %>% + layer_activation(activation = 'relu') %>% + layer_conv_2d(filters = filters, kernel_size = kernel_size) %>% + layer_activation(activation = 'relu') %>% + layer_max_pooling_2d(pool_size = pool_size) %>% + layer_dropout(rate = 0.25) %>% + layer_flatten() + + + +# feature_layers = [ +# Conv2D(filters, kernel_size, +# padding='valid', +# input_shape=input_shape), +# Activation('relu'), +# Conv2D(filters, kernel_size), +# Activation('relu'), +# MaxPooling2D(pool_size=pool_size), +# Dropout(0.25), +# Flatten(), +# ] +# +# classification_layers = [ +# Dense(128), +# Activation('relu'), +# Dropout(0.5), +# Dense(num_classes), +# Activation('softmax') +# ] + + + + + + diff --git a/website/articles/examples/mnist_transfer_cnn.html b/website/articles/examples/mnist_transfer_cnn.html new file mode 100644 index 000000000..6da655d0e --- /dev/null +++ b/website/articles/examples/mnist_transfer_cnn.html @@ -0,0 +1,215 @@ + + + + + + + +mnist_transfer_cnn • keras + + + + + + + +
+
+ + + +
+
+ + + + +
+ +

Transfer learning toy example:

+
    +
  1. Train a simple convnet on the MNIST dataset the first 5 digits [0..4].
  2. +
  3. Freeze convolutional layers and fine-tune dense layers for the classification of digits [5..9].
  4. +
+
library(keras)
+
+now <- Sys.time()
+
+batch_size <- 128
+num_classes <- 5
+epochs <- 5
+
+# input image dimensions
+img_rows <- 28
+img_cols <- 28
+
+# number of convolutional filters to use
+filters <- 32
+
+# size of pooling area for max pooling
+pool_size <- 2
+
+# convolution kernel size
+kernel_size <- c(3, 3)
+
+# input shape
+input_shape <- c(img_rows, img_cols, 1)
+
+# the data, shuffled and split between train and test sets
+data <- dataset_mnist()
+x_train <- data$train$x
+y_train <- data$train$y
+x_test <- data$test$x
+y_test <- data$test$y
+
+# create two datasets one with digits below 5 and one with 5 and above
+x_train_lt5 <- x_train[y_train < 5]
+y_train_lt5 <- y_train[y_train < 5]
+x_test_lt5 <- x_test[y_test < 5]
+y_test_lt5 <- y_test[y_test < 5]
+
+x_train_gte5 <- x_train[y_train >= 5]
+y_train_gte5 <- y_train[y_train >= 5] - 5
+x_test_gte5 <- x_test[y_test >= 5]
+y_test_gte5 <- y_test[y_test >= 5] - 5
+
+# define two groups of layers: feature (convolutions) and classification (dense)
+feature_layers <- 
+  layer_conv_2d(filters = filters, kernel_size = kernel_size, 
+                input_shape = input_shape) %>% 
+  layer_activation(activation = 'relu') %>% 
+  layer_conv_2d(filters = filters, kernel_size = kernel_size) %>% 
+  layer_activation(activation = 'relu') %>% 
+  layer_max_pooling_2d(pool_size = pool_size) %>% 
+  layer_dropout(rate = 0.25) %>% 
+  layer_flatten()
+  
+
+
+# feature_layers = [
+#   Conv2D(filters, kernel_size,
+#          padding='valid',
+#          input_shape=input_shape),
+#   Activation('relu'),
+#   Conv2D(filters, kernel_size),
+#   Activation('relu'),
+#   MaxPooling2D(pool_size=pool_size),
+#   Dropout(0.25),
+#   Flatten(),
+#   ]
+# 
+# classification_layers = [
+#   Dense(128),
+#   Activation('relu'),
+#   Dropout(0.5),
+#   Dense(num_classes),
+#   Activation('softmax')
+#   ]
+
+
+ + + +
+ + +
+ +
+

Site built with pkgdown.

+
+ +
+
+ + + diff --git a/website/articles/examples/neural-style-base-img.png b/website/articles/examples/neural-style-base-img.png new file mode 100644 index 0000000000000000000000000000000000000000..bc0454ae33163ad3cac710afe35e748ee602297e GIT binary patch literal 142952 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 literal 0 HcmV?d00001 diff --git a/website/articles/examples/neural-style-style.jpg b/website/articles/examples/neural-style-style.jpg new file mode 100644 index 0000000000000000000000000000000000000000..633282da51a38dc89d76bf6429424d2a0bf7dc52 GIT binary patch literal 562577 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

V`N(=E0Z(J9zPF_Du&8ThRDc^CnhykGpw5i zNQ&!?_m4Bp;kUT*q3q9&_=70}m{slK)mq46!Vw4>Mz<-fcG^s^ilmX(3xLCl<2~0P&*OwWud4v8@kwWFMVA_rd@-pB9&(Q9QEZ4! z7-M@^mhBD~EruK95IeAnx6sKj`Bh@cVHuXY!H^B2;s$@T@p%CjCOCsH9fJed$YyqF zV|EpKEKMDa=re!)M0#w;2?;^TLXzJh+jap}I0QM_{ESN<4KTSPf*KRGICF zuM}YP^=<`!F%m~4eiT-(hO)9CVf5yz%2~j2oYh zo-uL=`zqNGD_U+5O%_C~Xh(676G~HAUc=#8k224~WP7VFJ0l1E zv~HYwL2+Sy@BTUgtzLwt9i-MK|M)T>d0L^)HJi&9A4W{rn{j#ZU>_axm;gQmF*t`0~a zkeV>kHdIry#~NE84JJWVje`(cG`2m37kz)d%o*O`&5$HWRfg(!%fIpKf29G-%qRf_o9Nn@gBStlm$t%L=m}?U}!f=c`Qzxn> z#PvEVy9zorf^2DK2C0z~Egy9zpn!MR7495fTO%8U zoshdQJR0KVXtQ=@^lXGug=DG|3tmEK+a5o?{{Xb|#d&Zz3a-cIvgj-=?TIHp; zQLgK+t^R`y>f+&?F~y9|N`z@5Ef_wZTDNb)g}0%NmpqB19FWAiGtTpsJne7J6a4kz&heo@riA(#WK|a3Jd}vN#S| zWOwx3>J$QstYg4sTgm=&GK)Y_<6??_{T0W7Q;$_9fqiUzOB(vv_?ilNX|l6(ppJ3{ zs>HCrtqK8j#3&?0pkGQ{yH)uvAKQ~Y8?g<^ax-?3$RvS{i4c2e4LcVZ1pszkv_#nb z=Dw^-)Uo{KPx7K30gAsT>+o32qNI&r*bCih&k7i?LZ9o~VW zK!l0nS}$p(NZ4-BCbJ^{0NPXicz2Pp%#8*^_pL`bnV`|)MFo=;??)nn#|pv^Yw+0s z^UV}SH)v*qB#~BTnckSQylACnaDXVa&1GxEyv}?RMU3ni<+O_N3tX7lBoa4ZM(7y? zwu+xkXmy>9?$2^0a%SR0nD3IxaMvM!O!|=71i6S!WU)Jw`UHyZ0h>1$01yL!s7Ioa zv0KB@q(*8fQmabT6HQ`H)P#PUkX4)28TnO@ZR9{|C00uhq!elmW3Mi)^$t=9y-y}rDx@^XA|+Lt2Q$ebgOIJkrZ08JYWQ?04qm9cv7jF(3tra z?#FbJ7Kx=|Cs>}oxZfa$bXF0-1LPAKHt0n}Dq=c4+xTT2^#VoNYg-HeErOZntWM%s_Bx93M*%)4m*i{s~ z5y*XLC2v#4Z4Tw+Rt%u3`&*ik-YN3VQoqcL9Ew^+Mjo3|d(fqQHiufImC>}ho06F# zE|v;7jR;_+)Ddz!5fX2G7>Ww}gApL_FB9&5R|0C#h@L;Dmj@l%mk5MC*$7fMdrfIw zL5-h<3^DspnK{dVt=>7WEIqzC^H7yWQl}ySv9E0=$8fSalhcEN?A)e^v7vv@i>{=zBcMvvAM7krJiUK5DUMtyn$B*{((f4bOks~ySl1zc}MoPGp#-J#1 zI<3Y?Ry8XaZX?_)m}APH0wt0VD-YEPV)dclm)qed z<5)SkTHU;XHY32qs-q`xvoR;Rj?w@HyYSI+9BDi!BQ!|zkXh3we#vsxppzW1MijWI z9vU9yDGCW*8R2%21zd#gRvIe??VANuFs0kpo6GJmY;h|Wy|Knr*-$dyY}jhDNX120 zCMj{LCF+Ep-pUP5xy;PyvT{GSoaQRy@>t}o@?d17fw8kzI+H2Gk&k-KvM?k<5D1Am zF+`Bd!R5(L>a<~F$vY~E6xt)mRSkZ`N=d`=3s^E$3d1~+ zQ@I8NlgZ%~ja)== z7%Bo$nq0&~X<8{O-3dxbV-UK<_9yn*F7GRzjSfasNg-I_Wv)fCsPw?eRB3^ZOp1s> zg&oUr-`gK(asAFu6A!YHA)$e$W$$NZ%NYsv63FIbXY(Xz@u4k_wbvcU^SCp=xp`3( z^JeBk=OgLrVTEyF07&^+3K=l*tpKSrUYOzK9FG%^#vFY7`I#huJ$66(0F~inm!tK$8i+T>o?L^$RWpX z)7X;VT1GpK($ev=h`HQc=-U}1k?~!?Qx|eIIe3$#L79-cnQ_1#f~zG5a?uC9csWb^ zNS2mc31@|pQqJ!HTY{riq*g)|NpZbF$cNrO+@BMT%}DYQnY-oH!j;X6Xp30RTWFPg zg3>0U8a6gOzUfTAYUjX2jSuRwD=;w`V=Lo5bksoesY?c5vO-s`pZxC7ltB)t>N_|Rzf;Ewm z{k8WOA;sO1BTa#u7|FpCEjy_s4pH&JEm(Up8AL?_8vs?s@xR67iC2P+qKMmnR#Z<9NAy}(~$j0yE$O8a|mb_KT)B0EVVhAJfEJ)Uuptlq_i*DK{}4*OKWBj*f(5KOK^J4CiHO z1ZCp^uCl_rs{kmE7@XyjsKx?lhdL|U>?mZ1cJV`x1oxjWDTX{j-}EWR8uMsC!>*-EP`GWOUO zc1N(WP%R`^u8e0rDJl<4a4W-UsT6V~@u?oO@zfc7t_~Jdv8&l5VPi)yFKu03HCDOp z7tj)I9XxUpKWQ`ZbGr$a7F2ctO&RT0W{eZ)k`O3K5&+`Sm+oEz25eqPQW>FqjC)lh zA)q&|!V3BUML?nTd?K22lx%%_eI)VWj z%7dK8rZYiFvLZt~MGvA^%)|=Eu{9gLBq+;|a3&z2wxi@dw~LDp7d|Edwll4|y( zqC$$2t%eF#I@YeW6yZ3(a^%T2Yr||A5_)DbBM|tRjkswcrJ;o`jZ&&wtl9jB3u5L^ zGD|OQnUtCox;WcqLK5jwDco{h$#ZstfRJaxlEW(XRwg#Jt^844MyKMXE2(&_n3@NZ zAs~>j*moA_W{t*|>NAAul6v^Y{t5+`#&vZB} zOB~#3Ln?xzk+Pv7k%qW`ap6OcA2bMtYJ!pdOkrf2D(+R?7)u#ip7Y4AJ5o7R%9ji- zUMcRZOX+CYNf{7@+$<)wi8rJylqQ?!;g=1Yh_GbAdWJ0la7ryzh04VU{ML|mJAZXD zk70eg%Eye+b`;4nPaZp_RMK|sT6PPBQq5TzQP}KP3*IwF9MEz2&BOC{JPS1NFKqGr z#vH7!(&9QK8AJhO8DW@Me^j1rILC!@L{R2DaorPlki`~SC54ga0+|sS5X4Tb2dN!+ zjxssDuB=f(g2uE+w?_l9`5lLF2Xq2}OEXbe;&X80th|JB<3Wp$-J?kyjbpicSxo(A zdu!T_O-pN+<@w1TK0xM7!H1=pSdnOh{;RtZDh9o;iIQER8Lk5L^oy3)ACTN?E4@1F`b2@hq_$DTM_)leo~V>a zJxS@RD+9LYdedIs;yGENhIf==kCkEsMr5YXJiq#C+^>6%ZS|MxMp0=KOQ!R z6O}tK&*I~$iY%877JOH3%XbR}NTs$uY7~v}xlBx#`iv9kgo>Z`(nR%|5gdu$f=Vd7 zm1Qjv1B~Z*xtMbc9kb)TLnOojJt|pe#*~GZ8C|=W(%fB1Dm4}{$jFBtJDEaM2&CI? z(*Ugtc%eH}W2}#D`=8o)JomHQhZxy#31Sm~98Dho003P;qQ6y)K{mU_ZYfZ%l-DcD za5855V~xm2NX4}Bn4&^MO&h#|EYGHKK?0;xzBmWDB!I4=$(!9AQ((+oFJ^iEq8{5) zIbB3{tS?jBQtn7rGQ_@>)MMN}{mp`RVASK|f<=-pi~|ga=Pp!`&d`pv3Tdez<2|d) z`-dJRXp`!vk{DF&xso+Ntrpun${3x+MzhB+?krpk9JK7uiGpEO2?-4pO_XmyDsGXX zhq#~x3~P3=J<-5%n6UA%OB|ykHUW_V`ep)Q7hY;gG!l8^2lU2j6gBaxJ%3rEiy zxd+ldW;USNrEB+ZZ2LcsOu%Z~;pkCuK21S+bc0xA^YJtIU>GZ<_ zS>laq#btt`LL)6!c@?B<(&p`k4oE`9c}$KvRg0BL&(y;9fR7*+$s)!BM-!q3@5Bw8 z+^hhuS0%&oPmjq(B#)7dfJBq9au+AHAPDm$&gMEYrb88mb+N@G;F=grFNCQa3dmLA zsg>f2gw>-i(iKnChzGJlYNIn28RNy_nSm! zdj|nl`;DG$bZWRVk9h8ORtdbNmf%-I<24rycMoB$r zSX2Nic>V{O9h{=Xl$vLbRX4CIWPz-aRjwAb>hu*+(^%O!+;(Eb@*$Qc#g0|5)S1!6 zD2#iV7n6z2P+>HHU;V=a|^=OkCeLiEp!{)BX@q3Q>in(y`K!I!t)k1{{U4I z*TvvsCW_z1Me!YJsbi)hlOQiDu!TfnK%tGR-DUA>*R3h37y8prlBzv8YXZ3&lJ$85 zMwZo>nLH>p%P%4CYsb3ii-1Ax)4cAxfQ!^!QZyyw zxkmap$n8fIxb~@pcM&6v>{cMJ{+cLV$)y+`yk8yeDZ}y-tc?^zJgi+8p)qMxht z0?ZnqHOjKg#QhwrNjvLovZ$3FC_*7pZ#R6lBsQp2WM@M6<|?GDq#_DN2{zG=?po@K zlfAnr(-<%&ktg)QiwZw~F^<9Kbs?d~xD`<$S85it13@P_?{9EoaU2#R9EL<|qQs7r zYgCoRM+yjRjF)SA67Eq6#rCo^{@uoLESXY+T&U558Kp@<`gjd&MYKrKkn*T=Vzy_q zxWM_c8v{=pEI5|X0QW7@Ow_tCt45C2AprwR$@BcoxqOQ$W-lWI1iL+!DFCP~x{cV; zMXI57$m2j~pBfgVki%3|bW%v4CX|Xn(Bq}kkHn*6sG{e&ll0^vIM}KYR0X+I5~V5_ zips)ST7;WiDG}kssSY}iOi@;V5)>2jODh*;20|U!l34f--#Zd4t0_*{aLkZf5y+fU41ehy=0lQXiI}94_X49BEA;XiSX=gzVxQKA9rJ9MEM2K=B3v5rdJ7xn1-9XBx*KMP&eu|#rv_cV~d@FbdM(;L!gn= zhXrDHa8|;A9f4-4*9(|)6#HwH5-P}hXky5XJBu5!Doiey`am|kZnf4MnVlqV?lX?N zt&+tubfWr0t90CtjiaTr@Z>fUwHuU-B#s(Hs^T!-iBerhkGKU*9u}bE2 za(y`SK(U3I0%_=-N|##th(HZNCxM%q#Em`E8zwF+v9W+QQ-@eX3Kp_iEsk>T-iH7v zEOqYOwZ>8Pwq*#U2DsdYFcG@|K)326^hwt5Sv_blGqKUitaNDH)uo69X2joI zo|wQ>TXn~BZz))0$CDkTPgRJ(cHDH{IwilDDd}Bu+;mJ~!_NtmjXK7z*xB(5)`%Dc$drv!WO&&C0ztwUG z$?okuO-UAbRIGVIFcn$sDzyM6RyZbT%e~77wSC>_<#1HZiy{V8$g4N65GvhS)ty8{ z2-p@?0n%011^v?YmQZ-hq+Ec+dd>9U)#P}rGDz-hS@GRWaTStyoLuT-_oUJ!k@60+ zVdg-!F`7VEUx4z-FFb69!4)kKH`d0i+7?#O7m#O3|l&0=ElmV(0*ZKRAMT@e5)KF)nQK9Ad|Z? zL=Ud_X9TET8+rOQ=UnB(8{o^91=?AK_&+QP#8+!NunN zx}1NyqYNX8c-N&_TtMs$GKXU)poX559grIBGvV`7=KEf>7^K#0SMfOE&+;RvX)&Hg zNS3{**;dgk+?NTDo0RIzsG$=oQ5^=rfM^+%66zHLRGsOlTbKUP$%g{clEV{;yG+K` zR#H4XlG493;k`-3o=DJstex9qV;p2xl zxTk-t$Rx!CX1Od9yAk*zQUD!oE#h=|w!(`eG6>vT0b?FKrqXY3#^?a<87o6eZK%Zu&k8pXnQr_?z`Et8cra>&eut0H6Hdb*wKX! z!D3iJ0Gp^br9z8~J9K9?15+HFsfGhFrNG3_Rcg+|)7pq_+E~cGq_b=^?|kuIix1nJHfJbh5i>Z9!w|WMmNgO?43cB7s$%ODA=RR1=;tew16o z3%w@caYsaJ?F^i!0S;#&?WV|#NgOlTkX$P&1V*o7NYccTF&s|lk)+Djvpz2)?S4={ zBNPP$j$@q4Sl(jJfYCdF*-KSc;OosVPN-Hi-6;EuF zEJDEKW$@D?OhkaGYpgXFB@_^>uBJ%b5KAjC1QJf08#Ng+aa~-!E)%f|g2uQzNU0hu zQMxRS(a9Rf?2C8)@!@iQmE?l?apOgJS=16`K&oc$&bHjDXl<)is>dVSlV-(bT)v@!%d4kF1gqlY{H-+85pkD zG)fD0<9Nf3$*Mc9usJ~-M+!WcG7uVD&R8%sX5NtqGke_AwQS(k9f!t`726$iob-pUHa>UY}~eNc{sBy zeX?(*8YhgbrB!kZA5gpo2)#AV@n&A+LOA7%#H%zRim5cYQc&PqRQ#;l=jPP-=W>HB@w^)$rCB%v{V)NgCvt8Q{x_SJGvQRib3ZpwNVCm=XkJ5;d8f#$iK} zCyTbsh?v;fN^5-i80hH|r>hW`N5(OZpy7TXbCk;X_Q#?B+TUVs7s z>A2KVbN=Q78JSzN6b~mMacjMDC<+s9uI8Q;)RN_OVY+_>+5nCgk`?G7%=rA|`p^rG=C-tfVBH-l$Q+`dd+B`+o^vHaM9(or54G zT*`t%R?|`zv^1@JDW!jM@sjbpf|@I}!U+nJr4fpTc`80)t9@t`TT>*@Ac}mvq)|1c z&{~aD$yH@Y)PZbsZ5`&uH@s@xueKUl@jc0gq{glRUfYi362{HAc)?_GLEVYUlS*6d z{xjSmWP>~~RAg2HT6Tdd^-`+Ai=z+J=%g?Ky}16Aa zO+f>F4o4r2`l(_O$brFGB4v;XXz4z5ep4+nfyFvTvB`Tg(UU`<{zs@ z9+k3M#W_}P!7A-oTu5KrKKb_ec)*rONDC+x8BjO^R}7^!f$b0f061@FaJk;zv$u!O&5PfP zH&aB1FFH8;%|p3q&}2j#^#hZaxFQDk_I!CfN^CG?ge(X5U`+}z|i^JF-ZT;4)RUT_%! zyB`e#qQrpP2$hyJN-HCgQOI%L-R1uP_dmZo9m&9~nK=lBZcZI)@v988eJb*#xu7%>DSvD27BVZbN7!MifRPD#DJ;quSi3 z9O`|E%VJ`8-A%2Bp0Fedm>p<9SBO5*IwMpguug)3xSsci)GZXZAMN5v$P`p>MRd}ADxh}1}y28Nbu)ujlkera^ za$)QOU2+2s)5Jvp?NHuTTV@ASq+C*qV^<ls;Onk;ihy$K!mQ~`h@ z#wCYS(@)94{j%e@thJ6#+{xdbRccddgp3riAQnY?khEkAgA7<>;-sE5fkEx7hhbD! zb+r;S4Nim#4->w!py06LiefGd5w49?5NRMWvNKlFLG>leO~KY!NG{{ZD8jya~F?BU^t0R}h#5hY&1b+wr;TcbeD^f=kUbLXNUVoMih zTc0LnQ&7rEx*;9CiDs_S@(|#`k?!bFLM1D7a4HrNL}dZrCTS`PqWqPn)!#4PKJ|^; z-8uO2mNGA{7)Vxz9C#EMW0}`ys9EB0SJO(L>z?6^$0dRLH8W(QGe;AZK*q>pXNsV{pbcxaK)KGX}UF zo+iDQ$EU|!b`L1M*i0=GD}mXNLo}*Igc`#xIR=#%1tY^=`SuqaS}rKvE*jYPHYReB z5-Z#T3|YjO@=&#_+Pa3C;pW7eKHn+DM<|bLgzH%52&U%nl$K{VQ~;}P{^s`lQQ5~~ zPT29GlKB}QAGzIeQ`!$Il98#f*h+<|8ph6PU5-W@rr-Ing_1B&`WO%2zPTT3#ga@J zc+zCXjX-0V*jE9w^}-iwIeUeDyVd`x+=Bb>6-vnnu3HATa@5G*Ylk-ppF^L_I8 z62l%ni&Gq81qE5^7J@}AjKZ|o_-^=-V|OtmU{#mY6fqC*wH1n@uKi0_!$<2Q890H0 zk!_)5YKYvBe@NZw5=TNSRt>hYn~nCF&CO~6X33Z=YzQhpMYrfdE%#G>2 zD2hywWK&gP-kX0bO=+*{Jn#134-PmZLiutCRT@$%Y>Fc!iPQoJZwhK&T0SY?H!63T z;KyMc2=d!=Ji!dk1+*KBfj=#FiyIs0u+B1;SR-JyyND7ih$ z&G39f&n_(0ov{RBGSb8bVEPB^9AKFDaByZX*T;H8l}@yh7DkEX9abhK%}I*w^?}Fpf7_(Nn;tBG0l&OkthXFE=tU?*(7Tj0y2vaqPH5>nu1Iz_chDDo-=2 zsk<8q5)JZ zZ2;8p$0j~+v?W;+BN2z{;^q>2%n+#W5kk@N7%gKpU9i^VgR4hAT**y?&wy zPo``fsLdWokpQ0_c&_aFS>sB*xV-nUXA-tVO0&l@u!3xR?{BI|>p>Ed@y>$ioOcv} zO6wyxiG`r|Tt(9>4p7~UnN!fixUAio94Zu*O=Vjct4AQ$C5b7N z#2O~LGC*sg+JPF{)|K+a&BwxvmG{530HeyRKqm3|1N`m-%s)^+F8S zZ(xz~FtH-YcS_3W(iTun5DTn~8q}2wbtu;*;N^9%^Ucj98KB8r9g|ikkq-=@!*g z^r;o`)+BK9xGHC9V!BCdabH7-vEc@0lvmSMLA_LlP{PQWkIWE}LP1(q+M0FfNjq+9 zs3WCF2!HUcKYc5#oCx6V_g))frAx~41yNH)7crr@idUi52OaPK0CXoA#>I^kQe(k1 zed&a1u&;JdSz`>eyaj0qUs|r(%$tJaaad!|Qgm0IQrMTa8g8kyMCPUbkVt7LX@7lawT$XHg^( zB#6w?fJGYnVnDY405WCyRUC{sd46phmXNDMjToXs7*kdVfLu&>Z5nl{soO`4_RUQ3 z$Z=%IWD=#;Q!6UPdbF?^Ryf=PY|j--CCjb@jF$=K%+1M6e0XChuI@^yl0p;!7UMQd zr)9cAqUJpsM0)<}m%x(dsUrm*?RMA>FQ!h6k6f}5IN8Cvx zP#r-y?5w!R9n943cV!*Fr*gNf*_@{snEbTJ3^7N1xeA{$(g4TlAu)(w^%P9zK{UTQ z#9BY<8-V5%xkruOeBqbrGc;Vg3FNtRR-(Zs1i#V2Bn%sZHUqKG8}2W zjg^NYGK*d@B%iN3mIVHS0vfw^-JJz`>z=|~DP=@2EDE48$fZnJsvM%WLNW)8-C@Tu zm19Gw;CFAW#h2?(v7c1C0^8xRVeh}W?_@x{U=$Sl~|MN7pbn9Nqx z3PD+wr9&cy1ey>E?oSUI$ns<50}@brRiR~-Sr6cts5Kw?J>B-#w>{GYHC{gM~J4qxtoQSJF~V<42tL;DWIZELX-N4R#i#1f94i7AkbuS zS+Ym|$2HWcR99t~hPhCRkbAw_uoOVVR+^iZ$jelpAvxi z4cG0;;F#_DT!wWag9b)`g<(QzMNkMoZnzAGnTUy<$?*$j;CWYVa~x~NuY&e8Oa*N> zmT@uK)bTslW#u7ox#XN+*j+bUZ{0^?SV6_g)=9((JH#rEV37BucO&62YqOocs( zFHxIcZtkA=!XMT0ik9T>Oi_NI(pSUR;YwU81E_S6>C*bm4Q zbOu5oZsd6}qMuYFSPulo+Rpkex^Q5NTR?>tI&$Q zdu8!QEx4a22MGNf_N}C76|^ z4K5nP;)fPt&wO~ANY-UAVl>He#_bx#8FkzcpkK2aI%;e*!-phFw#bV*#KC+A>ZF&3 z-{qhb-nH6qu8OpJENtit4)Pm1}oKiTK2Z|roFY7 z#6*6kDa>s0D)%K42?=(z3vIfTt5?ixiR68k%KZoT2aE2mbT=1SV>2~png+R~#*s`) zC0e`^1yp1bvDYh&KN^v8aY%ln8s&CXHFe6zVOA(XXSKdp?n121OR}Vwi^+qE$SvG> zp4LY{F~?xtxuQxLaxh5mq;*VwcK#?l%Ju+~FhiFo|t_p`#3 z7Z9sc3jm|iiYSCugr5y#9BjOT&?loR{3zv?>Q!A?QM&@3h?=zD)N8IvUODp3_@NCW zgaaD8NXq3UJ;?iy-3jQUsg9MFFj$cytoTEBj z=qpwyGaH7%5#qdqxsxxa^%+Cjr2hauQz0x?KD471*qL#7{?0}-EN;@s#!1!GdV||Y zSTh!702=|bdR%dj5t@RmE+7FGBxh%Gj2ijC-YC^SPD(t7vK(qp?f11ZS}f=>9$d_* zl*=YEniFv}kNSpcRz+)!kU)nVvy>`66iAl0DK& zfgPM&6@BOZ&Ef?;%gl31~RuW;-gxvD~U`X#?)@roHQm1Lo!?I`Tc& zc6d)>CBl{hWOgash=UUoW#UWNTs6#R1O{Smx3?@(u%*?K zC#o82fag8OmcQ1M1|QM&G+`x1?5tq}USw}TRJd7qBvcS^u;a$ZdEyU~lB`;2v4a(o zHK}14>3O#G6cMoBT()<#v82X2FONyfz%(G>cVnq0y1q7G8P3Z=J+ShKUWvMH0 zKIZqilqpS3o9)a_)Uz>vsgzwQVP58L zPjDJUq?qv{jJzUY-9(yGa&sQuk0rACcrsV>mNo#L}pQEJ_%pxj=f=*`7>l7~`?t zOL!dYy!oB@@1>e|QUks?R5?uOLnAqkxiO;#2=!(4C~bdA<0K886xYDvm(>bF?yFa; z%8~*=MFhFsm{Wgk<>g^m(DH~RWgj$BMu?>k;*3P-S&b_1di$-A=Y6O%qtYNLTI(^ zwJC4`s7E5Q}N8JxA(GJ{)1LhB9)oRc0IW-NNEIE`w20d2Z%UmbhK zHfEO~NCVcDW-g+sP<<{eoje2V)c3CBgMz%#;m2XarsH_*! zT16lg6<~Vn7A^~%%97B3L8UJnpzC_Gs>5%Du_=*ju@&6%S==r<;obz2B$M1za^wYh z8_=M(!`0C08F;={OnkY*OB}LCFgCIpT&1t|M*jeaEi1Kk2O^w@dm;p8W`X7bf(xEC zLRF3Q0HZIen;o~CC~)|Z$0bWu5K1f6irKY11x<9|XVqjB2+=Dk_!^U1_;jY58xCtJ zEn|u)WP&wh^{KU(Te!5U5Rxl0%o$BJoUNW>_l`4Jb0LH>n`sd#RziV|uNf&Iy4IjN zP7jt=kKDLmGo{p;fCKdyb5JzuYhgzMKH@xV8p`T_Y0t{`@+5_GVPI;qz|wZgWG~@s z#Q~|@e5-KLS#d->sRkx!*`blw;K*%~-xZY|4M8C5B3v5sd~No~u95dq$NqFf^rr*D zXqLNFs_m&EpPUgyl75IW$|H#=PhgT?B?6i^)CQ0dR44;iOUiKk20LTUOHV`Gf=G%Q zn3@;uM$Pzpf+vg*kk@Pz?C;~D_=2(#y0(&UVC2o0?H4lHg5=6E%}YqIJ$vz~yU10Itxt1PENeojQ zSVGRKJBAm4qJ$13q9N@)t{o}(wHV-%^w}|FtF%-!B&qmXNn$#9Q(U~#$yYPT$9uPu zOV6rRG?~G`e$;nsoo@|4|sz-qw%QR91b6gn<9D!aT1FoBduJUE?>sCR8((T z={W2N)3{`BshM8!+$vd`ppj}NBMndJoVh~MoHgpw?- zJi z+4aok!G$z@ZVWis*jUV1cB94tV~v%*S(X3`^dd=_kCuStVh@wb75bT6P)b#+99Dnj z_REVmrL~}Y2=@+T64w`p#4jR(x8CY<=*;9R%+Y}V05bjM0t=%xFIPsv7M2g?;4OyU40ir?`5uBf#kOz*L zBFFCX1|^xV2+uB5_sJpsFwJ@wFrx(|Mx$-%ukHpvJBvO?6$VO(`^e6h#Zb}7S3oR8Flf*q)(rtIb8B#w0=gf2!jAE+cWPUTp}k=MA}lmvnY zzM5G|#l}yNF-2&x%O7%5OB%Zn0AEo)dvw<)K0InB#VtEjn$8wrt`w4PaI9HCr^-i- zM;XTBcH?Z0aOF-2V8Ej?n73p4wx|~C-u~$Nk>8)_@ll_oQAH~Qzk{q$Y)v}+HSGl8 z=2EUQ5W17xjV7IEc8GyrmLB6U6&D2q&yT~njHtwdc3^!uGD`AgFt5yjFpX7fN#rpS z8BIA^v02s_@sboiRTV(r9^p#;`p(FWm9p|VNFhci(qM)&-?hK`;65DG-Q8 zk)zfYkSLXBnIW>Wuv@GwLY7;%RV9jo*t~BImBeHl!>nb-Yt<`F<&E!7o+DDh z?cB`sjeWn#b`MUrOu)2tui}r@w&dy@UQ^o{?-4cb%CRX>q>EN5Btv(LxGQ$mU9{PA zaXC$lrneXc4M+u2M3URS0yVFRIv(B1MI@-GH6yxIZW&}7*V07}q~db&Re4}RD$ht{kHwM5ptr`fr9~^OOwLaX zOUGkcf^r$BlCS8Bk$qg;Rs z99#_^K406|{D-z?h{HRiLR$JeQ&jBI#_T(yGQ+ba9UAZmi#yv`XFJ=g+5w|^8!8~a zmZBP5B3l+UVqQu$(jA7dJ=cfG%a_6^dS+vnDPUk8EVy=P%|N*%2#3WdqX_cs|bk}SI*dPhJ?gjokomdb5Pjek$f zM2Qu{hwhnUeb_6T0?Vq3>2%1rz~7+x6B=c%IMU z#HlKa{Nq^T`lwHnNqDn2+z1gqOYH*r=oK__lTcHIav862%D5knJQ zV$F+`m{>M%NY!3pdXhVi(lv~snYu`}(OcAY$Ya6oAvBV(j$*yDZ*<%Yk~uT7y`*+w zHdAsHLpG(0ndN7fj718NV5vruLIEAdkxXHHERFkOl~60bUVjUVJ_jEfm21HPQ}I=T znWSU*hyWd`b;9zzAZwc>W4ok5BWojKk_IHo&K9c1LF(&T^uXn_IPa*$hbA{U9*>T)YNm1X)k%?S^Pxw7b(0RAK3%-lDxV5g6H`DLYiFvqocJT1h-9XeqY!uTf1! zCvql*7%~|J#y0a(Rb;qV(o=8D4%+4ZkKEHij|v17b&2F;U|pQ0%*!Nq4y$!O8p*=V z%k5!gLEHxAONv&C8HiOT?xfeqYCg{?kvzS?sRU~>$i&4}Qafx3G&c0{HP^V~To0v@ zK>Z7g80>1YGc{Yea6Q_SSF4Ivn#h1HS;!;rulQ>=iAGk86Izp0@%t(J^*?QkIGi$s zVy|_;jn<64I)kH=iOyo;Nh6z1%o?<-8DwqMPT;Cl$tv|)gPjf*e7RX!GG5WENh8YY z0--N409t?mw#69SstS-ZvVGx~9~;9&VB%ddBYvf`Cc<`gQZcsqJRWXk0x(3SP zIQ$6W#YtWkg>H^njsasDp;B|X?o&MDdsUi7SOv(EOigZvFbS44 z{7y-Q!5)^Or!B`v$U~38O9Yap9>XCNkYvee31(SX@7yBw8%9)JUL)JQR#(zN0+#N@ zVUjZxMVX|UMPl$vAFfntcrD#dk-f9+%ztno$Rg+(NF`EGENLz*ti@4SU)>G8rAjW< z<>cfz1)rGg_S#ITK8Fq^VhqWU@vcnyNM)!jtr?I|TBEK^zVzoKkARdaLiXzDS(udi+ zek@4J@jDSyVSp@9rLz(lP!E)lTvO7^ajqr~1;RJXh8jM^ETpPX9nHjnL%*K5SO(H# z7m-yvZmW<&W5V)++cK(GwhsL(wRP^;G2-q?siLs%at+ZQZw0@J+8pzSSb4G%f$1Qcu zN69h;!OZ~~n|AKnC5`s=8mw|x{{W-5o780EXJw!0Jcc^FHT)9BJ2?=O;Ty!!SH=Y1GP8 z1q>~b=~iYv8Q{S&zQt$&3Otz<3OOBCzL82AY9DQJ9D$cVH#ua^keaj@@qVd_3u|W%C%fr69!6#_YL)Gn zfSrXwwf8ZSI>uRl7RuNOB150`8Dost^@{W;YW+YRphjZFwW11{rg* zduSOLpi=JawJ91srP<=Qq#k?7ls)x9@UuJxy$vZur4m?4a? zK|V6rTX?sW08}#Et#GZRQ%je~{{V2g!3xIC&g;d?3em&JE<}<^6h>GpGOxgBOq|pi z(HjGT7U>X+)!NjJSd<|55lS9`jSia|o#K-P*aZ@Z?~RN6t8_|QB4~Y5ph5YDrpnFBM z;V&fVFjlk)Xa}K*A&RU_!2>XkFaf8jhT57=JCyqDBOxmgl_Li}yp-qT#S0*`W5&5IqqZEOW&u^ziH((&sY|QiG9bw2(X$JDrIslc)fBm-4-?qb ze@&i8u9_}W-7~|76w0zi1&dzXYatRP4R48iu4=bCIq}!g@vua)y-G(7l01O=6jov#^N}B=qMqI`Q<=Dy-i($mSC~Q->B4Pb&UZ!&5H{kKPTywETx#S zW@RiGF5);nBq;@f+?r5V1KDZG!u*y5%PvMbHAX8*b*UqxS|4?+V6~Tg$5_KFws6`t zygM=iK^6`0Izv_@cm zP2v&987q8YE@c@lkM2xNzBW55xj6HrwlyOXmdA~jDAHQM?IHydD|(7hnDQ>c$WRDD zRhl&*l@cqek{JFQlvDV;ARgX>wLCILi4x@h0Jm6>QJU#oD)<{cG57=<*C&zA_Ehsq zsO)>0P!`%-!BjFb*i^WVl%vnv`2vBE$Jz36ydy-&$#ukZxHC|eZkHv--^?qnBQOX_ z$H-X}N}-bI{bHcjm8CuvuJqO~D8wXlLLJO14`L#n#l>>=aOe@ znWS|H>`So)(P*mWNGzk}^E%8Xp+TSk`RZ9!eNqrl+@OD#@76kEGNkgnR4ghKcN7|p zs(oIOUCx^ul*%kZ_ZYQ>l0OjdZ7vN}RH36QqcCM7Urp`aJtWOtjM4&-q8_Zy!`1K` zeY*am$;UGZWUO*qv5=r)ctfmwZs;iYX$BT@H53P=9%Vf?k$Ht(wBM5&=K@x=mXHW^CSkk2HlJ^%C{^|Wg zBPD}{s->Q+nP{>#^l0J7Q*8(lss?>z=1jjy7>&eJN~vG;W7zHUUpCnA= ztZ270D>9T|W06^AkJVKSw69aIVtevTrurT>Y>3E0DJC{}5YEH`Z&=&1WG0p+&AzAQ zRlnTi$B%yWLP&U3{w=zt{{Z=FgYeg0<>PrdNB+>}7|7<ypml|8*&Db+Q z_bC>UtbR`z$u1&Dk4VZ&@erU|9QtO5A|eVntIJXuje@@3_oT8k{Aq`=Sp8q8VIZYw zV_56i$WlE|7$DO}Dh9e4TE30JsAJt$S~z5o_XWGstG=^%enZ=aRE@eU#wQZ5E8vP+2qrgmVY zvUdd|leZChEDl~-r3#xCA`TOc%PkHPeMVgALXq7ev)S98+#Jjd}@h^)p*39Bgnv&Yj%t4d8|Bqw?-y2BFizgs3TZoW|4aT05QVG z3jj{zSzO*ef4K5_cE|0~9His%ksGQ7#)!<4u@yNH$=`czc>)rq+&QPu#EK9ee5{$L zQ86W%6T0$TvD7ODJ2+(o(^k!i!!*ph2gIP?@|eiFo;P&xruv_b;=TRA@w|>)vR%i^ zHdGBGD*^&ZbkG3BLm^inih{e1K1U<$W#u@8v<#?aIf4YOOa@GPP1$v-1d|v?8T~;j zGK$YXxA{)TCF#EwR|xYE4e_LAqV#)`f=4Y%ki9jRmhsPvohef6g2iwamN*`pe8Q^M zyXriAk8Y+&c#-5~?5i@8R`9OWm_z`*RhCNwGAk82&duT74o)a>B3jO4c-RpnciAvl zLa7llH3exQW>h?U*?3I&Ge#Cd3ap9{n#~JZtQE%Z9I?kFevr$(b;xm07I+&CWsFt3 zQ{(Q;(C*PekqdU@?JZ=MFl15scI)Xl#*6x9QVAlMD;T790Lc`r1yXjF{{T^6Ugp)N zq0G<3mONPlB#html__gHgY?ply`&c&;t?n#bQqkU37-~xtn`*5$#XI>1s0`ISyVHC zsxJWDOF`2!@{{6Zp)9j@$SBu@3o?kd%-&s;&Ng~O(P*6A}!2+N+rALc+ zbfNIUkCx+j%*DL84I{=?LfWBYO4d~*l1q9v>s?_@&T!EcUg9FILs1O~dr^Q@eTCqw z_;0A@_SPOc<1#(Qs0_zzwymQt8w=X}eq;n7T&QG_ zLl_b}(d2iw_Euyn#%g@R+LhKMJl`RO#$wM9D-MSI1KGJU6wn zIXtuoZ z#KXAYdOSv+969m%9GJmdZS2fcm1I+l=^bP$K~&hAiWU{Fn~>t<%HzGjti{S9$2AA} zMkXx`t_d|lg3{CtQ&QZPc0Noz;Q7azO%CW204+j-p@*hAq;TLZOCO2 z#d!-PMQdur@9G8#2{EmAAguy31CQ;`eMqB)`WPWxwN{WfWei41S(%Vkm zQ>0FmuT~9O?W7z(7m=Hgu8Y~Mje3zL%mYx1fMDn3wuBqOTz{hWrY9d0#-dhvYUWl@ zU1$>KhP1JOtAV{O-#$J=pGi5{jA$U^@TGTkN?Y}lF##e~4$UC4@0QclPN6E)xB=F_ z1ZjCs>u!1UjglCdtj0pLy~GRYX@qxvqg_f1S97fSrnpqiRVks18 z7NQs1Fo^GI71Vk5KUzv02xv$tw+ylDiUj0+l2~#_;%!AGctt ztZ;y2$d|>VNXN=Y<74B{_~K2=D8u6;l>``6jx<4Sw2t9%mP!Khl6_@}6l!SV^BHl; zml7<45++qa6I<(*zFc)nw~@_WhqjG!T)5ub!BLwTf7clFNF#czNr?;os&@l7Zt>rj zxM!Z*mNn!DH=85-*Ek0dcZr=NE&y!FR;!H&{8;I1j(sX6V5_WN8xaO)JRL=LQpr{~sSLHK zp;O_m4~pb*OnE7bksPtLOEkFCv5li^ZR;IBNy&RI^NYJyL>H(~K{{Ro9Q^wDZ z&BqL(A1IQCji32aMJN=F{M)(QiIi5(;F0MVI?DE5atOv4CMB5ux<^vy35Vl~Hw^gh zNU;>h7%^Dd%HlKBMZ#nfS$zPZewi^B>kG9NhSjJfifMR0S;66^{Y-gHWh-yTJEo=d|rz-$UK zVpxilln97*y^vZJmE-o`I_D8yENoTBSmK455Xj9dG?te_QQSsrO4HL#a#7*or}bRf z-?&j^?nGLs&m&1}o`e82myuq9QB`%H!25d^WW{#|TMkJlrojNkfM+p zD9W&HW?=h!1WC#`U}~mifHf+@iVTvcfsu=)Xjs>59y$o%#*Z!)6G;+;MwJvWomuad zr8|asK<&t0G^!xhCLblpNO>D>3lgZvmesw9J1BY(31h#9mZ9Rfo-Q=tOUmz(o2FlILwPKYb-7#@E_(M3xxFnKGI|qM4 zEo^4i1_!cvDS3Wbulm6ns=@UNmIgCN{Ktiik^0(L<4bOg&HB19r#zV4aEuu3oy)tD z7F=@c+pBjjs#Bm8BUv1aBw5)qp44$;N<0*{hqW! zl2%T@p<`r>Ot|X30alZ9(_l33$l*oD`?2p~!O246%bv-X6Zq%)0Nte=) z`aOo7l?Y{#w*!slB7`<1xh6Q;t7FWuF=Q^c80A!Q z@Ecm^P(bvNtUg4<_?*PhDaXnzW5|+FLYVS9XSH}J7)Xby-8KhKc^N6qz~&~H6;YHF z2JOzIg=&*k$c!YF1zM_FtAmjjW<0hs!66iz8#3YvMgCgPwHMLrYfy!)+Q-b}M!AUfQ9-K8r)Q3vF{rm{YmDbOoG2VE zT_P};*-}D#atws+PZ3e+G%OZ?{w)k{TZ;lQP_oG_81$ntC|Y$CqO%==G}QS`o0pL} zj*6!+tZ^c+K83M;L#UCilY47mP!Sj0JfaCj6`ZMs~GBHEsaXlo}F%GG z_afG?hM|oV5nZ+?<4rVN?-Pz^W^1HZc$zb{Kthh)De_mQ^xH@?eUF-n+_D)b>`byo zenWc|V5WwOsKtK~>8yNJ_M#XT(yLq8fNHf?Qy4V_sR_4QH8qQe#(N(wNWcmhJ4RFv zwJB=t;1x!nGd12kW3h&Jig8oY$llcqd>w;R%TmdSm54++CmXnBh{*H$NnA+Po*2lj z7HQHnlG4B`g)AT2L;B~qLaHeL0Mw$&WOki?q7Y#98vu?V`^WQo!B+nO+`NO}aq=}z zG$h`{>?;y6Z&H8=mO$W*;}zCcXE)0I0h88JFs+p!^LxE1Ukii$DXoLP6r_|dvoQQ4 z_npSQp^wLNzteI=^19>%60z*W&SDWaqE7PFEMlPbyV5k6zTxAclbS%cwja#td0-@XKjH)AS zm>8#_B&NaMtkolt$@czkHz6b^8d05!Bao-5OfnJzP3BotNgZ}&yLaXNiykCg9N2LK z$Gf{n-HQ0+a<>in9fl5(#s{=)fS!0nw*}!o{HZUp% zM<2&=oQ?x2We}AP2Gs6%XxAF`A$saH4KxbR6DDRsP#+c6+3SrgKvZcx94X{qx2 ze1G)yR#ftePl=H>6mXY}HaoMtOf6SC(i$2AB=VXo zRZ#9Vk1UWZY|HY4Qa=9xFD-H2-*+n<`N1k!s-oE?NTD5es6BPaU`ztf5qp3hl4=EG z{{ZO7Ur*X~n*iFR5I)-Ir<6o~&2i8?e>>ZMOKBiw9}3j|%IWd2u@*dn5qqm>o`@Br zH?owg8jkGMF`d;-PP5;Zf=s`1K1(Jp7*71_j}?sXC?SJiI~HjfoT*wUR4S{H&+{CZ zeC%@YMU9IAVHvTIH1ks5s$2V$M;oP)sU_b~dsit;+=N!7a3Z{LprB=)qbAoR8i`yI zdWGLyuOZ9jLmxdnCODu;X*+=+0hNfewIvG7s!WL;Rn>0?Qgc~$ob`_2@~L2ujg|~J zSP(-ov0Q;T2JCeVrGs+b=g3?!lb0XThCfr09In(Y+fYoiL+ECa%b4T!LV|FB#xZgs z!Ifeym5?oVjf)0&;WIJ5c75ZLM7@NCT-_55O`XN??S;lkD>=xWgH1cHS))cb8C&sW zPDo9bC0NA=^!_&mXU&#MwarMPC$2>E5XMaZ=GSQUEM&75Qnr6G{|JkJ@mj(?PulmtFoE;JwR;p>b4M zD_y$ETz1>1%F-g*el4yWp5qjKB#0J8LFy93$GZ?76kl4u@Y0*tLjxlt{jA7XvoI|m zap*|4zJ#8~jeizA@=}*;li+zQnBvbzF_kK*`l`XMN_tBcRUoiys1y~h@=1OEUoZ&~QOdF(j9>S+!PY|M!)Vpt^}n^Z`BQQJ?EuC}0pdTAxY=DQq3lxAqr zWQZ~-3Z-OmYn{s|KAo#wwG=S%kY(WZ-PuJc3igjnFrZo*bthR_ z9M8BgxW8{~U;(?*6nhedm{Lztmh?u_3xEiE>nHj?B;4n^mg66C=&{3JaNLb5H7Z9&w~XJdUPEN(6`*kzcb z?nXMXWJa`6-G^V5sAzIIyeF0jWhV?SL5z2!4|MFY8ZtaL20)EXh#{?UCjy!49vc;T zp~hDTKP-6?yBBJuJp_|RrF7l?FNntW%xBRR&x)#~4@$IPsXGtC38)l3b(1d{4kS{9 zit!9mmhDS&2O?&y(Zs}eBv}6dPVrId*B1vj&drjfD<(X1eK1QD2)lHQhGq47nU>o0 zHP$}~Bs{9eC@LV!3>8(Wx@9G9RwJo#T5U~YKMBOSW|GiK6BK{~%^R=xf0N;EgAzO2N$J%3QfXQuY#J5Wo9JOGDQ;H>-w;& zx`w>O$gX>9X$>9n3;zI?Xe*5t7rPbktWgsLc^THwrt)ZA*a22z4K}A;LJnHxPFx>D z#+6?x8_%cVTGytr;m`K&Bsh**z1)#3vDu3>tNgCsHbS(>i}j11|%%BtR%qY`KamzVcmNS=BI?E`dZd;nd$r949(+gH@5ZD70NtU@_Kg)Jbu zADNO$EGVLah`lSh*Rrza65S=O-Fh2iWhGy4Bj9VAxqJysS)CrJp=N?= zRH&fztDl5DoFK5j0Ge>PjXSTWtf0q#pgIq z?nXn>IoBlPM$F$P);Nv!^#(qgTBNxPtoWmJT%`>gV$UFXh2+KDxCAmqA?^jfIJ$U~ zQOU7SYQ zk2^0T8v0|1EdA;L2W;PJ_QTRk*?nNBxB^ENjNjW{Uki_wgSpRS#*Q3$B`XuW%iOwY zh0TuyXiT1f&X)~FWA^-}B^E4(kdqrmR;=>0Z9o^)dt{}2b)CuO`%3~yo-(sY(>`k= zwZTlb06Rd~UAvEBNY6mAu{nt(DH}D!qJJ(jq=K>k00-sY2NKLPh>qJv|?Zy;E1fHTe_LnAHb46xS zowSBB1Dj%MESVBHAS{HWD9tM@mW9(}@xGjO7Ap}DJwDb{;V{PhL^}uYo$t54zS+#kj;Sa8 zIhu;hL(-DO);vr$HDzU`x?_bEv6nLwFbcKt`MsjEsa zF~Va9r>!! zc&w}|^CBfqJfen6(yHkH04pmi2L_^*w9&%=x&GeFVa8IDM*gN=ls%@bZU+064u2E2 z)MKB;geWa(U~bvCf7EPw3m^ynnYoY6N@?*Xn;R<`RFe#$K_K-#xjOCvHk$ePX|bdB z_C1WQNV$wuLvw(V%h^>{daBTM@zGeK#g7qaNQ@x?eA>z=_)?Yg+f(Lof2qa8C`Oq8 ziW5`0fusZKZP*bX&f%6a)|08RILMxC#3Tu2@KOH&Q4-+tkI1XB-lcqVG9k@8wsuEx ziUoC~vQ>$YgK_Og@g0YcYE{=1_~)Dhg1D-^VGG(x_ma-Ojo23zGVPr?TKw}p6a zOWWKEw*uzqKN!;;uIS6Skq@vmEjMu0v@spF_QTr6Ja5ts}g&SGvwG8m+06-9^wak3B~9mGG$kXt12xOvOBaLMi*Zhbp`<=}vlc@;@)gvB3Daw9+iNT-ETJc2<7 zAzV<_;IUzH5*`a8GT8EhjABV&))bqSBZ@-HB9v=htG3n2idH~sV*h9iK9PLdY=7YlFC%J3=)-h^9i8e%;i$LsM$!WO3Y#pGL3`<_?@)#Ky9;owGsL|9QT zAs)pfG?BSos3}PjzBTY7~v{QnO(?0$dcqpTBhx(lZnT1Cm#qi1eG2Bprur?gfU?P%eb1>Y2H8spkQof-Mf+tnVLF5)_K0Zs^3%_y>+B2KrdiPO8b-E(K{Q}@B zHOuqak@3-cQwk@4sV&eoP(T(m>l#j9 zgybd1X=j2~Mf!;YA{0S96 zjOey1$ns5;R^5m=oie#afm0wWq|%jVi5`q%0f=7YSMYz^Zg2Zx?r&;)t0d(J z`1sM@7}F3*E6F)z#g-M0IU4rKiQ$yIapOxP1{#%Sr*a8QOu#aR^#vtWfMBFhfN4jxXcc?kkCxqI}zzOBnjL%yR!=HC}~mu z0J#1A?g%lk<8w!p+)Ks@G2!BZ71WX2Rtnh-DN zGDcSASXKLb-zk;#jr5SgFFQ`y$T1TfEkej3jaKRBv~EEiHnA-l$>BJ^UOb8pY|?_c znSq(4DDog>g9tqt#5IwKsb$n0XBcCHE?HVObrfJ#OHwduwLJr{YIULCS72g&MnW)h zBTK|?p(7?qs!Wnya~36!;ZTWa)R~-&wqj}pTt`=8I>ylx^8u`^c+_NZ ziInof0-8h$Epq19L&p5`Em6nuKeYh0(dRdl1$ zi^FHiW8>zTf>&_0K)|(jF-Z{-yZDs`n^Rnu6D-gdJhKM^D(k5sYx(Q5y=_#F42-E1Gd}SpwdwUGj;p$!Id)ApZcN6^XTd zI>*E3}w`fEa6#=~5f2RxB3WbsHKVgn&{7lmYCP|$#CYH7Hj*EQ|T zf)#OR{VVoWVL}m^uI@)6X(P441_lIExkcx_jmfOP(C5aFBN(#=lOA};y(5v7y7uU= z8{AnyDmv6*%bAwXiOX@)V&^}jsF0tMy)sG{j#w%d~QBtu03hC zG{)egqaRRWODfczwIVV%WQKxD3#zP1Ne4QmXMY! zS5=jyP}Ej5yxm(yx!k@pDUMWZ?~jhOG6>B(h$C-Pi0zih(yrAcF5172&UtZJ)JM=G zM9pcK5KR@7&;#Or8k#931)yT4Bo$|p%dK`KAdqyBu@>$3VDa2867jilmv(CsXsuQ; z1Kct)8gA+gV%aUBHq@^%%kz@R&f7^Sd8Cz@ny3uj6fhtd>Xa1>M?u5;8;@zS6~9(V z2}p71e^KU_WmFq1Y`1r$Wk`YDfx+UlTPNJpio1tI$W|nRQZh$vR1f`DQ!}t61R|$V z&(ADV@+!OI0whbz-T_;?&JRE&D+wdH94v$rDF~BtQxZa;tT?gP{->3M&_b6zNorWE zMpkDJfVmm*4V9Z|SnNb}sbd{`j0Fo&B}LWN4=wLJrpe|~KJqDK35>lcu}A2No;A8g z=+Zq6ILJ7=7lg;2HpxDun<)_7&<%h{U-K&O<+hWQ=3Ta5!F&6y1nJh(87_ji@cBjW#9GAEzNwd?|BOAqzPs&^$OU$4fRlz~MRPC-q z0w*6rB@U#ws0Hw)Hm!C)uxs1gf4g~!@VExZLS>GoSDjckJWA?~+P*+PS%E~@IQ0Xr zXEPg=kC4fk?jhsH5=PAT7}?_+kxEg<-9aFct`GZt?GcLy8_DBKo0Sqcwc7xz;=p5C zl#R0=yO5DBjT}9|t3oyHGl|B}n~9r;pEn~vdUl2!fRIzYYSJQYEsKkhNyKg3h&|E; zXq5!qhC3uOBC%IojA> ziJ`f&B$E6*5Yl2kMj%LAw6TaBNftDc21EvCgWGwN`-l5;$#HOTtt`1O23`(Saw!=t zkQuV02_Q+PVJn50421!2ib*j)xPk`vjy#TykqnD0d6A2n48K4EDJD@#p<-M}rc-Zn z(FDWszz4@~G2z!-b1K%I#r>oj{{28he5rTbtU><(4MPO6`U5L<@lpu?019g;Ii*^^ zw^&>hiTs(CRciGGfU=$xuUh@u#C$;nZ)-y&tQBohBekaLvsR>f6w;gcY9348Jey_m zQ?Y1O<0fekRq2bzLKPdh6-?P#B`&wPPQf+DO)QPZ@v9QMwDP1(>`>ALDxyb>UFtFH z4JtR%a#BewnB_tta#pb~sggK|T39OO*>9GD<}~!-@jltab<3H<5iJbTKmk^pE z^+=(c8X{y6fl(WUiew0&?8?jAYpO$2Y^*=-G%~>x!VO_bBo$+5NkTND#;wRBCXTAd zr8N#Gwp?-;(!vr&N3*s73mKIhdY;i_>>cBI!?g>3u(0@@kIi(RBJ=j`Ys23U^LTMxJgBNHDtz-!}jAA zs(nrzt|edqtOiFX(?gw=&hhGT5CoqocX(z{LaVG+%Gk`KyryKng^^@n6+}FYA){8p zX-G>YOpI0qBn+$iawKh9hp9XE>Rmz1em{{7$3_ogCXIp#2%`m(R9m4aN~uPT&^4ul z0=mYNf#i7(GdpHjqGid(ka?Kr78E`yBOiku^*%ot$zw&yBNm+&7KvVz?oHY(J9Bg; zvDiX>L2{O>{aj6xfY7?JLlbt%T7EPtE$ew!uykGPsj_&C%$xxxI-Ql86$*t1ZZ=5~ z<07SsAT2;Cu+}zLF+NmrO&doPGeQE)6rk>Q0>;i#@K#emq3yIdU@+4k7G4^9MsFlL znB)PRraOjW6@n^DDN*`_s%&eS$mHfvBuFpF&d7CGqErrAS8bwKkHsO3J6*MDrNZJe zW#p%s1H?kI;L6cVB55L34Ur?wQidi9l?w4tUNwX64njzzgAu1-XI{<}61xRyn3bdD zMv9RuDzs=9xFnKixkOkTn`h?8Tr8N+b1`bGGVNH@P%&UhJ1MFb259iHZOfYbU7VCa z#<$5K+SIP*o;s6}#((O5`ZQRaS{egt$5@D{z{Lz}E<=W%Z&KsNT1~l6b9;|AG0e)+ zO*G9HsI@L;NG&q0cIqm_e?4R8^OH20lbxYQxuQZV8FY=VN0lie#%myt)WLdaLyyZ_ zn-K^a8PrP@g=ad48#eXX3TlL%6|YQ=<-_PdEBZnL7CdE;azg~V)m(w^aiACPR6byroDSsEBaeySig%UpJ%L}jT| z3ZtPXgZC1&ieSq1A{v^dBb5mJl0w&k_K%LelgVNj`(u{8mUj%O_{Ca3K^0kn2*B2x z5z>b{l*Gp$QrO~D1Lh_$8PuKYL_$IE`}I69MK&~f7{5~m+aE;XSl7b!1bi!B4SRiH z!TmPv2@%TyNu?p)mzEAL1xaS<&{R_=mG=y*9xgj~8d({ZB%ul^X}R5NvL(_#g7wx) z`*kxot_@&*?pXaSsYI}ZvIv|QFy)ahG2~2*k&cWWIFd;N4m*JMyiqJMV)l|ZMwhh{ zDutK2=IL7?vppw4kvo){VzJU9n6P5UmCnc+qs9svD8j9+K4TgzaY7B~Sb$_vWy}JZ zJ=y)h&wQAKY`;>{$qceuR^`XWFWSe3O_o`t`PQ~2ScQjy{?u`JKHlK*2}!fvYQptl zejYA4I(+Gya;kzH4~izJE&F_P8v#U%)Rji4`G zO3=hsONx@B=C6{m^))^u{4^nwt31zb6c%ECBxto_$HW1(H>RL`D3B0<37`2$q+KI7 zPmyYOBc%x%nr}D{Ux>W*)f~G&K0DPEOHTO zWgWQ0bO~`(a*J{RpbJjDmnSciG+3jMM-LsfStC|xf$n~vZR7!DyQ&hSsX9E@28k$| zCz7#t&;c#PND*lq!WJ~LH!@xwRZm@TpWVM^*4S8y#^GjOaq=0k z<BT6r)27fyKg#N}5u?H5AktrT&%3 zV^1WvO1SGOTg^r76n8;usdScrfpW6Zlo2)zoa*D{HOQ%v1BbkCYSNbwl_I}ADd{@) z5trUMd3nCv$YCx#t{)x&t znBH=lH<^3L!WHd=j8zGbaz$F2pBwvNoOAHpDn}k>6gX-q^CHb3YFa8sBO|NHd~&yJ z6B3s69z)zb?|%d?HHDDB zia+qw(uetN+s>*R_g7dFDX*v+e$BOxrbyS0#hI9~7fl8O zok@|AWN93h_V#YwI-x2`+%_ZvX|}R3a5CbDn&h5LhGL-23=$9);%ZEfX>54F6>uaa zQZh?$`0~v0F)VHMm-bjIxHiCConPZw%D`AaD zGAvBa*9#Q63#@K6VS^ex!sz)6-bqRt7EDxOCP;YHGyO%TW~~{NYa18Y{F@v&>Rc=O zozS(-H6@cM_h<^E$f+5)M7DZBhnK)?Tv-i(Nh&pK(3Fy^Pb&2D)I86(c>IX@Tu?;K z9I=_z7Ns5FQDpEMtZhQVJ(!PGG>6t|J3K@pO3|96k%g+kHMCh(0->UnLB5t> zY;vM}hh;_$V&x<`f?92;CPc~hsH0_U+ zS|I1NU(_PF6?mAP!j&{jivUR{!&7k_<)LUJJ^C`WO@Z!Vxl%&Vexrg)E1?ae$$M`g zWWA<2qMVzhhM?OorA&&a(-ugnjY6!5V!Y_L9g&;E@U}FshUs=Pv1^L4LhA7rC6zA$ zYvL(IlOqZQ?ht}#TKsmd^kFD8m-DL>+wnJq*_?hZPii})f2C`qcdgdGERMh<2CX0> zF-qCE)t>s{Mm*}YT!9MEGW^LbC(~60P3k~kcU`qKTy|KWhmrsTM(j~m;M5i|e#^(X ziPdc;!0i=d2PcU4S0e@_;5k?&HWGYRI@$-7fk)f6oJsC1iRF!qOD;^TC5!+?RG3o7 zTGTL;{{3NKaXBVlUU`H5qs(Lf0PBw-a_vpYN4hgwvY!m7ef#fe>+ zK^jmV*a(QLUZtFBUMqp%@*Z&3qvR`>oTJE0j^eCJ&;*$+jzu9rB?;Ct`-hSTjE+NG zc-D}`8Lb4t3Mc~V7=YfNFw@Dzm;Raqx7AJ-DApyX>J_EVs%o*fr5OUEvslEx6Ybo& zusG)qhItjD&YocLnC5~I8Im@PvnY}klC&&~5fbV=9s*>SAqW#>5qwd(CbV)-e=fBp zS;$gI1rVz1D-RhX?*~?%X@GeEkdfVxx2@fjI811TYQ#pWi%mg^?0z;J{{ZeLLUw!k z4JzYfLZzg3mJ}tX$ym{cX#y9evOTp!lq8a0{p*t|XAHH;V;M$taU75kQbCrC(=!I` z#oJUdpjjDxv+a-WBogAMxRsw1CW{+Q9x3i4%82GgUh*R20xa*SF{q5({n>N-*-(pR zAQXF9hw798R`rm^>Ocq7!0vUzFDr~*Ze5p-$eJ_&qbnB24Npr&Y_c`14Xk!1r&5>} zCC=pWKBhSkGSTC8Nx&7b3FTX*ybxTHCa%0G;vr6q1>

JxZjhG<%1DB{Mk8ao7X(?H~Z^(WG)9 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%0DD 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

MADM=bGdc66v(N0?9)eNh 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 S{QNUE#nIA!3wtV#*8dM8jTk!s literal 0 HcmV?d00001 diff --git a/website/articles/examples/neural_doodle.py b/website/articles/examples/neural_doodle.py new file mode 100755 index 000000000..c4133d8fe --- /dev/null +++ b/website/articles/examples/neural_doodle.py @@ -0,0 +1,366 @@ +'''Neural doodle with Keras + +Script Usage: + # Arguments: + ``` + --nlabels: # of regions (colors) in mask images + --style-image: image to learn style from + --style-mask: semantic labels for style image + --target-mask: semantic labels for target image (your doodle) + --content-image: optional image to learn content from + --target-image-prefix: path prefix for generated target images + ``` + + # Example 1: doodle using a style image, style mask + and target mask. + ``` + python neural_doodle.py --nlabels 4 --style-image Monet/style.png \ + --style-mask Monet/style_mask.png --target-mask Monet/target_mask.png \ + --target-image-prefix generated/monet + ``` + + # Example 2: doodle using a style image, style mask, + target mask and an optional content image. + ``` + python neural_doodle.py --nlabels 4 --style-image Renoir/style.png \ + --style-mask Renoir/style_mask.png --target-mask Renoir/target_mask.png \ + --content-image Renoir/creek.jpg \ + --target-image-prefix generated/renoir + ``` + +References: +[Dmitry Ulyanov's blog on fast-neural-doodle](http://dmitryulyanov.github.io/feed-forward-neural-doodle/) +[Torch code for fast-neural-doodle](https://github.com/DmitryUlyanov/fast-neural-doodle) +[Torch code for online-neural-doodle](https://github.com/DmitryUlyanov/online-neural-doodle) +[Paper Texture Networks: Feed-forward Synthesis of Textures and Stylized Images](http://arxiv.org/abs/1603.03417) +[Discussion on parameter tuning](https://github.com/fchollet/keras/issues/3705) + +Resources: +Example images can be downloaded from +https://github.com/DmitryUlyanov/fast-neural-doodle/tree/master/data +''' +from __future__ import print_function +import time +import argparse +import numpy as np +from scipy.optimize import fmin_l_bfgs_b +from scipy.misc import imread, imsave + +from keras import backend as K +from keras.layers import Input, AveragePooling2D +from keras.models import Model +from keras.preprocessing.image import load_img, img_to_array +from keras.applications import vgg19 + +# Command line arguments +parser = argparse.ArgumentParser(description='Keras neural doodle example') +parser.add_argument('--nlabels', type=int, + help='number of semantic labels' + ' (regions in differnet colors)' + ' in style_mask/target_mask') +parser.add_argument('--style-image', type=str, + help='path to image to learn style from') +parser.add_argument('--style-mask', type=str, + help='path to semantic mask of style image') +parser.add_argument('--target-mask', type=str, + help='path to semantic mask of target image') +parser.add_argument('--content-image', type=str, default=None, + help='path to optional content image') +parser.add_argument('--target-image-prefix', type=str, + help='path prefix for generated results') +args = parser.parse_args() + +style_img_path = args.style_image +style_mask_path = args.style_mask +target_mask_path = args.target_mask +content_img_path = args.content_image +target_img_prefix = args.target_image_prefix +use_content_img = content_img_path is not None + +num_labels = args.nlabels +num_colors = 3 # RGB +# determine image sizes based on target_mask +ref_img = imread(target_mask_path) +img_nrows, img_ncols = ref_img.shape[:2] + +total_variation_weight = 50. +style_weight = 1. +content_weight = 0.1 if use_content_img else 0 + +content_feature_layers = ['block5_conv2'] +# To get better generation qualities, use more conv layers for style features +style_feature_layers = ['block1_conv1', 'block2_conv1', 'block3_conv1', + 'block4_conv1', 'block5_conv1'] + + +# helper functions for reading/processing images +def preprocess_image(image_path): + img = load_img(image_path, target_size=(img_nrows, img_ncols)) + img = img_to_array(img) + img = np.expand_dims(img, axis=0) + img = vgg19.preprocess_input(img) + return img + + +def deprocess_image(x): + if K.image_data_format() == 'channels_first': + x = x.reshape((3, img_nrows, img_ncols)) + x = x.transpose((1, 2, 0)) + else: + x = x.reshape((img_nrows, img_ncols, 3)) + # Remove zero-center by mean pixel + x[:, :, 0] += 103.939 + x[:, :, 1] += 116.779 + x[:, :, 2] += 123.68 + # 'BGR'->'RGB' + x = x[:, :, ::-1] + x = np.clip(x, 0, 255).astype('uint8') + return x + + +def kmeans(xs, k): + assert xs.ndim == 2 + try: + from sklearn.cluster import k_means + _, labels, _ = k_means(xs.astype('float64'), k) + except ImportError: + from scipy.cluster.vq import kmeans2 + _, labels = kmeans2(xs, k, missing='raise') + return labels + + +def load_mask_labels(): + '''Load both target and style masks. + A mask image (nr x nc) with m labels/colors will be loaded + as a 4D boolean tensor: (1, m, nr, nc) for 'channels_first' or (1, nr, nc, m) for 'channels_last' + ''' + target_mask_img = load_img(target_mask_path, + target_size=(img_nrows, img_ncols)) + target_mask_img = img_to_array(target_mask_img) + style_mask_img = load_img(style_mask_path, + target_size=(img_nrows, img_ncols)) + style_mask_img = img_to_array(style_mask_img) + if K.image_data_format() == 'channels_first': + mask_vecs = np.vstack([style_mask_img.reshape((3, -1)).T, + target_mask_img.reshape((3, -1)).T]) + else: + mask_vecs = np.vstack([style_mask_img.reshape((-1, 3)), + target_mask_img.reshape((-1, 3))]) + + labels = kmeans(mask_vecs, num_labels) + style_mask_label = labels[:img_nrows * + img_ncols].reshape((img_nrows, img_ncols)) + target_mask_label = labels[img_nrows * + img_ncols:].reshape((img_nrows, img_ncols)) + + stack_axis = 0 if K.image_data_format() == 'channels_first' else -1 + style_mask = np.stack([style_mask_label == r for r in xrange(num_labels)], + axis=stack_axis) + target_mask = np.stack([target_mask_label == r for r in xrange(num_labels)], + axis=stack_axis) + + return (np.expand_dims(style_mask, axis=0), + np.expand_dims(target_mask, axis=0)) + +# Create tensor variables for images +if K.image_data_format() == 'channels_first': + shape = (1, num_colors, img_nrows, img_ncols) +else: + shape = (1, img_nrows, img_ncols, num_colors) + +style_image = K.variable(preprocess_image(style_img_path)) +target_image = K.placeholder(shape=shape) +if use_content_img: + content_image = K.variable(preprocess_image(content_img_path)) +else: + content_image = K.zeros(shape=shape) + +images = K.concatenate([style_image, target_image, content_image], axis=0) + +# Create tensor variables for masks +raw_style_mask, raw_target_mask = load_mask_labels() +style_mask = K.variable(raw_style_mask.astype('float32')) +target_mask = K.variable(raw_target_mask.astype('float32')) +masks = K.concatenate([style_mask, target_mask], axis=0) + +# index constants for images and tasks variables +STYLE, TARGET, CONTENT = 0, 1, 2 + +# Build image model, mask model and use layer outputs as features +# image model as VGG19 +image_model = vgg19.VGG19(include_top=False, input_tensor=images) + +# mask model as a series of pooling +mask_input = Input(tensor=masks, shape=(None, None, None), name='mask_input') +x = mask_input +for layer in image_model.layers[1:]: + name = 'mask_%s' % layer.name + if 'conv' in layer.name: + x = AveragePooling2D((3, 3), strides=( + 1, 1), name=name, border_mode='same')(x) + elif 'pool' in layer.name: + x = AveragePooling2D((2, 2), name=name)(x) +mask_model = Model(mask_input, x) + +# Collect features from image_model and task_model +image_features = {} +mask_features = {} +for img_layer, mask_layer in zip(image_model.layers, mask_model.layers): + if 'conv' in img_layer.name: + assert 'mask_' + img_layer.name == mask_layer.name + layer_name = img_layer.name + img_feat, mask_feat = img_layer.output, mask_layer.output + image_features[layer_name] = img_feat + mask_features[layer_name] = mask_feat + + +# Define loss functions +def gram_matrix(x): + assert K.ndim(x) == 3 + features = K.batch_flatten(x) + gram = K.dot(features, K.transpose(features)) + return gram + + +def region_style_loss(style_image, target_image, style_mask, target_mask): + '''Calculate style loss between style_image and target_image, + for one common region specified by their (boolean) masks + ''' + assert 3 == K.ndim(style_image) == K.ndim(target_image) + assert 2 == K.ndim(style_mask) == K.ndim(target_mask) + if K.image_data_format() == 'channels_first': + masked_style = style_image * style_mask + masked_target = target_image * target_mask + num_channels = K.shape(style_image)[0] + else: + masked_style = K.permute_dimensions( + style_image, (2, 0, 1)) * style_mask + masked_target = K.permute_dimensions( + target_image, (2, 0, 1)) * target_mask + num_channels = K.shape(style_image)[-1] + s = gram_matrix(masked_style) / K.mean(style_mask) / num_channels + c = gram_matrix(masked_target) / K.mean(target_mask) / num_channels + return K.mean(K.square(s - c)) + + +def style_loss(style_image, target_image, style_masks, target_masks): + '''Calculate style loss between style_image and target_image, + in all regions. + ''' + assert 3 == K.ndim(style_image) == K.ndim(target_image) + assert 3 == K.ndim(style_masks) == K.ndim(target_masks) + loss = K.variable(0) + for i in xrange(num_labels): + if K.image_data_format() == 'channels_first': + style_mask = style_masks[i, :, :] + target_mask = target_masks[i, :, :] + else: + style_mask = style_masks[:, :, i] + target_mask = target_masks[:, :, i] + loss += region_style_loss(style_image, + target_image, style_mask, target_mask) + return loss + + +def content_loss(content_image, target_image): + return K.sum(K.square(target_image - content_image)) + + +def total_variation_loss(x): + assert 4 == K.ndim(x) + if K.image_data_format() == 'channels_first': + a = K.square(x[:, :, :img_nrows - 1, :img_ncols - 1] - + x[:, :, 1:, :img_ncols - 1]) + b = K.square(x[:, :, :img_nrows - 1, :img_ncols - 1] - + x[:, :, :img_nrows - 1, 1:]) + else: + a = K.square(x[:, :img_nrows - 1, :img_ncols - 1, :] - + x[:, 1:, :img_ncols - 1, :]) + b = K.square(x[:, :img_nrows - 1, :img_ncols - 1, :] - + x[:, :img_nrows - 1, 1:, :]) + return K.sum(K.pow(a + b, 1.25)) + +# Overall loss is the weighted sum of content_loss, style_loss and tv_loss +# Each individual loss uses features from image/mask models. +loss = K.variable(0) +for layer in content_feature_layers: + content_feat = image_features[layer][CONTENT, :, :, :] + target_feat = image_features[layer][TARGET, :, :, :] + loss += content_weight * content_loss(content_feat, target_feat) + +for layer in style_feature_layers: + style_feat = image_features[layer][STYLE, :, :, :] + target_feat = image_features[layer][TARGET, :, :, :] + style_masks = mask_features[layer][STYLE, :, :, :] + target_masks = mask_features[layer][TARGET, :, :, :] + sl = style_loss(style_feat, target_feat, style_masks, target_masks) + loss += (style_weight / len(style_feature_layers)) * sl + +loss += total_variation_weight * total_variation_loss(target_image) +loss_grads = K.gradients(loss, target_image) + +# Evaluator class for computing efficiency +outputs = [loss] +if isinstance(loss_grads, (list, tuple)): + outputs += loss_grads +else: + outputs.append(loss_grads) + +f_outputs = K.function([target_image], outputs) + + +def eval_loss_and_grads(x): + if K.image_data_format() == 'channels_first': + x = x.reshape((1, 3, img_nrows, img_ncols)) + else: + x = x.reshape((1, img_nrows, img_ncols, 3)) + outs = f_outputs([x]) + loss_value = outs[0] + if len(outs[1:]) == 1: + grad_values = outs[1].flatten().astype('float64') + else: + grad_values = np.array(outs[1:]).flatten().astype('float64') + return loss_value, grad_values + + +class Evaluator(object): + + def __init__(self): + self.loss_value = None + self.grads_values = None + + def loss(self, x): + assert self.loss_value is None + loss_value, grad_values = eval_loss_and_grads(x) + self.loss_value = loss_value + self.grad_values = grad_values + return self.loss_value + + def grads(self, x): + assert self.loss_value is not None + grad_values = np.copy(self.grad_values) + self.loss_value = None + self.grad_values = None + return grad_values + +evaluator = Evaluator() + +# Generate images by iterative optimization +if K.image_data_format() == 'channels_first': + x = np.random.uniform(0, 255, (1, 3, img_nrows, img_ncols)) - 128. +else: + x = np.random.uniform(0, 255, (1, img_nrows, img_ncols, 3)) - 128. + +for i in range(50): + print('Start of iteration', i) + start_time = time.time() + x, min_val, info = fmin_l_bfgs_b(evaluator.loss, x.flatten(), + fprime=evaluator.grads, maxfun=20) + print('Current loss value:', min_val) + # save current generated image + img = deprocess_image(x.copy()) + fname = target_img_prefix + '_at_iteration_%d.png' % i + imsave(fname, img) + end_time = time.time() + print('Image saved as', fname) + print('Iteration %d completed in %ds' % (i, end_time - start_time)) diff --git a/website/articles/examples/neural_style_transfer.R b/website/articles/examples/neural_style_transfer.R new file mode 100644 index 000000000..fd1a179a2 --- /dev/null +++ b/website/articles/examples/neural_style_transfer.R @@ -0,0 +1,256 @@ +#' Neural style transfer with Keras. +#' +#' It is preferable to run this script on a GPU, for speed. +#' +#' Example result: https://twitter.com/fchollet/status/686631033085677568 +#' +#' Style transfer consists in generating an image +#' with the same "content" as a base image, but with the +#' "style" of a different picture (typically artistic). +#' +#' This is achieved through the optimization of a loss function +#' that has 3 components: "style loss", "content loss", +#' and "total variation loss": +#' +#' - The total variation loss imposes local spatial continuity between +#' the pixels of the combination image, giving it visual coherence. +#' +#' - The style loss is where the deep learning keeps in --that one is defined +#' using a deep convolutional neural network. Precisely, it consists in a sum of +#' L2 distances between the Gram matrices of the representations of +#' the base image and the style reference image, extracted from +#' different layers of a convnet (trained on ImageNet). The general idea +#' is to capture color/texture information at different spatial +#' scales (fairly large scales --defined by the depth of the layer considered). +#' +#' - The content loss is a L2 distance between the features of the base +#' image (extracted from a deep layer) and the features of the combination image, +#' keeping the generated image close enough to the original one. +#' + +library(keras) +library(purrr) +library(R6) +K <- backend() + +# Parameters -------------------------------------------------------------- + +base_image_path <- "neural-style-base-img.png" +style_reference_image_path <- "neural-style-style.jpg" +iterations <- 10 + +# these are the weights of the different loss components +total_variation_weight <- 1 +style_weight <- 1 +content_weight <- 0.025 + +# dimensions of the generated picture. +img <- image_load(base_image_path) +width <- img$size[[1]] +height <- img$size[[2]] +img_nrows <- 400 +img_ncols <- as.integer(width * img_nrows / height) + + +# Functions --------------------------------------------------------------- + +# util function to open, resize and format pictures into appropriate tensors +preprocess_image <- function(path){ + img <- image_load(path, target_size = c(img_nrows, img_ncols)) %>% + image_to_array() + dim(img) <- c(1, dim(img)) + imagenet_preprocess_input(img) +} + +# util function to convert a tensor into a valid image +deprocess_image <- function(x){ + x <- x[1,,,] + # Remove zero-center by mean pixel + x[,,1] <- x[,,1] + 103.939 + x[,,2] <- x[,,2] + 116.779 + x[,,3] <- x[,,3] + 123.68 + # clip to interval 0, 255 + x[x > 255] <- 255 + x[x < 0] <- 0 + x[] <- as.integer(x)/255 + x +} + +# Defining the model ------------------------------------------------------ + +# get tensor representations of our images +base_image <- K$variable(preprocess_image(base_image_path)) +style_reference_image <- K$variable(preprocess_image(style_reference_image_path)) + +# this will contain our generated image +combination_image <- K$placeholder(c(1L, img_nrows, img_ncols, 3L)) + +# combine the 3 images into a single Keras tensor +input_tensor <- K$concatenate(list(base_image, style_reference_image, + combination_image), axis = 0L) + +# build the VGG16 network with our 3 images as input +# the model will be loaded with pre-trained ImageNet weights +model <- application_vgg16(input_tensor = input_tensor, weights = "imagenet", + include_top = FALSE) + +print("Model loaded.") + +nms <- map_chr(model$layers, ~.x$name) +output_dict <- map(model$layers, ~.x$output) %>% set_names(nms) + +# compute the neural style loss +# first we need to define 4 util functions + +# the gram matrix of an image tensor (feature-wise outer product) + +gram_matrix <- function(x){ + + features <- x %>% + K$permute_dimensions(pattern = c(2L, 0L, 1L)) %>% + K$batch_flatten() + + K$dot(features, K$transpose(features)) +} + +# the "style loss" is designed to maintain +# the style of the reference image in the generated image. +# It is based on the gram matrices (which capture style) of +# feature maps from the style reference image +# and from the generated image + +style_loss <- function(style, combination){ + S <- gram_matrix(style) + C <- gram_matrix(combination) + + channels <- 3 + size <- img_nrows*img_ncols + + K$sum(K$square(S - C)) / (4 * channels^2 * size^2) +} + +# an auxiliary loss function +# designed to maintain the "content" of the +# base image in the generated image + +content_loss <- function(base, combination){ + K$sum(K$square(combination - base)) +} + +# the 3rd loss function, total variation loss, +# designed to keep the generated image locally coherent + +total_variation_loss <- function(x){ + y_ij <- x[,0:(img_nrows - 2L), 0:(img_ncols - 2L),] + y_i1j <- x[,1:(img_nrows - 1L), 0:(img_ncols - 2L),] + y_ij1 <- x[,0:(img_nrows - 2L), 1:(img_ncols - 1L),] + + a <- K$square(y_ij - y_i1j) + b <- K$square(y_ij - y_ij1) + K$sum(K$pow(a + b, 1.25)) +} + +# combine these loss functions into a single scalar +loss <- K$variable(0.0) +layer_features <- output_dict$block4_conv2 +base_image_features <- layer_features[0,,,] +combination_features <- layer_features[2,,,] + +loss <- loss + content_weight*content_loss(base_image_features, + combination_features) + +feature_layers = c('block1_conv1', 'block2_conv1', + 'block3_conv1', 'block4_conv1', + 'block5_conv1') + +for(layer_name in feature_layers){ + layer_features <- output_dict[[layer_name]] + style_reference_features <- layer_features[1,,,] + combination_features <- layer_features[2,,,] + sl <- style_loss(style_reference_features, combination_features) + loss <- loss + ((style_weight / length(feature_layers)) * sl) +} + +loss <- loss + (total_variation_weight * total_variation_loss(combination_image)) + +# get the gradients of the generated image wrt the loss +grads <- K$gradients(loss, combination_image)[[1]] + +f_outputs <- K$`function`(list(combination_image), list(loss, grads)) + +eval_loss_and_grads <- function(image){ + dim(image) <- c(1, img_nrows, img_ncols, 3) + outs <- f_outputs(list(image)) + list( + loss_value = outs[[1]], + grad_values = as.numeric(outs[[2]]) + ) +} + +# Loss and gradients evaluator. +# +# This Evaluator class makes it possible +# to compute loss and gradients in one pass +# while retrieving them via two separate functions, +# "loss" and "grads". This is done because scipy.optimize +# requires separate functions for loss and gradients, +# but computing them separately would be inefficient. +Evaluator <- R6Class( + "Evaluator", + public = list( + + loss_value = NULL, + grad_values = NULL, + + initialize = function() { + self$loss_value <- NULL + self$grad_values <- NULL + }, + + loss = function(x){ + loss_and_grad <- eval_loss_and_grads(x) + self$loss_value <- loss_and_grad$loss_value + self$grad_values <- loss_and_grad$grad_values + self$loss_value + }, + + grads = function(x){ + grad_values <- self$grad_values + self$loss_value <- NULL + self$grad_values <- NULL + grad_values + } + + ) +) + +evaluator <- Evaluator$new() + +# run scipy-based optimization (L-BFGS) over the pixels of the generated image +# so as to minimize the neural style loss +dms <- c(1, img_nrows, img_ncols, 3) +x <- array(data = runif(prod(dms), min = 0, max = 255) - 128, dim = dms) + +# Run optimization (L-BFGS) over the pixels of the generated image +# so as to minimize the loss +for(i in 1:iterations){ + + # Run L-BFGS + opt <- optim( + as.numeric(x), fn = evaluator$loss, gr = evaluator$grads, + method = "L-BFGS-B", + control = list(maxit = 15) + ) + + # Print loss value + print(opt$value) + + # decode the image + image <- x <- opt$par + dim(image) <- dms + + # plot + im <- deprocess_image(image) + plot(as.raster(im)) + +} diff --git a/website/articles/examples/neural_style_transfer.html b/website/articles/examples/neural_style_transfer.html new file mode 100644 index 000000000..a2ae2fbb1 --- /dev/null +++ b/website/articles/examples/neural_style_transfer.html @@ -0,0 +1,372 @@ + + + + + + + +neural_style_transfer • keras + + + + + + + +

+
+ + + +
+
+ + + + +
+ +

Neural style transfer with Keras.

+

It is preferable to run this script on a GPU, for speed.

+

Example result: https://twitter.com/fchollet/status/686631033085677568

+

Style transfer consists in generating an image with the same “content” as a base image, but with the “style” of a different picture (typically artistic).

+

This is achieved through the optimization of a loss function that has 3 components: “style loss”, “content loss”, and “total variation loss”:

+
    +
  • The total variation loss imposes local spatial continuity between the pixels of the combination image, giving it visual coherence.

  • +
  • The style loss is where the deep learning keeps in –that one is defined using a deep convolutional neural network. Precisely, it consists in a sum of L2 distances between the Gram matrices of the representations of the base image and the style reference image, extracted from different layers of a convnet (trained on ImageNet). The general idea is to capture color/texture information at different spatial scales (fairly large scales –defined by the depth of the layer considered).

  • +
  • The content loss is a L2 distance between the features of the base image (extracted from a deep layer) and the features of the combination image, keeping the generated image close enough to the original one.

  • +
+
library(keras)
+library(purrr)
+library(R6)
+K <- backend()
+
+# Parameters --------------------------------------------------------------
+
+base_image_path <- "neural-style-base-img.png"
+style_reference_image_path <- "neural-style-style.jpg"
+iterations <- 10
+
+# these are the weights of the different loss components
+total_variation_weight <- 1
+style_weight <- 1
+content_weight <- 0.025
+
+# dimensions of the generated picture.
+img <- image_load(base_image_path)
+width <- img$size[[1]]
+height <- img$size[[2]]
+img_nrows <- 400
+img_ncols <- as.integer(width * img_nrows / height)
+
+
+# Functions ---------------------------------------------------------------
+
+# util function to open, resize and format pictures into appropriate tensors
+preprocess_image <- function(path){
+  img <- image_load(path, target_size = c(img_nrows, img_ncols)) %>%
+    image_to_array()
+  dim(img) <- c(1, dim(img))
+  imagenet_preprocess_input(img)
+}
+
+# util function to convert a tensor into a valid image
+deprocess_image <- function(x){
+  x <- x[1,,,]
+  # Remove zero-center by mean pixel
+  x[,,1] <- x[,,1] + 103.939
+  x[,,2] <- x[,,2] + 116.779
+  x[,,3] <- x[,,3] + 123.68
+  # clip to interval 0, 255
+  x[x > 255] <- 255
+  x[x < 0] <- 0
+  x[] <- as.integer(x)/255
+  x
+}
+
+# Defining the model ------------------------------------------------------
+
+# get tensor representations of our images
+base_image <- K$variable(preprocess_image(base_image_path))
+style_reference_image <- K$variable(preprocess_image(style_reference_image_path))
+
+# this will contain our generated image
+combination_image <- K$placeholder(c(1L, img_nrows, img_ncols, 3L))
+
+# combine the 3 images into a single Keras tensor
+input_tensor <- K$concatenate(list(base_image, style_reference_image, 
+                                   combination_image), axis = 0L)
+
+# build the VGG16 network with our 3 images as input
+# the model will be loaded with pre-trained ImageNet weights
+model <- application_vgg16(input_tensor = input_tensor, weights = "imagenet", 
+                           include_top = FALSE)
+
+print("Model loaded.")
+
+nms <- map_chr(model$layers, ~.x$name)
+output_dict <- map(model$layers, ~.x$output) %>% set_names(nms)
+
+# compute the neural style loss
+# first we need to define 4 util functions
+
+# the gram matrix of an image tensor (feature-wise outer product)
+
+gram_matrix <- function(x){
+  
+  features <- x %>%
+    K$permute_dimensions(pattern = c(2L, 0L, 1L)) %>%
+    K$batch_flatten()
+  
+  K$dot(features, K$transpose(features))
+}
+
+# the "style loss" is designed to maintain
+# the style of the reference image in the generated image.
+# It is based on the gram matrices (which capture style) of
+# feature maps from the style reference image
+# and from the generated image
+
+style_loss <- function(style, combination){
+  S <- gram_matrix(style)
+  C <- gram_matrix(combination)
+  
+  channels <- 3
+  size <- img_nrows*img_ncols
+  
+  K$sum(K$square(S - C)) / (4 * channels^2  * size^2)
+}
+
+# an auxiliary loss function
+# designed to maintain the "content" of the
+# base image in the generated image
+
+content_loss <- function(base, combination){
+  K$sum(K$square(combination - base))
+}
+
+# the 3rd loss function, total variation loss,
+# designed to keep the generated image locally coherent
+
+total_variation_loss <- function(x){
+  y_ij  <- x[,0:(img_nrows - 2L), 0:(img_ncols - 2L),]
+  y_i1j <- x[,1:(img_nrows - 1L), 0:(img_ncols - 2L),]
+  y_ij1 <- x[,0:(img_nrows - 2L), 1:(img_ncols - 1L),]
+  
+  a <- K$square(y_ij - y_i1j)
+  b <- K$square(y_ij - y_ij1)
+  K$sum(K$pow(a + b, 1.25))
+}
+
+# combine these loss functions into a single scalar
+loss <- K$variable(0.0)
+layer_features <- output_dict$block4_conv2
+base_image_features <- layer_features[0,,,]
+combination_features <- layer_features[2,,,]
+
+loss <- loss + content_weight*content_loss(base_image_features, 
+                                           combination_features)
+
+feature_layers = c('block1_conv1', 'block2_conv1',
+                  'block3_conv1', 'block4_conv1',
+                  'block5_conv1')
+
+for(layer_name in feature_layers){
+  layer_features <- output_dict[[layer_name]]
+  style_reference_features <- layer_features[1,,,]
+  combination_features <- layer_features[2,,,]
+  sl <- style_loss(style_reference_features, combination_features)
+  loss <- loss + ((style_weight / length(feature_layers)) * sl)
+}
+
+loss <- loss + (total_variation_weight * total_variation_loss(combination_image))
+
+# get the gradients of the generated image wrt the loss
+grads <- K$gradients(loss, combination_image)[[1]]
+
+f_outputs <-  K$`function`(list(combination_image), list(loss, grads))
+
+eval_loss_and_grads <- function(image){
+  dim(image) <- c(1, img_nrows, img_ncols, 3)
+  outs <- f_outputs(list(image))
+  list(
+    loss_value = outs[[1]],
+    grad_values = as.numeric(outs[[2]])
+  )
+}
+
+# Loss and gradients evaluator.
+# 
+# This Evaluator class makes it possible
+# to compute loss and gradients in one pass
+# while retrieving them via two separate functions,
+# "loss" and "grads". This is done because scipy.optimize
+# requires separate functions for loss and gradients,
+# but computing them separately would be inefficient.
+Evaluator <- R6Class(
+  "Evaluator",
+  public = list(
+    
+    loss_value = NULL,
+    grad_values = NULL,
+    
+    initialize = function() {
+      self$loss_value <- NULL
+      self$grad_values <- NULL
+    },
+    
+    loss = function(x){
+      loss_and_grad <- eval_loss_and_grads(x)
+      self$loss_value <- loss_and_grad$loss_value
+      self$grad_values <- loss_and_grad$grad_values
+      self$loss_value
+    },
+    
+    grads = function(x){
+      grad_values <- self$grad_values
+      self$loss_value <- NULL
+      self$grad_values <- NULL
+      grad_values
+    }
+    
+  )
+)
+
+evaluator <- Evaluator$new()
+
+# run scipy-based optimization (L-BFGS) over the pixels of the generated image
+# so as to minimize the neural style loss
+dms <- c(1, img_nrows, img_ncols, 3)
+x <- array(data = runif(prod(dms), min = 0, max = 255) - 128, dim = dms)
+
+# Run optimization (L-BFGS) over the pixels of the generated image
+# so as to minimize the loss
+for(i in 1:iterations){
+
+  # Run L-BFGS
+  opt <- optim(
+    as.numeric(x), fn = evaluator$loss, gr = evaluator$grads, 
+    method = "L-BFGS-B",
+    control = list(maxit = 15)
+  )
+  
+  # Print loss value
+  print(opt$value)
+  
+  # decode the image
+  image <- x <- opt$par
+  dim(image) <- dms
+  
+  # plot
+  im <- deprocess_image(image)
+  plot(as.raster(im))
+  
+}
+
+
+ + + +
+ + +
+ +
+

Site built with pkgdown.

+
+ +
+
+ + + diff --git a/website/articles/examples/nueral_doodle.R b/website/articles/examples/nueral_doodle.R new file mode 100644 index 000000000..0ab13681d --- /dev/null +++ b/website/articles/examples/nueral_doodle.R @@ -0,0 +1 @@ +library(keras) diff --git a/website/articles/examples/nueral_doodle.html b/website/articles/examples/nueral_doodle.html new file mode 100644 index 000000000..f054c2476 --- /dev/null +++ b/website/articles/examples/nueral_doodle.html @@ -0,0 +1,137 @@ + + + + + + + +nueral_doodle • keras + + + + + + + +
+
+ + + +
+
+ + + + + +
+ + + +
+ + +
+ +
+

Site built with pkgdown.

+
+ +
+
+ + + diff --git a/website/articles/examples/pretrained_word_embeddings.R b/website/articles/examples/pretrained_word_embeddings.R new file mode 100644 index 000000000..6217dfc15 --- /dev/null +++ b/website/articles/examples/pretrained_word_embeddings.R @@ -0,0 +1,185 @@ +#' This script loads pre-trained word embeddings (GloVe embeddings) into a +#' frozen Keras Embedding layer, and uses it to train a text classification +#' model on the 20 Newsgroup dataset (classication of newsgroup messages into 20 +#' different categories). +#' +#' GloVe embedding data can be found at: +#' http://nlp.stanford.edu/data/glove.6B.zip (source page: +#' http://nlp.stanford.edu/projects/glove/) +#' +#' 20 Newsgroup data can be found at: +#' http://www.cs.cmu.edu/afs/cs.cmu.edu/project/theo-20/www/data/news20.html +#' + +#' +#' IMPORTANT NOTE: This example does yet work correctly. The code executes fine and +#' appears to mimic the Python code upon which it is based however it achieves only +#' half the training accuracy that the Python code does so there is clearly a +#' subtle difference. +#' +#' We need to investigate this further before formally adding to the list of examples +#' +#' + +library(keras) + +GLOVE_DIR <- 'glove.6B' +TEXT_DATA_DIR <- '20_newsgroup' +MAX_SEQUENCE_LENGTH <- 1000 +MAX_NB_WORDS <- 20000 +EMBEDDING_DIM <- 100 +VALIDATION_SPLIT <- 0.2 + +# download data if necessary +download_data <- function(data_dir, url_path, data_file) { + if (!dir.exists(data_dir)) { + download.file(paste0(url_path, data_file), data_file, mode = "wb") + if (tools::file_ext(data_file) == "zip") + unzip(data_file, exdir = tools::file_path_sans_ext(data_file)) + else + untar(data_file) + unlink(data_file) + } +} +download_data(GLOVE_DIR, 'http://nlp.stanford.edu/data/', 'glove.6B.zip') +download_data(TEXT_DATA_DIR, "http://www.cs.cmu.edu/afs/cs.cmu.edu/project/theo-20/www/data/", "news20.tar.gz") + +# first, build index mapping words in the embeddings set +# to their embedding vector + +cat('Indexing word vectors.\n') + +embeddings_index <- new.env(parent = emptyenv()) +lines <- readLines(file.path(GLOVE_DIR, 'glove.6B.100d.txt')) +for (line in lines) { + values <- strsplit(line, ' ', fixed = TRUE)[[1]] + word <- values[[1]] + coefs <- as.numeric(values[-1]) + embeddings_index[[word]] <- coefs +} + +cat(sprintf('Found %s word vectors.\n', length(embeddings_index))) + +# second, prepare text samples and their labels +cat('Processing text dataset\n') + +texts <- character() # text samples +labels <- integer() # label ids +labels_index <- list() # dictionary: label name to numeric id + +for (name in list.files(TEXT_DATA_DIR)) { + path <- file.path(TEXT_DATA_DIR, name) + if (file_test("-d", path)) { + label_id <- length(labels_index) + labels_index[[name]] <- label_id + for (fname in list.files(path)) { + if (grepl("^[0-9]+$", fname)) { + fpath <- file.path(path, fname) + t <- readLines(fpath, encoding = "latin1") + t <- paste(t, collapse = "\n") + i <- regexpr(pattern = '\n\n', t, fixed = TRUE)[[1]] + if (i != -1L) + t <- substring(t, i) + texts <- c(texts, t) + labels <- c(labels, label_id) + } + } + } +} + +cat(sprintf('Found %s texts.\n', length(texts))) + +# finally, vectorize the text samples into a 2D integer tensor +tokenizer <- text_tokenizer(num_words=MAX_NB_WORDS) +tokenizer %>% fit_text_tokenizer(texts) + +sequences <- texts_to_sequences(tokenizer, texts) + +word_index <- tokenizer$word_index +cat(sprintf('Found %s unique tokens.\n', length(word_index))) + +data <- pad_sequences(sequences, maxlen=MAX_SEQUENCE_LENGTH) +labels <- to_categorical(labels) + +cat('Shape of data tensor: ', dim(data), '\n') +cat('Shape of label tensor: ', dim(labels), '\n') + +# split the data into a training set and a validation set +indices <- 1:nrow(data) +indices <- sample(indices) +data <- data[indices,] +labels <- labels[indices,] +num_validation_samples <- as.integer(VALIDATION_SPLIT * nrow(data)) + +x_train <- data[-(1:num_validation_samples),] +y_train <- labels[-(1:num_validation_samples),] +x_val <- data[1:num_validation_samples,] +y_val <- labels[1:num_validation_samples,] + +cat('Preparing embedding matrix.\n') + +# prepare embedding matrix +num_words <- min(MAX_NB_WORDS, length(word_index)) +prepare_embedding_matrix <- function() { + embedding_matrix <- matrix(0L, nrow = num_words, ncol = EMBEDDING_DIM) + for (word in names(word_index)) { + index <- word_index[[word]] + if (index >= MAX_NB_WORDS) + next + embedding_vector <- embeddings_index[[word]] + if (!is.null(embedding_vector)) { + # words not found in embedding index will be all-zeros. + embedding_matrix[index,] <- embedding_vector + } + } + embedding_matrix +} + +embedding_matrix <- prepare_embedding_matrix() + +# load pre-trained word embeddings into an Embedding layer +# note that we set trainable = False so as to keep the embeddings fixed +embedding_layer <- layer_embedding( + input_dim = num_words, + output_dim = EMBEDDING_DIM, + weights = list(embedding_matrix), + input_length = MAX_SEQUENCE_LENGTH, + trainable = FALSE +) + +cat('Training model\n') + +# train a 1D convnet with global maxpooling +sequence_input <- layer_input(shape = list(MAX_SEQUENCE_LENGTH), dtype='int32') + +preds <- sequence_input %>% + embedding_layer %>% + layer_conv_1d(filters = 128, kernel_size = 5, activation = 'relu') %>% + layer_max_pooling_1d(pool_size = 5) %>% + layer_conv_1d(filters = 128, kernel_size = 5, activation = 'relu') %>% + layer_max_pooling_1d(pool_size = 5) %>% + layer_conv_1d(filters = 128, kernel_size = 5, activation = 'relu') %>% + layer_max_pooling_1d(pool_size = 35) %>% + layer_flatten() %>% + layer_dense(units = 128, activation = 'relu') %>% + layer_dense(units = length(labels_index), activation = 'softmax') + + +model <- keras_model(sequence_input, preds) + +model %>% compile( + loss = 'categorical_crossentropy', + optimizer = 'rmsprop', + metrics = c('acc') +) + +model %>% fit( + x_train, y_train, + batch_size = 128, + epochs = 10, + validation_data = list(x_val, y_val) +) + + + + diff --git a/website/articles/examples/pretrained_word_embeddings.html b/website/articles/examples/pretrained_word_embeddings.html new file mode 100644 index 000000000..614a6f967 --- /dev/null +++ b/website/articles/examples/pretrained_word_embeddings.html @@ -0,0 +1,299 @@ + + + + + + + +pretrained_word_embeddings • keras + + + + + + + +
+
+ + + +
+
+ + + + +
+ +

This script loads pre-trained word embeddings (GloVe embeddings) into a frozen Keras Embedding layer, and uses it to train a text classification model on the 20 Newsgroup dataset (classication of newsgroup messages into 20 different categories).

+

GloVe embedding data can be found at: http://nlp.stanford.edu/data/glove.6B.zip (source page: http://nlp.stanford.edu/projects/glove/)

+

20 Newsgroup data can be found at: http://www.cs.cmu.edu/afs/cs.cmu.edu/project/theo-20/www/data/news20.html

+

IMPORTANT NOTE: This example does yet work correctly. The code executes fine and appears to mimic the Python code upon which it is based however it achieves only half the training accuracy that the Python code does so there is clearly a subtle difference.

+

We need to investigate this further before formally adding to the list of examples

+
library(keras)
+
+GLOVE_DIR <- 'glove.6B'
+TEXT_DATA_DIR <- '20_newsgroup'
+MAX_SEQUENCE_LENGTH <- 1000
+MAX_NB_WORDS <- 20000
+EMBEDDING_DIM <- 100
+VALIDATION_SPLIT <- 0.2
+
+# download data if necessary
+download_data <- function(data_dir, url_path, data_file) {
+  if (!dir.exists(data_dir)) {
+    download.file(paste0(url_path, data_file), data_file, mode = "wb")
+    if (tools::file_ext(data_file) == "zip")
+      unzip(data_file, exdir = tools::file_path_sans_ext(data_file))
+    else
+      untar(data_file)
+    unlink(data_file)
+  }
+}
+download_data(GLOVE_DIR, 'http://nlp.stanford.edu/data/', 'glove.6B.zip')
+download_data(TEXT_DATA_DIR, "http://www.cs.cmu.edu/afs/cs.cmu.edu/project/theo-20/www/data/", "news20.tar.gz")
+
+# first, build index mapping words in the embeddings set
+# to their embedding vector
+
+cat('Indexing word vectors.\n')
+
+embeddings_index <- new.env(parent = emptyenv())
+lines <- readLines(file.path(GLOVE_DIR, 'glove.6B.100d.txt'))
+for (line in lines) {
+  values <- strsplit(line, ' ', fixed = TRUE)[[1]]
+  word <- values[[1]]
+  coefs <- as.numeric(values[-1])
+  embeddings_index[[word]] <- coefs
+}
+
+cat(sprintf('Found %s word vectors.\n', length(embeddings_index)))
+
+# second, prepare text samples and their labels
+cat('Processing text dataset\n')
+
+texts <- character()  # text samples
+labels <- integer() # label ids
+labels_index <- list()  # dictionary: label name to numeric id
+
+for (name in list.files(TEXT_DATA_DIR)) {
+  path <- file.path(TEXT_DATA_DIR, name)
+  if (file_test("-d", path)) {
+    label_id <- length(labels_index)
+    labels_index[[name]] <- label_id
+    for (fname in list.files(path)) {
+      if (grepl("^[0-9]+$", fname)) {
+        fpath <- file.path(path, fname)
+        t <- readLines(fpath, encoding = "latin1")
+        t <- paste(t, collapse = "\n")
+        i <- regexpr(pattern = '\n\n', t, fixed = TRUE)[[1]]
+        if (i != -1L)
+          t <- substring(t, i)
+        texts <- c(texts, t)
+        labels <- c(labels, label_id)
+      }
+    }
+  }
+}
+
+cat(sprintf('Found %s texts.\n', length(texts)))
+
+# finally, vectorize the text samples into a 2D integer tensor
+tokenizer <- text_tokenizer(num_words=MAX_NB_WORDS)
+tokenizer %>% fit_text_tokenizer(texts)
+
+sequences <- texts_to_sequences(tokenizer, texts)
+
+word_index <- tokenizer$word_index
+cat(sprintf('Found %s unique tokens.\n', length(word_index)))
+
+data <- pad_sequences(sequences, maxlen=MAX_SEQUENCE_LENGTH)
+labels <- to_categorical(labels)
+
+cat('Shape of data tensor: ', dim(data), '\n')
+cat('Shape of label tensor: ', dim(labels), '\n')
+
+# split the data into a training set and a validation set
+indices <- 1:nrow(data)
+indices <- sample(indices)
+data <- data[indices,]
+labels <- labels[indices,]
+num_validation_samples <- as.integer(VALIDATION_SPLIT * nrow(data))
+
+x_train <- data[-(1:num_validation_samples),]
+y_train <- labels[-(1:num_validation_samples),]
+x_val <- data[1:num_validation_samples,]
+y_val <- labels[1:num_validation_samples,]
+
+cat('Preparing embedding matrix.\n')
+
+# prepare embedding matrix
+num_words <- min(MAX_NB_WORDS, length(word_index))
+prepare_embedding_matrix <- function() {
+  embedding_matrix <- matrix(0L, nrow = num_words, ncol = EMBEDDING_DIM)
+  for (word in names(word_index)) {
+    index <- word_index[[word]]
+    if (index >= MAX_NB_WORDS)
+      next
+    embedding_vector <- embeddings_index[[word]]
+    if (!is.null(embedding_vector)) {
+      # words not found in embedding index will be all-zeros.
+      embedding_matrix[index,] <- embedding_vector
+    }
+  }
+  embedding_matrix
+}
+
+embedding_matrix <- prepare_embedding_matrix()
+
+# load pre-trained word embeddings into an Embedding layer
+# note that we set trainable = False so as to keep the embeddings fixed
+embedding_layer <- layer_embedding(
+  input_dim = num_words,
+  output_dim = EMBEDDING_DIM,
+  weights = list(embedding_matrix),
+  input_length = MAX_SEQUENCE_LENGTH,
+  trainable = FALSE
+)
+                           
+cat('Training model\n')
+
+# train a 1D convnet with global maxpooling
+sequence_input <- layer_input(shape = list(MAX_SEQUENCE_LENGTH), dtype='int32')
+
+preds <- sequence_input %>%
+  embedding_layer %>% 
+  layer_conv_1d(filters = 128, kernel_size = 5, activation = 'relu') %>% 
+  layer_max_pooling_1d(pool_size = 5) %>% 
+  layer_conv_1d(filters = 128, kernel_size = 5, activation = 'relu') %>% 
+  layer_max_pooling_1d(pool_size = 5) %>% 
+  layer_conv_1d(filters = 128, kernel_size = 5, activation = 'relu') %>% 
+  layer_max_pooling_1d(pool_size = 35) %>% 
+  layer_flatten() %>% 
+  layer_dense(units = 128, activation = 'relu') %>% 
+  layer_dense(units = length(labels_index), activation = 'softmax')
+
+
+model <- keras_model(sequence_input, preds)
+
+model %>% compile(
+  loss = 'categorical_crossentropy',
+  optimizer = 'rmsprop',
+  metrics = c('acc')  
+)
+
+model %>% fit(
+  x_train, y_train,
+  batch_size = 128,
+  epochs = 10,
+  validation_data = list(x_val, y_val)
+)
+
+
+ + + +
+ + +
+ +
+

Site built with pkgdown.

+
+ +
+
+ + + diff --git a/website/articles/examples/pretrained_word_embeddings.py b/website/articles/examples/pretrained_word_embeddings.py new file mode 100755 index 000000000..30a25a7fa --- /dev/null +++ b/website/articles/examples/pretrained_word_embeddings.py @@ -0,0 +1,150 @@ +'''This script loads pre-trained word embeddings (GloVe embeddings) +into a frozen Keras Embedding layer, and uses it to +train a text classification model on the 20 Newsgroup dataset +(classication of newsgroup messages into 20 different categories). + +GloVe embedding data can be found at: +http://nlp.stanford.edu/data/glove.6B.zip +(source page: http://nlp.stanford.edu/projects/glove/) + +20 Newsgroup data can be found at: +http://www.cs.cmu.edu/afs/cs.cmu.edu/project/theo-20/www/data/news20.html +''' + +from __future__ import print_function + +import os +import sys +import numpy as np +import tensorflow.contrib.keras.api.keras as keras +from tensorflow.contrib.keras.api.keras.preprocessing.text import Tokenizer +from tensorflow.contrib.keras.api.keras.preprocessing.sequence import pad_sequences +from tensorflow.contrib.keras.api.keras.utils import to_categorical +from tensorflow.contrib.keras.api.keras.layers import Dense, Input, Flatten +from tensorflow.contrib.keras.api.keras.layers import Conv1D, MaxPooling1D, Embedding +from tensorflow.contrib.keras.api.keras.models import Model + + +BASE_DIR = '.' +GLOVE_DIR = BASE_DIR + '/glove.6B/' +TEXT_DATA_DIR = BASE_DIR + '/20_newsgroup/' +MAX_SEQUENCE_LENGTH = 1000 +MAX_NB_WORDS = 20000 +EMBEDDING_DIM = 100 +VALIDATION_SPLIT = 0.2 + +# first, build index mapping words in the embeddings set +# to their embedding vector + +print('Indexing word vectors.') + +embeddings_index = {} +f = open(os.path.join(GLOVE_DIR, 'glove.6B.100d.txt')) +for line in f: + values = line.split() + word = values[0] + coefs = np.asarray(values[1:], dtype='float32') + embeddings_index[word] = coefs +f.close() + +print('Found %s word vectors.' % len(embeddings_index)) + +# second, prepare text samples and their labels +print('Processing text dataset') + +texts = [] # list of text samples +labels_index = {} # dictionary mapping label name to numeric id +labels = [] # list of label ids +for name in sorted(os.listdir(TEXT_DATA_DIR)): + path = os.path.join(TEXT_DATA_DIR, name) + if os.path.isdir(path): + label_id = len(labels_index) + labels_index[name] = label_id + for fname in sorted(os.listdir(path)): + if fname.isdigit(): + fpath = os.path.join(path, fname) + if sys.version_info < (3,): + f = open(fpath) + else: + f = open(fpath, encoding='latin-1') + t = f.read() + i = t.find('\n\n') # skip header + if 0 < i: + t = t[i:] + texts.append(t) + f.close() + labels.append(label_id) + +print('Found %s texts.' % len(texts)) + +# finally, vectorize the text samples into a 2D integer tensor +tokenizer = Tokenizer(num_words=MAX_NB_WORDS) +tokenizer.fit_on_texts(texts) +sequences = tokenizer.texts_to_sequences(texts) + +word_index = tokenizer.word_index +print('Found %s unique tokens.' % len(word_index)) + +data = pad_sequences(sequences, maxlen=MAX_SEQUENCE_LENGTH) + +labels = to_categorical(np.asarray(labels)) +print('Shape of data tensor:', data.shape) +print('Shape of label tensor:', labels.shape) + +# split the data into a training set and a validation set +indices = np.arange(data.shape[0]) +np.random.shuffle(indices) +data = data[indices] +labels = labels[indices] +num_validation_samples = int(VALIDATION_SPLIT * data.shape[0]) + +x_train = data[:-num_validation_samples] +y_train = labels[:-num_validation_samples] +x_val = data[-num_validation_samples:] +y_val = labels[-num_validation_samples:] + +print('Preparing embedding matrix.') + +# prepare embedding matrix +num_words = min(MAX_NB_WORDS, len(word_index)) +embedding_matrix = np.zeros((num_words, EMBEDDING_DIM)) +for word, i in word_index.items(): + if i >= MAX_NB_WORDS: + continue + embedding_vector = embeddings_index.get(word) + if embedding_vector is not None: + # words not found in embedding index will be all-zeros. + embedding_matrix[i] = embedding_vector + +# load pre-trained word embeddings into an Embedding layer +# note that we set trainable = False so as to keep the embeddings fixed +embedding_layer = Embedding(num_words, + EMBEDDING_DIM, + weights=[embedding_matrix], + input_length=MAX_SEQUENCE_LENGTH, + trainable=False) + +print('Training model.') + +# train a 1D convnet with global maxpooling +sequence_input = Input(shape=(MAX_SEQUENCE_LENGTH,), dtype='int32') +embedded_sequences = embedding_layer(sequence_input) +x = Conv1D(128, 5, activation='relu')(embedded_sequences) +x = MaxPooling1D(5)(x) +x = Conv1D(128, 5, activation='relu')(x) +x = MaxPooling1D(5)(x) +x = Conv1D(128, 5, activation='relu')(x) +x = MaxPooling1D(35)(x) +x = Flatten()(x) +x = Dense(128, activation='relu')(x) +preds = Dense(len(labels_index), activation='softmax')(x) + +model = Model(sequence_input, preds) +model.compile(loss='categorical_crossentropy', + optimizer='rmsprop', + metrics=['acc']) + +model.fit(x_train, y_train, + batch_size=128, + epochs=10, + validation_data=(x_val, y_val)) diff --git a/website/articles/examples/reuters_mlp.R b/website/articles/examples/reuters_mlp.R new file mode 100644 index 000000000..cc1600e1d --- /dev/null +++ b/website/articles/examples/reuters_mlp.R @@ -0,0 +1,69 @@ +#' Train and evaluate a simple MLP on the Reuters newswire topic classification task. + +library(keras) + +max_words <- 1000 +batch_size <- 32 +epochs <- 5 + +cat('Loading data...\n') +reuters <- dataset_reuters(num_words = max_words, test_split = 0.2) +x_train <- reuters$train$x +y_train <- reuters$train$y +x_test <- reuters$test$x +y_test <- reuters$test$y + +cat(length(x_train), 'train sequences\n') +cat(length(x_test), 'test sequences\n') + +num_classes <- max(y_train) + 1 +cat(num_classes, '\n') + +cat('Vectorizing sequence data...\n') + +tokenizer <- text_tokenizer(num_words = max_words) +x_train <- sequences_to_matrix(tokenizer, x_train, mode = 'binary') +x_test <- sequences_to_matrix(tokenizer, x_test, mode = 'binary') + +cat('x_train shape:', dim(x_train), '\n') +cat('x_test shape:', dim(x_test), '\n') + +cat('Convert class vector to binary class matrix', + '(for use with categorical_crossentropy)\n') +y_train <- to_categorical(y_train, num_classes) +y_test <- to_categorical(y_test, num_classes) +cat('y_train shape:', dim(y_train), '\n') +cat('y_test shape:', dim(y_test), '\n') + +cat('Building model...\n') +model <- keras_model_sequential() +model %>% + layer_dense(units = 512, input_shape = c(max_words)) %>% + layer_activation(activation = 'relu') %>% + layer_dropout(rate = 0.5) %>% + layer_dense(units = num_classes) %>% + layer_activation(activation = 'softmax') + +model %>% compile( + loss = 'categorical_crossentropy', + optimizer = 'adam', + metrics = c('accuracy') +) + +history <- model %>% fit( + x_train, y_train, + batch_size = batch_size, + epochs = epochs, + verbose = 1, + validation_split = 0.1 +) + +score <- model %>% evaluate( + x_test, y_test, + batch_size = batch_size, + verbose = 1 +) + +cat('Test score:', score[[1]], '\n') +cat('Test accuracy', score[[2]], '\n') + diff --git a/website/articles/examples/reuters_mlp.html b/website/articles/examples/reuters_mlp.html new file mode 100644 index 000000000..2b1f106fb --- /dev/null +++ b/website/articles/examples/reuters_mlp.html @@ -0,0 +1,203 @@ + + + + + + + +reuters_mlp • keras + + + + + + + +
+
+ + + +
+
+ + + + +
+ +

Train and evaluate a simple MLP on the Reuters newswire topic classification task.

+
library(keras)
+
+max_words <- 1000
+batch_size <- 32
+epochs <- 5
+
+cat('Loading data...\n')
+reuters <- dataset_reuters(num_words = max_words, test_split = 0.2)
+x_train <- reuters$train$x
+y_train <- reuters$train$y
+x_test <- reuters$test$x
+y_test <- reuters$test$y
+
+cat(length(x_train), 'train sequences\n')
+cat(length(x_test), 'test sequences\n')
+
+num_classes <- max(y_train) + 1
+cat(num_classes, '\n')
+
+cat('Vectorizing sequence data...\n')
+
+tokenizer <- text_tokenizer(num_words = max_words)
+x_train <- sequences_to_matrix(tokenizer, x_train, mode = 'binary')
+x_test <- sequences_to_matrix(tokenizer, x_test, mode = 'binary')
+
+cat('x_train shape:', dim(x_train), '\n')
+cat('x_test shape:', dim(x_test), '\n')
+
+cat('Convert class vector to binary class matrix',
+    '(for use with categorical_crossentropy)\n')
+y_train <- to_categorical(y_train, num_classes)
+y_test <- to_categorical(y_test, num_classes)
+cat('y_train shape:', dim(y_train), '\n')
+cat('y_test shape:', dim(y_test), '\n')
+
+cat('Building model...\n')
+model <- keras_model_sequential()
+model %>%
+  layer_dense(units = 512, input_shape = c(max_words)) %>% 
+  layer_activation(activation = 'relu') %>% 
+  layer_dropout(rate = 0.5) %>% 
+  layer_dense(units = num_classes) %>% 
+  layer_activation(activation = 'softmax')
+
+model %>% compile(
+  loss = 'categorical_crossentropy',
+  optimizer = 'adam',
+  metrics = c('accuracy')
+)
+
+history <- model %>% fit(
+  x_train, y_train,
+  batch_size = batch_size,
+  epochs = epochs,
+  verbose = 1,
+  validation_split = 0.1
+)
+
+score <- model %>% evaluate(
+  x_test, y_test,
+  batch_size = batch_size,
+  verbose = 1
+)
+
+cat('Test score:', score[[1]], '\n')
+cat('Test accuracy', score[[2]], '\n')
+
+
+ + + +
+ + +
+ +
+

Site built with pkgdown.

+
+ +
+
+ + + diff --git a/website/articles/examples/reuters_mlp_relu_vs_selu.R b/website/articles/examples/reuters_mlp_relu_vs_selu.R new file mode 100644 index 000000000..0ab13681d --- /dev/null +++ b/website/articles/examples/reuters_mlp_relu_vs_selu.R @@ -0,0 +1 @@ +library(keras) diff --git a/website/articles/examples/reuters_mlp_relu_vs_selu.html b/website/articles/examples/reuters_mlp_relu_vs_selu.html new file mode 100644 index 000000000..0538eca0d --- /dev/null +++ b/website/articles/examples/reuters_mlp_relu_vs_selu.html @@ -0,0 +1,137 @@ + + + + + + + +reuters_mlp_relu_vs_selu • keras + + + + + + + +
+
+ + + +
+
+ + + + + +
+ + + +
+ + +
+ +
+

Site built with pkgdown.

+
+ +
+
+ + + diff --git a/website/articles/examples/reuters_mlp_relu_vs_selu.py b/website/articles/examples/reuters_mlp_relu_vs_selu.py new file mode 100644 index 000000000..8c1fe9662 --- /dev/null +++ b/website/articles/examples/reuters_mlp_relu_vs_selu.py @@ -0,0 +1,174 @@ +'''Compares self-normalizing MLPs with regular MLPs. + +Compares the performance of a simple MLP using two +different activation functions: RELU and SELU +on the Reuters newswire topic classification task. + +# Reference: + Klambauer, G., Unterthiner, T., Mayr, A., & Hochreiter, S. (2017). + Self-Normalizing Neural Networks. arXiv preprint arXiv:1706.02515. + https://arxiv.org/abs/1706.02515 +''' +from __future__ import print_function + +import numpy as np +import matplotlib.pyplot as plt +import keras +from keras.datasets import reuters +from keras.models import Sequential +from keras.layers import Dense, Activation, Dropout +from keras.layers.noise import AlphaDropout +from keras.preprocessing.text import Tokenizer + +max_words = 1000 +batch_size = 16 +epochs = 40 +plot = True + + +def create_network(n_dense=6, + dense_units=16, + activation='selu', + dropout=AlphaDropout, + dropout_rate=0.1, + kernel_initializer='lecun_normal', + optimizer='adam', + num_classes=1, + max_words=max_words): + """Generic function to create a fully-connected neural network. + + # Arguments + n_dense: int > 0. Number of dense layers. + dense_units: int > 0. Number of dense units per layer. + dropout: keras.layers.Layer. A dropout layer to apply. + dropout_rate: 0 <= float <= 1. The rate of dropout. + kernel_initializer: str. The initializer for the weights. + optimizer: str/keras.optimizers.Optimizer. The optimizer to use. + num_classes: int > 0. The number of classes to predict. + max_words: int > 0. The maximum number of words per data point. + + # Returns + A Keras model instance (compiled). + """ + model = Sequential() + model.add(Dense(dense_units, input_shape=(max_words,), + kernel_initializer=kernel_initializer)) + model.add(Activation(activation)) + model.add(dropout(dropout_rate)) + + for i in range(n_dense - 1): + model.add(Dense(dense_units, kernel_initializer=kernel_initializer)) + model.add(Activation(activation)) + model.add(dropout(dropout_rate)) + + model.add(Dense(num_classes)) + model.add(Activation('softmax')) + model.compile(loss='categorical_crossentropy', + optimizer=optimizer, + metrics=['accuracy']) + return model + + +network1 = { + 'n_dense': 6, + 'dense_units': 16, + 'activation': 'relu', + 'dropout': Dropout, + 'dropout_rate': 0.5, + 'kernel_initializer': 'glorot_uniform', + 'optimizer': 'sgd' +} + +network2 = { + 'n_dense': 6, + 'dense_units': 16, + 'activation': 'selu', + 'dropout': AlphaDropout, + 'dropout_rate': 0.1, + 'kernel_initializer': 'lecun_normal', + 'optimizer': 'sgd' +} + +print('Loading data...') +(x_train, y_train), (x_test, y_test) = reuters.load_data(num_words=max_words, + test_split=0.2) +print(len(x_train), 'train sequences') +print(len(x_test), 'test sequences') + +num_classes = np.max(y_train) + 1 +print(num_classes, 'classes') + +print('Vectorizing sequence data...') +tokenizer = Tokenizer(num_words=max_words) +x_train = tokenizer.sequences_to_matrix(x_train, mode='binary') +x_test = tokenizer.sequences_to_matrix(x_test, mode='binary') +print('x_train shape:', x_train.shape) +print('x_test shape:', x_test.shape) + +print('Convert class vector to binary class matrix ' + '(for use with categorical_crossentropy)') +y_train = keras.utils.to_categorical(y_train, num_classes) +y_test = keras.utils.to_categorical(y_test, num_classes) +print('y_train shape:', y_train.shape) +print('y_test shape:', y_test.shape) + +print('\nBuilding network 1...') + +model1 = create_network(num_classes=num_classes, **network1) +history_model1 = model1.fit(x_train, + y_train, + batch_size=batch_size, + epochs=epochs, + verbose=1, + validation_split=0.1) + +score_model1 = model1.evaluate(x_test, + y_test, + batch_size=batch_size, + verbose=1) + + +print('\nBuilding network 2...') +model2 = create_network(num_classes=num_classes, **network2) + +history_model2 = model2.fit(x_train, + y_train, + batch_size=batch_size, + epochs=epochs, + verbose=1, + validation_split=0.1) + +score_model2 = model2.evaluate(x_test, + y_test, + batch_size=batch_size, + verbose=1) + +print('\nNetwork 1 results') +print('Hyperparameters:', network1) +print('Test score:', score_model1[0]) +print('Test accuracy:', score_model1[1]) +print('Network 2 results') +print('Hyperparameters:', network2) +print('Test score:', score_model2[0]) +print('Test accuracy:', score_model2[1]) + +plt.plot(range(epochs), + history_model1.history['val_loss'], + 'g-', + label='Network 1 Val Loss') +plt.plot(range(epochs), + history_model2.history['val_loss'], + 'r-', + label='Network 2 Val Loss') +plt.plot(range(epochs), + history_model1.history['loss'], + 'g--', + label='Network 1 Loss') +plt.plot(range(epochs), + history_model2.history['loss'], + 'r--', + label='Network 2 Loss') +plt.xlabel('Epochs') +plt.ylabel('Loss') +plt.legend() +plt.savefig('comparison_of_networks.png') diff --git a/website/articles/examples/stateful_lstm.R b/website/articles/examples/stateful_lstm.R new file mode 100644 index 000000000..4f9b9d453 --- /dev/null +++ b/website/articles/examples/stateful_lstm.R @@ -0,0 +1,76 @@ +#' Example script showing how to use stateful RNNs to model long sequences +#' efficiently. +#' + +library(keras) + +# since we are using stateful rnn tsteps can be set to 1 +tsteps <- 1 +batch_size <- 25 +epochs <- 25 +# number of elements ahead that are used to make the prediction +lahead <- 1 + +# Generates an absolute cosine time series with the amplitude exponentially decreasing +# Arguments: +# amp: amplitude of the cosine function +# period: period of the cosine function +# x0: initial x of the time series +# xn: final x of the time series +# step: step of the time series discretization +# k: exponential rate +gen_cosine_amp <- function(amp = 100, period = 1000, x0 = 0, xn = 50000, step = 1, k = 0.0001) { + n <- (xn-x0) * step + cos <- array(data = numeric(n), dim = c(n, 1, 1)) + for (i in 1:length(cos)) { + idx <- x0 + i * step + cos[[i, 1, 1]] <- amp * cos(2 * pi * idx / period) + cos[[i, 1, 1]] <- cos[[i, 1, 1]] * exp(-k * idx) + } + cos +} + +cat('Generating Data...\n') +cos <- gen_cosine_amp() +cat('Input shape:', dim(cos), '\n') + +expected_output <- array(data = numeric(length(cos)), dim = c(length(cos), 1)) +for (i in 1:(length(cos) - lahead)) { + expected_output[[i, 1]] <- mean(cos[(i + 1):(i + lahead)]) +} + +cat('Output shape:', dim(expected_output), '\n') + +cat('Creating model:\n') +model <- keras_model_sequential() +model %>% + layer_lstm(units = 50, input_shape = c(tsteps, 1), batch_size = batch_size, + return_sequences = TRUE, stateful = TRUE) %>% + layer_lstm(units = 50, return_sequences = FALSE, stateful = TRUE) %>% + layer_dense(units = 1) +model %>% compile(loss = 'mse', optimizer = 'rmsprop') + +cat('Training\n') +for (i in 1:epochs) { + model %>% fit(cos, expected_output, batch_size = batch_size, + epochs = 1, verbose = 1, shuffle = FALSE) + + model %>% reset_states() +} + +cat('Predicting\n') +predicted_output <- model %>% predict(cos, batch_size = batch_size) + +cat('Plotting Results\n') +op <- par(mfrow=c(2,1)) +plot(expected_output, xlab = '') +title("Expected") +plot(predicted_output, xlab = '') +title("Predicted") +par(op) + + + + + + diff --git a/website/articles/examples/stateful_lstm.html b/website/articles/examples/stateful_lstm.html new file mode 100644 index 000000000..ed9153fb6 --- /dev/null +++ b/website/articles/examples/stateful_lstm.html @@ -0,0 +1,203 @@ + + + + + + + +stateful_lstm • keras + + + + + + + +
+
+ + + +
+
+ + + + +
+ +

Example script showing how to use stateful RNNs to model long sequences efficiently.

+
library(keras)
+
+# since we are using stateful rnn tsteps can be set to 1
+tsteps <- 1
+batch_size <- 25
+epochs <- 25
+# number of elements ahead that are used to make the prediction
+lahead <- 1
+
+# Generates an absolute cosine time series with the amplitude exponentially decreasing
+# Arguments:
+#   amp: amplitude of the cosine function
+#   period: period of the cosine function
+#   x0: initial x of the time series
+#   xn: final x of the time series
+#   step: step of the time series discretization
+#   k: exponential rate
+gen_cosine_amp <- function(amp = 100, period = 1000, x0 = 0, xn = 50000, step = 1, k = 0.0001) {
+  n <- (xn-x0) * step
+  cos <- array(data = numeric(n), dim = c(n, 1, 1))
+  for (i in 1:length(cos)) {
+    idx <- x0 + i * step
+    cos[[i, 1, 1]] <- amp * cos(2 * pi * idx / period)
+    cos[[i, 1, 1]] <- cos[[i, 1, 1]] * exp(-k * idx)
+  }
+  cos
+}
+
+cat('Generating Data...\n')
+cos <- gen_cosine_amp()
+cat('Input shape:', dim(cos), '\n')
+
+expected_output <- array(data = numeric(length(cos)), dim = c(length(cos), 1))
+for (i in 1:(length(cos) - lahead)) {
+  expected_output[[i, 1]] <- mean(cos[(i + 1):(i + lahead)])
+}
+
+cat('Output shape:', dim(expected_output), '\n')
+
+cat('Creating model:\n')
+model <- keras_model_sequential()
+model %>%
+  layer_lstm(units = 50, input_shape = c(tsteps, 1), batch_size = batch_size,
+             return_sequences = TRUE, stateful = TRUE) %>% 
+  layer_lstm(units = 50, return_sequences = FALSE, stateful = TRUE) %>% 
+  layer_dense(units = 1)
+model %>% compile(loss = 'mse', optimizer = 'rmsprop')
+
+cat('Training\n')
+for (i in 1:epochs) {
+  model %>% fit(cos, expected_output, batch_size = batch_size,
+                epochs = 1, verbose = 1, shuffle = FALSE)
+            
+  model %>% reset_states()
+}
+
+cat('Predicting\n')
+predicted_output <- model %>% predict(cos, batch_size = batch_size)
+
+cat('Plotting Results\n')
+op <- par(mfrow=c(2,1))
+plot(expected_output, xlab = '')
+title("Expected")
+plot(predicted_output, xlab = '')
+title("Predicted")
+par(op)
+
+
+ + + +
+ + +
+ +
+

Site built with pkgdown.

+
+ +
+
+ + + diff --git a/website/articles/examples/variational_autoencoder.R b/website/articles/examples/variational_autoencoder.R new file mode 100644 index 000000000..877bab713 --- /dev/null +++ b/website/articles/examples/variational_autoencoder.R @@ -0,0 +1,117 @@ +#' This script demonstrates how to build a variational autoencoder with Keras. +#' Reference: "Auto-Encoding Variational Bayes" https://arxiv.org/abs/1312.6114 + +library(keras) +K <- keras::backend() + +# Parameters -------------------------------------------------------------- + +batch_size <- 100L +original_dim <- 784L +latent_dim <- 2L +intermediate_dim <- 256L +epochs <- 50L +epsilon_std <- 1.0 + +# Model definition -------------------------------------------------------- + +x <- layer_input(batch_shape = c(batch_size, original_dim)) +h <- layer_dense(x, intermediate_dim, activation = "relu") +z_mean <- layer_dense(h, latent_dim) +z_log_var <- layer_dense(h, latent_dim) + +sampling <- function(arg){ + z_mean <- arg[,0:1] + z_log_var <- arg[,2:3] + + epsilon <- K$random_normal( + shape = c(batch_size, latent_dim), + mean=0., + stddev=epsilon_std + ) + + z_mean + K$exp(z_log_var/2)*epsilon +} + +# note that "output_shape" isn't necessary with the TensorFlow backend +z <- layer_concatenate(list(z_mean, z_log_var)) %>% + layer_lambda(sampling) + +# we instantiate these layers separately so as to reuse them later +decoder_h <- layer_dense(units = intermediate_dim, activation = "relu") +decoder_mean <- layer_dense(units = original_dim, activation = "sigmoid") +h_decoded <- decoder_h(z) +x_decoded_mean <- decoder_mean(h_decoded) + +# end-to-end autoencoder +vae <- keras_model(x, x_decoded_mean) + +# encoder, from inputs to latent space +encoder <- keras_model(x, z_mean) + +# generator, from latent space to reconstructed inputs +decoder_input <- layer_input(shape = latent_dim) +h_decoded_2 <- decoder_h(decoder_input) +x_decoded_mean_2 <- decoder_mean(h_decoded_2) +generator <- keras_model(decoder_input, x_decoded_mean_2) + + +vae_loss <- function(x, x_decoded_mean){ + xent_loss <- (original_dim/1.0)*loss_binary_crossentropy(x, x_decoded_mean) + kl_loss <- -0.5*K$mean(1 + z_log_var - K$square(z_mean) - K$exp(z_log_var), axis = -1L) + xent_loss + kl_loss +} + +vae %>% compile(optimizer = "rmsprop", loss = vae_loss) + + +# Data preparation -------------------------------------------------------- + +mnist <- dataset_mnist() +x_train <- mnist$train$x/255 +x_test <- mnist$test$x/255 +x_train <- x_train %>% apply(1, as.numeric) %>% t() +x_test <- x_test %>% apply(1, as.numeric) %>% t() + + +# Model training ---------------------------------------------------------- + +vae %>% fit( + x_train, x_train, + shuffle = TRUE, + epochs = epochs, + batch_size = batch_size, + validation_data = list(x_test, x_test) +) + + +# Visualizations ---------------------------------------------------------- + +library(ggplot2) +library(dplyr) +x_test_encoded <- predict(encoder, x_test, batch_size = batch_size) + +x_test_encoded %>% + as_data_frame() %>% + mutate(class = as.factor(mnist$test$y)) %>% + ggplot(aes(x = V1, y = V2, colour = class)) + geom_point() + +# display a 2D manifold of the digits +n <- 15 # figure with 15x15 digits +digit_size <- 28 + +# we will sample n points within [-4, 4] standard deviations +grid_x <- seq(-4, 4, length.out = n) +grid_y <- seq(-4, 4, length.out = n) + +rows <- NULL +for(i in 1:length(grid_x)){ + column <- NULL + for(j in 1:length(grid_y)){ + z_sample <- matrix(c(grid_x[i], grid_y[j]), ncol = 2) + column <- rbind(column, predict(generator, z_sample) %>% matrix(ncol = 28) ) + } + rows <- cbind(rows, column) +} +rows %>% as.raster() %>% plot() + diff --git a/website/articles/examples/variational_autoencoder.html b/website/articles/examples/variational_autoencoder.html new file mode 100644 index 000000000..19c9fff48 --- /dev/null +++ b/website/articles/examples/variational_autoencoder.html @@ -0,0 +1,250 @@ + + + + + + + +variational_autoencoder • keras + + + + + + + +
+
+ + + +
+
+ + + + +
+ +

This script demonstrates how to build a variational autoencoder with Keras. Reference: “Auto-Encoding Variational Bayes” https://arxiv.org/abs/1312.6114

+
library(keras)
+K <- keras::backend()
+
+# Parameters --------------------------------------------------------------
+
+batch_size <- 100L
+original_dim <- 784L
+latent_dim <- 2L
+intermediate_dim <- 256L
+epochs <- 50L
+epsilon_std <- 1.0
+
+# Model definition --------------------------------------------------------
+
+x <- layer_input(batch_shape = c(batch_size, original_dim))
+h <- layer_dense(x, intermediate_dim, activation = "relu")
+z_mean <- layer_dense(h, latent_dim)
+z_log_var <- layer_dense(h, latent_dim)
+
+sampling <- function(arg){
+  z_mean <- arg[,0:1]
+  z_log_var <- arg[,2:3]
+  
+  epsilon <- K$random_normal(
+    shape = c(batch_size, latent_dim), 
+    mean=0.,
+    stddev=epsilon_std
+  )
+  
+  z_mean + K$exp(z_log_var/2)*epsilon
+}
+
+# note that "output_shape" isn't necessary with the TensorFlow backend
+z <- layer_concatenate(list(z_mean, z_log_var)) %>% 
+  layer_lambda(sampling)
+
+# we instantiate these layers separately so as to reuse them later
+decoder_h <- layer_dense(units = intermediate_dim, activation = "relu")
+decoder_mean <- layer_dense(units = original_dim, activation = "sigmoid")
+h_decoded <- decoder_h(z)
+x_decoded_mean <- decoder_mean(h_decoded)
+
+# end-to-end autoencoder
+vae <- keras_model(x, x_decoded_mean)
+
+# encoder, from inputs to latent space
+encoder <- keras_model(x, z_mean)
+
+# generator, from latent space to reconstructed inputs
+decoder_input <- layer_input(shape = latent_dim)
+h_decoded_2 <- decoder_h(decoder_input)
+x_decoded_mean_2 <- decoder_mean(h_decoded_2)
+generator <- keras_model(decoder_input, x_decoded_mean_2)
+
+
+vae_loss <- function(x, x_decoded_mean){
+  xent_loss <- (original_dim/1.0)*loss_binary_crossentropy(x, x_decoded_mean)
+  kl_loss <- -0.5*K$mean(1 + z_log_var - K$square(z_mean) - K$exp(z_log_var), axis = -1L)
+  xent_loss + kl_loss
+}
+
+vae %>% compile(optimizer = "rmsprop", loss = vae_loss)
+
+
+# Data preparation --------------------------------------------------------
+
+mnist <- dataset_mnist()
+x_train <- mnist$train$x/255
+x_test <- mnist$test$x/255
+x_train <- x_train %>% apply(1, as.numeric) %>% t()
+x_test <- x_test %>% apply(1, as.numeric) %>% t()
+
+
+# Model training ----------------------------------------------------------
+
+vae %>% fit(
+  x_train, x_train, 
+  shuffle = TRUE, 
+  epochs = epochs, 
+  batch_size = batch_size, 
+  validation_data = list(x_test, x_test)
+)
+
+
+# Visualizations ----------------------------------------------------------
+
+library(ggplot2)
+library(dplyr)
+x_test_encoded <- predict(encoder, x_test, batch_size = batch_size)
+
+x_test_encoded %>%
+  as_data_frame() %>% 
+  mutate(class = as.factor(mnist$test$y)) %>%
+  ggplot(aes(x = V1, y = V2, colour = class)) + geom_point()
+
+# display a 2D manifold of the digits
+n <- 15  # figure with 15x15 digits
+digit_size <- 28
+
+# we will sample n points within [-4, 4] standard deviations
+grid_x <- seq(-4, 4, length.out = n)
+grid_y <- seq(-4, 4, length.out = n)
+
+rows <- NULL
+for(i in 1:length(grid_x)){
+  column <- NULL
+  for(j in 1:length(grid_y)){
+    z_sample <- matrix(c(grid_x[i], grid_y[j]), ncol = 2)
+    column <- rbind(column, predict(generator, z_sample) %>% matrix(ncol = 28) )
+  }
+  rows <- cbind(rows, column)
+}
+rows %>% as.raster() %>% plot()
+
+
+ + + +
+ + +
+ +
+

Site built with pkgdown.

+
+ +
+
+ + + diff --git a/website/articles/examples/variational_autoencoder_deconv.R b/website/articles/examples/variational_autoencoder_deconv.R new file mode 100644 index 000000000..c7103cce5 --- /dev/null +++ b/website/articles/examples/variational_autoencoder_deconv.R @@ -0,0 +1,220 @@ +#' This script demonstrates how to build a variational autoencoder with Keras +#' and deconvolution layers. +#' Reference: "Auto-Encoding Variational Bayes" https://arxiv.org/abs/1312.6114 + +library(keras) +K <- keras::backend() + +#### Parameterization #### + +# input image dimensions +img_rows <- 28L +img_cols <- 28L +# color channels (1 = grayscale, 3 = RGB) +img_chns <- 1L + +# number of convolutional filters to use +filters <- 64L + +# convolution kernel size +num_conv <- 3L + +latent_dim <- 2L +intermediate_dim <- 128L +epsilon_std <- 1.0 + +# training parameters +batch_size <- 100L +epochs <- 5L + + +#### Model Construction #### + +original_img_size <- c(img_rows, img_cols, img_chns) + +x <- layer_input(batch_shape = c(batch_size, original_img_size)) + +conv_1 <- layer_conv_2d( + x, + filters = img_chns, + kernel_size = c(2L, 2L), + strides = c(1L, 1L), + padding = "same", + activation = "relu" +) + +conv_2 <- layer_conv_2d( + conv_1, + filters = filters, + kernel_size = c(2L, 2L), + strides = c(2L, 2L), + padding = "same", + activation = "relu" +) + +conv_3 <- layer_conv_2d( + conv_2, + filters = filters, + kernel_size = c(num_conv, num_conv), + strides = c(1L, 1L), + padding = "same", + activation = "relu" +) + +conv_4 <- layer_conv_2d( + conv_3, + filters = filters, + kernel_size = c(num_conv, num_conv), + strides = c(1L, 1L), + padding = "same", + activation = "relu" +) + +flat <- layer_flatten(conv_4) +hidden <- layer_dense(flat, units = intermediate_dim, activation = "relu") + +z_mean <- layer_dense(hidden, units = latent_dim) +z_log_var <- layer_dense(hidden, units = latent_dim) + +sampling <- function(args) { + z_mean <- args[, 0:(latent_dim - 1)] + z_log_var <- args[, latent_dim:(2 * latent_dim - 1)] + + epsilon <- K$random_normal( + shape = c(batch_size, latent_dim), + mean = 0., + stddev = epsilon_std + ) + z_mean + K$exp(z_log_var) * epsilon +} + +z <- layer_concatenate(list(z_mean, z_log_var)) %>% layer_lambda(sampling) + +output_shape <- c(batch_size, 14L, 14L, filters) + +decoder_hidden <- layer_dense(units = intermediate_dim, activation = "relu") +decoder_upsample <- layer_dense(units = prod(output_shape[-1]), activation = "relu") + +decoder_reshape <- layer_reshape(target_shape = output_shape[-1]) +decoder_deconv_1 <- layer_conv_2d_transpose( + filters = filters, + kernel_size = c(num_conv, num_conv), + strides = c(1L, 1L), + padding = "same", + activation = "relu" +) + +decoder_deconv_2 <- layer_conv_2d_transpose( + filters = filters, + kernel_size = c(num_conv, num_conv), + strides = c(1L, 1L), + padding = "same", + activation = "relu" +) + +decoder_deconv_3_upsample <- layer_conv_2d_transpose( + filters = filters, + kernel_size = c(3L, 3L), + strides = c(2L, 2L), + padding = "valid", + activation = "relu" +) + +decoder_mean_squash <- layer_conv_2d( + filters = img_chns, + kernel_size = c(2L, 2L), + strides = c(1L, 1L), + padding = "valid", + activation = "sigmoid" +) + +hidden_decoded <- decoder_hidden(z) +up_decoded <- decoder_upsample(hidden_decoded) +reshape_decoded <- decoder_reshape(up_decoded) +deconv_1_decoded <- decoder_deconv_1(reshape_decoded) +deconv_2_decoded <- decoder_deconv_2(deconv_1_decoded) +x_decoded_relu <- decoder_deconv_3_upsample(deconv_2_decoded) +x_decoded_mean_squash <- decoder_mean_squash(x_decoded_relu) + +# custom loss function +vae_loss <- function(x, x_decoded_mean_squash) { + x <- K$flatten(x) + x_decoded_mean_squash <- K$flatten(x_decoded_mean_squash) + xent_loss <- 1.0 * img_rows * img_cols * + loss_binary_crossentropy(x, x_decoded_mean_squash) + kl_loss <- -0.5 * K$mean(1 + z_log_var - K$square(z_mean) - + K$exp(z_log_var), axis = -1L) + K$mean(xent_loss + kl_loss) +} + +## variational autoencoder +vae <- keras_model(x, x_decoded_mean_squash) +vae %>% compile(optimizer = "rmsprop", loss = vae_loss) +summary(vae) + +## encoder: model to project inputs on the latent space +encoder <- keras_model(x, z_mean) + +## build a digit generator that can sample from the learned distribution +gen_decoder_input <- layer_input(shape = latent_dim) +gen_hidden_decoded <- decoder_hidden(gen_decoder_input) +gen_up_decoded <- decoder_upsample(gen_hidden_decoded) +gen_reshape_decoded <- decoder_reshape(gen_up_decoded) +gen_deconv_1_decoded <- decoder_deconv_1(gen_reshape_decoded) +gen_deconv_2_decoded <- decoder_deconv_2(gen_deconv_1_decoded) +gen_x_decoded_relu <- decoder_deconv_3_upsample(gen_deconv_2_decoded) +gen_x_decoded_mean_squash <- decoder_mean_squash(gen_x_decoded_relu) +generator <- keras_model(gen_decoder_input, gen_x_decoded_mean_squash) + + +#### Data Preparation #### + +mnist <- dataset_mnist() +data <- lapply(mnist, function(m) { + array(m$x / 255, dim = c(dim(m$x)[1], original_img_size)) +}) +x_train <- data$train +x_test <- data$test + + +#### Model Fitting #### + +vae %>% fit( + x_train, x_train, + shuffle = TRUE, + epochs = epochs, + batch_size = batch_size, + validation_data = list(x_test, x_test) +) + + +#### Visualizations #### + +library(ggplot2) +library(dplyr) + +## display a 2D plot of the digit classes in the latent space +x_test_encoded <- predict(encoder, x_test, batch_size = batch_size) +x_test_encoded %>% + as_data_frame() %>% + mutate(class = as.factor(mnist$test$y)) %>% + ggplot(aes(x = V1, y = V2, colour = class)) + geom_point() + +## display a 2D manifold of the digits +n <- 15 # figure with 15x15 digits +digit_size <- 28 + +# we will sample n points within [-4, 4] standard deviations +grid_x <- seq(-4, 4, length.out = n) +grid_y <- seq(-4, 4, length.out = n) + +rows <- NULL +for(i in 1:length(grid_x)){ + column <- NULL + for(j in 1:length(grid_y)){ + z_sample <- matrix(c(grid_x[i], grid_y[j]), ncol = 2) + column <- rbind(column, predict(generator, z_sample) %>% matrix(ncol = digit_size)) + } + rows <- cbind(rows, column) +} +rows %>% as.raster() %>% plot() diff --git a/website/articles/examples/variational_autoencoder_deconv.html b/website/articles/examples/variational_autoencoder_deconv.html new file mode 100644 index 000000000..ec7bfed9b --- /dev/null +++ b/website/articles/examples/variational_autoencoder_deconv.html @@ -0,0 +1,353 @@ + + + + + + + +variational_autoencoder_deconv • keras + + + + + + + +
+
+ + + +
+
+ + + + +
+ +

This script demonstrates how to build a variational autoencoder with Keras and deconvolution layers. Reference: “Auto-Encoding Variational Bayes” https://arxiv.org/abs/1312.6114

+
library(keras)
+K <- keras::backend()
+
+#### Parameterization ####
+
+# input image dimensions
+img_rows <- 28L
+img_cols <- 28L
+# color channels (1 = grayscale, 3 = RGB)
+img_chns <- 1L
+
+# number of convolutional filters to use
+filters <- 64L
+
+# convolution kernel size
+num_conv <- 3L
+
+latent_dim <- 2L
+intermediate_dim <- 128L
+epsilon_std <- 1.0
+
+# training parameters
+batch_size <- 100L
+epochs <- 5L
+
+
+#### Model Construction ####
+
+original_img_size <- c(img_rows, img_cols, img_chns)
+
+x <- layer_input(batch_shape = c(batch_size, original_img_size))
+
+conv_1 <- layer_conv_2d(
+  x,
+  filters = img_chns,
+  kernel_size = c(2L, 2L),
+  strides = c(1L, 1L),
+  padding = "same",
+  activation = "relu"
+)
+
+conv_2 <- layer_conv_2d(
+  conv_1,
+  filters = filters,
+  kernel_size = c(2L, 2L),
+  strides = c(2L, 2L),
+  padding = "same",
+  activation = "relu"
+)
+
+conv_3 <- layer_conv_2d(
+  conv_2,
+  filters = filters,
+  kernel_size = c(num_conv, num_conv),
+  strides = c(1L, 1L),
+  padding = "same",
+  activation = "relu"
+)
+
+conv_4 <- layer_conv_2d(
+  conv_3,
+  filters = filters,
+  kernel_size = c(num_conv, num_conv),
+  strides = c(1L, 1L),
+  padding = "same",
+  activation = "relu"
+)
+
+flat <- layer_flatten(conv_4)
+hidden <- layer_dense(flat, units = intermediate_dim, activation = "relu")
+
+z_mean <- layer_dense(hidden, units = latent_dim)
+z_log_var <- layer_dense(hidden, units = latent_dim)
+
+sampling <- function(args) {
+  z_mean <- args[, 0:(latent_dim - 1)]
+  z_log_var <- args[, latent_dim:(2 * latent_dim - 1)]
+  
+  epsilon <- K$random_normal(
+    shape = c(batch_size, latent_dim),
+    mean = 0.,
+    stddev = epsilon_std
+  )
+  z_mean + K$exp(z_log_var) * epsilon
+}
+
+z <- layer_concatenate(list(z_mean, z_log_var)) %>% layer_lambda(sampling)
+
+output_shape <- c(batch_size, 14L, 14L, filters)
+
+decoder_hidden <- layer_dense(units = intermediate_dim, activation = "relu")
+decoder_upsample <- layer_dense(units = prod(output_shape[-1]), activation = "relu")
+
+decoder_reshape <- layer_reshape(target_shape = output_shape[-1])
+decoder_deconv_1 <- layer_conv_2d_transpose(
+  filters = filters,
+  kernel_size = c(num_conv, num_conv),
+  strides = c(1L, 1L),
+  padding = "same",
+  activation = "relu"
+)
+
+decoder_deconv_2 <- layer_conv_2d_transpose(
+  filters = filters,
+  kernel_size = c(num_conv, num_conv),
+  strides = c(1L, 1L),
+  padding = "same",
+  activation = "relu"
+)
+
+decoder_deconv_3_upsample <- layer_conv_2d_transpose(
+  filters = filters,
+  kernel_size = c(3L, 3L),
+  strides = c(2L, 2L),
+  padding = "valid",
+  activation = "relu"
+)
+
+decoder_mean_squash <- layer_conv_2d(
+  filters = img_chns,
+  kernel_size = c(2L, 2L),
+  strides = c(1L, 1L),
+  padding = "valid",
+  activation = "sigmoid"
+)
+
+hidden_decoded <- decoder_hidden(z)
+up_decoded <- decoder_upsample(hidden_decoded)
+reshape_decoded <- decoder_reshape(up_decoded)
+deconv_1_decoded <- decoder_deconv_1(reshape_decoded)
+deconv_2_decoded <- decoder_deconv_2(deconv_1_decoded)
+x_decoded_relu <- decoder_deconv_3_upsample(deconv_2_decoded)
+x_decoded_mean_squash <- decoder_mean_squash(x_decoded_relu)
+
+# custom loss function
+vae_loss <- function(x, x_decoded_mean_squash) {
+  x <- K$flatten(x)
+  x_decoded_mean_squash <- K$flatten(x_decoded_mean_squash)
+  xent_loss <- 1.0 * img_rows * img_cols *
+    loss_binary_crossentropy(x, x_decoded_mean_squash)
+  kl_loss <- -0.5 * K$mean(1 + z_log_var - K$square(z_mean) -
+                           K$exp(z_log_var), axis = -1L)
+  K$mean(xent_loss + kl_loss)
+}
+
+## variational autoencoder
+vae <- keras_model(x, x_decoded_mean_squash)
+vae %>% compile(optimizer = "rmsprop", loss = vae_loss)
+summary(vae)
+
+## encoder: model to project inputs on the latent space
+encoder <- keras_model(x, z_mean)
+
+## build a digit generator that can sample from the learned distribution
+gen_decoder_input <- layer_input(shape = latent_dim)
+gen_hidden_decoded <- decoder_hidden(gen_decoder_input)
+gen_up_decoded <- decoder_upsample(gen_hidden_decoded)
+gen_reshape_decoded <- decoder_reshape(gen_up_decoded)
+gen_deconv_1_decoded <- decoder_deconv_1(gen_reshape_decoded)
+gen_deconv_2_decoded <- decoder_deconv_2(gen_deconv_1_decoded)
+gen_x_decoded_relu <- decoder_deconv_3_upsample(gen_deconv_2_decoded)
+gen_x_decoded_mean_squash <- decoder_mean_squash(gen_x_decoded_relu)
+generator <- keras_model(gen_decoder_input, gen_x_decoded_mean_squash)
+
+
+#### Data Preparation ####
+
+mnist <- dataset_mnist()
+data <- lapply(mnist, function(m) {
+  array(m$x / 255, dim = c(dim(m$x)[1], original_img_size))
+})
+x_train <- data$train
+x_test <- data$test
+
+
+#### Model Fitting ####
+
+vae %>% fit(
+  x_train, x_train, 
+  shuffle = TRUE, 
+  epochs = epochs, 
+  batch_size = batch_size, 
+  validation_data = list(x_test, x_test)
+)
+
+
+#### Visualizations ####
+
+library(ggplot2)
+library(dplyr)
+
+## display a 2D plot of the digit classes in the latent space
+x_test_encoded <- predict(encoder, x_test, batch_size = batch_size)
+x_test_encoded %>%
+  as_data_frame() %>%
+  mutate(class = as.factor(mnist$test$y)) %>%
+  ggplot(aes(x = V1, y = V2, colour = class)) + geom_point()
+
+## display a 2D manifold of the digits
+n <- 15  # figure with 15x15 digits
+digit_size <- 28
+
+# we will sample n points within [-4, 4] standard deviations
+grid_x <- seq(-4, 4, length.out = n)
+grid_y <- seq(-4, 4, length.out = n)
+
+rows <- NULL
+for(i in 1:length(grid_x)){
+  column <- NULL
+  for(j in 1:length(grid_y)){
+    z_sample <- matrix(c(grid_x[i], grid_y[j]), ncol = 2)
+    column <- rbind(column, predict(generator, z_sample) %>% matrix(ncol = digit_size))
+  }
+  rows <- cbind(rows, column)
+}
+rows %>% as.raster() %>% plot()
+
+
+ + + +
+ + +
+ +
+

Site built with pkgdown.

+
+ +
+
+ + + diff --git a/website/articles/faq.html b/website/articles/faq.html new file mode 100644 index 000000000..df197a86d --- /dev/null +++ b/website/articles/faq.html @@ -0,0 +1,549 @@ + + + + + + + +Frequently Asked Questions • keras + + + + + + + +
+
+ + + +
+
+ + + + +
+
+

+How should I cite Keras?

+

Please cite Keras in your publications if it helps your research. Here is an example BibTeX entry:

+
@misc{chollet2015keras,
+  title={Keras},
+  author={Chollet, Fran\c{c}ois and others},
+  year={2015},
+  publisher={GitHub},
+  howpublished={\url{https://github.com/fchollet/keras}},
+}
+
+
+

+What does “sample”, “batch”, “epoch” mean?

+

Below are some common definitions that are necessary to know and understand to correctly utilize Keras:

+
    +
  • +Sample: one element of a dataset.
  • +
  • +Example: one image is a sample in a convolutional network
  • +
  • +Example: one audio file is a sample for a speech recognition model
  • +
  • +Batch: a set of N samples. The samples in a batch are processed independently, in parallel. If training, a batch results in only one update to the model.
  • +
  • A batch generally approximates the distribution of the input data better than a single input. The larger the batch, the better the approximation; however, it is also true that the batch will take longer to processes and will still result in only one update. For inference (evaluate/predict), it is recommended to pick a batch size that is as large as you can afford without going out of memory (since larger batches will usually result in faster evaluating/prediction).
  • +
  • +Epoch: an arbitrary cutoff, generally defined as “one pass over the entire dataset”, used to separate training into distinct phases, which is useful for logging and periodic evaluation.
  • +
  • When using evaluation_data or evaluation_split with the fit method of Keras models, evaluation will be run at the end of every epoch.
  • +
  • Within Keras, there is the ability to add callbacks specifically designed to be run at the end of an epoch. Examples of these are learning rate changes and model checkpointing (saving).
  • +
+
+
+

+Why are Keras objects modified in place?

+

Unlike most R objects, Keras objects are “mutable”. That means that when you modify an object you’re modifying it “in place”, and you don’t need to assign the updated object back to the original name. For example, to add layers to a Keras model you might use this code:

+
model %>% 
+  layer_dense(units = 32, activation = 'relu', input_shape = c(784)) %>% 
+  layer_dense(units = 10, activation = 'softmax')
+

Rather than this code:

+
model <- model %>% 
+  layer_dense(units = 32, activation = 'relu', input_shape = c(784)) %>% 
+  layer_dense(units = 10, activation = 'softmax')
+

You need to be aware of this because it makes the Keras API a little different than most other pipelines you may have used, but it’s necessary to match the data structures and behavior of the underlying Keras library.

+
+
+

+How can I save a Keras model?

+

You can use save_model_hdf5() to save a Keras model into a single HDF5 file which will contain:

+
    +
  • the architecture of the model, allowing to re-create the model
  • +
  • the weights of the model
  • +
  • the training configuration (loss, optimizer)
  • +
  • the state of the optimizer, allowing to resume training exactly where you left off.
  • +
+

You can then use load_model_hdf5() to reinstantiate your model. load_model_hdf5() will also take care of compiling the model using the saved training configuration (unless the model was never compiled in the first place).

+

Example:

+
save_model_hdf5(model, 'my_model.h5')
+model <- load_model_hdf5('my_model.h5')
+

If you only need to save the architecture of a model, and not its weights or its training configuration, you can do:

+
json_string <- model_to_json(model)
+yaml_string <- model_to_yaml(model)
+

The generated JSON / YAML files are human-readable and can be manually edited if needed.

+

You can then build a fresh model from this data:

+
model <- model_from_json(json_string)
+model <- model_from_yaml(yaml_string)
+

If you need to save the weights of a model, you can do so in HDF5 with the code below.

+
save_model_weights_hdf5('my_model_weights.h5')
+

Assuming you have code for instantiating your model, you can then load the weights you saved into a model with the same architecture:

+
model %>% load_model_weights_hdf5('my_model_weights.h5')
+

If you need to load weights into a different architecture (with some layers in common), for instance for fine-tuning or transfer-learning, you can load weights by layer name:

+
model %>% load_model_weights_hdf5('my_model_weights.h5', by_name = TRUE)
+

For example:

+
# assuming the original model looks like this:
+#   model <- keras_model_sequential()
+#   model %>% 
+#     layer_dense(units = 2, input_dim = 3, name = "dense 1") %>% 
+#     layer_dense(units = 3, name = "dense_3") %>% 
+#     ...
+#   save_model_weights(model, fname)
+
+# new model
+model <- keras_model_sequential()
+model %>% 
+  layer_dense(units = 2, input_dim = 3, name = "dense 1") %>%  # will be loaded
+  layer_dense(units = 3, name = "dense_3")                     # will not be loaded
+
+# load weights from first model; will only affect the first layer, dense_1.
+load_model_weights(fname, by_name = TRUE)
+
+
+

+Why is the training loss much higher than the testing loss?

+

A Keras model has two modes: training and testing. Regularization mechanisms, such as Dropout and L1/L2 weight regularization, are turned off at testing time.

+

Besides, the training loss is the average of the losses over each batch of training data. Because your model is changing over time, the loss over the first batches of an epoch is generally higher than over the last batches. On the other hand, the testing loss for an epoch is computed using the model as it is at the end of the epoch, resulting in a lower loss.

+
+
+

+How can I obtain the output of an intermediate layer?

+

One simple way is to create a new Model that will output the layers that you are interested in:

+
model <- ...  # create the original model
+
+layer_name <- 'my_layer'
+intermediate_layer_model <- keras_model(inputs = model$input,
+                                        outputs = get_layer(layer_name)$output)
+intermediate_output <- predict(intermediate_layer_model, data)
+
+
+

+How can I use Keras with datasets that don’t fit in memory?

+
+

+Generator Functions

+

To provide training or evaluation data incrementally you can write an R generator function that yields batches of training data then pass the function to the fit_generator() function (or related functions evaluate_generator() and predict_generator().

+

The output of generator functions must be a list of one of these forms:

+
    +
  • (inputs, targets)
  • +
  • (inputs, targets, sample_weights)
  • +
+

All arrays should contain the same number of samples. The generator is expected to loop over its data indefinitely. For example, here’s simple generator function that yields randomly sampled batches of data:

+
sampling_generator <- function(X_data, Y_data, batch_size) {
+  function() {
+    rows <- sample(1:nrow(X_data), batch_size, replace = TRUE)
+    list(X_data[rows,], Y_data[rows,])
+  }
+}
+
+model %>% 
+  fit_generator(sampling_generator(X_train, Y_train, batch_size = 128), 
+                steps_per_epoch = nrow(X_train) / 128, epochs = 10)
+

The steps_per_epoch parameter indicates the number of steps (batches of samples) to yield from generator before declaring one epoch finished and starting the next epoch. It should typically be equal to the number of unique samples if your dataset divided by the batch size.

+
+
+

+External Data Generators

+

The above example doesn’t however address the use case of datasets that don’t fit in memory. Typically to do that you’ll write a generator that reads from another source (e.g. a sparse matrix or file(s) on disk) and maintains an offset into that data as it’s called repeatedly. For example, imagine you have a set of text files in a directory you want to read from:

+
data_files_generator <- function(dir) {
+  
+  files < list.files(dir)
+  next_file <- 0
+  
+  function() {
+    
+    # move to the next file (note the <<- assignment operator)
+    next_file <<- next_file + 1
+    
+    # determine the file name
+    file <- files[[next_file]]
+    
+    # process and return the data in the file
+    file_to_training_data(file)
+  }
+}
+

The above function is an example of a stateful generator—the function maintains information across calls to keep track of which data to provide next. This is accomplished by defining shared state outside the generator function body and using the <<- operator to assign to it from within the generator.

+
+
+

+Image Generators

+

You can also use the flow_images_from_directory() and flow_images_from_data() functions along with fit_generator() for training on sets of images stored on disk (with optional image augmentation/normalization via image_data_generator()).

+

You can see batch image training in action in our CIFAR10 example.

+
+
+

+Batch Functions

+

You can also do batch training using the train_on_batch() and test_on_batch() functions. These functions enable you to write a training loop that reads into memory only the data required for each batch.

+
+
+
+

+How can I interrupt training when the validation loss isn’t decreasing anymore?

+

You can use an early stopping callback:

+
early_stopping <- callback_early_stopping(monitor = 'val_loss', patience = 2)
+model %>% fit(X, y, validation_split = 0.2, callbacks = c(early_stopping))
+

Find out more in the callbacks documentation.

+
+
+

+How is the validation split computed?

+

If you set the validation_split argument in fit to e.g. 0.1, then the validation data used will be the last 10% of the data. If you set it to 0.25, it will be the last 25% of the data, etc. Note that the data isn’t shuffled before extracting the validation split, so the validation is literally just the last x% of samples in the input you passed.

+

The same validation set is used for all epochs (within a same call to fit).

+
+
+

+Is the data shuffled during training?

+

Yes, if the shuffle argument in fit is set to TRUE (which is the default), the training data will be randomly shuffled at each epoch.

+

Validation data is never shuffled.

+
+
+

+How can I record the training / validation loss / accuracy at each epoch?

+

The model.fit method returns an History callback, which has a history attribute containing the lists of successive losses and other metrics.

+
hist <- model %>% fit(X, y, validation_split=0.2)
+hist$history
+
+
+

+How can I “freeze” Keras layers?

+

To “freeze” a layer means to exclude it from training, i.e. its weights will never be updated. This is useful in the context of fine-tuning a model, or using fixed embeddings for a text input.

+

You can pass a trainable argument (boolean) to a layer constructor to set a layer to be non-trainable:

+
frozen_layer <- layer_dense(units = 32, trainable = FALSE)
+

Additionally, you can set the trainable property of a layer to TRUE or FALSE after instantiation. For this to take effect, you will need to call compile() on your model after modifying the trainable property. Here’s an example:

+
x <- layer_input(shape = c(32))
+layer <- layer_dense(units = 32)
+layer$trainable <- FALSE
+y <- x %>% layer
+
+frozen_model <- keras_model(x, y)
+# in the model below, the weights of `layer` will not be updated during training
+frozen_model %>% compile(optimizer = 'rmsprop', loss = 'mse')
+
+layer$trainable <- TRUE
+trainable_model <- keras_model(x, y)
+# with this model the weights of the layer will be updated during training
+# (which will also affect the above model since it uses the same layer instance)
+trainable_model %>% compile(optimizer = 'rmsprop', loss = 'mse')
+
+frozen_model %>% fit(data, labels)  # this does NOT update the weights of `layer`
+trainable_model %>% fit(data, labels)  # this updates the weights of `layer`
+
+
+

+How can I use stateful RNNs?

+

Making a RNN stateful means that the states for the samples of each batch will be reused as initial states for the samples in the next batch.

+

When using stateful RNNs, it is therefore assumed that:

+
    +
  • all batches have the same number of samples
  • +
  • If X1 and X2 are successive batches of samples, then X2[[i]] is the follow-up sequence to X1[[i], for every i.
  • +
+

To use statefulness in RNNs, you need to:

+
    +
  • explicitly specify the batch size you are using, by passing a batch_size argument to the first layer in your model. E.g. batch_size=32 for a 32-samples batch of sequences of 10 timesteps with 16 features per timestep.
  • +
  • set stateful=TRUE in your RNN layer(s).
  • +
  • specify shuffle=FALSE when calling fit().
  • +
+

To reset the states accumulated in either a singel layer or an entire model use the reset_states() function.

+

Notes that the methods predict(), fit(), train_on_batch(), predict_classes(), etc. will all update the states of the stateful layers in a model. This allows you to do not only stateful training, but also stateful prediction.

+
+
+

+How can I remove a layer from a Sequential model?

+

You can remove the last added layer in a Sequential model by calling pop_layer():

+
model <- keras_model_sequential()
+model %>% 
+  layer_dense(units = 32, activation = 'relu', input_shape = c(784)) %>% 
+  layer_dense(units = 32, activation = 'relu') %>% 
+  layer_dense(units = 32, activation = 'relu')
+
+length(model$layers)     # "3"
+model %>% pop_layer()
+length(model$layers)     # "2"
+
+
+

+How can I use pre-trained models in Keras?

+

Code and pre-trained weights are available for the following image classification models:

+ +

For example:

+
model <- application_vgg16(weights = 'imagenet', include_top = TRUE)
+

For a few simple usage examples, see the documentation for the Applications module.

+

The VGG16 model is also the basis for the Deep dream Keras example script.

+
+
+

+How can I use other Keras backends?

+

By default the Keras Python and R packages use the TensorFlow backend. Other available backends include Theano or CNTK. To learn more about using alternatate backends (e.g. Theano or CNTK) see the article on Keras backends.

+
+
+

+How can I run Keras on a GPU?

+

Note that installation and configuration of the GPU-based backends can take considerably more time and effort. So if you are just getting started with Keras you may want to stick with the CPU version initially, then install the appropriate GPU version once your training becomes more computationally demanding.

+

Below are instructions for installing and enabling GPU support for the various supported backends.

+
+

+TensorFlow

+

If your system has an NVIDIA® GPU and you have the GPU version of TensorFlow installed then your Keras code will automatically run on the GPU.

+

Additional details on GPU installation can be found here: https://tensorflow.rstudio.com/installation_gpu.html.

+
+
+

+Theano

+

If you are running on the Theano backend, you can set the THEANO_FLAGS environment variable to indicate you’d like to execute tensor operations on the GPU. For example:

+
Sys.setenv(KERAS_BACKEND = "keras")
+Sys.setenv(THEANO_FLAGS = "device=gpu,floatX=float32")
+library(keras)
+

The name ‘gpu’ might have to be changed depending on your device’s identifier (e.g. gpu0, gpu1, etc).

+
+
+

+CNTK

+

If you have the GPU version of CNTK installed then your Keras code will automatically run on the GPU.

+

Additional information on installing the GPU version of CNTK can be found here: https://docs.microsoft.com/en-us/cognitive-toolkit/setup-linux-python

+
+
+
+

+How can I use Keras in another R package?

+
+

+Testing on CRAN

+

The main consideration in using Keras within another R package is to ensure that your package can be tested in an environment where Keras is not available (e.g. the CRAN test servers). To do this, arrange for your tests to be skipped when Keras isn’t available using the is_keras_available() function.

+

For example, here’s a testthat utility function that can be used to skip a test when Keras isn’t available:

+
# testthat utilty for skipping tests when Keras isn't available
+skip_if_no_keras <- function(version = NULL) {
+  if (!is_keras_available(version))
+    skip("Required keras version not available for testing")
+}
+
+# use the function within a test
+test_that("keras function works correctly", {
+  skip_if_no_keras()
+  # test code here
+})
+

You can pass the version argument to check for a specific version of Keras.

+
+
+

+Keras Module

+

Another consideration is gaining access to the underlying Keras python module. You might need to do this if you require lower level access to Keras than is provided for by the Keras R package.

+

Since the Keras R package can bind to multiple different implementations of Keras (either the original Keras or the TensorFlow implementation of Keras), you should use the keras::implementation() function to obtain access to the correct python module. You can use this function within the .onLoad function of a package to provide global access to the module within your package. For example:

+
# Keras python module
+keras <- NULL
+
+# Obtain a reference to the module from the keras R package
+.onLoad <- function(libname, pkgname) {
+  keras <<- keras::implementation() 
+}
+
+
+

+Custom Layers

+

If you create custom layers in R or import other Python packages which include custom Keras layers, be sure to wrap them using the create_layer() function so that they are composable using the magrittr pipe operator. See the documentation on layer wrapper functions for additional details.

+
+
+
+

+How can I obtain reproducible results using Keras during development?

+

During development of a model, sometimes it is useful to be able to obtain reproducible results from run to run in order to determine if a change in performance is due to an actual model or data modification, or merely a result of a new random sample.

+

The below snippet of code provides an example of how to obtain reproducible results when using the TensorFlow backend. To do this we set the R session’s random seed, then manually construct a TensorFlow session (via the tensorflow package) and set it’s random seed, and then finally arrange for Keras to use this session within its backend.

+
library(keras)
+library(tensorflow)
+
+# Set R random seed
+set.seed(42L)
+
+# TensorFlow session configuration that uses only a single thread. Multiple threads are a 
+# potential source of non-reproducible results, see: https://stackoverflow.com/questions/42022950/which-seeds-have-to-be-set-where-to-realize-100-reproducibility-of-training-res
+session_conf <- tf$ConfigProto(intra_op_parallelism_threads = 1L, 
+                               inter_op_parallelism_threads = 1L)
+
+# Set TF random seed (see: https://www.tensorflow.org/api_docs/python/tf/set_random_seed)
+tf$set_random_seed(1042L)
+
+# Create the session using the custom configuration
+sess <- tf$Session(graph = tf$get_default_graph(), config = session_conf)
+
+# Instruct Keras to use this session
+K <- backend()
+K$set_session(sess)
+
+# Rest of code follows ...
+
+
+

+Where is the Keras configuration filed stored?

+

The default directory where all Keras data is stored is:

+
$HOME/.keras/
+

Note that Windows users should replace $HOME with %USERPROFILE%. In case Keras cannot create the above directory (e.g. due to permission issues), /tmp/.keras/ is used as a backup.

+

The Keras configuration file is a JSON file stored at $HOME/.keras/keras.json. The default configuration file looks like this:

+
{
+    "image_data_format": "channels_last",
+    "epsilon": 1e-07,
+    "floatx": "float32",
+    "backend": "tensorflow"
+}
+

It contains the following fields:

+
    +
  • The image data format to be used as default by image processing layers and utilities (either channels_last or channels_first).
  • +
  • The epsilon numerical fuzz factor to be used to prevent division by zero in some operations.
  • +
  • The default float data type.
  • +
  • The default backend (this will always be “tensorflow” in the R interface to Keras)
  • +
+

Likewise, cached dataset files, such as those downloaded with get_file(), are stored by default in $HOME/.keras/datasets/.

+
+
+
+ + + +
+ + +
+ +
+

Site built with pkgdown.

+
+ +
+
+ + + diff --git a/website/articles/functional_api.html b/website/articles/functional_api.html new file mode 100644 index 000000000..a7e00a461 --- /dev/null +++ b/website/articles/functional_api.html @@ -0,0 +1,491 @@ + + + + + + + +Guide to the Functional API • keras + + + + + + + +
+
+ + + +
+
+ + + + +
+

The Keras functional API is the way to go for defining complex models, such as multi-output models, directed acyclic graphs, or models with shared layers.

+

This guide assumes that you are already familiar with the Sequential model.

+

Let’s start with something simple.

+
+

+First example: a densely-connected network

+

The Sequential model is probably a better choice to implement such a network, but it helps to start with something really simple.

+

To use the functional API, build your input and output layers and then pass them to the model() function. This model can be trained just like Keras sequential models.

+
library(keras)
+
+# input layer
+inputs <- layer_input(shape = c(784))
+ 
+# outputs compose input + dense layers
+predictions <- inputs %>%
+  layer_dense(units = 64, activation = 'relu') %>% 
+  layer_dense(units = 64, activation = 'relu') %>% 
+  layer_dense(units = 10, activation = 'softmax')
+
+# create and compile model
+model <- keras_model(inputs = inputs, outputs = predictions)
+model %>% compile(
+  optimizer = 'rmsprop',
+  loss = 'categorical_crossentropy',
+  metrics = c('accuracy')
+)
+

Note that Keras objects are modified in place which is why it’s not necessary for model to be assigned back to after it is compiled.

+
+
+

+All models are callable, just like layers

+

With the functional API, it is easy to re-use trained models: you can treat any model as if it were a layer. Note that you aren’t just re-using the architecture of the model, you are also re-using its weights.

+
x <- layer_input(shape = c(784))
+# This works, and returns the 10-way softmax we defined above.
+y <- x %>% model
+

This can allow, for instance, to quickly create models that can process sequences of inputs. You could turn an image classification model into a video classification model, in just one line:

+
# Input tensor for sequences of 20 timesteps,
+# each containing a 784-dimensional vector
+input_sequences <- layer_input(shape = c(20, 784))
+
+# This applies our previous model to the input sequence
+processed_sequences <- input_sequences %>%
+  time_distributed(model)
+
+
+

+Multi-input and multi-output models

+

Here’s a good use case for the functional API: models with multiple inputs and outputs. The functional API makes it easy to manipulate a large number of intertwined datastreams.

+

Let’s consider the following model. We seek to predict how many retweets and likes a news headline will receive on Twitter. The main input to the model will be the headline itself, as a sequence of words, but to spice things up, our model will also have an auxiliary input, receiving extra data such as the time of day when the headline was posted, etc.

+

The model will also be supervised via two loss functions. Using the main loss function earlier in a model is a good regularization mechanism for deep models.

+

Here’s what our model looks like:

+

multi-input-multi-output-graph

+

Let’s implement it with the functional API.

+

The main input will receive the headline, as a sequence of integers (each integer encodes a word). The integers will be between 1 and 10,000 (a vocabulary of 10,000 words) and the sequences will be 100 words long.

+

We’ll include an

+
library(keras)
+
+main_input <- layer_input(shape = c(100), dtype = 'int32', name = 'main_input')
+
+lstm_out <- main_input %>% 
+  layer_embedding(input_dim = 10000, output_dim = 512, input_length = 100) %>% 
+  layer_lstm(units = 32)
+

Here we insert the auxiliary loss, allowing the LSTM and Embedding layer to be trained smoothly even though the main loss will be much higher in the model:

+
auxiliary_output <- lstm_out %>% 
+  layer_dense(units = 1, activation = 'sigmoid', name = 'aux_output')
+

At this point, we feed into the model our auxiliary input data by concatenating it with the LSTM output, stacking a deep densely-connected network on top and adding the main logistic regression layer

+
auxiliary_input <- layer_input(shape = c(5), name = 'aux_input')
+
+main_output <- layer_concatenate(c(lstm_out, auxiliary_input)) %>%  
+  layer_dense(units = 64, activation = 'relu') %>% 
+  layer_dense(units = 64, activation = 'relu') %>% 
+  layer_dense(units = 64, activation = 'relu') %>% 
+  layer_dense(units = 1, activation = 'sigmoid', name = 'main_output')
+

This defines a model with two inputs and two outputs:

+
model <- keras_model(
+  inputs = c(main_input, auxiliary_input), 
+  outputs = c(main_output, auxiliary_output)
+)
+
summary(model)
+
Model
+__________________________________________________________________________________________
+Layer (type)                 Output Shape        Param #    Connected to                  
+==========================================================================================
+main_input (InputLayer)      (None, 100)         0                                        
+__________________________________________________________________________________________
+embedding_1 (Embedding)      (None, 100, 512)    5120000                                  
+__________________________________________________________________________________________
+lstm_1 (LSTM)                (None, 32)          69760                                    
+__________________________________________________________________________________________
+aux_input (InputLayer)       (None, 5)           0                                        
+__________________________________________________________________________________________
+concatenate_1 (Concatenate)  (None, 37)          0                                        
+__________________________________________________________________________________________
+dense_1 (Dense)              (None, 64)          2432                                     
+__________________________________________________________________________________________
+dense_2 (Dense)              (None, 64)          4160                                     
+__________________________________________________________________________________________
+dense_3 (Dense)              (None, 64)          4160                                     
+__________________________________________________________________________________________
+main_output (Dense)          (None, 1)           65                                       
+__________________________________________________________________________________________
+aux_output (Dense)           (None, 1)           33                                       
+==========================================================================================
+Total params: 5,200,610
+Trainable params: 5,200,610
+Non-trainable params: 0
+__________________________________________________________________________________________
+

We compile the model and assign a weight of 0.2 to the auxiliary loss. To specify different loss_weights or loss for each different output, you can use a list or a dictionary. Here we pass a single loss as the loss argument, so the same loss will be used on all outputs.

+
model %>% compile(
+  optimizer = 'rmsprop',
+  loss = 'binary_crossentropy',
+  loss_weights = c(1.0, 0.2)
+)
+

We can train the model by passing it lists of input arrays and target arrays:

+
model %>% fit(
+  x = list(headline_data, additional_data),
+  y = list(labels, labels),
+  epochs = 50,
+  batch_size = 32
+)
+

Since our inputs and outputs are named (we passed them a “name” argument), We could also have compiled the model via:

+
model %>% compile(
+  optimizer = 'rmsprop',
+  loss = list(main_output = 'binary_crossentropy', aux_output = 'binary_crossentropy'),
+  loss_weights = list(main_output = 1.0, aux_output = 0.2)
+)
+
+# And trained it via:
+model %>% fit(
+  x = list(main_input = headline_data, aux_input = additional_data),
+  y = list(main_output = labels, aux_output = labels),
+  epochs = 50,
+  batch_size = 32
+)
+
+
+

+Shared layers

+

Another good use for the functional API are models that use shared layers. Let’s take a look at shared layers.

+

Let’s consider a dataset of tweets. We want to build a model that can tell whether two tweets are from the same person or not (this can allow us to compare users by the similarity of their tweets, for instance).

+

One way to achieve this is to build a model that encodes two tweets into two vectors, concatenates the vectors and adds a logistic regression of top, outputting a probability that the two tweets share the same author. The model would then be trained on positive tweet pairs and negative tweet pairs.

+

Because the problem is symmetric, the mechanism that encodes the first tweet should be reused (weights and all) to encode the second tweet. Here we use a shared LSTM layer to encode the tweets.

+

Let’s build this with the functional API. We will take as input for a tweet a binary matrix of shape (140, 256), i.e. a sequence of 140 vectors of size 256, where each dimension in the 256-dimensional vector encodes the presence/absence of a character (out of an alphabet of 256 frequent characters).

+
library(keras)
+
+tweet_a <- layer_input(shape = c(140, 256))
+tweet_b <- layer_input(shape = c(140, 256))
+

To share a layer across different inputs, simply instantiate the layer once, then call it on as many inputs as you want:

+
# This layer can take as input a matrix and will return a vector of size 64
+shared_lstm <- layer_lstm(units = 64)
+
+# When we reuse the same layer instance multiple times, the weights of the layer are also
+# being reused (it is effectively *the same* layer)
+encoded_a <- tweet_a %>% shared_lstm
+encoded_b <- tweet_b %>% shared_lstm
+
+# We can then concatenate the two vectors and add a logistic regression on top
+predictions <- layer_concatenate(c(encoded_a, encoded_b), axis=-1) %>% 
+  layer_dense(units = 1, activation = 'sigmoid')
+
+# We define a trainable model linking the tweet inputs to the predictions
+model <- keras_model(inputs = c(tweet_a, tweet_b), outputs = predictions)
+
+model %>% compile(
+  optimizer = 'rmsprop',
+  loss = 'binary_crossentropy',
+  metrics = c('accuracy')
+)
+
+model %>% fit(list(data_a, data_b), labels, epochs = 10)
+
+
+

+The concept of layer “node”

+

Whenever you are calling a layer on some input, you are creating a new tensor (the output of the layer), and you are adding a “node” to the layer, linking the input tensor to the output tensor. When you are calling the same layer multiple times, that layer owns multiple nodes indexed as 1, 2, 2…

+

You can obtain the output tensor of a layer via layer$output, or its output shape via layer$output_shape. But what if a layer is connected to multiple inputs?

+

As long as a layer is only connected to one input, there is no confusion, and $output will return the one output of the layer:

+
a <- layer_input(shape = c(140, 256))
+
+lstm <- layer_lstm(units = 32)
+
+encoded_a <- a %>% lstm
+
+lstm$output
+

Not so if the layer has multiple inputs:

+
a <- layer_input(shape = c(140, 256))
+b <- layer_input(shape = c(140, 256))
+
+lstm <- layer_lstm(units = 32)
+
+encoded_a <- a %>% lstm
+encoded_b <- b %>% lstm
+
+lstm$output
+
AttributeError: Layer lstm_4 has multiple inbound nodes, hence the notion of "layer output" is ill-defined. Use `get_output_at(node_index)` instead.
+

Okay then. The following works:

+
get_output_at(lstm, 1)
+get_output_at(lstm, 2)
+

Simple enough, right?

+

The same is true for the properties input_shape and output_shape: as long as the layer has only one node, or as long as all nodes have the same input/output shape, then the notion of “layer output/input shape” is well defined, and that one shape will be returned by layer$output_shape/layer$input_shape. But if, for instance, you apply the same layer_conv_2d() layer to an input of shape (32, 32, 3), and then to an input of shape (64, 64, 3), the layer will have multiple input/output shapes, and you will have to fetch them by specifying the index of the node they belong to:

+
a <- layer_input(shape = c(32, 32, 3))
+b <- layer_input(shape = c(64, 64, 3))
+
+conv <- layer_conv_2d(filters = 16, kernel_size = c(3,3), padding = 'same')
+
+conved_a <- a %>% conv
+
+# only one input so far, the following will work
+conv$input_shape
+
+conved_b <- b %>% conv
+# now the `$input_shape` property wouldn't work, but this does:
+get_input_shape_at(conv, 1)
+get_input_shape_at(conv, 2) 
+
+
+

+More examples

+

Code examples are still the best way to get started, so here are a few more.

+
+

+Inception module

+

For more information about the Inception architecture, see Going Deeper with Convolutions.

+
library(keras)
+
+input_img <- layer_input(shape = c(256, 256, 3))
+
+tower_1 <- input_img %>% 
+  layer_conv_2d(filters = 64, kernel_size = c(1, 1), padding='same', activation='relu') %>% 
+  layer_conv_2d(filters = 64, kernel_size = c(3, 3), padding='same', activation='relu')
+
+tower_2 <- input_img %>% 
+  layer_conv_2d(filters = 64, kernel_size = c(1, 1), padding='same', activation='relu') %>% 
+  layer_conv_2d(filters = 64, kernel_size = c(5, 5), padding='same', activation='relu')
+
+tower_3 <- input_img %>% 
+  layer_max_pooling_2d(pool_size = c(3, 3), strides = c(1, 1), padding = 'same') %>% 
+  layer_conv_2d(filters = 64, kernel_size = c(1, 1), padding='same', activation='relu')
+
+output <- layer_concatenate(c(tower_1, tower_2, tower_3), axis = 1)
+
+
+

+Residual connection on a convolution layer

+

For more information about residual networks, see Deep Residual Learning for Image Recognition.

+
# input tensor for a 3-channel 256x256 image
+x <- layer_input(shape = c(256, 256, 3))
+# 3x3 conv with 3 output channels (same as input channels)
+y <- x %>% layer_conv_2d(filters = 3, kernel_size =c(3, 3), padding = 'same')
+# this returns x + y.
+z <- layer_add(c(x, y))
+
+
+

+Shared vision model

+

This model re-uses the same image-processing module on two inputs, to classify whether two MNIST digits are the same digit or different digits.

+
# First, define the vision model
+digit_input <- layer_input(shape = c(27, 27, 1))
+out <- digit_input %>% 
+  layer_conv_2d(filters = 64, kernel_size = c(3, 3)) %>% 
+  layer_conv_2d(filters = 64, kernel_size = c(3, 3)) %>% 
+  layer_max_pooling_2d(pool_size = c(2, 2)) %>% 
+  layer_flatten()
+
+vision_model <- keras_model(digit_input, out)
+
+# Then define the tell-digits-apart model
+digit_a <- layer_input(shape = c(27, 27, 1))
+digit_b <- layer_input(shape = c(27, 27, 1))
+
+# The vision model will be shared, weights and all
+out_a <- digit_a %>% vision_model
+out_b <- digit_b %>% vision_model
+
+out <- layer_concatenate(c(out_a, out_b)) %>% 
+  layer_dense(units = 1, activation = 'sigmoid')
+
+classification_model <- keras_model(inputs = c(digit_a, digit_b), out)
+
+
+

+Visual question answering model

+

This model can select the correct one-word answer when asked a natural-language question about a picture.

+

It works by encoding the question into a vector, encoding the image into a vector, concatenating the two, and training on top a logistic regression over some vocabulary of potential answers.

+
# First, let's define a vision model using a Sequential model.
+# This model will encode an image into a vector.
+vision_model <- keras_model_sequential() 
+vision_model %>% 
+  layer_conv_2d(filters = 64, kernel_size = c(3, 3), activation = 'relu', padding = 'same',
+                input_shape = c(224, 224, 3)) %>% 
+  layer_conv_2d(filters = 64, kernel_size = c(3, 3), activation = 'relu') %>% 
+  layer_max_pooling_2d(pool_size = c(2, 2)) %>% 
+  layer_conv_2d(filters = 128, kernel_size = c(3, 3), activation = 'relu', padding = 'same') %>% 
+  layer_conv_2d(filters = 128, kernel_size = c(3, 3), activation = 'relu') %>% 
+  layer_max_pooling_2d(pool_size = c(2, 2)) %>% 
+  layer_conv_2d(filters = 256, kernel_size = c(3, 3), activation = 'relu', padding = 'same') %>% 
+  layer_conv_2d(filters = 256, kernel_size = c(3, 3), activation = 'relu') %>% 
+  layer_conv_2d(filters = 256, kernel_size = c(3, 3), activation = 'relu') %>% 
+  layer_max_pooling_2d(pool_size = c(2, 2)) %>% 
+  layer_flatten()
+
+# Now let's get a tensor with the output of our vision model:
+image_input <- layer_input(shape = c(224, 224, 3))
+encoded_image <- image_input %>% vision_model
+
+# Next, let's define a language model to encode the question into a vector.
+# Each question will be at most 100 word long,
+# and we will index words as integers from 1 to 9999.
+question_input <- layer_input(shape = c(100), dtype = 'int32')
+encoded_question <- question_input %>% 
+  layer_embedding(input_dim = 10000, output_dim = 256, input_length = 100) %>% 
+  layer_lstm(units = 256)
+
+# Let's concatenate the question vector and the image vector then
+# train a logistic regression over 1000 words on top
+output <- layer_concatenate(c(encoded_question, encoded_image)) %>% 
+  layer_dense(units = 1000, activation='softmax')
+
+# This is our final model:
+vqa_model <- keras_model(inputs = c(image_input, question_input), outputs = output)
+
+
+

+Video question answering model

+

Now that we have trained our image QA model, we can quickly turn it into a video QA model. With appropriate training, you will be able to show it a short video (e.g. 100-frame human action) and ask a natural language question about the video (e.g. “what sport is the boy playing?” -> “football”).

+
video_input <- layer_input(shape = c(100, 224, 224, 3))
+
+# This is our video encoded via the previously trained vision_model (weights are reused)
+encoded_video <- video_input %>% 
+  time_distributed(vision_model) %>% 
+  layer_lstm(units = 256)
+
+# This is a model-level representation of the question encoder, reusing the same weights as before:
+question_encoder <- keras_model(inputs = question_input, outputs = encoded_question)
+
+# Let's use it to encode the question:
+video_question_input <- layer_input(shape = c(100), dtype = 'int32')
+encoded_video_question <- video_question_input %>% question_encoder
+
+# And this is our video question answering model:
+output <- layer_concatenate(c(encoded_video, encoded_video_question)) %>% 
+  layer_dense(units = 1000, activation = 'softmax')
+
+video_qa_model <- keras_model(inputs= c(video_input, video_question_input), outputs = output)
+
+
+
+
+ + + +
+ + +
+ +
+

Site built with pkgdown.

+
+ +
+
+ + + diff --git a/website/articles/getting_started.html b/website/articles/getting_started.html new file mode 100644 index 000000000..32f782fbe --- /dev/null +++ b/website/articles/getting_started.html @@ -0,0 +1,269 @@ + + + + + + + +Getting Started with Keras • keras + + + + + + + +
+
+ + + +
+
+ + + + +
+
+

+Overview

+

Keras is a high-level neural networks API developed with a focus on enabling fast experimentation. Being able to go from idea to result with the least possible delay is key to doing good research. Keras has the following key features:

+
    +
  • Allows the same code to run on CPU or on GPU, seamlessly.

  • +
  • User-friendly API which makes it easy to quickly prototype deep learning models.

  • +
  • Built-in support for convolutional networks (for computer vision), recurrent networks (for sequence processing), and any combination of both.

  • +
  • Supports arbitrary network architectures: multi-input or multi-output models, layer sharing, model sharing, etc. This means that Keras is appropriate for building essentially any deep learning model, from a memory network to a neural Turing machine.

  • +
  • Is capable of running on top of multiple back-ends including TensorFlow, CNTK, or Theano.

  • +
+

This website provides documentation for the R interface to Keras. See the main Keras website at https://keras.io for additional information on the project.

+
+
+

+Installation

+

First, install the keras R package from CRAN as follows:

+
install.packages("keras")
+

The Keras R interface uses the TensorFlow backend engine by default. To install both the core Keras library as well as the TensorFlow backend use the install_keras() function:

+
library(keras)
+install_keras()
+

This will provide you with default installations of Keras and TensorFlow. If you want to do a more customized installation of TensorFlow (including installing a version that takes advantage of Nvidia GPUs if you have the correct CUDA libraries installed) see the documentation for install_keras().

+
+
+

+MNIST Example

+

We can learn the basics of Keras by walking through a simple example: recognizing handwritten digets from the MNIST dataset. MNIST consists of 28 x 28 grayscale images of handwritten digits like these:

+

+

The dataset also includes labels for each image, telling us which digit it is. For example, the labels for the above images are 5, 0, 4, and 1.

+
+

+Preparing the Data

+

The MNIST dataset is included with Keras and can be accessed using the dataset_mnist() function. Here we load the dataset then create variables for our test and training data:

+
library(keras)
+mnist <- dataset_mnist()
+x_train <- mnist$train$x
+y_train <- mnist$train$y
+x_test <- mnist$test$x
+y_test <- mnist$test$y
+

The x data is a 3-d array (images,width,height) of grayscale values . To prepare the data for training we convert the 3-d arrays into matrices by reshaping width and height into a single dimension (28x28 images are flattened into length 784 vectors). Then, we convert the grayscale values from integers ranging between 0 to 255 into floating point values ranging between 0 and 1:

+
# reshape
+dim(x_train) <- c(nrow(x_train), 784)
+dim(x_test) <- c(nrow(x_test), 784)
+# rescale
+x_train <- x_train / 255
+x_test <- x_test / 255
+

The y data is an integer vector with values ranging from 0 to 9. To prepare this data for training we one-hot encode the vectors into binary class matrices using the Keras to_categorical() function:

+
y_train <- to_categorical(y_train, 10)
+y_test <- to_categorical(y_test, 10)
+
+
+

+Defining the Model

+

The core data structure of Keras is a model, a way to organize layers. The simplest type of model is the Sequential model, a linear stack of layers.

+

We begin by creating a sequential model and then adding layers using the pipe (%>%) operator:

+
library(keras)
+model <- keras_model_sequential() 
+model %>% 
+  layer_dense(units = 256, activation = 'relu', input_shape = c(784)) %>% 
+  layer_dropout(rate = 0.4) %>% 
+  layer_dense(units = 128, activation = 'relu') %>%
+  layer_dropout(rate = 0.3) %>%
+  layer_dense(units = 10, activation = 'softmax')
+

The input_shape argument to the first layer specifies the shape of the input data (a length 784 numeric vector representing a grayscale image). The final layer outputs a length 10 numeric vector (probabilities for each digit) using a softmax activation function.

+

Use the summary() function to print the details of the model:

+
summary(model)
+
Model
+________________________________________________________________________________
+Layer (type)                        Output Shape                    Param #     
+================================================================================
+dense_1 (Dense)                     (None, 256)                     200960      
+________________________________________________________________________________
+dropout_1 (Dropout)                 (None, 256)                     0           
+________________________________________________________________________________
+dense_2 (Dense)                     (None, 128)                     32896       
+________________________________________________________________________________
+dropout_2 (Dropout)                 (None, 128)                     0           
+________________________________________________________________________________
+dense_3 (Dense)                     (None, 10)                      1290        
+================================================================================
+Total params: 235,146
+Trainable params: 235,146
+Non-trainable params: 0
+________________________________________________________________________________
+

Next, compile the model with appropriate loss function, optimizer, and metrics:

+
model %>% compile(
+  loss = 'categorical_crossentropy',
+  optimizer = optimizer_rmsprop(),
+  metrics = c('accuracy')
+)
+
+
+

+Training and Evaluation

+

Use the fit() function to train the model for 30 epochs using batches of 128 images:

+
history <- model %>% fit(
+  x_train, y_train, 
+  epochs = 30, batch_size = 128, 
+  validation_split = 0.2
+)
+

The history object returned by fit() includes loss and accuracy metrics which we can plot:

+
plot(history)
+
+ +
+

Evaluate the model’s performance on the test data:

+
loss_and_metrics <- model %>% evaluate(x_test, y_test)
+

Generate predictions on new data:

+
classes <- model %>% predict_classes(x_test)
+

Keras provides a vocabulary for building deep learning models that is simple, elegant, and intuitive. Building a question answering system, an image classification model, a neural Turing machine, or any other model is just as straightforward.

+
+
+
+

+Learning More

+

To learn more about Keras, see these other package vignettes:

+ +

The examples demonstrate more advanced models including transfer learning, variational auto-encoding, question-answering with memory networks, text generation with stacked LSTMs, etc.

+

The function reference includes detailed information on all of the functions available in the package.

+
+
+
+ + + +
+ + +
+ +
+

Site built with pkgdown.

+
+ +
+
+ + + diff --git a/website/articles/images/MNIST.png b/website/articles/images/MNIST.png new file mode 100644 index 0000000000000000000000000000000000000000..0a558b744cb3092e0a98dd1e6245b7355a9f4bca GIT binary patch literal 16334 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 CT-8?q literal 0 HcmV?d00001 diff --git a/website/articles/images/multi-input-multi-output-graph.png b/website/articles/images/multi-input-multi-output-graph.png new file mode 100644 index 0000000000000000000000000000000000000000..179f21ed49cf196af0eb9057f67d51ced94472c3 GIT binary patch literal 82918 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

}B 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 a(wb#rRi32FZ%ZB!goBwe)u@zmG~$0X>ZzFk literal 0 HcmV?d00001 diff --git a/website/articles/images/regular_stacked_lstm.png b/website/articles/images/regular_stacked_lstm.png new file mode 100644 index 0000000000000000000000000000000000000000..c59ce194aa724d2a9c61dfe25268441fb28f7b09 GIT binary patch literal 38047 zcmeF(byQT}+c11UBm`lG?ifmx2I&%pl9Cbx=~hxoT6$=a8oEJ30qL#*q`N^Rq&tUx z4`08(`@Wy&UC&z2-|u?=aOrWF6Z`Ca?R~E6a|nH4{jL*iBk{O+`enfFnoV^KI69UbS6F~ zcAh?T?6I&fTGebCV{s>mrO#{4|*ci>CR^Mqk5#WdLa9H(^Tr`XM^tC0d{tmKWp*K+4$ z8TP)ksrpVL`}|@Y3b-~o(5ZxOwiw}MEVgMyq02h7=M$WH` zldh#YsnnQ#yBkN2Bj)db6L^gDzB?(9I1L@*>0?`J+V{4Hn??!genNI~`haOZ{`M=e ziIE|}F8)@n>nirr5NIghz@-7Nn+M8W_ zUrL|biJH;T-i=g6pYH?Vi7m)2oM`HxYJGtaZre6>fIu47mCCzW-X7t`tE zM6tp1tidNl^FCL*OQ)s2O+(he{eIlWC8v9jVta_h^-?Qyt|4RoG$-Rk6o`xg{d?V7vctun zMAgd(xkzpayi z-J|Hpaf_{@pJyq_G98=L;G?mQ*I}pL*7qO1Pkkj)onAY0cHpD_)C! ztcpS5dc~uR+mix^;{k#75bE@+`E}urcdRAu<;!8us>O&`-nPtGqy&*RZOHfyK#9NA z{PI`=+6qhJawNK_i0>)wg21p9MG+e?RJg!Mpfz?N<6ariKB2wZm3H5|t3`(~WdZjm zbz`a$3#A%j&X$JP%cRl~BQCZugo@x&;7(<0yXSH!OR#CQ7{A^pW1qLj=Ro_nrDWr( z%@V4Lf}5}ZaE2TYiVXFEtEe3jU_vRkyj#qRP`pEb91g4$n;#0+0`I?7y+-a>N^C2c ztwajoZHykFcd!v0iyZg!cJwFl-UMQIxfcbv7u~JU-c2uJBPGtJO$%$!SWKHQw~9Li zS}v4*F>WBjP0>ClIaPC3>W8fl@NuW~-Sj0j`BJbD!CD=itJWeWw%*frj|s~-X4S;0wbur=H_C^SKR0K z16mk~z<8;|&8DiS*d#F_v8;%(Z1^(@31l0-EMcd6nn2U0@`wtC!4R%c<4&>R&AZ84 z`VgvRb5cXE^2D3Vsg@{v_ddNwRnyNg?>C+qUW84F+#*+Q>JxqYKQko1P}^nhhcP$r z+S)(+hL5p$G3a*v%XQ9n-PG*bdT^eL`+Z+U%f*0w_9oNHjAaJ3Eg?a)&>Gyzqz?%U znuYC&w$w0YkBI!(@WtD+8U|a6u_zq2GRaB}Lq*>-j)>51?dGF+aaY2;E|)2N0UzM* z?w{z)T}4DL=4|S+jPnNMSWyPmcGGx53CCnjBSuUf$5lOr?dj3d*CVNHg%U6oB& zjHp!o3L?Km1d$p{3t-H15>S4J7<39>Y>&Ieu)g$q*P;{ygx&#=WTIwnu4%uXYV+kp z=^!+HTn;xF4hrvw!kV6R%r~=Uh4&Hens$c9^l@R|Oo^S(6WWaIO|wtWVE26!?8CLU zLb)MJ_<9j18%N22a}ponvSk!?6_J*!pBO4mc=#g?*=~4yM4D^^Jqa(5Ogrk(($@d; z;!mu6gPJt;(?y4l#|9nz;@>q^mx)V1${2CLY*mFfbFtYoyPHlY^;qHr*x^qQcC-Fl zIQO&gQxKhD+V0@9y<0=>*NMnf^!yk=WyT%gfn(eaA0toO>3WPhq@QlXqfy@&-EVv-;(?gYxT-=&jrvO%oN z(a3hv=HbV_TZ5=>{+wP*I7v$b5_cCvJ8Enk^eU$A9y5IgYlBC%j^kNo10Fy?m@NEN z9kt2Rak*W(j~f$~N^%HpT>YYm)?br>C53xR1)e+^z7;{?-Z@A>hpC-2PkjIJ;Kug`zK^(_G`)fO27{@3D zhNHV2Lp0NS!tX!~*#(e3F$61WhFHZUZp+=xzJ87CC;MMCvzf>+io~-QR-P zM|QZq$shrbRDs~)SSRniFIQt#W#_5aGJJh%@c3wdScO|vcJe19$NISL1bn64P|IS& z5(iR+cxSO$bYb7EgiC9;zc%GuNU? z%B2DwI?FWjrW85IYB{H|NA-Cq0af9r$hnwDX){fkEsX9LisNFEu&Hm0xM<({pu#H{w~(guUU}n}Lnw zT_y$bz0AgsdaBx0G6+c=Y54SCzh-$p{(V5RV9-({Up}QazV&B4JwK^Af~vIfs2BE3 zh7%Et;YJGABVT%I;)iC!VknU=Af5S>IWx>*;b%jN=0vfc9ZOs9t|z>1}Q98#u|p zqpmOZzJU95g6TmLM^@BFzn@6#-@V~GZttR1Vz<_scXh>}gu>W_3(jMK>Ey=fShT_7 zOsZt>;7ATbz9o@MZmIaJXC`2|^A3~N_HJJ(ul%j#oH@Hm7e)n3>AMuWdh6D}=CCm9 zATAp&%rn+Q-y$0oS6#;i{959L$GuysRXk)hp~4+@4ZCXzNr>~*r-)hG7Z^O-qjueq z>4dVsScx@jcGojRw!Y^0KMcVN%-p6V9!go*A`)6AtU`6fM%8cs8rw-4v3NOI zlf5eo$qIsw;iI0gRO1Xf8*lvhVweA}8W!6Bo1Wkz;0gO$!Jno49SK7v4^l|DgKhs) z8rNy#@AeG6kIXYJ`Yo^VW9aFNhCAp8_%N+nRH+eKT2N<_Z0A=)>StzZMxeZ`8fm$y zIA#s6mv8~84(^OJw_idy1C!2p9Yu?gNInUEUV>i3tt%AJlW-f2nv|!9)`reuxVYv* z5!~R2VA?xPqcH1!*KA@9B_pM_AtJ&b3&R?sDk2M2#cSu&t22YX{v6#HZ@(4DW~#cJ$Ij2zA8gi&?RhF`swnP2&WLqIiG+|Mx?QvKCKnPYR8 zW>sblbo>hb{@Y>4NS@PPA~|ia)e36U;DG!?`>aPhynhA$Mb^IAdQgG(A06eUAp~R2D z$YhWE@hE*bPlCQ;co;0g7tNt;tMyEjy^;Id?4HH#n2Z>F~gXQfO`BW`Xbe}C+PVb zLB^^5Vdmy%xdq%^U~AyHYCjTqoPZ^;u%+OcP-Gu7baiTD7_vB_4DKa*bLU{52faN1 zNJ5>%UjM7BK>W1O$~eJ<;EE2TBLv2sWUS`VFA?gHab4(h6q^Bs+I8tLSUbw!`Kvtq zF(8#79wL8egh&Pd;ZKroaNQ_aAgi?>92dtclhJ-?fXvQwcX_!!_WjOvzkH#V>q7P% zvsur+$%RoG#oBCG5zH#yW;IJ_Y_gERHs62fB=wW7bb5_e&*nM~u^FiWDZp2B zTEW(w>14oQSQb?yvWXc`$x1E3I_Ogf9wUWtIY^mVVi4Mi$!Dvoq(R$QxSu7|r{)To z6TF4HgM$nAs9>Qw6DkGVT%@KXJ`^m%4=aJY<=JYY(ul}~j%zcnefg??hknZL8J*fF zxKPv46`?2k1G_-MgblL17Wa59^<}7kyY&D(A*AF-q&kKAP)4JnKkc!|>baG*-#o$T zxQ6P0N@SC>3FWIh-xmn5lejB3>Mpo9+}&SDJ?<$a8)p=YEk8x}h|bj80HQI`Ettr# zAo(sJ#oy|Z-Uzd3RN)js1U?6w6s8HWNwDo5XV9#DVHy2ol&=zZ3hj(zRzM^pKC`kv zUOQFbM6@dlW;X7Hc#u3~(7CNfsn9nGW#VzP-6|eqi9m~a24QOljnF`^o6Oz~WcN41 zaq5}iNpF5!qP^6Iw!n;fXwqQAnlPtMF=T^-K|`RZ|i|v?_E@7qKY?_#fHWO-oMFBjzqXTf3yIQ3Gr0BJf5i>xb;kIF2A{ zeqlNlSND9Y1gk3bWJZ03OC^n^z@8qzF?vVBH+;w7iO}P2>ky=SLgqLr#fgA2Oxzfj zP&-Pxj=(w=!6h+qy@W=rS7MqPyV;wF@AoR5iOJ@?A$aYYw$^3Mr>eaE>i({mJ*jAu z?-z{B!j@i5D!M&BSEue3jtmzzk8|K@Q|Q}$!PPmAI*Qv@w8!%97w0}z*YvZj_k4+w zM(=`*I4J$*{Zom;h1ZLGJ~L((*u6yN(8Y7Q9el2pwJ4A(j-FCnt~!Z?{Eqg(8SB{GT-h33k-7en`Vz3mM3f+>xr4>8nMSGj17tCK7R^FD@- zlaz2|Ay)gcXVx>UkDA76lPe!e@5oWmJ9p@$wxbBqXW|bL;$nd%G^_h^8$bHzv8m3p z{7{5I`>qqf+6;E8!e`DcTd|7_BaWZH!0sPD@X^G0JByrIHzmYa7@?wzSHI3v-P_5= z#K^F+GhA7fjh=vToFTY!bSI)4VC*27U)-((^QMk3_7f3$WJ;gU7&AJ_!Ne8^WbYXv z@sDouWFq&;2IxqFl3197N8}FUK4IbB;GIrCVQlXV3?fqFV9`F2V5{Hw!d2-vN;MWt zFE(e5H!iK6jM<(D@P4LHQ}<$znR`v_$PgW2Jy+k9_>DRoqM6yI^JysQLFfY=4d( zZ}Q&oBgNvuEv)Jbs{&-#;zm1xm<)rK5TCJE6mCz~D@r#%96jD{0Fhau+q7BJi=0B+ zxhI(V*TOf|`+d1)v-j7Q;gzO5b~rMXB?AT)!32B3#v%*VtjhAVu}YHyK(f~={53zD zUfF_{DUcOB`gzjjEVdiZts^iYAZElTP3-oEE|78$uNKP46TD^GHu2yb{8rQ^=9nj) z$)t(9-wHBj#e(J*)0#>xfG=eaJ}Q=n2C+O+h_L}jc4;=+UVU@lisvJl=eMCh^ZYIU zgiEiiDOANNlfY?J=<@5k5RcuiR_|4B5DWa}jA4dZSos=?CLYBYFzn&9JnnzLm8Kk(hgh+!rl2GIYSvwXK@C7XP@eFYO@2 z&Ac&Ty%x22CMM@(Gf#x7n_*08lR4iFMxH$rnNK*CV3VHNAG(^V|52^lx zyHGK$s}&i0XZR+?hK^v5%l=>!(}hAiP5k4KwN0UqhS#W**D@v?w)lvWe3tUzvKtn! z<;r9rf@nL3DPM=SxKO7ejP=aS`<;jm%V?gFjsG6UenY~Z+a(k?o>a)SC}WRQ+VGEy zr~+oNf;aI5_p8=vraGTtJji#RVx{bc-$Qa(#ZQZP#tVxKE%AErD~cjb+zYrXDJ5)| zAZ@g9q{r?r@b8>~6Uql0k`}UxU#x?Bn3rqR*U!If;a^rPZhpWJGpOQ3&wqsGZ5+mh z7p}|0G?sUAlL5lf<5?1lc|!`D2|(X2N^-%o~SXcKPp{UeEw6M zd=sl4%usqd*QYnR>5pwkjRfgU4Iivf}Gq3IMI zu}~je+?DwbA4FgiULe@IIQVO`yj%Q=!6uvqU^% z=*|y}7V*>jTxNV?b;g_?BCv>eWBfa$m@?Q`o-wpm<{%b&K-oJJcoG@*<9B{Af9HDl zE=7}J%gMWy;IuUnFLY+T0;@f}m`d${Y@h1INEPr(r3r=D+Pjf3o(F8WLt%kYaCmo4 zV}j8WYqbX5V7s=*+3s|eaT9f1+KnW0LDKkQ$15@%LUIPZIexFKh@rub8Zt_|^zUB$-E;!gBZ>)x-GUOIzTCqZkaULZ@Qzvh=|D3rrP ztIZ?E4tp9#)M^&3$1k%r%#0wwM4iuxw&8j()j32Gz%Z)C)WJZ~r&8Dnaw`7`hTyLV zz)^0?$$0678HpI$u0uJ2%si=Q;1d&U(?Gd;uD;3T+d6oY=RHGU!;w0EJa5?iN}&f1XwJ|5hXn#pUitNKDRXJZ6Y2ZcKdDZ*Qy#^eg%U> z1_S4eYvl)#cjZJVa5zo{%}+?08^|<4aSgWdSJ?OGs*Dfm3KXzG#Yl#9`9Q}wO-`qE+vN&g-QO8)T$o6B6OIGdZK zWw3xkS_!sM{#3@WdB}B9;lgqxwb9$l$JUf6lD@_>cSQ`*Wtr}7fpA+O^Xk4t5;DAF zR~N7zFG3V}A8N4Sy_y0FViC+}%1IC$OjHmSV+;%0<1#;f$7Ir!@<7f6cW?4={_vKx z>qfkA(J2c@xc$@F!j1>B!?F-G;#Z`!R#vgf{MN={aWe`K)3CSNRraAjO%1eV7KF#+ zSUH+bMrm5JOLj#y5E&G~L)X(-jJ>>_^|g8^?)Kd(eud=SL39kE(+DcBgSO4lBz*4_ zEZ%3uR}UA`gNRSWXFli7*Scg3O?BL*h*oT|8*@^0uQzhi zx=zdYG|$jdQtRdNq`dEIyl_Ym>OHSD zv>wmZ=x<^2CIyl_4^dAvUpdmh>}hZ4`J-c|%T9f}@BgvWRUK#b(&nYhto^J-!KKUS z#-F)X(hr`Z(pGNSiWNwW^I#1bp^k$dW*qPrdf2Lb*2jX(I^Ug~f=|W^(2Z0WAea zjmT;gbyVt*9m+Ah)YK>%^BLn8nOGl}<9nha;$j`I_4=@1te==6fru|-{VK?lr+SlL z#?Xg@5w|siiyYli7a{k#v6^eqAk-`GI{hf7$0~M=u^-e?;%X+m)sHOJZ&Eo&5Q)&| zUP&26faODB;U-E{-+MlpdN9ecu*Y5W)5=T}R7ep`h8ne3#*bEy_%u{omnvMPUGA@m zFB^{4#fv|B&D8=~%70-&q2hE=^3=tVvs$}xk4eU`oSh9C-fy21$^U^{n6=-7X z;7y61&?$3b4dwpm;p`~q0ZlFIu@MtPSx*!QF)u>e=P?tr9cBnm5fmplqw|om`tUoFf z4+HZ#(`wCU*tw#KYX!fG40}edSA`JN)7=^R z7D?vw#I4XMyBDFwa@jx5%D4DhYOEpzw2Dt>#xE<`B5A;Oc!IxCYRVAoW_LH|Zld82 zTEm=x;;lXFUSLC~W+bzLtCB+;zL#x)q2+P4#^3d9#xd%71)^mLq_etCx_8X>R zb)4c!^>hw-OIax8n6F2e$R%HlMP;Ny(Q?L`^w!OR-jfchVhzHO`p(0!XWutiMiuJJ}3CGfuy3|{CbC3S6-?7A)Y>#pLLL=fD$+A zC(hsT+6FU|86_I;xJj(YWYUeo@-t2#U6v+@>)nL?T6D(jQb>GNG!8nBk;c1TBI}k! zK9AhGXF0;PiDKGp+i}_WsR!hYceWz_LSHbe^m~PWY5ZEqEfKrcv@X_OPIHTu{T6m# zhtdPx*P+tDt*g{4pc1KKSfvST9%Zm#&oIM;+x4iMA#cLsl8ugeLRApTz%Wb6s`q-0kNB!N;x5l z&_@`D>A5cKD!Mv ztU|PCI|NjCAO-994_V}>2pb4J*GnvUFX5N=(xzavdwJofAd`8LD?j+n_|1Fet(}QF z5E(DJ!%i?zLjUpoflxG#85v5}is*JpMVEQ6>2p;y*|-rlBy83G^L6>tBdO-}=6@<_ zzyaXBSRm1~4W$b|cJCAsIzTt9dCS9W40*LAKn9XrQ(3 zCpu9ylQ4$6Fg{5jAOJfdBLTKMq;zlo+L+d#40QQ|N2T%)i2k0fF+H&T|9}1ei%nO7 zU(9gI0F*-S=ns%9(INL73608a!9}}vuYUW-(L)j)I<|5I!Aw;%&^fq1qFaQ@2JFj< z0UMt|(~jNL9X%`=sT|KF)`9B4K~2lex1(k|;KN~GbVl)AiTrnJSd}tH->N3xd1jYi1^S$^{L1Jxi>a5d2dsz;Xzx7hLB^z*~xjm+IUIZ23Y-EL?m5Wi1(hOAl;CN3WiJSF98mw&C2c zTb=Ss?jbOmfzLx#Lqe)N2+;Dd8UfUTe?IRNz1VQrMcDydgto5gz4pSTK}{pVj4t;8 z0qywl9$1_k9)@Yd=&NO33IqWc1qZ2{W_X`r-3 zucICZpk^Ed;0>GK-pZ$VgA#Yw4&BslN~hLV*Th)Y=Ph@S?^OuExaNn|P1_Y>8XESS z8zAp0TXTV_UJO)wcYD>b9L`B24(OH;0M!hPnW{fXeprBsn{hVpG=zGZX~9D1=X450R%&9x}Z!{dlimNws_ECC%-x!wY;^%ckK|t5#-Dx}? zT)~z8Gp|784FJSorUV_x^*w#_K>y^s@3}ZffRawx0=Tz!;1T<`3)1p`x;HGo!-ahx zfqAz@?>)VSLE&vBxaz{8H~<~)$rrXSvV*ogn9^=T2xDi>Q2%03)0BJuNo0t?Lew z(GGP*3%idg%=47-Xr^x+uXbzf$)g?$!0s)kUhmf1ROeBJk?g1DTKHloue#TP71z(+ zjUjlx;r+LwXfKCD8V4}}M^%Dn$WgzMjr7C!%FHVn?BpF1UD-|Z+^b`sa8cixJCk~h z?RWUX2p~v!Lx4hLc4<#E^l=Bk+yiD8+|I%C+4r2J|C+g=4d)PQS1iQrJW$wce?Ik= zcj-2QoVUHCB5Lo;b%DeU>%7FhV!TABi;}6RTc1oNXlh}ZnI7U z%32EreE^2vTe^Hk2)77z(7%8V5qJ;i0&EBLr>cPg7ec5aNG}RhVGM$T&Jl#FxcB3? z8l~g9b`AfA5IQ4EX-hOLF4&2}9{Gpyt7fblQWVQnP%TLDcY6bg9gj%Wv ziw*FrBG|1)RN#jUv={PF-0C(A%8&mlI?z9gj*ZhoboH}z;|>s-&V=uA?TX&7Ba;0w zGP6~R%U;vE7Slc0mQU%bTtUNO1MQAajT#oHDFIQqfV|oFZ5cDQ-DlwE&!;uK+0vFXJ+R&WFy>qdR(l_F3xx8^TAzaeS|WQb z1MN`NnewX7a1$IVU>X{Gr_>6lC}a|G+j9x4|R$10-9j$>$NOKy`Mr+IM!d2cIJ}Yod+H!sDO~({i`fYhw-y zfAeO6lgm;uYgG=WD4czS%21xmv;*`ugcswB;#jX2+cm?xNCn z(mnUEVMt-{Ums`7@Y`f$nRlbR49b+JlRn%zLi!!|6?MO3MtN-IHqVG9#GsncuobP6 zb!305xRhomj`n-~*3+TNFVI=#xn=z{U#iqKbBqs zFk0CgCcfHagBnIw?y>79&{tWM7T!6ywsx5aGHnK%PW0#}gY9sdA)0Djd zu&`?mH$BttOQ} z!mO@R^5*~%Cwqd%=8sHguUq{Rc|}f~50l6ay}Pc|a3ete@m|6)bYT7j?)yi~jhH3% zShJ~edd~FCziIBDW;EpVR-G&n`1R5B>DJ|#bJCtF9M@lveOcsV4^tvK+`iQ8Qb!=0 z^(DQaay#zg>36rP-Q`l>oA-2>7Nr1}e&+9C06aIPgN&90#8UKVM_=hWv;H5%+}N{A zYdlLNloi!kEjL1o(>6(*Q_J=$H2gtA`Wh+x4Kg3I3}OqpL`YTs{Kw19;lDThH*XTd z$Cwz&=Q_rjUwRwb$!p5xZF%oJ|0R2^aE8{+C>c>&1w@1%6){N@>?+sc(c7p1> zy~C7W8%w)PpktPvQXo!`njH0?6qI>aWXB)O7zo}a-t)lidwhK}pwp?wk<$=ouI#;lb1r{=UxG)jw46Q_0i_2M4@Fc z_lQd7;d{fYWW5#Lh~b|ifmt0EI)c@wXz^W44#86D~-mL0h%k#iAI zpAy2IWtH+Jp@`&m=xXU^sa=DyL`9iuYu~z)SUW<8ma^h~`O~TaWj<*t`w;H+JGM1D zMLw$8?sgK=G-k7u=k_&ZBeMT5HMa~rEi4Uik%-v7=Ev5M?;rik<``3Ti()C>O<5Fa ztXHsVj`l1Jq%n;;&<Wy)}<7k8m4(ojO>mM$hE6-UEj4@Rcv65Ps z->7Lm(-PHo&C!6`8ARZ!j-x(c%vOXyHDj5zx|P;2ucfd=^&`41dNuzcNh*3~^Lt+7 zj{g(J>YvIWJ#f&Xe{BtlTw-f)fzxN;fmI%xE;u8YkH*QINIT^i; zz@u?ni%&g783b#Q!w&u3sg)JOHW%)Zqvv*rf{VkHm{+&zi)Rjv$Xou-c-R{InrVPN<$sm~HJ02`Ai4h}!WwHtT1{`5Lh?HoCcLpXjp) ztUW6vyHd|!mr|9arbRUK^~ldRa_5p$g8I_d^MwX2ybp3+fj1>wSk-h7SUN606P`Qg zH=3_Ir>~n0M$%#348MGh^u4C?&uB77g(0oDsVw`p~f-`OybheZ|j72#Ni#&(=W)>NbA2++SRtX zNB{-*NXsq@uS9*|2$ z9lJyEzGNx8;a?U9vQA=pO;^W)t&YtaM27B76~lZGz1)zPfHR{)`mIY6n zkjE{gmr`s&gD5xDE7GK}O>u;`!zaeVPBttq9$z6 z=_|-ihE(n{*V|Xcz{g8&HtxUQ^1U>R6+P4w=o2N4U+X(w)UZJ5Qt-@CF~4k4qpbiI zu2@9T>B^l2S}{xIRJ?+`hpZ%0)efCQUTeH>KyRW-ce86ugKZk#kv@O38e-Kf@{2i? zB@|&F(Glwe2)QQ5t_boG^=z}TwjZIA2$-X-u}g*B*kkkazGnDH0A{K(K;#^Y{)@YIEznk-#d95Z~*4#PctxD7;QUNyC=phZ1UjfJ+3NH+!Dh z$!ZGkrjqi(`G9?YH)=I}&=eyY+dWykp#S0SrTsb0TqMpmztUOTR0L`E=HxPs=gtyD z@K~*{|HnW}A)hJQ@l%51Y_ZE-XrrO&nL!3F2%bEZ#dBzVDC943e6@bw`O(I7O1+bx zHoX%?!)1@57pTuAp#u0+m+J1T;rUZ>>eGwJD~=}g zS==6v`9ju|$2~~)>NO`Mh6?^#9~&~R9!!mcmmXV)%WP{kOFAV+~18BT*I;jz2^@x zBLlzjRQX#butXBDbY>6M711(cZxp5wsK*i+R%}+Rs7ok(W6RpBRdO#`>&f~~=0%0# zF*-OEiaP{p|8E}mjO#xIII^sTEt`5SCZJ#Fmdm=`m!TduwAf%gVPg z%l%9qNb#fiAjR980*1q-Vuria;dMPBvqASn2k|%uA|VkD#|J_?ONZRp@%Z#D?%v)gfLOe3MtKUpo6Uk|Bs$Pw9G#|Q-IibNF~ z);hfZDmqdM@>WSl9{lIS2bsH$>~IcjY04)9+_q$+6=`ddV$ShBiQn$KQ>**~G4k(p zx#ewG4{}&krl12MTV@0}d$0A|n>aN>a8` zXtBhfn!Hm4Z0F@V7zQ(pZ*0c5PB6VbVTK?StZ@%YWiC|hTh>pSf4T02G-t2*&R)hDAiVi?c2I_qH3{dHUOZ<0zNaev`` zFxU|M`-6$naPe3(xqV$Y$aW@pumXGaYL}T8rNwxbH_gOH=hDFc(_5aGl1Z{MS{&p% z?RsBXHCC4lARWhzyFce-?F&@MXIRVg;7|5L52^x;?6_8WO#C*Wx!T5#D(DQD{X8Zy zis8C5-d-2Ufj&jNm|m{~Z4H1k@r87ox0TW(33>J9p=$j&f(RmQp#(w#J;J@F@X#I)<=} z{auRz^Q|7Pcl^{LBQ+WGsg`E9B&uoR>g5X&SnV)9N$3U#^0+Ge+Q9s)hRrkmsU+#6 z4y7SyK;H(tt`zJFCxJR|HBtWkT>v=3ky$%F1&;Az8f?$P;iE(uUMVm$!b82nV^4)s z%$u40ev|;3(pge8jfZ~CTry;sF-s#Mt#q;5?V6}rbB@bs{)3OCiJi0mOV8c^JfP>I zO$Ge~xtPstKTW?fWzCo(*Dz4R4`ylzovwTSA@G0mbD94qKX)9#Jq=@Q2Z2Q5ebk47 z`K`H9N6UCROYPrcZA(DX%jjFlJ%Zm%hXuA~f?L(&B}S|upH*{0<|u;QFsYqCH{^p+ zvgM&I?Y}=08MB&bmk&O9yP_NXg2ri?t5wuklT3)8$!i{a-aqhhj$DO6(r4Z;w_FDu z6OTJ2@ZLh_+cP=9*TF|c8+?TZIYZfOwUlWl<&lo{vinnlbG9=Er7M@a!1lQRawa-p^^k!%1FuCuw=#(u`J%?qvfteLDLPNv4U6i0hVhqtH3LNlCWxRy`ezV@ zQxB=jb(9E^ovK-iLf|u^z&qixm4? z0^V&sa>m2~T3=-L5n(a|7&8+N5+SKo<7*7URtXYQX6XGJ_V{9OiNl~!sUU+$op!RN z7>@oQRkba=;&l;0@LZ(ivFPo0wtlVM95<;(i#HA!m;SU%sLoie1W-F$G!> zw!Z@FzfYHcB>6dxNIvi}+F{}`qM^E9?hRecbyIV`+Ou?CCUJI1_Ir9RZ_tLU*SjV1 z9QM~EKk{qIaPH(QwjxP(=pW<*RAb(p4W%)>h0QADDt`GkK$Xv@1&Ot?9&Uwur=oX| z9i-jwzVAz#CAZ5-X;T!ib>3xM@zX0*>_!26E6+=uX|5-g!Qkrd* zt5EbGMHi=CrJCvA`2FdkY{R~C(lYQ1GImkfdT0B2Wv&a2kw$H@bZY6Wlbs7_KRrcU zA1Mt$9q1EnApG2zv|bMN&TG<(%OWnf=YpkG zKTF|d^}oZ|IeDuaGN5(nrmK7C8}xq%=)^@KGg42syMB~Ui_b{zXeR9c*k5e(=ksu1 zoGelq?w~({I=@s}<-y%vj`~RcBT{jax^Tk5Ngk>zB4w4`w;D}V)=A`DXjh=x_3|}D zO47h(LMz>xX;Hgi{rKE{|05e6q^mw|sK^Mp5e{B}Sd<=#?eRzI`Y3rNs+7ZE-+^T8 zPmrYQLt@hGIJU-=w^1_r@h%Bh{+!8a<7jo_De7rwDb+KDK52X&7yQFXUl1wCKCY+p zJV)a=d&tWfv=7JkmNZhN8|=hEC*lTxfLcY3Z!usn%>>Z2nlIwW@4@eQa4rq_kknIOLSuN`}}IH-2j#Xc_5ceQp9aqVW+1yc}i{E9QrHV@F)*AQlm~ zi^md~KP(lO5WB5%trAp&hhVU~bfzD`0(9*m zp`=pMSFdm)U%cnN?!(7^3V$Dc&=QP7bqU_pcAamIJJ7>15V~OJ&L~dw*K*ox_3Cm7 zOdfU?m`g;Agb(_nT(i-x-X}s9%44)OhZ&fbSRsM(HH!S6XVp3&eJfsGc6f-fSPu}`QD zh>c!-wNaV*P{a{gpb(_cZ{wuTYhswn)rbGp{(aTo-00tYtb;Z3A%k`zovY)~zIVTD zQVse{U{%((@ROU~(=t0zl&PJ1NA-DX*BfSojOgLXEv%J|0C;p4ROR1N7fb&B{j~xx zm3;`QXdj^ zOG0#=nA8ah*l6;el^iO#%4gG0MmKON>fTNHD6~@eq1r&KJRDaw8U-2zeq~{gLQIqq ziBDIeZNvZUbEe&8)6v;Sgi04L6lm7Q1T{Kwl^OMoy~+#e!8KYQ55a`!A-i|u;=o+N znR>0KINuKn72;b3hH9>%6xrV>a#;G%%Z)6(x{g(rpuS<&GPrG$sDc4quu8&(w_?70 zdJA`HkoPaQ-WoNgn+}xhPPH~aPWh9Z24#bO@1d4Yxcyyxex-HOEXUtl6!Z0Zap}bB z*}|dulHZZdPhwq>^>TG(9IKNjpGjv}Zzb&HUv{6=M206ON%^KsQ~iGN&oK#K{j_b@ z_n@5p2ctv(uNa+~*s#olpiD)$7*=irO;+R7dm|baR>i@biC9jRQex$n&B)7}OgUAR z>hLOPheF5<_x8gv=gZ({pLTlaJ7h*W;Y?e=%qktjVuy7=!q#MN|L25T*Fg1WGTvv@ zG3k)ioTYRy7n91t4g?XuZq*yrVEl{u*X`z-4$Ql1DI^&x#emv3rq<#NFs<4sXzwF- zI-8W)w?j&hQ~iEhzw$yB%pGoGU}g$!>yr44&NPQ#sdRE6Y~Vk`4}6<<^~xJxdkNKUy@qJ`Y;JajI?)*<= zZ`l7KI)Igl+U4PTvvI4QVGEa|^-L?So1e|DQV}H(OV%7nrkUXk={S>-5bE8&Hsxda2Qt}$1CS28 z#1swmG@$$fU`R5u4s~lmQakj-*f9Z90>>)~%ui6nWC{m-{QrKP5_&iOe|GC2bi}G- zB@TL0=Db(}AavUeLanphO`vNR83E=Mi&(*pfg!sQ2o?wum+l#wfja=GsalLS)N^n< zB*+5+P$nvJHZFZl{rGS;rQVp#RyQuiHv1PBJA!hgp3&1mnD&z9K&norZ zvuV_!2eV`ttoSSUfaOvLDvgj1=CX3^3Sc7AC~Sp*F1ZWHq6qO#Jy%NUb-;ts0fRZN z=n9ilsz^1C66oBx@Vw({$R40tP+>%(8y6Cx1bEWz}JqPFv@B>fB#FvPy(wBpiRskrLeKh*okLM+j z=aj^XfsPqMkNn&J@!kSt16?+iL0OUF!E!{Nm|lD%*1h^!Qwt#eB2__h^w7e(0-hPX zstdKyR}P$$O!Ty8|6cxLz0YcsQ~G}=SZ z_F>l4+Znj==(^PXZ?yX@Qw?lU4t)>38LZ{5|LuK4UH&by2HZWd^H)Wd}_)Rcmc~blA8ZA8q3Foi%9ZL$k z^o*RRu}L821U;w+4BG`i)p@5=F$r=0EB2;hJO48Me}TP0=Quxs$cBNp;rE+iL2c{K zcA!h^Dlkz6#g6hLapsZ0C2B7#>pguRxt=zDh_fR9;w{Kfc5Z$c}W!CtR zmWYjSW{lH?;HFN&!p^728!@a-zc5>va^LI0%mxri*4$Qqx7p*(?Cpe#0}0f4SBK-e z-C8Ood@QSckGGHeLu(zXclq7<02O=){IsZQ1`y0UQx!sM2iLH5v0gITe$JLt& zS%O{+pJjM98xQs@uMMKthXB8HE~!Ye@C57=(X*-C*rXUHn1aGpu2`P7^u3&s83af(2AYS zCX+p!_Vl8$UG&?QEXPnO@TW99WaeCr1IX}Db6S8%io@?XDu_$1e-r!`g=vNU1H5h^ zju=dFza?Mtxp)i!aH6Wp7yy{(RQPWJxGL?qsGdD{Ts84~_ja}O@l4<2C^NJMzIP_` z54VRDVAdSWy2y=s7{QQ57%O`5^CfKPwd*Lw4MR9LHgCS$%}H82>388n5f1;e3Hfd; zc~UHLzblJ&@(uAVOb+1Ws{#w^qVLUQi!kP?mOtfINdf> zX4?Z@vv$n0b{?Vq$Tys$Mr}jpiu*x`YS*%bgctIEwa4X9cQ*ci#J>S;pZNZ{#_-P% z`1`>`;wK4lGCk%bFRKD)tI? zH8u}?l9zd7c(dzn(fsWSV0M%Jua3?03k9QqCi7BQbml_L(#q=Q7zkxNcoCNx*!flE zNwDhi2f2l>|6lTNY!PpGH7$AnM3(R2WM2h~UjnJn;BXVt)BukxA&gA~lNJ=-eOH&W zU?A)xIqLDt_Icp zxEC(eg+;GB>Hbl~0TgGsoDA|Gd4L;tpsD@NHUn!An&=v%Rg;g$(YsniW2k0VUG~NM zLmPeK>bKo?Q>siC(;2&jBa z5Mn);@>ZD%C~EkLx=|YhpT0F@-+wB40JM*W?<*B^?{Gim6gGpYGOv_5m_fMRTeO4? ztT-|R91YOK)s^YJuN=TtW_gy2iP+th3DGHLKbGaKw%2zX<;&DuNlhpQ9e6KC6j}$X zXzRCy)$D#!Gl|5$PglGU-Ir}qeM_n@4{k<*f$KXz7kwML@Ih04ocOjo3BMzTxpA-> zCOq+T)VCi_lhv*pF2IB=p~r>Am-HD+HGVVLcOU&! zyN6<;$KP+RL>T4nr0pn#Ljb2Ed>sr7b{FcwNv>PId}TW#UD zPpDkIuQaB3q|8UKmficQv*Kti``BWiMp;uE(|#WAN)5L=SrzXI-zwo83=6mXpx9>M z6bgMBD~yCe4$~cZGZ(%D@;w=Yin|v8+#9p&j$ZT7q_WnfzaX6y4}V^!W*vThP&;mK zW1U*_HkYzFv$j^4S48n5eZIQ5rT? z+6$lAM>+Ez7pGY~ynYBhfHP;nXWleDNEYEc4lBT%*_;j*vNJoith1 ztL1v0bav(UT6@_y7u&D2--RqkS`;f)rWtd(m{s8vwAh~A%z)jPbW<*NFn%0Yv>XgI z(|5%@Ap{#GoILF#_9|2@*=^>%UxC%PSoyIai>OaVIIyqMci-t%Ov_3riQFQU4uRWm z@-2e$Xsjy+y|Ugd!NJlWU8P>Pz5XiScCnmQ9*IWnek_PYqsY!D*Xh(B`7dG|Vi06e zTR^u-{MCWC*s|y5C&VO5x5W8X9?`0&aJ1l~9oIXfyp?e={D!72UaI+Wua@5M=Whn> zKjiH^4P=Uys8p$*-R{QSgjk`!4z2#_P+Ox2k+MvEdy`QWeoDFWLo4%#M$2>UOrdO$ zVeP!C2S>9T`qMZW%MBpCEKb+QDWcg!KgX93;M`bfjAf6A_SSa$Pi>KLeU^xn} zUW0W~5pRvkdvs+jZu>eKw4~C$$%C(}qEfq9L?snj^;bT}&6Vs#TThWadQfHh{8vH< zZvIN-R%vfsom=!UCW6(vWccsxwVb0d;es)wvlAK6_`tR;NBR-jJz?(9I9_#l{%z+; zTu9twaBy>}Q>>aEOxGK_e1w}N_bF9)`ZHY}6_#L&Ai=6jQ4=-Y$9wk1smNWwjxSrU z#t+-*^F_-=ReunH+zkH45#HlvYqb0_F@qL1utBr+Lzm_P6Qnv`1KMfA8K*v58t`fS zXcPzF5oyzTtR zj%K1aIjX}K1{pvj7db)FG#pW9NjLkrOO?17GC+Ni%|%=r32;2f?tFNS)Gs@+Q=&&{ z>u^5=Q8a2vw}6Y=ACktpvRkI%laiwDoZ)ShG7ek&;}d*^{~f!gy2)97vkRlP2A99mFOCPXgqv2Y18b6KrmK&ZQVk^UBl{hSTi#CJ zk$)1Izg8b#$4uY(A3bt*`H%shFRM_ETpH)R^_j#1b4|z3S51;egi32A^X`I4gSegW zqFOg3AwRUeRHBx=Z6bRw+(iwMbpTqqg*!Z1NNYxOiy>+g&P6kcttyHzkgmb-*C1zE z`qv=$C{LQqVD-u%6;>uY)r#G}rhL#6)i46BKfI z4|FPl`$MZG=uV~}l$_~)I_80UfUCqAEJJhbGA)(TCKWNl;?TvOZ;@GuFj}Y@Z~y6} z2)VO_5_2Q&f+P%@Pg$E=`g>{@s&9*bvM;PJu8nu8BWB}Cq2qa^2}~vqg{Wr;u?e{T z`AkHA@W$i^$f;Ux&USA2MUR<>(!5tQY%JgNE{~IPb^}KRd8)@}99A;ekUER%K`Gh; zBrW~VJ#rAQH5E{_~W@=D!R zM5=X|RBxRY=ary){PNcSn1o zi`9mxA1i1@x(6~+#VERwEz_j_paT{9iV%O}no%$$^{E^$k!Ua&nB0VF!(*}B&Lq_}Hrieqe4SST3&sB-M!dYA9VcD(($J$JG11)bQwL9u=cJKY%W zv45vsuM~d$NS>M!4!$&gNOEITFNq;oHXGgrD$q#3YLMZa0P9Rqljb0%KHmM$1Grph z62-|7fv*FEQJDy}wpvOgCrxyg)zo%G2v)r%MEMai^si3ea^3|Td^=TZryoT}Bc-4~ zjV1l`5BZd%P8v4hP1og>`b=xG)ncvlw`-|d@@3OP6fj zTjt|ts3r}4C3P+)a1UW?Y)c#~&(_K?i%vMjnRw<2^ z?|JT}Tm5j_tirib1Z^3vT>!)Q-o;XEH&Sgr1|^}?;7fC4K>1d zvQspVEf$LOvIDn2I&qMKyGON^%|3^NKb$XgcnXMEwA59q)tYh7?6(3`M&`P3N3p-? zDJ2!KC}umrZJmdI_XFGF-oIt=RejKKur}k|X>5fK1)KEk$Cr4iZi1;2`=fdVuSwUf z9;-2NjN-$OuWY*X#}m>aV=dGJY+S^niB&bbyp4J7hEsw%^-~ULtV1t3v3bys>R z40mfw{mIoXCmC!q`(!h@l>~lCmaJb;LM(S+$mliielZ^Vd2Mp`nWC7`RFkTH!5p!n zi8qRe#LH&7>54BD4d>qDx;K~ZyK>0C9_d3e)0#Mw4v;n>IxonqOkxj_4Hi!{dPA(3 zjNe}h(_CUYUEDi-O7{HwC(hq>8bvpCuk)DRxrZ`!)_tB2R(Y{q42Nb~^^(`ua{CWG zvHKsA|5GO%+i%@rOniOwzXb(^vJ{wq{yY!*DNzkeC5zrZQ7Thr<4YB>E#I6`)1XU_ z(1#V61)&b;gsF;uDSu~|&1Ds86o$=5VHx(@89axqYW(4HNe1s8&g5>b!;8?I6!R); zdFbC6;BZqY+u17mXzkI|_kIYaqtuJfpgdvF%3J7m8K}x+z}MkH8zNA>T8tAMw=V{( z%BNHpqd1yIRn5WJNr%bb86JI#4*}J)eSPOkXemC4{1Gcr^`(sSehUSJHK4 zG}=Tts{CD0sb7;+FkU@55ngXiPcbZAU0EErI6asQWo@}`=h$xSJS>U6Qcc*QZ|_{b zgtcN2A#?@ub0`C+Etu`AnwIohe<`FxfW{nE4b{RmeA>o@Svk$}A!q{MxA9eXLFVV( z28|}!ObfD6jjjdGm&NnX3sF*I2d#ZUd?~8I-ln_e$-D_)l@uL!E0;-QDlg)0(T)Dv z3Vz@d2EF1Y;brWE0m9O_xLbXJ)m4kAjI?7`y|6ycg(ux=2nW=G>*TM<_3tumsoJ6D zW=(}i85u7t=Ediy4ChKv>`k9sOKpxwD)85beO32#_!J1u*o3^U@DC?`!~>iZea8oF@Ks8Q9qUu94F1W;*2FD>Lhj<<5&entC67vM;GnR%sz-uX{ztZ zZI4Yb$SfizewQz@^1njgwD+Lsn~7SD7~kXKUDa7D0_<1o2=vyk8F<6wxM0mMD%iIGF0Cm|I)-Aq5Vq} z2NBN;tI9Ja(k0qSo(3tyq?oGwxoTFF2rq=Yo~DU2a%?zVs$_aY&*oXrtgK_C`h%BD zO~logAJ?q~H$e}3@0v3t<6i8i(MUkVsm-vSpj!HNx>Q~HmqFN`?0P2&B=ZZw6>e>4 z3LpC;lL`J|!**ofBdo&WipXw}&)NC#5`Jf=0+*@mYLBwgdxnWyfG|v!4TT}oT?;CA zKond|a3mqXMDygV`31IBe`oj=Ab##tQAR*aWVbV<=9^2Rwx+sqeLh9{6l#5I{LxR* zpiuP2^%nJR2Ymi{T&7Vu5A*DuSoP=7?UihFE1KW7Syco5YOqnhdjtad2Fb+%82mk# zG_e9*&ax+C&(^(-)4tcvfBQ>9o+-#ANE_XKIM}%~EwS z0rFoe3oc3OT^&TEa1WG-0{jj2>AP@sotowhkw}-Kve zHyA`&?kIbLLTW!+5qh*>N~VaRnNM#ILpLG9Vm~;iN>zADe1DJ5*_bR4fay&75=>6>uzxInUp0)TB*^+yy|mHHk`=pF0GU0Y)o%RDDQ ziK^ks(e9ChMYM@{GAGx)bN1@Ut+zN;HTrA9*MslaSWRPmSJdlD2!CkJQTh^l-1-_n zT`sV#$SW^#TKb7cC_K||prZ7vk5JaG-%GNKm=@+`9$HSi)k8-Ylm#JY&kXrMxfR&kPI9k?mh#!wFJ?^$|QjQw+&({9R!IK0J zL^89i0cI=IS9&_rVqzathxy80Tne1wc^OcLpmbB>C{6aSnA)z;wX#2qMJNcS zem-dFj2R+SdYR^cxL{WNQmkZ2C>vjZZmzHYw(xZlcAf7CEy9Bzk$i$ewk^Y&(u*d` z`{r5cDJJxoPh~XFeU4a|JYKc;)~tg#n*QNWWf;4PbVTTuPlEM14^w5$-G{<;rjsN0 zajr!CwH)S5#dnLN>Ae!{0iBXY#a%#7MLq0Nar~&ety7q&CM2^I7ZdjXa9g zFkHLO+Ypy6(!C&ja0Cjs0zRjI*st~-9*Vv+AK&@+l^rdf`u{4W9X}HGm^Ze&!KTp za%5-_=p-U1YzU_lf1GR8b1`{`lMT&Ipk%pwHhHIRsczJ7nqRYyCl433NxP-2ye5)? z8wLYS^oG?-^^RuDvBrz&RK}yT4QVRJ=?r#YvH6^P|JHfRH0eV4T>SIxcHN6q17r~k zKiMw2K#6<8#kHW3SzrF%i=m3!kJUv##fq(>YdJ3lar8Pfbhy%ow3RlphN@m|EF|hW z5YiS2pe0X-VM6kdtMn~VP_%hzGGF4`HesilzTX}RD_6tEE7zeSB#+7!w6WXIU!yShaYatyKXCK-l*+go*C5rNI3rwm4f!Jwr%Wr-gaHyc1T``8&I&Nzha!!%VMk? z%9DCd7(PPNVE&cPI?~Su)q?lfTZ7`3q35mA%*;rYu+AzSPdXNw!N?w4#(spyRr<=d-r>1tQ{Pr|#mu z=>mf36H3h>>F%&dvFPJlA}6il)Rw6wSS+uhfu7tf+5U`kQSHR96Q0jAeN0YUqiv1X z_m7MQ9*O=qDJlenFha~n=U(SI--v-ZvQfJ2e^WiE*&-4JrY7DPgkC1@2DK)F$J7jT zkaZDp25?j+&XP=fu2f_o?F%QF@#Ya*WePU?e-=C7ekLRK;u7(ftSJP|BoEwZ%XuuS z{&KUidCOfkvH_n8M3hCv@T}gc+&FRagaU_oFKT|*x&npYPW{Kp%`!+{PjQ1TCg5nt ziC|U!aNTt<*F|Ew7Vhy8uHs53=8`xP6ro#1`Y2RciU%Vo>(HyQI8j_8&hHiX)88k# z&Tr2IVPGB?qUhS(mz=)Zxd_72)ooIxkRzM>3`6=5d2gDf9yjL!dJI*B+pZKylP`2%S7+bhlI->;^j{yCfep3Dq;XmXp;z z+az%qyr;~<*4}b&J)GaY8UWD3g8|d^}vFeP&b8teV=B z#Kp+fJ1AiSKrH#5Hv>Tz zl(n!5g?fxyT~uHE<1s1)kXd=3+`GSTg5V5b%t&hqDz^XOHYE4}#WDSJEB2ogi6#Os ztuDIwO#V66XF&E;6O%0b%SZ>#Tg7$6w5f>YpJPn}QI?)nzVJUM!f6XF6!;5u*8MN^ zA(cZ6kRHdE?(+YfNFN$_`F}6^zx$;*Zy}>Ezz>}i+p(TzMh=w+q5Qep;BO}aft}`Z zAE^HcYyir?{lWq6G8%cHLEgl2izWtmL5lztTe<92_lH7D9G2L3Z9)UeRUL4s!C@4B zo?W7NP|8pMNY=7r_${ZU!E*S{p0Ju>=ULJS^@yb~ai^wKN zs2m?60gK!abgsvr-MK!w|OziMb~Wg8KH zykooktABIBg1Ae6f?9Au?%Q*=P{i&KiB@o4;34l|q&xzZx`Z6@_~HRNb?I4C3L381yvsQ_fkwm-4Lq0@RsUy9!r-FAZ<9eaJxm5^>| zvdgyEG!tJta5%MEi7ZGAXfg02v#ugRPZ1uN?iS{Rg4&^-&VJZ8a2{O-Eg* z3nn%ol!_ePsL&1^cio`e=Bk^CU8cwHIl<|#AoSS)oQ)3bgVn7_F=+57#A;$Z!>48vxg(4*3Oqd7CP(pcv^> zfK<*aYz~M(MRy>X9V-h6*IY)p`UR|7mOr2xZuHy(`Cx}X#fW!dir!ObJ*65UXdL!0 z2L!E6YG&e=Na@`JZ4qGqL0qXEV0F(z6{qC$Bg7sBGh|{VMZ3+3W zfeT!cohLXZ#a~P*7#eyP{WJ^;U*aDCmEIAwIHme9xU1&NUg5?$3>hv`P%^dntVl_P z%X=SMjur-)67G{qGl(m9!y=J#ew2ocUxMb2t0r>XQw3cC|CV-d?nW0DkpB4}$}%xD zhC(E#uY%MBV`8^2e?qMh6C=Qiwjz4yr49k-R9ge)okQyJ;2HSz8hHjVf&QVizo6wW z_2O4$DaGy%2{cDf4*b_`at_$!1#uWMuDtyJoFE-Eg^D2}6>4Q<(fB zI;{5?n6}WNfSM=xU#NJJR1DOMwNv@v63dCFM!~=2Q>z~6*R&DWGlXeF;#`*ybu3U% zSrLqBK%JhyKbQkOK>+1t@t5vv2h1KH=Y(70 zNBh`g4;vR<P3sw2=h@Il&R6jOeuKa)VbdUiAN0%6UTHqb`2`V@GT?>;p_vj)S?L51=ha3$6gnO8}8*be`Ay_HeU{ zxR|3d0}Nv}vu79}4cXuq`!rxo*F@FkbF=|=I zm;8R))u>NbA*&IWIGL#U7%_>$kWsZ}(6b)||7WuU6tzvI4Yz$C&(U^8y)B)Z1qyY( zA$9PXp^qteDGWf}#9$k*yHWlneTsEX_W9&~?rp2|U`thOY{jnL8xgQ9u*n9n^6*@N zO{#Ngay%{Cu+>|jW{fL{6jGFO*S+OM!oJxCDzAMXrppk9lguw)ZD%V?K=j76<^lw* zSeP!$&qw>y;yEglo`0lmngjw!jfQF(HeRwf15}EJb@eQg-(vDZf{tV5HdFAKXXFDQ zv}T3-r}9!m6;Re=xIs*KQY8tW`Z?lQ8Nz8y8V|q2b-k~(fx=`w&e(j)n!hTvPApUBw?H_veIfWezK-C&Ftb?6l3g>jR^fhpI%^KeQ zDoJM|qBy04iI<%MDL4*|A{!7Z;@8g(If*7K(LK9+58G}ls5HywQVT*uBlfB_uO{?lFex9GR~=>;AK$4Ipd#KMP>mkI{$%y83T-hfnBy+uke zlm~N{rjI}B^-G0Cw;JmE4kXq2=?O@Y(a{3ouhQytUS|#gOvlkzqV6PjPf0iT=XtZ& znbpAvlH{~p&xHkhA8&LHH7gARzcZZe;5O(D8l(w2t_7FgWt02#uSJ$zfJ&iE72i&j z4r|zr0wj@Tq|`W5%v^i%%KDyUHhW(lSQlZH5S|dzk`#=2J#$pHN)>Uv$%z^yZ9!3o>tGSM_HfRYFuL;X?QogCT z9oo-$^(IjdfXc-JQ}0i2siR?$RyZnZnLW+!^5SoUTYb^yF(a)!mAU$tI}`*ZQgH)> zAh-)?j7vs;rYJEV!IRb}7A3Mhx7ZnkH2WK0;@RgZW~?Hr_B;nSAS^QSx&hOVs(Z%( zVRQ06xaG+Z&56;4AQ(Yu+`+)f~$1%cU{T{1eOuS15s&(hS6n1}^9BQ}1e$*O^ zjHj6wK-*)#;NT=3Pu;=LS{p$ylYt4tzyvEj`f;Nu7rB=++wm6;E_jT~DUb%vBREj9 zwa6^APRE}zD+}1u9!8A~-FkXwy&ajyuebR=sWmFHZM#@;N$(&@b{rk>#`cSx)Bu`- z=9Q^@9K%=O0>G72l#$ede1*L*m&%m+1}|k#-&(6Ut2@sX5oDagm;2t4w?7|aFee&S zfytEl?Kzlf^pkc<`@{d-I%XM=(bf1+xQ!%yW=Ax6x6IU5o^f?_V$tg4i7H)$kcC)}U2#uJB3iOUvDYY;I9GLIu#@M@ z-ERkcW3KXFm=Zrc4HIXf4Mt@uaCsFM=rV`1DZMDa8uMW$488yvK0`9+GL}r3HHJ_@ z$OgVz$J(AVxz$3GoA<>0-HB;z1dJ}sQ9$@a{+SLsCec)F-Dt`aR^$<`R+J~^G5OVq>0SOndXm7{M{xQxu7b*$yHm)ePFryagJtITH! z3H*dy2VUAt`VCaboj&rjz+Qz14!i)x8WxQs&^=Li-2J8!OnT=x7A}dxOI9B~{2;K)aFvrJ?-yxGyX~xv6T2C(%pFgR zuox20NZRP`%H8+n@}u}b&|{-{9U##Bjktq0%Yr@sDXbqYT)7v9NM+7WNHMn+x``ir z(!t7@gzVEH_Rjq3t1mtW)z8qQv*1T5e_dzqlO$4^W%Ld*{`44Kqh;OC$i`e{W(tx? zjA!8)W$BjFVoEKDbB7aB`Id|jWJ0~9khomO6^;X^r$UN-ELn_HQ%CZ6hGutAn&TY!@n$jW&pWzwYCr6RKOtf(GyWuzj?pTeE6r@SLnMZivZNtA=dbtqxaOFM3ZR&$VVqe++| zWMl7ZUBM87MT|g1eDbB;S+A&fLzLd9aju*=qOkDgR{Fn3A%SE2HZk9!^)F(T?w)3rv zektBLd2>7vUfGTx46aUY^2>aNF_8P6zWk^6Egur&8#Dn0)cR?LRr?asobPJ|Rf)1{ zFWsdkY6tiQTewiEe_Tnd(F@IS1%4oR)9NUNiKEBuOied>b5zD53l^k~?B*UNhk3F!m;>3YXjuw@!IyS1x) zP6E$_GNeOJFTA|#8dIJ6a>d10t&Rp$m-L55C9)JF#+od0*??m%bxDzHZiK5Ug_N5# zj-;^85bG_nH=a8MQWdfxWb*k(4H<#2a*`Q@b1FuPME+_^H$Q!|0#nGOdI`|QLQ!RS z8N~K-n9C3bLYkfJKVLcdlD8H5r(NojHSThWsf8nqnt17v&HK}c6i?AUoVOyi8~H5y zA}=lgx4G^4mfM2uZdB-4SG4tT^sH>XFvK~y7X7&?2-6$i z1jEC;A;fDi5TayqV!1nhQVi}krTGdhOkwPJ1}8k6ZHb=f5#>#hmSF9-%I0fN5-GG= zra$n(=_z(%?DL9uyWSW9@>Z-ZNvG5oLGV^<(7UTmMBoo=ooCk@i-GJs6!BJURj2oR zgszBRFTK>Q3}jXK!<%ObR$5Fe6f_6VRFfm8uP94;7E&<3A@_iNvo^GbFN^*C%^+<} zMcT>~nL<9*GO~wPP*w3`+t{+-R{}GiiDDZgjT&pa!0{f=;>1pI27C<451)4SMo-#K zymc>+Tl0KT*K}Rt3_Mfg7JAynE|)X4Ct$RlHC!kKs`SyL)fn@9SE9d61&d7M!r;Qy z!4_h+NjAX*x5rKMw~2{`LoUXdQBo1@;i-73FxIQ!?{mqh!b%d|*k!nMsdXmAFdJSe z!KtoB?j6 zWS9qrm3j}}1%=+I&aO-EGub5=CrLhU0y>wy+l<`zOp`@!=tE~joLC3t_uMa%9;e$U zZB5U!ary%oDen>lCt|Zx%H_c(L>O$+oe#;_viRNLAL4ud)k}vzX7i#x>;)x%`1j~t zU&lE^uM`G-OZ-HuH? z4=DR%KYK&*(a+gfN(fgR63kuityo2iVzf&iXh~OZ5q%NbzKX&U{VqEc?54 zJp*mP@teeP2UaHO65=jpPcg!n%NwVUPjH zZ-FK|?!=M4S8YQz^MZypALrBFV`q_njUs5t2*$;{e*=e2Bm5Wq`UA`aCr&MdPp^ zaxc5F5*2PswZlqlC^hcm7rgT=WY2GDu3j4-?UZt4vXK&IW{X?SpRlfA`Vk+k3r;3l z#Sx8^nNA%f(^#~Ad1W-(&$M4x@hQY_O>D}MfrClg`L)n1Z^Vi(@B#6wWf9AGE96sJ z^S7m+rg$&YL+!48n~y5D$$Jv9`4wj}a+W1r%#TS43pIjOt=Rr>@3N#i{DfOsF#BrS zWe!%3=e2Ij)&1lw)`=Vypn$_Kq$sS7K3I*VoFc^o*y?3?CR5c9==78rWmLZ-4`;?B zWawxyC9gkEUc$jA!UTtqIq<*^3&LjoY2j65I`WfVibc0i;&G3*F+RCgufsXP=Tr}jfIM(Ic0`Z8Lr?mH! z-woMI`D!gE5W`~y)Gf#(Q&RBY;or+AhH0o{xhz8*en?^UCHM6Q<7?@FqkwD*m)vhf@d7T}~s$GlbA zW8-SMDvqf15U*#*rgV5x@pL2vS$y(V@=EMFeo_wI1OcXl|Kw*PC&e=Rxsa zoz+=fSkcyN?uO1l)jrr@l6qR$@SOGdV9VW^FM7Wa^e8f|rDC>uEjQ#kOPOVkafZfNbQS#k~bCY zBUnj&$UQE*iWTY!620O-K{h|hIQuXdAPvgs=P)A9P3k7@eF&yH`mQaXsPI826`76O znM&r^NK3(7bQ?^;Ytc-oGeC3WL!;;9o)!#}Wb}r^*f*nXH zN-S5w`lCrdGJTruEqv_nyCdVvwO&d6A-y*JNns!;ZW}Cj9oN{^`wBy)l^~_t%8W!zDA+Zx((gSKq1O zEs&|K2MJ~CiRvutoN5#$y_mQs@wBMXVI!{Jh@!YqtVJdGyu2$E(as`@I@QNpCfV$h zqr&aK=(B9=4D?ur=|JHX9V%Q$z|F=mIA9nW;uuTY_T^S8jNdVnChOVU~7x zLqPRY|BDybWBOO#Uat_m)L3mfVe@5UW4ek38u;-~pP`q-BN^kIVPs(_Dsl`w32c1# zYsQziY&O?GLxh;u!EA@yZ;7kr>`<%Xdw*w-a)R^72r@H=`SPaSO3NlnpU$sF+>cBC z>0fRkqT;S%h;5qVpT+paH``h6hCF6q4*7eW?IWdqSh$LpJ2C{TY=-e$;M+=CQ{CH`7I*Ase!%)pPZ~)bh`KXIZgWuY)tz7U$qRHT~XLZ(~&fFsK+1I7?h-Z z=zB@&ubE`s{!)v2&hEjp{@!u%Ufp&LY`=cq_GPh~fwBuEr35ER8|UK`e~ zOCNNpZ2jP)Fl9Fy~A>58dhC07=&;|hUx$<{>euA!J(HD@Fkt7{sc?3-@P>cAPPsF4%}y16tL1a&{Ju9Y z!qbPi~b1F$7)AkN3*6s*EKiJj&AQ_bWH z4-Tk3V33Sw2yK|cGwTea(d7xNjrUnjuH4dN+*KKSEcg1I&+$ik*JQ>fFn@^6YS*ol z;;wnLBNS+o0B}6;O5p?GK&l>a&^5d~D>2twyovz&3!*aN5}FSZD?1oAI;% ZV_#?#r#W+CTqpw&c)I$ztaD0e0sx6IgEjyF literal 0 HcmV?d00001 diff --git a/website/articles/images/tensorboard.png b/website/articles/images/tensorboard.png new file mode 100644 index 0000000000000000000000000000000000000000..af2c3db850227cb198bc2ddb9ca3c4534ee3cd80 GIT binary patch literal 261943 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%0A&4;S@ktuG{jXscKNf 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 z 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


u{> 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 literal 0 HcmV?d00001 diff --git a/website/articles/images/tensorboard_compare.png b/website/articles/images/tensorboard_compare.png new file mode 100644 index 0000000000000000000000000000000000000000..7c7845858bdb5596b7cc7877d337b651465f2fc6 GIT binary patch literal 285319 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

PG(9Z+Qn;9$IA!x8YQ@ucwU}8shDd<9V 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

}P~Lv}|vv6rJhrB?rC(Wg(B?BX1rK7E_o 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

{&ydAblvH{t(Q9;%bLHf)Lb6R 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%0DFLYSmjllV|{XR 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 XN@#BM7p}2$!0VpEL-}G^Bj5i42}mMV literal 0 HcmV?d00001 diff --git a/website/articles/images/training_history_ggplot2.png b/website/articles/images/training_history_ggplot2.png new file mode 100644 index 0000000000000000000000000000000000000000..bd87f365d040397789017135a7aa0e7798c58087 GIT binary patch literal 186933 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≧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 A0RR91 literal 0 HcmV?d00001 diff --git a/website/articles/sequential_model.html b/website/articles/sequential_model.html new file mode 100644 index 000000000..1e307996e --- /dev/null +++ b/website/articles/sequential_model.html @@ -0,0 +1,554 @@ + + + + + + + +Guide to the Sequential Model • keras + + + + + + + +

+
+ + + +
+
+ + + + +
+
+

+Defining a Model

+

The sequential model is a linear stack of layers.

+

You create a sequential model by calling the keras_model_sequential() function then a series of layer functions:

+
library(keras)
+
+model <- keras_model_sequential() 
+model %>% 
+  layer_dense(units = 32, input_shape = c(784)) %>% 
+  layer_activation('relu') %>% 
+  layer_dense(units = 10) %>% 
+  layer_activation('softmax')
+

Note that Keras objects are modified in place which is why it’s not necessary for model to be assigned back to after the layers are added.

+

Print a summary of the model’s structure using the summary() function:

+
summary(model)
+
Model
+________________________________________________________________________________
+Layer (type)                        Output Shape                    Param #     
+================================================================================
+dense_1 (Dense)                     (None, 256)                     200960      
+________________________________________________________________________________
+dropout_1 (Dropout)                 (None, 256)                     0           
+________________________________________________________________________________
+dense_2 (Dense)                     (None, 128)                     32896       
+________________________________________________________________________________
+dropout_2 (Dropout)                 (None, 128)                     0           
+________________________________________________________________________________
+dense_3 (Dense)                     (None, 10)                      1290        
+================================================================================
+Total params: 235,146
+Trainable params: 235,146
+Non-trainable params: 0
+________________________________________________________________________________
+
+

+Input Shapes

+

The model needs to know what input shape it should expect. For this reason, the first layer in a sequential model (and only the first, because following layers can do automatic shape inference) needs to receive information about its input shape.

+

As illustrated in the example above, this is done by passing an input_shape argument to the first layer. This is a list of integers or NULL entries, where NULL indicates that any positive integer may be expected. In input_shape, the batch dimension is not included.

+

If you ever need to specify a fixed batch size for your inputs (this is useful for stateful recurrent networks), you can pass a batch_size argument to a layer. If you pass both batch_size=32 and input_shape=c(6, 8) to a layer, it will then expect every batch of inputs to have the batch shape (32, 6, 8).

+
+
+
+

+Compilation

+

Before training a model, you need to configure the learning process, which is done via the compile() function. It receives three arguments:

+
    +
  • An optimizer. This could be the string identifier of an existing optimizer (e.g. as “rmsprop” or “adagrad”) or a call to an optimizer function (e.g. optimizer_sgd()).

  • +
  • A loss function. This is the objective that the model will try to minimize. It can be the string identifier of an existing loss function (e.g. “categorical_crossentropy” or “mse”) or a call to a loss function (e.g. loss_mean_squared_error()).

  • +
  • A list of metrics. For any classification problem you will want to set this to metrics = c('accuracy'). A metric could be the string identifier of an existing metric or a call to metric function (e.g. metric_binary_crossentropy()).

  • +
+

Here’s the definition of a model along with the compilation step (the compile() function has arguments appropriate for a a multi-class classification problem):

+
# For a multi-class classification problem
+model <- keras_model_sequential() 
+model %>% 
+  layer_dense(units = 32, input_shape = c(784)) %>% 
+  layer_activation('relu') %>% 
+  layer_dense(units = 10) %>% 
+  layer_activation('softmax')
+
+model %>% compile(
+  optimizer = 'rmsprop',
+  loss = 'categorical_crossentropy',
+  metrics = c('accuracy')
+)
+

Here’s what compilation might look like for a mean squared error regression problem:

+
model %>% compile(
+  optimizer = optimizer_rmsprop(lr = 0.002),
+  loss = 'mse'
+)
+

Here’s compilation for a binary classification problem:

+
model %>% compile( 
+  optimizer = optimizer_rmsprop(),
+  loss = loss_binary_crossentropy,
+  metrics = metric_binary_accuracy
+)
+

Here’s compilation with a custom metric:

+
# create metric using backend tensor functions
+K <- backend()
+metric_mean_pred <- function(y_true, y_pred) {
+  K$mean(y_pred) 
+}
+
+model %>% compile( 
+  optimizer = optimizer_rmsprop(),
+  loss = loss_binary_crossentropy,
+  metrics = c('accuracy', 
+              'mean_pred' = metric_mean_pred)
+)
+
+
+

+Training

+

Keras models are trained on R matrixes or higher dimensional arrays of input data and labels. For training a model, you will typically use the fit() function.

+

Here’s a single-input model with 2 classes (binary classification):

+
# create model
+model <- keras_model_sequential()
+
+# add layers and compile the model
+model %>% 
+  layer_dense(units = 32, activation = 'relu', input_shape = c(100)) %>% 
+  layer_dense(units = 1, activation = 'sigmoid') %>% 
+  compile(
+    optimizer = 'rmsprop',
+    loss = 'binary_crossentropy',
+    metrics = c('accuracy')
+  )
+
+# Generate dummy data
+data <- matrix(runif(1000*100), nrow = 1000, ncol = 100)
+labels <- matrix(round(runif(1000, min = 0, max = 1)), nrow = 1000, ncol = 1)
+
+# Train the model, iterating on the data in batches of 32 samples
+model %>% fit(data, labels, epochs=10, batch_size=32)
+

Here’s a single-input model with 10 classes (categorical classification):

+
# create model
+model <- keras_model_sequential()
+
+# define and compile the model
+model %>% 
+  layer_dense(units = 32, activation = 'relu', input_shape = c(100)) %>% 
+  layer_dense(units = 10, activation = 'softmax') %>% 
+  compile(
+    optimizer = 'rmsprop',
+    loss = 'categorical_crossentropy',
+    metrics = c('accuracy')
+  )
+
+# Generate dummy data
+data <- matrix(runif(1000*100), nrow = 1000, ncol = 100)
+labels <- matrix(round(runif(1000, min = 0, max = 9)), nrow = 1000, ncol = 1)
+
+# Convert labels to categorical one-hot encoding
+one_hot_labels <- to_categorical(labels, num_classes = 10)
+
+# Train the model, iterating on the data in batches of 32 samples
+model %>% fit(data, one_hot_labels, epochs=10, batch_size=32)
+
+
+

+Examples

+

Here are a few examples to get you started!

+

On the examples page you will also find example models for real datasets:

+ +

Some additional examples are provided below.

+
+

+Multilayer Perceptron (MLP) for multi-class softmax classification

+
library(keras)
+
+# generate dummy data
+x_train <- matrix(runif(1000*20), nrow = 1000, ncol = 20)
+
+y_train <- runif(1000, min = 0, max = 9) %>% 
+  round() %>%
+  matrix(nrow = 1000, ncol = 1) %>% 
+  to_categorical(num_classes = 10)
+
+x_test  <- matrix(runif(100*20), nrow = 100, ncol = 20)
+
+y_test <- runif(100, min = 0, max = 9) %>% 
+  round() %>%
+  matrix(nrow = 100, ncol = 1) %>% 
+  to_categorical(num_classes = 10)
+
+# create model
+model <- keras_model_sequential()
+
+# define and compile the model
+model %>% 
+  layer_dense(units = 64, activation = 'relu', input_shape = c(20)) %>% 
+  layer_dropout(rate = 0.5) %>% 
+  layer_dense(units = 64, activation = 'relu') %>% 
+  layer_dropout(rate = 0.5) %>% 
+  layer_dense(units = 10, activation = 'softmax') %>% 
+  compile(
+    loss = 'categorical_crossentropy',
+    optimizer = optimizer_sgd(lr = 0.01, decay = 1e-6, momentum = 0.9, nesterov = TRUE),
+    metrics = c('accuracy')     
+  )
+
+# train
+model %>% fit(x_train, y_train, epochs = 20, batch_size = 128)
+
+# evaluate
+score <- model %>% evaluate(x_test, y_test, batch_size = 128)
+
+
+

+MLP for binary classification

+
library(keras)
+
+# generate dummy data
+x_train <- matrix(runif(1000*20), nrow = 1000, ncol = 20)
+y_train <- matrix(round(runif(1000, min = 0, max = 1)), nrow = 1000, ncol = 1)
+x_test <- matrix(runif(100*20), nrow = 100, ncol = 20)
+y_test <- matrix(round(runif(100, min = 0, max = 1)), nrow = 100, ncol = 1)
+
+# create model
+model <- keras_model_sequential()
+
+# define and compile the model
+model %>% 
+  layer_dense(units = 64, activation = 'relu', input_shape = c(20)) %>% 
+  layer_dropout(rate = 0.5) %>% 
+  layer_dense(units = 64, activation = 'relu') %>% 
+  layer_dropout(rate = 0.5) %>% 
+  layer_dense(units = 1, activation = 'sigmoid') %>% 
+  compile(
+    loss = 'binary_crossentropy',
+    optimizer = 'rmsprop',
+    metrics = c('accuracy')
+  )
+
+# train 
+model %>% fit(x_train, y_train, epochs = 20, batch_size = 128)
+
+# evaluate
+score = model %>% evaluate(x_test, y_test, batch_size=128)
+
+
+

+VGG-like convnet

+
library(keras)
+
+# generate dummy data
+x_train <- array(runif(100 * 100 * 100 * 3), dim = c(100, 100, 100, 3))
+
+y_train <- runif(100, min = 0, max = 9) %>% 
+  round() %>%
+  matrix(nrow = 100, ncol = 1) %>% 
+  to_categorical(num_classes = 10)
+
+x_test <- array(runif(20 * 100 * 100 * 3), dim = c(20, 100, 100, 3))
+
+y_test <- runif(20, min = 0, max = 9) %>% 
+  round() %>%
+  matrix(nrow = 20, ncol = 1) %>% 
+  to_categorical(num_classes = 10)
+
+# create model
+model <- keras_model_sequential()
+
+# define and compile model
+# input: 100x100 images with 3 channels -> (100, 100, 3) tensors.
+# this applies 32 convolution filters of size 3x3 each.
+model %>% 
+  layer_conv_2d(filters = 32, kernel_size = c(3,3), activation = 'relu', 
+                input_shape = c(100,100,3)) %>% 
+  layer_conv_2d(filters = 32, kernel_size = c(3,3), activation = 'relu') %>% 
+  layer_max_pooling_2d(pool_size = c(2,2)) %>% 
+  layer_dropout(rate = 0.25) %>% 
+  layer_conv_2d(filters = 64, kernel_size = c(3,3), activation = 'relu') %>% 
+  layer_conv_2d(filters = 64, kernel_size = c(3,3), activation = 'relu') %>% 
+  layer_max_pooling_2d(pool_size = c(2,2)) %>% 
+  layer_dropout(rate = 0.25) %>% 
+  layer_flatten() %>% 
+  layer_dense(units = 256, activation = 'relu') %>% 
+  layer_dropout(rate = 0.25) %>% 
+  layer_dense(units = 10, activation = 'softmax') %>% 
+  compile(
+    loss = 'categorical_crossentropy', 
+    optimizer = optimizer_sgd(lr = 0.01, decay = 1e-6, momentum = 0.9, nesterov = TRUE)
+  )
+  
+# train
+model %>% fit(x_train, y_train, batch_size = 32, epochs = 10)
+
+# evaluate
+score <- model %>% evaluate(x_test, y_test, batch_size = 32)
+
+
+

+Sequence classification with LSTM

+
model <- keras_model_sequential() 
+model %>% 
+  layer_embedding(input_dim = max_features, output_dim - 256) %>% 
+  layer_lstm(units = 128) %>% 
+  layer_dropout(rate = 0.5) %>% 
+  layer_dense(units = 1, activation = 'sigmoid') %>% 
+  compile(
+    loss = 'binary_crossentropy',
+    optimizer = 'rmsprop',
+    metrics = c('accuracy')
+  )
+
+model %>% fit(x_train, y_train, batch_size = 16, epochs = 10)
+score <- model %>% evaluate(x_test, y_test, batch_size = 16)
+
+
+

+Sequence classification with 1D convolutions:

+
model <- keras_model_sequential()
+model %>% 
+  layer_conv_1d(filters = 64, kernel_size = 3, activation = 'relu',
+                input_shape = c(seq_length, 100)) %>% 
+  layer_conv_1d(filters = 64, kernel_size = 3, activation = 'relu') %>% 
+  layer_max_pooling_1d(pool_size = 3) %>% 
+  layer_conv_1d(filters = 128, kernel_size = 3, activation = 'relu') %>% 
+  layer_conv_1d(filters = 128, kernel_size = 3, activation = 'relu') %>% 
+  layer_global_average_pooling_1d() %>% 
+  layer_dropout(rate = 0.5) %>% 
+  layer_dense(units = 1, activation = 'sigmoid') %>% 
+  compile(
+    loss = 'binary_crossentropy',
+    optimizer = 'rmsprop',
+    metrics = c('accuracy')
+  )
+
+model %>% fit(x_train, y_train, batch_size = 16, epochs = 10)
+score <- model %>% evaluate(x_test, y_test, batch_size = 16)
+
+
+

+Stacked LSTM for sequence classification

+

In this model, we stack 3 LSTM layers on top of each other, making the model capable of learning higher-level temporal representations.

+

The first two LSTMs return their full output sequences, but the last one only returns the last step in its output sequence, thus dropping the temporal dimension (i.e. converting the input sequence into a single vector).

+

stacked LSTM

+
library(keras)
+
+# constants
+data_dim <- 16
+timesteps <- 8
+num_classes <- 10
+
+# define and compile model
+# expected input data shape: (batch_size, timesteps, data_dim)
+model <- keras_model_sequential() 
+model %>% 
+  layer_lstm(units = 32, return_sequences = TRUE, input_shape = c(timesteps, data_dim)) %>% 
+  layer_lstm(units = 32, return_sequences = TRUE) %>% 
+  layer_lstm(units = 32) %>% # return a single vector dimension 32
+  layer_dense(units = 10, activation = 'softmax') %>% 
+  compile(
+    loss = 'categorical_crossentropy',
+    optimizer = 'rmsprop',
+    metrics = c('accuracy')
+  )
+  
+# generate dummy training data
+x_train <- array(runif(1000 * timesteps * data_dim), dim = c(1000, timesteps, data_dim))
+y_train <- matrix(runif(1000 * num_classes), nrow = 1000, ncol = num_classes)
+
+# generate dummy validation data
+x_val <- array(runif(100 * timesteps * data_dim), dim = c(100, timesteps, data_dim))
+y_val <- matrix(runif(100 * num_classes), nrow = 100, ncol = num_classes)
+
+# train
+model %>% fit( 
+  x_train, y_train, batch_size = 64, epochs = 5, validation_data = list(x_val, y_val)
+)
+
+
+

+Same stacked LSTM model, rendered “stateful”

+

A stateful recurrent model is one for which the internal states (memories) obtained after processing a batch of samples are reused as initial states for the samples of the next batch. This allows to process longer sequences while keeping computational complexity manageable.

+

You can read more about stateful RNNs in the FAQ.

+
library(keras)
+
+# constants
+data_dim <- 16
+timesteps <- 8
+num_classes <- 10
+batch_size <- 32
+
+# define and compile model
+# Expected input batch shape: (batch_size, timesteps, data_dim)
+# Note that we have to provide the full batch_input_shape since the network is stateful.
+# the sample of index i in batch k is the follow-up for the sample i in batch k-1.
+model <- keras_model_sequential()
+model %>% 
+  layer_lstm(units = 32, return_sequences = TRUE, stateful = TRUE,
+             batch_input_shape = c(batch_size, timesteps, data_dim)) %>% 
+  layer_lstm(units = 32, return_sequences = TRUE, stateful = TRUE) %>% 
+  layer_lstm(units = 32, stateful = TRUE) %>% 
+  layer_dense(units = 10, activation = 'softmax') %>% 
+  compile(
+    loss = 'categorical_crossentropy',
+    optimizer = 'rmsprop',
+    metrics = c('accuracy')
+  )
+  
+# generate dummy training data
+x_train <- array(runif( (batch_size * 10) * timesteps * data_dim), 
+                 dim = c(batch_size * 10, timesteps, data_dim))
+y_train <- matrix(runif( (batch_size * 10) * num_classes), 
+                  nrow = batch_size * 10, ncol = num_classes)
+
+# generate dummy validation data
+x_val <- array(runif( (batch_size * 3) * timesteps * data_dim), 
+               dim = c(batch_size * 3, timesteps, data_dim))
+y_val <- matrix(runif( (batch_size * 3) * num_classes), 
+                nrow = batch_size * 3, ncol = num_classes)
+
+# train
+model %>% fit( 
+  x_train, 
+  y_train, 
+  batch_size = batch_size, 
+  epochs = 5, 
+  shuffle = FALSE,
+  validation_data = list(x_val, y_val)
+)
+
+
+
+
+ + + +
+ + +
+ +
+

Site built with pkgdown.

+
+ +
+
+ + + diff --git a/website/articles/training_callbacks.html b/website/articles/training_callbacks.html new file mode 100644 index 000000000..e88417a1a --- /dev/null +++ b/website/articles/training_callbacks.html @@ -0,0 +1,361 @@ + + + + + + + +Training Callbacks • keras + + + + + + + +
+
+ + + +
+
+ + + + +
+
+

+Overview

+

A callback is a set of functions to be applied at given stages of the training procedure. You can use callbacks to get a view on internal states and statistics of the model during training. You can pass a list of callbacks (as the keyword argument callbacks) to the fit() function. The relevant methods of the callbacks will then be called at each stage of the training.

+

For example:

+
library(keras)
+
+# generate dummy training data
+data <- matrix(rexp(1000*784), nrow = 1000, ncol = 784)
+labels <- matrix(round(runif(1000*10, min = 0, max = 9)), nrow = 1000, ncol = 10)
+
+# create model
+model <- keras_model_sequential() 
+
+# add layers and compile
+model %>%
+  layer_dense(32, input_shape = c(784)) %>%
+  layer_activation('relu') %>%
+  layer_dense(10) %>%
+  layer_activation('softmax') %>% 
+  compile(
+    loss='binary_crossentropy',
+    optimizer = optimizer_sgd(),
+    metrics='accuracy'
+  )
+  
+# fit with callbacks
+model %>% fit(data, labels, callbacks = list(
+  callback_model_checkpoint("checkpoints.h5"),
+  callback_reduce_lr_on_plateau(monitor = "val_loss", factor = 0.1)
+))
+
+
+

+Built in Callbacks

+

The following built-in callbacks are available as part of Keras:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+callback_progbar_logger() + +

+Callback that prints metrics to stdout. +

+
+callback_model_checkpoint() + +

+Save the model after every epoch. +

+
+callback_early_stopping() + +

+Stop training when a monitored quantity has stopped improving. +

+
+callback_remote_monitor() + +

+Callback used to stream events to a server. +

+
+callback_learning_rate_scheduler() + +

+Learning rate scheduler. +

+
+callback_tensorboard() + +

+TensorBoard basic visualizations +

+
+callback_reduce_lr_on_plateau() + +

+Reduce learning rate when a metric has stopped improving. +

+
+callback_csv_logger() + +

+Callback that streams epoch results to a csv file +

+
+callback_lambda() + +

+Create a custom callback +

+
+
+
+

+Custom Callbacks

+

You can create a custom callback by creating a new R6 class that inherits from the KerasCallback class.

+

Here’s a simple example saving a list of losses over each batch during training:

+
library(keras)
+
+# define custom callback class
+LossHistory <- R6::R6Class("LossHistory",
+  inherit = KerasCallback,
+  
+  public = list(
+    
+    losses = NULL,
+     
+    on_batch_end = function(batch, logs = list()) {
+      self$losses <- c(self$losses, logs[["loss"]])
+    }
+))
+
+# define model
+model <- keras_model_sequential() 
+
+# add layers and compile
+model %>% 
+  layer_dense(units = 10, input_shape = c(784)) %>% 
+  layer_activation(activation = 'softmax') %>% 
+  compile(
+    loss = 'categorical_crossentropy', 
+    optimizer = 'rmsprop'
+  )
+
+# create history callback object and use it during training
+history <- LossHistory$new()
+model %>% fit(
+  X_train, Y_train,
+  batch_size=128, epochs=20, verbose=0,
+  callbacks= list(history)
+)
+
+# print the accumulated losses
+history$losses
+
[1] 0.6604760 0.3547246 0.2595316 0.2590170 ...
+
+

+Fields

+

Custom callback objects have access to the current model and it’s training parameters via the following fields:

+
+
self$params
+
+

Named list with training parameters (eg. verbosity, batch size, number of epochs…).

+
+
self$model
+
+

Reference to the Keras model being trained.

+
+
+
+
+

+Methods

+

Custom callback objects can implement one or more of the following methods:

+
+
on_epoch_begin(epoch, logs)
+
+

Called at the beginning of each epoch.

+
+
on_epoch_end(epoch, logs)
+
+

Called at the end of each epoch.

+
+
on_batch_begin(batch, logs)
+
+

Called at the beginning of each batch.

+
+
on_batch_end(batch, logs)
+
+

Called at the end of each batch.

+
+
on_train_begin(logs)
+
+

Called at the beginning of training.

+
+
on_train_end(logs)
+
+

Called at the end of training.

+
+
+
+
+
+
+ + + +
+ + +
+ +
+

Site built with pkgdown.

+
+ +
+
+ + + diff --git a/website/articles/training_visualization.html b/website/articles/training_visualization.html new file mode 100644 index 000000000..9b5505f40 --- /dev/null +++ b/website/articles/training_visualization.html @@ -0,0 +1,343 @@ + + + + + + + +Training Visualization • keras + + + + + + + +
+
+ + + +
+
+ + + + +
+
+

+Overview

+

There are a number of tools available for visualizing the training of Keras models, including:

+
    +
  1. A plot method for the Keras training history returned from fit().

  2. +
  3. Real time visualization of training metrics within the RStudio IDE.

  4. +
  5. Integration with the TensorBoard visualization tool included with TensorFlow. Beyond just training metrics, TensorBoard has a wide variety of other visualizations available including the underlying TensorFlow graph, gradient histograms, model weights, and more. TensorBoard also enables you to compare metrics across multiple training runs.

  6. +
+

Each of these tools is described in more detail below.

+
+
+

+Plotting History

+

The Keras fit() method returns an R object containing the training history, including the value of metrics at the end of each epoch . You can plot the training metrics by epoch using the plot() method.

+

For example, here we compile and fit a model with the “accuracy” metric:

+
model %>% compile(
+  loss = 'categorical_crossentropy',
+  optimizer = optimizer_rmsprop(),
+  metrics = c('accuracy')
+)
+
+history <- model %>% fit(
+  x_train, y_train, 
+  epochs = 30, batch_size = 128, 
+  validation_split = 0.2
+)
+

We can then plot the training history as follows:

+
plot(history)
+
+ +
+

The history will be plotted using ggplot2 if available (if not then base graphics will be used), include all specified metrics as well as the loss, and draw a smoothing line if there are 10 or more epochs. You can customize all of this behavior via various options of the plot method.

+

If you want to create a custom visualization you can call the as.data.frame() method on the history to obtain a data frame with factors for each metric as well as training vs. validation:

+
history_df <- as.data.frame(history)
+str(history_df)
+
'data.frame':   120 obs. of  4 variables:
+ $ epoch : int  1 2 3 4 5 6 7 8 9 10 ...
+ $ value : num  0.87 0.941 0.954 0.962 0.965 ...
+ $ metric: Factor w/ 2 levels "acc","loss": 1 1 1 1 1 1 1 1 1 1 ...
+ $ data  : Factor w/ 2 levels "training","validation": 1 1 1 1 1 1 1 1 1 1 ...
+
+
+

+RStudio IDE

+

If you are training your model within the RStudio IDE then real time metrics are available within the Viewer pane:

+ +

The view_metrics argument of the fit() method controls whether real time metrics are displayed. By default metrics are automatically displayed if one or more metrics are specified in the call to compile() and there is more than one training epoch.

+

You can explicitly control whether metrics are displayed by specifying the view_metrics argument. You can also set a global session default using the keras.view_metrics option:

+
# don't show metrics during this run
+history <- model %>% fit(
+  x_train, y_train, 
+  epochs = 30, batch_size = 128, 
+  view_metrics = FALSE,
+  validation_split = 0.2
+)
+
+# set global default to never show metrics
+options(keras.view_metrics = FALSE)
+

Note that when view_metrics is TRUE metrics will be displayed even when not running within RStudio (in that case metrics will be displayed in an external web browser).

+
+
+

+TensorBoard

+

TensorBoard is a visualization tool included with TensorFlow that enables you to visualize dynamic graphs of your Keras training and test metrics, as well as activation histograms for the different layers in your model.

+

For example, here’s a TensorBoard display for Keras accuracy and loss metrics:

+
+ +
+
+

+Recording Data

+

To record data that can be visualized with TensorBoard, you add a TensorBoard callback to the fit() function. For example:

+
history <- model %>% fit(
+  x_train, y_train,
+  batch_size = batch_size,
+  epochs = epochs,
+  verbose = 1,
+  callbacks = callback_tensorboard("logs/run_a"),
+  validation_split = 0.2
+)
+

See the documentation on the callback_tensorboard() function for the various available options. The most important option is the log_dir, which determines which directory logs are written to for a given training run.

+

You should either use a distinct log directory for each training run or remove the log directory between runs.

+
+
+

+Viewing Data

+

To view TensorBoard data for a given set of runs you use the tensorboard() function, pointing it to the previously specified log_dir:

+
tensorboard("logs/run_a")
+

It’s often useful to run TensorBoard while you are training a model. To do this, simply launch tensorboard within the training directory right before you begin training:

+
# launch TensorBoard (data won't show up until after the first epoch)
+tensorboard("logs/run_a")
+
+# fit the model with the TensorBoard callback
+history <- model %>% fit(
+  x_train, y_train,
+  batch_size = batch_size,
+  epochs = epochs,
+  verbose = 1,
+  callbacks = callback_tensorboard("logs/run_a"),
+  validation_split = 0.2
+)
+

Keras writes TensorBoard data at the end of each epoch so you won’t see any data in TensorBoard until 10-20 seconds after the end of the first epoch (TensorBoard automatically refreshes it’s display every 30 seconds during training).

+
+
+

+Comparing Runs

+

TensorBoard will automatically include all runs logged within the sub-directories of the specified log_dir, for example, if you logged another run using:

+
callback_tensorboard(log_dir = "logs/run_b")
+

Then called tensorboard as follows:

+
tensorboard("logs")
+

The TensorBoard visualization would look like this:

+
+ +
+

You can also pass multiple log directories. For example:

+
tensorboard(c("logs/run_a", "logs/run_b"))
+
+
+

+Customization

+
+

+Metrics

+

In the above examples TensorBoard metrics are logged for loss and accuracy. The TensorBoard callback will log data for any metrics which are specified in the metrics parameter of the compile() function. For example, in the following code:

+
model %>% compile(
+  loss = 'mean_squared_error',
+  optimizer = 'sgd',
+  metrics= c('mae', 'acc')
+)
+

TensorBoard data series will be created for the loss (mean squared error) as well as for the mean absolute error and accuracy metrics.

+
+
+

+Options

+

The callback_tensorboard() function includes a number of other options that control logging during training:

+
callback_tensorboard(log_dir = "logs", histogram_freq = 0,
+  write_graph = TRUE, write_images = FALSE, embeddings_freq = 0,
+  embeddings_layer_names = NULL, embeddings_metadata = NULL)
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescription
log_dirPath of the directory to save the log files to be parsed by Tensorboard.
histogram_freqFrequency (in epochs) at which to compute activation histograms for the layers of the model. If set to 0 (the default), histograms won’t be computed.
write_graphWhether to visualize the graph in Tensorboard. The log file can become quite large when write_graph is set to TRUE +
write_imagesWhether to write model weights to visualize as image in Tensorboard.
embeddings_freqFrequency (in epochs) at which selected embedding layers will be saved.
embeddings_layer_namesA list of names of layers to keep eye on. If NULL or empty list all the embedding layers will be watched.
embeddings_metadataA named list which maps layer name to a file name in which metadata for this embedding layer is saved. See the details about the metadata file format. In case if the same metadata file is used for all embedding layers, string can be passed.
+
+
+
+
+
+ + + +
+ + +
+ +
+

Site built with pkgdown.

+
+ +
+
+ + + diff --git a/website/authors.html b/website/authors.html new file mode 100644 index 000000000..393f4b767 --- /dev/null +++ b/website/authors.html @@ -0,0 +1,183 @@ + + + + + + + + +Authors • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+
+ + +
    +
  • +

    JJ Allaire. Author, maintainer. +

    +
  • +
  • +

    François Chollet. Author, copyright holder. +

    +
  • +
  • +

    . Copyright holder, funder. +

    +
  • +
  • +

    Google. Contributor, copyright holder, funder. +

    +
  • +
  • +

    Yuan Tang. Contributor, copyright holder. +

    +
  • +
  • +

    Daniel Falbel. Contributor, copyright holder. +

    +
  • +
  • +

    Wouter Van Der Bijl. Contributor, copyright holder. +

    +
  • +
  • +

    Martin Studer. Contributor, copyright holder. +

    +
  • +
+ +
+ +
+ + +
+ + +
+

Site built with pkgdown.

+
+ +
+
+ + + diff --git a/website/extra.css b/website/extra.css new file mode 100644 index 000000000..8f5d096dc --- /dev/null +++ b/website/extra.css @@ -0,0 +1,64 @@ + +h4.date, +h4.author { + display: none; +} + +h2.hasAnchor { + font-weight: 350; +} + +.ref-index tbody { + margin-bottom: 60px; +} + +pre:not([class]) { + background-color: white; +} + +.contents a { + text-decoration: none; +} + +blockquote { + font-size: inherit; +} + +.examples .page-header { + border-bottom: none; + margin: 0; + padding-bottom: 0; +} + +.examples .sourceCode { + margin-top: 25px; +} + +#sidebar .nav>li>a { + padding-top: 1px; + padding-bottom: 2px; +} + +#installation .sourceCode { + font-size: 13px; +} + +.r-plot { + margin-top: 15px; + margin-bottom: 20px; + border: solid 1px #cccccc; +} + +.screenshot { + margin-bottom: 20px; + border: solid 1px #cccccc; +} + +.source-ref { + margin-bottom: 20px; +} + +.source-ref .caption { + display: none; +} + diff --git a/website/extra.js b/website/extra.js new file mode 100644 index 000000000..813c7f97f --- /dev/null +++ b/website/extra.js @@ -0,0 +1,16 @@ + +$(document).ready(function() { + + // turn functions section into ref-table + $('#functions').find('table').attr('class', 'ref-index'); + + // are we in examples? + var examples = window.location.href.match("/articles/examples/") !== null; + if (examples) { + $('.template-vignette').addClass('examples'); + + // remove right column + $(".col-md-9").removeClass("col-md-9").addClass('col-md-10'); + $(".col-md-3").remove(); + } +}); diff --git a/website/images/training_history_ggplot2.png b/website/images/training_history_ggplot2.png new file mode 100644 index 0000000000000000000000000000000000000000..bd87f365d040397789017135a7aa0e7798c58087 GIT binary patch literal 186933 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≧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 A0RR91 literal 0 HcmV?d00001 diff --git a/website/jquery.sticky-kit.min.js b/website/jquery.sticky-kit.min.js new file mode 100644 index 000000000..e2a3c6de9 --- /dev/null +++ b/website/jquery.sticky-kit.min.js @@ -0,0 +1,9 @@ +/* + Sticky-kit v1.1.2 | WTFPL | Leaf Corcoran 2015 | http://leafo.net +*/ +(function(){var b,f;b=this.jQuery||window.jQuery;f=b(window);b.fn.stick_in_parent=function(d){var A,w,J,n,B,K,p,q,k,E,t;null==d&&(d={});t=d.sticky_class;B=d.inner_scrolling;E=d.recalc_every;k=d.parent;q=d.offset_top;p=d.spacer;w=d.bottoming;null==q&&(q=0);null==k&&(k=void 0);null==B&&(B=!0);null==t&&(t="is_stuck");A=b(document);null==w&&(w=!0);J=function(a,d,n,C,F,u,r,G){var v,H,m,D,I,c,g,x,y,z,h,l;if(!a.data("sticky_kit")){a.data("sticky_kit",!0);I=A.height();g=a.parent();null!=k&&(g=g.closest(k)); +if(!g.length)throw"failed to find stick parent";v=m=!1;(h=null!=p?p&&a.closest(p):b("
"))&&h.css("position",a.css("position"));x=function(){var c,f,e;if(!G&&(I=A.height(),c=parseInt(g.css("border-top-width"),10),f=parseInt(g.css("padding-top"),10),d=parseInt(g.css("padding-bottom"),10),n=g.offset().top+c+f,C=g.height(),m&&(v=m=!1,null==p&&(a.insertAfter(h),h.detach()),a.css({position:"",top:"",width:"",bottom:""}).removeClass(t),e=!0),F=a.offset().top-(parseInt(a.css("margin-top"),10)||0)-q, +u=a.outerHeight(!0),r=a.css("float"),h&&h.css({width:a.outerWidth(!0),height:u,display:a.css("display"),"vertical-align":a.css("vertical-align"),"float":r}),e))return l()};x();if(u!==C)return D=void 0,c=q,z=E,l=function(){var b,l,e,k;if(!G&&(e=!1,null!=z&&(--z,0>=z&&(z=E,x(),e=!0)),e||A.height()===I||x(),e=f.scrollTop(),null!=D&&(l=e-D),D=e,m?(w&&(k=e+u+c>C+n,v&&!k&&(v=!1,a.css({position:"fixed",bottom:"",top:c}).trigger("sticky_kit:unbottom"))),eb&&!v&&(c-=l,c=Math.max(b-u,c),c=Math.min(q,c),m&&a.css({top:c+"px"})))):e>F&&(m=!0,b={position:"fixed",top:c},b.width="border-box"===a.css("box-sizing")?a.outerWidth()+"px":a.width()+"px",a.css(b).addClass(t),null==p&&(a.after(h),"left"!==r&&"right"!==r||h.append(a)),a.trigger("sticky_kit:stick")),m&&w&&(null==k&&(k=e+u+c>C+n),!v&&k)))return v=!0,"static"===g.css("position")&&g.css({position:"relative"}), +a.css({position:"absolute",bottom:d,top:"auto"}).trigger("sticky_kit:bottom")},y=function(){x();return l()},H=function(){G=!0;f.off("touchmove",l);f.off("scroll",l);f.off("resize",y);b(document.body).off("sticky_kit:recalc",y);a.off("sticky_kit:detach",H);a.removeData("sticky_kit");a.css({position:"",bottom:"",top:"",width:""});g.position("position","");if(m)return null==p&&("left"!==r&&"right"!==r||a.insertAfter(h),h.remove()),a.removeClass(t)},f.on("touchmove",l),f.on("scroll",l),f.on("resize", +y),b(document.body).on("sticky_kit:recalc",y),a.on("sticky_kit:detach",H),setTimeout(l,0)}};n=0;for(K=this.length;n + + + + + diff --git a/website/pkgdown.css b/website/pkgdown.css new file mode 100644 index 000000000..209ce57fe --- /dev/null +++ b/website/pkgdown.css @@ -0,0 +1,163 @@ +/* Sticker footer */ +body > .container { + display: flex; + padding-top: 60px; + min-height: calc(100vh); + flex-direction: column; +} + +body > .container .row { + flex: 1; +} + +footer { + margin-top: 45px; + padding: 35px 0 36px; + border-top: 1px solid #e5e5e5; + color: #666; + display: flex; +} +footer p { + margin-bottom: 0; +} +footer div { + flex: 1; +} +footer .pkgdown { + text-align: right; +} +footer p { + margin-bottom: 0; +} + +img.icon { + float: right; +} + +img { + max-width: 100%; +} + +/* Section anchors ---------------------------------*/ + +a.anchor { + margin-left: -30px; + display:inline-block; + width: 30px; + height: 30px; + visibility: hidden; + + background-image: url(./link.svg); + background-repeat: no-repeat; + background-size: 20px 20px; + background-position: center center; +} + +.hasAnchor:hover a.anchor { + visibility: visible; +} + +@media (max-width: 767px) { + .hasAnchor:hover a.anchor { + visibility: hidden; + } +} + + +/* Fixes for fixed navbar --------------------------*/ + +.contents h1, .contents h2, .contents h3, .contents h4 { + padding-top: 60px; + margin-top: -60px; +} + +/* Static header placement on mobile devices */ +@media (max-width: 767px) { + .navbar-fixed-top { + position: absolute; + } + .navbar { + padding: 0; + } +} + + +/* Sidebar --------------------------*/ + +#sidebar { + margin-top: 30px; +} +#sidebar h2 { + font-size: 1.5em; + margin-top: 1em; +} + +#sidebar h2:first-child { + margin-top: 0; +} + +#sidebar .list-unstyled li { + margin-bottom: 0.5em; +} + +/* Reference index & topics ----------------------------------------------- */ + +.ref-index th {font-weight: normal;} +.ref-index h2 {font-size: 20px;} + +.ref-index td {vertical-align: top;} +.ref-index .alias {width: 40%;} +.ref-index .title {width: 60%;} + +.ref-index .alias {width: 40%;} +.ref-index .title {width: 60%;} + +.ref-arguments th {text-align: right; padding-right: 10px;} +.ref-arguments th, .ref-arguments td {vertical-align: top;} +.ref-arguments .name {width: 20%;} +.ref-arguments .desc {width: 80%;} + +/* Nice scrolling for wide elements --------------------------------------- */ + +table { + display: block; + overflow: auto; +} + +/* Syntax highlighting ---------------------------------------------------- */ + +pre { + word-wrap: normal; + word-break: normal; + border: 1px solid #eee; +} + +pre, code { + background-color: #f8f8f8; + color: #333; +} + +pre .img { + margin: 5px 0; +} + +pre .img img { + background-color: #fff; + display: block; + height: auto; +} + +code a, pre a { + color: #375f84; +} + +.fl {color: #1514b5;} +.fu {color: #000000;} /* function */ +.ch,.st {color: #036a07;} /* string */ +.kw {color: #264D66;} /* keyword */ +.co {color: #888888;} /* comment */ + +.message { color: black; font-weight: bolder;} +.error { color: orange; font-weight: bolder;} +.warning { color: #6A0366; font-weight: bolder;} + diff --git a/website/pkgdown.js b/website/pkgdown.js new file mode 100644 index 000000000..4b8171328 --- /dev/null +++ b/website/pkgdown.js @@ -0,0 +1,45 @@ +$(function() { + $("#sidebar").stick_in_parent({offset_top: 40}); + $('body').scrollspy({ + target: '#sidebar', + offset: 60 + }); + + var cur_path = paths(location.pathname); + $("#navbar ul li a").each(function(index, value) { + if (value.text == "Home") + return; + if (value.getAttribute("href") === "#") + return; + + var path = paths(value.pathname); + if (is_prefix(cur_path, path)) { + // Add class to parent
  • , and enclosing
  • if in dropdown + var menu_anchor = $(value); + menu_anchor.parent().addClass("active"); + menu_anchor.closest("li.dropdown").addClass("active"); + } + }); +}); + +function paths(pathname) { + var pieces = pathname.split("/"); + pieces.shift(); // always starts with / + + var end = pieces[pieces.length - 1]; + if (end === "index.html" || end === "") + pieces.pop(); + return(pieces); +} + +function is_prefix(needle, haystack) { + if (needle.length > haystack.lengh) + return(false); + + for (var i = 0; i < haystack.length; i++) { + if (needle[i] != haystack[i]) + return(false); + } + + return(true); +} diff --git a/website/reference/KerasCallback.html b/website/reference/KerasCallback.html new file mode 100644 index 000000000..206767fac --- /dev/null +++ b/website/reference/KerasCallback.html @@ -0,0 +1,227 @@ + + + + + + + + +Base R6 class for Keras callbacks — KerasCallback • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Base R6 class for Keras callbacks

    + + +
    KerasCallback
    + +

    Format

    + +

    An R6Class generator object

    + +

    Value

    + +

    KerasCallback.

    + +

    Details

    + +

    The logs named list that callback methods take as argument will +contain keys for quantities relevant to the current batch or epoch.

    +

    Currently, the fit() method for sequential models will include the following quantities in the logs that +it passes to its callbacks:

      +
    • on_epoch_end: logs include acc and loss, and optionally include val_loss (if validation is enabled in fit), and val_acc (if validation and accuracy monitoring are enabled).

    • +
    • on_batch_begin: logs include size, the number of samples in the current batch.

    • +
    • on_batch_end: logs include loss, and optionally acc (if accuracy monitoring is enabled).

    • +
    + +

    Fields

    + + +
    +
    params

    Named list with training parameters (eg. verbosity, batch size, number of epochs...).

    +
    model

    Reference to the Keras model being trained.

    +
    + +

    Methods

    + + +
    +
    on_epoch_begin(epoch, logs)

    Called at the beginning of each epoch.

    +
    on_epoch_end(epoch, logs)

    Called at the end of each epoch.

    +
    on_batch_begin(batch, logs)

    Called at the beginning of each batch.

    +
    on_batch_end(batch, logs)

    Called at the end of each batch.

    +
    on_train_begin(logs)

    Called at the beginning of training.

    +
    on_train_end(logs)

    Called at the end of training.

    +
    + + +

    Examples

    +
    # NOT RUN {
    +library(keras)
    +
    +LossHistory <- R6::R6Class("LossHistory",
    +  inherit = KerasCallback,
    +
    +  public = list(
    +
    +    losses = NULL,
    +
    +    on_batch_end = function(batch, logs = list()) {
    +      self$losses <- c(self$losses, logs[["loss"]])
    +    }
    +  )
    +)
    +# }
    +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/KerasLayer.html b/website/reference/KerasLayer.html new file mode 100644 index 000000000..abf11adcf --- /dev/null +++ b/website/reference/KerasLayer.html @@ -0,0 +1,184 @@ + + + + + + + + +Base R6 class for Keras layers — KerasLayer • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Base R6 class for Keras layers

    + + +
    KerasLayer
    + +

    Format

    + +

    An R6Class generator object #'

    + +

    Value

    + +

    KerasLayer.

    + +

    Methods

    + +

    +
    build(input_shape)

    Creates the +layer weights (must be implemented by all layers that have weights)

    +
    call(inputs,mask)

    Call the layer on an input tensor.

    +
    compute_output_shape(input_shape)

    Compute the output shape +for the layer.

    +
    add_weight(name,shape,dtype,initializer,regularizer,trainable,constraint)

    Adds +a weight variable to the layer.

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/activation_relu.html b/website/reference/activation_relu.html new file mode 100644 index 000000000..8cf1374aa --- /dev/null +++ b/website/reference/activation_relu.html @@ -0,0 +1,209 @@ + + + + + + + + +Activation functions — activation_relu • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Activations functions can either be used through layer_activation(), or +through the activation argument supported by all forward layers.

    + + +
    activation_relu(x, alpha = 0, max_value = NULL)
    +
    +activation_elu(x, alpha = 1)
    +
    +activation_selu(x)
    +
    +activation_hard_sigmoid(x)
    +
    +activation_linear(x)
    +
    +activation_sigmoid(x)
    +
    +activation_softmax(x, axis = -1)
    +
    +activation_softplus(x)
    +
    +activation_softsign(x)
    +
    +activation_tanh(x)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + +
    x

    Tensor

    alpha

    Alpha value

    max_value

    Max value

    axis

    Integer, axis along which the softmax normalization is applied

    + +

    References

    + + + + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/application_inception_v3.html b/website/reference/application_inception_v3.html new file mode 100644 index 000000000..9176cda0d --- /dev/null +++ b/website/reference/application_inception_v3.html @@ -0,0 +1,237 @@ + + + + + + + + +Inception V3 model, with weights pre-trained on ImageNet. — application_inception_v3 • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Inception V3 model, with weights pre-trained on ImageNet.

    + + +
    application_inception_v3(include_top = TRUE, weights = "imagenet",
    +  input_tensor = NULL, input_shape = NULL, pooling = NULL,
    +  classes = 1000)
    +
    +inception_v3_preprocess_input(x)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    include_top

    whether to include the fully-connected layer at the top of +the network.

    weights

    one of NULL (random initialization) or "imagenet" +(pre-training on ImageNet).

    input_tensor

    optional Keras tensor to use as image input for the +model.

    input_shape

    optional shape list, only to be specified if include_top +is FALSE (otherwise the input shape has to be (299, 299, 3). It should +have exactly 3 inputs channels, and width and height should be no smaller +than 71. E.g. (150, 150, 3) would be one valid value.

    pooling

    Optional pooling mode for feature extraction when +include_top is FALSE.

      +
    • NULL means that the output of the model will be the 4D tensor output +of the last convolutional layer.

    • +
    • avg means that global average pooling will be applied to the output of +the last convolutional layer, and thus the output of the model will be +a 2D tensor.

    • +
    • max means that global max pooling will be applied.

    • +
    classes

    optional number of classes to classify images into, only to be +specified if include_top is TRUE, and if no weights argument is +specified.

    x

    Input tensor for preprocessing

    + +

    Value

    + +

    A Keras model instance.

    + +

    Details

    + +

    Do note that the input image format for this model is different than for +the VGG16 and ResNet models (299x299 instead of 224x224).

    +

    The inception_v3_preprocess_input() function should be used for image +preprocessing.

    + +

    Reference

    + + + + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/application_mobilenet.html b/website/reference/application_mobilenet.html new file mode 100644 index 000000000..e7bea0182 --- /dev/null +++ b/website/reference/application_mobilenet.html @@ -0,0 +1,277 @@ + + + + + + + + +MobileNet model architecture. — application_mobilenet • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    MobileNet model architecture.

    + + +
    application_mobilenet(input_shape = NULL, alpha = 1, depth_multiplier = 1,
    +  dropout = 0.001, include_top = TRUE, weights = "imagenet",
    +  input_tensor = NULL, pooling = NULL, classes = 1000)
    +
    +mobilenet_preprocess_input(x)
    +
    +mobilenet_decode_predictions(preds, top = 5)
    +
    +mobilenet_load_model_hdf5(filepath)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    input_shape

    optional shape list, only to be specified if include_top +is FALSE (otherwise the input shape has to be (224, 224, 3) (with +channels_last data format) or (3, 224, 224) (with channels_first data +format). It should have exactly 3 inputs channels, and width and height +should be no smaller than 32. E.g. (200, 200, 3) would be one valid +value.

    alpha

    controls the width of the network.

      +
    • If alpha < 1.0, proportionally decreases the number of filters in each layer.

    • +
    • If alpha > 1.0, proportionally increases the number of filters in each layer.

    • +
    • If alpha = 1, default number of filters from the paper are used at each layer.

    • +
    depth_multiplier

    depth multiplier for depthwise convolution (also +called the resolution multiplier)

    dropout

    dropout rate

    include_top

    whether to include the fully-connected layer at the top of +the network.

    weights

    NULL (random initialization) or imagenet (ImageNet +weights)

    input_tensor

    optional Keras tensor (i.e. output of layers.Input()) +to use as image input for the model.

    pooling

    Optional pooling mode for feature extraction when +include_top is FALSE. +- NULL means that the output of the model will be the 4D tensor output +of the last convolutional layer. +- avg means that global average pooling will be applied to the output +of the last convolutional layer, and thus the output of the model will +be a 2D tensor. +- max means that global max pooling will be applied.

    classes

    optional number of classes to classify images into, only to be +specified if include_top is TRUE, and if no weights argument is +specified.

    x

    input tensor, 4D

    preds

    Tensor encoding a batch of predictions.

    top

    integer, how many top-guesses to return.

    filepath

    File path

    + +

    Value

    + +

    application_mobilenet() and mobilenet_load_model_hdf5() return a +Keras model instance. mobilenet_preprocess_input() returns image input +suitable for feeding into a mobilenet model. mobilenet_decode_predictions() +returns a list of data frames with variables class_name, class_description, +and score (one data frame per sample in batch input).

    + +

    Details

    + +

    The mobilenet_preprocess_input() function should be used for image +preprocessing. To load a saved instance of a MobileNet model use +the mobilenet_load_model_hdf5() function. To prepare image input +for MobileNet use mobilenet_preprocess_input(). To decode +predictions use mobilenet_decode_predictions().

    +

    MobileNet is currently only supported with the TensorFlow backend.

    + +

    Reference

    + + + + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/application_resnet50.html b/website/reference/application_resnet50.html new file mode 100644 index 000000000..5085616c2 --- /dev/null +++ b/website/reference/application_resnet50.html @@ -0,0 +1,250 @@ + + + + + + + + +ResNet50 model for Keras. — application_resnet50 • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    ResNet50 model for Keras.

    + + +
    application_resnet50(include_top = TRUE, weights = "imagenet",
    +  input_tensor = NULL, input_shape = NULL, pooling = NULL,
    +  classes = 1000)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    include_top

    whether to include the fully-connected layer at the top of +the network.

    weights

    one of NULL (random initialization) or "imagenet" +(pre-training on ImageNet).

    input_tensor

    optional Keras tensor to use as image input for the +model.

    input_shape

    optional shape list, only to be specified if include_top +is FALSE (otherwise the input shape has to be (224, 224, 3). It should +have exactly 3 inputs channels, and width and height should be no smaller +than 197. E.g. (200, 200, 3) would be one valid value.

    pooling

    Optional pooling mode for feature extraction when +include_top is FALSE.

      +
    • NULL means that the output of the model will be the 4D tensor output +of the last convolutional layer.

    • +
    • avg means that global average pooling will be applied to the output of +the last convolutional layer, and thus the output of the model will be +a 2D tensor.

    • +
    • max means that global max pooling will be applied.

    • +
    classes

    optional number of classes to classify images into, only to be +specified if include_top is TRUE, and if no weights argument is +specified.

    + +

    Value

    + +

    A Keras model instance.

    + +

    Details

    + +

    Optionally loads weights pre-trained on ImageNet.

    +

    The imagenet_preprocess_input() function should be used for image +preprocessing.

    + +

    Reference

    + +

    - Deep Residual Learning for ImageRecognition

    + + +

    Examples

    +
    # NOT RUN {
    +library(keras)
    +
    +# instantiate the model
    +model <- application_resnet50(weights = 'imagenet')
    +
    +# load the image
    +img_path <- "elephant.jpg"
    +img <- image_load(img_path, target_size = c(224,224))
    +x <- image_to_array(img)
    +
    +# ensure we have a 4d tensor with single element in the batch dimension,
    +# the preprocess the input for prediction using resnet50
    +dim(x) <- c(1, dim(x))
    +x <- imagenet_preprocess_input(x)
    +
    +# make predictions then decode and print them
    +preds <- model %>% predict(x)
    +imagenet_decode_predictions(preds, top = 3)[[1]]
    +# }
    +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/application_vgg.html b/website/reference/application_vgg.html new file mode 100644 index 000000000..417607a24 --- /dev/null +++ b/website/reference/application_vgg.html @@ -0,0 +1,246 @@ + + + + + + + + +VGG16 and VGG19 models for Keras. — application_vgg • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    VGG16 and VGG19 models for Keras.

    + + +
    application_vgg16(include_top = TRUE, weights = "imagenet",
    +  input_tensor = NULL, input_shape = NULL, pooling = NULL,
    +  classes = 1000)
    +
    +application_vgg19(include_top = TRUE, weights = "imagenet",
    +  input_tensor = NULL, input_shape = NULL, pooling = NULL,
    +  classes = 1000)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    include_top

    whether to include the 3 fully-connected layers at the top +of the network.

    weights

    one of NULL (random initialization) or "imagenet" +(pre-training on ImageNet).

    input_tensor

    optional Keras tensor to use as image input for the +model.

    input_shape

    optional shape list, only to be specified if include_top +is FALSE (otherwise the input shape has to be (224, 224, 3) It should +have exactly 3 inputs channels, and width and height should be no smaller +than 48. E.g. (200, 200, 3) would be one valid value.

    pooling

    Optional pooling mode for feature extraction when +include_top is FALSE.

      +
    • NULL means that the output of the model will be the 4D tensor output +of the last convolutional layer.

    • +
    • avg means that global average pooling will be applied to the output of +the last convolutional layer, and thus the output of the model will be +a 2D tensor.

    • +
    • max means that global max pooling will be applied.

    • +
    classes

    optional number of classes to classify images into, only to be +specified if include_top is TRUE, and if no weights argument is +specified.

    + +

    Value

    + +

    Keras model instance.

    + +

    Details

    + +

    Optionally loads weights pre-trained on ImageNet.

    +

    The imagenet_preprocess_input() function should be used for image preprocessing.

    + +

    Reference

    + +

    - Very Deep Convolutional Networks for Large-Scale ImageRecognition

    + + +

    Examples

    +
    # NOT RUN {
    +library(keras)
    +
    +model <- application_vgg16(weights = 'imagenet', include_top = FALSE)
    +
    +img_path <- "elephant.jpg"
    +img <- image_load(img_path, target_size = c(224,224))
    +x <- image_to_array(img)
    +dim(x) <- c(1, dim(x))
    +x <- imagenet_preprocess_input(x)
    +
    +features <- model %>% predict(x)
    +# }
    +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/application_xception.html b/website/reference/application_xception.html new file mode 100644 index 000000000..9db60c83f --- /dev/null +++ b/website/reference/application_xception.html @@ -0,0 +1,240 @@ + + + + + + + + +Xception V1 model for Keras. — application_xception • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Xception V1 model for Keras.

    + + +
    application_xception(include_top = TRUE, weights = "imagenet",
    +  input_tensor = NULL, input_shape = NULL, pooling = NULL,
    +  classes = 1000)
    +
    +xception_preprocess_input(x)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    include_top

    whether to include the fully-connected layer at the top of +the network.

    weights

    one of NULL (random initialization) or "imagenet" +(pre-training on ImageNet).

    input_tensor

    optional Keras tensor to use as image input for the +model.

    input_shape

    optional shape list, only to be specified if include_top +is FALSE (otherwise the input shape has to be (299, 299, 3). It should +have exactly 3 inputs channels, and width and height should be no smaller +than 71. E.g. (150, 150, 3) would be one valid value.

    pooling

    Optional pooling mode for feature extraction when +include_top is FALSE.

      +
    • NULL means that the output of the model will be the 4D tensor output +of the last convolutional layer.

    • +
    • avg means that global average pooling will be applied to the output of +the last convolutional layer, and thus the output of the model will be +a 2D tensor.

    • +
    • max means that global max pooling will be applied.

    • +
    classes

    optional number of classes to classify images into, only to be +specified if include_top is TRUE, and if no weights argument is +specified.

    x

    Input tensor for preprocessing

    + +

    Value

    + +

    A Keras model instance.

    + +

    Details

    + +

    On ImageNet, this model gets to a top-1 validation accuracy of 0.790 +and a top-5 validation accuracy of 0.945.

    +

    Do note that the input image format for this model is different than for +the VGG16 and ResNet models (299x299 instead of 224x224).

    +

    The xception_preprocess_input() function should be used for image +preprocessing.

    +

    This application is only available when using the TensorFlow back-end.

    + +

    Reference

    + + + + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/backend.html b/website/reference/backend.html new file mode 100644 index 000000000..82deb7693 --- /dev/null +++ b/website/reference/backend.html @@ -0,0 +1,185 @@ + + + + + + + + +Keras backend tensor engine — backend • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Obtain a reference to the keras.backend Python module used to implement +tensor operations.

    + + +
    backend(convert = TRUE)
    + +

    Arguments

    + + + + + + +
    convert

    TRUE to automatically convert Python objects to their R +equivalent. If you pass FALSE you can do manual conversion using the +py_to_r() function.

    + +

    Value

    + +

    Reference to Keras backend python module.

    + +

    Note

    + +

    See the documentation here https://keras.io/backend/ for +additional details on the available functions.

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/bidirectional.html b/website/reference/bidirectional.html new file mode 100644 index 000000000..b3764f9ab --- /dev/null +++ b/website/reference/bidirectional.html @@ -0,0 +1,223 @@ + + + + + + + + +Bidirectional wrapper for RNNs. — bidirectional • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Bidirectional wrapper for RNNs.

    + + +
    bidirectional(object, layer, merge_mode = "concat", input_shape = NULL,
    +  batch_input_shape = NULL, batch_size = NULL, dtype = NULL,
    +  name = NULL, trainable = NULL, weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    layer

    Recurrent instance.

    merge_mode

    Mode by which outputs of the forward and backward RNNs will +be combined. One of 'sum', 'mul', 'concat', 'ave', NULL. If NULL, the +outputs will not be combined, they will be returned as a list.

    input_shape

    Dimensionality of the input (integer) not including the +samples axis. This argument is required when using this layer as the first +layer in a model.

    batch_input_shape

    Shapes, including the batch size. For instance, +batch_input_shape=c(10, 32) indicates that the expected input will be +batches of 10 32-dimensional vectors. batch_input_shape=list(NULL, 32) +indicates batches of an arbitrary number of 32-dimensional vectors.

    batch_size

    Fixed batch size for layer

    dtype

    The data type expected by the input, as a string (float32, +float64, int32...)

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    See also

    + +

    Other layer wrappers: time_distributed

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/callback_csv_logger.html b/website/reference/callback_csv_logger.html new file mode 100644 index 000000000..86a921189 --- /dev/null +++ b/website/reference/callback_csv_logger.html @@ -0,0 +1,192 @@ + + + + + + + + +Callback that streams epoch results to a csv file — callback_csv_logger • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Supports all values that can be represented as a string

    + + +
    callback_csv_logger(filename, separator = ",", append = FALSE)
    + +

    Arguments

    + + + + + + + + + + + + + + +
    filename

    filename of the csv file, e.g. 'run/log.csv'.

    separator

    string used to separate elements in the csv file.

    append

    TRUE: append if file exists (useful for continuing training). +FALSE: overwrite existing file,

    + +

    See also

    + +

    Other callbacks: callback_early_stopping, + callback_lambda, + callback_learning_rate_scheduler, + callback_model_checkpoint, + callback_progbar_logger, + callback_reduce_lr_on_plateau, + callback_remote_monitor, + callback_tensorboard, + callback_terminate_on_naan

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/callback_early_stopping.html b/website/reference/callback_early_stopping.html new file mode 100644 index 000000000..bc5df8749 --- /dev/null +++ b/website/reference/callback_early_stopping.html @@ -0,0 +1,207 @@ + + + + + + + + +Stop training when a monitored quantity has stopped improving. — callback_early_stopping • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Stop training when a monitored quantity has stopped improving.

    + + +
    callback_early_stopping(monitor = "val_loss", min_delta = 0, patience = 0,
    +  verbose = 0, mode = c("auto", "min", "max"))
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + +
    monitor

    quantity to be monitored.

    min_delta

    minimum change in the monitored quantity to qualify as an +improvement, i.e. an absolute change of less than min_delta, will count as +no improvement.

    patience

    number of epochs with no improvement after which training +will be stopped.

    verbose

    verbosity mode, 0 or 1.

    mode

    one of "auto", "min", "max". In min mode, training will stop when +the quantity monitored has stopped decreasing; in max mode it will stop +when the quantity monitored has stopped increasing; in auto mode, the +direction is automatically inferred from the name of the monitored +quantity.

    + +

    See also

    + +

    Other callbacks: callback_csv_logger, + callback_lambda, + callback_learning_rate_scheduler, + callback_model_checkpoint, + callback_progbar_logger, + callback_reduce_lr_on_plateau, + callback_remote_monitor, + callback_tensorboard, + callback_terminate_on_naan

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/callback_lambda.html b/website/reference/callback_lambda.html new file mode 100644 index 000000000..b5ba5c6de --- /dev/null +++ b/website/reference/callback_lambda.html @@ -0,0 +1,211 @@ + + + + + + + + +Create a custom callback — callback_lambda • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    This callback is constructed with anonymous functions that will be called at +the appropriate time. Note that the callbacks expects positional arguments, +as:

      +
    • on_epoch_begin and on_epoch_end expect two positional arguments: epoch, logs

    • +
    • on_batch_begin and on_batch_end expect two positional arguments: batch, logs

    • +
    • on_train_begin and on_train_end expect one positional argument: logs

    • +
    + + +
    callback_lambda(on_epoch_begin = NULL, on_epoch_end = NULL,
    +  on_batch_begin = NULL, on_batch_end = NULL, on_train_begin = NULL,
    +  on_train_end = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    on_epoch_begin

    called at the beginning of every epoch.

    on_epoch_end

    called at the end of every epoch.

    on_batch_begin

    called at the beginning of every batch.

    on_batch_end

    called at the end of every batch.

    on_train_begin

    called at the beginning of model training.

    on_train_end

    called at the end of model training.

    + +

    See also

    + +

    Other callbacks: callback_csv_logger, + callback_early_stopping, + callback_learning_rate_scheduler, + callback_model_checkpoint, + callback_progbar_logger, + callback_reduce_lr_on_plateau, + callback_remote_monitor, + callback_tensorboard, + callback_terminate_on_naan

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/callback_learning_rate_scheduler.html b/website/reference/callback_learning_rate_scheduler.html new file mode 100644 index 000000000..d903ad6eb --- /dev/null +++ b/website/reference/callback_learning_rate_scheduler.html @@ -0,0 +1,184 @@ + + + + + + + + +Learning rate scheduler. — callback_learning_rate_scheduler • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Learning rate scheduler.

    + + +
    callback_learning_rate_scheduler(schedule)
    + +

    Arguments

    + + + + + + +
    schedule

    a function that takes an epoch index as input (integer, +indexed from 0) and returns a new learning rate as output (float).

    + +

    See also

    + +

    Other callbacks: callback_csv_logger, + callback_early_stopping, + callback_lambda, + callback_model_checkpoint, + callback_progbar_logger, + callback_reduce_lr_on_plateau, + callback_remote_monitor, + callback_tensorboard, + callback_terminate_on_naan

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/callback_model_checkpoint.html b/website/reference/callback_model_checkpoint.html new file mode 100644 index 000000000..151aeed8f --- /dev/null +++ b/website/reference/callback_model_checkpoint.html @@ -0,0 +1,228 @@ + + + + + + + + +Save the model after every epoch. — callback_model_checkpoint • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    filepath can contain named formatting options, which will be filled the +value of epoch and keys in logs (passed in on_epoch_end). For example: +if filepath is weights.{epoch:02d}-{val_loss:.2f}.hdf5, then the model +checkpoints will be saved with the epoch number and the validation loss in +the filename.

    + + +
    callback_model_checkpoint(filepath, monitor = "val_loss", verbose = 0,
    +  save_best_only = FALSE, save_weights_only = FALSE, mode = c("auto",
    +  "min", "max"), period = 1)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    filepath

    string, path to save the model file.

    monitor

    quantity to monitor.

    verbose

    verbosity mode, 0 or 1.

    save_best_only

    if save_best_only=TRUE, the latest best model +according to the quantity monitored will not be overwritten.

    save_weights_only

    if TRUE, then only the model's weights will be +saved (save_model_weights_hdf5(filepath)), else the full model is saved +(save_model_hdf5(filepath)).

    mode

    one of "auto", "min", "max". If save_best_only=TRUE, the decision to +overwrite the current save file is made based on either the maximization or +the minimization of the monitored quantity. For val_acc, this should be +max, for val_loss this should be min, etc. In auto mode, the direction is +automatically inferred from the name of the monitored quantity.

    period

    Interval (number of epochs) between checkpoints.

    + +

    For example

    + +

    if filepath is +weights.{epoch:02d}-{val_loss:.2f}.hdf5,: then the model checkpoints will +be saved with the epoch number and the validation loss in the filename.

    + +

    See also

    + +

    Other callbacks: callback_csv_logger, + callback_early_stopping, + callback_lambda, + callback_learning_rate_scheduler, + callback_progbar_logger, + callback_reduce_lr_on_plateau, + callback_remote_monitor, + callback_tensorboard, + callback_terminate_on_naan

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/callback_progbar_logger.html b/website/reference/callback_progbar_logger.html new file mode 100644 index 000000000..2774b56f5 --- /dev/null +++ b/website/reference/callback_progbar_logger.html @@ -0,0 +1,184 @@ + + + + + + + + +Callback that prints metrics to stdout. — callback_progbar_logger • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Callback that prints metrics to stdout.

    + + +
    callback_progbar_logger(count_mode = "samples")
    + +

    Arguments

    + + + + + + +
    count_mode

    One of "steps" or "samples". Whether the progress bar +should count samples seens or steps (batches) seen.

    + +

    See also

    + +

    Other callbacks: callback_csv_logger, + callback_early_stopping, + callback_lambda, + callback_learning_rate_scheduler, + callback_model_checkpoint, + callback_reduce_lr_on_plateau, + callback_remote_monitor, + callback_tensorboard, + callback_terminate_on_naan

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/callback_reduce_lr_on_plateau.html b/website/reference/callback_reduce_lr_on_plateau.html new file mode 100644 index 000000000..5991c08fa --- /dev/null +++ b/website/reference/callback_reduce_lr_on_plateau.html @@ -0,0 +1,224 @@ + + + + + + + + +Reduce learning rate when a metric has stopped improving. — callback_reduce_lr_on_plateau • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Models often benefit from reducing the learning rate by a factor of 2-10 once +learning stagnates. This callback monitors a quantity and if no improvement +is seen for a 'patience' number of epochs, the learning rate is reduced.

    + + +
    callback_reduce_lr_on_plateau(monitor = "val_loss", factor = 0.1,
    +  patience = 10, verbose = 0, mode = c("auto", "min", "max"),
    +  epsilon = 1e-04, cooldown = 0, min_lr = 0)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    monitor

    quantity to be monitored.

    factor

    factor by which the learning rate will be reduced. new_lr = lr

      +
    • factor

    • +
    patience

    number of epochs with no improvement after which learning +rate will be reduced.

    verbose

    int. 0: quiet, 1: update messages.

    mode

    one of "auto", "min", "max". In min mode, lr will be reduced when +the quantity monitored has stopped decreasing; in max mode it will be +reduced when the quantity monitored has stopped increasing; in auto mode, +the direction is automatically inferred from the name of the monitored +quantity.

    epsilon

    threshold for measuring the new optimum, to only focus on +significant changes.

    cooldown

    number of epochs to wait before resuming normal operation +after lr has been reduced.

    min_lr

    lower bound on the learning rate.

    + +

    See also

    + +

    Other callbacks: callback_csv_logger, + callback_early_stopping, + callback_lambda, + callback_learning_rate_scheduler, + callback_model_checkpoint, + callback_progbar_logger, + callback_remote_monitor, + callback_tensorboard, + callback_terminate_on_naan

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/callback_remote_monitor.html b/website/reference/callback_remote_monitor.html new file mode 100644 index 000000000..854f8cf10 --- /dev/null +++ b/website/reference/callback_remote_monitor.html @@ -0,0 +1,197 @@ + + + + + + + + +Callback used to stream events to a server. — callback_remote_monitor • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Callback used to stream events to a server.

    + + +
    callback_remote_monitor(root = "http://localhost:9000",
    +  path = "/publish/epoch/end/", field = "data", headers = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + +
    root

    root url of the target server.

    path

    path relative to root to which the events will be sent.

    field

    JSON field under which the data will be stored.

    headers

    Optional named list of custom HTTP headers. Defaults to: +list(Accept = "application/json",Content-Type= "application/json")

    + +

    See also

    + +

    Other callbacks: callback_csv_logger, + callback_early_stopping, + callback_lambda, + callback_learning_rate_scheduler, + callback_model_checkpoint, + callback_progbar_logger, + callback_reduce_lr_on_plateau, + callback_tensorboard, + callback_terminate_on_naan

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/callback_tensorboard.html b/website/reference/callback_tensorboard.html new file mode 100644 index 000000000..1aa8f58b1 --- /dev/null +++ b/website/reference/callback_tensorboard.html @@ -0,0 +1,242 @@ + + + + + + + + +TensorBoard basic visualizations — callback_tensorboard • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    This callback writes a log for TensorBoard, which allows you to visualize +dynamic graphs of your training and test metrics, as well as activation +histograms for the different layers in your model.

    + + +
    callback_tensorboard(log_dir = NULL, histogram_freq = 0, batch_size = 32,
    +  write_graph = TRUE, write_grads = FALSE, write_images = FALSE,
    +  embeddings_freq = 0, embeddings_layer_names = NULL,
    +  embeddings_metadata = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    log_dir

    The path of the directory where to save the log files to be +parsed by Tensorboard. The default is NULL, which will use the active +run directory (if available) and otherwise will use "logs".

    histogram_freq

    frequency (in epochs) at which to compute activation +histograms for the layers of the model. If set to 0, histograms won't be +computed.

    batch_size

    size of batch of inputs to feed to the network +for histograms computation.

    write_graph

    whether to visualize the graph in Tensorboard. The log +file can become quite large when write_graph is set to TRUE

    write_grads

    whether to visualize gradient histograms in TensorBoard. +histogram_freq must be greater than 0.

    write_images

    whether to write model weights to visualize as image in +Tensorboard.

    embeddings_freq

    frequency (in epochs) at which selected embedding +layers will be saved.

    embeddings_layer_names

    a list of names of layers to keep eye on. If +NULL or empty list all the embedding layers will be watched.

    embeddings_metadata

    a named list which maps layer name to a file name in +which metadata for this embedding layer is saved. See the +details +about the metadata file format. In case if the same metadata file is used +for all embedding layers, string can be passed.

    + +

    Details

    + +

    TensorBoard is a visualization tool provided with TensorFlow.

    +

    You can find more information about TensorBoard +here.

    + +

    See also

    + +

    Other callbacks: callback_csv_logger, + callback_early_stopping, + callback_lambda, + callback_learning_rate_scheduler, + callback_model_checkpoint, + callback_progbar_logger, + callback_reduce_lr_on_plateau, + callback_remote_monitor, + callback_terminate_on_naan

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/callback_terminate_on_naan.html b/website/reference/callback_terminate_on_naan.html new file mode 100644 index 000000000..9d713f225 --- /dev/null +++ b/website/reference/callback_terminate_on_naan.html @@ -0,0 +1,173 @@ + + + + + + + + +Callback that terminates training when a NaN loss is encountered. — callback_terminate_on_naan • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Callback that terminates training when a NaN loss is encountered.

    + + +
    callback_terminate_on_naan()
    + +

    See also

    + +

    Other callbacks: callback_csv_logger, + callback_early_stopping, + callback_lambda, + callback_learning_rate_scheduler, + callback_model_checkpoint, + callback_progbar_logger, + callback_reduce_lr_on_plateau, + callback_remote_monitor, + callback_tensorboard

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/compile.html b/website/reference/compile.html new file mode 100644 index 000000000..8c2b45dcd --- /dev/null +++ b/website/reference/compile.html @@ -0,0 +1,223 @@ + + + + + + + + +Configure a Keras model for training — compile • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Configure a Keras model for training

    + + +
    compile(object, optimizer, loss, metrics = NULL, loss_weights = NULL,
    +  sample_weight_mode = NULL, ...)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model object to compile.

    optimizer

    Name of optimizer or optimizer object.

    loss

    Name of objective function or objective function. If the model +has multiple outputs, you can use a different loss on each output by +passing a dictionary or a list of objectives. The loss value that will be +minimized by the model will then be the sum of all individual losses.

    metrics

    List of metrics to be evaluated by the model during training +and testing. Typically you will use metrics='accuracy'. To specify +different metrics for different outputs of a multi-output model, you could +also pass a named list such as metrics=list(output_a = 'accuracy').

    loss_weights

    Optional list specifying scalar coefficients to weight +the loss contributions of different model outputs. The loss value that will +be minimized by the model will then be the weighted sum of all indvidual +losses, weighted by the loss_weights coefficients.

    sample_weight_mode

    If you need to do timestep-wise sample weighting +(2D weights), set this to "temporal". NULL defaults to sample-wise +weights (1D). If the model has multiple outputs, you can use a different +sample_weight_mode on each output by passing a list of modes.

    ...

    Additional named arguments passed to tf$Session$run.

    + +

    See also

    + +

    Other model functions: evaluate_generator, + evaluate, fit_generator, + fit, get_config, + get_layer, + keras_model_sequential, + keras_model, pop_layer, + predict.keras.engine.training.Model, + predict_generator, + predict_on_batch, + predict_proba, + summary.keras.engine.training.Model, + train_on_batch

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/constraint_maxnorm.html b/website/reference/constraint_maxnorm.html new file mode 100644 index 000000000..d928ce210 --- /dev/null +++ b/website/reference/constraint_maxnorm.html @@ -0,0 +1,188 @@ + + + + + + + + +MaxNorm weight constraint — constraint_maxnorm • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Constrains the weights incident to each hidden unit to have a norm less than +or equal to a desired value.

    + + +
    constraint_maxnorm(max_value = 2, axis = 0)
    + +

    Arguments

    + + + + + + + + + + +
    max_value

    The maximum norm for the incoming weights.

    axis

    The axis along which to calculate weight norms. For instance, in +a dense layer the weight matrix has shape input_dim, output_dim, +set axis to 0 to constrain each weight vector of length input_dim,. +In a convolution 2D layer with dim_ordering="tf", the weight tensor has +shape rows, cols, input_depth, output_depth, set axis to c(0, 1, 2) +to constrain the weights of each filter tensor of size rows, cols, input_depth.

    + +

    See also

    + +

    Dropout: A Simple Way to Prevent Neural Networks from Overfitting Srivastava, Hinton, et al. 2014

    +

    Other constraints: constraint_minmaxnorm, + constraint_nonneg, + constraint_unitnorm

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/constraint_minmaxnorm.html b/website/reference/constraint_minmaxnorm.html new file mode 100644 index 000000000..3a7dd4a18 --- /dev/null +++ b/website/reference/constraint_minmaxnorm.html @@ -0,0 +1,199 @@ + + + + + + + + +MinMaxNorm weight constraint — constraint_minmaxnorm • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Constrains the weights incident to each hidden unit to have the norm between +a lower bound and an upper bound.

    + + +
    constraint_minmaxnorm(min_value = 0, max_value = 1, rate = 1, axis = 0)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + +
    min_value

    The minimum norm for the incoming weights.

    max_value

    The maximum norm for the incoming weights.

    rate

    The rate for enforcing the constraint: weights will be rescaled to +yield (1 - rate) * norm + rate * norm.clip(low, high). Effectively, this +means that rate=1.0 stands for strict enforcement of the constraint, while +rate<1.0 means that weights will be rescaled at each step to slowly move +towards a value inside the desired interval.

    axis

    The axis along which to calculate weight norms. For instance, in +a dense layer the weight matrix has shape input_dim, output_dim, +set axis to 0 to constrain each weight vector of length input_dim,. +In a convolution 2D layer with dim_ordering="tf", the weight tensor has +shape rows, cols, input_depth, output_depth, set axis to c(0, 1, 2) +to constrain the weights of each filter tensor of size rows, cols, input_depth.

    + +

    See also

    + +

    Other constraints: constraint_maxnorm, + constraint_nonneg, + constraint_unitnorm

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/constraint_nonneg.html b/website/reference/constraint_nonneg.html new file mode 100644 index 000000000..3c9a9978c --- /dev/null +++ b/website/reference/constraint_nonneg.html @@ -0,0 +1,167 @@ + + + + + + + + +NonNeg weight constraint — constraint_nonneg • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Constrains the weights to be non-negative.

    + + +
    constraint_nonneg()
    + +

    See also

    + +

    Other constraints: constraint_maxnorm, + constraint_minmaxnorm, + constraint_unitnorm

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/constraint_unitnorm.html b/website/reference/constraint_unitnorm.html new file mode 100644 index 000000000..52f498c5f --- /dev/null +++ b/website/reference/constraint_unitnorm.html @@ -0,0 +1,182 @@ + + + + + + + + +UnitNorm weight constraint — constraint_unitnorm • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Constrains the weights incident to each hidden unit to have unit norm.

    + + +
    constraint_unitnorm(axis = 0)
    + +

    Arguments

    + + + + + + +
    axis

    The axis along which to calculate weight norms. For instance, in +a dense layer the weight matrix has shape input_dim, output_dim, +set axis to 0 to constrain each weight vector of length input_dim,. +In a convolution 2D layer with dim_ordering="tf", the weight tensor has +shape rows, cols, input_depth, output_depth, set axis to c(0, 1, 2) +to constrain the weights of each filter tensor of size rows, cols, input_depth.

    + +

    See also

    + +

    Other constraints: constraint_maxnorm, + constraint_minmaxnorm, + constraint_nonneg

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/count_params.html b/website/reference/count_params.html new file mode 100644 index 000000000..edeab8e65 --- /dev/null +++ b/website/reference/count_params.html @@ -0,0 +1,183 @@ + + + + + + + + +Count the total number of scalars composing the weights. — count_params • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Count the total number of scalars composing the weights.

    + + +
    count_params(object)
    + +

    Arguments

    + + + + + + +
    object

    Layer or model object

    + +

    Value

    + +

    An integer count

    + +

    See also

    + +

    Other layer methods: get_config, + get_input_at, get_weights, + reset_states

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/create_layer.html b/website/reference/create_layer.html new file mode 100644 index 000000000..920e32f8f --- /dev/null +++ b/website/reference/create_layer.html @@ -0,0 +1,192 @@ + + + + + + + + +Create a Keras Layer — create_layer • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Create a Keras Layer

    + + +
    create_layer(layer_class, object, args = list())
    + +

    Arguments

    + + + + + + + + + + + + + + +
    layer_class

    Python layer class or R6 class of type KerasLayer

    object

    Object to compose layer with. This is either a +keras_model_sequential() to add the layer to, or another Layer which +this layer will call.

    args

    List of arguments to layer constructor function

    + +

    Value

    + +

    A Keras layer

    + +

    Note

    + +

    The object parameter can be missing, in which case the +layer is created without a connection to an existing graph.

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/dataset_boston_housing.html b/website/reference/dataset_boston_housing.html new file mode 100644 index 000000000..5a11d6f41 --- /dev/null +++ b/website/reference/dataset_boston_housing.html @@ -0,0 +1,199 @@ + + + + + + + + +Boston housing price regression dataset — dataset_boston_housing • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Dataset taken from the StatLib library which is maintained at Carnegie Mellon +University.

    + + +
    dataset_boston_housing(path = "boston_housing.npz", seed = 113L,
    +  test_split = 0.2)
    + +

    Arguments

    + + + + + + + + + + + + + + +
    path

    Path where to cache the dataset locally (relative to +~/.keras/datasets).

    seed

    Random seed for shuffling the data before computing the test +split.

    test_split

    fraction of the data to reserve as test set.

    + +

    Value

    + +

    Lists of training and test data: train$x, train$y, test$x, test$y.

    +

    Samples contain 13 attributes of houses at different locations around +the Boston suburbs in the late 1970s. Targets are the median values of the +houses at a location (in k$).

    + +

    See also

    + +

    Other datasets: dataset_cifar100, + dataset_cifar10, + dataset_imdb, dataset_mnist, + dataset_reuters

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/dataset_cifar10.html b/website/reference/dataset_cifar10.html new file mode 100644 index 000000000..d34c4c2b3 --- /dev/null +++ b/website/reference/dataset_cifar10.html @@ -0,0 +1,179 @@ + + + + + + + + +CIFAR10 small image classification — dataset_cifar10 • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Dataset of 50,000 32x32 color training images, labeled over 10 categories, +and 10,000 test images.

    + + +
    dataset_cifar10()
    + +

    Value

    + +

    Lists of training and test data: train$x, train$y, test$x, test$y.

    +

    The x data is an array of RGB image data with shape (num_samples, 3, 32, +32).

    +

    The y data is an array of category labels (integers in range 0-9) with +shape (num_samples).

    + +

    See also

    + +

    Other datasets: dataset_boston_housing, + dataset_cifar100, + dataset_imdb, dataset_mnist, + dataset_reuters

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/dataset_cifar100.html b/website/reference/dataset_cifar100.html new file mode 100644 index 000000000..1bbcd43b5 --- /dev/null +++ b/website/reference/dataset_cifar100.html @@ -0,0 +1,187 @@ + + + + + + + + +CIFAR100 small image classification — dataset_cifar100 • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Dataset of 50,000 32x32 color training images, labeled over 100 categories, +and 10,000 test images.

    + + +
    dataset_cifar100(label_mode = c("fine", "coarse"))
    + +

    Arguments

    + + + + + + +
    label_mode

    one of "fine", "coarse".

    + +

    Value

    + +

    Lists of training and test data: train$x, train$y, test$x, test$y.

    +

    The x data is an array of RGB image data with shape (num_samples, 3, 32, 32).

    +

    The y data is an array of category labels with shape (num_samples).

    + +

    See also

    + +

    Other datasets: dataset_boston_housing, + dataset_cifar10, + dataset_imdb, dataset_mnist, + dataset_reuters

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/dataset_imdb.html b/website/reference/dataset_imdb.html new file mode 100644 index 000000000..b68c49056 --- /dev/null +++ b/website/reference/dataset_imdb.html @@ -0,0 +1,236 @@ + + + + + + + + +IMDB Movie reviews sentiment classification — dataset_imdb • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Dataset of 25,000 movies reviews from IMDB, labeled by sentiment +(positive/negative). Reviews have been preprocessed, and each review is +encoded as a sequence of word indexes (integers). For convenience, words are +indexed by overall frequency in the dataset, so that for instance the integer +"3" encodes the 3rd most frequent word in the data. This allows for quick +filtering operations such as: "only consider the top 10,000 most common +words, but eliminate the top 20 most common words".

    + + +
    dataset_imdb(path = "imdb.npz", num_words = NULL, skip_top = 0L,
    +  maxlen = NULL, seed = 113L, start_char = 1L, oov_char = 2L,
    +  index_from = 3L)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    path

    Where to cache the data (relative to ~/.keras/dataset).

    num_words

    Max number of words to include. Words are ranked by how +often they occur (in the training set) and only the most frequent words are +kept

    skip_top

    Skip the top N most frequently occuring words (which may not +be informative).

    maxlen

    Truncate sequences after this length.

    seed

    random seed for sample shuffling.

    start_char

    The start of a sequence will be marked with this character. +Set to 1 because 0 is usually the padding character.

    oov_char

    Words that were cut out because of the num_words or +skip_top limit will be replaced with this character.

    index_from

    Index actual words with this index and higher.

    + +

    Value

    + +

    Lists of training and test data: train$x, train$y, test$x, test$y.

    +

    The x data includes integer sequences. If the num_words`` argument was specific, the maximum possible index value isnum_words-1. If themaxlen`` +argument was specified, the largest possible sequence length is maxlen.

    +

    The y data includes a set of integer labels (0 or 1).

    + +

    Details

    + +

    As a convention, "0" does not stand for a specific word, but instead is used +to encode any unknown word.

    + +

    See also

    + +

    Other datasets: dataset_boston_housing, + dataset_cifar100, + dataset_cifar10, + dataset_mnist, + dataset_reuters

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/dataset_mnist.html b/website/reference/dataset_mnist.html new file mode 100644 index 000000000..284f7ac10 --- /dev/null +++ b/website/reference/dataset_mnist.html @@ -0,0 +1,186 @@ + + + + + + + + +MNIST database of handwritten digits — dataset_mnist • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Dataset of 60,000 28x28 grayscale images of the 10 digits, along with a test set of 10,000 images.

    + + +
    dataset_mnist(path = "mnist.npz")
    + +

    Arguments

    + + + + + + +
    path

    Path where to cache the dataset locally (relative to ~/.keras/datasets).

    + +

    Value

    + +

    Lists of training and test data: train$x, train$y, test$x, test$y, where +x is an array of grayscale image data with shape (num_samples, 28, 28) and y +is an array of digit labels (integers in range 0-9) with shape (num_samples).

    + +

    See also

    + +

    Other datasets: dataset_boston_housing, + dataset_cifar100, + dataset_cifar10, + dataset_imdb, dataset_reuters

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/dataset_reuters.html b/website/reference/dataset_reuters.html new file mode 100644 index 000000000..19781f226 --- /dev/null +++ b/website/reference/dataset_reuters.html @@ -0,0 +1,231 @@ + + + + + + + + +Reuters newswire topics classification — dataset_reuters • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Dataset of 11,228 newswires from Reuters, labeled over 46 topics. As with +dataset_imdb() , each wire is encoded as a sequence of word indexes (same +conventions).

    + + +
    dataset_reuters(path = "reuters.npz", num_words = NULL, skip_top = 0L,
    +  maxlen = NULL, test_split = 0.2, seed = 113L, start_char = 1L,
    +  oov_char = 2L, index_from = 3L)
    +
    +dataset_reuters_word_index(path = "reuters_word_index.pkl")
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    path

    Where to cache the data (relative to ~/.keras/dataset).

    num_words

    Max number of words to include. Words are ranked by how +often they occur (in the training set) and only the most frequent words are +kept

    skip_top

    Skip the top N most frequently occuring words (which may not +be informative).

    maxlen

    Truncate sequences after this length.

    test_split

    Fraction of the dataset to be used as test data.

    seed

    Random seed for sample shuffling.

    start_char

    The start of a sequence will be marked with this character. +Set to 1 because 0 is usually the padding character.

    oov_char

    words that were cut out because of the num_words or +skip_top limit will be replaced with this character.

    index_from

    index actual words with this index and higher.

    + +

    Value

    + +

    Lists of training and test data: train$x, train$y, test$x, test$y +with same format as dataset_imdb(). The dataset_reuters_word_index() +function returns a list where the names are words and the values are +integer. e.g. word_index[["giraffe"]] might return 1234.

    +

    [["giraffe"]: R:[

    + +

    See also

    + +

    Other datasets: dataset_boston_housing, + dataset_cifar100, + dataset_cifar10, + dataset_imdb, dataset_mnist

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/evaluate.html b/website/reference/evaluate.html new file mode 100644 index 000000000..6120d34d4 --- /dev/null +++ b/website/reference/evaluate.html @@ -0,0 +1,223 @@ + + + + + + + + +Evaluate a Keras model — evaluate • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Evaluate a Keras model

    + + +
    evaluate(object, x, y, batch_size = 32, verbose = 1, sample_weight = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model object to evaluate

    x

    Vector, matrix, or array of training data (or list if the model has +multiple inputs). If all inputs in the model are named, you can also pass a +list mapping input names to data.

    y

    Vector, matrix, or array of target data (or list if the model has +multiple outputs). If all outputs in the model are named, you can also pass +a list mapping output names to data.

    batch_size

    Number of samples per gradient update.

    verbose

    Verbosity mode (0 = silent, 1 = verbose, 2 = one log line per +epoch).

    sample_weight

    Optional array of the same length as x, containing +weights to apply to the model's loss for each sample. In the case of +temporal data, you can pass a 2D array with shape (samples, +sequence_length), to apply a different weight to every timestep of every +sample. In this case you should make sure to specify +sample_weight_mode="temporal" in compile().

    + +

    Value

    + +

    Named list of model test loss (or losses for models with multiple outputs) +and model metrics.

    + +

    See also

    + +

    Other model functions: compile, + evaluate_generator, + fit_generator, fit, + get_config, get_layer, + keras_model_sequential, + keras_model, pop_layer, + predict.keras.engine.training.Model, + predict_generator, + predict_on_batch, + predict_proba, + summary.keras.engine.training.Model, + train_on_batch

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/evaluate_generator.html b/website/reference/evaluate_generator.html new file mode 100644 index 000000000..8d5663a40 --- /dev/null +++ b/website/reference/evaluate_generator.html @@ -0,0 +1,208 @@ + + + + + + + + +Evaluates the model on a data generator. — evaluate_generator • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    The generator should return the same kind of data as accepted by +test_on_batch().

    + + +
    evaluate_generator(object, generator, steps, max_queue_size = 10)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + +
    object

    Model object to evaluate

    generator

    Generator yielding lists (inputs, targets) or (inputs, +targets, sample_weights)

    steps

    Total number of steps (batches of samples) to yield from +generator before stopping.

    max_queue_size

    maximum size for the generator queue

    + +

    Value

    + +

    Named list of model test loss (or losses for models with multiple outputs) +and model metrics.

    + +

    See also

    + +

    Other model functions: compile, + evaluate, fit_generator, + fit, get_config, + get_layer, + keras_model_sequential, + keras_model, pop_layer, + predict.keras.engine.training.Model, + predict_generator, + predict_on_batch, + predict_proba, + summary.keras.engine.training.Model, + train_on_batch

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/fit.html b/website/reference/fit.html new file mode 100644 index 000000000..bfa8ae3d4 --- /dev/null +++ b/website/reference/fit.html @@ -0,0 +1,269 @@ + + + + + + + + +Train a Keras model — fit • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Trains the model for a fixed number of epochs (iterations on a dataset).

    + + +
    fit(object, x, y, batch_size = 32, epochs = 10, verbose = 1,
    +  callbacks = NULL, view_metrics = getOption("keras.view_metrics", default =
    +  "auto"), validation_split = 0, validation_data = NULL, shuffle = TRUE,
    +  class_weight = NULL, sample_weight = NULL, initial_epoch = 0, ...)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model to train.

    x

    Vector, matrix, or array of training data (or list if the model has +multiple inputs). If all inputs in the model are named, you can also pass a +list mapping input names to data.

    y

    Vector, matrix, or array of target data (or list if the model has +multiple outputs). If all outputs in the model are named, you can also pass +a list mapping output names to data.

    batch_size

    Number of samples per gradient update.

    epochs

    Number of times to iterate over the training data arrays.

    verbose

    Verbosity mode (0 = silent, 1 = verbose, 2 = one log line per +epoch).

    callbacks

    List of callbacks to be called during training.

    view_metrics

    View realtime plot of training metrics (by epoch). The +default ("auto") will display the plot when running within RStudio, +metrics were specified during model compile(), epochs > 1 and +verbose > 0. Use the global keras.view_metrics option to establish a +different default.

    validation_split

    Float between 0 and 1: fraction of the training data +to be used as validation data. The model will set apart this fraction of +the training data, will not train on it, and will evaluate the loss and any +model metrics on this data at the end of each epoch.

    validation_data

    Data on which to evaluate the loss and any model +metrics at the end of each epoch. The model will not be trained on this +data. This could be a list (x_val, y_val) or a list (x_val, y_val, +val_sample_weights).

    shuffle

    TRUE to shuffle the training data before each epoch.

    class_weight

    Optional named list mapping indices (integers) to a +weight (float) to apply to the model's loss for the samples from this class +during training. This can be useful to tell the model to "pay more +attention" to samples from an under-represented class.

    sample_weight

    Optional array of the same length as x, containing +weights to apply to the model's loss for each sample. In the case of +temporal data, you can pass a 2D array with shape (samples, +sequence_length), to apply a different weight to every timestep of every +sample. In this case you should make sure to specify +sample_weight_mode="temporal" in compile().

    initial_epoch

    epoch at which to start training (useful for resuming a +previous training run).

    ...

    Unused

    + +

    See also

    + +

    Other model functions: compile, + evaluate_generator, evaluate, + fit_generator, get_config, + get_layer, + keras_model_sequential, + keras_model, pop_layer, + predict.keras.engine.training.Model, + predict_generator, + predict_on_batch, + predict_proba, + summary.keras.engine.training.Model, + train_on_batch

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/fit_generator.html b/website/reference/fit_generator.html new file mode 100644 index 000000000..2a9e59d21 --- /dev/null +++ b/website/reference/fit_generator.html @@ -0,0 +1,268 @@ + + + + + + + + +Fits the model on data yielded batch-by-batch by a generator. — fit_generator • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    The generator is run in parallel to the model, for efficiency. For instance, +this allows you to do real-time data augmentation on images on CPU in +parallel to training your model on GPU.

    + + +
    fit_generator(object, generator, steps_per_epoch, epochs = 1, verbose = 1,
    +  callbacks = NULL, view_metrics = getOption("keras.view_metrics", default =
    +  "auto"), validation_data = NULL, validation_steps = NULL,
    +  class_weight = NULL, max_queue_size = 10, initial_epoch = 0)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Keras model object

    generator

    A generator (e.g. like the one provided by +flow_images_from_directory() or a custom R generator function).

    +

    The output of the generator must be a list of one of these forms:

     - (inputs, targets)
    + - (inputs, targets, sample_weights)
    +
    + +

    Note that the generator should call the to_numpy_array() function on its +results prior to returning them (this ensures that arrays are provided in +'C' order and using the default floating point type for the backend.)

    +

    All arrays should contain the same number of samples. The generator is expected +to loop over its data indefinitely. An epoch finishes when steps_per_epoch +batches have been seen by the model.

    steps_per_epoch

    Total number of steps (batches of samples) to yield +from generator before declaring one epoch finished and starting the next +epoch. It should typically be equal to the number of unique samples if your +dataset divided by the batch size.

    epochs

    integer, total number of iterations on the data.

    verbose

    Verbosity mode (0 = silent, 1 = verbose, 2 = one log line per +epoch).

    callbacks

    list of callbacks to be called during training.

    view_metrics

    View realtime plot of training metrics (by epoch). The +default ("auto") will display the plot when running within RStudio, +metrics were specified during model compile(), epochs > 1 and +verbose > 0. Use the global keras.view_metrics option to establish a +different default.

    validation_data

    this can be either:

      +
    • a generator for the validation data

    • +
    • a list (inputs, targets)

    • +
    • a list (inputs, targets, sample_weights).

    • +
    validation_steps

    Only relevant if validation_data is a generator. +Total number of steps (batches of samples) to yield from generator before +stopping.

    class_weight

    dictionary mapping class indices to a weight for the +class.

    max_queue_size

    maximum size for the generator queue

    initial_epoch

    epoch at which to start training (useful for resuming a +previous training run)

    + +

    Value

    + +

    Training history object (invisibly)

    + +

    See also

    + +

    Other model functions: compile, + evaluate_generator, evaluate, + fit, get_config, + get_layer, + keras_model_sequential, + keras_model, pop_layer, + predict.keras.engine.training.Model, + predict_generator, + predict_on_batch, + predict_proba, + summary.keras.engine.training.Model, + train_on_batch

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/fit_image_data_generator.html b/website/reference/fit_image_data_generator.html new file mode 100644 index 000000000..16e6b806d --- /dev/null +++ b/website/reference/fit_image_data_generator.html @@ -0,0 +1,200 @@ + + + + + + + + +Fit image data generator internal statistics to some sample data. — fit_image_data_generator • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Required for featurewise_center, featurewise_std_normalization +and zca_whitening.

    + + +
    fit_image_data_generator(object, x, augment = FALSE, rounds = 1,
    +  seed = NULL, ...)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    image_data_generator()

    x

    array, the data to fit on (should have rank 4). In case of grayscale data, +the channels axis should have value 1, and in case of RGB data, it should have value 3.

    augment

    Whether to fit on randomly augmented samples

    rounds

    If augment, how many augmentation passes to do over the data

    seed

    random seed.

    ...

    Unused

    + +

    See also

    + +

    Other image preprocessing: flow_images_from_data, + flow_images_from_directory, + image_load, image_to_array

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/fit_text_tokenizer.html b/website/reference/fit_text_tokenizer.html new file mode 100644 index 000000000..4d9172474 --- /dev/null +++ b/website/reference/fit_text_tokenizer.html @@ -0,0 +1,199 @@ + + + + + + + + +Update tokenizer internal vocabulary based on a list of texts or list of +sequences. — fit_text_tokenizer • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Update tokenizer internal vocabulary based on a list of texts or list of +sequences.

    + + +
    fit_text_tokenizer(object, x, ...)
    + +

    Arguments

    + + + + + + + + + + + + + + +
    object

    Tokenizer returned by text_tokenizer()

    x

    Vector/list of strings, or a generator of strings (for +memory-efficiency); Alternatively a list of "sequence" (a sequence is a +list of integer word indices).

    ...

    Unused

    + +

    Note

    + +

    Required before using texts_to_sequences(), texts_to_matrix(), or +sequences_to_matrix().

    + +

    See also

    + +

    Other text tokenization: sequences_to_matrix, + text_tokenizer, + texts_to_matrix, + texts_to_sequences_generator, + texts_to_sequences

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/flow_images_from_data.html b/website/reference/flow_images_from_data.html new file mode 100644 index 000000000..dc5fb2109 --- /dev/null +++ b/website/reference/flow_images_from_data.html @@ -0,0 +1,230 @@ + + + + + + + + +Generates batches of augmented/normalized data from image data and labels — flow_images_from_data • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Generates batches of augmented/normalized data from image data and labels

    + + +
    flow_images_from_data(x, y = NULL, generator = image_data_generator(),
    +  batch_size = 32, shuffle = TRUE, seed = NULL, save_to_dir = NULL,
    +  save_prefix = "", save_format = "png")
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    x

    data. Should have rank 4. In case of grayscale data, the channels +axis should have value 1, and in case of RGB data, it should have value 3.

    y

    labels (can be NULL if no labels are required)

    generator

    Image data generator to use for augmenting/normalizing image +data.

    batch_size

    int (default: 32).

    shuffle

    boolean (defaut: TRUE).

    seed

    int (default: NULL).

    save_to_dir

    NULL or str (default: NULL). This allows you to +optimally specify a directory to which to save the augmented pictures being +generated (useful for visualizing what you are doing).

    save_prefix

    str (default: ''). Prefix to use for filenames of saved +pictures (only relevant if save_to_dir is set).

    save_format

    one of "png", "jpeg" (only relevant if save_to_dir is +set). Default: "png".

    + +

    Details

    + +

    Yields batches indefinitely, in an infinite loop.

    + +

    Yields

    + +

    (x, y) where x is an array of image data and y is a +array of corresponding labels. The generator loops indefinitely.

    + +

    See also

    + +

    Other image preprocessing: fit_image_data_generator, + flow_images_from_directory, + image_load, image_to_array

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/flow_images_from_directory.html b/website/reference/flow_images_from_directory.html new file mode 100644 index 000000000..5f371279d --- /dev/null +++ b/website/reference/flow_images_from_directory.html @@ -0,0 +1,263 @@ + + + + + + + + +Generates batches of data from images in a directory (with optional +augmented/normalized data) — flow_images_from_directory • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Generates batches of data from images in a directory (with optional +augmented/normalized data)

    + + +
    flow_images_from_directory(directory, generator = image_data_generator(),
    +  target_size = c(256, 256), color_mode = "rgb", classes = NULL,
    +  class_mode = "categorical", batch_size = 32, shuffle = TRUE,
    +  seed = NULL, save_to_dir = NULL, save_prefix = "",
    +  save_format = "png", follow_links = FALSE)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    directory

    path to the target directory. It should contain one +subdirectory per class. Any PNG, JPG or BMP images inside each of the +subdirectories directory tree will be included in the generator. See thisscript +for more details.

    generator

    Image data generator (default generator does no data +augmentation/normalization transformations)

    target_size

    integer vectir, default: c(256, 256). The dimensions to +which all images found will be resized.

    color_mode

    one of "grayscale", "rbg". Default: "rgb". Whether the +images will be converted to have 1 or 3 color channels.

    classes

    optional list of class subdirectories (e.g. c('dogs', 'cats')). Default: NULL, If not provided, the list of classes will be +automatically inferred (and the order of the classes, which will map to the +label indices, will be alphanumeric).

    class_mode

    one of "categorical", "binary", "sparse" or NULL. +Default: "categorical". Determines the type of label arrays that are +returned: "categorical" will be 2D one-hot encoded labels, "binary" will be +1D binary labels, "sparse" will be 1D integer labels. If NULL, no labels +are returned (the generator will only yield batches of image data, which is +useful to use predict_generator(), evaluate_generator(), etc.).

    batch_size

    int (default: 32).

    shuffle

    boolean (defaut: TRUE).

    seed

    int (default: NULL).

    save_to_dir

    NULL or str (default: NULL). This allows you to +optimally specify a directory to which to save the augmented pictures being +generated (useful for visualizing what you are doing).

    save_prefix

    str (default: ''). Prefix to use for filenames of saved +pictures (only relevant if save_to_dir is set).

    save_format

    one of "png", "jpeg" (only relevant if save_to_dir is +set). Default: "png".

    follow_links

    whether to follow symlinks inside class subdirectories +(default: FALSE)

    + +

    Details

    + +

    Yields batches indefinitely, in an infinite loop.

    + +

    Yields

    + +

    (x, y) where x is an array of image data and y is a +array of corresponding labels. The generator loops indefinitely.

    + +

    See also

    + +

    Other image preprocessing: fit_image_data_generator, + flow_images_from_data, + image_load, image_to_array

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/get_config.html b/website/reference/get_config.html new file mode 100644 index 000000000..3347aa9ae --- /dev/null +++ b/website/reference/get_config.html @@ -0,0 +1,216 @@ + + + + + + + + +Layer/Model configuration — get_config • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    A layer config is an object returned from get_config() that contains the +configuration of a layer or model. The same layer or model can be +reinstantiated later (without its trained weights) from this configuration +using from_config(). The config does not include connectivity information, +nor the class name (those are handled externally).

    + + +
    get_config(object)
    +
    +from_config(config)
    + +

    Arguments

    + + + + + + + + + + +
    object

    Layer or model object

    config

    Object with layer or model configuration

    + +

    Value

    + +

    get_config() returns an object with the configuration, +from_config() returns a re-instantation of hte object.

    + +

    Note

    + +

    Objects returned from get_config() are not serializable. Therefore, +if you want to save and restore a model across sessions, you can use the +model_to_json() or model_to_yaml() functions (for model configuration +only, not weights) or the save_model_hdf5() function to save the model +configuration and weights to a file.

    + +

    See also

    + +

    Other model functions: compile, + evaluate_generator, evaluate, + fit_generator, fit, + get_layer, + keras_model_sequential, + keras_model, pop_layer, + predict.keras.engine.training.Model, + predict_generator, + predict_on_batch, + predict_proba, + summary.keras.engine.training.Model, + train_on_batch

    +

    Other layer methods: count_params, + get_input_at, get_weights, + reset_states

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/get_file.html b/website/reference/get_file.html new file mode 100644 index 000000000..b7a904b0d --- /dev/null +++ b/website/reference/get_file.html @@ -0,0 +1,216 @@ + + + + + + + + +Downloads a file from a URL if it not already in the cache. — get_file • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Passing the MD5 hash will verify the file after download as well as if it is +already present in the cache.

    + + +
    get_file(fname, origin, file_hash = NULL, cache_subdir = "datasets",
    +  hash_algorithm = "auto", extract = FALSE, archive_format = "auto",
    +  cache_dir = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    fname

    Name of the file. If an absolute path /path/to/file.txt is +specified the file will be saved at that location.

    origin

    Original URL of the file.

    file_hash

    The expected hash string of the file after download. The +sha256 and md5 hash algorithms are both supported.

    cache_subdir

    Subdirectory under the Keras cache dir where the file is +saved. If an absolute path /path/to/folder is specified the file will be +saved at that location.

    hash_algorithm

    Select the hash algorithm to verify the file. options +are 'md5', 'sha256', and 'auto'. The default 'auto' detects the hash +algorithm in use.

    extract

    True tries extracting the file as an Archive, like tar or zip.

    archive_format

    Archive format to try for extracting the file. Options +are 'auto', 'tar', 'zip', and None. 'tar' includes tar, tar.gz, and tar.bz +files. The default 'auto' is ('tar', 'zip'). None or an empty list will +return no matches found.

    cache_dir

    Location to store cached files, when NULL it defaults to +the Keras configuration directory.

    + +

    Value

    + +

    Path to the downloaded file

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/get_input_at.html b/website/reference/get_input_at.html new file mode 100644 index 000000000..e8b8fc59f --- /dev/null +++ b/website/reference/get_input_at.html @@ -0,0 +1,204 @@ + + + + + + + + +Retrieve tensors for layers with multiple nodes — get_input_at • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Whenever you are calling a layer on some input, you are creating a new tensor +(the output of the layer), and you are adding a "node" to the layer, linking +the input tensor to the output tensor. When you are calling the same layer +multiple times, that layer owns multiple nodes indexed as 1, 2, 3. These +functions enable you to retreive various tensor properties of layers with +multiple nodes.

    + + +
    get_input_at(object, node_index)
    +
    +get_output_at(object, node_index)
    +
    +get_input_shape_at(object, node_index)
    +
    +get_output_shape_at(object, node_index)
    +
    +get_input_mask_at(object, node_index)
    +
    +get_output_mask_at(object, node_index)
    + +

    Arguments

    + + + + + + + + + + +
    object

    Layer or model object

    node_index

    Integer, index of the node from which to retrieve the +attribute. E.g. node_index = 1 will correspond to the first time the +layer was called.

    + +

    Value

    + +

    A tensor (or list of tensors if the layer has multiple inputs/outputs).

    + +

    See also

    + +

    Other layer methods: count_params, + get_config, get_weights, + reset_states

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/get_layer.html b/website/reference/get_layer.html new file mode 100644 index 000000000..09bbaaf88 --- /dev/null +++ b/website/reference/get_layer.html @@ -0,0 +1,201 @@ + + + + + + + + +Retrieves a layer based on either its name (unique) or index. — get_layer • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Indices are based on order of horizontal graph traversal (bottom-up) and +are 0-based.

    + + +
    get_layer(object, name = NULL, index = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + +
    object

    Keras model object

    name

    String, name of layer.

    index

    Integer, index of layer (0-based)

    + +

    Value

    + +

    A layer instance.

    + +

    See also

    + +

    Other model functions: compile, + evaluate_generator, evaluate, + fit_generator, fit, + get_config, + keras_model_sequential, + keras_model, pop_layer, + predict.keras.engine.training.Model, + predict_generator, + predict_on_batch, + predict_proba, + summary.keras.engine.training.Model, + train_on_batch

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/get_weights.html b/website/reference/get_weights.html new file mode 100644 index 000000000..d970eed34 --- /dev/null +++ b/website/reference/get_weights.html @@ -0,0 +1,188 @@ + + + + + + + + +Layer/Model weights as R arrays — get_weights • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Layer/Model weights as R arrays

    + + +
    get_weights(object)
    +
    +set_weights(object, weights)
    + +

    Arguments

    + + + + + + + + + + +
    object

    Layer or model object

    weights

    Weights as R array

    + +

    See also

    + +

    Other model persistence: model_to_json, + model_to_yaml, + save_model_hdf5, + save_model_weights_hdf5, + serialize_model

    +

    Other layer methods: count_params, + get_config, get_input_at, + reset_states

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/hdf5_matrix.html b/website/reference/hdf5_matrix.html new file mode 100644 index 000000000..4530a60f5 --- /dev/null +++ b/website/reference/hdf5_matrix.html @@ -0,0 +1,199 @@ + + + + + + + + +Representation of HDF5 dataset to be used instead of an R array — hdf5_matrix • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Representation of HDF5 dataset to be used instead of an R array

    + + +
    hdf5_matrix(datapath, dataset, start = 0, end = NULL, normalizer = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + +
    datapath

    string, path to a HDF5 file

    dataset

    string, name of the HDF5 dataset in the file specified in datapath

    start

    int, start of desired slice of the specified dataset

    end

    int, end of desired slice of the specified dataset

    normalizer

    function to be called on data when retrieved

    + +

    Value

    + +

    An array-like HDF5 dataset.

    + +

    Details

    + +

    Providing start and end allows use of a slice of the dataset.

    +

    Optionally, a normalizer function (or lambda) can be given. This will +be called on every slice of data retrieved.

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/image_data_generator.html b/website/reference/image_data_generator.html new file mode 100644 index 000000000..73c50f1a8 --- /dev/null +++ b/website/reference/image_data_generator.html @@ -0,0 +1,262 @@ + + + + + + + + +Generate minibatches of image data with real-time data augmentation. — image_data_generator • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Generate minibatches of image data with real-time data augmentation.

    + + +
    image_data_generator(featurewise_center = FALSE, samplewise_center = FALSE,
    +  featurewise_std_normalization = FALSE,
    +  samplewise_std_normalization = FALSE, zca_whitening = FALSE,
    +  zca_epsilon = 1e-06, rotation_range = 0, width_shift_range = 0,
    +  height_shift_range = 0, shear_range = 0, zoom_range = 0,
    +  channel_shift_range = 0, fill_mode = "nearest", cval = 0,
    +  horizontal_flip = FALSE, vertical_flip = FALSE, rescale = NULL,
    +  preprocessing_function = NULL, data_format = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    featurewise_center

    set input mean to 0 over the dataset.

    samplewise_center

    set each sample mean to 0.

    featurewise_std_normalization

    divide inputs by std of the dataset.

    samplewise_std_normalization

    divide each input by its std.

    zca_whitening

    apply ZCA whitening.

    zca_epsilon

    Epsilon for ZCA whitening. Default is 1e-6.

    rotation_range

    degrees (0 to 180).

    width_shift_range

    fraction of total width.

    height_shift_range

    fraction of total height.

    shear_range

    shear intensity (shear angle in radians).

    zoom_range

    amount of zoom. if scalar z, zoom will be randomly picked +in the range [1-z, 1+z]. A sequence of two can be passed instead to select +this range.

    channel_shift_range

    shift range for each channels.

    fill_mode

    points outside the boundaries are filled according to the +given mode ('constant', 'nearest', 'reflect' or 'wrap'). Default is +'nearest'.

    cval

    value used for points outside the boundaries when fill_mode is +'constant'. Default is 0.

    horizontal_flip

    whether to randomly flip images horizontally.

    vertical_flip

    whether to randomly flip images vertically.

    rescale

    rescaling factor. If NULL or 0, no rescaling is applied, +otherwise we multiply the data by the value provided (before applying any +other transformation).

    preprocessing_function

    function that will be implied on each input. +The function will run before any other modification on it. The function +should take one argument: one image (tensor with rank 3), and should +output a tensor with the same shape.

    data_format

    'channels_first' or 'channels_last'. In 'channels_first' +mode, the channels dimension (the depth) is at index 1, in 'channels_last' +mode it is at index 3. It defaults to the image_data_format value found +in your Keras config file at ~/.keras/keras.json. If you never set it, +then it will be "channels_last".

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/image_load.html b/website/reference/image_load.html new file mode 100644 index 000000000..f9e792aab --- /dev/null +++ b/website/reference/image_load.html @@ -0,0 +1,192 @@ + + + + + + + + +Loads an image into PIL format. — image_load • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Loads an image into PIL format.

    + + +
    image_load(path, grayscale = FALSE, target_size = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + +
    path

    Path to image file

    grayscale

    Boolean, whether to load the image as grayscale.

    target_size

    Either NULL (default to original size) or integer vector (img_height, img_width).

    + +

    Value

    + +

    A PIL Image instance.

    + +

    See also

    + +

    Other image preprocessing: fit_image_data_generator, + flow_images_from_data, + flow_images_from_directory, + image_to_array

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/image_to_array.html b/website/reference/image_to_array.html new file mode 100644 index 000000000..657d3a661 --- /dev/null +++ b/website/reference/image_to_array.html @@ -0,0 +1,188 @@ + + + + + + + + +Converts a PIL Image instance to a 3d-array. — image_to_array • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Converts a PIL Image instance to a 3d-array.

    + + +
    image_to_array(img, data_format = c("channels_last", "channels_first"))
    + +

    Arguments

    + + + + + + + + + + +
    img

    PIL Image instance.

    data_format

    Image data format ("channels_last" or "channels_first")

    + +

    Value

    + +

    A 3D array.

    + +

    See also

    + +

    Other image preprocessing: fit_image_data_generator, + flow_images_from_data, + flow_images_from_directory, + image_load

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/imagenet_decode_predictions.html b/website/reference/imagenet_decode_predictions.html new file mode 100644 index 000000000..bb2e74969 --- /dev/null +++ b/website/reference/imagenet_decode_predictions.html @@ -0,0 +1,180 @@ + + + + + + + + +Decodes the prediction of an ImageNet model. — imagenet_decode_predictions • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Decodes the prediction of an ImageNet model.

    + + +
    imagenet_decode_predictions(preds, top = 5)
    + +

    Arguments

    + + + + + + + + + + +
    preds

    Tensor encoding a batch of predictions.

    top

    integer, how many top-guesses to return.

    + +

    Value

    + +

    List of data frames with variables class_name, class_description, +and score (one data frame per sample in batch input).

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/imagenet_preprocess_input.html b/website/reference/imagenet_preprocess_input.html new file mode 100644 index 000000000..864c2c114 --- /dev/null +++ b/website/reference/imagenet_preprocess_input.html @@ -0,0 +1,175 @@ + + + + + + + + +Preprocesses a tensor encoding a batch of images. — imagenet_preprocess_input • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Preprocesses a tensor encoding a batch of images.

    + + +
    imagenet_preprocess_input(x)
    + +

    Arguments

    + + + + + + +
    x

    input tensor, 4D

    + +

    Value

    + +

    Preprocessed tensor

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/implementation.html b/website/reference/implementation.html new file mode 100644 index 000000000..86b49537e --- /dev/null +++ b/website/reference/implementation.html @@ -0,0 +1,178 @@ + + + + + + + + +Keras implementation — implementation • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Obtain a reference to the Python module used for the implementation of Keras.

    + + +
    implementation()
    + +

    Value

    + +

    Reference to the Python module used for the implementation of Keras.

    + +

    Details

    + +

    There are currently two Python modules which implement Keras:

      +
    • keras ("keras")

    • +
    • tensorflow.contrib.keras ("tensorflow")

    • +
    +

    This function returns a reference to the implementation being currently +used by the keras package. The default implementation is "keras". +You can override this by setting the KERAS_IMPLEMENTATION environment +variable to "tensorflow".

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/initializer_constant.html b/website/reference/initializer_constant.html new file mode 100644 index 000000000..ddec522a4 --- /dev/null +++ b/website/reference/initializer_constant.html @@ -0,0 +1,188 @@ + + + + + + + + +Initializer that generates tensors initialized to a constant value. — initializer_constant • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Initializer that generates tensors initialized to a constant value.

    + + +
    initializer_constant(value = 0)
    + +

    Arguments

    + + + + + + +
    value

    float; the value of the generator tensors.

    + +

    See also

    + +

    Other initializers: initializer_glorot_normal, + initializer_glorot_uniform, + initializer_he_normal, + initializer_he_uniform, + initializer_identity, + initializer_lecun_normal, + initializer_lecun_uniform, + initializer_ones, + initializer_orthogonal, + initializer_random_normal, + initializer_random_uniform, + initializer_truncated_normal, + initializer_variance_scaling, + initializer_zeros

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/initializer_glorot_normal.html b/website/reference/initializer_glorot_normal.html new file mode 100644 index 000000000..1c40c4d91 --- /dev/null +++ b/website/reference/initializer_glorot_normal.html @@ -0,0 +1,198 @@ + + + + + + + + +Glorot normal initializer, also called Xavier normal initializer. — initializer_glorot_normal • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    It draws samples from a truncated normal distribution centered on 0 +with stddev = sqrt(2 / (fan_in + fan_out)) +where fan_in is the number of input units in the weight tensor +and fan_out is the number of output units in the weight tensor.

    + + +
    initializer_glorot_normal(seed = NULL)
    + +

    Arguments

    + + + + + + +
    seed

    Integer used to seed the random generator.

    + +

    References

    + + +

    Glorot & Bengio, AISTATS 2010 http://jmlr.org/proceedings/papers/v9/glorot10a/glorot10a.pdf

    + +

    See also

    + +

    Other initializers: initializer_constant, + initializer_glorot_uniform, + initializer_he_normal, + initializer_he_uniform, + initializer_identity, + initializer_lecun_normal, + initializer_lecun_uniform, + initializer_ones, + initializer_orthogonal, + initializer_random_normal, + initializer_random_uniform, + initializer_truncated_normal, + initializer_variance_scaling, + initializer_zeros

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/initializer_glorot_uniform.html b/website/reference/initializer_glorot_uniform.html new file mode 100644 index 000000000..f0f08a909 --- /dev/null +++ b/website/reference/initializer_glorot_uniform.html @@ -0,0 +1,198 @@ + + + + + + + + +Glorot uniform initializer, also called Xavier uniform initializer. — initializer_glorot_uniform • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    It draws samples from a uniform distribution within -limit, limit +where limit is sqrt(6 / (fan_in + fan_out)) +where fan_in is the number of input units in the weight tensor +and fan_out is the number of output units in the weight tensor.

    + + +
    initializer_glorot_uniform(seed = NULL)
    + +

    Arguments

    + + + + + + +
    seed

    Integer used to seed the random generator.

    + +

    References

    + + +

    Glorot & Bengio, AISTATS 2010 http://jmlr.org/proceedings/papers/v9/glorot10a/glorot10a.pdf

    + +

    See also

    + +

    Other initializers: initializer_constant, + initializer_glorot_normal, + initializer_he_normal, + initializer_he_uniform, + initializer_identity, + initializer_lecun_normal, + initializer_lecun_uniform, + initializer_ones, + initializer_orthogonal, + initializer_random_normal, + initializer_random_uniform, + initializer_truncated_normal, + initializer_variance_scaling, + initializer_zeros

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/initializer_he_normal.html b/website/reference/initializer_he_normal.html new file mode 100644 index 000000000..9d13b0419 --- /dev/null +++ b/website/reference/initializer_he_normal.html @@ -0,0 +1,196 @@ + + + + + + + + +He normal initializer. — initializer_he_normal • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    It draws samples from a truncated normal distribution centered on 0 with +stddev = sqrt(2 / fan_in) where fan_in is the number of input units in +the weight tensor.

    + + +
    initializer_he_normal(seed = NULL)
    + +

    Arguments

    + + + + + + +
    seed

    Integer used to seed the random generator.

    + +

    References

    + +

    He et al., http://arxiv.org/abs/1502.01852

    + +

    See also

    + +

    Other initializers: initializer_constant, + initializer_glorot_normal, + initializer_glorot_uniform, + initializer_he_uniform, + initializer_identity, + initializer_lecun_normal, + initializer_lecun_uniform, + initializer_ones, + initializer_orthogonal, + initializer_random_normal, + initializer_random_uniform, + initializer_truncated_normal, + initializer_variance_scaling, + initializer_zeros

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/initializer_he_uniform.html b/website/reference/initializer_he_uniform.html new file mode 100644 index 000000000..72dac0d1c --- /dev/null +++ b/website/reference/initializer_he_uniform.html @@ -0,0 +1,196 @@ + + + + + + + + +He uniform variance scaling initializer. — initializer_he_uniform • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    It draws samples from a uniform distribution within -limit, limit where +limit`` issqrt(6 / fan_in)wherefan_in` is the number of input units in the +weight tensor.

    + + +
    initializer_he_uniform(seed = NULL)
    + +

    Arguments

    + + + + + + +
    seed

    Integer used to seed the random generator.

    + +

    References

    + +

    He et al., http://arxiv.org/abs/1502.01852

    + +

    See also

    + +

    Other initializers: initializer_constant, + initializer_glorot_normal, + initializer_glorot_uniform, + initializer_he_normal, + initializer_identity, + initializer_lecun_normal, + initializer_lecun_uniform, + initializer_ones, + initializer_orthogonal, + initializer_random_normal, + initializer_random_uniform, + initializer_truncated_normal, + initializer_variance_scaling, + initializer_zeros

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/initializer_identity.html b/website/reference/initializer_identity.html new file mode 100644 index 000000000..ef64c3307 --- /dev/null +++ b/website/reference/initializer_identity.html @@ -0,0 +1,188 @@ + + + + + + + + +Initializer that generates the identity matrix. — initializer_identity • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Only use for square 2D matrices.

    + + +
    initializer_identity(gain = 1)
    + +

    Arguments

    + + + + + + +
    gain

    Multiplicative factor to apply to the identity matrix

    + +

    See also

    + +

    Other initializers: initializer_constant, + initializer_glorot_normal, + initializer_glorot_uniform, + initializer_he_normal, + initializer_he_uniform, + initializer_lecun_normal, + initializer_lecun_uniform, + initializer_ones, + initializer_orthogonal, + initializer_random_normal, + initializer_random_uniform, + initializer_truncated_normal, + initializer_variance_scaling, + initializer_zeros

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/initializer_lecun_normal.html b/website/reference/initializer_lecun_normal.html new file mode 100644 index 000000000..e87395801 --- /dev/null +++ b/website/reference/initializer_lecun_normal.html @@ -0,0 +1,200 @@ + + + + + + + + +LeCun normal initializer. — initializer_lecun_normal • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    It draws samples from a truncated normal distribution centered on 0 with +stddev <- sqrt(1 / fan_in) where fan_in is the number of input units in +the weight tensor..

    + + +
    initializer_lecun_normal(seed = NULL)
    + +

    Arguments

    + + + + + + +
    seed

    A Python integer. Used to seed the random generator.

    + +

    References

    + + + + +

    See also

    + +

    Other initializers: initializer_constant, + initializer_glorot_normal, + initializer_glorot_uniform, + initializer_he_normal, + initializer_he_uniform, + initializer_identity, + initializer_lecun_uniform, + initializer_ones, + initializer_orthogonal, + initializer_random_normal, + initializer_random_uniform, + initializer_truncated_normal, + initializer_variance_scaling, + initializer_zeros

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/initializer_lecun_uniform.html b/website/reference/initializer_lecun_uniform.html new file mode 100644 index 000000000..8148c96d6 --- /dev/null +++ b/website/reference/initializer_lecun_uniform.html @@ -0,0 +1,197 @@ + + + + + + + + +LeCun uniform initializer. — initializer_lecun_uniform • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    It draws samples from a uniform distribution within -limit, limit where +limit is sqrt(3 / fan_in) where fan_in is the number of input units in +the weight tensor.

    + + +
    initializer_lecun_uniform(seed = NULL)
    + +

    Arguments

    + + + + + + +
    seed

    Integer used to seed the random generator.

    + +

    References

    + +

    LeCun 98, Efficient Backprop, +http://yann.lecun.com/exdb/publis/pdf/lecun-98b.pdf

    + +

    See also

    + +

    Other initializers: initializer_constant, + initializer_glorot_normal, + initializer_glorot_uniform, + initializer_he_normal, + initializer_he_uniform, + initializer_identity, + initializer_lecun_normal, + initializer_ones, + initializer_orthogonal, + initializer_random_normal, + initializer_random_uniform, + initializer_truncated_normal, + initializer_variance_scaling, + initializer_zeros

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/initializer_ones.html b/website/reference/initializer_ones.html new file mode 100644 index 000000000..a82733ac1 --- /dev/null +++ b/website/reference/initializer_ones.html @@ -0,0 +1,178 @@ + + + + + + + + +Initializer that generates tensors initialized to 1. — initializer_ones • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Initializer that generates tensors initialized to 1.

    + + +
    initializer_ones()
    + +

    See also

    + +

    Other initializers: initializer_constant, + initializer_glorot_normal, + initializer_glorot_uniform, + initializer_he_normal, + initializer_he_uniform, + initializer_identity, + initializer_lecun_normal, + initializer_lecun_uniform, + initializer_orthogonal, + initializer_random_normal, + initializer_random_uniform, + initializer_truncated_normal, + initializer_variance_scaling, + initializer_zeros

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/initializer_orthogonal.html b/website/reference/initializer_orthogonal.html new file mode 100644 index 000000000..61fba3baf --- /dev/null +++ b/website/reference/initializer_orthogonal.html @@ -0,0 +1,199 @@ + + + + + + + + +Initializer that generates a random orthogonal matrix. — initializer_orthogonal • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Initializer that generates a random orthogonal matrix.

    + + +
    initializer_orthogonal(gain = 1, seed = NULL)
    + +

    Arguments

    + + + + + + + + + + +
    gain

    Multiplicative factor to apply to the orthogonal matrix.

    seed

    Integer used to seed the random generator.

    + +

    References

    + + +

    Saxe et al., http://arxiv.org/abs/1312.6120

    + +

    See also

    + +

    Other initializers: initializer_constant, + initializer_glorot_normal, + initializer_glorot_uniform, + initializer_he_normal, + initializer_he_uniform, + initializer_identity, + initializer_lecun_normal, + initializer_lecun_uniform, + initializer_ones, + initializer_random_normal, + initializer_random_uniform, + initializer_truncated_normal, + initializer_variance_scaling, + initializer_zeros

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/initializer_random_normal.html b/website/reference/initializer_random_normal.html new file mode 100644 index 000000000..b06f4abc7 --- /dev/null +++ b/website/reference/initializer_random_normal.html @@ -0,0 +1,196 @@ + + + + + + + + +Initializer that generates tensors with a normal distribution. — initializer_random_normal • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Initializer that generates tensors with a normal distribution.

    + + +
    initializer_random_normal(mean = 0, stddev = 0.05, seed = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + +
    mean

    Mean of the random values to generate.

    stddev

    Standard deviation of the random values to generate.

    seed

    Integer used to seed the random generator.

    + +

    See also

    + +

    Other initializers: initializer_constant, + initializer_glorot_normal, + initializer_glorot_uniform, + initializer_he_normal, + initializer_he_uniform, + initializer_identity, + initializer_lecun_normal, + initializer_lecun_uniform, + initializer_ones, + initializer_orthogonal, + initializer_random_uniform, + initializer_truncated_normal, + initializer_variance_scaling, + initializer_zeros

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/initializer_random_uniform.html b/website/reference/initializer_random_uniform.html new file mode 100644 index 000000000..42780b5c5 --- /dev/null +++ b/website/reference/initializer_random_uniform.html @@ -0,0 +1,196 @@ + + + + + + + + +Initializer that generates tensors with a uniform distribution. — initializer_random_uniform • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Initializer that generates tensors with a uniform distribution.

    + + +
    initializer_random_uniform(minval = -0.05, maxval = 0.05, seed = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + +
    minval

    Lower bound of the range of random values to generate.

    maxval

    Upper bound of the range of random values to generate. Defaults to 1 for float types.

    seed

    seed

    + +

    See also

    + +

    Other initializers: initializer_constant, + initializer_glorot_normal, + initializer_glorot_uniform, + initializer_he_normal, + initializer_he_uniform, + initializer_identity, + initializer_lecun_normal, + initializer_lecun_uniform, + initializer_ones, + initializer_orthogonal, + initializer_random_normal, + initializer_truncated_normal, + initializer_variance_scaling, + initializer_zeros

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/initializer_truncated_normal.html b/website/reference/initializer_truncated_normal.html new file mode 100644 index 000000000..ba509ca4a --- /dev/null +++ b/website/reference/initializer_truncated_normal.html @@ -0,0 +1,199 @@ + + + + + + + + +Initializer that generates a truncated normal distribution. — initializer_truncated_normal • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    These values are similar to values from an initializer_random_normal() +except that values more than two standard deviations from the mean +are discarded and re-drawn. This is the recommended initializer for +neural network weights and filters.

    + + +
    initializer_truncated_normal(mean = 0, stddev = 0.05, seed = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + +
    mean

    Mean of the random values to generate.

    stddev

    Standard deviation of the random values to generate.

    seed

    Integer used to seed the random generator.

    + +

    See also

    + +

    Other initializers: initializer_constant, + initializer_glorot_normal, + initializer_glorot_uniform, + initializer_he_normal, + initializer_he_uniform, + initializer_identity, + initializer_lecun_normal, + initializer_lecun_uniform, + initializer_ones, + initializer_orthogonal, + initializer_random_normal, + initializer_random_uniform, + initializer_variance_scaling, + initializer_zeros

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/initializer_variance_scaling.html b/website/reference/initializer_variance_scaling.html new file mode 100644 index 000000000..5bc578e9f --- /dev/null +++ b/website/reference/initializer_variance_scaling.html @@ -0,0 +1,213 @@ + + + + + + + + +Initializer capable of adapting its scale to the shape of weights. — initializer_variance_scaling • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    With distribution="normal", samples are drawn from a truncated normal +distribution centered on zero, with stddev = sqrt(scale / n) where n is:

      +
    • number of input units in the weight tensor, if mode = "fan_in"

    • +
    • number of output units, if mode = "fan_out"

    • +
    • average of the numbers of input and output units, if mode = "fan_avg"

    • +
    + + +
    initializer_variance_scaling(scale = 1, mode = c("fan_in", "fan_out",
    +  "fan_avg"), distribution = c("normal", "uniform"), seed = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + +
    scale

    Scaling factor (positive float).

    mode

    One of "fan_in", "fan_out", "fan_avg".

    distribution

    One of "normal", "uniform"

    seed

    Integer used to seed the random generator.

    + +

    Details

    + +

    With distribution="uniform", samples are drawn from a uniform distribution +within -limit, limit, with limit = sqrt(3 * scale / n).

    + +

    See also

    + +

    Other initializers: initializer_constant, + initializer_glorot_normal, + initializer_glorot_uniform, + initializer_he_normal, + initializer_he_uniform, + initializer_identity, + initializer_lecun_normal, + initializer_lecun_uniform, + initializer_ones, + initializer_orthogonal, + initializer_random_normal, + initializer_random_uniform, + initializer_truncated_normal, + initializer_zeros

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/initializer_zeros.html b/website/reference/initializer_zeros.html new file mode 100644 index 000000000..559e23ced --- /dev/null +++ b/website/reference/initializer_zeros.html @@ -0,0 +1,178 @@ + + + + + + + + +Initializer that generates tensors initialized to 0. — initializer_zeros • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Initializer that generates tensors initialized to 0.

    + + +
    initializer_zeros()
    + +

    See also

    + +

    Other initializers: initializer_constant, + initializer_glorot_normal, + initializer_glorot_uniform, + initializer_he_normal, + initializer_he_uniform, + initializer_identity, + initializer_lecun_normal, + initializer_lecun_uniform, + initializer_ones, + initializer_orthogonal, + initializer_random_normal, + initializer_random_uniform, + initializer_truncated_normal, + initializer_variance_scaling

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/install_keras.html b/website/reference/install_keras.html new file mode 100644 index 000000000..6d73c66a7 --- /dev/null +++ b/website/reference/install_keras.html @@ -0,0 +1,269 @@ + + + + + + + + +Install Keras and the TensorFlow backend — install_keras • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Keras and TensorFlow will be installed into an "r-tensorflow" virtual or conda +environment. Note that "virtualenv" is not available on Windows (as this isn't +supported by TensorFlow).

    + + +
    install_keras(method = c("virtualenv", "conda"), conda = "auto",
    +  tensorflow = "default", extra_packages = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + +
    method

    Installation method ("virtualenv" or "conda")

    conda

    Path to conda executable (or "auto" to find conda using the PATH +and other conventional install locations).

    tensorflow

    TensorFlow version to install. Specify "default" to install +the CPU version of the latest release. Specify "gpu" to install the GPU +version of the latest release.

    +

    You can also provide a full major.minor.patch specification (e.g. "1.1.0"), +appending "-gpu" if you want the GPU version (e.g. "1.1.0-gpu").

    +

    Alternatively, you can provide the full URL to an installer binary (e.g. +for a nightly binary).

    extra_packages

    Additional PyPI packages to install along with +Keras and TensorFlow.

    + +

    GPU Installation

    + + +

    Keras and TensorFlow can be configured to run on either CPUs or GPUs. The CPU +version is much easier to install and configure so is the best starting place +especially when you are first learning how to use Keras. Here's the guidance +on CPU vs. GPU versions from the TensorFlow website:

      +
    • TensorFlow with CPU support only. If your system does not have a NVIDIA® GPU, +you must install this version. Note that this version of TensorFlow is typically +much easier to install, so even if you have an NVIDIA GPU, we recommend installing +this version first.

    • +
    • TensorFlow with GPU support. TensorFlow programs typically run significantly +faster on a GPU than on a CPU. Therefore, if your system has a NVIDIA® GPU meeting +all prerequisites and you need to run performance-critical applications, you should +ultimately install this version.

    • +
    +

    To install the GPU version:

      +
    1. Ensure that you have met all installation prerequisites including installation +of the CUDA and cuDNN libraries as described in TensorFlow GPU Prerequistes.

    2. +
    3. Pass tensorflow = "gpu" to install_keras(). For example:

        install_keras(tensorflow = "gpu")
      +
    4. +
    + +

    Windows Installation

    + + +

    The only supported installation method on Windows is "conda". This means that you +should install Anaconda 3.x for Windows prior to installing Keras.

    + +

    Custom Installation

    + + +

    Installing Keras and TensorFlow using install_keras() isn't required +to use the Keras R package. You can do a custom installation of Keras (and +desired backend) as described on the Keras website +and the Keras R package will find and use that version.

    +

    See the documentation on custom installations +for additional information on how version of Keras and TensorFlow are located +by the Keras package.

    + +

    Additional Packages

    + + +

    If you wish to add additional PyPI packages to your Keras / TensorFlow environment you +can either specify the packages in the extra_packages argument of install_keras(), +or alternatively install them into an existing environment using the +install_tensorflow_extras() function.

    + + +

    Examples

    +
    # NOT RUN {
    +# default installation
    +library(keras)
    +install_keras()
    +
    +# install using a conda environment (default is virtualenv)
    +install_keras(method = "conda")
    +
    +# install with GPU version of TensorFlow
    +# (NOTE: only do this if you have an NVIDIA GPU + CUDA!)
    +install_keras(tensorflow = "gpu")
    +
    +# install a specific version of TensorFlow
    +install_keras(tensorflow = "1.2.1")
    +install_keras(tensorflow = "1.2.1-gpu")
    +
    +# }
    +
    +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/is_keras_available.html b/website/reference/is_keras_available.html new file mode 100644 index 000000000..00e3966a7 --- /dev/null +++ b/website/reference/is_keras_available.html @@ -0,0 +1,195 @@ + + + + + + + + +Check if Keras is Available — is_keras_available • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Probe to see whether the Keras python package is available in the current +system environment.

    + + +
    is_keras_available(version = NULL)
    + +

    Arguments

    + + + + + + +
    version

    Minimum required version of Keras (defaults to NULL, no +required version).

    + +

    Value

    + +

    Logical indicating whether Keras (or the specified minimum version of +Keras) is available.

    + + +

    Examples

    +
    # NOT RUN {
    +# testthat utilty for skipping tests when Keras isn't available
    +skip_if_no_keras <- function(version = NULL) {
    +  if (!is_keras_available(version))
    +    skip("Required keras version not available for testing")
    +}
    +
    +# use the function within a test
    +test_that("keras function works correctly", {
    +  skip_if_no_keras()
    +  # test code here
    +})
    +# }
    +
    +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/keras_model.html b/website/reference/keras_model.html new file mode 100644 index 000000000..6041aec89 --- /dev/null +++ b/website/reference/keras_model.html @@ -0,0 +1,213 @@ + + + + + + + + +Keras Model — keras_model • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    A model is a directed acyclic graph of layers.

    + + +
    keras_model(inputs, outputs = NULL)
    + +

    Arguments

    + + + + + + + + + + +
    inputs

    Input layer

    outputs

    Output layer

    + +

    See also

    + +

    Other model functions: compile, + evaluate_generator, evaluate, + fit_generator, fit, + get_config, get_layer, + keras_model_sequential, + pop_layer, + predict.keras.engine.training.Model, + predict_generator, + predict_on_batch, + predict_proba, + summary.keras.engine.training.Model, + train_on_batch

    + + +

    Examples

    +
    # NOT RUN {
    +library(keras)
    +
    +# input layer
    +inputs <- layer_input(shape = c(784))
    +
    +# outputs compose input + dense layers
    +predictions <- inputs %>%
    +  layer_dense(units = 64, activation = 'relu') %>%
    +  layer_dense(units = 64, activation = 'relu') %>%
    +  layer_dense(units = 10, activation = 'softmax')
    +
    +# create and compile model
    +model <- keras_model(inputs = inputs, outputs = predictions)
    +model %>% compile(
    +  optimizer = 'rmsprop',
    +  loss = 'categorical_crossentropy',
    +  metrics = c('accuracy')
    +)
    +# }
    +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/keras_model_sequential.html b/website/reference/keras_model_sequential.html new file mode 100644 index 000000000..b0c8738ea --- /dev/null +++ b/website/reference/keras_model_sequential.html @@ -0,0 +1,218 @@ + + + + + + + + +Keras Model composed of a linear stack of layers — keras_model_sequential • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Keras Model composed of a linear stack of layers

    + + +
    keras_model_sequential(layers = NULL, name = NULL)
    + +

    Arguments

    + + + + + + + + + + +
    layers

    List of layers to add to the model

    name

    Name of model

    + +

    Note

    + +

    The first layer passed to a Sequential model should have a defined input +shape. What that means is that it should have received an input_shape or +batch_input_shape argument, or for some type of layers (recurrent, +Dense...) an input_dim argument.

    + +

    See also

    + +

    Other model functions: compile, + evaluate_generator, evaluate, + fit_generator, fit, + get_config, get_layer, + keras_model, pop_layer, + predict.keras.engine.training.Model, + predict_generator, + predict_on_batch, + predict_proba, + summary.keras.engine.training.Model, + train_on_batch

    + + +

    Examples

    +
    # NOT RUN {
    +
    +library(keras)
    +
    +model <- keras_model_sequential()
    +model %>%
    +  layer_dense(units = 32, input_shape = c(784)) %>%
    +  layer_activation('relu') %>%
    +  layer_dense(units = 10) %>%
    +  layer_activation('softmax')
    +
    +model %>% compile(
    +  optimizer = 'rmsprop',
    +  loss = 'categorical_crossentropy',
    +  metrics = c('accuracy')
    +)
    +# }
    +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_activation.html b/website/reference/layer_activation.html new file mode 100644 index 000000000..1701a07c7 --- /dev/null +++ b/website/reference/layer_activation.html @@ -0,0 +1,228 @@ + + + + + + + + +Apply an activation function to an output. — layer_activation • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Apply an activation function to an output.

    + + +
    layer_activation(object, activation, input_shape = NULL,
    +  batch_input_shape = NULL, batch_size = NULL, dtype = NULL,
    +  name = NULL, trainable = NULL, weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    activation

    Name of activation function to use. If you don't specify +anything, no activation is applied (ie. "linear" activation: a(x) = x).

    input_shape

    Input shape (list of integers, does not include the +samples axis) which is required when using this layer as the first layer in +a model.

    batch_input_shape

    Shapes, including the batch size. For instance, +batch_input_shape=c(10, 32) indicates that the expected input will be +batches of 10 32-dimensional vectors. batch_input_shape=list(NULL, 32) +indicates batches of an arbitrary number of 32-dimensional vectors.

    batch_size

    Fixed batch size for layer

    dtype

    The data type expected by the input, as a string (float32, +float64, int32...)

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    See also

    + +

    Other core layers: layer_activity_regularization, + layer_dense, layer_dropout, + layer_flatten, layer_input, + layer_lambda, layer_masking, + layer_permute, + layer_repeat_vector, + layer_reshape

    +

    Other activation layers: layer_activation_elu, + layer_activation_leaky_relu, + layer_activation_parametric_relu, + layer_activation_thresholded_relu

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_activation_elu.html b/website/reference/layer_activation_elu.html new file mode 100644 index 000000000..9b604b260 --- /dev/null +++ b/website/reference/layer_activation_elu.html @@ -0,0 +1,222 @@ + + + + + + + + +Exponential Linear Unit. — layer_activation_elu • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    It follows: f(x) = alpha * (exp(x) - 1.0) for x < 0, f(x) = x for `x

    +

    = 0`.

    + + +
    layer_activation_elu(object, alpha = 1, input_shape = NULL,
    +  batch_input_shape = NULL, batch_size = NULL, dtype = NULL,
    +  name = NULL, trainable = NULL, weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    alpha

    Scale for the negative factor.

    input_shape

    Input shape (list of integers, does not include the +samples axis) which is required when using this layer as the first layer in +a model.

    batch_input_shape

    Shapes, including the batch size. For instance, +batch_input_shape=c(10, 32) indicates that the expected input will be +batches of 10 32-dimensional vectors. batch_input_shape=list(NULL, 32) +indicates batches of an arbitrary number of 32-dimensional vectors.

    batch_size

    Fixed batch size for layer

    dtype

    The data type expected by the input, as a string (float32, +float64, int32...)

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    See also

    + +

    Fast and Accurate Deep Network Learning by Exponential Linear Units(ELUs).

    +

    Other activation layers: layer_activation_leaky_relu, + layer_activation_parametric_relu, + layer_activation_thresholded_relu, + layer_activation

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_activation_leaky_relu.html b/website/reference/layer_activation_leaky_relu.html new file mode 100644 index 000000000..9e4ae3953 --- /dev/null +++ b/website/reference/layer_activation_leaky_relu.html @@ -0,0 +1,222 @@ + + + + + + + + +Leaky version of a Rectified Linear Unit. — layer_activation_leaky_relu • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Allows a small gradient when the unit is not active: f(x) = alpha * x for +x < 0, f(x) = x for x >= 0.

    + + +
    layer_activation_leaky_relu(object, alpha = 0.3, input_shape = NULL,
    +  batch_input_shape = NULL, batch_size = NULL, dtype = NULL,
    +  name = NULL, trainable = NULL, weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    alpha

    float >= 0. Negative slope coefficient.

    input_shape

    Input shape (list of integers, does not include the +samples axis) which is required when using this layer as the first layer in +a model.

    batch_input_shape

    Shapes, including the batch size. For instance, +batch_input_shape=c(10, 32) indicates that the expected input will be +batches of 10 32-dimensional vectors. batch_input_shape=list(NULL, 32) +indicates batches of an arbitrary number of 32-dimensional vectors.

    batch_size

    Fixed batch size for layer

    dtype

    The data type expected by the input, as a string (float32, +float64, int32...)

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    See also

    + +

    Rectifier Nonlinearities Improve Neural Network AcousticModels.

    +

    Other activation layers: layer_activation_elu, + layer_activation_parametric_relu, + layer_activation_thresholded_relu, + layer_activation

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_activation_parametric_relu.html b/website/reference/layer_activation_parametric_relu.html new file mode 100644 index 000000000..5adc56d89 --- /dev/null +++ b/website/reference/layer_activation_parametric_relu.html @@ -0,0 +1,239 @@ + + + + + + + + +Parametric Rectified Linear Unit. — layer_activation_parametric_relu • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    It follows: f(x) = alpha * x`` forx < 0,f(x) = xforx >= 0`, where +alpha is a learned array with the same shape as x.

    + + +
    layer_activation_parametric_relu(object, alpha_initializer = "zeros",
    +  alpha_regularizer = NULL, alpha_constraint = NULL, shared_axes = NULL,
    +  input_shape = NULL, batch_input_shape = NULL, batch_size = NULL,
    +  dtype = NULL, name = NULL, trainable = NULL, weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    alpha_initializer

    Initializer function for the weights.

    alpha_regularizer

    Regularizer for the weights.

    alpha_constraint

    Constraint for the weights.

    shared_axes

    The axes along which to share learnable parameters for the +activation function. For example, if the incoming feature maps are from a +2D convolution with output shape (batch, height, width, channels), and you +wish to share parameters across space so that each filter only has one set +of parameters, set shared_axes=c(1, 2).

    input_shape

    Input shape (list of integers, does not include the +samples axis) which is required when using this layer as the first layer in +a model.

    batch_input_shape

    Shapes, including the batch size. For instance, +batch_input_shape=c(10, 32) indicates that the expected input will be +batches of 10 32-dimensional vectors. batch_input_shape=list(NULL, 32) +indicates batches of an arbitrary number of 32-dimensional vectors.

    batch_size

    Fixed batch size for layer

    dtype

    The data type expected by the input, as a string (float32, +float64, int32...)

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    See also

    + +

    Delving Deep into Rectifiers: Surpassing Human-Level Performance onImageNet Classification.

    +

    Other activation layers: layer_activation_elu, + layer_activation_leaky_relu, + layer_activation_thresholded_relu, + layer_activation

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_activation_thresholded_relu.html b/website/reference/layer_activation_thresholded_relu.html new file mode 100644 index 000000000..6de937d62 --- /dev/null +++ b/website/reference/layer_activation_thresholded_relu.html @@ -0,0 +1,221 @@ + + + + + + + + +Thresholded Rectified Linear Unit. — layer_activation_thresholded_relu • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    It follows: f(x) = x for x > theta, f(x) = 0 otherwise.

    + + +
    layer_activation_thresholded_relu(object, theta = 1, input_shape = NULL,
    +  batch_input_shape = NULL, batch_size = NULL, dtype = NULL,
    +  name = NULL, trainable = NULL, weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    theta

    float >= 0. Threshold location of activation.

    input_shape

    Input shape (list of integers, does not include the +samples axis) which is required when using this layer as the first layer in +a model.

    batch_input_shape

    Shapes, including the batch size. For instance, +batch_input_shape=c(10, 32) indicates that the expected input will be +batches of 10 32-dimensional vectors. batch_input_shape=list(NULL, 32) +indicates batches of an arbitrary number of 32-dimensional vectors.

    batch_size

    Fixed batch size for layer

    dtype

    The data type expected by the input, as a string (float32, +float64, int32...)

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    See also

    + +

    Zero-bias autoencoders and the benefits of co-adapting features.

    +

    Other activation layers: layer_activation_elu, + layer_activation_leaky_relu, + layer_activation_parametric_relu, + layer_activation

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_activity_regularization.html b/website/reference/layer_activity_regularization.html new file mode 100644 index 000000000..eaa6606b2 --- /dev/null +++ b/website/reference/layer_activity_regularization.html @@ -0,0 +1,241 @@ + + + + + + + + +Layer that applies an update to the cost function based input activity. — layer_activity_regularization • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Layer that applies an update to the cost function based input activity.

    + + +
    layer_activity_regularization(object, l1 = 0, l2 = 0, input_shape = NULL,
    +  batch_input_shape = NULL, batch_size = NULL, dtype = NULL,
    +  name = NULL, trainable = NULL, weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    l1

    L1 regularization factor (positive float).

    l2

    L2 regularization factor (positive float).

    input_shape

    Dimensionality of the input (integer) not including the +samples axis. This argument is required when using this layer as the first +layer in a model.

    batch_input_shape

    Shapes, including the batch size. For instance, +batch_input_shape=c(10, 32) indicates that the expected input will be +batches of 10 32-dimensional vectors. batch_input_shape=list(NULL, 32) +indicates batches of an arbitrary number of 32-dimensional vectors.

    batch_size

    Fixed batch size for layer

    dtype

    The data type expected by the input, as a string (float32, +float64, int32...)

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    Input shape

    + +

    Arbitrary. Use the keyword argument input_shape (list +of integers, does not include the samples axis) when using this layer as +the first layer in a model.

    + +

    Output shape

    + +

    Same shape as input.

    + +

    See also

    + +

    Other core layers: layer_activation, + layer_dense, layer_dropout, + layer_flatten, layer_input, + layer_lambda, layer_masking, + layer_permute, + layer_repeat_vector, + layer_reshape

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_add.html b/website/reference/layer_add.html new file mode 100644 index 000000000..c0a702585 --- /dev/null +++ b/website/reference/layer_add.html @@ -0,0 +1,184 @@ + + + + + + + + +Layer that adds a list of inputs. — layer_add • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    It takes as input a list of tensors, all of the same shape, and returns a +single tensor (also of the same shape).

    + + +
    layer_add(inputs)
    + +

    Arguments

    + + + + + + +
    inputs

    A list of input tensors (at least 2).

    + +

    Value

    + +

    A tensor, the sum of the inputs.

    + +

    See also

    + +

    Other merge layers: layer_average, + layer_concatenate, layer_dot, + layer_maximum, layer_multiply

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_alpha_dropout.html b/website/reference/layer_alpha_dropout.html new file mode 100644 index 000000000..3b15cdc84 --- /dev/null +++ b/website/reference/layer_alpha_dropout.html @@ -0,0 +1,221 @@ + + + + + + + + +Applies Alpha Dropout to the input. — layer_alpha_dropout • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Alpha Dropout is a dropout that keeps mean and variance of inputs to their +original values, in order to ensure the self-normalizing property even after +this dropout.

    + + +
    layer_alpha_dropout(object, rate, noise_shape = NULL, seed = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    rate

    float, drop probability (as with layer_dropout()). The +multiplicative noise will have standard deviation sqrt(rate / (1 - rate)).

    noise_shape

    Noise shape

    seed

    An integer to use as random seed.

    + +

    Details

    + +

    Alpha Dropout fits well to Scaled Exponential Linear Units by randomly +setting activations to the negative saturation value.

    + +

    Input shape

    + +

    Arbitrary. Use the keyword argument input_shape (list +of integers, does not include the samples axis) when using this layer as +the first layer in a model.

    + +

    Output shape

    + +

    Same shape as input.

    + +

    References

    + + + + +

    See also

    + +

    Other noise layers: layer_gaussian_dropout, + layer_gaussian_noise

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_average.html b/website/reference/layer_average.html new file mode 100644 index 000000000..29a12dd5c --- /dev/null +++ b/website/reference/layer_average.html @@ -0,0 +1,184 @@ + + + + + + + + +Layer that averages a list of inputs. — layer_average • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    It takes as input a list of tensors, all of the same shape, and returns a +single tensor (also of the same shape).

    + + +
    layer_average(inputs)
    + +

    Arguments

    + + + + + + +
    inputs

    A list of input tensors (at least 2).

    + +

    Value

    + +

    A tensor, the average of the inputs.

    + +

    See also

    + +

    Other merge layers: layer_add, + layer_concatenate, layer_dot, + layer_maximum, layer_multiply

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_average_pooling_1d.html b/website/reference/layer_average_pooling_1d.html new file mode 100644 index 000000000..f0dbcc632 --- /dev/null +++ b/website/reference/layer_average_pooling_1d.html @@ -0,0 +1,230 @@ + + + + + + + + +Average pooling for temporal data. — layer_average_pooling_1d • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Average pooling for temporal data.

    + + +
    layer_average_pooling_1d(object, pool_size = 2L, strides = NULL,
    +  padding = "valid", batch_size = NULL, name = NULL, trainable = NULL,
    +  weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    pool_size

    Integer, size of the max pooling windows.

    strides

    Integer, or NULL. Factor by which to downscale. E.g. 2 will +halve the input. If NULL, it will default to pool_size.

    padding

    One of "valid" or "same" (case-insensitive).

    batch_size

    Fixed batch size for layer

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    Input shape

    + +

    3D tensor with shape: (batch_size, steps, features).

    + +

    Output shape

    + +

    3D tensor with shape: (batch_size, downsampled_steps, features).

    + +

    See also

    + +

    Other pooling layers: layer_average_pooling_2d, + layer_average_pooling_3d, + layer_global_average_pooling_1d, + layer_global_average_pooling_2d, + layer_global_average_pooling_3d, + layer_global_max_pooling_1d, + layer_global_max_pooling_2d, + layer_global_max_pooling_3d, + layer_max_pooling_1d, + layer_max_pooling_2d, + layer_max_pooling_3d

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_average_pooling_2d.html b/website/reference/layer_average_pooling_2d.html new file mode 100644 index 000000000..09572f05d --- /dev/null +++ b/website/reference/layer_average_pooling_2d.html @@ -0,0 +1,249 @@ + + + + + + + + +Average pooling operation for spatial data. — layer_average_pooling_2d • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Average pooling operation for spatial data.

    + + +
    layer_average_pooling_2d(object, pool_size = c(2L, 2L), strides = NULL,
    +  padding = "valid", data_format = NULL, batch_size = NULL, name = NULL,
    +  trainable = NULL, weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    pool_size

    integer or list of 2 integers, factors by which to downscale +(vertical, horizontal). (2, 2) will halve the input in both spatial +dimension. If only one integer is specified, the same window length will be +used for both dimensions.

    strides

    Integer, list of 2 integers, or NULL. Strides values. If NULL, +it will default to pool_size.

    padding

    One of "valid" or "same" (case-insensitive).

    data_format

    A string, one of channels_last (default) or +channels_first. The ordering of the dimensions in the inputs. +channels_last corresponds to inputs with shape (batch, height, width, channels) while channels_first corresponds to inputs with shape (batch, channels, height, width). It defaults to the image_data_format value +found in your Keras config file at ~/.keras/keras.json. If you never set +it, then it will be "channels_last".

    batch_size

    Fixed batch size for layer

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    Input shape

    + + +
      +
    • If data_format='channels_last': 4D tensor with shape: (batch_size, rows, cols, channels)

    • +
    • If data_format='channels_first': 4D tensor with shape: (batch_size, channels, rows, cols)

    • +
    + +

    Output shape

    + + +
      +
    • If data_format='channels_last': 4D tensor with shape: (batch_size, pooled_rows, pooled_cols, channels)

    • +
    • If data_format='channels_first': 4D tensor with shape: (batch_size, channels, pooled_rows, pooled_cols)

    • +
    + +

    See also

    + +

    Other pooling layers: layer_average_pooling_1d, + layer_average_pooling_3d, + layer_global_average_pooling_1d, + layer_global_average_pooling_2d, + layer_global_average_pooling_3d, + layer_global_max_pooling_1d, + layer_global_max_pooling_2d, + layer_global_max_pooling_3d, + layer_max_pooling_1d, + layer_max_pooling_2d, + layer_max_pooling_3d

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_average_pooling_3d.html b/website/reference/layer_average_pooling_3d.html new file mode 100644 index 000000000..1250c63f8 --- /dev/null +++ b/website/reference/layer_average_pooling_3d.html @@ -0,0 +1,248 @@ + + + + + + + + +Average pooling operation for 3D data (spatial or spatio-temporal). — layer_average_pooling_3d • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Average pooling operation for 3D data (spatial or spatio-temporal).

    + + +
    layer_average_pooling_3d(object, pool_size = c(2L, 2L, 2L), strides = NULL,
    +  padding = "valid", data_format = NULL, batch_size = NULL, name = NULL,
    +  trainable = NULL, weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    pool_size

    list of 3 integers, factors by which to downscale (dim1, +dim2, dim3). (2, 2, 2) will halve the size of the 3D input in each +dimension.

    strides

    list of 3 integers, or NULL. Strides values.

    padding

    One of "valid" or "same" (case-insensitive).

    data_format

    A string, one of channels_last (default) or +channels_first. The ordering of the dimensions in the inputs. +channels_last corresponds to inputs with shape (batch, spatial_dim1, spatial_dim2, spatial_dim3, channels) while channels_first corresponds +to inputs with shape (batch, channels, spatial_dim1, spatial_dim2, spatial_dim3). It defaults to the image_data_format value found in your +Keras config file at ~/.keras/keras.json. If you never set it, then it +will be "channels_last".

    batch_size

    Fixed batch size for layer

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    Input shape

    + + +
      +
    • If data_format='channels_last': 5D tensor with shape: (batch_size, spatial_dim1, spatial_dim2, spatial_dim3, channels)

    • +
    • If data_format='channels_first': 5D tensor with shape: (batch_size, channels, spatial_dim1, spatial_dim2, spatial_dim3)

    • +
    + +

    Output shape

    + + +
      +
    • If data_format='channels_last': 5D tensor with shape: (batch_size, pooled_dim1, pooled_dim2, pooled_dim3, channels)

    • +
    • If data_format='channels_first': 5D tensor with shape: (batch_size, channels, pooled_dim1, pooled_dim2, pooled_dim3)

    • +
    + +

    See also

    + +

    Other pooling layers: layer_average_pooling_1d, + layer_average_pooling_2d, + layer_global_average_pooling_1d, + layer_global_average_pooling_2d, + layer_global_average_pooling_3d, + layer_global_max_pooling_1d, + layer_global_max_pooling_2d, + layer_global_max_pooling_3d, + layer_max_pooling_1d, + layer_max_pooling_2d, + layer_max_pooling_3d

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_batch_normalization.html b/website/reference/layer_batch_normalization.html new file mode 100644 index 000000000..49df76aeb --- /dev/null +++ b/website/reference/layer_batch_normalization.html @@ -0,0 +1,294 @@ + + + + + + + + +Batch normalization layer (Ioffe and Szegedy, 2014). — layer_batch_normalization • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Normalize the activations of the previous layer at each batch, i.e. applies a +transformation that maintains the mean activation close to 0 and the +activation standard deviation close to 1.

    + + +
    layer_batch_normalization(object, axis = -1L, momentum = 0.99,
    +  epsilon = 0.001, center = TRUE, scale = TRUE,
    +  beta_initializer = "zeros", gamma_initializer = "ones",
    +  moving_mean_initializer = "zeros", moving_variance_initializer = "ones",
    +  beta_regularizer = NULL, gamma_regularizer = NULL,
    +  beta_constraint = NULL, gamma_constraint = NULL, input_shape = NULL,
    +  batch_input_shape = NULL, batch_size = NULL, dtype = NULL,
    +  name = NULL, trainable = NULL, weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    axis

    Integer, the axis that should be normalized (typically the +features axis). For instance, after a Conv2D layer with +data_format="channels_first", set axis=1 in BatchNormalization.

    momentum

    Momentum for the moving average.

    epsilon

    Small float added to variance to avoid dividing by zero.

    center

    If TRUE, add offset of beta to normalized tensor. If FALSE, +beta is ignored.

    scale

    If TRUE, multiply by gamma. If FALSE, gamma is not used. +When the next layer is linear (also e.g. nn.relu), this can be disabled +since the scaling will be done by the next layer.

    beta_initializer

    Initializer for the beta weight.

    gamma_initializer

    Initializer for the gamma weight.

    moving_mean_initializer

    Initializer for the moving mean.

    moving_variance_initializer

    Initializer for the moving variance.

    beta_regularizer

    Optional regularizer for the beta weight.

    gamma_regularizer

    Optional regularizer for the gamma weight.

    beta_constraint

    Optional constraint for the beta weight.

    gamma_constraint

    Optional constraint for the gamma weight.

    input_shape

    Dimensionality of the input (integer) not including the +samples axis. This argument is required when using this layer as the first +layer in a model.

    batch_input_shape

    Shapes, including the batch size. For instance, +batch_input_shape=c(10, 32) indicates that the expected input will be +batches of 10 32-dimensional vectors. batch_input_shape=list(NULL, 32) +indicates batches of an arbitrary number of 32-dimensional vectors.

    batch_size

    Fixed batch size for layer

    dtype

    The data type expected by the input, as a string (float32, +float64, int32...)

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    Input shape

    + +

    Arbitrary. Use the keyword argument input_shape (list +of integers, does not include the samples axis) when using this layer as +the first layer in a model.

    + +

    Output shape

    + +

    Same shape as input.

    + +

    References

    + + + + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_concatenate.html b/website/reference/layer_concatenate.html new file mode 100644 index 000000000..6ba660d0c --- /dev/null +++ b/website/reference/layer_concatenate.html @@ -0,0 +1,189 @@ + + + + + + + + +Layer that concatenates a list of inputs. — layer_concatenate • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    It takes as input a list of tensors, all of the same shape expect for the +concatenation axis, and returns a single tensor, the concatenation of all +inputs.

    + + +
    layer_concatenate(inputs, axis = -1L)
    + +

    Arguments

    + + + + + + + + + + +
    inputs

    A list of input tensors (at least 2).

    axis

    Concatenation axis.

    + +

    Value

    + +

    A tensor, the concatenation of the inputs alongside axis axis.

    + +

    See also

    + +

    Other merge layers: layer_add, + layer_average, layer_dot, + layer_maximum, layer_multiply

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_conv_1d.html b/website/reference/layer_conv_1d.html new file mode 100644 index 000000000..8579baaff --- /dev/null +++ b/website/reference/layer_conv_1d.html @@ -0,0 +1,323 @@ + + + + + + + + +1D convolution layer (e.g. temporal convolution). — layer_conv_1d • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    This layer creates a convolution kernel that is convolved with the layer +input over a single spatial (or temporal) dimension to produce a tensor of +outputs. If use_bias is TRUE, a bias vector is created and added to the +outputs. Finally, if activation is not NULL, it is applied to the outputs +as well. When using this layer as the first layer in a model, provide an +input_shape argument (list of integers or NULL, e.g. (10, 128) for +sequences of 10 vectors of 128-dimensional vectors, or (NULL, 128) for +variable-length sequences of 128-dimensional vectors.

    + + +
    layer_conv_1d(object, filters, kernel_size, strides = 1L, padding = "valid",
    +  dilation_rate = 1L, activation = NULL, use_bias = TRUE,
    +  kernel_initializer = "glorot_uniform", bias_initializer = "zeros",
    +  kernel_regularizer = NULL, bias_regularizer = NULL,
    +  activity_regularizer = NULL, kernel_constraint = NULL,
    +  bias_constraint = NULL, input_shape = NULL, batch_input_shape = NULL,
    +  batch_size = NULL, dtype = NULL, name = NULL, trainable = NULL,
    +  weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    filters

    Integer, the dimensionality of the output space (i.e. the +number output of filters in the convolution).

    kernel_size

    An integer or list of a single integer, specifying the +length of the 1D convolution window.

    strides

    An integer or list of a single integer, specifying the stride +length of the convolution. Specifying any stride value != 1 is incompatible +with specifying any dilation_rate value != 1.

    padding

    One of "valid", "causal" or "same" (case-insensitive). +"valid" means "no padding". +"same" results in padding the input such that the output has the same +length as the original input. +"causal" results in causal (dilated) convolutions, e.g. output[t] does +not depend on input[t+1:]. Useful when modeling temporal data where the +model should not violate the temporal order. See WaveNet: A GenerativeModel for Raw Audio, section 2.1.

    dilation_rate

    an integer or list of a single integer, specifying the +dilation rate to use for dilated convolution. Currently, specifying any +dilation_rate value != 1 is incompatible with specifying any strides +value != 1.

    activation

    Activation function to use. If you don't specify anything, +no activation is applied (ie. "linear" activation: a(x) = x).

    use_bias

    Boolean, whether the layer uses a bias vector.

    kernel_initializer

    Initializer for the kernel weights matrix.

    bias_initializer

    Initializer for the bias vector.

    kernel_regularizer

    Regularizer function applied to the kernel +weights matrix.

    bias_regularizer

    Regularizer function applied to the bias vector.

    activity_regularizer

    Regularizer function applied to the output of the +layer (its "activation")..

    kernel_constraint

    Constraint function applied to the kernel matrix.

    bias_constraint

    Constraint function applied to the bias vector.

    input_shape

    Dimensionality of the input (integer) not including the +samples axis. This argument is required when using this layer as the first +layer in a model.

    batch_input_shape

    Shapes, including the batch size. For instance, +batch_input_shape=c(10, 32) indicates that the expected input will be +batches of 10 32-dimensional vectors. batch_input_shape=list(NULL, 32) +indicates batches of an arbitrary number of 32-dimensional vectors.

    batch_size

    Fixed batch size for layer

    dtype

    The data type expected by the input, as a string (float32, +float64, int32...)

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    Input shape

    + +

    3D tensor with shape: (batch_size, steps, input_dim)

    + +

    Output shape

    + +

    3D tensor with shape: (batch_size, new_steps, filters) steps value might have changed due to padding or strides.

    + +

    See also

    + +

    Other convolutional layers: layer_conv_2d_transpose, + layer_conv_2d, + layer_conv_3d_transpose, + layer_conv_3d, + layer_conv_lstm_2d, + layer_cropping_1d, + layer_cropping_2d, + layer_cropping_3d, + layer_separable_conv_2d, + layer_upsampling_1d, + layer_upsampling_2d, + layer_upsampling_3d, + layer_zero_padding_1d, + layer_zero_padding_2d, + layer_zero_padding_3d

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_conv_2d.html b/website/reference/layer_conv_2d.html new file mode 100644 index 000000000..ba793b399 --- /dev/null +++ b/website/reference/layer_conv_2d.html @@ -0,0 +1,331 @@ + + + + + + + + +2D convolution layer (e.g. spatial convolution over images). — layer_conv_2d • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    This layer creates a convolution kernel that is convolved with the layer +input to produce a tensor of outputs. If use_bias is TRUE, a bias vector is +created and added to the outputs. Finally, if activation is not NULL, it +is applied to the outputs as well. When using this layer as the first layer +in a model, provide the keyword argument input_shape (list of integers, +does not include the sample axis), e.g. input_shape=c(128, 128, 3) for +128x128 RGB pictures in data_format="channels_last".

    + + +
    layer_conv_2d(object, filters, kernel_size, strides = c(1L, 1L),
    +  padding = "valid", data_format = NULL, dilation_rate = c(1L, 1L),
    +  activation = NULL, use_bias = TRUE,
    +  kernel_initializer = "glorot_uniform", bias_initializer = "zeros",
    +  kernel_regularizer = NULL, bias_regularizer = NULL,
    +  activity_regularizer = NULL, kernel_constraint = NULL,
    +  bias_constraint = NULL, input_shape = NULL, batch_input_shape = NULL,
    +  batch_size = NULL, dtype = NULL, name = NULL, trainable = NULL,
    +  weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    filters

    Integer, the dimensionality of the output space (i.e. the +number output of filters in the convolution).

    kernel_size

    An integer or list of 2 integers, specifying the width and +height of the 2D convolution window. Can be a single integer to specify the +same value for all spatial dimensions.

    strides

    An integer or list of 2 integers, specifying the strides of +the convolution along the width and height. Can be a single integer to +specify the same value for all spatial dimensions. Specifying any stride +value != 1 is incompatible with specifying any dilation_rate value != 1.

    padding

    one of "valid" or "same" (case-insensitive).

    data_format

    A string, one of channels_last (default) or +channels_first. The ordering of the dimensions in the inputs. +channels_last corresponds to inputs with shape (batch, height, width, channels) while channels_first corresponds to inputs with shape (batch, channels, height, width). It defaults to the image_data_format value +found in your Keras config file at ~/.keras/keras.json. If you never set +it, then it will be "channels_last".

    dilation_rate

    an integer or list of 2 integers, specifying the +dilation rate to use for dilated convolution. Can be a single integer to +specify the same value for all spatial dimensions. Currently, specifying +any dilation_rate value != 1 is incompatible with specifying any stride +value != 1.

    activation

    Activation function to use. If you don't specify anything, +no activation is applied (ie. "linear" activation: a(x) = x).

    use_bias

    Boolean, whether the layer uses a bias vector.

    kernel_initializer

    Initializer for the kernel weights matrix.

    bias_initializer

    Initializer for the bias vector.

    kernel_regularizer

    Regularizer function applied to the kernel +weights matrix.

    bias_regularizer

    Regularizer function applied to the bias vector.

    activity_regularizer

    Regularizer function applied to the output of the +layer (its "activation")..

    kernel_constraint

    Constraint function applied to the kernel matrix.

    bias_constraint

    Constraint function applied to the bias vector.

    input_shape

    Dimensionality of the input (integer) not including the +samples axis. This argument is required when using this layer as the first +layer in a model.

    batch_input_shape

    Shapes, including the batch size. For instance, +batch_input_shape=c(10, 32) indicates that the expected input will be +batches of 10 32-dimensional vectors. batch_input_shape=list(NULL, 32) +indicates batches of an arbitrary number of 32-dimensional vectors.

    batch_size

    Fixed batch size for layer

    dtype

    The data type expected by the input, as a string (float32, +float64, int32...)

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    Input shape

    + +

    4D tensor with shape: (samples, channels, rows, cols) +if data_format='channels_first' or 4D tensor with shape: (samples, rows, cols, channels) if data_format='channels_last'.

    + +

    Output shape

    + +

    4D tensor with shape: (samples, filters, new_rows, new_cols) if data_format='channels_first' or 4D tensor with shape: +(samples, new_rows, new_cols, filters) if data_format='channels_last'. +rows and cols values might have changed due to padding.

    + +

    See also

    + +

    Other convolutional layers: layer_conv_1d, + layer_conv_2d_transpose, + layer_conv_3d_transpose, + layer_conv_3d, + layer_conv_lstm_2d, + layer_cropping_1d, + layer_cropping_2d, + layer_cropping_3d, + layer_separable_conv_2d, + layer_upsampling_1d, + layer_upsampling_2d, + layer_upsampling_3d, + layer_zero_padding_1d, + layer_zero_padding_2d, + layer_zero_padding_3d

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_conv_2d_transpose.html b/website/reference/layer_conv_2d_transpose.html new file mode 100644 index 000000000..fba69a5b0 --- /dev/null +++ b/website/reference/layer_conv_2d_transpose.html @@ -0,0 +1,332 @@ + + + + + + + + +Transposed 2D convolution layer (sometimes called Deconvolution). — layer_conv_2d_transpose • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    The need for transposed convolutions generally arises from the desire to use +a transformation going in the opposite direction of a normal convolution, +i.e., from something that has the shape of the output of some convolution to +something that has the shape of its input while maintaining a connectivity +pattern that is compatible with said convolution. When using this layer as +the first layer in a model, provide the keyword argument input_shape (list +of integers, does not include the sample axis), e.g. input_shape=c(128L, 128L, 3L) for 128x128 RGB pictures in data_format="channels_last".

    + + +
    layer_conv_2d_transpose(object, filters, kernel_size, strides = c(1L, 1L),
    +  padding = "valid", data_format = NULL, activation = NULL,
    +  use_bias = TRUE, kernel_initializer = "glorot_uniform",
    +  bias_initializer = "zeros", kernel_regularizer = NULL,
    +  bias_regularizer = NULL, activity_regularizer = NULL,
    +  kernel_constraint = NULL, bias_constraint = NULL, input_shape = NULL,
    +  batch_input_shape = NULL, batch_size = NULL, dtype = NULL,
    +  name = NULL, trainable = NULL, weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    filters

    Integer, the dimensionality of the output space (i.e. the +number of output filters in the convolution).

    kernel_size

    An integer or list of 2 integers, specifying the width and +height of the 2D convolution window. Can be a single integer to specify the +same value for all spatial dimensions.

    strides

    An integer or list of 2 integers, specifying the strides of +the convolution along the width and height. Can be a single integer to +specify the same value for all spatial dimensions. Specifying any stride +value != 1 is incompatible with specifying any dilation_rate value != 1.

    padding

    one of "valid" or "same" (case-insensitive).

    data_format

    A string, one of channels_last (default) or +channels_first. The ordering of the dimensions in the inputs. +channels_last corresponds to inputs with shape (batch, height, width, channels) while channels_first corresponds to inputs with shape (batch, channels, height, width). It defaults to the image_data_format value +found in your Keras config file at ~/.keras/keras.json. If you never set +it, then it will be "channels_last".

    activation

    Activation function to use. If you don't specify anything, +no activation is applied (ie. "linear" activation: a(x) = x).

    use_bias

    Boolean, whether the layer uses a bias vector.

    kernel_initializer

    Initializer for the kernel weights matrix.

    bias_initializer

    Initializer for the bias vector.

    kernel_regularizer

    Regularizer function applied to the kernel +weights matrix.

    bias_regularizer

    Regularizer function applied to the bias vector.

    activity_regularizer

    Regularizer function applied to the output of the +layer (its "activation")..

    kernel_constraint

    Constraint function applied to the kernel matrix.

    bias_constraint

    Constraint function applied to the bias vector.

    input_shape

    Dimensionality of the input (integer) not including the +samples axis. This argument is required when using this layer as the first +layer in a model.

    batch_input_shape

    Shapes, including the batch size. For instance, +batch_input_shape=c(10, 32) indicates that the expected input will be +batches of 10 32-dimensional vectors. batch_input_shape=list(NULL, 32) +indicates batches of an arbitrary number of 32-dimensional vectors.

    batch_size

    Fixed batch size for layer

    dtype

    The data type expected by the input, as a string (float32, +float64, int32...)

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    Input shape

    + +

    4D tensor with shape: (batch, channels, rows, cols) +if data_format='channels_first' or 4D tensor with shape: (batch, rows, cols, channels) if data_format='channels_last'.

    + +

    Output shape

    + +

    4D tensor with shape: (batch, filters, new_rows, new_cols) if data_format='channels_first' or 4D tensor with shape: +(batch, new_rows, new_cols, filters) if data_format='channels_last'. +rows and cols values might have changed due to padding.

    + +

    References

    + + + + +

    See also

    + +

    Other convolutional layers: layer_conv_1d, + layer_conv_2d, + layer_conv_3d_transpose, + layer_conv_3d, + layer_conv_lstm_2d, + layer_cropping_1d, + layer_cropping_2d, + layer_cropping_3d, + layer_separable_conv_2d, + layer_upsampling_1d, + layer_upsampling_2d, + layer_upsampling_3d, + layer_zero_padding_1d, + layer_zero_padding_2d, + layer_zero_padding_3d

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_conv_3d.html b/website/reference/layer_conv_3d.html new file mode 100644 index 000000000..58e0e405d --- /dev/null +++ b/website/reference/layer_conv_3d.html @@ -0,0 +1,335 @@ + + + + + + + + +3D convolution layer (e.g. spatial convolution over volumes). — layer_conv_3d • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    This layer creates a convolution kernel that is convolved with the layer +input to produce a tensor of outputs. If use_bias is TRUE, a bias vector is +created and added to the outputs. Finally, if activation is not NULL, it +is applied to the outputs as well. When using this layer as the first layer +in a model, provide the keyword argument input_shape (list of integers, +does not include the sample axis), e.g. input_shape=c(128L, 128L, 128L, 3L) +for 128x128x128 volumes with a single channel, in +data_format="channels_last".

    + + +
    layer_conv_3d(object, filters, kernel_size, strides = c(1L, 1L, 1L),
    +  padding = "valid", data_format = NULL, dilation_rate = c(1L, 1L, 1L),
    +  activation = NULL, use_bias = TRUE,
    +  kernel_initializer = "glorot_uniform", bias_initializer = "zeros",
    +  kernel_regularizer = NULL, bias_regularizer = NULL,
    +  activity_regularizer = NULL, kernel_constraint = NULL,
    +  bias_constraint = NULL, input_shape = NULL, batch_input_shape = NULL,
    +  batch_size = NULL, dtype = NULL, name = NULL, trainable = NULL,
    +  weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    filters

    Integer, the dimensionality of the output space (i.e. the +number output of filters in the convolution).

    kernel_size

    An integer or list of 3 integers, specifying the depth, +height, and width of the 3D convolution window. Can be a single integer +to specify the same value for all spatial dimensions.

    strides

    An integer or list of 3 integers, specifying the strides of +the convolution along each spatial dimension. Can be a single integer to +specify the same value for all spatial dimensions. Specifying any stride +value != 1 is incompatible with specifying any dilation_rate value != 1.

    padding

    one of "valid" or "same" (case-insensitive).

    data_format

    A string, one of channels_last (default) or +channels_first. The ordering of the dimensions in the inputs. +channels_last corresponds to inputs with shape (batch, spatial_dim1, spatial_dim2, spatial_dim3, channels) while channels_first corresponds +to inputs with shape (batch, channels, spatial_dim1, spatial_dim2, spatial_dim3). It defaults to the image_data_format value found in your +Keras config file at ~/.keras/keras.json. If you never set it, then it +will be "channels_last".

    dilation_rate

    an integer or list of 3 integers, specifying the +dilation rate to use for dilated convolution. Can be a single integer to +specify the same value for all spatial dimensions. Currently, specifying +any dilation_rate value != 1 is incompatible with specifying any stride +value != 1.

    activation

    Activation function to use. If you don't specify anything, +no activation is applied (ie. "linear" activation: a(x) = x).

    use_bias

    Boolean, whether the layer uses a bias vector.

    kernel_initializer

    Initializer for the kernel weights matrix.

    bias_initializer

    Initializer for the bias vector.

    kernel_regularizer

    Regularizer function applied to the kernel +weights matrix.

    bias_regularizer

    Regularizer function applied to the bias vector.

    activity_regularizer

    Regularizer function applied to the output of the +layer (its "activation")..

    kernel_constraint

    Constraint function applied to the kernel matrix.

    bias_constraint

    Constraint function applied to the bias vector.

    input_shape

    Dimensionality of the input (integer) not including the +samples axis. This argument is required when using this layer as the first +layer in a model.

    batch_input_shape

    Shapes, including the batch size. For instance, +batch_input_shape=c(10, 32) indicates that the expected input will be +batches of 10 32-dimensional vectors. batch_input_shape=list(NULL, 32) +indicates batches of an arbitrary number of 32-dimensional vectors.

    batch_size

    Fixed batch size for layer

    dtype

    The data type expected by the input, as a string (float32, +float64, int32...)

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    Input shape

    + +

    5D tensor with shape: (samples, channels, conv_dim1, conv_dim2, conv_dim3) if data_format='channels_first' or 5D tensor with +shape: (samples, conv_dim1, conv_dim2, conv_dim3, channels) if +data_format='channels_last'.

    + +

    Output shape

    + +

    5D tensor with shape: (samples, filters, new_conv_dim1, new_conv_dim2, new_conv_dim3) if +data_format='channels_first' or 5D tensor with shape: (samples, new_conv_dim1, new_conv_dim2, new_conv_dim3, filters) if +data_format='channels_last'. new_conv_dim1, new_conv_dim2 and +new_conv_dim3 values might have changed due to padding.

    + +

    See also

    + +

    Other convolutional layers: layer_conv_1d, + layer_conv_2d_transpose, + layer_conv_2d, + layer_conv_3d_transpose, + layer_conv_lstm_2d, + layer_cropping_1d, + layer_cropping_2d, + layer_cropping_3d, + layer_separable_conv_2d, + layer_upsampling_1d, + layer_upsampling_2d, + layer_upsampling_3d, + layer_zero_padding_1d, + layer_zero_padding_2d, + layer_zero_padding_3d

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_conv_3d_transpose.html b/website/reference/layer_conv_3d_transpose.html new file mode 100644 index 000000000..e79647d1a --- /dev/null +++ b/website/reference/layer_conv_3d_transpose.html @@ -0,0 +1,325 @@ + + + + + + + + +Transposed 3D convolution layer (sometimes called Deconvolution). — layer_conv_3d_transpose • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    The need for transposed convolutions generally arises from the desire to use +a transformation going in the opposite direction of a normal convolution, +i.e., from something that has the shape of the output of some convolution to +something that has the shape of its input while maintaining a connectivity +pattern that is compatible with said convolution.

    + + +
    layer_conv_3d_transpose(object, filters, kernel_size, strides = c(1, 1, 1),
    +  padding = "valid", data_format = NULL, activation = NULL,
    +  use_bias = TRUE, kernel_initializer = "glorot_uniform",
    +  bias_initializer = "zeros", kernel_regularizer = NULL,
    +  bias_regularizer = NULL, activity_regularizer = NULL,
    +  kernel_constraint = NULL, bias_constraint = NULL, input_shape = NULL,
    +  batch_input_shape = NULL, batch_size = NULL, dtype = NULL,
    +  name = NULL, trainable = NULL, weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    filters

    Integer, the dimensionality of the output space (i.e. the +number of output filters in the convolution).

    kernel_size

    An integer or list of 3 integers, specifying the depth, +height, and width of the 3D convolution window. Can be a single integer +to specify the same value for all spatial dimensions.

    strides

    An integer or list of 3 integers, specifying the strides of +the convolution along the depth, height and width.. Can be a single integer +to specify the same value for all spatial dimensions. Specifying any stride +value != 1 is incompatible with specifying any dilation_rate value != 1.

    padding

    one of "valid" or "same" (case-insensitive).

    data_format

    A string, one of channels_last (default) or +channels_first. The ordering of the dimensions in the inputs. +channels_last corresponds to inputs with shape (batch, depth, height, width, channels) while channels_first corresponds to inputs with shape +(batch, channels, depth, height, width). It defaults to the +image_data_format value found in your Keras config file at +~/.keras/keras.json. If you never set it, then it will be +"channels_last".

    activation

    Activation function to use. If you don't specify anything, no +activation is applied (ie. "linear" activation: a(x) = x).

    use_bias

    Boolean, whether the layer uses a bias vector.

    kernel_initializer

    Initializer for the kernel weights matrix.

    bias_initializer

    Initializer for the bias vector.

    kernel_regularizer

    Regularizer function applied to the kernel +weights matrix,

    bias_regularizer

    Regularizer function applied to the bias vector.

    activity_regularizer

    Regularizer function applied to the output of the +layer (its "activation").

    kernel_constraint

    Constraint function applied to the kernel matrix.

    bias_constraint

    Constraint function applied to the bias vector.

    input_shape

    Dimensionality of the input (integer) not including the +samples axis. This argument is required when using this layer as the first +layer in a model.

    batch_input_shape

    Shapes, including the batch size. For instance, +batch_input_shape=c(10, 32) indicates that the expected input will be +batches of 10 32-dimensional vectors. batch_input_shape=list(NULL, 32) +indicates batches of an arbitrary number of 32-dimensional vectors.

    batch_size

    Fixed batch size for layer

    dtype

    The data type expected by the input, as a string (float32, +float64, int32...)

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    Details

    + +

    When using this layer as the first layer in a model, provide the keyword argument +input_shape (list of integers, does not include the sample axis), e.g. +input_shape = list(128, 128, 128, 3) for a 128x128x128 volume with 3 channels if +data_format="channels_last".

    + +

    References

    + + + + +

    See also

    + +

    Other convolutional layers: layer_conv_1d, + layer_conv_2d_transpose, + layer_conv_2d, layer_conv_3d, + layer_conv_lstm_2d, + layer_cropping_1d, + layer_cropping_2d, + layer_cropping_3d, + layer_separable_conv_2d, + layer_upsampling_1d, + layer_upsampling_2d, + layer_upsampling_3d, + layer_zero_padding_1d, + layer_zero_padding_2d, + layer_zero_padding_3d

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_conv_lstm_2d.html b/website/reference/layer_conv_lstm_2d.html new file mode 100644 index 000000000..69e6aed8c --- /dev/null +++ b/website/reference/layer_conv_lstm_2d.html @@ -0,0 +1,377 @@ + + + + + + + + +Convolutional LSTM. — layer_conv_lstm_2d • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    It is similar to an LSTM layer, but the input transformations and recurrent +transformations are both convolutional.

    + + +
    layer_conv_lstm_2d(object, filters, kernel_size, strides = c(1L, 1L),
    +  padding = "valid", data_format = NULL, dilation_rate = c(1L, 1L),
    +  activation = "tanh", recurrent_activation = "hard_sigmoid",
    +  use_bias = TRUE, kernel_initializer = "glorot_uniform",
    +  recurrent_initializer = "orthogonal", bias_initializer = "zeros",
    +  unit_forget_bias = TRUE, kernel_regularizer = NULL,
    +  recurrent_regularizer = NULL, bias_regularizer = NULL,
    +  activity_regularizer = NULL, kernel_constraint = NULL,
    +  recurrent_constraint = NULL, bias_constraint = NULL,
    +  return_sequences = FALSE, go_backwards = FALSE, stateful = FALSE,
    +  dropout = 0, recurrent_dropout = 0, batch_size = NULL, name = NULL,
    +  trainable = NULL, weights = NULL, input_shape = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    filters

    Integer, the dimensionality of the output space (i.e. the +number output of filters in the convolution).

    kernel_size

    An integer or list of n integers, specifying the +dimensions of the convolution window.

    strides

    An integer or list of n integers, specifying the strides of +the convolution. Specifying any stride value != 1 is incompatible with +specifying any dilation_rate value != 1.

    padding

    One of "valid" or "same" (case-insensitive).

    data_format

    A string, one of channels_last (default) or +channels_first. The ordering of the dimensions in the inputs. +channels_last corresponds to inputs with shape (batch, time, ..., channels) while channels_first corresponds to inputs with shape (batch, time, channels, ...). It defaults to the image_data_format value found +in your Keras config file at ~/.keras/keras.json. If you never set it, +then it will be "channels_last".

    dilation_rate

    An integer or list of n integers, specifying the +dilation rate to use for dilated convolution. Currently, specifying any +dilation_rate value != 1 is incompatible with specifying any strides +value != 1.

    activation

    Activation function to use. If you don't specify anything, +no activation is applied (ie. "linear" activation: a(x) = x).

    recurrent_activation

    Activation function to use for the recurrent +step.

    use_bias

    Boolean, whether the layer uses a bias vector.

    kernel_initializer

    Initializer for the kernel weights matrix, used +for the linear transformation of the inputs..

    recurrent_initializer

    Initializer for the recurrent_kernel weights +matrix, used for the linear transformation of the recurrent state..

    bias_initializer

    Initializer for the bias vector.

    unit_forget_bias

    Boolean. If TRUE, add 1 to the bias of the forget +gate at initialization. Use in combination with bias_initializer="zeros". +This is recommended in Jozefowicz etal.

    kernel_regularizer

    Regularizer function applied to the kernel +weights matrix.

    recurrent_regularizer

    Regularizer function applied to the +recurrent_kernel weights matrix.

    bias_regularizer

    Regularizer function applied to the bias vector.

    activity_regularizer

    Regularizer function applied to the output of the +layer (its "activation")..

    kernel_constraint

    Constraint function applied to the kernel weights +matrix.

    recurrent_constraint

    Constraint function applied to the +recurrent_kernel weights matrix.

    bias_constraint

    Constraint function applied to the bias vector.

    return_sequences

    Boolean. Whether to return the last output in the +output sequence, or the full sequence.

    go_backwards

    Boolean (default FALSE). If TRUE, rocess the input +sequence backwards.

    stateful

    Boolean (default FALSE). If TRUE, the last state for each +sample at index i in a batch will be used as initial state for the sample +of index i in the following batch.

    dropout

    Float between 0 and 1. Fraction of the units to drop for the +linear transformation of the inputs.

    recurrent_dropout

    Float between 0 and 1. Fraction of the units to drop +for the linear transformation of the recurrent state.

    batch_size

    Fixed batch size for layer

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    input_shape

    Dimensionality of the input (integer) not including the +samples axis. This argument is required when using this layer as the first +layer in a model.

    + +

    Input shape

    + + +
      +
    • if data_format='channels_first' 5D tensor with shape: +(samples,time, channels, rows, cols)

        +
      • if data_format='channels_last' 5D +tensor with shape: (samples,time, rows, cols, channels)

      • +
    • +
    + +

    References

    + + + + +

    See also

    + +

    Other convolutional layers: layer_conv_1d, + layer_conv_2d_transpose, + layer_conv_2d, + layer_conv_3d_transpose, + layer_conv_3d, + layer_cropping_1d, + layer_cropping_2d, + layer_cropping_3d, + layer_separable_conv_2d, + layer_upsampling_1d, + layer_upsampling_2d, + layer_upsampling_3d, + layer_zero_padding_1d, + layer_zero_padding_2d, + layer_zero_padding_3d

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_cropping_1d.html b/website/reference/layer_cropping_1d.html new file mode 100644 index 000000000..61d2d2a50 --- /dev/null +++ b/website/reference/layer_cropping_1d.html @@ -0,0 +1,226 @@ + + + + + + + + +Cropping layer for 1D input (e.g. temporal sequence). — layer_cropping_1d • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    It crops along the time dimension (axis 1).

    + + +
    layer_cropping_1d(object, cropping = c(1L, 1L), batch_size = NULL,
    +  name = NULL, trainable = NULL, weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    cropping

    int or list of int (length 2) How many units should be +trimmed off at the beginning and end of the cropping dimension (axis 1). If +a single int is provided, the same value will be used for both.

    batch_size

    Fixed batch size for layer

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    Input shape

    + +

    3D tensor with shape (batch, axis_to_crop, features)

    + +

    Output shape

    + +

    3D tensor with shape (batch, cropped_axis, features)

    + +

    See also

    + +

    Other convolutional layers: layer_conv_1d, + layer_conv_2d_transpose, + layer_conv_2d, + layer_conv_3d_transpose, + layer_conv_3d, + layer_conv_lstm_2d, + layer_cropping_2d, + layer_cropping_3d, + layer_separable_conv_2d, + layer_upsampling_1d, + layer_upsampling_2d, + layer_upsampling_3d, + layer_zero_padding_1d, + layer_zero_padding_2d, + layer_zero_padding_3d

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_cropping_2d.html b/website/reference/layer_cropping_2d.html new file mode 100644 index 000000000..2c786688d --- /dev/null +++ b/website/reference/layer_cropping_2d.html @@ -0,0 +1,244 @@ + + + + + + + + +Cropping layer for 2D input (e.g. picture). — layer_cropping_2d • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    It crops along spatial dimensions, i.e. width and height.

    + + +
    layer_cropping_2d(object, cropping = list(c(0L, 0L), c(0L, 0L)),
    +  data_format = NULL, batch_size = NULL, name = NULL, trainable = NULL,
    +  weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    cropping

    int, or list of 2 ints, or list of 2 lists of 2 ints.

      +
    • If int: the same symmetric cropping is applied to width and height.

    • +
    • If list of 2 ints: interpreted as two different symmetric cropping values for +height and width: (symmetric_height_crop, symmetric_width_crop).

    • +
    • If list of 2 lists of 2 ints: interpreted as ((top_crop, bottom_crop), (left_crop, right_crop))

    • +
    data_format

    A string, one of channels_last (default) or +channels_first. The ordering of the dimensions in the inputs. +channels_last corresponds to inputs with shape (batch, height, width, channels) while channels_first corresponds to inputs with shape (batch, channels, height, width). It defaults to the image_data_format value +found in your Keras config file at ~/.keras/keras.json. If you never set +it, then it will be "channels_last".

    batch_size

    Fixed batch size for layer

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    Input shape

    + +

    4D tensor with shape:

      +
    • If data_format is "channels_last": (batch, rows, cols, channels)

    • +
    • If data_format is "channels_first": (batch, channels, rows, cols)

    • +
    + +

    Output shape

    + +

    4D tensor with shape:

      +
    • If data_format is "channels_last": (batch, cropped_rows, cropped_cols, channels)

    • +
    • If data_format is "channels_first": (batch, channels, cropped_rows, cropped_cols)

    • +
    + +

    See also

    + +

    Other convolutional layers: layer_conv_1d, + layer_conv_2d_transpose, + layer_conv_2d, + layer_conv_3d_transpose, + layer_conv_3d, + layer_conv_lstm_2d, + layer_cropping_1d, + layer_cropping_3d, + layer_separable_conv_2d, + layer_upsampling_1d, + layer_upsampling_2d, + layer_upsampling_3d, + layer_zero_padding_1d, + layer_zero_padding_2d, + layer_zero_padding_3d

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_cropping_3d.html b/website/reference/layer_cropping_3d.html new file mode 100644 index 000000000..a30577de7 --- /dev/null +++ b/website/reference/layer_cropping_3d.html @@ -0,0 +1,247 @@ + + + + + + + + +Cropping layer for 3D data (e.g. spatial or spatio-temporal). — layer_cropping_3d • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Cropping layer for 3D data (e.g. spatial or spatio-temporal).

    + + +
    layer_cropping_3d(object, cropping = list(c(1L, 1L), c(1L, 1L), c(1L, 1L)),
    +  data_format = NULL, batch_size = NULL, name = NULL, trainable = NULL,
    +  weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    cropping

    int, or list of 3 ints, or list of 3 lists of 2 ints.

      +
    • If int: the same symmetric cropping is applied to width and height.

    • +
    • If list of 3 ints: interpreted as two different symmetric cropping values for +height and width: (symmetric_dim1_crop, symmetric_dim2_crop, symmetric_dim3_crop).

    • +
    • If list of 3 lists of 2 ints: interpreted as +((left_dim1_crop, right_dim1_crop), (left_dim2_crop, right_dim2_crop), (left_dim3_crop, right_dim3_crop))

    • +
    data_format

    A string, one of channels_last (default) or +channels_first. The ordering of the dimensions in the inputs. +channels_last corresponds to inputs with shape (batch, spatial_dim1, spatial_dim2, spatial_dim3, channels) while channels_first corresponds +to inputs with shape (batch, channels, spatial_dim1, spatial_dim2, spatial_dim3). It defaults to the image_data_format value found in your +Keras config file at ~/.keras/keras.json. If you never set it, then it +will be "channels_last".

    batch_size

    Fixed batch size for layer

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    Input shape

    + +

    5D tensor with shape:

      +
    • If data_format is "channels_last": (batch, first_axis_to_crop, second_axis_to_crop, third_axis_to_crop, depth)

    • +
    • If data_format is "channels_first": +(batch, depth, first_axis_to_crop, second_axis_to_crop, third_axis_to_crop)

    • +
    + +

    Output shape

    + +

    5D tensor with shape:

      +
    • If data_format is "channels_last": (batch, first_cropped_axis, second_cropped_axis, third_cropped_axis, depth)

    • +
    • If data_format is "channels_first": (batch, depth, first_cropped_axis, second_cropped_axis, third_cropped_axis)

    • +
    + +

    See also

    + +

    Other convolutional layers: layer_conv_1d, + layer_conv_2d_transpose, + layer_conv_2d, + layer_conv_3d_transpose, + layer_conv_3d, + layer_conv_lstm_2d, + layer_cropping_1d, + layer_cropping_2d, + layer_separable_conv_2d, + layer_upsampling_1d, + layer_upsampling_2d, + layer_upsampling_3d, + layer_zero_padding_1d, + layer_zero_padding_2d, + layer_zero_padding_3d

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_dense.html b/website/reference/layer_dense.html new file mode 100644 index 000000000..94df0df57 --- /dev/null +++ b/website/reference/layer_dense.html @@ -0,0 +1,283 @@ + + + + + + + + +Add a densely-connected NN layer to an output — layer_dense • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Implements the operation: output = activation(dot(input, kernel) + bias) +where activation is the element-wise activation function passed as the +activation argument, kernel is a weights matrix created by the layer, and +bias is a bias vector created by the layer (only applicable if use_bias +is TRUE). Note: if the input to the layer has a rank greater than 2, then +it is flattened prior to the initial dot product with kernel.

    + + +
    layer_dense(object, units, activation = NULL, use_bias = TRUE,
    +  kernel_initializer = "glorot_uniform", bias_initializer = "zeros",
    +  kernel_regularizer = NULL, bias_regularizer = NULL,
    +  activity_regularizer = NULL, kernel_constraint = NULL,
    +  bias_constraint = NULL, input_shape = NULL, batch_input_shape = NULL,
    +  batch_size = NULL, dtype = NULL, name = NULL, trainable = NULL,
    +  weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    units

    Positive integer, dimensionality of the output space.

    activation

    Name of activation function to use. If you don't specify +anything, no activation is applied (ie. "linear" activation: a(x) = x).

    use_bias

    Whether the layer uses a bias vector.

    kernel_initializer

    Initializer for the kernel weights matrix.

    bias_initializer

    Initializer for the bias vector.

    kernel_regularizer

    Regularizer function applied to the kernel +weights matrix.

    bias_regularizer

    Regularizer function applied to the bias vector.

    activity_regularizer

    Regularizer function applied to the output of the +layer (its "activation")..

    kernel_constraint

    Constraint function applied to the kernel weights +matrix.

    bias_constraint

    Constraint function applied to the bias vector.

    input_shape

    Dimensionality of the input (integer) not including the +samples axis. This argument is required when using this layer as the first +layer in a model.

    batch_input_shape

    Shapes, including the batch size. For instance, +batch_input_shape=c(10, 32) indicates that the expected input will be +batches of 10 32-dimensional vectors. batch_input_shape=list(NULL, 32) +indicates batches of an arbitrary number of 32-dimensional vectors.

    batch_size

    Fixed batch size for layer

    dtype

    The data type expected by the input, as a string (float32, +float64, int32...)

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    Input and Output Shapes

    + + +

    Input shape: nD tensor with shape: (batch_size, ..., input_dim). The most +common situation would be a 2D input with shape (batch_size, input_dim).

    +

    Output shape: nD tensor with shape: (batch_size, ..., units). For +instance, for a 2D input with shape (batch_size, input_dim), the output +would have shape (batch_size, unit).

    + +

    See also

    + +

    Other core layers: layer_activation, + layer_activity_regularization, + layer_dropout, layer_flatten, + layer_input, layer_lambda, + layer_masking, layer_permute, + layer_repeat_vector, + layer_reshape

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_dot.html b/website/reference/layer_dot.html new file mode 100644 index 000000000..80c3dff10 --- /dev/null +++ b/website/reference/layer_dot.html @@ -0,0 +1,192 @@ + + + + + + + + +Layer that computes a dot product between samples in two tensors. — layer_dot • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Layer that computes a dot product between samples in two tensors.

    + + +
    layer_dot(inputs, axes, normalize = FALSE)
    + +

    Arguments

    + + + + + + + + + + + + + + +
    inputs

    A list of input tensors (at least 2).

    axes

    Integer or list of integers, axis or axes along which to take the dot product.

    normalize

    Whether to L2-normalize samples along the dot product axis before taking the dot product. If set to TRUE, then the output of the dot product is the cosine proximity between the two samples. **kwargs: Standard layer keyword arguments.

    + +

    Value

    + +

    A tensor, the dot product of the samples from the inputs.

    + +

    See also

    + +

    Other merge layers: layer_add, + layer_average, + layer_concatenate, + layer_maximum, layer_multiply

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_dropout.html b/website/reference/layer_dropout.html new file mode 100644 index 000000000..e8825a276 --- /dev/null +++ b/website/reference/layer_dropout.html @@ -0,0 +1,220 @@ + + + + + + + + +Applies Dropout to the input. — layer_dropout • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Dropout consists in randomly setting a fraction rate of input units to 0 at +each update during training time, which helps prevent overfitting.

    + + +
    layer_dropout(object, rate, noise_shape = NULL, seed = NULL,
    +  batch_size = NULL, name = NULL, trainable = NULL, weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    rate

    float between 0 and 1. Fraction of the input units to drop.

    noise_shape

    1D integer tensor representing the shape of the binary +dropout mask that will be multiplied with the input. For instance, if your +inputs have shape (batch_size, timesteps, features) and you want the +dropout mask to be the same for all timesteps, you can use +noise_shape=c(batch_size, 1, features).

    seed

    A Python integer to use as random seed.

    batch_size

    Fixed batch size for layer

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    See also

    + +

    Other core layers: layer_activation, + layer_activity_regularization, + layer_dense, layer_flatten, + layer_input, layer_lambda, + layer_masking, layer_permute, + layer_repeat_vector, + layer_reshape

    +

    Other dropout layers: layer_spatial_dropout_1d, + layer_spatial_dropout_2d, + layer_spatial_dropout_3d

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_embedding.html b/website/reference/layer_embedding.html new file mode 100644 index 000000000..a270a3e4f --- /dev/null +++ b/website/reference/layer_embedding.html @@ -0,0 +1,256 @@ + + + + + + + + +Turns positive integers (indexes) into dense vectors of fixed size. — layer_embedding • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    For example, list(4L, 20L) -> list(c(0.25, 0.1), c(0.6, -0.2)) This layer +can only be used as the first layer in a model.

    + + +
    layer_embedding(object, input_dim, output_dim,
    +  embeddings_initializer = "uniform", embeddings_regularizer = NULL,
    +  activity_regularizer = NULL, embeddings_constraint = NULL,
    +  mask_zero = FALSE, input_length = NULL, batch_size = NULL,
    +  name = NULL, trainable = NULL, weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    input_dim

    int > 0. Size of the vocabulary, i.e. maximum integer +index + 1.

    output_dim

    int >= 0. Dimension of the dense embedding.

    embeddings_initializer

    Initializer for the embeddings matrix.

    embeddings_regularizer

    Regularizer function applied to the +embeddings matrix.

    activity_regularizer

    activity_regularizer

    embeddings_constraint

    Constraint function applied to the embeddings +matrix.

    mask_zero

    Whether or not the input value 0 is a special "padding" +value that should be masked out. This is useful when using recurrent +layers, which may take variable length inputs. If this is TRUE then all +subsequent layers in the model need to support masking or an exception will +be raised. If mask_zero is set to TRUE, as a consequence, index 0 cannot be +used in the vocabulary (input_dim should equal size of vocabulary + 1).

    input_length

    Length of input sequences, when it is constant. This +argument is required if you are going to connect Flatten then Dense +layers upstream (without it, the shape of the dense outputs cannot be +computed).

    batch_size

    Fixed batch size for layer

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    Input shape

    + +

    2D tensor with shape: (batch_size, sequence_length).

    + +

    Output shape

    + +

    3D tensor with shape: (batch_size, sequence_length, output_dim).

    + +

    References

    + + + + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_flatten.html b/website/reference/layer_flatten.html new file mode 100644 index 000000000..787fe512f --- /dev/null +++ b/website/reference/layer_flatten.html @@ -0,0 +1,200 @@ + + + + + + + + +Flattens an input — layer_flatten • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Flatten a given input, does not affect the batch size.

    + + +
    layer_flatten(object, batch_size = NULL, name = NULL, trainable = NULL,
    +  weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    batch_size

    Fixed batch size for layer

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    See also

    + +

    Other core layers: layer_activation, + layer_activity_regularization, + layer_dense, layer_dropout, + layer_input, layer_lambda, + layer_masking, layer_permute, + layer_repeat_vector, + layer_reshape

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_gaussian_dropout.html b/website/reference/layer_gaussian_dropout.html new file mode 100644 index 000000000..3fb3b2c42 --- /dev/null +++ b/website/reference/layer_gaussian_dropout.html @@ -0,0 +1,242 @@ + + + + + + + + +Apply multiplicative 1-centered Gaussian noise. — layer_gaussian_dropout • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    As it is a regularization layer, it is only active at training time.

    + + +
    layer_gaussian_dropout(object, rate, input_shape = NULL,
    +  batch_input_shape = NULL, batch_size = NULL, dtype = NULL,
    +  name = NULL, trainable = NULL, weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    rate

    float, drop probability (as with Dropout). The multiplicative +noise will have standard deviation sqrt(rate / (1 - rate)).

    input_shape

    Dimensionality of the input (integer) not including the +samples axis. This argument is required when using this layer as the first +layer in a model.

    batch_input_shape

    Shapes, including the batch size. For instance, +batch_input_shape=c(10, 32) indicates that the expected input will be +batches of 10 32-dimensional vectors. batch_input_shape=list(NULL, 32) +indicates batches of an arbitrary number of 32-dimensional vectors.

    batch_size

    Fixed batch size for layer

    dtype

    The data type expected by the input, as a string (float32, +float64, int32...)

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    Input shape

    + +

    Arbitrary. Use the keyword argument input_shape (list +of integers, does not include the samples axis) when using this layer as +the first layer in a model.

    + +

    Output shape

    + +

    Same shape as input.

    + +

    References

    + + + + +

    See also

    + +

    Other noise layers: layer_alpha_dropout, + layer_gaussian_noise

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_gaussian_noise.html b/website/reference/layer_gaussian_noise.html new file mode 100644 index 000000000..b3b39a32c --- /dev/null +++ b/website/reference/layer_gaussian_noise.html @@ -0,0 +1,235 @@ + + + + + + + + +Apply additive zero-centered Gaussian noise. — layer_gaussian_noise • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    This is useful to mitigate overfitting (you could see it as a form of random +data augmentation). Gaussian Noise (GS) is a natural choice as corruption +process for real valued inputs. As it is a regularization layer, it is only +active at training time.

    + + +
    layer_gaussian_noise(object, stddev, input_shape = NULL,
    +  batch_input_shape = NULL, batch_size = NULL, dtype = NULL,
    +  name = NULL, trainable = NULL, weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    stddev

    float, standard deviation of the noise distribution.

    input_shape

    Dimensionality of the input (integer) not including the +samples axis. This argument is required when using this layer as the first +layer in a model.

    batch_input_shape

    Shapes, including the batch size. For instance, +batch_input_shape=c(10, 32) indicates that the expected input will be +batches of 10 32-dimensional vectors. batch_input_shape=list(NULL, 32) +indicates batches of an arbitrary number of 32-dimensional vectors.

    batch_size

    Fixed batch size for layer

    dtype

    The data type expected by the input, as a string (float32, +float64, int32...)

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    Input shape

    + +

    Arbitrary. Use the keyword argument input_shape (list +of integers, does not include the samples axis) when using this layer as +the first layer in a model.

    + +

    Output shape

    + +

    Same shape as input.

    + +

    See also

    + +

    Other noise layers: layer_alpha_dropout, + layer_gaussian_dropout

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_global_average_pooling_1d.html b/website/reference/layer_global_average_pooling_1d.html new file mode 100644 index 000000000..0f7fb0840 --- /dev/null +++ b/website/reference/layer_global_average_pooling_1d.html @@ -0,0 +1,218 @@ + + + + + + + + +Global average pooling operation for temporal data. — layer_global_average_pooling_1d • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Global average pooling operation for temporal data.

    + + +
    layer_global_average_pooling_1d(object, batch_size = NULL, name = NULL,
    +  trainable = NULL, weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    batch_size

    Fixed batch size for layer

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    Input shape

    + + +

    3D tensor with shape: (batch_size, steps, features).

    + +

    Output shape

    + + +

    2D tensor with shape: (batch_size, channels)

    + +

    See also

    + +

    Other pooling layers: layer_average_pooling_1d, + layer_average_pooling_2d, + layer_average_pooling_3d, + layer_global_average_pooling_2d, + layer_global_average_pooling_3d, + layer_global_max_pooling_1d, + layer_global_max_pooling_2d, + layer_global_max_pooling_3d, + layer_max_pooling_1d, + layer_max_pooling_2d, + layer_max_pooling_3d

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_global_average_pooling_2d.html b/website/reference/layer_global_average_pooling_2d.html new file mode 100644 index 000000000..22962f30e --- /dev/null +++ b/website/reference/layer_global_average_pooling_2d.html @@ -0,0 +1,228 @@ + + + + + + + + +Global average pooling operation for spatial data. — layer_global_average_pooling_2d • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Global average pooling operation for spatial data.

    + + +
    layer_global_average_pooling_2d(object, data_format = NULL,
    +  batch_size = NULL, name = NULL, trainable = NULL, weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    data_format

    A string, one of channels_last (default) or +channels_first. The ordering of the dimensions in the inputs. +channels_last corresponds to inputs with shape (batch, height, width, channels) while channels_first corresponds to inputs with shape (batch, channels, height, width). It defaults to the image_data_format value +found in your Keras config file at ~/.keras/keras.json. If you never set +it, then it will be "channels_last".

    batch_size

    Fixed batch size for layer

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    Input shape

    + + +
      +
    • If data_format='channels_last': 4D tensor with shape: (batch_size, rows, cols, channels)

    • +
    • If data_format='channels_first': 4D tensor with shape: (batch_size, channels, rows, cols)

    • +
    + +

    Output shape

    + +

    2D tensor with shape: (batch_size, channels)

    + +

    See also

    + +

    Other pooling layers: layer_average_pooling_1d, + layer_average_pooling_2d, + layer_average_pooling_3d, + layer_global_average_pooling_1d, + layer_global_average_pooling_3d, + layer_global_max_pooling_1d, + layer_global_max_pooling_2d, + layer_global_max_pooling_3d, + layer_max_pooling_1d, + layer_max_pooling_2d, + layer_max_pooling_3d

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_global_average_pooling_3d.html b/website/reference/layer_global_average_pooling_3d.html new file mode 100644 index 000000000..7c8479ca5 --- /dev/null +++ b/website/reference/layer_global_average_pooling_3d.html @@ -0,0 +1,229 @@ + + + + + + + + +Global Average pooling operation for 3D data. — layer_global_average_pooling_3d • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Global Average pooling operation for 3D data.

    + + +
    layer_global_average_pooling_3d(object, data_format = NULL,
    +  batch_size = NULL, name = NULL, trainable = NULL, weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    data_format

    A string, one of channels_last (default) or +channels_first. The ordering of the dimensions in the inputs. +channels_last corresponds to inputs with shape (batch, spatial_dim1, spatial_dim2, spatial_dim3, channels) while channels_first corresponds +to inputs with shape (batch, channels, spatial_dim1, spatial_dim2, spatial_dim3). It defaults to the image_data_format value found in your +Keras config file at ~/.keras/keras.json. If you never set it, then it +will be "channels_last".

    batch_size

    Fixed batch size for layer

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    Input shape

    + + +
      +
    • If data_format='channels_last': 5D tensor with shape: (batch_size, spatial_dim1, spatial_dim2, spatial_dim3, channels)

    • +
    • If data_format='channels_first': 5D tensor with shape: (batch_size, channels, spatial_dim1, spatial_dim2, spatial_dim3)

    • +
    + +

    Output shape

    + +

    2D tensor with shape: (batch_size, channels)

    + +

    See also

    + +

    Other pooling layers: layer_average_pooling_1d, + layer_average_pooling_2d, + layer_average_pooling_3d, + layer_global_average_pooling_1d, + layer_global_average_pooling_2d, + layer_global_max_pooling_1d, + layer_global_max_pooling_2d, + layer_global_max_pooling_3d, + layer_max_pooling_1d, + layer_max_pooling_2d, + layer_max_pooling_3d

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_global_max_pooling_1d.html b/website/reference/layer_global_max_pooling_1d.html new file mode 100644 index 000000000..e0c4b616e --- /dev/null +++ b/website/reference/layer_global_max_pooling_1d.html @@ -0,0 +1,218 @@ + + + + + + + + +Global max pooling operation for temporal data. — layer_global_max_pooling_1d • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Global max pooling operation for temporal data.

    + + +
    layer_global_max_pooling_1d(object, batch_size = NULL, name = NULL,
    +  trainable = NULL, weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    batch_size

    Fixed batch size for layer

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    Input shape

    + + +

    3D tensor with shape: (batch_size, steps, features).

    + +

    Output shape

    + + +

    2D tensor with shape: (batch_size, channels)

    + +

    See also

    + +

    Other pooling layers: layer_average_pooling_1d, + layer_average_pooling_2d, + layer_average_pooling_3d, + layer_global_average_pooling_1d, + layer_global_average_pooling_2d, + layer_global_average_pooling_3d, + layer_global_max_pooling_2d, + layer_global_max_pooling_3d, + layer_max_pooling_1d, + layer_max_pooling_2d, + layer_max_pooling_3d

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_global_max_pooling_2d.html b/website/reference/layer_global_max_pooling_2d.html new file mode 100644 index 000000000..8de53c079 --- /dev/null +++ b/website/reference/layer_global_max_pooling_2d.html @@ -0,0 +1,228 @@ + + + + + + + + +Global max pooling operation for spatial data. — layer_global_max_pooling_2d • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Global max pooling operation for spatial data.

    + + +
    layer_global_max_pooling_2d(object, data_format = NULL, batch_size = NULL,
    +  name = NULL, trainable = NULL, weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    data_format

    A string, one of channels_last (default) or +channels_first. The ordering of the dimensions in the inputs. +channels_last corresponds to inputs with shape (batch, height, width, channels) while channels_first corresponds to inputs with shape (batch, channels, height, width). It defaults to the image_data_format value +found in your Keras config file at ~/.keras/keras.json. If you never set +it, then it will be "channels_last".

    batch_size

    Fixed batch size for layer

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    Input shape

    + + +
      +
    • If data_format='channels_last': 4D tensor with shape: (batch_size, rows, cols, channels)

    • +
    • If data_format='channels_first': 4D tensor with shape: (batch_size, channels, rows, cols)

    • +
    + +

    Output shape

    + +

    2D tensor with shape: (batch_size, channels)

    + +

    See also

    + +

    Other pooling layers: layer_average_pooling_1d, + layer_average_pooling_2d, + layer_average_pooling_3d, + layer_global_average_pooling_1d, + layer_global_average_pooling_2d, + layer_global_average_pooling_3d, + layer_global_max_pooling_1d, + layer_global_max_pooling_3d, + layer_max_pooling_1d, + layer_max_pooling_2d, + layer_max_pooling_3d

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_global_max_pooling_3d.html b/website/reference/layer_global_max_pooling_3d.html new file mode 100644 index 000000000..15328f068 --- /dev/null +++ b/website/reference/layer_global_max_pooling_3d.html @@ -0,0 +1,229 @@ + + + + + + + + +Global Max pooling operation for 3D data. — layer_global_max_pooling_3d • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Global Max pooling operation for 3D data.

    + + +
    layer_global_max_pooling_3d(object, data_format = NULL, batch_size = NULL,
    +  name = NULL, trainable = NULL, weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    data_format

    A string, one of channels_last (default) or +channels_first. The ordering of the dimensions in the inputs. +channels_last corresponds to inputs with shape (batch, spatial_dim1, spatial_dim2, spatial_dim3, channels) while channels_first corresponds +to inputs with shape (batch, channels, spatial_dim1, spatial_dim2, spatial_dim3). It defaults to the image_data_format value found in your +Keras config file at ~/.keras/keras.json. If you never set it, then it +will be "channels_last".

    batch_size

    Fixed batch size for layer

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    Input shape

    + + +
      +
    • If data_format='channels_last': 5D tensor with shape: (batch_size, spatial_dim1, spatial_dim2, spatial_dim3, channels)

    • +
    • If data_format='channels_first': 5D tensor with shape: (batch_size, channels, spatial_dim1, spatial_dim2, spatial_dim3)

    • +
    + +

    Output shape

    + +

    2D tensor with shape: (batch_size, channels)

    + +

    See also

    + +

    Other pooling layers: layer_average_pooling_1d, + layer_average_pooling_2d, + layer_average_pooling_3d, + layer_global_average_pooling_1d, + layer_global_average_pooling_2d, + layer_global_average_pooling_3d, + layer_global_max_pooling_1d, + layer_global_max_pooling_2d, + layer_max_pooling_1d, + layer_max_pooling_2d, + layer_max_pooling_3d

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_gru.html b/website/reference/layer_gru.html new file mode 100644 index 000000000..78508bdb6 --- /dev/null +++ b/website/reference/layer_gru.html @@ -0,0 +1,415 @@ + + + + + + + + +Gated Recurrent Unit - Cho et al. — layer_gru • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Gated Recurrent Unit - Cho et al.

    + + +
    layer_gru(object, units, activation = "tanh",
    +  recurrent_activation = "hard_sigmoid", use_bias = TRUE,
    +  return_sequences = FALSE, return_state = FALSE, go_backwards = FALSE,
    +  stateful = FALSE, unroll = FALSE, implementation = 0L,
    +  kernel_initializer = "glorot_uniform",
    +  recurrent_initializer = "orthogonal", bias_initializer = "zeros",
    +  kernel_regularizer = NULL, recurrent_regularizer = NULL,
    +  bias_regularizer = NULL, activity_regularizer = NULL,
    +  kernel_constraint = NULL, recurrent_constraint = NULL,
    +  bias_constraint = NULL, dropout = 0, recurrent_dropout = 0,
    +  input_shape = NULL, batch_input_shape = NULL, batch_size = NULL,
    +  dtype = NULL, name = NULL, trainable = NULL, weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    units

    Positive integer, dimensionality of the output space.

    activation

    Activation function to use. If you pass NULL, no +activation is applied (ie. "linear" activation: a(x) = x).

    recurrent_activation

    Activation function to use for the recurrent +step.

    use_bias

    Boolean, whether the layer uses a bias vector.

    return_sequences

    Boolean. Whether to return the last output in the +output sequence, or the full sequence.

    return_state

    Boolean (default FALSE). Whether to return the last state +in addition to the output.

    go_backwards

    Boolean (default FALSE). If TRUE, process the input +sequence backwards and return the reversed sequence.

    stateful

    Boolean (default FALSE). If TRUE, the last state for each +sample at index i in a batch will be used as initial state for the sample +of index i in the following batch.

    unroll

    Boolean (default FALSE). If TRUE, the network will be unrolled, +else a symbolic loop will be used. Unrolling can speed-up a RNN, although +it tends to be more memory-intensive. Unrolling is only suitable for short +sequences.

    implementation

    one of 0, 1, or 2. If set to 0, the RNN will use an +implementation that uses fewer, larger matrix products, thus running faster +on CPU but consuming more memory. If set to 1, the RNN will use more matrix +products, but smaller ones, thus running slower (may actually be faster on +GPU) while consuming less memory. If set to 2 (LSTM/GRU only), the RNN will +combine the input gate, the forget gate and the output gate into a single +matrix, enabling more time-efficient parallelization on the GPU.

    kernel_initializer

    Initializer for the kernel weights matrix, used +for the linear transformation of the inputs..

    recurrent_initializer

    Initializer for the recurrent_kernel weights +matrix, used for the linear transformation of the recurrent state..

    bias_initializer

    Initializer for the bias vector.

    kernel_regularizer

    Regularizer function applied to the kernel +weights matrix.

    recurrent_regularizer

    Regularizer function applied to the +recurrent_kernel weights matrix.

    bias_regularizer

    Regularizer function applied to the bias vector.

    activity_regularizer

    Regularizer function applied to the output of the +layer (its "activation")..

    kernel_constraint

    Constraint function applied to the kernel weights +matrix.

    recurrent_constraint

    Constraint function applied to the +recurrent_kernel weights matrix.

    bias_constraint

    Constraint function applied to the bias vector.

    dropout

    Float between 0 and 1. Fraction of the units to drop for the +linear transformation of the inputs.

    recurrent_dropout

    Float between 0 and 1. Fraction of the units to drop +for the linear transformation of the recurrent state.

    input_shape

    Dimensionality of the input (integer) not including the +samples axis. This argument is required when using this layer as the first +layer in a model.

    batch_input_shape

    Shapes, including the batch size. For instance, +batch_input_shape=c(10, 32) indicates that the expected input will be +batches of 10 32-dimensional vectors. batch_input_shape=list(NULL, 32) +indicates batches of an arbitrary number of 32-dimensional vectors.

    batch_size

    Fixed batch size for layer

    dtype

    The data type expected by the input, as a string (float32, +float64, int32...)

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    Input shapes

    + + +

    3D tensor with shape (batch_size, timesteps, input_dim), +(Optional) 2D tensors with shape (batch_size, output_dim).

    + +

    Output shape

    + + +
      +
    • if return_state: a list of tensors. The first tensor is +the output. The remaining tensors are the last states, +each with shape (batch_size, units).

    • +
    • if return_sequences: 3D tensor with shape +(batch_size, timesteps, units).

    • +
    • else, 2D tensor with shape (batch_size, units).

    • +
    + +

    Masking

    + + +

    This layer supports masking for input data with a variable number +of timesteps. To introduce masks to your data, +use an embedding layer with the mask_zero parameter +set to TRUE.

    + +

    Statefulness in RNNs

    + + +

    You can set RNN layers to be 'stateful', which means that the states +computed for the samples in one batch will be reused as initial states +for the samples in the next batch. This assumes a one-to-one mapping +between samples in different successive batches.

    +

    To enable statefulness:

      +
    • Specify stateful=TRUE in the layer constructor.

    • +
    • Specify a fixed batch size for your model. For sequential models, +pass batch_input_shape = c(...) to the first layer in your model. +For functional models with 1 or more Input layers, pass +batch_shape = c(...) to all the first layers in your model. +This is the expected shape of your inputs including the batch size. +It should be a vector of integers, e.g. c(32, 10, 100).

    • +
    • Specify shuffle = FALSE when calling fit().

    • +
    +

    To reset the states of your model, call reset_states() on either +a specific layer, or on your entire model.

    + +

    Initial State of RNNs

    + + +

    You can specify the initial state of RNN layers symbolically by calling +them with the keyword argument initial_state. The value of +initial_state should be a tensor or list of tensors representing +the initial state of the RNN layer.

    +

    You can specify the initial state of RNN layers numerically by +calling reset_states with the keyword argument states. The value of +states should be a numpy array or list of numpy arrays representing +the initial state of the RNN layer.

    + +

    References

    + + + + +

    See also

    + +

    Other recurrent layers: layer_lstm, + layer_simple_rnn

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_input.html b/website/reference/layer_input.html new file mode 100644 index 000000000..81847044c --- /dev/null +++ b/website/reference/layer_input.html @@ -0,0 +1,225 @@ + + + + + + + + +Input layer — layer_input • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Layer to be used as an entry point into a graph.

    + + +
    layer_input(shape = NULL, batch_shape = NULL, name = NULL, dtype = NULL,
    +  sparse = FALSE, tensor = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    shape

    Shape, not including the batch size. For instance, +shape=c(32) indicates that the expected input will be batches +of 32-dimensional vectors.

    batch_shape

    Shapes, including the batch size. For instance, +batch_shape=c(10, 32) indicates that the expected input will be +batches of 10 32-dimensional vectors. batch_shape=list(NULL, 32) +indicates batches of an arbitrary number of 32-dimensional vectors.

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    dtype

    The data type expected by the input, as a string (float32, +float64, int32...)

    sparse

    Boolean, whether the placeholder created is meant to be sparse.

    tensor

    Existing tensor to wrap into the Input layer. If set, the +layer will not create a placeholder tensor.

    + +

    Value

    + +

    A tensor

    + +

    Details

    + +

    It can either wrap an existing tensor (pass an input_tensor +argument) or create its a placeholder tensor (pass arguments input_shape +or batch_input_shape as well as input_dtype).

    + +

    See also

    + +

    Other core layers: layer_activation, + layer_activity_regularization, + layer_dense, layer_dropout, + layer_flatten, layer_lambda, + layer_masking, layer_permute, + layer_repeat_vector, + layer_reshape

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_lambda.html b/website/reference/layer_lambda.html new file mode 100644 index 000000000..a6560bcff --- /dev/null +++ b/website/reference/layer_lambda.html @@ -0,0 +1,253 @@ + + + + + + + + +Wraps arbitrary expression as a layer — layer_lambda • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Wraps arbitrary expression as a layer

    + + +
    layer_lambda(object, f, output_shape = NULL, mask = NULL,
    +  arguments = NULL, input_shape = NULL, batch_input_shape = NULL,
    +  batch_size = NULL, dtype = NULL, name = NULL, trainable = NULL,
    +  weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    f

    The function to be evaluated. Takes input tensor as first +argument.

    output_shape

    Expected output shape from the function (not required +when using TensorFlow back-end).

    mask

    mask

    arguments

    optional named list of keyword arguments to be passed to the +function.

    input_shape

    Dimensionality of the input (integer) not including the +samples axis. This argument is required when using this layer as the first +layer in a model.

    batch_input_shape

    Shapes, including the batch size. For instance, +batch_input_shape=c(10, 32) indicates that the expected input will be +batches of 10 32-dimensional vectors. batch_input_shape=list(NULL, 32) +indicates batches of an arbitrary number of 32-dimensional vectors.

    batch_size

    Fixed batch size for layer

    dtype

    The data type expected by the input, as a string (float32, +float64, int32...)

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    Input shape

    + +

    Arbitrary. Use the keyword argument input_shape (list +of integers, does not include the samples axis) when using this layer as +the first layer in a model.

    + +

    Output shape

    + +

    Arbitrary (based on tensor returned from the function)

    + +

    See also

    + +

    Other core layers: layer_activation, + layer_activity_regularization, + layer_dense, layer_dropout, + layer_flatten, layer_input, + layer_masking, layer_permute, + layer_repeat_vector, + layer_reshape

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_locally_connected_1d.html b/website/reference/layer_locally_connected_1d.html new file mode 100644 index 000000000..f02cca59b --- /dev/null +++ b/website/reference/layer_locally_connected_1d.html @@ -0,0 +1,281 @@ + + + + + + + + +Locally-connected layer for 1D inputs. — layer_locally_connected_1d • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    layer_locally_connected_1d() works similarly to layer_conv_1d() , except +that weights are unshared, that is, a different set of filters is applied at +each different patch of the input.

    + + +
    layer_locally_connected_1d(object, filters, kernel_size, strides = 1L,
    +  padding = "valid", data_format = NULL, activation = NULL,
    +  use_bias = TRUE, kernel_initializer = "glorot_uniform",
    +  bias_initializer = "zeros", kernel_regularizer = NULL,
    +  bias_regularizer = NULL, activity_regularizer = NULL,
    +  kernel_constraint = NULL, bias_constraint = NULL, batch_size = NULL,
    +  name = NULL, trainable = NULL, weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    filters

    Integer, the dimensionality of the output space (i.e. the +number output of filters in the convolution).

    kernel_size

    An integer or list of a single integer, specifying the +length of the 1D convolution window.

    strides

    An integer or list of a single integer, specifying the stride +length of the convolution. Specifying any stride value != 1 is incompatible +with specifying any dilation_rate value != 1.

    padding

    Currently only supports "valid" (case-insensitive). "same" +may be supported in the future.

    data_format

    A string, one of channels_last (default) or +channels_first. The ordering of the dimensions in the inputs. +channels_last corresponds to inputs with shape (batch, height, width, channels) while channels_first corresponds to inputs with shape (batch, channels, height, width). It defaults to the image_data_format value +found in your Keras config file at ~/.keras/keras.json. If you never set +it, then it will be "channels_last".

    activation

    Activation function to use. If you don't specify anything, +no activation is applied (ie. "linear" activation: a(x) = x).

    use_bias

    Boolean, whether the layer uses a bias vector.

    kernel_initializer

    Initializer for the kernel weights matrix.

    bias_initializer

    Initializer for the bias vector.

    kernel_regularizer

    Regularizer function applied to the kernel +weights matrix.

    bias_regularizer

    Regularizer function applied to the bias vector.

    activity_regularizer

    Regularizer function applied to the output of the +layer (its "activation")..

    kernel_constraint

    Constraint function applied to the kernel matrix.

    bias_constraint

    Constraint function applied to the bias vector.

    batch_size

    Fixed batch size for layer

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    Input shape

    + +

    3D tensor with shape: (batch_size, steps, input_dim)

    + +

    Output shape

    + +

    3D tensor with shape: (batch_size, new_steps, filters) steps value might have changed due to padding or strides.

    + +

    See also

    + +

    Other locally connected layers: layer_locally_connected_2d

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_locally_connected_2d.html b/website/reference/layer_locally_connected_2d.html new file mode 100644 index 000000000..f9fd13d3d --- /dev/null +++ b/website/reference/layer_locally_connected_2d.html @@ -0,0 +1,286 @@ + + + + + + + + +Locally-connected layer for 2D inputs. — layer_locally_connected_2d • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    layer_locally_connected_2d works similarly to layer_conv_2d(), except +that weights are unshared, that is, a different set of filters is applied at +each different patch of the input.

    + + +
    layer_locally_connected_2d(object, filters, kernel_size, strides = c(1L, 1L),
    +  padding = "valid", data_format = NULL, activation = NULL,
    +  use_bias = TRUE, kernel_initializer = "glorot_uniform",
    +  bias_initializer = "zeros", kernel_regularizer = NULL,
    +  bias_regularizer = NULL, activity_regularizer = NULL,
    +  kernel_constraint = NULL, bias_constraint = NULL, batch_size = NULL,
    +  name = NULL, trainable = NULL, weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    filters

    Integer, the dimensionality of the output space (i.e. the +number output of filters in the convolution).

    kernel_size

    An integer or list of 2 integers, specifying the width and +height of the 2D convolution window. Can be a single integer to specify the +same value for all spatial dimensions.

    strides

    An integer or list of 2 integers, specifying the strides of +the convolution along the width and height. Can be a single integer to +specify the same value for all spatial dimensions. Specifying any stride +value != 1 is incompatible with specifying any dilation_rate value != 1.

    padding

    Currently only supports "valid" (case-insensitive). "same" +may be supported in the future.

    data_format

    A string, one of channels_last (default) or +channels_first. The ordering of the dimensions in the inputs. +channels_last corresponds to inputs with shape (batch, width, height, channels) while channels_first corresponds to inputs with shape (batch, channels, width, height). It defaults to the image_data_format value +found in your Keras config file at ~/.keras/keras.json. If you never set +it, then it will be "channels_last".

    activation

    Activation function to use. If you don't specify anything, +no activation is applied (ie. "linear" activation: a(x) = x).

    use_bias

    Boolean, whether the layer uses a bias vector.

    kernel_initializer

    Initializer for the kernel weights matrix.

    bias_initializer

    Initializer for the bias vector.

    kernel_regularizer

    Regularizer function applied to the kernel +weights matrix.

    bias_regularizer

    Regularizer function applied to the bias vector.

    activity_regularizer

    Regularizer function applied to the output of the +layer (its "activation")..

    kernel_constraint

    Constraint function applied to the kernel matrix.

    bias_constraint

    Constraint function applied to the bias vector.

    batch_size

    Fixed batch size for layer

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    Input shape

    + +

    4D tensor with shape: (samples, channels, rows, cols) +if data_format='channels_first' or 4D tensor with shape: (samples, rows, cols, channels) if data_format='channels_last'.

    + +

    Output shape

    + +

    4D tensor with shape: (samples, filters, new_rows, new_cols) if data_format='channels_first' or 4D tensor with shape: +(samples, new_rows, new_cols, filters) if data_format='channels_last'. +rows and cols values might have changed due to padding.

    + +

    See also

    + +

    Other locally connected layers: layer_locally_connected_1d

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_lstm.html b/website/reference/layer_lstm.html new file mode 100644 index 000000000..16829f22f --- /dev/null +++ b/website/reference/layer_lstm.html @@ -0,0 +1,424 @@ + + + + + + + + +Long-Short Term Memory unit - Hochreiter 1997. — layer_lstm • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    For a step-by-step description of the algorithm, see thistutorial.

    + + +
    layer_lstm(object, units, activation = "tanh",
    +  recurrent_activation = "hard_sigmoid", use_bias = TRUE,
    +  return_sequences = FALSE, return_state = FALSE, go_backwards = FALSE,
    +  stateful = FALSE, unroll = FALSE, implementation = 0L,
    +  kernel_initializer = "glorot_uniform",
    +  recurrent_initializer = "orthogonal", bias_initializer = "zeros",
    +  unit_forget_bias = TRUE, kernel_regularizer = NULL,
    +  recurrent_regularizer = NULL, bias_regularizer = NULL,
    +  activity_regularizer = NULL, kernel_constraint = NULL,
    +  recurrent_constraint = NULL, bias_constraint = NULL, dropout = 0,
    +  recurrent_dropout = 0, input_shape = NULL, batch_input_shape = NULL,
    +  batch_size = NULL, dtype = NULL, name = NULL, trainable = NULL,
    +  weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    units

    Positive integer, dimensionality of the output space.

    activation

    Activation function to use. If you pass NULL, no +activation is applied (ie. "linear" activation: a(x) = x).

    recurrent_activation

    Activation function to use for the recurrent +step.

    use_bias

    Boolean, whether the layer uses a bias vector.

    return_sequences

    Boolean. Whether to return the last output in the +output sequence, or the full sequence.

    return_state

    Boolean (default FALSE). Whether to return the last state +in addition to the output.

    go_backwards

    Boolean (default FALSE). If TRUE, process the input +sequence backwards and return the reversed sequence.

    stateful

    Boolean (default FALSE). If TRUE, the last state for each +sample at index i in a batch will be used as initial state for the sample +of index i in the following batch.

    unroll

    Boolean (default FALSE). If TRUE, the network will be unrolled, +else a symbolic loop will be used. Unrolling can speed-up a RNN, although +it tends to be more memory-intensive. Unrolling is only suitable for short +sequences.

    implementation

    one of 0, 1, or 2. If set to 0, the RNN will use an +implementation that uses fewer, larger matrix products, thus running faster +on CPU but consuming more memory. If set to 1, the RNN will use more matrix +products, but smaller ones, thus running slower (may actually be faster on +GPU) while consuming less memory. If set to 2 (LSTM/GRU only), the RNN will +combine the input gate, the forget gate and the output gate into a single +matrix, enabling more time-efficient parallelization on the GPU.

    kernel_initializer

    Initializer for the kernel weights matrix, used +for the linear transformation of the inputs..

    recurrent_initializer

    Initializer for the recurrent_kernel weights +matrix, used for the linear transformation of the recurrent state..

    bias_initializer

    Initializer for the bias vector.

    unit_forget_bias

    Boolean. If TRUE, add 1 to the bias of the forget +gate at initialization. Setting it to true will also force +bias_initializer="zeros". This is recommended in Jozefowicz etal.

    kernel_regularizer

    Regularizer function applied to the kernel +weights matrix.

    recurrent_regularizer

    Regularizer function applied to the +recurrent_kernel weights matrix.

    bias_regularizer

    Regularizer function applied to the bias vector.

    activity_regularizer

    Regularizer function applied to the output of the +layer (its "activation")..

    kernel_constraint

    Constraint function applied to the kernel weights +matrix.

    recurrent_constraint

    Constraint function applied to the +recurrent_kernel weights matrix.

    bias_constraint

    Constraint function applied to the bias vector.

    dropout

    Float between 0 and 1. Fraction of the units to drop for the +linear transformation of the inputs.

    recurrent_dropout

    Float between 0 and 1. Fraction of the units to drop +for the linear transformation of the recurrent state.

    input_shape

    Dimensionality of the input (integer) not including the +samples axis. This argument is required when using this layer as the first +layer in a model.

    batch_input_shape

    Shapes, including the batch size. For instance, +batch_input_shape=c(10, 32) indicates that the expected input will be +batches of 10 32-dimensional vectors. batch_input_shape=list(NULL, 32) +indicates batches of an arbitrary number of 32-dimensional vectors.

    batch_size

    Fixed batch size for layer

    dtype

    The data type expected by the input, as a string (float32, +float64, int32...)

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    Input shapes

    + + +

    3D tensor with shape (batch_size, timesteps, input_dim), +(Optional) 2D tensors with shape (batch_size, output_dim).

    + +

    Output shape

    + + +
      +
    • if return_state: a list of tensors. The first tensor is +the output. The remaining tensors are the last states, +each with shape (batch_size, units).

    • +
    • if return_sequences: 3D tensor with shape +(batch_size, timesteps, units).

    • +
    • else, 2D tensor with shape (batch_size, units).

    • +
    + +

    Masking

    + + +

    This layer supports masking for input data with a variable number +of timesteps. To introduce masks to your data, +use an embedding layer with the mask_zero parameter +set to TRUE.

    + +

    Statefulness in RNNs

    + + +

    You can set RNN layers to be 'stateful', which means that the states +computed for the samples in one batch will be reused as initial states +for the samples in the next batch. This assumes a one-to-one mapping +between samples in different successive batches.

    +

    To enable statefulness:

      +
    • Specify stateful=TRUE in the layer constructor.

    • +
    • Specify a fixed batch size for your model. For sequential models, +pass batch_input_shape = c(...) to the first layer in your model. +For functional models with 1 or more Input layers, pass +batch_shape = c(...) to all the first layers in your model. +This is the expected shape of your inputs including the batch size. +It should be a vector of integers, e.g. c(32, 10, 100).

    • +
    • Specify shuffle = FALSE when calling fit().

    • +
    +

    To reset the states of your model, call reset_states() on either +a specific layer, or on your entire model.

    + +

    Initial State of RNNs

    + + +

    You can specify the initial state of RNN layers symbolically by calling +them with the keyword argument initial_state. The value of +initial_state should be a tensor or list of tensors representing +the initial state of the RNN layer.

    +

    You can specify the initial state of RNN layers numerically by +calling reset_states with the keyword argument states. The value of +states should be a numpy array or list of numpy arrays representing +the initial state of the RNN layer.

    + +

    References

    + + + + +

    See also

    + +

    Other recurrent layers: layer_gru, + layer_simple_rnn

    +

    Other recurrent layers: layer_gru, + layer_simple_rnn

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_masking.html b/website/reference/layer_masking.html new file mode 100644 index 000000000..acc00d595 --- /dev/null +++ b/website/reference/layer_masking.html @@ -0,0 +1,227 @@ + + + + + + + + +Masks a sequence by using a mask value to skip timesteps. — layer_masking • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    For each timestep in the input tensor (dimension #1 in the tensor), if all +values in the input tensor at that timestep are equal to mask_value, then +the timestep will be masked (skipped) in all downstream layers (as long as +they support masking). If any downstream layer does not support masking yet +receives such an input mask, an exception will be raised.

    + + +
    layer_masking(object, mask_value = 0, input_shape = NULL,
    +  batch_input_shape = NULL, batch_size = NULL, dtype = NULL,
    +  name = NULL, trainable = NULL, weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    mask_value

    float, mask value

    input_shape

    Dimensionality of the input (integer) not including the +samples axis. This argument is required when using this layer as the first +layer in a model.

    batch_input_shape

    Shapes, including the batch size. For instance, +batch_input_shape=c(10, 32) indicates that the expected input will be +batches of 10 32-dimensional vectors. batch_input_shape=list(NULL, 32) +indicates batches of an arbitrary number of 32-dimensional vectors.

    batch_size

    Fixed batch size for layer

    dtype

    The data type expected by the input, as a string (float32, +float64, int32...)

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    See also

    + +

    Other core layers: layer_activation, + layer_activity_regularization, + layer_dense, layer_dropout, + layer_flatten, layer_input, + layer_lambda, layer_permute, + layer_repeat_vector, + layer_reshape

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_max_pooling_1d.html b/website/reference/layer_max_pooling_1d.html new file mode 100644 index 000000000..f0826aa5d --- /dev/null +++ b/website/reference/layer_max_pooling_1d.html @@ -0,0 +1,230 @@ + + + + + + + + +Max pooling operation for temporal data. — layer_max_pooling_1d • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Max pooling operation for temporal data.

    + + +
    layer_max_pooling_1d(object, pool_size = 2L, strides = NULL,
    +  padding = "valid", batch_size = NULL, name = NULL, trainable = NULL,
    +  weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    pool_size

    Integer, size of the max pooling windows.

    strides

    Integer, or NULL. Factor by which to downscale. E.g. 2 will +halve the input. If NULL, it will default to pool_size.

    padding

    One of "valid" or "same" (case-insensitive).

    batch_size

    Fixed batch size for layer

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    Input shape

    + +

    3D tensor with shape: (batch_size, steps, features).

    + +

    Output shape

    + +

    3D tensor with shape: (batch_size, downsampled_steps, features).

    + +

    See also

    + +

    Other pooling layers: layer_average_pooling_1d, + layer_average_pooling_2d, + layer_average_pooling_3d, + layer_global_average_pooling_1d, + layer_global_average_pooling_2d, + layer_global_average_pooling_3d, + layer_global_max_pooling_1d, + layer_global_max_pooling_2d, + layer_global_max_pooling_3d, + layer_max_pooling_2d, + layer_max_pooling_3d

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_max_pooling_2d.html b/website/reference/layer_max_pooling_2d.html new file mode 100644 index 000000000..ad9889f10 --- /dev/null +++ b/website/reference/layer_max_pooling_2d.html @@ -0,0 +1,249 @@ + + + + + + + + +Max pooling operation for spatial data. — layer_max_pooling_2d • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Max pooling operation for spatial data.

    + + +
    layer_max_pooling_2d(object, pool_size = c(2L, 2L), strides = NULL,
    +  padding = "valid", data_format = NULL, batch_size = NULL, name = NULL,
    +  trainable = NULL, weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    pool_size

    integer or list of 2 integers, factors by which to downscale +(vertical, horizontal). (2, 2) will halve the input in both spatial +dimension. If only one integer is specified, the same window length will be +used for both dimensions.

    strides

    Integer, list of 2 integers, or NULL. Strides values. If NULL, +it will default to pool_size.

    padding

    One of "valid" or "same" (case-insensitive).

    data_format

    A string, one of channels_last (default) or +channels_first. The ordering of the dimensions in the inputs. +channels_last corresponds to inputs with shape (batch, height, width, channels) while channels_first corresponds to inputs with shape (batch, channels, height, width). It defaults to the image_data_format value +found in your Keras config file at ~/.keras/keras.json. If you never set +it, then it will be "channels_last".

    batch_size

    Fixed batch size for layer

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    Input shape

    + + +
      +
    • If data_format='channels_last': 4D tensor with shape: (batch_size, rows, cols, channels)

    • +
    • If data_format='channels_first': 4D tensor with shape: (batch_size, channels, rows, cols)

    • +
    + +

    Output shape

    + + +
      +
    • If data_format='channels_last': 4D tensor with shape: (batch_size, pooled_rows, pooled_cols, channels)

    • +
    • If data_format='channels_first': 4D tensor with shape: (batch_size, channels, pooled_rows, pooled_cols)

    • +
    + +

    See also

    + +

    Other pooling layers: layer_average_pooling_1d, + layer_average_pooling_2d, + layer_average_pooling_3d, + layer_global_average_pooling_1d, + layer_global_average_pooling_2d, + layer_global_average_pooling_3d, + layer_global_max_pooling_1d, + layer_global_max_pooling_2d, + layer_global_max_pooling_3d, + layer_max_pooling_1d, + layer_max_pooling_3d

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_max_pooling_3d.html b/website/reference/layer_max_pooling_3d.html new file mode 100644 index 000000000..7751f57f7 --- /dev/null +++ b/website/reference/layer_max_pooling_3d.html @@ -0,0 +1,248 @@ + + + + + + + + +Max pooling operation for 3D data (spatial or spatio-temporal). — layer_max_pooling_3d • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Max pooling operation for 3D data (spatial or spatio-temporal).

    + + +
    layer_max_pooling_3d(object, pool_size = c(2L, 2L, 2L), strides = NULL,
    +  padding = "valid", data_format = NULL, batch_size = NULL, name = NULL,
    +  trainable = NULL, weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    pool_size

    list of 3 integers, factors by which to downscale (dim1, +dim2, dim3). (2, 2, 2) will halve the size of the 3D input in each +dimension.

    strides

    list of 3 integers, or NULL. Strides values.

    padding

    One of "valid" or "same" (case-insensitive).

    data_format

    A string, one of channels_last (default) or +channels_first. The ordering of the dimensions in the inputs. +channels_last corresponds to inputs with shape (batch, spatial_dim1, spatial_dim2, spatial_dim3, channels) while channels_first corresponds +to inputs with shape (batch, channels, spatial_dim1, spatial_dim2, spatial_dim3). It defaults to the image_data_format value found in your +Keras config file at ~/.keras/keras.json. If you never set it, then it +will be "channels_last".

    batch_size

    Fixed batch size for layer

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    Input shape

    + + +
      +
    • If data_format='channels_last': 5D tensor with shape: (batch_size, spatial_dim1, spatial_dim2, spatial_dim3, channels)

    • +
    • If data_format='channels_first': 5D tensor with shape: (batch_size, channels, spatial_dim1, spatial_dim2, spatial_dim3)

    • +
    + +

    Output shape

    + + +
      +
    • If data_format='channels_last': 5D tensor with shape: (batch_size, pooled_dim1, pooled_dim2, pooled_dim3, channels)

    • +
    • If data_format='channels_first': 5D tensor with shape: (batch_size, channels, pooled_dim1, pooled_dim2, pooled_dim3)

    • +
    + +

    See also

    + +

    Other pooling layers: layer_average_pooling_1d, + layer_average_pooling_2d, + layer_average_pooling_3d, + layer_global_average_pooling_1d, + layer_global_average_pooling_2d, + layer_global_average_pooling_3d, + layer_global_max_pooling_1d, + layer_global_max_pooling_2d, + layer_global_max_pooling_3d, + layer_max_pooling_1d, + layer_max_pooling_2d

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_maximum.html b/website/reference/layer_maximum.html new file mode 100644 index 000000000..67a347403 --- /dev/null +++ b/website/reference/layer_maximum.html @@ -0,0 +1,185 @@ + + + + + + + + +Layer that computes the maximum (element-wise) a list of inputs. — layer_maximum • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    It takes as input a list of tensors, all of the same shape, and returns a +single tensor (also of the same shape).

    + + +
    layer_maximum(inputs)
    + +

    Arguments

    + + + + + + +
    inputs

    A list of input tensors (at least 2).

    + +

    Value

    + +

    A tensor, the element-wise maximum of the inputs.

    + +

    See also

    + +

    Other merge layers: layer_add, + layer_average, + layer_concatenate, layer_dot, + layer_multiply

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_multiply.html b/website/reference/layer_multiply.html new file mode 100644 index 000000000..f0c0e0b49 --- /dev/null +++ b/website/reference/layer_multiply.html @@ -0,0 +1,185 @@ + + + + + + + + +Layer that multiplies (element-wise) a list of inputs. — layer_multiply • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    It takes as input a list of tensors, all of the same shape, and returns a +single tensor (also of the same shape).

    + + +
    layer_multiply(inputs)
    + +

    Arguments

    + + + + + + +
    inputs

    A list of input tensors (at least 2).

    + +

    Value

    + +

    A tensor, the element-wise product of the inputs.

    + +

    See also

    + +

    Other merge layers: layer_add, + layer_average, + layer_concatenate, layer_dot, + layer_maximum

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_permute.html b/website/reference/layer_permute.html new file mode 100644 index 000000000..9a8247ac9 --- /dev/null +++ b/website/reference/layer_permute.html @@ -0,0 +1,240 @@ + + + + + + + + +Permute the dimensions of an input according to a given pattern — layer_permute • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Permute the dimensions of an input according to a given pattern

    + + +
    layer_permute(object, dims, input_shape = NULL, batch_input_shape = NULL,
    +  batch_size = NULL, dtype = NULL, name = NULL, trainable = NULL,
    +  weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    dims

    List of integers. Permutation pattern, does not include the +samples dimension. Indexing starts at 1. For instance, (2, 1) permutes +the first and second dimension of the input.

    input_shape

    Input shape (list of integers, does not include the +samples axis) which is required when using this layer as the first layer in +a model.

    batch_input_shape

    Shapes, including the batch size. For instance, +batch_input_shape=c(10, 32) indicates that the expected input will be +batches of 10 32-dimensional vectors. batch_input_shape=list(NULL, 32) +indicates batches of an arbitrary number of 32-dimensional vectors.

    batch_size

    Fixed batch size for layer

    dtype

    The data type expected by the input, as a string (float32, +float64, int32...)

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    Note

    + +

    Useful for e.g. connecting RNNs and convnets together.

    + +

    Input and Output Shapes

    + + +

    Input shape: Arbitrary

    +

    Output shape: Same as the input shape, but with the dimensions re-ordered +according to the specified pattern.

    + +

    See also

    + +

    Other core layers: layer_activation, + layer_activity_regularization, + layer_dense, layer_dropout, + layer_flatten, layer_input, + layer_lambda, layer_masking, + layer_repeat_vector, + layer_reshape

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_repeat_vector.html b/website/reference/layer_repeat_vector.html new file mode 100644 index 000000000..d18118084 --- /dev/null +++ b/website/reference/layer_repeat_vector.html @@ -0,0 +1,215 @@ + + + + + + + + +Repeats the input n times. — layer_repeat_vector • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Repeats the input n times.

    + + +
    layer_repeat_vector(object, n, batch_size = NULL, name = NULL,
    +  trainable = NULL, weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    n

    integer, repetition factor.

    batch_size

    Fixed batch size for layer

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    Input shape

    + +

    2D tensor of shape (num_samples, features).

    + +

    Output shape

    + +

    3D tensor of shape (num_samples, n, features).

    + +

    See also

    + +

    Other core layers: layer_activation, + layer_activity_regularization, + layer_dense, layer_dropout, + layer_flatten, layer_input, + layer_lambda, layer_masking, + layer_permute, layer_reshape

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_reshape.html b/website/reference/layer_reshape.html new file mode 100644 index 000000000..649fb14f5 --- /dev/null +++ b/website/reference/layer_reshape.html @@ -0,0 +1,233 @@ + + + + + + + + +Reshapes an output to a certain shape. — layer_reshape • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Reshapes an output to a certain shape.

    + + +
    layer_reshape(object, target_shape, input_shape = NULL,
    +  batch_input_shape = NULL, batch_size = NULL, dtype = NULL,
    +  name = NULL, trainable = NULL, weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    target_shape

    List of integers, does not include the samples dimension +(batch size).

    input_shape

    Input shape (list of integers, does not include the +samples axis) which is required when using this layer as the first layer in +a model.

    batch_input_shape

    Shapes, including the batch size. For instance, +batch_input_shape=c(10, 32) indicates that the expected input will be +batches of 10 32-dimensional vectors. batch_input_shape=list(NULL, 32) +indicates batches of an arbitrary number of 32-dimensional vectors.

    batch_size

    Fixed batch size for layer

    dtype

    The data type expected by the input, as a string (float32, +float64, int32...)

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    Input and Output Shapes

    + + +

    Input shape: Arbitrary, although all dimensions in the input shaped must be +fixed.

    +

    Output shape: (batch_size,) + target_shape.

    + +

    See also

    + +

    Other core layers: layer_activation, + layer_activity_regularization, + layer_dense, layer_dropout, + layer_flatten, layer_input, + layer_lambda, layer_masking, + layer_permute, + layer_repeat_vector

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_separable_conv_2d.html b/website/reference/layer_separable_conv_2d.html new file mode 100644 index 000000000..2de8ce114 --- /dev/null +++ b/website/reference/layer_separable_conv_2d.html @@ -0,0 +1,327 @@ + + + + + + + + +Depthwise separable 2D convolution. — layer_separable_conv_2d • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Separable convolutions consist in first performing a depthwise spatial +convolution (which acts on each input channel separately) followed by a +pointwise convolution which mixes together the resulting output channels. The +depth_multiplier argument controls how many output channels are generated +per input channel in the depthwise step. Intuitively, separable convolutions +can be understood as a way to factorize a convolution kernel into two smaller +kernels, or as an extreme version of an Inception block.

    + + +
    layer_separable_conv_2d(object, filters, kernel_size, strides = c(1L, 1L),
    +  padding = "valid", data_format = NULL, depth_multiplier = 1L,
    +  activation = NULL, use_bias = TRUE,
    +  depthwise_initializer = "glorot_uniform",
    +  pointwise_initializer = "glorot_uniform", bias_initializer = "zeros",
    +  depthwise_regularizer = NULL, pointwise_regularizer = NULL,
    +  bias_regularizer = NULL, activity_regularizer = NULL,
    +  depthwise_constraint = NULL, pointwise_constraint = NULL,
    +  bias_constraint = NULL, batch_size = NULL, name = NULL,
    +  trainable = NULL, weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    filters

    Integer, the dimensionality of the output space (i.e. the +number output of filters in the convolution).

    kernel_size

    An integer or list of 2 integers, specifying the width and +height of the 2D convolution window. Can be a single integer to specify the +same value for all spatial dimensions.

    strides

    An integer or list of 2 integers, specifying the strides of +the convolution along the width and height. Can be a single integer to +specify the same value for all spatial dimensions. Specifying any stride +value != 1 is incompatible with specifying any dilation_rate value != 1.

    padding

    one of "valid" or "same" (case-insensitive).

    data_format

    A string, one of channels_last (default) or +channels_first. The ordering of the dimensions in the inputs. +channels_last corresponds to inputs with shape (batch, height, width, channels) while channels_first corresponds to inputs with shape (batch, channels, height, width). It defaults to the image_data_format value +found in your Keras config file at ~/.keras/keras.json. If you never set +it, then it will be "channels_last".

    depth_multiplier

    The number of depthwise convolution output channels +for each input channel. The total number of depthwise convolution output +channels will be equal to filterss_in * depth_multiplier.

    activation

    Activation function to use. If you don't specify anything, +no activation is applied (ie. "linear" activation: a(x) = x).

    use_bias

    Boolean, whether the layer uses a bias vector.

    depthwise_initializer

    Initializer for the depthwise kernel matrix.

    pointwise_initializer

    Initializer for the pointwise kernel matrix.

    bias_initializer

    Initializer for the bias vector.

    depthwise_regularizer

    Regularizer function applied to the depthwise +kernel matrix.

    pointwise_regularizer

    Regularizer function applied to the depthwise +kernel matrix.

    bias_regularizer

    Regularizer function applied to the bias vector.

    activity_regularizer

    Regularizer function applied to the output of the +layer (its "activation")..

    depthwise_constraint

    Constraint function applied to the depthwise +kernel matrix.

    pointwise_constraint

    Constraint function applied to the pointwise +kernel matrix.

    bias_constraint

    Constraint function applied to the bias vector.

    batch_size

    Fixed batch size for layer

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    Input shape

    + +

    4D tensor with shape: (batch, channels, rows, cols) +if data_format='channels_first' or 4D tensor with shape: (batch, rows, cols, channels) if data_format='channels_last'.

    + +

    Output shape

    + +

    4D tensor with shape: (batch, filters, new_rows, new_cols) if data_format='channels_first' or 4D tensor with shape: +(batch, new_rows, new_cols, filters) if data_format='channels_last'. +rows and cols values might have changed due to padding.

    + +

    See also

    + +

    Other convolutional layers: layer_conv_1d, + layer_conv_2d_transpose, + layer_conv_2d, + layer_conv_3d_transpose, + layer_conv_3d, + layer_conv_lstm_2d, + layer_cropping_1d, + layer_cropping_2d, + layer_cropping_3d, + layer_upsampling_1d, + layer_upsampling_2d, + layer_upsampling_3d, + layer_zero_padding_1d, + layer_zero_padding_2d, + layer_zero_padding_3d

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_simple_rnn.html b/website/reference/layer_simple_rnn.html new file mode 100644 index 000000000..2cc10cf03 --- /dev/null +++ b/website/reference/layer_simple_rnn.html @@ -0,0 +1,407 @@ + + + + + + + + +Fully-connected RNN where the output is to be fed back to input. — layer_simple_rnn • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Fully-connected RNN where the output is to be fed back to input.

    + + +
    layer_simple_rnn(object, units, activation = "tanh", use_bias = TRUE,
    +  return_sequences = FALSE, return_state = FALSE, go_backwards = FALSE,
    +  stateful = FALSE, unroll = FALSE, implementation = 0L,
    +  kernel_initializer = "glorot_uniform",
    +  recurrent_initializer = "orthogonal", bias_initializer = "zeros",
    +  kernel_regularizer = NULL, recurrent_regularizer = NULL,
    +  bias_regularizer = NULL, activity_regularizer = NULL,
    +  kernel_constraint = NULL, recurrent_constraint = NULL,
    +  bias_constraint = NULL, dropout = 0, recurrent_dropout = 0,
    +  input_shape = NULL, batch_input_shape = NULL, batch_size = NULL,
    +  dtype = NULL, name = NULL, trainable = NULL, weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    units

    Positive integer, dimensionality of the output space.

    activation

    Activation function to use. If you pass NULL, no +activation is applied (ie. "linear" activation: a(x) = x).

    use_bias

    Boolean, whether the layer uses a bias vector.

    return_sequences

    Boolean. Whether to return the last output in the +output sequence, or the full sequence.

    return_state

    Boolean (default FALSE). Whether to return the last state +in addition to the output.

    go_backwards

    Boolean (default FALSE). If TRUE, process the input +sequence backwards and return the reversed sequence.

    stateful

    Boolean (default FALSE). If TRUE, the last state for each +sample at index i in a batch will be used as initial state for the sample +of index i in the following batch.

    unroll

    Boolean (default FALSE). If TRUE, the network will be unrolled, +else a symbolic loop will be used. Unrolling can speed-up a RNN, although +it tends to be more memory-intensive. Unrolling is only suitable for short +sequences.

    implementation

    one of 0, 1, or 2. If set to 0, the RNN will use an +implementation that uses fewer, larger matrix products, thus running faster +on CPU but consuming more memory. If set to 1, the RNN will use more matrix +products, but smaller ones, thus running slower (may actually be faster on +GPU) while consuming less memory. If set to 2 (LSTM/GRU only), the RNN will +combine the input gate, the forget gate and the output gate into a single +matrix, enabling more time-efficient parallelization on the GPU.

    kernel_initializer

    Initializer for the kernel weights matrix, used +for the linear transformation of the inputs..

    recurrent_initializer

    Initializer for the recurrent_kernel weights +matrix, used for the linear transformation of the recurrent state..

    bias_initializer

    Initializer for the bias vector.

    kernel_regularizer

    Regularizer function applied to the kernel +weights matrix.

    recurrent_regularizer

    Regularizer function applied to the +recurrent_kernel weights matrix.

    bias_regularizer

    Regularizer function applied to the bias vector.

    activity_regularizer

    Regularizer function applied to the output of the +layer (its "activation")..

    kernel_constraint

    Constraint function applied to the kernel weights +matrix.

    recurrent_constraint

    Constraint function applied to the +recurrent_kernel weights matrix.

    bias_constraint

    Constraint function applied to the bias vector.

    dropout

    Float between 0 and 1. Fraction of the units to drop for the +linear transformation of the inputs.

    recurrent_dropout

    Float between 0 and 1. Fraction of the units to drop +for the linear transformation of the recurrent state.

    input_shape

    Dimensionality of the input (integer) not including the +samples axis. This argument is required when using this layer as the first +layer in a model.

    batch_input_shape

    Shapes, including the batch size. For instance, +batch_input_shape=c(10, 32) indicates that the expected input will be +batches of 10 32-dimensional vectors. batch_input_shape=list(NULL, 32) +indicates batches of an arbitrary number of 32-dimensional vectors.

    batch_size

    Fixed batch size for layer

    dtype

    The data type expected by the input, as a string (float32, +float64, int32...)

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    Input shapes

    + + +

    3D tensor with shape (batch_size, timesteps, input_dim), +(Optional) 2D tensors with shape (batch_size, output_dim).

    + +

    Output shape

    + + +
      +
    • if return_state: a list of tensors. The first tensor is +the output. The remaining tensors are the last states, +each with shape (batch_size, units).

    • +
    • if return_sequences: 3D tensor with shape +(batch_size, timesteps, units).

    • +
    • else, 2D tensor with shape (batch_size, units).

    • +
    + +

    Masking

    + + +

    This layer supports masking for input data with a variable number +of timesteps. To introduce masks to your data, +use an embedding layer with the mask_zero parameter +set to TRUE.

    + +

    Statefulness in RNNs

    + + +

    You can set RNN layers to be 'stateful', which means that the states +computed for the samples in one batch will be reused as initial states +for the samples in the next batch. This assumes a one-to-one mapping +between samples in different successive batches.

    +

    To enable statefulness:

      +
    • Specify stateful=TRUE in the layer constructor.

    • +
    • Specify a fixed batch size for your model. For sequential models, +pass batch_input_shape = c(...) to the first layer in your model. +For functional models with 1 or more Input layers, pass +batch_shape = c(...) to all the first layers in your model. +This is the expected shape of your inputs including the batch size. +It should be a vector of integers, e.g. c(32, 10, 100).

    • +
    • Specify shuffle = FALSE when calling fit().

    • +
    +

    To reset the states of your model, call reset_states() on either +a specific layer, or on your entire model.

    + +

    Initial State of RNNs

    + + +

    You can specify the initial state of RNN layers symbolically by calling +them with the keyword argument initial_state. The value of +initial_state should be a tensor or list of tensors representing +the initial state of the RNN layer.

    +

    You can specify the initial state of RNN layers numerically by +calling reset_states with the keyword argument states. The value of +states should be a numpy array or list of numpy arrays representing +the initial state of the RNN layer.

    + +

    References

    + + + + +

    See also

    + +

    Other recurrent layers: layer_gru, + layer_lstm

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_spatial_dropout_1d.html b/website/reference/layer_spatial_dropout_1d.html new file mode 100644 index 000000000..be5bbe52c --- /dev/null +++ b/website/reference/layer_spatial_dropout_1d.html @@ -0,0 +1,224 @@ + + + + + + + + +Spatial 1D version of Dropout. — layer_spatial_dropout_1d • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    This version performs the same function as Dropout, however it drops entire +1D feature maps instead of individual elements. If adjacent frames within +feature maps are strongly correlated (as is normally the case in early +convolution layers) then regular dropout will not regularize the activations +and will otherwise just result in an effective learning rate decrease. In +this case, layer_spatial_dropout_1d will help promote independence between +feature maps and should be used instead.

    + + +
    layer_spatial_dropout_1d(object, rate, batch_size = NULL, name = NULL,
    +  trainable = NULL, weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    rate

    float between 0 and 1. Fraction of the input units to drop.

    batch_size

    Fixed batch size for layer

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    Input shape

    + +

    3D tensor with shape: (samples, timesteps, channels)

    + +

    Output shape

    + +

    Same as input

    + +

    References

    + +

    - Efficient Object Localization Using ConvolutionalNetworks

    + +

    See also

    + +

    Other dropout layers: layer_dropout, + layer_spatial_dropout_2d, + layer_spatial_dropout_3d

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_spatial_dropout_2d.html b/website/reference/layer_spatial_dropout_2d.html new file mode 100644 index 000000000..8cf91b747 --- /dev/null +++ b/website/reference/layer_spatial_dropout_2d.html @@ -0,0 +1,233 @@ + + + + + + + + +Spatial 2D version of Dropout. — layer_spatial_dropout_2d • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    This version performs the same function as Dropout, however it drops entire +2D feature maps instead of individual elements. If adjacent pixels within +feature maps are strongly correlated (as is normally the case in early +convolution layers) then regular dropout will not regularize the activations +and will otherwise just result in an effective learning rate decrease. In +this case, layer_spatial_dropout_2d will help promote independence between +feature maps and should be used instead.

    + + +
    layer_spatial_dropout_2d(object, rate, data_format = NULL,
    +  batch_size = NULL, name = NULL, trainable = NULL, weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    rate

    float between 0 and 1. Fraction of the input units to drop.

    data_format

    'channels_first' or 'channels_last'. In 'channels_first' +mode, the channels dimension (the depth) is at index 1, in 'channels_last' +mode is it at index 3. It defaults to the image_data_format value found +in your Keras config file at ~/.keras/keras.json. If you never set it, +then it will be "channels_last".

    batch_size

    Fixed batch size for layer

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    Input shape

    + +

    4D tensor with shape: (samples, channels, rows, cols) +if data_format='channels_first' or 4D tensor with shape: (samples, rows, cols, channels) if data_format='channels_last'.

    + +

    Output shape

    + +

    Same as input

    + +

    References

    + +

    - Efficient Object Localization Using ConvolutionalNetworks

    + +

    See also

    + +

    Other dropout layers: layer_dropout, + layer_spatial_dropout_1d, + layer_spatial_dropout_3d

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_spatial_dropout_3d.html b/website/reference/layer_spatial_dropout_3d.html new file mode 100644 index 000000000..8faad1bcb --- /dev/null +++ b/website/reference/layer_spatial_dropout_3d.html @@ -0,0 +1,232 @@ + + + + + + + + +Spatial 3D version of Dropout. — layer_spatial_dropout_3d • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    This version performs the same function as Dropout, however it drops entire +3D feature maps instead of individual elements. If adjacent voxels within +feature maps are strongly correlated (as is normally the case in early +convolution layers) then regular dropout will not regularize the activations +and will otherwise just result in an effective learning rate decrease. In +this case, layer_spatial_dropout_3d will help promote independence between +feature maps and should be used instead.

    + + +
    layer_spatial_dropout_3d(object, rate, data_format = NULL,
    +  batch_size = NULL, name = NULL, trainable = NULL, weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    rate

    float between 0 and 1. Fraction of the input units to drop.

    data_format

    'channels_first' or 'channels_last'. In 'channels_first' +mode, the channels dimension (the depth) is at index 1, in 'channels_last' +mode is it at index 4. It defaults to the image_data_format value found +in your Keras config file at ~/.keras/keras.json. If you never set it, +then it will be "channels_last".

    batch_size

    Fixed batch size for layer

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    Input shape

    + +

    5D tensor with shape: (samples, channels, dim1, dim2, dim3) if data_format='channels_first' or 5D tensor with shape: (samples, dim1, dim2, dim3, channels) if data_format='channels_last'.

    + +

    Output shape

    + +

    Same as input

    + +

    References

    + +

    - Efficient Object Localization Using ConvolutionalNetworks

    + +

    See also

    + +

    Other dropout layers: layer_dropout, + layer_spatial_dropout_1d, + layer_spatial_dropout_2d

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_upsampling_1d.html b/website/reference/layer_upsampling_1d.html new file mode 100644 index 000000000..cbdb2a829 --- /dev/null +++ b/website/reference/layer_upsampling_1d.html @@ -0,0 +1,224 @@ + + + + + + + + +Upsampling layer for 1D inputs. — layer_upsampling_1d • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Repeats each temporal step size times along the time axis.

    + + +
    layer_upsampling_1d(object, size = 2L, batch_size = NULL, name = NULL,
    +  trainable = NULL, weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    size

    integer. Upsampling factor.

    batch_size

    Fixed batch size for layer

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    Input shape

    + +

    3D tensor with shape: (batch, steps, features).

    + +

    Output shape

    + +

    3D tensor with shape: (batch, upsampled_steps, features).

    + +

    See also

    + +

    Other convolutional layers: layer_conv_1d, + layer_conv_2d_transpose, + layer_conv_2d, + layer_conv_3d_transpose, + layer_conv_3d, + layer_conv_lstm_2d, + layer_cropping_1d, + layer_cropping_2d, + layer_cropping_3d, + layer_separable_conv_2d, + layer_upsampling_2d, + layer_upsampling_3d, + layer_zero_padding_1d, + layer_zero_padding_2d, + layer_zero_padding_3d

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_upsampling_2d.html b/website/reference/layer_upsampling_2d.html new file mode 100644 index 000000000..2db12a876 --- /dev/null +++ b/website/reference/layer_upsampling_2d.html @@ -0,0 +1,243 @@ + + + + + + + + +Upsampling layer for 2D inputs. — layer_upsampling_2d • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Repeats the rows and columns of the data by size[[0]] and size[[1]] respectively.

    +

    [[0]: R:[0 +[[1]: R:[1

    + + +
    layer_upsampling_2d(object, size = c(2L, 2L), data_format = NULL,
    +  batch_size = NULL, name = NULL, trainable = NULL, weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    size

    int, or list of 2 integers. The upsampling factors for rows and +columns.

    data_format

    A string, one of channels_last (default) or +channels_first. The ordering of the dimensions in the inputs. +channels_last corresponds to inputs with shape (batch, height, width, channels) while channels_first corresponds to inputs with shape (batch, channels, height, width). It defaults to the image_data_format value +found in your Keras config file at ~/.keras/keras.json. If you never set +it, then it will be "channels_last".

    batch_size

    Fixed batch size for layer

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    Input shape

    + + +

    4D tensor with shape:

      +
    • If data_format is "channels_last": (batch, rows, cols, channels)

    • +
    • If data_format is "channels_first": (batch, channels, rows, cols)

    • +
    + +

    Output shape

    + + +

    4D tensor with shape:

      +
    • If data_format is "channels_last": (batch, upsampled_rows, upsampled_cols, channels)

    • +
    • If data_format is "channels_first": (batch, channels, upsampled_rows, upsampled_cols)

    • +
    + +

    See also

    + +

    Other convolutional layers: layer_conv_1d, + layer_conv_2d_transpose, + layer_conv_2d, + layer_conv_3d_transpose, + layer_conv_3d, + layer_conv_lstm_2d, + layer_cropping_1d, + layer_cropping_2d, + layer_cropping_3d, + layer_separable_conv_2d, + layer_upsampling_1d, + layer_upsampling_3d, + layer_zero_padding_1d, + layer_zero_padding_2d, + layer_zero_padding_3d

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_upsampling_3d.html b/website/reference/layer_upsampling_3d.html new file mode 100644 index 000000000..8e78b4933 --- /dev/null +++ b/website/reference/layer_upsampling_3d.html @@ -0,0 +1,246 @@ + + + + + + + + +Upsampling layer for 3D inputs. — layer_upsampling_3d • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Repeats the 1st, 2nd and 3rd dimensions of the data by size[[0]], size[[1]] and +size[[2]] respectively.

    +

    [[0]: R:[0 +[[1]: R:[1 +[[2]: R:[2

    + + +
    layer_upsampling_3d(object, size = c(2L, 2L, 2L), data_format = NULL,
    +  batch_size = NULL, name = NULL, trainable = NULL, weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    size

    int, or list of 3 integers. The upsampling factors for dim1, dim2 +and dim3.

    data_format

    A string, one of channels_last (default) or +channels_first. The ordering of the dimensions in the inputs. +channels_last corresponds to inputs with shape (batch, spatial_dim1, spatial_dim2, spatial_dim3, channels) while channels_first corresponds +to inputs with shape (batch, channels, spatial_dim1, spatial_dim2, spatial_dim3). It defaults to the image_data_format value found in your +Keras config file at ~/.keras/keras.json. If you never set it, then it +will be "channels_last".

    batch_size

    Fixed batch size for layer

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    Input shape

    + + +

    5D tensor with shape:

      +
    • If data_format is "channels_last": (batch, dim1, dim2, dim3, channels)

    • +
    • If data_format is "channels_first": (batch, channels, dim1, dim2, dim3)

    • +
    + +

    Output shape

    + + +

    5D tensor with shape:

      +
    • If data_format is "channels_last": (batch, upsampled_dim1, upsampled_dim2, upsampled_dim3, channels)

    • +
    • If data_format is "channels_first": (batch, channels, upsampled_dim1, upsampled_dim2, upsampled_dim3)

    • +
    + +

    See also

    + +

    Other convolutional layers: layer_conv_1d, + layer_conv_2d_transpose, + layer_conv_2d, + layer_conv_3d_transpose, + layer_conv_3d, + layer_conv_lstm_2d, + layer_cropping_1d, + layer_cropping_2d, + layer_cropping_3d, + layer_separable_conv_2d, + layer_upsampling_1d, + layer_upsampling_2d, + layer_zero_padding_1d, + layer_zero_padding_2d, + layer_zero_padding_3d

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_zero_padding_1d.html b/website/reference/layer_zero_padding_1d.html new file mode 100644 index 000000000..e4d1e9e68 --- /dev/null +++ b/website/reference/layer_zero_padding_1d.html @@ -0,0 +1,229 @@ + + + + + + + + +Zero-padding layer for 1D input (e.g. temporal sequence). — layer_zero_padding_1d • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Zero-padding layer for 1D input (e.g. temporal sequence).

    + + +
    layer_zero_padding_1d(object, padding = 1L, batch_size = NULL,
    +  name = NULL, trainable = NULL, weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    padding

    int, or list of int (length 2)

      +
    • If int: How many zeros to add at the beginning and end of the padding dimension (axis 1).

    • +
    • If list of int (length 2): How many zeros to add at the beginning and at the end of the padding dimension ((left_pad, right_pad)).

    • +
    batch_size

    Fixed batch size for layer

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    Input shape

    + + +

    3D tensor with shape (batch, axis_to_pad, features)

    + +

    Output shape

    + + +

    3D tensor with shape (batch, padded_axis, features)

    + +

    See also

    + +

    Other convolutional layers: layer_conv_1d, + layer_conv_2d_transpose, + layer_conv_2d, + layer_conv_3d_transpose, + layer_conv_3d, + layer_conv_lstm_2d, + layer_cropping_1d, + layer_cropping_2d, + layer_cropping_3d, + layer_separable_conv_2d, + layer_upsampling_1d, + layer_upsampling_2d, + layer_upsampling_3d, + layer_zero_padding_2d, + layer_zero_padding_3d

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_zero_padding_2d.html b/website/reference/layer_zero_padding_2d.html new file mode 100644 index 000000000..1ba4d9e54 --- /dev/null +++ b/website/reference/layer_zero_padding_2d.html @@ -0,0 +1,244 @@ + + + + + + + + +Zero-padding layer for 2D input (e.g. picture). — layer_zero_padding_2d • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    This layer can add rows and columns of zeros at the top, bottom, left and +right side of an image tensor.

    + + +
    layer_zero_padding_2d(object, padding = c(1L, 1L), data_format = NULL,
    +  batch_size = NULL, name = NULL, trainable = NULL, weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    padding

    int, or list of 2 ints, or list of 2 lists of 2 ints.

      +
    • If int: the same symmetric padding is applied to width and height.

    • +
    • If list of 2 ints: interpreted as two different symmetric padding values for height +and width: (symmetric_height_pad, symmetric_width_pad).

    • +
    • If list of 2 lists of 2 ints: interpreted as ((top_pad, bottom_pad), (left_pad, right_pad))

    • +
    data_format

    A string, one of channels_last (default) or +channels_first. The ordering of the dimensions in the inputs. +channels_last corresponds to inputs with shape (batch, height, width, channels) while channels_first corresponds to inputs with shape (batch, channels, height, width). It defaults to the image_data_format value +found in your Keras config file at ~/.keras/keras.json. If you never set +it, then it will be "channels_last".

    batch_size

    Fixed batch size for layer

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    Input shape

    + +

    4D tensor with shape:

      +
    • If data_format is "channels_last": (batch, rows, cols, channels)

    • +
    • If data_format is "channels_first": (batch, channels, rows, cols)

    • +
    + +

    Output shape

    + +

    4D tensor with shape:

      +
    • If data_format is "channels_last": (batch, padded_rows, padded_cols, channels)

    • +
    • If data_format is "channels_first": (batch, channels, padded_rows, padded_cols)

    • +
    + +

    See also

    + +

    Other convolutional layers: layer_conv_1d, + layer_conv_2d_transpose, + layer_conv_2d, + layer_conv_3d_transpose, + layer_conv_3d, + layer_conv_lstm_2d, + layer_cropping_1d, + layer_cropping_2d, + layer_cropping_3d, + layer_separable_conv_2d, + layer_upsampling_1d, + layer_upsampling_2d, + layer_upsampling_3d, + layer_zero_padding_1d, + layer_zero_padding_3d

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/layer_zero_padding_3d.html b/website/reference/layer_zero_padding_3d.html new file mode 100644 index 000000000..eb073c501 --- /dev/null +++ b/website/reference/layer_zero_padding_3d.html @@ -0,0 +1,244 @@ + + + + + + + + +Zero-padding layer for 3D data (spatial or spatio-temporal). — layer_zero_padding_3d • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Zero-padding layer for 3D data (spatial or spatio-temporal).

    + + +
    layer_zero_padding_3d(object, padding = c(1L, 1L, 1L), data_format = NULL,
    +  batch_size = NULL, name = NULL, trainable = NULL, weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    padding

    int, or list of 3 ints, or list of 3 lists of 2 ints.

      +
    • If int: the same symmetric padding is applied to width and height.

    • +
    • If list of 3 ints: interpreted as three different symmetric padding values: +(symmetric_dim1_pad, symmetric_dim2_pad, symmetric_dim3_pad).

    • +
    • If list of 3 lists of 2 ints: interpreted as ((left_dim1_pad, right_dim1_pad), (left_dim2_pad, right_dim2_pad), (left_dim3_pad, right_dim3_pad))

    • +
    data_format

    A string, one of channels_last (default) or +channels_first. The ordering of the dimensions in the inputs. +channels_last corresponds to inputs with shape (batch, spatial_dim1, spatial_dim2, spatial_dim3, channels) while channels_first corresponds +to inputs with shape (batch, channels, spatial_dim1, spatial_dim2, spatial_dim3). It defaults to the image_data_format value found in your +Keras config file at ~/.keras/keras.json. If you never set it, then it +will be "channels_last".

    batch_size

    Fixed batch size for layer

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    Input shape

    + +

    5D tensor with shape:

      +
    • If data_format is "channels_last": (batch, first_axis_to_pad, second_axis_to_pad, third_axis_to_pad, depth)

    • +
    • If data_format is "channels_first": (batch, depth, first_axis_to_pad, second_axis_to_pad, third_axis_to_pad)

    • +
    + +

    Output shape

    + +

    5D tensor with shape:

      +
    • If data_format is "channels_last": (batch, first_padded_axis, second_padded_axis, third_axis_to_pad, depth)

    • +
    • If data_format is "channels_first": (batch, depth, first_padded_axis, second_padded_axis, third_axis_to_pad)

    • +
    + +

    See also

    + +

    Other convolutional layers: layer_conv_1d, + layer_conv_2d_transpose, + layer_conv_2d, + layer_conv_3d_transpose, + layer_conv_3d, + layer_conv_lstm_2d, + layer_cropping_1d, + layer_cropping_2d, + layer_cropping_3d, + layer_separable_conv_2d, + layer_upsampling_1d, + layer_upsampling_2d, + layer_upsampling_3d, + layer_zero_padding_1d, + layer_zero_padding_2d

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/loss_mean_squared_error.html b/website/reference/loss_mean_squared_error.html new file mode 100644 index 000000000..27c8e7e4c --- /dev/null +++ b/website/reference/loss_mean_squared_error.html @@ -0,0 +1,235 @@ + + + + + + + + +Model loss functions — loss_mean_squared_error • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Model loss functions

    + + +
    loss_mean_squared_error(y_true, y_pred)
    +
    +loss_mean_absolute_error(y_true, y_pred)
    +
    +loss_mean_absolute_percentage_error(y_true, y_pred)
    +
    +loss_mean_squared_logarithmic_error(y_true, y_pred)
    +
    +loss_squared_hinge(y_true, y_pred)
    +
    +loss_hinge(y_true, y_pred)
    +
    +loss_categorical_hinge(y_true, y_pred)
    +
    +loss_logcosh(y_true, y_pred)
    +
    +loss_categorical_crossentropy(y_true, y_pred)
    +
    +loss_sparse_categorical_crossentropy(y_true, y_pred)
    +
    +loss_binary_crossentropy(y_true, y_pred)
    +
    +loss_kullback_leibler_divergence(y_true, y_pred)
    +
    +loss_poisson(y_true, y_pred)
    +
    +loss_cosine_proximity(y_true, y_pred)
    + +

    Arguments

    + + + + + + + + + + +
    y_true

    True labels (Tensor)

    y_pred

    Predictions (Tensor of the same shape as y_true)

    + +

    Details

    + +

    Loss functions are to be supplied in the loss parameter of the +compile() function.

    +

    Loss functions can be specified either using the name of a built in loss +function (e.g. 'loss = binary_crossentropy'), a reference to a built in loss +function (e.g. 'loss = loss_binary_crossentropy()') or by passing an +artitrary function that returns a scalar for each data-point and takes the +following two arguments:

      +
    • y_true True labels (Tensor)

    • +
    • y_pred Predictions (Tensor of the same shape as y_true)

    • +
    +

    The actual optimized objective is the mean of the output array across all +datapoints.

    + +

    Categorical Crossentropy

    + + +

    When using the categorical_crossentropy loss, your targets should be in +categorical format (e.g. if you have 10 classes, the target for each sample +should be a 10-dimensional vector that is all-zeros expect for a 1 at the +index corresponding to the class of the sample). In order to convert +integer targets into categorical targets, you can use the Keras utility +function to_categorical(): + categorical_labels <- to_categorical(int_labels, num_classes = NULL)

    + +

    See also

    + +

    compile()

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/make_sampling_table.html b/website/reference/make_sampling_table.html new file mode 100644 index 000000000..280d619ae --- /dev/null +++ b/website/reference/make_sampling_table.html @@ -0,0 +1,204 @@ + + + + + + + + +Generates a word rank-based probabilistic sampling table. — make_sampling_table • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    This generates an array where the ith element is the probability that a word +of rank i would be sampled, according to the sampling distribution used in +word2vec. The word2vec formula is: p(word) = min(1, +sqrt(word.frequency/sampling_factor) / (word.frequency/sampling_factor)) We +assume that the word frequencies follow Zipf's law (s=1) to derive a +numerical approximation of frequency(rank): frequency(rank) ~ 1/(rank * +(log(rank) + gamma) + 1/2 - 1/(12*rank)) where gamma is the Euler-Mascheroni +constant.

    + + +
    make_sampling_table(size, sampling_factor = 1e-05)
    + +

    Arguments

    + + + + + + + + + + +
    size

    int, number of possible words to sample.

    sampling_factor

    the sampling factor in the word2vec formula.

    + +

    Value

    + +

    An array of length size where the ith entry is the +probability that a word of rank i should be sampled.

    + +

    Note

    + +

    The word2vec formula is: p(word) = min(1, +sqrt(word.frequency/sampling_factor) / (word.frequency/sampling_factor))

    + +

    See also

    + +

    Other text preprocessing: pad_sequences, + skipgrams, + text_hashing_trick, + text_one_hot, + text_to_word_sequence

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/metric_binary_accuracy.html b/website/reference/metric_binary_accuracy.html new file mode 100644 index 000000000..13c70d5b7 --- /dev/null +++ b/website/reference/metric_binary_accuracy.html @@ -0,0 +1,238 @@ + + + + + + + + +Model performance metrics — metric_binary_accuracy • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Model performance metrics

    + + +
    metric_binary_accuracy(y_true, y_pred)
    +
    +metric_binary_crossentropy(y_true, y_pred)
    +
    +metric_categorical_accuracy(y_true, y_pred)
    +
    +metric_categorical_crossentropy(y_true, y_pred)
    +
    +metric_cosine_proximity(y_true, y_pred)
    +
    +metric_hinge(y_true, y_pred)
    +
    +metric_kullback_leibler_divergence(y_true, y_pred)
    +
    +metric_mean_absolute_error(y_true, y_pred)
    +
    +metric_mean_absolute_percentage_error(y_true, y_pred)
    +
    +metric_mean_squared_error(y_true, y_pred)
    +
    +metric_mean_squared_logarithmic_error(y_true, y_pred)
    +
    +metric_poisson(y_true, y_pred)
    +
    +metric_sparse_categorical_crossentropy(y_true, y_pred)
    +
    +metric_squared_hinge(y_true, y_pred)
    +
    +metric_top_k_categorical_accuracy(y_true, y_pred, k = 5)
    +
    +metric_sparse_top_k_categorical_accuracy(y_true, y_pred, k = 5)
    + +

    Arguments

    + + + + + + + + + + + + + + +
    y_true

    True labels (tensor)

    y_pred

    Predictions (tensor of the same shape as y_true).

    k

    An integer, number of top elements to consider.

    + +

    Note

    + +

    Metric functions are to be supplied in the metrics parameter of the +compile() function.

    + +

    Custom Metrics

    + + +

    You can provide an arbitrary R function as a custom metric. Note that +the y_true and y_pred parameters are tensors, so computations on +them should use backend tensor functions. For example:

    # create metric using backend tensor functions
    +K <- backend()
    +metric_mean_pred <- function(y_true, y_pred) {
    +  K$mean(y_pred) 
    +}
    +    model 
    +  optimizer = optimizer_rmsprop(),
    +  loss = loss_binary_crossentropy,
    +  metrics = c('accuracy', 
    +              'mean_pred' = metric_mean_pred)
    +)
    +
    +

    Note that a name ('mean_pred') is provided for the custom metric +function. This name is used within training progress output.

    +

    Documentation on the available backend tensor functions can be +found at https://rstudio.github.io/keras/articles/backend.html#backend-functions.

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/model_to_json.html b/website/reference/model_to_json.html new file mode 100644 index 000000000..3a817bdc7 --- /dev/null +++ b/website/reference/model_to_json.html @@ -0,0 +1,191 @@ + + + + + + + + +Model configuration as JSON — model_to_json • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Save and re-load models configurations as JSON. Note that the representation +does not include the weights, only the architecture.

    + + +
    model_to_json(object)
    +
    +model_from_json(json, custom_objects = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + +
    object

    Model object to save

    json

    JSON with model configuration

    custom_objects

    Optional named list mapping names to custom classes or +functions to be considered during deserialization.

    + +

    See also

    + +

    Other model persistence: get_weights, + model_to_yaml, + save_model_hdf5, + save_model_weights_hdf5, + serialize_model

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/model_to_yaml.html b/website/reference/model_to_yaml.html new file mode 100644 index 000000000..c61e2d4a0 --- /dev/null +++ b/website/reference/model_to_yaml.html @@ -0,0 +1,191 @@ + + + + + + + + +Model configuration as YAML — model_to_yaml • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Save and re-load models configurations as YAML Note that the representation +does not include the weights, only the architecture.

    + + +
    model_to_yaml(object)
    +
    +model_from_yaml(yaml, custom_objects = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + +
    object

    Model object to save

    yaml

    YAML with model configuration

    custom_objects

    Optional named list mapping names to custom classes or +functions to be considered during deserialization.

    + +

    See also

    + +

    Other model persistence: get_weights, + model_to_json, + save_model_hdf5, + save_model_weights_hdf5, + serialize_model

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/normalize.html b/website/reference/normalize.html new file mode 100644 index 000000000..7d1235699 --- /dev/null +++ b/website/reference/normalize.html @@ -0,0 +1,183 @@ + + + + + + + + +Normalize a matrix or nd-array — normalize • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Normalize a matrix or nd-array

    + + +
    normalize(x, axis = -1, order = 2)
    + +

    Arguments

    + + + + + + + + + + + + + + +
    x

    Matrix or array to normalize

    axis

    Axis along which to normalize

    order

    Normalization order (e.g. 2 for L2 norm)

    + +

    Value

    + +

    A normalized copy of the array.

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/optimizer_adadelta.html b/website/reference/optimizer_adadelta.html new file mode 100644 index 000000000..26c3ab33b --- /dev/null +++ b/website/reference/optimizer_adadelta.html @@ -0,0 +1,210 @@ + + + + + + + + +Adadelta optimizer. — optimizer_adadelta • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Adadelta optimizer as described in ADADELTA: An Adaptive Learning RateMethod.

    + + +
    optimizer_adadelta(lr = 1, rho = 0.95, epsilon = 1e-08, decay = 0,
    +  clipnorm = NULL, clipvalue = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    lr

    float >= 0. Learning rate.

    rho

    float >= 0. Decay factor.

    epsilon

    float >= 0. Fuzz factor.

    decay

    float >= 0. Learning rate decay over each update.

    clipnorm

    Gradients will be clipped when their L2 norm exceeds this +value.

    clipvalue

    Gradients will be clipped when their absolute value exceeds +this value.

    + +

    Note

    + +

    It is recommended to leave the parameters of this optimizer at their +default values.

    + +

    See also

    + +

    Other optimizers: optimizer_adagrad, + optimizer_adamax, + optimizer_adam, + optimizer_nadam, + optimizer_rmsprop, + optimizer_sgd

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/optimizer_adagrad.html b/website/reference/optimizer_adagrad.html new file mode 100644 index 000000000..6e13e88f9 --- /dev/null +++ b/website/reference/optimizer_adagrad.html @@ -0,0 +1,206 @@ + + + + + + + + +Adagrad optimizer. — optimizer_adagrad • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Adagrad optimizer as described in Adaptive Subgradient Methods for OnlineLearning and StochasticOptimization.

    + + +
    optimizer_adagrad(lr = 0.01, epsilon = 1e-08, decay = 0,
    +  clipnorm = NULL, clipvalue = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + +
    lr

    float >= 0. Learning rate.

    epsilon

    float >= 0. Fuzz factor.

    decay

    float >= 0. Learning rate decay over each update.

    clipnorm

    Gradients will be clipped when their L2 norm exceeds this +value.

    clipvalue

    Gradients will be clipped when their absolute value exceeds +this value.

    + +

    Note

    + +

    It is recommended to leave the parameters of this optimizer at their +default values.

    + +

    See also

    + +

    Other optimizers: optimizer_adadelta, + optimizer_adamax, + optimizer_adam, + optimizer_nadam, + optimizer_rmsprop, + optimizer_sgd

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/optimizer_adam.html b/website/reference/optimizer_adam.html new file mode 100644 index 000000000..756d323a5 --- /dev/null +++ b/website/reference/optimizer_adam.html @@ -0,0 +1,215 @@ + + + + + + + + +Adam optimizer — optimizer_adam • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Adam optimizer as described in Adam - A Method for StochasticOptimization.

    + + +
    optimizer_adam(lr = 0.001, beta_1 = 0.9, beta_2 = 0.999,
    +  epsilon = 1e-08, decay = 0, clipnorm = NULL, clipvalue = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    lr

    float >= 0. Learning rate.

    beta_1

    The exponential decay rate for the 1st moment estimates. float, +0 < beta < 1. Generally close to 1.

    beta_2

    The exponential decay rate for the 2nd moment estimates. float, +0 < beta < 1. Generally close to 1.

    epsilon

    float >= 0. Fuzz factor.

    decay

    float >= 0. Learning rate decay over each update.

    clipnorm

    Gradients will be clipped when their L2 norm exceeds this +value.

    clipvalue

    Gradients will be clipped when their absolute value exceeds +this value.

    + +

    Note

    + +

    Default parameters follow those provided in the original paper.

    + +

    See also

    + +

    Other optimizers: optimizer_adadelta, + optimizer_adagrad, + optimizer_adamax, + optimizer_nadam, + optimizer_rmsprop, + optimizer_sgd

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/optimizer_adamax.html b/website/reference/optimizer_adamax.html new file mode 100644 index 000000000..7576af548 --- /dev/null +++ b/website/reference/optimizer_adamax.html @@ -0,0 +1,210 @@ + + + + + + + + +Adamax optimizer — optimizer_adamax • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Adamax optimizer from Section 7 of the Adam paper. +It is a variant of Adam based on the infinity norm.

    + + +
    optimizer_adamax(lr = 0.002, beta_1 = 0.9, beta_2 = 0.999,
    +  epsilon = 1e-08, decay = 0, clipnorm = NULL, clipvalue = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    lr

    float >= 0. Learning rate.

    beta_1

    The exponential decay rate for the 1st moment estimates. float, +0 < beta < 1. Generally close to 1.

    beta_2

    The exponential decay rate for the 2nd moment estimates. float, +0 < beta < 1. Generally close to 1.

    epsilon

    float >= 0. Fuzz factor.

    decay

    float >= 0. Learning rate decay over each update.

    clipnorm

    Gradients will be clipped when their L2 norm exceeds this +value.

    clipvalue

    Gradients will be clipped when their absolute value exceeds +this value.

    + +

    See also

    + +

    Other optimizers: optimizer_adadelta, + optimizer_adagrad, + optimizer_adam, + optimizer_nadam, + optimizer_rmsprop, + optimizer_sgd

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/optimizer_nadam.html b/website/reference/optimizer_nadam.html new file mode 100644 index 000000000..dcf1e2cf9 --- /dev/null +++ b/website/reference/optimizer_nadam.html @@ -0,0 +1,220 @@ + + + + + + + + +Nesterov Adam optimizer — optimizer_nadam • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Much like Adam is essentially RMSprop with momentum, Nadam is Adam RMSprop +with Nesterov momentum. See Incorporating Nesterov Momentum intoAdam.

    + + +
    optimizer_nadam(lr = 0.002, beta_1 = 0.9, beta_2 = 0.999,
    +  epsilon = 1e-08, schedule_decay = 0.004, clipnorm = NULL,
    +  clipvalue = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    lr

    float >= 0. Learning rate.

    beta_1

    The exponential decay rate for the 1st moment estimates. float, +0 < beta < 1. Generally close to 1.

    beta_2

    The exponential decay rate for the 2nd moment estimates. float, +0 < beta < 1. Generally close to 1.

    epsilon

    float >= 0. Fuzz factor.

    schedule_decay

    Schedule deacy.

    clipnorm

    Gradients will be clipped when their L2 norm exceeds this +value.

    clipvalue

    Gradients will be clipped when their absolute value exceeds +this value.

    + +

    Details

    + +

    Default parameters follow those provided in the paper. It is +recommended to leave the parameters of this optimizer at their default +values.

    + +

    See also

    + +

    On the importance of initialization and momentum in deeplearning.

    +

    Other optimizers: optimizer_adadelta, + optimizer_adagrad, + optimizer_adamax, + optimizer_adam, + optimizer_rmsprop, + optimizer_sgd

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/optimizer_rmsprop.html b/website/reference/optimizer_rmsprop.html new file mode 100644 index 000000000..83aa7f59b --- /dev/null +++ b/website/reference/optimizer_rmsprop.html @@ -0,0 +1,211 @@ + + + + + + + + +RMSProp optimizer — optimizer_rmsprop • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    RMSProp optimizer

    + + +
    optimizer_rmsprop(lr = 0.001, rho = 0.9, epsilon = 1e-08, decay = 0,
    +  clipnorm = NULL, clipvalue = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    lr

    float >= 0. Learning rate.

    rho

    float >= 0. Decay factor.

    epsilon

    float >= 0. Fuzz factor.

    decay

    float >= 0. Learning rate decay over each update.

    clipnorm

    Gradients will be clipped when their L2 norm exceeds this +value.

    clipvalue

    Gradients will be clipped when their absolute value exceeds +this value.

    + +

    Note

    + +

    It is recommended to leave the parameters of this optimizer at their +default values (except the learning rate, which can be freely tuned).

    +

    This optimizer is usually a good choice for recurrent neural networks.

    + +

    See also

    + +

    Other optimizers: optimizer_adadelta, + optimizer_adagrad, + optimizer_adamax, + optimizer_adam, + optimizer_nadam, + optimizer_sgd

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/optimizer_sgd.html b/website/reference/optimizer_sgd.html new file mode 100644 index 000000000..90e13eae5 --- /dev/null +++ b/website/reference/optimizer_sgd.html @@ -0,0 +1,210 @@ + + + + + + + + +Stochastic gradient descent optimizer — optimizer_sgd • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Stochastic gradient descent optimizer with support for momentum, learning +rate decay, and Nesterov momentum.

    + + +
    optimizer_sgd(lr = 0.01, momentum = 0, decay = 0, nesterov = FALSE,
    +  clipnorm = NULL, clipvalue = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    lr

    float >= 0. Learning rate.

    momentum

    float >= 0. Parameter updates momentum.

    decay

    float >= 0. Learning rate decay over each update.

    nesterov

    boolean. Whether to apply Nesterov momentum.

    clipnorm

    Gradients will be clipped when their L2 norm exceeds this +value.

    clipvalue

    Gradients will be clipped when their absolute value exceeds +this value.

    + +

    Value

    + +

    Optimizer for use with compile.

    + +

    See also

    + +

    Other optimizers: optimizer_adadelta, + optimizer_adagrad, + optimizer_adamax, + optimizer_adam, + optimizer_nadam, + optimizer_rmsprop

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/pad_sequences.html b/website/reference/pad_sequences.html new file mode 100644 index 000000000..9b07de348 --- /dev/null +++ b/website/reference/pad_sequences.html @@ -0,0 +1,214 @@ + + + + + + + + +Pads each sequence to the same length (length of the longest sequence). — pad_sequences • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Pads each sequence to the same length (length of the longest sequence).

    + + +
    pad_sequences(sequences, maxlen = NULL, dtype = "int32", padding = "pre",
    +  truncating = "pre", value = 0)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    sequences

    List of lists where each element is a sequence

    maxlen

    int, maximum length

    dtype

    type to cast the resulting sequence.

    padding

    'pre' or 'post', pad either before or after each sequence.

    truncating

    'pre' or 'post', remove values from sequences larger than maxlen either in the beginning or in the end of the sequence

    value

    float, value to pad the sequences to the desired value.

    + +

    Value

    + +

    Array with dimensions (number_of_sequences, maxlen)

    + +

    Details

    + +

    If maxlen is provided, any sequence longer than maxlen is truncated to maxlen. +Truncation happens off either the beginning (default) or +the end of the sequence. Supports post-padding and pre-padding (default).

    + +

    See also

    + +

    Other text preprocessing: make_sampling_table, + skipgrams, + text_hashing_trick, + text_one_hot, + text_to_word_sequence

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/pipe.html b/website/reference/pipe.html new file mode 100644 index 000000000..a1be5e3cb --- /dev/null +++ b/website/reference/pipe.html @@ -0,0 +1,159 @@ + + + + + + + + +Pipe operator — %>% • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    See %>% for more details.

    + + +
    lhs %>% rhs
    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/plot.keras_training_history.html b/website/reference/plot.keras_training_history.html new file mode 100644 index 000000000..a045fbc6e --- /dev/null +++ b/website/reference/plot.keras_training_history.html @@ -0,0 +1,195 @@ + + + + + + + + +Plot training history — plot.keras_training_history • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Plots metrics recorded during training.

    + + +
    # S3 method for keras_training_history
    +plot(x, y, metrics = NULL,
    +  method = c("auto", "ggplot2", "base"), smooth = TRUE, ...)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    x

    Training history object returned from fit().

    y

    Unused.

    metrics

    One or more metrics to plot (e.g. c('loss', 'accuracy')). +Defaults to plotting all captured metrics.

    method

    Method to use for plotting. The default "auto" will use +ggplot2 if available, and otherwise will use base graphics.

    smooth

    Whether a loess smooth should be added to the plot, only +available for the ggplot2 method. If the number of epochs is smaller +than ten, it is forced to false.

    ...

    Additional parameters to pass to the plot() method.

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/pop_layer.html b/website/reference/pop_layer.html new file mode 100644 index 000000000..b4876502c --- /dev/null +++ b/website/reference/pop_layer.html @@ -0,0 +1,186 @@ + + + + + + + + +Remove the last layer in a model — pop_layer • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Remove the last layer in a model

    + + +
    pop_layer(object)
    + +

    Arguments

    + + + + + + +
    object

    Keras model object

    + +

    See also

    + +

    Other model functions: compile, + evaluate_generator, evaluate, + fit_generator, fit, + get_config, get_layer, + keras_model_sequential, + keras_model, + predict.keras.engine.training.Model, + predict_generator, + predict_on_batch, + predict_proba, + summary.keras.engine.training.Model, + train_on_batch

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/predict.keras.engine.training.Model.html b/website/reference/predict.keras.engine.training.Model.html new file mode 100644 index 000000000..16724225e --- /dev/null +++ b/website/reference/predict.keras.engine.training.Model.html @@ -0,0 +1,210 @@ + + + + + + + + +Generate predictions from a Keras model — predict.keras.engine.training.Model • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Generates output predictions for the input samples, processing the samples in +a batched way.

    + + +
    # S3 method for keras.engine.training.Model
    +predict(object, x, batch_size = 32,
    +  verbose = 0, ...)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + +
    object

    Keras model

    x

    Input data (vector, matrix, or array)

    batch_size

    Integer

    verbose

    Verbosity mode, 0 or 1.

    ...

    Unused

    + +

    Value

    + +

    vector, matrix, or array of predictions

    + +

    See also

    + +

    Other model functions: compile, + evaluate_generator, evaluate, + fit_generator, fit, + get_config, get_layer, + keras_model_sequential, + keras_model, pop_layer, + predict_generator, + predict_on_batch, + predict_proba, + summary.keras.engine.training.Model, + train_on_batch

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/predict_generator.html b/website/reference/predict_generator.html new file mode 100644 index 000000000..fb6bb4fb8 --- /dev/null +++ b/website/reference/predict_generator.html @@ -0,0 +1,217 @@ + + + + + + + + +Generates predictions for the input samples from a data generator. — predict_generator • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    The generator should return the same kind of data as accepted by +predict_on_batch().

    + + +
    predict_generator(object, generator, steps, max_queue_size = 10,
    +  verbose = 0)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + +
    object

    Keras model object

    generator

    Generator yielding batches of input samples.

    steps

    Total number of steps (batches of samples) to yield from +generator before stopping.

    max_queue_size

    Maximum size for the generator queue.

    verbose

    verbosity mode, 0 or 1.

    + +

    Value

    + +

    Numpy array(s) of predictions.

    + +

    Raises

    + +

    ValueError: In case the generator yields data in an invalid +format.

    + +

    See also

    + +

    Other model functions: compile, + evaluate_generator, evaluate, + fit_generator, fit, + get_config, get_layer, + keras_model_sequential, + keras_model, pop_layer, + predict.keras.engine.training.Model, + predict_on_batch, + predict_proba, + summary.keras.engine.training.Model, + train_on_batch

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/predict_on_batch.html b/website/reference/predict_on_batch.html new file mode 100644 index 000000000..f9dd3c670 --- /dev/null +++ b/website/reference/predict_on_batch.html @@ -0,0 +1,195 @@ + + + + + + + + +Returns predictions for a single batch of samples. — predict_on_batch • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Returns predictions for a single batch of samples.

    + + +
    predict_on_batch(object, x)
    + +

    Arguments

    + + + + + + + + + + +
    object

    Keras model object

    x

    Input data (vector, matrix, or array)

    + +

    Value

    + +

    array of predictions.

    + +

    See also

    + +

    Other model functions: compile, + evaluate_generator, evaluate, + fit_generator, fit, + get_config, get_layer, + keras_model_sequential, + keras_model, pop_layer, + predict.keras.engine.training.Model, + predict_generator, + predict_proba, + summary.keras.engine.training.Model, + train_on_batch

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/predict_proba.html b/website/reference/predict_proba.html new file mode 100644 index 000000000..970fa546d --- /dev/null +++ b/website/reference/predict_proba.html @@ -0,0 +1,205 @@ + + + + + + + + +Generates probability or class probability predictions for the input samples. — predict_proba • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Generates probability or class probability predictions for the input samples.

    + + +
    predict_proba(object, x, batch_size = 32, verbose = 0)
    +
    +predict_classes(object, x, batch_size = 32, verbose = 0)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + +
    object

    Keras model object

    x

    Input data (vector, matrix, or array)

    batch_size

    Integer

    verbose

    Verbosity mode, 0 or 1.

    + +

    Details

    + +

    The input samples are processed batch by batch.

    + +

    See also

    + +

    Other model functions: compile, + evaluate_generator, evaluate, + fit_generator, fit, + get_config, get_layer, + keras_model_sequential, + keras_model, pop_layer, + predict.keras.engine.training.Model, + predict_generator, + predict_on_batch, + summary.keras.engine.training.Model, + train_on_batch

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/reexports.html b/website/reference/reexports.html new file mode 100644 index 000000000..5cad96769 --- /dev/null +++ b/website/reference/reexports.html @@ -0,0 +1,165 @@ + + + + + + + + +Objects exported from other packages — reexports • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    These objects are imported from other packages. Follow the links +below to see their documentation.

    +
    reticulate

    use_python, use_virtualenv, use_condaenv

    + +
    tensorflow

    tensorboard

    + +
    tfruns

    flags, flag_numeric, flag_integer, flag_string, flag_boolean, run_dir

    +
    + + + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/regularizer_l1.html b/website/reference/regularizer_l1.html new file mode 100644 index 000000000..fb1eb29c5 --- /dev/null +++ b/website/reference/regularizer_l1.html @@ -0,0 +1,181 @@ + + + + + + + + +L1 and L2 regularization — regularizer_l1 • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    L1 and L2 regularization

    + + +
    regularizer_l1(l = 0.01)
    +
    +regularizer_l2(l = 0.01)
    +
    +regularizer_l1_l2(l1 = 0.01, l2 = 0.01)
    + +

    Arguments

    + + + + + + + + + + + + + + +
    l

    Regularization factor.

    l1

    L1 regularization factor.

    l2

    L2 regularization factor.

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/reset_states.html b/website/reference/reset_states.html new file mode 100644 index 000000000..25ad9638f --- /dev/null +++ b/website/reference/reset_states.html @@ -0,0 +1,177 @@ + + + + + + + + +Reset the states for a layer — reset_states • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Reset the states for a layer

    + + +
    reset_states(object)
    + +

    Arguments

    + + + + + + +
    object

    Model or layer object

    + +

    See also

    + +

    Other layer methods: count_params, + get_config, get_input_at, + get_weights

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/save_model_hdf5.html b/website/reference/save_model_hdf5.html new file mode 100644 index 000000000..fbf2d9435 --- /dev/null +++ b/website/reference/save_model_hdf5.html @@ -0,0 +1,225 @@ + + + + + + + + +Save/Load models using HDF5 files — save_model_hdf5 • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Save/Load models using HDF5 files

    + + +
    save_model_hdf5(object, filepath, overwrite = TRUE,
    +  include_optimizer = TRUE)
    +
    +load_model_hdf5(filepath, custom_objects = NULL, compile = TRUE)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model object to save

    filepath

    File path

    overwrite

    Overwrite existing file if necessary

    include_optimizer

    If TRUE, save optimizer's state.

    custom_objects

    Mapping class names (or function names) of custom +(non-Keras) objects to class/functions

    compile

    Whether to compile the model after loading.

    + +

    Details

    + +

    The following components of the model are saved:

      +
    • The model architecture, allowing to re-instantiate the model.

    • +
    • The model weights.

    • +
    • The state of the optimizer, allowing to resume training exactly where you +left off. +This allows you to save the entirety of the state of a model +in a single file.

    • +
    +

    Saved models can be reinstantiated via load_model_hdf5(). The model returned by +load_model_hdf5() is a compiled model ready to be used (unless the saved model +was never compiled in the first place or compile = FALSE is specified.

    + +

    Note

    + +

    The serialize_model() function enables saving Keras models to +R objects that can be persisted across R sessions.

    + +

    See also

    + +

    Other model persistence: get_weights, + model_to_json, model_to_yaml, + save_model_weights_hdf5, + serialize_model

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/save_model_weights_hdf5.html b/website/reference/save_model_weights_hdf5.html new file mode 100644 index 000000000..8c2b99409 --- /dev/null +++ b/website/reference/save_model_weights_hdf5.html @@ -0,0 +1,214 @@ + + + + + + + + +Save/Load model weights using HDF5 files — save_model_weights_hdf5 • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Save/Load model weights using HDF5 files

    + + +
    save_model_weights_hdf5(object, filepath, overwrite = TRUE)
    +
    +load_model_weights_hdf5(object, filepath, by_name = FALSE)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + +
    object

    Model object to save/load

    filepath

    Path to the file

    overwrite

    Whether to silently overwrite any existing +file at the target location

    by_name

    Whether to load weights by name or by topological order.

    + +

    Details

    + +

    The weight file has:

      +
    • layer_names (attribute), a list of strings (ordered names of model layers).

    • +
    • For every layer, a group named layer.name

    • +
    • For every such layer group, a group attribute weight_names, a list of strings +(ordered names of weights tensor of the layer).

    • +
    • For every weight in the layer, a dataset storing the weight value, named after +the weight tensor.

    • +
    +

    For load_model_weights(), if by_name is FALSE (default) weights are +loaded based on the network's topology, meaning the architecture should be +the same as when the weights were saved. Note that layers that don't have +weights are not taken into account in the topological ordering, so adding +or removing layers is fine as long as they don't have weights.

    +

    If by_name is TRUE, weights are loaded into layers only if they share +the same name. This is useful for fine-tuning or transfer-learning models +where some of the layers have changed.

    + +

    See also

    + +

    Other model persistence: get_weights, + model_to_json, model_to_yaml, + save_model_hdf5, + serialize_model

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/sequences_to_matrix.html b/website/reference/sequences_to_matrix.html new file mode 100644 index 000000000..34f529c06 --- /dev/null +++ b/website/reference/sequences_to_matrix.html @@ -0,0 +1,194 @@ + + + + + + + + +Convert a list of sequences into a matrix. — sequences_to_matrix • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Convert a list of sequences into a matrix.

    + + +
    sequences_to_matrix(tokenizer, sequences, mode = c("binary", "count", "tfidf",
    +  "freq"))
    + +

    Arguments

    + + + + + + + + + + + + + + +
    tokenizer

    Tokenizer

    sequences

    List of sequences (a sequence is a list of integer word indices).

    mode

    one of "binary", "count", "tfidf", "freq".

    + +

    Value

    + +

    A matrix

    + +

    See also

    + +

    Other text tokenization: fit_text_tokenizer, + text_tokenizer, + texts_to_matrix, + texts_to_sequences_generator, + texts_to_sequences

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/serialize_model.html b/website/reference/serialize_model.html new file mode 100644 index 000000000..ffec24bb4 --- /dev/null +++ b/website/reference/serialize_model.html @@ -0,0 +1,210 @@ + + + + + + + + +Serialize a model to an R object — serialize_model • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Model objects are external references to Keras objects which cannot be saved +and restored across R sessions. The serialize_model() and +unserialize_model() functions provide facilities to convert Keras models to +R objects for persistence within R data files.

    + + +
    serialize_model(model, include_optimizer = TRUE)
    +
    +unserialize_model(model, custom_objects = NULL, compile = TRUE)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + +
    model

    Keras model or R "raw" object containing serialized Keras model.

    include_optimizer

    If TRUE, save optimizer's state.

    custom_objects

    Mapping class names (or function names) of custom +(non-Keras) objects to class/functions

    compile

    Whether to compile the model after loading.

    + +

    Value

    + +

    serialize_model() returns an R "raw" object containing an hdf5 +version of the Keras model. unserialize_model() returns a Keras model.

    + +

    Note

    + +

    The save_model_hdf5() function enables saving Keras models to +external hdf5 files.

    + +

    See also

    + +

    Other model persistence: get_weights, + model_to_json, model_to_yaml, + save_model_hdf5, + save_model_weights_hdf5

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/skipgrams.html b/website/reference/skipgrams.html new file mode 100644 index 000000000..746d7c898 --- /dev/null +++ b/website/reference/skipgrams.html @@ -0,0 +1,232 @@ + + + + + + + + +Generates skipgram word pairs. — skipgrams • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Takes a sequence (list of indexes of words), returns list of couples (word_index, +other_word index) and labels (1s or 0s), where label = 1 if 'other_word' +belongs to the context of 'word', and label=0 if 'other_word' is randomly +sampled

    + + +
    skipgrams(sequence, vocabulary_size, window_size = 4, negative_samples = 1,
    +  shuffle = TRUE, categorical = FALSE, sampling_table = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    sequence

    a word sequence (sentence), encoded as a list of word indices +(integers). If using a sampling_table, word indices are expected to match +the rank of the words in a reference dataset (e.g. 10 would encode the +10-th most frequently occuring token). Note that index 0 is expected to be +a non-word and will be skipped.

    vocabulary_size

    int. maximum possible word index + 1

    window_size

    int. actually half-window. The window of a word wi will be +[i-window_size, i+window_size+1]

    negative_samples

    float >= 0. 0 for no negative (=random) samples. 1 +for same number as positive samples. etc.

    shuffle

    whether to shuffle the word couples before returning them.

    categorical

    bool. if FALSE, labels will be integers (eg. [0, 1, 1 .. ]), +if TRUE labels will be categorical eg. [[1,0],[0,1],[0,1] .. ]

    +

    [[1,0]: R:[1,0 +[0,1]: R:0,1 +[0,1]: R:0,1

    sampling_table

    1D array of size vocabulary_size where the entry i +encodes the probabibily to sample a word of rank i.

    + +

    Value

    + +

    List of couples, labels where:

      +
    • couples is a list of 2-element integer vectors: [word_index, other_word_index].

    • +
    • labels is an integer vector of 0 and 1, where 1 indicates that other_word_index +was found in the same window as word_index, and 0 indicates that other_word_index +was random.

    • +
    • if categorical is set to TRUE, the labels are categorical, ie. 1 becomes [0,1], +and 0 becomes [1, 0].

    • +
    + + +

    See also

    + +

    Other text preprocessing: make_sampling_table, + pad_sequences, + text_hashing_trick, + text_one_hot, + text_to_word_sequence

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/summary.keras.engine.training.Model.html b/website/reference/summary.keras.engine.training.Model.html new file mode 100644 index 000000000..b224ceb62 --- /dev/null +++ b/website/reference/summary.keras.engine.training.Model.html @@ -0,0 +1,199 @@ + + + + + + + + +Print a summary of a Keras model — summary.keras.engine.training.Model • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Print a summary of a Keras model

    + + +
    # S3 method for keras.engine.training.Model
    +summary(object,
    +  line_length = getOption("width"), positions = NULL, ...)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + +
    object

    Keras model instance

    line_length

    Total length of printed lines

    positions

    Relative or absolute positions of log elements in each line. +If not provided, defaults to c(0.33, 0.55, 0.67, 1.0).

    ...

    Unused

    + +

    See also

    + +

    Other model functions: compile, + evaluate_generator, evaluate, + fit_generator, fit, + get_config, get_layer, + keras_model_sequential, + keras_model, pop_layer, + predict.keras.engine.training.Model, + predict_generator, + predict_on_batch, + predict_proba, train_on_batch

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/text_hashing_trick.html b/website/reference/text_hashing_trick.html new file mode 100644 index 000000000..1a1bf3a22 --- /dev/null +++ b/website/reference/text_hashing_trick.html @@ -0,0 +1,216 @@ + + + + + + + + +Converts a text to a sequence of indexes in a fixed-size hashing space. — text_hashing_trick • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Converts a text to a sequence of indexes in a fixed-size hashing space.

    + + +
    text_hashing_trick(text, n, hash_function = NULL,
    +  filters = "!\"#$%&()*+,-./:;<=>?@[\\]^_`{|}~\t\n", lower = TRUE,
    +  split = " ")
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    text

    Input text (string).

    n

    Dimension of the hashing space.

    hash_function

    if NULL uses python hash function, can be 'md5' or +any function that takes in input a string and returns a int. Note that +hash is not a stable hashing function, so it is not consistent across +different runs, while 'md5' is a stable hashing function.

    filters

    Sequence of characters to filter out.

    lower

    Whether to convert the input to lowercase.

    split

    Sentence split marker (string).

    + +

    Value

    + +

    A list of integer word indices (unicity non-guaranteed).

    + +

    Details

    + +

    Two or more words may be assigned to the same index, due to possible +collisions by the hashing function.

    + +

    See also

    + +

    Other text preprocessing: make_sampling_table, + pad_sequences, skipgrams, + text_one_hot, + text_to_word_sequence

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/text_one_hot.html b/website/reference/text_one_hot.html new file mode 100644 index 000000000..93a441cd8 --- /dev/null +++ b/website/reference/text_one_hot.html @@ -0,0 +1,202 @@ + + + + + + + + +One-hot encode a text into a list of word indexes in a vocabulary of size n. — text_one_hot • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    One-hot encode a text into a list of word indexes in a vocabulary of size n.

    + + +
    text_one_hot(text, n, filters = "!\"#$%&()*+,-./:;<=>?@[\\]^_`{|}~\t\n",
    +  lower = TRUE, split = " ")
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + +
    text

    Input text (string).

    n

    Size of vocabulary (integer)

    filters

    Sequence of characters to filter out.

    lower

    Whether to convert the input to lowercase.

    split

    Sentence split marker (string).

    + +

    Value

    + +

    List of integers in [1, n]. Each integer encodes a word (unicity +non-guaranteed).

    + +

    See also

    + +

    Other text preprocessing: make_sampling_table, + pad_sequences, skipgrams, + text_hashing_trick, + text_to_word_sequence

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/text_to_word_sequence.html b/website/reference/text_to_word_sequence.html new file mode 100644 index 000000000..c9df8e764 --- /dev/null +++ b/website/reference/text_to_word_sequence.html @@ -0,0 +1,198 @@ + + + + + + + + +Convert text to a sequence of words (or tokens). — text_to_word_sequence • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Convert text to a sequence of words (or tokens).

    + + +
    text_to_word_sequence(text,
    +  filters = "!\"#$%&()*+,-./:;<=>?@[\\]^_`{|}~\t\n", lower = TRUE,
    +  split = " ")
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + +
    text

    Input text (string).

    filters

    Sequence of characters to filter out.

    lower

    Whether to convert the input to lowercase.

    split

    Sentence split marker (string).

    + +

    Value

    + +

    Words (or tokens)

    + +

    See also

    + +

    Other text preprocessing: make_sampling_table, + pad_sequences, skipgrams, + text_hashing_trick, + text_one_hot

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/text_tokenizer.html b/website/reference/text_tokenizer.html new file mode 100644 index 000000000..436509120 --- /dev/null +++ b/website/reference/text_tokenizer.html @@ -0,0 +1,229 @@ + + + + + + + + +Text tokenization utility — text_tokenizer • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Vectorize a text corpus, by turning each text into either a sequence of +integers (each integer being the index of a token in a dictionary) or into a +vector where the coefficient for each token could be binary, based on word +count, based on tf-idf...

    + + +
    text_tokenizer(num_words = NULL,
    +  filters = "!\"#$%&()*+,-./:;<=>?@[\\]^_`{|}~\t\n", lower = TRUE,
    +  split = " ", char_level = FALSE)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + +
    num_words

    the maximum number of words to keep, based on word +frequency. Only the most common num_words words will be kept.

    filters

    a string where each element is a character that will be +filtered from the texts. The default is all punctuation, plus tabs and line +breaks, minus the ' character.

    lower

    boolean. Whether to convert the texts to lowercase.

    split

    character or string to use for token splitting.

    char_level

    if TRUE, every character will be treated as a token

    + +

    Details

    + +

    By default, all punctuation is removed, turning the texts into +space-separated sequences of words (words maybe include the ' character). +These sequences are then split into lists of tokens. They will then be +indexed or vectorized. 0 is a reserved index that won't be assigned to any +word.

    + +

    Attributes

    + + +

    The tokenizer object has the following attributes:

      +
    • word_counts --- named list mapping words to the number of times they appeared +on during fit. Only set after fit_text_tokenizer() is called on the tokenizer.

    • +
    • word_docs --- named list mapping words to the number of documents/texts they +appeared on during fit. Only set after fit_text_tokenizer() is called on the tokenizer.

    • +
    • word_index --- named list mapping words to their rank/index (int). Only set +after fit_text_tokenizer() is called on the tokenizer.

    • +
    • document_count --- int. Number of documents (texts/sequences) the tokenizer +was trained on. Only set after fit_text_tokenizer() is called on the tokenizer.

    • +
    + +

    See also

    + +

    Other text tokenization: fit_text_tokenizer, + sequences_to_matrix, + texts_to_matrix, + texts_to_sequences_generator, + texts_to_sequences

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/texts_to_matrix.html b/website/reference/texts_to_matrix.html new file mode 100644 index 000000000..02ebeeaa2 --- /dev/null +++ b/website/reference/texts_to_matrix.html @@ -0,0 +1,194 @@ + + + + + + + + +Convert a list of texts to a matrix. — texts_to_matrix • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Convert a list of texts to a matrix.

    + + +
    texts_to_matrix(tokenizer, texts, mode = c("binary", "count", "tfidf",
    +  "freq"))
    + +

    Arguments

    + + + + + + + + + + + + + + +
    tokenizer

    Tokenizer

    texts

    Vector/list of texts (strings).

    mode

    one of "binary", "count", "tfidf", "freq".

    + +

    Value

    + +

    A matrix

    + +

    See also

    + +

    Other text tokenization: fit_text_tokenizer, + sequences_to_matrix, + text_tokenizer, + texts_to_sequences_generator, + texts_to_sequences

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/texts_to_sequences.html b/website/reference/texts_to_sequences.html new file mode 100644 index 000000000..f78626d56 --- /dev/null +++ b/website/reference/texts_to_sequences.html @@ -0,0 +1,184 @@ + + + + + + + + +Transform each text in texts in a sequence of integers. — texts_to_sequences • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Only top "num_words" most frequent words will be taken into account. +Only words known by the tokenizer will be taken into account.

    + + +
    texts_to_sequences(tokenizer, texts)
    + +

    Arguments

    + + + + + + + + + + +
    tokenizer

    Tokenizer

    texts

    Vector/list of texts (strings).

    + +

    See also

    + +

    Other text tokenization: fit_text_tokenizer, + sequences_to_matrix, + text_tokenizer, + texts_to_matrix, + texts_to_sequences_generator

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/texts_to_sequences_generator.html b/website/reference/texts_to_sequences_generator.html new file mode 100644 index 000000000..7be73939b --- /dev/null +++ b/website/reference/texts_to_sequences_generator.html @@ -0,0 +1,190 @@ + + + + + + + + +Transforms each text in texts in a sequence of integers. — texts_to_sequences_generator • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Only top "num_words" most frequent words will be taken into account. +Only words known by the tokenizer will be taken into account.

    + + +
    texts_to_sequences_generator(tokenizer, texts)
    + +

    Arguments

    + + + + + + + + + + +
    tokenizer

    Tokenizer

    texts

    Vector/list of texts (strings).

    + +

    Value

    + +

    Generator which yields individual sequences

    + +

    See also

    + +

    Other text tokenization: fit_text_tokenizer, + sequences_to_matrix, + text_tokenizer, + texts_to_matrix, + texts_to_sequences

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/time_distributed.html b/website/reference/time_distributed.html new file mode 100644 index 000000000..60ee3f30a --- /dev/null +++ b/website/reference/time_distributed.html @@ -0,0 +1,228 @@ + + + + + + + + +Apply a layer to every temporal slice of an input. — time_distributed • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    The input should be at least 3D, and the dimension of index one will be +considered to be the temporal dimension.

    + + +
    time_distributed(object, layer, input_shape = NULL,
    +  batch_input_shape = NULL, batch_size = NULL, dtype = NULL,
    +  name = NULL, trainable = NULL, weights = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    object

    Model or layer object

    layer

    A layer instance.

    input_shape

    Dimensionality of the input (integer) not including the +samples axis. This argument is required when using this layer as the first +layer in a model.

    batch_input_shape

    Shapes, including the batch size. For instance, +batch_input_shape=c(10, 32) indicates that the expected input will be +batches of 10 32-dimensional vectors. batch_input_shape=list(NULL, 32) +indicates batches of an arbitrary number of 32-dimensional vectors.

    batch_size

    Fixed batch size for layer

    dtype

    The data type expected by the input, as a string (float32, +float64, int32...)

    name

    An optional name string for the layer. Should be unique in a +model (do not reuse the same name twice). It will be autogenerated if it +isn't provided.

    trainable

    Whether the layer weights will be updated during training.

    weights

    Initial weights for layer.

    + +

    Details

    + +

    Consider a batch of 32 samples, where each sample is a sequence of 10 vectors of 16 dimensions. The batch +input shape of the layer is then (32, 10, 16), and the input_shape, not +including the samples dimension, is (10, 16). You can then use +time_distributed to apply a layer_dense to each of the 10 timesteps, +independently.

    + +

    See also

    + +

    Other layer wrappers: bidirectional

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/to_categorical.html b/website/reference/to_categorical.html new file mode 100644 index 000000000..40ca11346 --- /dev/null +++ b/website/reference/to_categorical.html @@ -0,0 +1,185 @@ + + + + + + + + +Converts a class vector (integers) to binary class matrix. — to_categorical • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Converts a class vector (integers) to binary class matrix.

    + + +
    to_categorical(y, num_classes = NULL)
    + +

    Arguments

    + + + + + + + + + + +
    y

    Class vector to be converted into a matrix (integers from 0 to num_classes).

    num_classes

    Total number of classes.

    + +

    Value

    + +

    A binary matrix representation of the input.

    + +

    Details

    + +

    E.g. for use with loss_categorical_crossentropy().

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/to_numpy_array.html b/website/reference/to_numpy_array.html new file mode 100644 index 000000000..e0ccc8bb4 --- /dev/null +++ b/website/reference/to_numpy_array.html @@ -0,0 +1,188 @@ + + + + + + + + +Convert to NumPy Array — to_numpy_array • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Convert an object to a NumPy array which has the optimal in-memory layout and +floating point data type for the current Keras backend.

    + + +
    to_numpy_array(x, dtype = NULL, order = "C")
    + +

    Arguments

    + + + + + + + + + + + + + + +
    x

    Object or list of objects to convert

    dtype

    NumPy data type (e.g. float32, float64). If this is unspecified +then R doubles will be converted to the default floating point type for the +current Keras backend.

    order

    In-memory order ('C' or 'F'). Defaults to 'C', which is the +optimal order in nearly every case for Keras backends.

    + +

    Value

    + +

    NumPy array with the specified type and order (or list of NumPy +arrays if a list was passed for x).

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + + diff --git a/website/reference/train_on_batch.html b/website/reference/train_on_batch.html new file mode 100644 index 000000000..04b05f5b1 --- /dev/null +++ b/website/reference/train_on_batch.html @@ -0,0 +1,213 @@ + + + + + + + + +Single gradient update or model evaluation over one batch of samples. — train_on_batch • keras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    +
    + + + +

    Single gradient update or model evaluation over one batch of samples.

    + + +
    train_on_batch(object, x, y, class_weight = NULL, sample_weight = NULL)
    +
    +test_on_batch(object, x, y, sample_weight = NULL)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + +
    object

    Keras model object

    x

    input data, as an array or list of arrays (if the model has multiple +inputs).

    y

    labels, as an array.

    class_weight

    named list mapping classes to a weight value, used for +scaling the loss function (during training only).

    sample_weight

    sample weights, as an array.

    + +

    Value

    + +

    Scalar training or test loss (if the model has no metrics) or list of scalars +(if the model computes other metrics). The property model$metrics_names +will give you the display labels for the scalar outputs.

    + +

    See also

    + +

    Other model functions: compile, + evaluate_generator, evaluate, + fit_generator, fit, + get_config, get_layer, + keras_model_sequential, + keras_model, pop_layer, + predict.keras.engine.training.Model, + predict_generator, + predict_on_batch, + predict_proba, + summary.keras.engine.training.Model

    + + +
    + +
    + +
    + + +
    +

    Site built with pkgdown.

    +
    + +
    +
    + + +
  • o*7(@j9qW0zM%Mi27 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