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;

Reply via email to