Categorias
Biblioteca Big Data Linguagem de Programação

Principais Linguagens de Programação e Seus Usos

O cenário das linguagens de programação é valioso e está em expansão, o que pode dificultar o foco em apenas uma para sua carreira. Destacamos algumas das linguagens mais populares que são modernas, amplamente utilizadas e vêm com muitos pacotes ou bibliotecas que ajudarão na produtividade e eficiência de seu trabalho.

A única maneira de aprender uma nova linguagem de programação é escrevendo programas nela.” Dennis Ritchie.

Todos estão tentando entrar no cenário do desenvolvimento de aplicativos, pois oferece algumas das carreiras mais bem pagas, como Desenvolvimento Web, Ciência de Dados, Inteligência Artificial e muito mais.

Mas antes de iniciar uma carreira e criar seu primeiro aplicativo, você precisa escolher uma entre as mais de 700 linguagens de programação disponíveis.

Se você planeja fazer sua escolha, sugerimos algo mais moderno, amplamente usado e com muitos pacotes ou bibliotecas.

Mas não se preocupe, a lista a seguir tornará essa escolha o mais fácil possível para você ao analisar algumas linguagens de programação populares e seus usos.

1. Python — Inteligência Artificial e Aprendizado de Máquina

  • Nível: Iniciante.
  • Frameworks populares: Django, Flask.
  • Plataforma: Web, Desktop.
  • Popularidade: nº 1 no índice de popularidade do PYPL de março de 2021, nº 3  no índice Tiobe de março de 2021, querido por 66,7% dos desenvolvedores do StackExchange em 2020 e mais desejado por 30% do que qualquer outra linguagem.

Desenvolvido por Guido van Rossum na década de 1990, o Python multifuncional de alto nível cresceu extremamente rápido ao longo dos anos para se tornar uma das linguagens de programação mais populares atualmente.

E a principal razão para a sua popularidade é a sua facilidade para iniciantes, que permite que qualquer pessoa, mesmo sem experiência em programação, inicie no Python e comece a criar programas simples.

Mas isso não é tudo. Ele também oferece uma coleção excepcionalmente vasta de pacotes e bibliotecas que podem desempenhar um papel fundamental na redução do ETA para seus projetos, juntamente com uma forte comunidade de desenvolvedores com ideias semelhantes.

Para que serve:

Embora o Python possa ser usado para construir praticamente qualquer coisa, ele realmente se destaca quando se trata de trabalhar em tecnologias como Inteligência Artificial, Machine Learning e Data Analytics. Python também se mostra útil para desenvolvimento web, criação de aplicativos corporativos e GUIs para aplicativos .

Para aprofundar: 

 

2. JavaScript — Desenvolvimento Web Interativo Rico

  • Nível: Iniciante;
  • Frameworks populares: Node.js , Angular, React.js, Vue, Meteor;
  • Plataforma: Web, Desktop, script de front-end;
  • Popularidade: 3º no Índice de popularidade do PYPL de março de 2021, 7º no Índice Tiobe de março de 2021, querido por 58,3% dos desenvolvedores do StackExchange em 2020 e o mais desejado do que qualquer outra linguagem por 18,5%.

JavaScript foi uma das principais linguagens de programação ao lado de HTML e CSS que ajudaram a construir a internet. Essa linguagem foi criada em 1995 pela Netscape, a empresa que lançou o famoso navegador Netscape Navigator, para eliminar a grosseria das páginas estáticas e adicionar uma pitada de comportamento dinâmico a elas.

Hoje, o JavaScript tornou-se uma linguagem de programação multiparadigma de alto nível  que serve como a principal linguagem de programação front-end do mundo para a web, lidando com todas as interações oferecidas pelas páginas da web, como popups, alertas, eventos e muito mais.

Para que serve:

JavaScript é a opção perfeita se você deseja que seu aplicativo seja executado em vários dispositivos, como smartphones, nuvem, contêineres, microcontroladores e em centenas de navegadores. Para as cargas de trabalho do lado do servidor, existe o Node.js, um runtime JavaScript comprovado que está sendo usado por milhares de empresas atualmente.

Para aprofundar: 

 

3. Java – Desenvolvimento de Aplicativos Corporativos

  • Nível: Intermediário;
  • Frameworks populares: Spring, Hibernate, Strut;
  • Plataforma: Web, Mobile, Desktop;
  • Popularidade: 2º no Índice de Popularidade do PYPL de março de 2021, 2º no Índice Tiobe de março de 2021, querido por 44,1% dos desenvolvedores do StackExchange em 2020.

Java continua sendo a linguagem de programação para a construção de aplicativos de nível empresarial há mais de 20 anos.

Criada por James Gosling da Sun Microsystems em 1995, a linguagem de programação orientada a objetos Java tem servido como uma ferramenta segura, confiável e escalável para desenvolvedores desde então.

Alguns dos recursos oferecidos pelo Java que o tornam mais preferível do que várias outras linguagens de programação são seus recursos de coleta de resíduos, compatibilidade com versões anteriores, independência de plataforma via JVM, portabilidade e alto desempenho.

A popularidade do Java pode ser vista claramente entre os membros da Fortune 500, pois 90% deles usam Java para gerenciar seus negócios com eficiência.

Para que serve:

Além de ser usado para desenvolver aplicativos de negócios robustos, o Java também tem sido amplamente usado no Android, tornando-se um pré-requisito para desenvolvedores Android. Java também permite que os desenvolvedores criem aplicativos para uma variedade de setores, como bancos, comércio eletrônico, bem como aplicativos para computação distribuída.

Para aprofundar: 

 

4. R — Análise de Dados

  • Nível: Intermediário;
  • Estúdio Popular: Estúdio R;
  • Plataforma: Principalmente desktop;
  • Popularidade: 7º no Índice de Popularidade do PYPL de março de 2021.

Se você faz algum tipo de análise de dados ou trabalha em projetos de Machine Learning, é provável que já tenha ouvido falar sobre R. A linguagem de programação R foi lançada ao público pela primeira vez em 1993 por seus criadores Ross Ihaka e Robert Gentleman como uma implementação da linguagem de programação S, com foco especial em computação estatística e modelagem gráfica.

Ao longo dos anos, o R se tornou uma das melhores linguagens de programação para projetos que exigem extensa análise de dados, modelagem gráfica de dados, análise espacial e de séries temporais.

O R também oferece grande extensibilidade por meio de suas funções e extensões que oferecem várias técnicas e recursos especializados para desenvolvedores. Essa linguagem também funciona consideravelmente bem com código de outras linguagens de programação, como C, C++, Python, Java e .NET.

Para que serve:

Além de alguns dos usos mencionados acima, o R pode ser usado para análise de comportamento, ciência de dados e projetos de aprendizado de máquina que envolvem classificação, clustering e muito mais.

Para aprofundar: 

 

5. C/C++ — Sistemas Operacionais e Ferramentas do Sistema

  • Nível: C –  Intermediário a Avançado, C++ Iniciante a Intermediário;
  • Estruturas populares: MFC, .Net, Qt, KDE, GNOME;
  • Plataforma: Móvel, Desktop, Incorporado.

Acredite ou não, as linguagens de programação C/C++ estavam na moda no final do século 20. Por quê?

Porque C e  C++ são linguagens de programação de nível muito baixo, oferecendo desempenho extremamente rápido, e é por isso que eles foram e ainda são usados ​​para desenvolver sistemas operacionais, sistemas de arquivos e outros aplicativos de nível de sistema.

Enquanto o C foi lançado nos anos 70 por Dennis Ritchie, o C++, uma extensão para C com classes e muitas outras adições, como recursos orientados a objetos, foi lançado posteriormente por Bjarne Stroustrup em meados dos anos 80. 

Mesmo depois de quase 50 anos, ambas as linguagens de programação ainda são usadas para criar aplicações estáveis ​​e também algumas das mais rápidas de todos os tempos.

Para que serve:

Como C e C++ oferecem acesso total ao hardware subjacente, eles têm sido usados ​​para criar uma ampla variedade de aplicativos e plataformas, como aplicativos de sistema, sistemas em tempo real, IoT, sistemas embarcados, jogos, nuvem, contêineres e muito mais.

Para aprofundar: 

 

6. Golang – Programação do lado do servidor

  • Nível: Iniciante a intermediário;
  • Estrutura Popular: Revel, Beego;
  • Plataforma: Multiplataforma, principalmente desktop;
  • Popularidade: querido por 62,3% dos desenvolvedores do StackExchange em 2020 e desejado mais do que qualquer outra linguagem por 17,9%.

Go, ou Golang, é uma linguagem de programação compilada desenvolvida pelo gigante das buscas Google. Criado em 2009, o Golang é um esforço dos designers do Google para eliminar todas as falhas nos idiomas usados ​​em toda a organização e manter intactos os melhores recursos.

Golang é rápido e tem uma sintaxe simples, permitindo que qualquer pessoa aprenda a linguagem de programação. Ele também vem com suporte multiplataforma, tornando o uso fácil e eficiente.

Essa linguagem afirma oferecer uma combinação de alto desempenho como C/C++, simplicidade e usabilidade como Python, além de manipulação eficiente de simultaneidade como Java.

Para que serve:

Go é usado principalmente em tecnologias de back-end, serviços em nuvem, redes distribuídas, IoT, mas também tem sido usado para criar utilitários de console, aplicativos GUI e aplicativos da web.

Para aprofundar: 

 

7. C# — Desenvolvimento de aplicativos e Web usando .NET

  • Nível: Intermediário;
  • Estruturas populares: .NET, Xamarin;
  • Plataforma: multiplataforma, incluindo aplicativos de software móveis e corporativos;
  • Popularidade: 4º no Índice de popularidade do PYPL de março de 2021, 5º no Índice Tiobe de março de 2021, querido por 59,7% dos desenvolvedores do StackExchange em 2020.

C# foi a abordagem da Microsoft para desenvolver uma linguagem de programação semelhante ao C orientado a objetos como parte de sua iniciativa .NET. A linguagem de programação multiparadigma de propósito geral foi revelada em 2000 por Anders Hejlsberg e tem uma sintaxe semelhante a C, C++ e Java. 

Este foi um grande ponto positivo para os desenvolvedores que estavam familiarizados com qualquer uma dessas linguagens. Ele também oferecia compilação e execução relativamente mais rápidas, além de escalabilidade perfeita.

C# foi projetado tendo em mente o ecossistema .NET, que permite aos desenvolvedores acessar uma variedade de bibliotecas e frameworks oferecidos pela Microsoft. E com a integração com o Windows, o C# se torna extremamente fácil de usar, perfeito até mesmo para desenvolver aplicativos baseados no Windows.

Para que serve:

Os desenvolvedores podem usar C# para uma variedade de projetos, incluindo desenvolvimento de jogos, programação do lado do servidor, desenvolvimento da Web, criação de formulários Web, aplicativos móveis e muito mais. C# também tem sido usado para desenvolver aplicativos para a plataforma Windows, especificamente Windows 8 e 10.

Para aprofundar: 

 

8. PHP — Desenvolvimento Web

  • Nível: Iniciante;
  • Frameworks populares: CakePHP, Larawell, Symfony, Phalcon;
  • Plataforma: Multiplataforma (desktop, mobile, web) Scripting web de back-end;
  • Popularidade: 6º no Índice de popularidade do PYPL de março de 2021 e 8º no Índice Tiobe de março de 2021.

Assim como o Python de Guido van Rossum, o PHP também se concretizou como um projeto paralelo de Rasmus Lerdorf, com o desenvolvimento inicial remontando ao ano de 1994.

A versão do PHP de Rasmus foi originalmente destinada a ajudá-lo a manter sua página pessoal, mas ao longo dos anos, o projeto evoluiu para suportar formulários e bancos de dados da web.

Hoje, o PHP tornou-se uma linguagem de script de uso geral que está sendo usada em todo o mundo, principalmente para desenvolvimento web. É rápido, simples e independente de plataforma, juntamente com uma grande comunidade de software de código aberto.

Para que serve:

Um grande número de empresas está usando PHP hoje para criar ferramentas como CMS (Content Management Systems), plataformas de comércio eletrônico e aplicativos da web. O PHP também torna extremamente fácil criar páginas da web rapidamente.

9. SQL — Gerenciamento de dados

  • Nível: Iniciante;
  • Plataforma: gerenciamento de banco de dados backend;
  • Popularidade: 10º no Tiobe Index em março de 2021, querido por 56,6% dos desenvolvedores do StackExchange em 2020.

SQL, abreviação de Structured Query Language, é provavelmente uma das linguagens de programação mais importantes nesta lista.

Projetada por Donald D. Chamberlin e Raymond F. Boyce em 1974, a linguagem de programação de propósito específico tem desempenhado um papel fundamental ao permitir que os desenvolvedores criem e gerenciem tabelas e bancos de dados para armazenar dados relacionais em centenas de milhares de campos de dados.

Sem o SQL, as organizações teriam que confiar em métodos mais antigos e possivelmente mais lentos de armazenamento e acesso a grandes quantidades de dados. Com essa linguagem, muitas dessas tarefas podem ser feitas em segundos.

Ao longo dos anos, o SQL ajudou a gerar um grande número de RDBMS (Relational Database Management Systems) que oferecem muito mais do que apenas a criação de tabelas e bancos de dados.

Para que serve:

Praticamente todos os outros projetos ou indústrias que precisam lidar com grandes quantidades de dados armazenados em tabelas ou bancos de dados usam SQL por meio de um RDBMS.

Para aprofundar: 

 

10. Swift — Para desenvolvimento de aplicativos móveis no iOS

  • Nível: Iniciante;
  • Estruturas populares: Alamofire, RxSwift, Snapkit;
  • Plataforma: Mobile (aplicativos Apple iOS, especificamente);
  • Popularidade: 9º no Índice de popularidade do PYPL de março de 2021, querido por 59,5% dos desenvolvedores do StackExchange em 2020.

O controle total da Apple sobre seu hardware e software permitiu que ela oferecesse experiências suaves e consistentes em toda a sua gama de dispositivos. E é aí que entra o Swift.

Swift é a própria linguagem de programação da Apple que foi lançada em 2014 como um substituto para sua linguagem de programação Objective-C. É uma linguagem de programação multiparadigma de propósito geral extremamente eficiente e projetada para melhorar a produtividade do desenvolvedor.

Swift é uma linguagem de programação moderna (a mais nova nesta lista), rápida, poderosa e oferece total interoperabilidade com Objective-C. Ao longo dos anos, o Swift recebeu inúmeras atualizações que o ajudaram a ganhar popularidade significativa entre as plataformas iOS, macOS, watchOS e tvOS da Apple.

Para que serve:

Emparelhado com a estrutura Cocoa e Cocoa Touch da Apple, o Swift pode ser usado para criar aplicativos para praticamente todos os dispositivos Apple, como iPhones, iPads, Mac, Watch e outros dispositivos.

Para aprofundar:
Conclusão

Cada linguagem de programação tem seu próprio conjunto de benefícios e, de todas as entradas, você pode inserir o campo de sua escolha.

Dominar o Python pode ajudar você a conseguir um dos 3 cargos mais bem pagos do setor. Com o Python, você pode se candidatar a Engenheiro(a) de Software, Engenheiro(a) DevOps, Cientista de Dados e pode até garantir cargos nas empresas mais renomadas com um pacote atraente.

Você pode simplesmente optar por Quantitative Analyst, Data Visualization, Expert, Business Intelligence Expert e Data Analyst with R. Em relação ao JavaScript, há uma grande demanda por desenvolvedores nessa linguagem.

Mas não há como superar a eficiência do C/C++ quando se trata de construir ferramentas de sistema e sistemas operacionais, pois continua a ocupar o primeiro lugar no índice de qualidade de software da TIOBE. 

O SQL continua sendo uma das melhores linguagens de programação para mexer em grandes bancos de dados, enquanto o C# se mostra perfeito para o Windows. Swift também tem visto um aumento na popularidade entre os desenvolvedores que procuram construir para o hardware da Apple. Quanto ao PHP e Go continuam mantendo uma posição respeitável na indústria.

Então, das 10 linguagens de programação, depende somente de você decidir qual adequa-se melhor à sua carreira. Logo, escolha sabiamente!

Esperamos ter ajudado com esta escolha. Continuem acompanhando nossas postagens por aqui!

Matéria traduzida de Claire D. Costa, escritora e estrategista da Digitalogy LLC em 19 de janeiro de 2022.

Categorias
Biblioteca Ciência de Dados Machine Learning Python

Tutorial PyTorch: um guia rápido para você entender agora os fundamentos do PyTorch

O Python está bem estabelecido como a linguagem ideal para ciência de dados e aprendizado de máquina, e isso se deve em parte à biblioteca de ML de código aberto PyTorch.

A combinação do PyTorch com ferramentas poderosas de construção de rede neural profunda e fáceis de uso, torna-o uma escolha popular entre cientistas de dados. À medida que sua popularidade cresce, mais e mais empresas estão mudando do TensorFlow para o PyTorch, tornando-se agora o melhor momento para começar a usar o PyTorch.

Hoje, vamos te ajudar a entender o que torna o PyTorch tão popular, alguns fundamentos do uso dessa biblioteca e ajudá-lo a fazer seus primeiros modelos computacionais.

 

O que é o PyTorch?

O PyTorch é uma biblioteca Python de aprendizado de máquina de código aberto usada para implementações de aprendizado profundo, como visão computacional (usando TorchVision) e processamento de linguagem natural. Essa biblioteca foi desenvolvida pelo laboratório de pesquisa de IA do Facebook (FAIR) em 2016 e, desde então, é adotada nos campos da ciência de dados e ML.

O PyTorch torna o aprendizado de máquina intuitivo para aqueles que já estão familiarizados com Python e tem ótimos recursos como suporte OOP e gráficos de computação dinâmica.

Junto com a construção de redes neurais profundas, o PyTorch também é ótimo para cálculos matemáticos complexos por causa de sua aceleração de GPU. Esse recurso permite que o PyTorch use a GPU do seu computador para acelerar enormemente os cálculos.

Essa combinação de recursos exclusivos e a simplicidade incomparável do PyTorch o torna uma das bibliotecas de aprendizado profundo mais populares, competindo apenas com o TensorFlow pelo primeiro lugar.

 

Por que usar o PyTorch?

Antes do PyTorch, os desenvolvedores usavam cálculos avançados para encontrar as relações entre erros retro-propagados e peso do nó. Redes neurais mais profundas exigiam operações cada vez mais complicadas, o que restringia o aprendizado de máquina em escala e acessibilidade.

Agora, podemos usar bibliotecas de ML para completar automaticamente todo esse cálculo! As bibliotecas de ML podem computar redes de qualquer tamanho ou formato em questão de segundos, permitindo que mais desenvolvedores criem redes maiores e melhores.

O PyTorch leva essa acessibilidade um passo adiante, comportando-se como o Python padrão. Em vez de aprender uma nova sintaxe, você pode usar o conhecimento existente de Python para começar rapidamente. Além disso, você pode usar bibliotecas Python adicionais com PyTorch, como depuradores populares como o PyCharm.

 

PyTorch vs. TensorFlow

A principal diferença entre PyTorch e TensorFlow é a escolha entre simplicidade e desempenho: o PyTorch é mais fácil de aprender (especialmente para programadores Python), enquanto o TensorFlow tem uma curva de aprendizado, mas tem um desempenho melhor e é mais usado.

  • Popularidade: Atualmente, o TensorFlow é a ferramenta ideal para profissionais e pesquisadores do setor porque foi lançado 1 ano antes do PyTorch. No entanto, a taxa de usuários do PyTorch está crescendo mais rápido do que a do TensorFlow, sugerindo que o PyTorch pode em breve ser o mais popular.

  • Paralelismo de dados: O PyTorch inclui paralelismo de dados declarativo, em outras palavras, ele distribui automaticamente a carga de trabalho do processamento de dados em diferentes GPUs para acelerar o desempenho. O TensorFlow tem paralelismo, mas exige que você atribua o trabalho manualmente, o que costuma ser demorado e menos eficiente.

  • Gráficos dinâmicos vs. estáticos: PyTorch tem gráficos dinâmicos por padrão que respondem a novos dados imediatamente. O TensorFlow tem suporte limitado para gráficos dinâmicos usando o TensorFlow Fold, mas usa principalmente gráficos estáticos.

  • Integrações: PyTorch é bom para usar em projetos na AWS por causa de sua estreita conexão por meio do TorchServe. O TensorFlow está bem integrado com o Google Cloud e é adequado para aplicativos móveis devido ao uso da API Swift.

  • Visualização: O TensorFlow tem ferramentas de visualização mais robustas e oferece um controle mais preciso sobre as configurações do gráfico. A ferramenta de visualização Visdom da PyTorch ou outras bibliotecas de plotagem padrão, como matplotlib, não são tão completas quanto o TensorFlow, mas são mais fáceis de aprender.

 

Fundamentos do PyTorch

Tensores

Os tensores PyTorch são variáveis indexadas (arrays) multidimensionais usadas como base para todas as operações avançadas. Ao contrário dos tipos numéricos padrão, os tensores podem ser atribuídos para usar sua CPU ou GPU para acelerar as operações.

Eles são semelhantes a uma matriz NumPy n-dimensional e podem até ser convertidos em uma matriz NumPy em apenas uma única linha.

Tensores vêm em 5 tipos:

  • FloatTensor: 32-bit float
  • DoubleTensor: 64-bit float
  • HalfTensor: 16-bit float
  • IntTensor: 32-bit int
  • LongTensor: 64-bit int

Como acontece com todos os tipos numéricos, você deseja usar o menor tipo que atenda às suas necessidades para economizar memória. O PyTorch usa  FloatTensor como o tipo padrão para todos os tensores, mas você pode mudar isso usando:

torch.set_default_tensor_type(t)                           

Para inicializar dois FloatTensors:

import torch
# initializing tensors
a = torch.tensor(2)
b = torch.tensor(1)

Os tensores podem ser usados como outros tipos numéricos em operações matemáticas simples.    

# addition
    print(a+b)
    # subtraction
    print(b-a)
    # multiplication
    print(a*b)
    # division
    print(a/b)

Você também pode mover tensores para serem manipulados pela GPU usando cuda.

if torch.cuda.is_available():
x = x.cuda()
y = y.cuda()
x + y

Como tensores são matrizes em PyTorch, você pode definir tensores para representar uma tabela de números:

ones_tensor = torch.ones((2, 2)) # tensor containing all ones
rand_tensor = torch.rand((2, 2)) # tensor containing random values

 

Aqui, estamos especificando que nosso tensor deve ser um quadrado 2×2. O quadrado é preenchido com todos os 1 ao usar a função ones() ou números aleatórios ao usar a função rand().

Redes neurais

PyTorch é comumente usado para construir redes neurais devido aos seus modelos de classificação excepcionais, como classificação de imagem ou redes neurais convolucionais (CNN).

As redes neurais são camadas de nós de dados conectados e ponderados. Cada camada permite que o modelo identifique a qual classificação os dados de entrada correspondem.

As redes neurais são tão boas quanto seu treinamento e, portanto, precisam de grandes conjuntos de dados e estruturas GAN, que geram dados de treinamento mais desafiadores com base naqueles já dominados pelo modelo.

O PyTorch define redes neurais usando o pacote torch.nn, que contém um conjunto de módulos para representar cada camada de uma rede.

Cada módulo recebe tensores de entrada e calcula os tensores de saída, que trabalham juntos para criar a rede. O pacote torch.nn também define funções de perda que usamos para treinar redes neurais.

As etapas para construir uma rede neural são:

  • Construção: Crie camadas de rede neural, configure parâmetros, estabeleça pesos e tendências.
  • Propagação direta: Calcule a saída prevista usando seus parâmetros. Meça o erro comparando a saída prevista e a real.
  • Retropropagação: Depois de encontrar o erro, tire a derivada da função de erro em termos dos parâmetros de nossa rede neural. A propagação para trás nos permite atualizar nossos parâmetros de peso.
  • Otimização iterativa: Minimize erros usando otimizadores que atualizam parâmetros por meio de iteração usando gradiente descendente.

Aqui está um exemplo de uma rede neural em PyTorch:

import torch
import torch.nn as nn
import torch.nn.functional as F
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
# 1 input image channel, 6 output channels, 3x3 square convolution
# kernel
self.conv1 = nn.Conv2d(1, 6, 3)
self.conv2 = nn.Conv2d(6, 16, 3)
# an affine operation: y = Wx + b
self.fc1 = nn.Linear(16 * 6 * 6, 120) # 6*6 from image dimension
self.fc2 = nn.Linear(120, 84)
self.fc3 = nn.Linear(84, 10)
def forward(self, x):
# Max pooling over a (2, 2) window
x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2))
# If the size is a square you can only specify a single number
x = F.max_pool2d(F.relu(self.conv2(x)), 2)
x = x.view(-1, self.num_flat_features(x))

x = F.relu(self.fc1(x))
x = F.relu(self.fc2(x))
x = self.fc3(x)
return x
def num_flat_features(self, x):
size = x.size()[1:] # all dimensions except the batch dimension
num_features = 1
for s in size:
num_features *= s
return num_features

net = Net()
print(net)

O nn.module designa que esta será uma rede neural e então a definimos com duas camadas conv2d, que realizam uma convolução 2D, e 3 camadas lineares, que realizam transformações lineares.

A seguir, definimos um método direto para descrever como fazer a propagação direta. Não precisamos definir um método de propagação para trás porque PyTorch inclui uma função backwards() por padrão.

Não se preocupe se isso parece confuso agora, depois vamos cobrir implementações mais simples do PyTorch neste tutorial.

Autograd

Autograd é um pacote PyTorch usado para calcular derivadas essenciais para operações de rede neural. Essas derivadas são chamadas de gradientes. Durante uma passagem para frente, o autograd registra todas as operações em um tensor habilitado para gradiente e cria um gráfico acíclico para encontrar a relação entre o tensor e todas as operações. Essa coleção de operações é chamada de diferenciação automática.

As folhas deste gráfico são tensores de entrada e as raízes são tensores de saída. O Autograd calcula o gradiente traçando o gráfico da raiz à folha e multiplicando cada gradiente usando a regra da cadeia.

Depois de calcular o gradiente, o valor da derivada é preenchido automaticamente como um atributo grad do tensor.

import torch
# pytorch tensor
x = torch.tensor(3.5, requires_grad=True)
# y is defined as a function of x

y = (x-1) * (x-2) * (x-3)
# work out gradients
y.backward()

Por padrão, requires_grad é definido como false e o PyTorch não rastreia gradientes. Especificar requires_grad como True durante a inicialização fará o PyTorch rastrear gradientes para este tensor em particular sempre que realizarmos alguma operação nele.

Este código olha para y e vê que ele veio de (x-1) * (x-2) * (x-3) e calcula automaticamente o gradiente dy / dx, 3x^2 – 12x + 11.

A instrução também calcula o valor numérico desse gradiente e o coloca dentro do tensor x ao lado do valor real de x, 3.5.

Juntos, o gradiente é 3 * (3.5 * 3.5) – 12 * (3.5) + 11 = 5.75.

                                                 Figura 01

 

 

 

 

 

 

 

 

 

Os gradientes se acumulam por padrão, o que pode influenciar o resultado se não for redefinido. Use model.zero_grad() para zerar novamente seu gráfico após cada gradiente.

 

Otimizadores

Os otimizadores permitem que você atualize os pesos e tendências dentro de um modelo para reduzir o erro. Isso permite que você edite como seu modelo funciona sem ter que refazer tudo.

Todos os otimizadores PyTorch estão contidos no pacote torch.optim, com cada esquema de otimização projetado para ser útil em situações específicas. O módulo torch.optim permite que você construa um esquema de otimização abstrato apenas passando uma lista de parâmetros. O PyTorch tem muitos otimizadores para escolher, o que significa que quase sempre há um que melhor se adapta às suas necessidades.

Por exemplo, podemos implementar o algoritmo de otimização comum, SGD (Stochastic Gradient Descent), para suavizar nossos dados.

import torch.optim as optim
params = torch.tensor([1.0, 0.0], requires_grad=True)
learning_rate = 1e-3
## SGD
optimizer = optim.SGD([params], lr=learning_rate)

Depois de atualizar o modelo, use optimizer.step() para dizer ao PyTorch para recalcular o modelo.

Sem usar otimizadores, precisaríamos atualizar manualmente os parâmetros do modelo, um por um, usando um loop:

for params in model.parameters():
params -= params.grad * learning_rate

No geral, os otimizadores economizam muito tempo, permitindo que você otimize a ponderação dos dados e altere o modelo sem refazê-lo.

 

Gráficos de computação com PyTorch

Para entender melhor o PyTorch e as redes neurais, é importante praticar com gráficos de computação. Esses gráficos são essencialmente uma versão simplificada de redes neurais com uma sequência de operações usadas para ver como a saída de um sistema é afetada pela entrada.

Em outras palavras, a entrada x é usada para encontrar y, que então é usada para encontrar a saída z.

                                                            Figura 02

 

 

 

 

 

 

 

Imagine que  y e z são calculados assim:

y = x^2

z = 2y + 3

No entanto, estamos interessados em como a saída z muda com a entrada x, então precisaremos fazer alguns cálculos:

dz/dx = (dz/dy) * (dy/dx)

dz/dx = 2.2x

dz/dx = 4x

Usando isso, podemos ver que a entrada x = 3,5 fará com que z = 14.

Saber definir cada tensor em termos dos outros (y e z em termos de x, z em termos de y, etc.) permite que o PyTorch construa uma imagem de como esses tensores estão conectados.

                                                          Figura 03

 

 

 

 

 

 

 

 

 

Esta imagem é chamada de gráfico computacional e pode nos ajudar a entender como o PyTorch funciona nos bastidores.

Usando esse gráfico, podemos ver como cada tensor será afetado por uma mudança em qualquer outro tensor. Esses relacionamentos são gradientes e são usados para atualizar uma rede neural durante o treinamento.

Esses gráficos são muito mais fáceis de fazer usando o PyTorch do que manualmente. Então, agora que entendemos o que está acontecendo nos bastidores, vamos tentar fazer esse gráfico.

import torch
# set up simple graph relating x, y and z
x = torch.tensor(3.5, requires_grad=True)
y = x*x
z = 2*y + 3
print("x: ", x)
print("y = x*x: ", y)
print("z= 2*y + 3: ", z)
# work out gradients
z.backward()
print("Working out gradients dz/dx")

# what is gradient at x = 3.5
print("Gradient at x = 3.5: ", x.grad)

Isso mostra que z = 14, exatamente como encontramos manualmente acima!

 

Mãos à obra com PyTorch: gráfico computacional de vários caminhos

Agora que você viu um gráfico computacional com um único conjunto relacional, vamos tentar um exemplo mais complexo.

Primeiro, defina dois tensores, a e b, para funcionar como nossas entradas. Certifique-se de definir requires_grad=True para que possamos fazer gradientes na linha.

import torch
# set up simple graph relating x, y and z
a = torch.tensor(3.0, requires_grad=True)
b = torch.tensor(2.0, requires_grad=True)

Em seguida, configure as relações entre nossa entrada e cada camada de nossa rede neural, x, y e z. Observe que z é definido em termos de x e y, enquanto x e y são definidos usando nossos valores de entrada a e b.

import torch
# set up simple graph relating x, y and z
a = torch.tensor(3.0, requires_grad=True)
b = torch.tensor(2.0, requires_grad=True)

x = 2*a + 3*b
y = 5*a*a + 3*b*b*b
z = 2*x + 3*y

Isso cria uma cadeia de relacionamentos que o PyTorch pode seguir para entender todos os relacionamentos entre os dados.

Agora podemos calcular o gradiente dz/da​​ seguindo o caminho de volta de z para  a.

Existem dois caminhos, um passando por x e outro por y. Você deve seguir os dois e adicionar as expressões de ambos os caminhos. Isso faz sentido porque ambos os caminhos de a a z contribuem para o valor de z.

Teríamos encontrado o mesmo resultado se tivéssemos calculado dz/da usando a regra da cadeia do cálculo.

                                               Figura 04

 

 

 

 

 

 

 

 

 

 

O primeiro caminho por x nos dá 2 * 2 e o segundo caminho por y nos dá 3 * 10a. Assim, a taxa na qual z varia com a é 4 + 30a.

Se a é 22, então dz/da​​ é 4+30∗2=64.

Podemos confirmar isso no PyTorch adicionando uma propagação para trás de z e pedindo o gradiente (ou derivado) de a.

import torch
# set up simple graph relating x, y and z
a = torch.tensor(2.0, requires_grad=True)
b = torch.tensor(1.0, requires_grad=True)
x = 2*a + 3*b
y = 5*a*a + 3*b*b*b
z = 2*x + 3*y
print("a: ", a)
print("b: ", b)
print("x: ", x)
print("y: ", y)
print("z: ", z)
# work out gradients
z.backward()
print("Working out gradient dz/da")
# what is gradient at a = 2.0
print("Gradient at a=2.0:", a.grad)

Próximos passos para o seu aprendizado

Parabéns, você concluiu seu início rápido de PyTorch e Redes Neurais! A conclusão de um gráfico computacional é uma parte essencial da compreensão de redes de aprendizado profundo.

À medida que você aprender habilidades e aplicativos avançados de aprendizado profundo, você desejará explorar:

  • Redes neurais complexas com otimização
  • Design de visualização
  • Treinamento com GANs

Vamos continuar aprendendo juntos!

Fonte: PyTorch tutorial: a quick guide for new learners

 

 

Categorias
Biblioteca Deep Learning Python

8 bibliotecas de Deep Learning mais usadas em Python

Se você se interessa por Deep Learning, dos neurônios mais simples aos mais complexos, mas não sabe qual é a melhor biblioteca para seu projeto, nós te damos uma força! Esta lista com 8 bibliotecas tem a finalidade de ajudar você na sua escolha, apresentando de maneira resumida e direta cada biblioteca. Vamos lá?!

 

1. Pytorch

O PyTorch é classificado como “Tensores e redes neurais dinâmicas em Python com forte aceleração de GPU”. Tensores são uma construção matemática usada pesadamente em física e engenharia. Um tensor de rank dois é um tipo especial de matriz; pegar o produto interno de um vetor com o tensor produz outro vetor com uma nova magnitude e uma nova direção. 

A aceleração de GPU é uma das mais modernas estruturas das Deep Neural Networks. Uma rede neural dinâmica é aquela que pode mudar de iteração para iteração, por exemplo, permitindo que um modelo PyTorch adicione e remova camadas ocultas durante o treinamento para melhorar sua precisão e generalidade. O PyTorch recria o grafo em tempo real em cada etapa de iteração. Em contraste, o TensorFlow, por padrão, cria um único grafo de fluxo de dados, otimiza o código do grafo para desempenho e depois treina o modelo.

Enquanto o  modo de execução ávido é uma opção relativamente nova no TensorFlow, é a única maneira de executar o PyTorch: chamadas de API são executadas quando invocadas, em vez de serem adicionadas a um grafo para serem executadas posteriormente.

O PyTorch integra bibliotecas de aceleração como Intel MKL e Nvidia cuDNN e NCCL (Nvidia Collective Communications Library) para maximizar a velocidade. Seus principais backend são gravados como bibliotecas independentes com uma API C99. Ao mesmo tempo, o PyTorch não é uma ligação do Python em um framework monolítico de C ++. A intenção é que ele seja profundamente integrado ao Python e permita o uso de outras bibliotecas Python.

 

2. Theano

Sem o Theano, não existiria nada perto da quantidade de bibliotecas de deep learning que temos hoje, especificamente em Python. Da mesma forma que sem o NumPy, não poderíamos ter SciPy, scikit-learn e scikit-image, o mesmo pode ser dito sobre Theano e abstrações de alto nível de aprendizagem profunda.

Basicamente, Theano é uma biblioteca Python usada para definir, otimizar e avaliar  expressões matemáticas envolvendo matrizes multidimensionais. Esta biblioteca consegue isso através de forte integração com NumPy e o uso transparente da GPU.

Embora você  possa construir redes de aprendizagem profunda em Theano, podemos pensar nesta biblioteca como blocos de construção para redes neurais, da mesma forma que o NumPy serve como os blocos de construção para a computação científica. Na verdade, a maioria das bibliotecas mencionadas nesta matéria envolve o Theano para torná-lo mais conveniente e acessível.

Embora não seja uma comparação perfeita, construir uma rede neural convolucional no Theano é como escrever uma máquina de vetores de suporte (SVM) em Python nativo com apenas uma pitada de NumPy.

 

3. Lasagne

Lasagne é uma leve e de fácil manipulação, usada para construir e treinar redes em Theano. Sua leveza não se destina a ser um invólucro pesado em torno de Theano como Keras é. Embora isso faça com que seu código seja mais detalhado, esta biblioteca o libera de quaisquer restrições, enquanto fornece blocos de construção modulares baseados em Theano.

Simplificando: Lasagne funciona como um meio-termo entre a programação de baixo nível de Theano e as abstrações de alto nível de Keras.

 

4. TensorFlow

Semelhante ao Theano, o TensorFlow é uma biblioteca de código aberto para computação numérica usando grafos de fluxo de dados, que é tudo o que uma rede neural realmente é. Originalmente desenvolvida pelos pesquisadores da equipe do Google Brain, na organização de pesquisa Machine Intelligence do Google, a biblioteca desde então é de código aberto e disponibilizada ao público.

Um benefício principal do TensorFlow (em comparação com Theano) é a  computação distribuída, especialmente entre várias GPUs, embora isso seja algo que está sendo trabalhado no Theano. É bom lembrar que desde sua 2ª versão o Tensor-Flow incorporou o Keras, trazendo uma API muito mais amigável.

 

5. Keras

Sem dúvidas, uma das bibliotecas Python de deep learning mais querida por programadores. Keras é uma biblioteca de rede neural modular que pode usar tanto Theano ou TensorFlow como um backend. A principal motivação por trás do Keras é que você deve ser capaz de experimentar rapidamente e ir da ideia ao resultado o  mais rápido possível.

Arquitetar redes em Keras parece fácil e natural. Inclui alguns dos algoritmos de última geração para otimizadores (Adam, RMSProp), normalização (BatchNorm) e camadas de ativação (PReLU, ELU, LeakyReLU).

Esta biblioteca também dá grande ênfase às Redes Neurais Convolucionais, o que é extremamente valioso do ponto de vista da visão computacional.

Mais especificamente, você pode construir facilmente redes baseadas em sequência (onde as entradas fluem linearmente pela rede) e redes baseadas em grafos (onde as entradas podem “pular” certas camadas, apenas para serem concatenadas posteriormente). Isso torna a implementação de arquiteturas de rede mais complexas, como GoogLeNet e SqueezeNet,  muito mais fácil.

 

6. mxnet

Esta biblioteca Python de Deep Learning possui o foco em redes de classificação de imagem de treinamento. Apesar de exigir um pouco mais de código para criar uma rede em mxnet, o que esta biblioteca oferece é um número incrível de ligações de linguagem (C ++, Python, R, JavaScript, etc.)

A biblioteca mxnet realmente brilha para computação distribuída, permitindo treinar sua rede em várias máquinas CPU / GPU e até mesmo em clusters AWS, Azure e YARN.

Lembre-se, é necessário um pouco mais de código para colocar um experimento em execução no mxnet (em comparação com Keras), mas se você deseja distribuir o treinamento em várias GPUs ou sistemas, o recomendável seria o mxnet.

 

7. Sklearn-theano

Há momentos em que você não precisa treinar uma Rede Neural Convolucional (RNC) de ponta a ponta. Em vez disso, você precisa tratar a RNC como um extrator de recursos. Isso é especialmente útil em situações em que você não tem dados suficientes para treinar uma RNC completa do zero. Em vez disso, basta passar suas imagens de entrada por uma arquitetura pré-treinada popular, como OverFeat, AlexNet, VGGNet ou GoogLeNet, e extrair recursos das camadas FC ou qualquer camada que você decidir usar.

Simplificando, isso é exatamente o que sklearn-theano permite que você faça. Você não pode treinar um modelo do zero com ele, mas é  fantástico para tratar redes como extratores de recursos.

 

8. Nolearn

Enquanto Keras envolve Theano e TensorFlow em uma API mais amigável, Nolearn faz o mesmo, apenas para Lasagne. Além disso, todo o código no Nolearn é compatível com o scikit-learn, o que é um grande bônus.

Uma dica é usar o Nolearn para implementação de Deep Belief Networks (DBNs).

Gostou de mais esta dica Insigth? Quais bibliotecas você incluiria na lista?

 

Fonte: Pyimagesearch e CIO.

 

Sair da versão mobile