The CREATE MODEL statement for deep neural network (DNN) models

This document describes theCREATE MODEL statement for creatingdeep neural network (DNN)models in BigQuery by using SQL. Alternatively, you can use theGoogle Cloud console user interface tocreate a model by using a UI(Preview) instead of constructing the SQLstatement yourself.

You can use DNN regressor models with theML.PREDICT functionto performregression, and you can useDNN classifier models with theML.PREDICT function toperformclassification. You can useboth types of DNN models with theML.PREDICT functionto performanomaly detection.

For more information about supported SQL statements and functions for thismodel, seeEnd-to-end user journeys for ML models.

CREATE MODEL syntax

{CREATE MODEL |CREATE MODEL IF NOT EXISTS |CREATE OR REPLACE MODEL}model_nameOPTIONS(model_option_list)ASquery_statementmodel_option_list:MODEL_TYPE = { 'DNN_CLASSIFIER' | 'DNN_REGRESSOR' }    [,LEARN_RATE = {float64_value | HPARAM_RANGE(range) | HPARAM_CANDIDATES([candidates]) } ]    [,OPTIMIZER = { { 'ADAGRAD' | 'ADAM' | 'FTRL' | 'RMSPROP' | 'SGD' } | HPARAM_CANDIDATES([candidates]) } ]    [,L1_REG = {float64_value | HPARAM_RANGE(range) | HPARAM_CANDIDATES([candidates]) } ]    [,L2_REG = {float64_value | HPARAM_RANGE(range) | HPARAM_CANDIDATES([candidates]) } ]    [,ACTIVATION_FN = { { 'RELU' | 'RELU6' | 'CRELU' | 'ELU' | 'SELU' | 'SIGMOID' | 'TANH' } | HPARAM_CANDIDATES([candidates]) } ]    [,BATCH_SIZE = {int64_value | HPARAM_RANGE(range) | HPARAM_CANDIDATES([candidates]) } ]    [,DROPOUT = {float64_value | HPARAM_RANGE(range) | HPARAM_CANDIDATES([candidates]) } ]    [,HIDDEN_UNITS = {int_array | HPARAM_RANGE(range) | HPARAM_CANDIDATES([candidates]) } ]    [,INTEGRATED_GRADIENTS_NUM_STEPS =int64_value ]    [,TF_VERSION = { '1.15' | '2.8.0' } ]    [,AUTO_CLASS_WEIGHTS = { TRUE | FALSE } ]    [,CLASS_WEIGHTS =struct_array ]    [,ENABLE_GLOBAL_EXPLAIN = { TRUE | FALSE } ]    [,EARLY_STOP = { TRUE | FALSE } ]    [,MIN_REL_PROGRESS =float64_value ]    [,INPUT_LABEL_COLS =string_array ]    [,MAX_ITERATIONS =int64_value ]    [,WARM_START = { TRUE | FALSE } ]    [,DATA_SPLIT_METHOD = { 'AUTO_SPLIT' | 'RANDOM' | 'CUSTOM' | 'SEQ' | 'NO_SPLIT' } ]    [,DATA_SPLIT_EVAL_FRACTION =float64_value ]    [,DATA_SPLIT_TEST_FRACTION =float64_value ]    [,DATA_SPLIT_COL =string_value ]    [,NUM_TRIALS =int64_value ]    [,MAX_PARALLEL_TRIALS =int64_value ]    [,HPARAM_TUNING_ALGORITHM = { 'VIZIER_DEFAULT' | 'RANDOM_SEARCH' | 'GRID_SEARCH' } ]    [,HPARAM_TUNING_OBJECTIVES = { 'ROC_AUC' | 'R2_SCORE' | ... } ]    [,MODEL_REGISTRY = { 'VERTEX_AI' } ]    [,VERTEX_AI_MODEL_ID =string_value ]    [,VERTEX_AI_MODEL_VERSION_ALIASES =string_array ]    [,KMS_KEY_NAME =string_value ]

CREATE MODEL

Creates and trains a new model in the specified dataset. If the model nameexists,CREATE MODEL returns an error.

CREATE MODEL IF NOT EXISTS

Creates and trains a new model only if the model doesn't exist in thespecified dataset.

CREATE OR REPLACE MODEL

Creates and trains a model and replaces an existing model with the same name inthe specified dataset.

model_name

The name of the model you're creating or replacing. The modelname must be unique in the dataset: no other model or table can have the samename. The model name must follow the same naming rules as aBigQuery table. A model name can:

  • Contain up to 1,024 characters
  • Contain letters (upper or lower case), numbers, and underscores

model_name is case-sensitive.

If you don't have a default project configured, then you must prepend theproject ID to the model name in the following format, including backticks:

`[PROJECT_ID].[DATASET].[MODEL]`

For example, `myproject.mydataset.mymodel`.

MODEL_TYPE

Syntax

MODEL_TYPE={'DNN_CLASSIFIER'|'DNN_REGRESSOR'}

Description

Specifies the model type. This option is required.

LEARN_RATE

Syntax

LEARN_RATE = {float64_value | HPARAM_RANGE(range) | HPARAM_CANDIDATES([candidates]) }

Description

The initial learn rate for training.

Arguments

If you aren't running hyperparameter tuning, then you can specify aFLOAT64 value. The default value is0.001.

If you are running hyperparameter tuning, use one of the following options:

  • Use theHPARAM_RANGE keyword and specify twoFLOAT64 values that definethe range to use for the hyperparameter. For example,LEARN_RATE = HPARAM_RANGE(0.001, 0.005).
  • Use theHPARAM_CANDIDATES keyword and specify an array ofFLOAT64 valuesto provide discrete values to use for the hyperparameter. For example,LEARN_RATE = HPARAM_CANDIDATES([0, 0.001, 0.01, 0.1]).

When running hyperparameter tuning, the valid range is[0, 1.0], thedefault range is[0, 1.0], and the scale type isLINEAR.

OPTIMIZER

Syntax

OPTIMIZER = { { 'ADAGRAD' | 'ADAM' | 'FTRL' | 'RMSPROP' | 'SGD' } | HPARAM_CANDIDATES([candidates]) }

Description

The optimizer for training the model.

Arguments

This option accepts the following values:

If you are running hyperparameter training, you can provide more than onevalue for this option by usingHPARAM_CANDIDATES and specifying an array.For example,OPTIMIZER = HPARAM_CANDIDATES(['ADAM', 'FTRL', 'SGD']).

L1_REG

Syntax

L1_REG = {float64_value | HPARAM_RANGE(range) | HPARAM_CANDIDATES([candidates]) }

Description

The L1 regularization strength of theOPTIMIZER. You can only usethis option whenOPTIMIZER is set to one of the following values:

Arguments

If you aren't running hyperparameter tuning, then you can specify aFLOAT64 value. The default value is0.

If you are running hyperparameter tuning, then you can use one of thefollowing options:

  • TheHPARAM_RANGE keyword and twoFLOAT64 values that definethe range to use for the hyperparameter. For example,L1_REG = HPARAM_RANGE(0, 5.0).
  • TheHPARAM_CANDIDATES keyword and an array ofFLOAT64 valuesthat provide discrete values to use for the hyperparameter. For example,L1_REG = HPARAM_CANDIDATES([0, 1.0, 3.0, 5.0]).

When running hyperparameter tuning, the valid range is(0, ∞), the default range is(0, 10.0], and the scaletype isLOG.

L2_REG

Syntax

L2_REG = {float64_value | HPARAM_RANGE(range) | HPARAM_CANDIDATES([candidates]) }

Description

The L2 regularization strength of theOPTIMIZER. You can onlyuse this option whenOPTIMIZER is set to one of the following values:

Arguments

If you aren't running hyperparameter tuning, then you can specify aFLOAT64 value. The default value is0.

If you are running hyperparameter tuning, then you can use one of thefollowing options:

  • TheHPARAM_RANGE keyword and twoFLOAT64 values that definethe range to use for the hyperparameter. For example,L2_REG = HPARAM_RANGE(1.5, 5.0).
  • TheHPARAM_CANDIDATES keyword and an array ofFLOAT64 valuesthat provide discrete values to use for the hyperparameter. For example,L2_REG = HPARAM_CANDIDATES([0, 1.0, 3.0, 5.0]).

When running hyperparameter tuning, the valid range is(0, ∞), thedefault range is(0, 10.0], and the scale type isLOG.

ACTIVATION_FN

Syntax

ACTIVATION_FN = { { 'RELU' | 'RELU6' | 'CRELU' | 'ELU' | 'SELU' | 'SIGMOID' | 'TANH' } | HPARAM_CANDIDATES([candidates]) }

Description

The activation function of the neural network.

Arguments

This option accepts the following values:

If you are running hyperparameter training, then you can provide more than onevalue for this option by usingHPARAM_CANDIDATES and specifying an array.For example,ACTIVATION_FN = HPARAM_CANDIDATES(['RELU', 'RELU6', 'TANH']).

BATCH_SIZE

Syntax

BATCH_SIZE = {int64_value | HPARAM_RANGE(range) | HPARAM_CANDIDATES([candidates]) }

Description

The mini batch size of samples that are fed to the neural network.

Arguments

If you aren't running hyperparameter tuning, specify anINT64 value thatis positive and is less than or equal to8192. The default value is32or the number of samples, whichever is smaller.

If you are running hyperparameter tuning, use one of the following options:

  • TheHPARAM_RANGE keyword and twoFLOAT64 values that definethe range to use for the hyperparameter. For example,BATCH_SIZE = HPARAM_RANGE(16, 64).
  • TheHPARAM_CANDIDATES keyword and an array ofFLOAT64 valuesthat provide discrete values to use for the hyperparameter. For example,BATCH_SIZE = HPARAM_CANDIDATES([32, 64, 256, 1024]).

When running hyperparameter tuning, the valid range is(0, ∞),the default range is[16, 1024], and the scale type isLOG.

DROPOUT

Syntax

DROPOUT = {float64_value | HPARAM_RANGE(range) | HPARAM_CANDIDATES([candidates]) }

Description

The dropout rate of units in the neural network.

Arguments

If you aren't running hyperparameter tuning, then you can specify aFLOAT64value that is positive and is less than or equal to1.0. The default value is0.

If you are running hyperparameter tuning, then you must use one of thefollowing options:

  • TheHPARAM_RANGE keyword and twoFLOAT64 values that definethe range to use for the hyperparameter. For example,DROPOUT = HPARAM_RANGE(0, 0.6).
  • TheHPARAM_CANDIDATES keyword and an array ofFLOAT64 valuesthat provide discrete values to use for the hyperparameter. For example,DROPOUT = HPARAM_CANDIDATES([0.1, 0.3, 0.6]).

When running hyperparameter tuning, the valid range is[0, 1.0), thedefault range is[0, 0.8], and the scale type isLINEAR.

HIDDEN_UNITS

Syntax

HIDDEN_UNITS = {int_array | HPARAM_CANDIDATES([candidates]) }

Description

The hidden layers of the neural network.

Arguments

An array of integers that represents the architecture of the hidden layers. Ifnot specified, BigQuery ML applies a single hidden layer thatcontains no more than 128 units. The number of units is calculated as[min(128,num_samples / (10 * (num_input_units + num_output_units)))]. The upper bound ofthe rule ensures that the model isn't over fitting.

The number in the middle of the array defines the shape of the latent space. Forexample,hidden_units=[128, 64, 4, 64, 128] defines a four-dimensional latentspace.

The number of layers inhidden_units must be odd, and we recommend that thesequence be symmetrical.

The following example defines a model architecture that uses three hidden layerswith 256, 128, and 64 nodes, respectively.

HIDDEN_UNITS=[256,128,64]

If you are running hyperparameter tuning, then you must use theHPARAM_CANDIDATES keyword and specify an array in the formARRAY<STRUCT<ARRAY<INT64>>> to provide discrete values to use for thehyperparameter. Each struct value in the outer array represents a candidateneural architecture. The array ofINT64 values in each struct represents ahidden layer.

The following example represents a neural architecture search with threecandidates, which include a single layer of 8 neurons, two layers of neuronswith 8 and 16 in sequence, and three layers of neurons with 16, 32 and 64 insequence, respectively.

hidden_units=hparam_candidates([struct([8]),struct([8,16]),struct([16,32,64])])

The valid range for theINT64 arrays is[1, ∞).

INTEGRATED_GRADIENTS_NUM_STEPS

Syntax

INTEGRATED_GRADIENTS_NUM_STEPS =int64_value

Description

Specifies the number of steps to sample between the example being explained andits baseline for approximating the integral when usingintegrated gradientsattribution methods.

Arguments

AnINT64 value that is less than or equal to30 and greater than0. Thedefault value is15.

You can only set this option ifENABLE_GLOBAL_EXPLAIN isTRUE.

TF_VERSION

Syntax

TF_VERSION={'1.15'|'2.8.0'}

Description

Specifies the TensorFlow version for model training. The defaultvalue is1.15.

SetTF_VERSION to2.8.0 to use TensorFlow2 with the Keras API.

AUTO_CLASS_WEIGHTS

Syntax

AUTO_CLASS_WEIGHTS={TRUE|FALSE}

Description

Determines whether to balance class labels by using weights for each class ininverse proportion to the frequency of that class.

Only use this option with classifier models.

By default, the training data used to create the modelis unweighted. If the labels in the training data are imbalanced, the modelmight learn to predict the most popular class of labels more heavily, whichyou might not want.

To balance every class, set this option toTRUE. Balance isaccomplished using the following formula:

total_input_rows/(input_rows_for_class_n*number_of_unique_classes)

Arguments

ABOOL value. The default value isFALSE.

CLASS_WEIGHTS

Syntax

CLASS_WEIGHTS =struct_array

Description

The weights to use for each class label. You can't specify this option ifAUTO_CLASS_WEIGHTS isTRUE.

Arguments

AnARRAY ofSTRUCT values. EachSTRUCT contains aSTRING value that specifies the class label and aFLOAT64 value thatspecifies the weight for that class label. A weight must be present for everyclass label. The weights are not required to add up to 1.

ACLASS_WEIGHTS value might look like the following example:

CLASS_WEIGHTS=[STRUCT('example_label',.2)]

ENABLE_GLOBAL_EXPLAIN

Syntax

ENABLE_GLOBAL_EXPLAIN={TRUE|FALSE}

Description

Determines whether to compute global explanations by usingexplainable AIto evaluate the importance of global features to the model.

Global explanations are computed when you create the model. This optionmust beTRUE if you want to use theML.GLOBAL_EXPLAIN functionto retrieve the global explanations after the model is created.

Arguments

ABOOL value. The default value isFALSE.

EARLY_STOP

Syntax

EARLY_STOP={TRUE|FALSE}

Description

Determines whether training should stop after the first iteration in which therelative loss improvement is less than the value specified forMIN_REL_PROGRESS.

Arguments

ABOOL value. The default value isTRUE.

MIN_REL_PROGRESS

Syntax

MIN_REL_PROGRESS =float64_value

Description

The minimum relative loss improvement that is necessary to continue trainingwhenEARLY_STOP is set toTRUE. For example, a value of0.01 specifies that each iteration must reduce the loss by 1% for trainingto continue.

Arguments

AFLOAT64 value. The default value is0.01.

INPUT_LABEL_COLS

Syntax

INPUT_LABEL_COLS =string_array

Description

The name of the label column in the training data. The label column contains theexpected machine learning result for the given record. For example, in a spamdetection dataset, the label column value would probably be eitherspam ornot spam. In a rainfall dataset, the label column value might be the amountof rain that fell during a certain period.

Arguments

A one-elementARRAY of string values. Defaults tolabel.

MAX_ITERATIONS

Syntax

MAX_ITERATIONS =int64_value

Description

The maximum number of training iterations, where one iteration representsa single pass of the entire training data.

Arguments

AnINT64 value. The default value is20.

WARM_START

Syntax

WARM_START={TRUE|FALSE}

Description

Determines whether to train a model with new training data, new model options,or both. Unless you explicitly override them, the initial options used to trainthe model are used for the warm start run.

In a warm start run, the iteration numbers are reset to start from zero. Usethe training run or iteration information returned by theML.TRAINING_INFO functionto distinguish the warm start run from the original run.

In a warm start, the values of theMODEL_TYPE,LABELS, andHIDDEN_UNITSoptions, and the training data schema, must remain the same as they were inprevious training job.

Arguments

ABOOL value. The default value isFALSE.

DATA_SPLIT_METHOD

Syntax

DATA_SPLIT_METHOD={'AUTO_SPLIT'|'RANDOM'|'CUSTOM'|'SEQ'|'NO_SPLIT'}

Description

The method used to split input data into training, evaluation, and, if you arerunning hyperparameter tuning, test data sets. Training data is used to trainthe model. Evaluation data is used to avoidoverfittingby using early stopping. Test data is used to test the hyperparameter tuningtrial and record its metrics in the model.

The percentage sizes of the data sets produced by the various arguments forthis option are approximate. Larger input data sets come closer to thepercentages described than smaller input data sets do.

You can see the model's data split information in the following ways:

  • The data split method and percentage are shown in theTraining Optionssection of the model'sDetails page on the BigQuerypage of the Google Cloud console.
  • Links to temporary tables that contain the split data are available in theModel Details section of the model'sDetails page on theBigQuery of the Google Cloud console. You can also returnthis information from theDataSplitResult fieldin the BigQuery API. These tables are saved for 48 hours. If youneed this information for more than 48 hours, then you should exportthis data or copy it to permanent tables.

Arguments

This option accepts the following values:

*AUTO_SPLIT: This is the default value. This option splits the data as follows:
  • If there are fewer than 500 rows in the input data, then all rows are usedas training data.
  • If you aren't running hyperparameter tuning, then data is randomized andsplit as follows:

    • If there are between 500 and 50,000 rows in the input data, then 20% ofthe data is used as evaluation data and 80% is used as training data.
    • If there are more than 50,000 rows, then 10,000 rows are used asevaluation data and the remaining rows are used as training data.
  • If you are running hyperparameter tuning and there are more than 500 rows inthe input data, then the data is randomized and split as follows:

    • 10% of the data is used as evaluation data
    • 10% is used as test data
    • 80% is used as training data

      For more information, seeData split.

  • RANDOM: Data is randomized before being split into sets. You can use thisoption with theDATA_SPLIT_EVAL_FRACTION andDATA_SPLIT_TEST_FRACTIONoptions to customize the data split. If you don't specify either of thoseoptions, data is split in the same way as for theAUTO_SPLIT option.

    A random split is deterministic: different training runs produce the samesplit results if the same underlying training data is used.

    Note: A random split is based on theFARM_FINGERPRINTof the data (including the column name and schema), sotables with the same content but different column names and schemas may getdifferent splitting and different evaluation metrics.
  • CUSTOM: Split data using the value in a specified column:

    • If you aren't running hyperparameter tuning, then you must provide thename of a column of typeBOOL. Rows with a value ofTRUE orNULL areused as evaluation data, rows with a value ofFALSE are used astraining data.
    • If you are running hyperparameter tuning, then you must provide the nameof a column of typeSTRING. Rows with a value ofTRAIN are used astraining data, rows with a value ofEVAL are used as evaluation data,and rows with a value ofTEST are used as test data.

    Use theDATA_SPLIT_COL option to identify the columnthat contains the data split information.

  • SEQ: Split data sequentially by using the value in a specified column of oneof the following types:

    • NUMERIC
    • BIGNUMERIC
    • STRING
    • TIMESTAMP

    The data is sorted smallest to largest based on the specified column.

    When you aren't running hyperparameter tuning, the firstn rowsare used as evaluation data, wheren is the value specified forDATA_SPLIT_EVAL_FRACTION. The remaining rows are used as training data.

    When you are running hyperparameter tuning, the firstn rowsare used as evaluation data, wheren is the value specified forDATA_SPLIT_EVAL_FRACTION. The nextm rows are used as testdata, wherem is the value specified forDATA_SPLIT_TEST_FRACTION. The remaining rows are used as training data.

    All rows with split values smaller than the threshold are used astraining data. The remaining rows, includingNULLs, are used as evaluationdata.

    Use theDATA_SPLIT_COL option to identify the column that contains thedata split information.

  • NO_SPLIT: No data split; all input data is used as training data.

DATA_SPLIT_EVAL_FRACTION

Syntax

DATA_SPLIT_EVAL_FRACTION =float64_value

Description

The fraction of the data to use as evaluation data. Use when you arespecifyingRANDOM orSEQ as the value for theDATA_SPLIT_METHOD option.

If you are running hyperparameter tuning and you specify a value for thisoption, you must also specify a value forDATA_SPLIT_TEST_FRACTION. In thiscase, the training dataset is1 -eval_fraction -test_fraction. Forexample, if you specify20.00 forDATA_SPLIT_EVAL_FRACTION and8.0 forDATA_SPLIT_TEST_FRACTION, your training dataset is 72% of the input data.

Arguments

AFLOAT64 value. The default is0.2. The service maintains the accuracy ofthe input value to two decimal places.

DATA_SPLIT_TEST_FRACTION

Syntax

DATA_SPLIT_TEST_FRACTION =float64_value

Description

The fraction of the data to use as test data. Use this option when you arerunning hyperparameter tuning and specifying eitherRANDOM orSEQ asvalue for theDATA_SPLIT_METHOD option.

If you specify a value for this option, you must also specify a value forDATA_SPLIT_EVAL_FRACTION. In this case,the training dataset is1 -eval_fraction -test_fraction.For example, if you specify20.00 forDATA_SPLIT_EVAL_FRACTION and8.0 forDATA_SPLIT_TEST_FRACTION, your training dataset is 72% of the input data.

Arguments

AFLOAT64 value. The default is0. The service maintains the accuracy ofthe input value to two decimal places.

DATA_SPLIT_COL

Syntax

DATA_SPLIT_COL =string_value

Description

The name of the column to use to sort input data into the training,evaluation, or test set. Use when you are specifyingCUSTOM orSEQ as thevalue for theDATA_SPLIT_METHOD option:

  • If you aren't running hyperparameter tuning and you are specifyingSEQ asthe value forDATA_SPLIT_METHOD, then the data is first sorted smallest tolargest based on the specified column. The lastn rows are usedas evaluation data, wheren is the value specified forDATA_SPLIT_EVAL_FRACTION. The remaining rowsare used as training data.
  • If you aren't running hyperparameter tuning and you are specifyingCUSTOMas the value forDATA_SPLIT_METHOD, then you must provide the nameof a column of typeBOOL. Rows with a value ofTRUE orNULLare used asevaluation data, rows with a value ofFALSE are used as trainingdata.
  • If you are running hyperparameter tuning and you are specifyingSEQ as thevalue forDATA_SPLIT_METHOD, then the data is first sorted smallest tolargest based on the specified column. The lastn rows are usedas evaluation data, wheren is the value specified forDATA_SPLIT_EVAL_FRACTION. The nextm rows are used as test data, wherem is the valuespecified forDATA_SPLIT_TEST_FRACTION.The remaining rows are used as training data.
  • If you are running hyperparameter tuning and you are specifyingCUSTOM asthe value forDATA_SPLIT_METHOD, then you must provide the name of a columnof typeSTRING. Rows with a value ofTRAIN are used as training data, rowswith a value ofEVAL are used as evaluation data, and rows with a value ofTEST are used as test data.

The column you specify forDATA_SPLIT_COL can't be used as a feature orlabel, and is excluded from features automatically.

Arguments

ASTRING value.

NUM_TRIALS

Syntax

NUM_TRIALS =int64_value

Description

The maximum number of submodels to train. The tuning stops whenNUM_TRIALSsubmodels are trained, or when the hyperparameter search space is exhausted.You must specify this option in order to use hyperparameter tuning.

Arguments

AnINT64 value between1 and100, inclusive.

Note: We recommend using at least(number_of_hyperparameters * 10) trials to tune a model.

MAX_PARALLEL_TRIALS

Syntax

MAX_PARALLEL_TRIALS =int64_value

Description

The maximum number of trials to run at the same time. If you specify a valuefor this option, you must also specify a value forNUM_TRIALS.

Arguments

AnINT64 value between1 and5, inclusive. The default value is1.

Note: Although specifying largerMAX_PARALLEL_TRIALS values can accelerate thehyperparameter tuning process, acceleration can undermine the final modelquality when you specifyVIZIER_DEFAULT as theHPARAM_TUNING_ALGORITHMvalue. This is because the parallel trials can't benefit from concurrenttraining results.

HPARAM_TUNING_ALGORITHM

Syntax

HPARAM_TUNING_ALGORITHM={'VIZIER_DEFAULT'|'RANDOM_SEARCH'|'GRID_SEARCH'}

Description

The algorithm used to tune the hyperparameters. If you specify a valuefor this option, you must also specify a value forNUM_TRIALS.

Arguments

Specify one of the following values:

  • VIZIER_DEFAULT: Use the default algorithm inVertex AI Vizier to tune hyperparameters. This algorithm is the mostpowerful algorithm of those offered. It performs a mixture of advancedsearch algorithms, includingBayesian optimizationwithGaussian processes. Italso usestransfer learningto take advantage of previously tuned models. This is the default, and alsothe recommended approach.

  • RANDOM_SEARCH: Userandom searchto explore the search space.

  • GRID_SEARCH: Usegrid searchto explore the search space. You can only use this algorithm when everyhyperparameter's search space is discrete.

HPARAM_TUNING_OBJECTIVES

Syntax

ForDNN_CLASSIFIER models:

HPARAM_TUNING_OBJECTIVES={'PRECISION'|'RECALL'|'ACCURACY'|'F1_SCORE'|'LOG_LOSS'|'ROC_AUC'}

ForDNN_REGRESSOR models:

HPARAM_TUNING_OBJECTIVES={'MEAN_ABSOLUTE_ERROR'|'MEAN_SQUARED_ERROR'|'MEAN_SQUARED_LOG_ERROR'|'MEDIAN_ABSOLUTE_ERROR'|'R2_SCORE'|'EXPLAINED_VARIANCE'}

Description

The hyperparameter tuning objective for the model; only one objective issupported. If you specify a value for this option, then you must also specify avalue forNUM_TRIALS.

Arguments

The possible objectives are a subset of themodel evaluation metricsfor the model type. If you aren't running hyperparameter tuning, or if you areand you don't specify an objective, then the default objectiveis used. ForDNN_CLASSIFIER models, the default isROC_AUC.ForDNN_REGRESSOR models, the default isR2_SCORE.

MODEL_REGISTRY

TheMODEL_REGISTRY option specifies the model registry destination.VERTEX_AI is the only supported model registry destination. To learn more, seeRegister a BigQuery ML model.

VERTEX_AI_MODEL_ID

TheVERTEX_AI_MODEL_ID option specifies a Vertex AI model IDto register the model with. The model ID is associated with yourBigQuery ML model, and is visible from theModel Registry. If you don't specify aVertex AI model ID, the BigQuery MLmodel name is used.

TheVERTEX_AI_MODEL_ID value can have up to 63 characters, and validcharacters are[a-z0-9_-]. The first character cannot be a number or hyphen.If you don't specify a Vertex AI model ID, theBigQuery ML model name must meet these requirements.

You can only set theVERTEX_AI_MODEL_ID option when theMODEL_REGISTRYoption is set toVERTEX_AI.

VERTEX_AI_MODEL_VERSION_ALIASES

TheVERTEX_AI_MODEL_VERSION_ALIASES option specifies aVertex AI model alias to use when registering a model. Modelaliases are helpful for fetching or deploying a particular model version byreference without needing to know the specific version ID. To learn more abouthow Model Registry aliases work, seeHow to use model version aliases.

You can only set theVERTEX_AI_MODEL_VERSION_ALIASES option when theMODEL_REGISTRY option is set toVERTEX_AI.

KMS_KEY_NAME

Syntax

KMS_KEY_NAME =string_value

Description

The Cloud Key Management Servicecustomer-managed encryption key (CMEK) touse to encrypt the model.

Arguments

ASTRING value containing the fully-qualified name of the CMEK. For example,

'projects/my_project/locations/my_location/keyRings/my_ring/cryptoKeys/my_key'

Internal parameter defaults

BigQuery ML uses the following default values when buildingmodels:

loss_reduction=losses_utils.ReductionV2.SUM_OVER_BATCH_SIZEbatch_norm=False

query_statement

TheASquery_statement clause specifies theGoogleSQL query used to generate the training data. See theGoogleSQL query syntaxpage for the supported SQL syntax of thequery_statement clause.

All columns referenced by thequery_statement are used as inputfeaturesto the model except for the columns included inINPUT_LABEL_COLS andDATA_SPLIT_COL.

Hyperparameter tuning

DNN classification and regression models supporthyperparameter tuning, which you can useto improve model performance for your data. To usehyperparameter tuning, set theNUM_TRIALs option to thenumber of trials that you want to run. BigQuery ML then trains themodel the number of times that you specify, using different hyperparametervalues, and returns the model that performs the best.

Hyperparameter tuning defaults to improving the key performance metric for thegiven model type. You can use theHPARAM_TUNING_OBJECTIVES option to tune fora different metric if you need to.

For more information about the training objectives and hyperparameterssupported for DNN classification models, seeDNN_CLASSIFIER.For more information about the training objectives and hyperparameterssupported for DNN regression models, seeDNN_REGRESSOR.To try a tutorial that walks you through hyperparameter tuning, seeImprove model performance with hyperparameter tuning.

Locations

For information about supported locations, seeLocations for non-remote models.

Limitations

CREATE MODEL statements must comply with the following rules:

  • ForDNN_CLASSIFIER models, thelabel column can contain up to 1,000 unique values; that is, the number of classes is less than or equal to 1,000. If you need to classify into more than 1,000 labels, contactbqml-feedback@google.com.

Example

The following example trains a DNN classifier model against'mytable' with'mylabel' as the label column.

CREATEMODEL`project_id.mydataset.mymodel`OPTIONS(MODEL_TYPE='DNN_CLASSIFIER',ACTIVATION_FN='RELU',BATCH_SIZE=16,DROPOUT=0.1,EARLY_STOP=FALSE,HIDDEN_UNITS=[128,128,128],INPUT_LABEL_COLS=['mylabel'],LEARN_RATE=0.001,MAX_ITERATIONS=50,OPTIMIZER='ADAGRAD')ASSELECT*FROM`project_id.mydataset.mytable`;

Train a DNN classifier model with hyperparameter tuning

The following example creates and trains a DNN classifier model. It uses hyperparameter tuning to improve model performance.

CREATEMODEL`mydataset.mymodel`OPTIONS(MODEL_TYPE='DNN_CLASSIFIER',num_trials=10,max_parallel_trials=2,HPARAM_TUNING_OBJECTIVES=['ROC_AUC'])ASSELECTcolumn1,column2,column3,labelFROM`mydataset.mytable`

Supported regions

Training DNN models is not supported in all BigQuery MLregions. For a complete list of supported regions and multi-regions, seeBigQuery ML locations page.

Except as otherwise noted, the content of this page is licensed under theCreative Commons Attribution 4.0 License, and code samples are licensed under theApache 2.0 License. For details, see theGoogle Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.

Last updated 2025-11-24 UTC.