This is an automated email from the ASF dual-hosted git repository. njayaram pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/madlib.git
commit 868633daf3445b98b0693f626a911f3779b05d1f Author: Nikhil Kak <[email protected]> AuthorDate: Thu Mar 21 13:59:45 2019 -0700 Deep Learning: Add asserts to madlib keras dev check test 1. Add asserts for the output of madlib_keras_fit. For the accuracy/loss columns, we are only asserting that they are not null. Maybe in the future we can also assert for the value itself. 2. Add another test for non null values of name/description and null value for validation table. --- .../modules/deep_learning/test/madlib_keras.sql_in | 126 +++++++++++++++++++-- 1 file changed, 114 insertions(+), 12 deletions(-) diff --git a/src/ports/postgres/modules/deep_learning/test/madlib_keras.sql_in b/src/ports/postgres/modules/deep_learning/test/madlib_keras.sql_in index 58359c7..f69bca5 100644 --- a/src/ports/postgres/modules/deep_learning/test/madlib_keras.sql_in +++ b/src/ports/postgres/modules/deep_learning/test/madlib_keras.sql_in @@ -36,19 +36,121 @@ DROP TABLE IF EXISTS cifar_10_sample_batched_summary; SELECT minibatch_preprocessor_dl('cifar_10_sample','cifar_10_sample_batched','y','x', 2); DROP TABLE IF EXISTS model_arch; -SELECT load_keras_model('model_arch', $${"class_name": "Sequential", "keras_version": "2.1.6", "config": [{"class_name": "Conv2D", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "conv2d_1", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "dtype": "float32", "activation": "relu", "trainable": true, "data_format": "channels_last", "filters": 32, " [...] +SELECT load_keras_model('model_arch', + $${ + "class_name": "Sequential", + "keras_version": "2.1.6", + "config": [{ + "class_name": "Conv2D", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, + "name": "conv2d_1", + "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, + "dtype": "float32", "activation": "relu", "trainable": true, + "data_format": "channels_last", "filters": 32, "padding": "valid", + "strides": [1, 1], "dilation_rate": [1, 1], "kernel_regularizer": null, + "bias_initializer": {"class_name": "Zeros", "config": {}}, + "batch_input_shape": [null, 32, 32, 3], "use_bias": true, + "activity_regularizer": null, "kernel_size": [3, 3]}}, + {"class_name": "MaxPooling2D", "config": {"name": "max_pooling2d_1", "trainable": true, "data_format": "channels_last", "pool_size": [2, 2], "padding": "valid", "strides": [2, 2]}}, + {"class_name": "Dropout", "config": {"rate": 0.25, "noise_shape": null, "trainable": true, "seed": null, "name": "dropout_1"}}, + {"class_name": "Flatten", "config": {"trainable": true, "name": "flatten_1", "data_format": "channels_last"}}, + {"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_1", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "activation": "softmax", "trainable": true, "kernel_regularizer": null, "bias_initializer": + {"class_name": "Zeros", "config": {}}, "units": 10, "use_bias": true, "activity_regularizer": null} + }], "backend": "tensorflow"}$$); ALTER TABLE model_arch RENAME model_id TO id; DROP TABLE IF EXISTS keras_out, keras_out_summary; SELECT madlib_keras_fit('cifar_10_sample_batched', - 'keras_out', - 'dependent_var', - 'independent_var', - 'model_arch', - 1, - '''optimizer''=SGD(lr=0.01, decay=1e-6, nesterov=True), ''loss''=''categorical_crossentropy'', ''metrics''=[''accuracy'']'::text, - '''batch_size''=2, ''epochs''=1, ''verbose''=0'::text, - 2, - 10, - FALSE, - 'cifar_10_sample_batched'); + 'keras_out', + 'dependent_var', + 'independent_var', + 'model_arch', + 1, + '''optimizer''=SGD(lr=0.01, decay=1e-6, nesterov=True), ''loss''=''categorical_crossentropy'', ''metrics''=[''accuracy'']'::text, + '''batch_size''=2, ''epochs''=1, ''verbose''=0'::text, + 3, + 10, + FALSE, + 'cifar_10_sample_batched'); +SELECT assert( + model_arch_table = 'model_arch' AND + model_arch_id = 1 AND + model_type = 'madlib_keras' AND + start_training_time < now() AND + end_training_time > start_training_time AND + source_table = 'cifar_10_sample_batched' AND + validation_table = 'cifar_10_sample_batched' AND + model = 'keras_out' AND + dependent_varname = 'dependent_var' AND + independent_varname = 'independent_var' AND + name is NULL AND + description is NULL AND + model_size > 0 AND + madlib_version is NOT NULL AND + compile_params = '''optimizer''=SGD(lr=0.01, decay=1e-6, nesterov=True), ''loss''=''categorical_crossentropy'', ''metrics''=[''accuracy'']' AND + fit_params = '''batch_size''=2, ''epochs''=1, ''verbose''=0' AND + num_iterations = 3 AND + num_classes = 10 AND + accuracy is not NULL AND + loss is not NULL AND + array_upper(accuracy_iter, 1) = 3 AND + array_upper(loss_iter, 1) = 3 AND + array_upper(time_iter, 1) = 3 AND + accuracy_validation is not NULL AND + loss_validation is not NULL AND + array_upper(accuracy_iter_validation, 1) = 3 AND + array_upper(loss_iter_validation, 1) = 3 , + 'Keras model output Summary Validation failed. Actual:' || __to_char(summary)) +from (select * from keras_out_summary) summary; + +SELECT assert(model_data is not NULL , 'Keras model output validation failed') from (select * from keras_out) k; + + +-- Test for + -- Non null name and description columns + -- Null validation table +DROP TABLE IF EXISTS keras_out, keras_out_summary; +SELECT madlib_keras_fit('cifar_10_sample_batched', + 'keras_out', + 'dependent_var', + 'independent_var', + 'model_arch', + 1, + '''optimizer''=SGD(lr=0.01, decay=1e-6, nesterov=True), ''loss''=''categorical_crossentropy'', ''metrics''=[''accuracy'']'::text, + '''batch_size''=2, ''epochs''=1, ''verbose''=0'::text, + 1, + 10, + FALSE, + NULL, + 'model name', 'model desc'); +SELECT assert( + model_arch_table = 'model_arch' AND + model_arch_id = 1 AND + model_type = 'madlib_keras' AND + start_training_time < now() AND + end_training_time > start_training_time AND + source_table = 'cifar_10_sample_batched' AND + validation_table = 'cifar_10_sample_batched' AND + model = 'keras_out' AND + dependent_varname = 'dependent_var' AND + independent_varname = 'independent_var' AND + name = 'model name' AND + description = 'model desc' AND + model_size > 0 AND + madlib_version is NOT NULL AND + compile_params = '''optimizer''=SGD(lr=0.01, decay=1e-6, nesterov=True), ''loss''=''categorical_crossentropy'', ''metrics''=[''accuracy'']' AND + fit_params = '''batch_size''=2, ''epochs''=1, ''verbose''=0' AND + num_iterations = 1 AND + num_classes = 10 AND + accuracy is not NULL AND + loss is not NULL AND + array_upper(accuracy_iter, 1) = 1 AND + array_upper(loss_iter, 1) = 1 AND + array_upper(time_iter, 1) = 1 AND + accuracy_validation is NULL AND + loss_validation is NULL AND + array_upper(accuracy_iter_validation,1) = 0 AND + array_upper(loss_iter_validation,1) = 0 , + 'Keras model output Summary Validation failed. Actual:' || __to_char(summary)) +from (select * from keras_out_summary) summary; + +SELECT assert(model_data is not NULL , 'Keras model output validation failed') from (select * from keras_out) k;
