A primeira semana e o segundo dia 02

Curso da plataforma de treinamento: conceitos básicos do TensorFlow

 

Primeiro, alguns conceitos

 

Aprendizagem profunda é uma forma de alcançar inteligência artificial

 

TensorFlow é a biblioteca de software de segunda geração de código aberto do Google para computação digital. No início, ele foi desenvolvido pela equipe do Google Brain para estudar o aprendizado de máquina e redes neurais profundas, mas depois descobriu que o sistema era universal o suficiente para oferecer suporte a uma gama mais ampla de aplicativos e contribuiu para ele como um código aberto.

Resumindo, o TensorFlow pode ser entendido como uma estrutura de aprendizado profundo com um fluxo de dados completo e mecanismo de processamento. Ao mesmo tempo, ele também encapsula um grande número de algoritmos eficientes e disponíveis e funções de construção de rede neural, que podem ser usados ​​para aprendizado profundo. Desenvolvimento e pesquisa. Este curso é baseado no TensorFlow para pesquisa de aprendizado profundo.

A vantagem de escolher o TensorFlow para aprendizado é que você não estará sozinho no caminho do aprendizado profundo, haverá materiais várias vezes maiores do que a mesma estrutura de aprendizado e mais fãs podem aprender e se comunicar uns com os outros. Mais importante, mais e mais trabalhos acadêmicos estão mais inclinados a desenvolver seus próprios protótipos de amostra no TensorFlow. Esta vantagem única pode economizar muito tempo dos alunos no processo de sincronização da tecnologia mais recente.

 

· Keras: pode ser entendido como uma combinação do framework Theano e do front-end TensorFlow. O método de chamada de API para a construção de modelos gradualmente se tornou o mainstream, incluindo estruturas conhecidas como TensorFlow, CNTK e MXNet, que fornecem suporte para a sintaxe de chamada Keras. Pode-se dizer que o código escrito em Keras terá melhor portabilidade.

 

Compreenda rapidamente o Spyder 

1 A razão pela qual o Spyder é recomendado como compilador é que ele é mais conveniente.Ele é integrado desde a instalação até o uso.Apenas um pacote de instalação pode ser baixado, o que economiza muito tempo para configurar o ambiente. Além disso, a função IDE do Spyder também é muito poderosa, que basicamente pode atender às necessidades diárias. O seguinte usa várias funções comumente usadas para apresentar seus detalhes de uso.

Instale o spyder no ambiente virtual anaconda3

https://cloud.tencent.com/developer/ask/148725

 

Compreenda rapidamente o Jupyter Notebook

1 No aprendizado profundo, muitos códigos são transformados em arquivos com a extensão ipynb. Este é um arquivo sobre o Jupyter Notebook, que pode ser usado como um documento e um arquivo que pode executar o código Python. Este software também está integrado no Anaconda. Encontre o item do Jupyter Notebook e clique para ver a interface conforme mostrado na figura.

O programa é uma estrutura B / S, ele irá primeiro iniciar um servidor Web, e depois iniciar um navegador, através do navegador para acessar os serviços da máquina. Aqui você pode fazer upload, download e escrever seu próprio código de arquivo ipynb.

 

 

Em segundo lugar, um exemplo: etapas básicas de desenvolvimento do TensorFlow - regressão logística ajustando dados bidimensionais

 

 

(Um blogueiro escreveu o mesmo exemplo: Exemplo de blog: ajuste do Tensorflow y = regressão linear 2x )

 

 

1. Exemplo 1: Encontre a lei de y≈2x de um grupo de dados aparentemente caóticos

Suponha que haja um conjunto de dados, a relação correspondente entre xey é y≈2x.

Este exemplo é para permitir que a rede neural aprenda essas amostras e seja capaz de encontrar as regras, ou seja, que a rede neural seja capaz de resumir a fórmula y≈2x.

O aprendizado profundo provavelmente tem as seguintes 4 etapas:

(1) Prepare os dados.

(2) Construir um modelo.

(3) Treinamento iterativo.

(4) Use o modelo.

O estágio de preparação de dados é geralmente coletar os dados relevantes da tarefa e, em seguida, estabelecer um modelo de rede, por meio de um certo treinamento iterativo, deixar a rede aprender as características dos dados coletados, formar um modelo utilizável e, em seguida, usar o modelo para resolver o problema para nós.

 

Alguns problemas que encontrei:

O painel de desenho não aparece ao usar o Spyder: https://www.jianshu.com/p/d0f03430427d

Pyhton 中 的 错误 "RuntimeError: Tentativa de usar uma sessão fechada." :Https://blog.csdn.net/zzzzzzxy95/article/details/81136159

Comente várias linhas juntas: ctrl + número 1

 

 

2. Como o modelo é treinado

No exemplo acima, após apenas 20 iterações, um modelo que pode ajustar y≈2x é obtido. Vamos dar uma olhada em como o modelo foi obtido.

2.1 O conteúdo e significado do modelo

Uma estrutura de modelo padrão é dividida em três partes: entrada, nós intermediários e saída, e como conectar essas três partes para aprender regras e realizar cálculos é o que o framework TensorFlow faz.

O TensorFlow define os nós intermediários e o relacionamento operacional (OPS) entre os nós em um "gráfico" próprio , e todas as operações específicas do OPS no gráfico são realizadas por meio de uma "sessão" .

    Pode ser entendido assim :

· O "gráfico" é estático. Não importa qual adição, subtração, multiplicação ou divisão seja feita, eles apenas constroem o relacionamento juntos sem quaisquer operações.

· "Sessão" é dinâmica. Somente após o início da sessão os dados fluirão para o gráfico e operarão de acordo com a relação no gráfico, e o resultado final sairá do gráfico.

O TensorFlow separa a definição e a execução de cálculos dessa maneira. O "mapa" é semelhante a um projeto, enquanto a "sessão" é mais como um canteiro de obras.

Para construir um gráfico completo, geralmente é necessário definir três variáveis , conforme mostrado na figura.

· (1) Nó de entrada: a entrada da rede.

· (2) Parâmetros do modelo usados ​​para treinamento (também chamados de parâmetros de aprendizagem): são os caminhos que conectam vários nós.

· (3) Nó (OP) no modelo: OP é o mais complicado. OP pode ser usado para representar os nós intermediários no modelo ou o nó de saída final, que é a estrutura real da rede.

Conforme mostrado na figura, essas três variáveis ​​são colocadas no modelo estático da rede composta pela figura. No treinamento real, cada nó do gráfico é calculado de acordo com regras estáticas por meio de conversas dinâmicas. Cada iteração atualizará e ajustará os parâmetros de aprendizagem no gráfico. Após um determinado número de iterações, o gráfico final será formado. É o "modelo" desejado. Na sessão, qualquer nó pode ser calculado por meio da função de execução da sessão para obter o valor verdadeiro do nó.

 

2.2 Fluxo de dados dentro do modelo

    O fluxo de dados dentro do modelo é dividido em direto e reverso.

1 . Adiante

A direção direta são os dados que começam na entrada, a operação definida por cada nó por vez e a operação até a saída, que é a direção de fluxo de dados mais básica do modelo. Ele expressa intuitivamente a estrutura do modelo de rede e é usado nos cenários de treinamento, teste e uso do modelo. Esta parte deve ser dominada.

2 . Reversa

O inverso só é usado em cenários de treinamento. Um método chamado derivação de cadeia reversa é usado aqui, ou seja, a partir do último nó na direção para frente, calcule o erro entre o valor do resultado e o valor verdadeiro neste momento, o que formará uma equação que usa os parâmetros de aprendizagem para expressar o erro, e então Cada parâmetro na equação é derivado para obter seu valor de correção de gradiente, e o erro da camada anterior é deduzido ao mesmo tempo, de modo que o erro do nó desta camada seja transferido para a camada anterior na direção oposta à direção positiva, e então a camada anterior é calculada O valor de correção se repete e se repete passo a passo até atingir o primeiro nó na direção direta.

Esta parte do princípio do TensorFlow foi implementada. Os leitores podem simplesmente entendê-la. O foco deve ser qual método usar para calcular o erro, qual método de otimização de descida de gradiente usar e como ajustar os parâmetros (como a taxa de aprendizado) na descida de gradiente.

 

Terceiro, entenda as etapas básicas do desenvolvimento do TensorFlow

3.1 Métodos de definição de nós de entrada

Existem várias maneiras de definir nós de entrada no TensorFlow.

· Definir por espaço reservado: geralmente use este método.

· Definido por tipo de dicionário: geralmente usado no caso de mais entradas.

· Definição direta: geralmente raramente usada.

O primeiro exemplo "3-1 linear regression.py" no início deste capítulo usa marcadores para definir nós de entrada, especificamente usando a função tf.placeholder, conforme mostrado no código a seguir.

 

X = tf.placeholder ("float")

Y = tf.placeholder ("float")

 

3.2 Exemplo 2: Definir o nó de entrada por tipo de dicionário

Descrição da instância

Com base no arquivo de código "3-1 linear regression.py", use marcadores de posição de dicionário para substituir a entrada definida por marcadores de posição, da seguinte maneira:

A definição do dicionário é semelhante à primeira, exceto que eles estão empilhados juntos. O código específico é o seguinte:

Código 3-2 Definir nós de saída por tipo de dicionário

……

# Placeholder

inputdict = {

    'x': tf.placeholder ("float"),

    'y': tf.placeholder ("float")

}

 

3.3 Exemplo 3: Defina o nó de entrada diretamente

Descrição da instância

Com base no arquivo de código "3-1 linear regression.py", use o método de definição direta para substituir a entrada definida pelos marcadores.

A definição direta é colocar as variáveis ​​Python definidas diretamente no nó OP para participar da operação de entrada e colocar as variáveis ​​dos dados simulados diretamente no modelo para treinamento. código mostrado abaixo:

O código 3-3 define diretamente o nó de entrada

……

#Gere dados de simulação

train_X = np.float32 (np.linspace (-1, 1, 100))

train_Y = 2 * train_X + np.random.randn (* train_X.shape) * 0.3 # y = 2x ,

Mas acrescentou ruído

#Exibição gráfica

plt.plot (train_X, train_Y, 'ro', label = 'Dados originais')

plt.legend ()

plt.show ()

# Parâmetros do modelo

W = tf.Variable (tf.random_normal ([1]), nome = "peso")

b = tf.Variable (tf.zeros ([1]), name = "bias")

# Estrutura avançada

z = tf.multiply (W, train_X) + b

Dica: Apenas os códigos de chave nos três métodos são listados acima, e todos os códigos podem ser encontrados no código de suporte deste livro.

 

3.4 Definir variáveis ​​para "parâmetros de aprendizagem"

A definição dos parâmetros de aprendizagem é muito semelhante à definição de input, que se divide em duas partes: definição direta e definição de dicionário. Ambos são métodos de uso comuns, mas o segundo caso geralmente é usado devido a muitos parâmetros em redes neurais profundas.

No exemplo anterior "3-1 linear regression.py", o primeiro método é usado e os parâmetros podem ser definidos diretamente por meio de tf.Variable. código mostrado abaixo:

 

# Parâmetros do modelo

W = tf.Variable (tf.random_normal ([1]), nome = "peso")

b = tf.Variable (tf.zeros ([1]), name = "bias")

 

O exemplo a seguir demonstra o uso de um dicionário para definir os parâmetros de aprendizagem

 

3.5 Exemplo 4: Definir "parâmetros de aprendizagem" por tipo de dicionário

Descrição da instância

Com base no arquivo de código "3-1 linear regression.py", um dicionário é usado para definir os parâmetros de aprendizagem.

A definição do dicionário é semelhante à definição direta, exceto que eles são empilhados juntos. Modifique o código de exemplo "3-1 linear regression.py" da seguinte maneira.

 

Código 3-4 Definir parâmetros de aprendizagem por tipo de dicionário

……

# Parâmetros do modelo

paradict = {

    'w': tf.Variable (tf.random_normal ([1])),

    'b': tf.Variable (tf.zeros ([1]))

} # Estrutura avançada

z = tf.multiply (X, paradict ['w']) + paradict ['b']

 

O código acima também lista apenas as partes principais.Todos os códigos podem ser encontrados no código de suporte deste livro.

 

3.6 Definir "Operação"

O processo de definição de "cálculo" é o processo central de estabelecimento do modelo, que determina diretamente o efeito de ajuste do modelo.A demonstração do código específico também foi apresentada anteriormente. Aqui, explicamos principalmente os tipos de operações de definição e seu papel no aprendizado profundo.

1 Defina o modelo de propagação direta

A estrutura de rede usada no exemplo anterior "3-1 linear regression.py" é muito simples, com apenas um neurônio. Posteriormente, você aprenderá sobre redes neurais multicamadas, redes neurais convolucionais, redes neurais recorrentes e GoogLeNet mais profundo, Resnet, etc. Todas são estruturas de rede compostas de neurônios em combinações diferentes e haverá muitas mudanças a cada ano. Nasce uma nova estrutura com maior eficiência e melhor ajuste.

 

2 Definir função de perda

A função de perda é principalmente para calcular o erro entre o "valor de saída" e o "valor alvo", que é usado em conjunto com a retropropagação. Para encontrar o valor mínimo na retropropagação, a função deve ser derivável.

Dica: A função de perda não mudou muito nos últimos anos. Os leitores só precisam se lembrar dos mais usados ​​e entender os princípios internos. Eles não precisam dominar muitos detalhes, porque a estrutura do TensorFlow já fez isso por nós.

 

3.7 Função de otimização, objetivo de otimização

Depois de ter a estrutura direta e a função de perda, os parâmetros de aprendizagem são otimizados através da função de otimização, e este processo também é concluído na propagação reversa.

O processo de propagação reversa consiste em transmitir o erro na direção oposta ao longo da estrutura de propagação direta. Existem muitas tecnologias envolvidas, como L1, regularização L2, ajuste de impulso, adaptação de taxa de aprendizagem, algoritmo de descida gradiente estocástico adm, etc. Cada técnica representa uma era.

Dica: Com o rápido desenvolvimento do deep learning, a tecnologia do processo de retropropagação atingirá um certo grau de gargalo, e a atualização não muda tão rápido quanto a estrutura da rede, então os leitores só precisam se lembrar das comumente usadas.

 

3.8 Inicializar todas as variáveis

O processo de inicialização de todas as variáveis, embora haja apenas uma linha de código, também é um link-chave, portanto, é listado especificamente.

Após a criação da sessão, a primeira coisa é inicializá-la. Veja também "3-1 linear regression.py" como exemplo, o código é o seguinte:

 

init = tf.global_variables_initializer ()

# Iniciar Sessão

com tf.Session () as sess:

    sess.run (init)

 

Observação: as etapas para inicializar todas as variáveis ​​usando a função tf.global_variables_initializer devem ser realizadas depois que todas as variáveis ​​e definições de OP forem concluídas. Isso garantirá que o conteúdo definido seja válido, caso contrário, as variáveis ​​e OPs definidos após a inicialização não podem ser calculados usando a execução na sessão.

 

3.9 Atualizar iterativamente os parâmetros para a solução ideal

Na sessão de treinamento iterativo, é necessário estabelecer uma sessão para ser concluída. O uso comum é usar a sintaxe with, que pode ser fechada após o término da sessão. Claro, existem outros métodos, que serão apresentados em detalhes posteriormente no curso.

 

com tf.Session () as sess:

 

Conforme mencionado anteriormente, os nós no modelo são calculados pela execução na sessão, e o mesmo é verdadeiro no link de treinamento, mas o OP da operação otimizada é colocado na execução e o número de ciclos é adicionado à camada externa.

 

para época no intervalo (training_epochs):

        para (x, y) em zip (train_X, train_Y):

            sess.run (otimizador, feed_dict = {X: x, Y: y})

 

No processo de uso real, será introduzido um conceito denominado MINIBATCH para treinamento iterativo, ou seja, uma determinada quantidade de dados é retirada a cada vez e colocada na rede para treinamento, cujos benefícios e significados serão descritos em detalhes posteriormente.

 

3.10 Modelo de teste

A parte do modelo de teste não é mais a parte central da rede neural. A saída do nó de avaliação é a mesma, e a precisão (ou taxa de erro) do modelo é obtida para descrever a qualidade do modelo. Esta parte é muito simples e não tem muita tecnologia. O código a seguir pode ser encontrado em "3-1 linear regression.py":

 

print ("cost =", sess.run (cost, feed_dict = {X: train_X, Y: train_Y}), "W =",

 sess.run (W), "b =", sess.run (b))

 

Claro, esta frase também pode ser reescrita da seguinte forma:

 

imprimir ("custo:", cost.eval ({X: trem_X, Y: trem_Y}))

 

3.11 Modelo de uso

O modelo de uso também é semelhante ao modelo de teste, exceto que o nó do valor da perda é substituído pelo nó da saída. Também é apresentado no exemplo "3-1 linear regression.py".

O que quero dizer aqui é que o modelo gerado geralmente é salvo e, em seguida, o modelo existente é carregado para uso real. O carregamento e a leitura do modelo serão introduzidos em capítulos posteriores.

quarto,

Acho que você gosta

Origin blog.csdn.net/sunshine04/article/details/106643840
Recomendado
Clasificación