Instrução CREATE MODEL para modelos de rede neural profunda (DNN, na sigla em inglês)

Instrução CREATE MODEL para modelos DNN

Para criar um modelo de rede neural profunda no BigQuery, use a instrução CREATE MODEL do BigQuery ML com os tipos de modelo DNN_CLASSIFIER ou DNN_REGRESSOR. Esses modelos são criados por meio de estimadores do TensorFlow.

Sintaxe de CREATE MODEL

{CREATE MODEL | CREATE MODEL IF NOT EXISTS | CREATE OR REPLACE MODEL} model_name
[OPTIONS(MODEL_TYPE = { 'DNN_CLASSIFIER' | 'DNN_REGRESSOR' },
         ACTIVATION_FN = { 'RELU' | 'RELU6' | 'CRELU' | 'ELU' | 'SELU' | 'SIGMOID' | 'TANH' },
         AUTO_CLASS_WEIGHTS = { TRUE | FALSE },
         BATCH_SIZE = int64_value,
         CLASS_WEIGHTS = struct_array,
         DROPOUT = float64_value,
         EARLY_STOP = { TRUE | FALSE },
         HIDDEN_UNITS = int_array,
         LEARN_RATE = float64_value,
         INPUT_LABEL_COLS = string_array,
         MAX_ITERATIONS = int64_value,
         MIN_REL_PROGRESS = float64_value,
         OPTIMIZER = { 'ADAGRAD' | 'ADAM' | 'FTRL' | 'RMSPROP' | 'SGD' },
         WARM_START = { TRUE | FALSE },
         DATA_SPLIT_METHOD = { 'AUTO_SPLIT' | 'RANDOM' | 'CUSTOM' | 'SEQ' | 'NO_SPLIT' },
         DATA_SPLIT_EVAL_FRACTION = float64_value,
         DATA_SPLIT_COL = string_value
)];

CREATE MODEL

Cria um novo modelo do BigQuery ML no conjunto de dados especificado. Se o nome do modelo já estiver em uso, CREATE MODEL retornará um erro.

CREATE MODEL IF NOT EXISTS

Criará um novo modelo do BigQuery ML somente se não houver um outro modelo de mesmo nome no conjunto de dados especificado.

CREATE OR REPLACE MODEL

Cria um novo modelo do BigQuery ML e substitui qualquer modelo que já existe com o mesmo nome no conjunto de dados especificado.

Opções de modelo

No momento, o BigQuery ML é compatível com as opções a seguir. model_name e model_type são obrigatórios, enquanto outros são opcionais.

model_name

model_name é o nome do modelo do BigQuery ML que você está criando ou substituindo. O nome do modelo precisa ser exclusivo por conjunto de dados: nenhum outro modelo ou tabela pode ter o mesmo nome. O nome do modelo precisa seguir as mesmas regras de nomenclatura de uma tabela do BigQuery. Um nome de modelo pode conter:

  • até 1.024 caracteres
  • letras maiúsculas, minúsculas, números e sublinhados

model_name não diferencia maiúsculas de minúsculas.

Se você não tiver um projeto padrão configurado, insira o nome do modelo com o ID do projeto no seguinte formato, incluindo os acentos graves:

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

Por exemplo:

`myproject.mydataset.mymodel`

MODEL_TYPE

Sintaxe

MODEL_TYPE = { 'DNN_CLASSIFIER' | 'DNN_REGRESSOR' }

Descrição

Especifica o tipo do modelo. Esta opção é obrigatória.

ACTIVATION_FN

Sintaxe

ACTIVATION_FN =  { 'RELU' | 'RELU6' | 'CRELU' | 'ELU' | 'SELU' | 'SIGMOID' | 'TANH' }

Descrição

Em tipos de modelo DNN, especifica a função de ativação da rede neural.

Argumentos

As seguintes opções estão disponíveis:

O valor padrão é 'RELU'.

AUTO_CLASS_WEIGHTS

Sintaxe

AUTO_CLASS_WEIGHTS = { TRUE | FALSE }

Descrição

Define se os rótulos de classe serão balanceados usando pesos para cada classe em proporção inversa à frequência dessa classe.

Use somente com o modelo DNN_CLASSIFIER.

Por padrão, os dados de treinamento usados para criar um modelo de classificador DNN multiclasse não são ponderados. Se os rótulos nos dados de treinamento estiverem desequilibrados, o modelo poderá aprender a prever a classe mais comum de rótulos com mais intensidade, o que talvez não seja o ideal.

Para balancear todas as classes, use a seguinte fórmula:

total_input_rows / (input_rows_for_class_n * number_of_unique_classes)

Argumentos

Aceita um BOOL. O valor padrão é FALSE.

BATCH_SIZE

Sintaxe

BATCH_SIZE = int64_value

Descrição

Em tipos de modelo DNN, especifica o tamanho do mini-lote de amostras que são importadas à rede neural.

Argumentos

Um número positivo que não seja maior que 8.192.

O valor padrão é o valor menor de 1.024 e o número de amostras.

CLASS_WEIGHTS

Sintaxe

CLASS_WEIGHTS = struct_array

Descrição

Os pesos a serem usados para cada rótulo de classe. Essa opção não poderá ser especificada quando AUTO_CLASS_WEIGHTS for TRUE.

Argumentos

struct_array é um ARRAY de códigos STRUCT. Desse modo, cada STRUCT contém um STRING que contém o rótulo de classe e um FLOAT64 que contém o peso desse rótulo de classe. É preciso que haja um peso para cada rótulo de classe. Não é necessário que os pesos somem um. Por exemplo:

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

DROPOUT

Sintaxe

DROPOUT = float64_value

Descrição

Em tipos de modelo DNN, especifica a taxa de dropout de unidades na rede neural.

Argumentos

Um valor válido não pode ser negativo nem superior a 1,0. O valor padrão é 0,0.

EARLY_STOP

Sintaxe

EARLY_STOP = { TRUE | FALSE }

Descrição

Indica se o treinamento precisa parar após a primeira iteração em que a melhoria da perda relativa é menor que o valor especificado para MIN_REL_PROGRESS.

Argumentos

O valor é um BOOL. O valor padrão é TRUE.

HIDDEN_UNITS

Sintaxe

HIDDEN_UNITS = int_array

Descrição

Em tipos de modelo DNN, especifica as camadas escondidas da rede neural.

Argumentos

Matriz de números inteiros que representa a arquitetura das camadas escondidas. Se não for especificada, o BigQuery ML aplicará uma única camada escondida que não contenha mais de 128 unidades. O número de unidades é calculado com base em vários aspectos, como colunas de atributos e número de valores categóricos.

Exemplo

HIDDEN_UNITS = [256, 128, 64]

Este exemplo representa uma arquitetura de três camadas escondidas com 256, 128 e 64 nós, respectivamente.

INPUT_LABEL_COLS

Sintaxe

INPUT_LABEL_COLS = string_array

Descrição

Nome(s) de coluna de rótulo nos dados de treinamento.

Argumentos

string_array é um ARRAY de STRINGs. Os tipos de modelo DNN só aceitam valores string_array que contêm um elemento.

LEARN_RATE

Sintaxe

LEARN_RATE = float64_value

Descrição

A taxa de aprendizado inicial do treinamento.

Argumentos

float64_value é um FLOAT64. O valor padrão é 0,01.

MAX_ITERATIONS

Sintaxe

MAX_ITERATIONS = int64_value

Descrição

Número máximo de iterações de treinamento (ou etapas).

Argumentos

int64_value é um INT64. O valor padrão é 20.

MIN_REL_PROGRESS

Sintaxe

MIN_REL_PROGRESS = float64_value

Descrição

Melhoria mínima de perda relativa, necessária para continuar o treinamento quando EARLY_STOP for definido como verdadeiro. Por exemplo, o valor 0,01 especifica que cada iteração precisa reduzir a perda em 1% para que o treinamento continue.

Argumentos

float64_value é um FLOAT64. O valor padrão é 0,01.

OPTIMIZER

Sintaxe

OPTIMIZER =  { 'ADAGRAD' | 'ADAM' | 'FTRL' | 'RMSPROP' | 'SGD' }

Descrição

Em tipos de modelo DNN, especifica o otimizador para treinar o modelo.

Argumentos

As seguintes opções estão disponíveis:

O valor padrão é 'ADAM'.

WARM_START

Sintaxe

WARM_START = { TRUE | FALSE }

Descrição

Treine novamente um modelo com novos dados de treinamento, novas opções de modelo ou ambos. A menos que explicitamente modificadas, as opções iniciais usadas para treinar o modelo são usadas na execução a quente.

Em uma execução a quente, os números da iteração são redefinidos para iniciar do zero. O número TRAINING_RUN ou as colunas TIMESTAMP podem ser usados para distinguir a execução a quente da execução original.

Os valores das opções MODEL_TYPE, LABELS e HIDDEN_UNITS e o esquema de dados de treinamento precisam permanecer iguais aos do job de treinamento anterior em uma inicialização a quente. A opção warm_start é compatível somente com as redefinições de modelo LINEAR_REG, LOGISTIC_REG, KMEANS, DNN_REGRESSOR e DNN_CLASSIFIER.

Argumentos

Aceita um BOOL. O valor padrão é FALSE.

DATA_SPLIT_METHOD

Sintaxe

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

Descrição

Método para dividir dados de entrada em conjuntos de treinamento e avaliação. Dados de treinamento são usados para treinar o modelo. Os dados de avaliação são usados para evitar o overfitting devido à parada antecipada.

Argumentos

Aceita os seguintes valores:

'AUTO_SPLIT' A estratégia de divisão automática é a seguinte:

  • Quando há menos de 500 linhas nos dados de entrada, todas as linhas são usadas como dados de treinamento.
  • Quando há entre 500 e 50.000 linhas nos dados de entrada, 20% dos dados são usados como dados de avaliação em uma divisão RANDOM.
  • Quando há mais de 50.000 linhas nos dados de entrada, somente 10.000 linhas são usadas como dados de avaliação em uma divisão RANDOM.

'RANDOM' Divide dados aleatoriamente. Uma divisão aleatória é determinística: diferentes execuções de treinamento produzirão os mesmos resultados de divisão se os dados de treinamento subjacentes permanecerem os mesmos.

'CUSTOM' Divide os dados sequencialmente usando uma coluna fornecida pelo cliente do tipo BOOL. As linhas com o valor TRUE são usadas como dados de avaliação. As linhas com o valor FALSE são usadas como dados de treinamento.

'SEQ' Divide os dados sequencialmente usando uma coluna fornecida pelo cliente. A coluna pode ter qualquer tipo de dados solicitados: NUMERIC, BIGNUMERIC, STRING ou TIMESTAMP. Todas as linhas com valores divididos menores que o limite serão usadas como dados de treinamento. As linhas restantes, inclusive NULL, serão usadas como dados de avaliação.

'NO_SPLIT' usa todos os dados como dados de treinamento.

DATA_SPLIT_EVAL_FRACTION

Sintaxe

DATA_SPLIT_EVAL_FRACTION = float64_value

Descrição

Essa opção é usada com divisões 'RANDOM' e 'SEQ'. Ela especifica a fração dos dados usados para avaliação, com precisão de duas casas decimais.

Argumentos

float64_value é um FLOAT64. O valor padrão é 0.2.

DATA_SPLIT_COL

Sintaxe

DATA_SPLIT_COL = string_value

Descrição

Identifica a coluna usada para dividir os dados. Ela não pode ser usada como um recurso ou rótulo e será excluída dos recursos automaticamente.

  • Quando o valor de DATA_SPLIT_METHOD for 'CUSTOM', a coluna correspondente deverá ser do tipo BOOL. As linhas com valores TRUE ou NULL são usadas como dados de avaliação. Linhas com valores FALSE são usadas como dados de treinamento.

  • Quando o valor de DATA_SPLIT_METHOD for 'SEQ', as últimas n linhas, da menor para a maior, na coluna correspondente serão usadas como dados de avaliação, em que n será o valor especificado para DATA_SPLIT_EVAL_FRACTION. As primeiras linhas são usadas como dados de treinamento.

INTERNAL DEFAULT OPTIONS

O BigQuery ML também usa os seguintes valores padrão ao criar modelos de DNN internamente.

loss_reduction = losses_utils.ReductionV2.SUM_OVER_BATCH_SIZE

batch_norm = False

Exemplo

O exemplo a seguir treina um modelo de classificador DNN em 'mytable' com 'mylabel' como a coluna de rótulo.

CREATE MODEL project_id:mydataset.mymodel
OPTIONS(MODEL_TYPE='DNN_CLASSIFIER',
        ACTIVATION_FN = 'RELU',
        BATCH_SIZE = 2048,
        DROPOUT = 0.1,
        EARLY_STOP = FALSE,
        HIDDEN_UNITS = [128, 128, 128],
        INPUT_LABEL_COLS = ['mylabel'],
        LEARN_RATE=0.001,
        MAX_ITERATIONS = 50,
        OPTIMIZER = 'ADAGRAD')
AS SELECT * FROM project_id:mydataset.mytable;

Regiões compatíveis

O treinamento de modelos de DNN não é compatível com todas as regiões do BigQuery ML. Para ver uma lista completa de regiões e multirregiões compatíveis, consulte a página Locais.