< Return to Video

GAN CAP01 2025 VA05 APLICACAO EM PYTHON

  • 0:07 - 0:12
    Agora que você já sabe o que é
    um modelo de IA generativa,
  • 0:12 - 0:17
    nós vamos dar um mergulho
    mais profundo e começar a ver
  • 0:17 - 0:21
    como podemos implementar
    esses modelos na prática.
  • 0:21 - 0:25
    Para isso, precisamos conhecer
    a base desses modelos.
  • 0:25 - 0:27
    A base para modelos
    de IA generativas
  • 0:27 - 0:28
    são redes neurais artificiais,
  • 0:28 - 0:32
    e a base para redes neurais
    artificiais é álgebra linear.
  • 0:32 - 0:38
    Então, nesse laboratório, veremos
    uma revisão sobre a álgebra linear
  • 0:38 - 0:41
    utilizando a biblioteca
    NumPy do Python.
  • 0:41 - 0:46
    Álgebra linear, basicamente, é
    como podemos fazer operações
  • 0:46 - 0:48
    com vetores e matrizes.
  • 0:48 - 0:49
    Então, para começar
    esse laboratório,
  • 0:49 - 0:52
    a gente vai começar a relembrar
    um pouco sobre vetores
  • 0:52 - 0:56
    e ver como podemos representar
    esses vetores no Python.
  • 0:56 - 1:00
    Para isso, vamos utilizar
    a biblioteca NumPy do Python.
  • 1:00 - 1:05
    Essa biblioteca é especializada
    em cálculo numérico e álgebra linear,
  • 1:05 - 1:09
    então é a principal biblioteca
    do Python para esse fim.
  • 1:09 - 1:12
    Então, vamos começar o código
    mportando essa biblioteca
  • 1:12 - 1:14
    para dentro do código.
  • 1:14 - 1:17
    Então "import numpy as np".
  • 1:17 - 1:21
    Bom, para definir
    um vetor no NumPy,
  • 1:21 - 1:26
    eu posso utilizar o módulo
    "array" do NumPy.
  • 1:26 - 1:29
    Então, se eu criar
    um "vetor_a = np.array"
  • 1:29 - 1:32
    e passar uma lista
    de valores para ele,
  • 1:32 - 1:35
    ele vai criar
    um vetor para mim.
  • 1:35 - 1:39
    Se eu quiser criar
    um segundo vetor, "b",
  • 1:39 - 1:44
    eu também posso
    utilizar o mesmo código.
  • 1:44 - 1:47
    Então, "np.array", vou passar
    uma lista de valores
  • 1:47 - 1:55
    e será criado um array, ou um vetor,
    e associado à variável "vetor_b".
  • 1:55 - 1:59
    Nesse código aqui, vamos
    criar dois vetores, "A" e "B",
  • 1:59 - 2:01
    e vamos printar
    esses vetores.
  • 2:01 - 2:05
    Então, aqui nas respostas,
    vetor A e vetor B,
  • 2:05 - 2:08
    da forma como a gente
    criou anteriormente,
  • 2:08 - 2:10
    e as dimensões do vetor A,
  • 2:10 - 2:13
    por exemplo, o vetor B tem
    a mesma dimensão do vetor A.
  • 2:13 - 2:15
    Então, o que é a dimensão
    de um vetor?
  • 2:15 - 2:18
    São quantos elementos
    tem nesse vetor.
  • 2:18 - 2:22
    Então, esse vetor tem
    três elementos, perfeito?
  • 2:24 - 2:27
    Se eu quiser fazer a soma
    desses dois vetores,
  • 2:27 - 2:31
    eu posso simplesmente vir aqui
    e criar uma variável "soma_vetores",
  • 2:31 - 2:35
    que vai ser igual
    a "vetor_a + vetor_b".
  • 2:35 - 2:38
    E, aqui, eu vou printar
    a soma desses vetores.
  • 2:38 - 2:42
    Então, quando nós somamos dois
    vetores, qual a operação é feita?
  • 2:42 - 2:45
    Basicamente, uma soma,
    elemento a elemento,
  • 2:45 - 2:47
    então cada elemento
    do vetor A
  • 2:47 - 2:50
    vai ser somado com o mesmo
    elemento do vetor B,
  • 2:50 - 2:53
    e eu vou ter esse
    resultado aqui na soma.
  • 2:53 - 2:59
    Se eu quiser fazer uma subtração,
    da mesma forma, "vetor_a - vetor_b",
  • 2:59 - 3:03
    e o resultado é uma subtração
    elemento a elemento.
  • 3:03 - 3:07
    Então, eu posso, por exemplo, criar
    uma variável "vetor_multiplicado",
  • 3:07 - 3:13
    que vai ser igual ao vetor_a vezes
    um valor escalar, por exemplo, "2".
  • 3:13 - 3:16
    Essa multiplicação também
    será feita elemento a elemento,
  • 3:16 - 3:19
    então cada elemento do vetor A
    será multiplicado por 2,
  • 3:19 - 3:21
    e aqui a gente tem,
    no nosso código,
  • 3:21 - 3:24
    a resposta desse
    vetor multiplicado.
  • 3:24 - 3:27
    Então, 1 vezes 2,
    2 vezes 2, 3 vezes 2,
  • 3:27 - 3:31
    e a resposta aqui na variável
    vetor_multiplicado.
  • 3:31 - 3:34
    Uma outra operação muito importante, que eu posso fazer com dois
  • 3:34 - 3:37
    vetores, se chama produto escalar.
  • 3:37 - 3:41
    O produto escalar entre dois vetores é uma operação onde eu vou
  • 3:41 - 3:45
    multiplicar esses dois vetores e o resultado será um número escalar.
  • 3:46 - 3:47
    O que esse número representa?
  • 3:48 - 3:52
    Esse número representa um certo grau de similaridade entre esses dois
  • 3:52 - 3:57
    vetores, ou seja, se esses vetores estiverem apontando para uma mesma
  • 3:57 - 3:59
    direção, esse produto será maior.
  • 4:00 - 4:04
    Se esses produtos estiverem perpendiculares um com o outro, ou seja,
  • 4:04 - 4:10
    tiver um ângulo de 90 graus entre eles, esse produto escalar vai
  • 4:10 - 4:11
    retornar algo próximo de zero.
  • 4:12 - 4:16
    E se eles estiverem apontando para direções opostas, isso significa
  • 4:16 - 4:19
    que esse produto escalar terá um valor negativo.
  • 4:20 - 4:25
    Então basicamente o produto escalar é uma forma de você multiplicar
  • 4:25 - 4:29
    dois vetores e obter um escalar como resposta, e esse escalar tem um
  • 4:29 - 4:33
    certo significado, indica mais ou menos se esses dois vetores estão
  • 4:33 - 4:34
    apontando para direções parecidas.
  • 4:35 - 4:36
    Como que eu calculo isso?
  • 4:36 - 4:41
    Por trás dos panos eu estou fazendo linhas de um vetor versus colunas
  • 4:41 - 4:41
    do outro.
  • 4:42 - 4:45
    Então se for necessário, por exemplo, nesse caso a gente tem vetores
  • 4:45 - 4:52
    de mesmas dimensões, o segundo vetor vai ser transposto, nesse caso.
  • 4:52 - 4:55
    Então se eu fizer aqui o produto escalar do vetor A com o vetor
  • 4:55 - 4:58
    B, eu vou ter um número 32.
  • 4:58 - 5:05
    Esse número indica, de certa forma, se esses dois vetores estão
  • 5:05 - 5:07
    apontando para direções similares ou opostas.
  • 5:08 - 5:11
    Outro conceito muito importante quando a gente fala de álgebra linear
  • 5:11 - 5:13
    é o conceito de matrizes.
  • 5:14 - 5:18
    Então diferentemente dos vetores que têm apenas uma dimensão, as
  • 5:18 - 5:20
    matrizes podem ter duas dimensões.
  • 5:21 - 5:24
    Então as matrizes vão ter linhas e colunas.
  • 5:24 - 5:29
    Então serão parecidas como uma tabelinha, que teria linhas e colunas.
  • 5:29 - 5:34
    Então eu posso criar aqui no Python uma matriz X usando o nparray, e
  • 5:34 - 5:38
    ao invés de passar apenas uma lista de valores, eu vou passar uma
  • 5:38 - 5:45
    lista de listas de valores, onde cada lista aqui vai representar uma
  • 5:45 - 5:46
    linha dessa matriz.
  • 5:47 - 5:54
    Essa matriz tem duas linhas, essa linha e essa linha, e duas colunas,
  • 5:55 - 5:57
    essa coluna e essa coluna.
  • 5:57 - 6:00
    Então é uma matriz que tem dimensões 2 por 2.
  • 6:01 - 6:05
    A matriz Y também é uma matriz 2 por 2, porque ela tem duas
  • 6:05 - 6:07
    linhas e duas colunas.
  • 6:08 - 6:13
    Se a gente rodar esse código, a gente vai ver essas duas matrizes
  • 6:13 - 6:19
    dispostas aqui da forma como a gente criou elas, perfeito?
  • 6:20 - 6:23
    As operações que a gente pode fazer com as matrizes são muito
  • 6:23 - 6:28
    similares às operações que a gente pode fazer com os vetores.
  • 6:29 - 6:33
    Então eu posso olhar para o shape dessa matriz, vai me dar as
  • 6:33 - 6:37
    dimensões dela, então quais são as dimensões dessa matriz?
  • 6:37 - 6:40
    No vetor a gente tinha apenas uma dimensão, então a gente criou um
  • 6:40 - 6:42
    vetor de três posições.
  • 6:43 - 6:47
    Aqui eu tenho duas dimensões, eu tenho linhas e colunas, então cada
  • 6:47 - 6:50
    uma das nossas matrizes tem duas linhas e duas colunas.
  • 6:51 - 6:55
    Isso a gente consegue saber usando o atributo shape da nossa matriz.
  • 6:57 - 7:01
    Da mesma forma como vetores, como a gente fez para os nossos vetores,
  • 7:01 - 7:03
    a gente pode somar matrizes.
  • 7:03 - 7:07
    Então quando eu somo a matriz X com a matriz Y, eu estou fazendo
  • 7:07 - 7:09
    a mesma operação que a gente fez para os vetores.
  • 7:10 - 7:14
    Então eu estou somando elemento a elemento os valores das duas
  • 7:14 - 7:14
    matrizes.
  • 7:15 - 7:19
    Então se a gente fizer a soma e printar essa soma, a gente vai
  • 7:19 - 7:22
    ter o resultado que é a soma das duas matrizes elemento a elemento.
  • 7:23 - 7:26
    Da mesma forma, se a gente fizer a subtração entre essas duas
  • 7:26 - 7:33
    matrizes, eu também vou ter o resultado como sendo uma matriz
  • 7:33 - 7:38
    resultante de mesma dimensão, dois por dois, onde cada valor é a
  • 7:38 - 7:42
    subtração elemento a elemento dessas duas matrizes.
  • 7:43 - 7:48
    Por fim, eu posso multiplicar essa matriz, ou alguma matriz, por um
  • 7:48 - 7:49
    valor escalar.
  • 7:50 - 7:54
    E aí eu também terei uma resposta que vai ser a multiplicação desse
  • 7:54 - 7:58
    escalar, por exemplo o valor 3, por cada elemento dessa matriz.
  • 7:59 - 8:03
    Então o resultado também é uma matriz dois por dois, e essa matriz
  • 8:03 - 8:08
    dois por dois, cada elemento dela, ele é o resultado da multiplicação
  • 8:08 - 8:11
    desse escalar pelo valor da matriz.
  • 8:12 - 8:17
    Da mesma forma como fizemos o produto escalar para vetores, podemos
  • 8:17 - 8:21
    também aplicar para matrizes, porém com uma pequena diferença.
  • 8:22 - 8:28
    Nos vetores temos apenas uma dimensão, nas matrizes a gente tem duas
  • 8:28 - 8:28
    dimensões.
  • 8:29 - 8:34
    Então se eu criar uma matriz, por exemplo, chamada matriz A multi,
  • 8:35 - 8:41
    como uma matriz que vai ter duas linhas e três colunas, eu utilizaria
  • 8:41 - 8:43
    esse código aqui para criá-la.
  • 8:44 - 8:48
    Poderia criar também uma matriz B multi, essa matriz ao invés de ter
  • 8:48 - 8:52
    duas linhas por três colunas, vai ter três linhas por duas colunas.
  • 8:54 - 8:57
    Então se a gente rodar esse código aqui, a gente pode ver aqui as
  • 8:57 - 8:58
    nossas duas matrizes.
  • 8:59 - 9:03
    Uma tem dimensões dois por três, uma tem dimensões três por dois.
  • 9:04 - 9:08
    Para fazer o produto escalar dessas duas matrizes, eu posso utilizar
  • 9:08 - 9:13
    o mesmo código do NumPy, a mesma função, o mesmo método, np.dot
  • 9:13 - 9:18
    matriz A e matriz B, e eu vou ter o resultado dessa multiplicação.
  • 9:20 - 9:24
    Note que o resultado dessa multiplicação é uma matriz de dois por
  • 9:24 - 9:24
    dois.
  • 9:25 - 9:29
    Então existe uma regrinha para a gente fazer multiplicação matricial
  • 9:29 - 9:35
    através do produto escalar e essa multiplicação ser possível.
  • 9:36 - 9:37
    Qual seria essa regra?
  • 9:38 - 9:44
    As dimensões da minha matriz A, a quantidade de colunas dela, tem que
  • 9:44 - 9:48
    ser igual à quantidade de linhas da matriz B.
  • 9:48 - 9:50
    Então sempre que eu estiver fazendo o produto escalar entre duas
  • 9:50 - 9:55
    matrizes, a quantidade de colunas da primeira tem que ser igual à
  • 9:55 - 9:57
    quantidade de linhas da segunda.
  • 9:58 - 10:04
    E o resultado sempre será a quantidade de linhas da primeira por a
  • 10:04 - 10:06
    quantidade de colunas da segunda.
  • 10:06 - 10:10
    Então essas duas matrizes eu posso multiplicá-las, por quê?
  • 10:10 - 10:16
    Porque ela obedece o primeiro quesito, a quantidade de colunas da
  • 10:16 - 10:19
    matriz A é igual à quantidade de linhas da matriz B.
  • 10:20 - 10:26
    E o resultado dessa conta desse produto escalar vai dar a quantidade
  • 10:26 - 10:31
    de linhas da matriz A pela quantidade de colunas da matriz B, que vai
  • 10:31 - 10:32
    dar dois por dois.
  • 10:32 - 10:36
    Então se a gente pudesse fixar um pouco essa regra, você poderia
  • 10:36 - 10:41
    pensar assim, quando eu for multiplicar duas matrizes, fazer o
  • 10:41 - 10:47
    produto escalar delas, os valores de dentro, ou seja, a quantidade de
  • 10:47 - 10:50
    colunas da primeira e de linhas da segunda, tem que ser iguais.
  • 10:51 - 10:54
    E o resultado vai dar os dois de fora, ou seja, a quantidade de
  • 10:54 - 10:58
    linhas da primeira e a quantidade de colunas da segunda.
  • 10:58 - 11:02
    Então seguindo aqui, vamos passar agora por outras operações
  • 11:02 - 11:05
    relevantes no nosso contexto de álgebra linear.
  • 11:06 - 11:10
    Um conceito mega importante, uma operação mega importante é inverter
  • 11:10 - 11:11
    uma matriz.
  • 11:11 - 11:16
    Para inverter uma matriz, qualquer matriz tem que ser quadrada, como
  • 11:16 - 11:23
    a que a gente está criando aqui, matriz quadrada igual NP-array, uma
  • 11:23 - 11:24
    matriz de dois por dois.
  • 11:24 - 11:26
    Então o que é uma matriz quadrada?
  • 11:26 - 11:29
    Mesma quantidade de linhas é a mesma quantidade de colunas.
  • 11:29 - 11:31
    E ela precisa ser não singular.
  • 11:31 - 11:36
    Ser não singular significa que o determinante dela não pode ser zero.
  • 11:37 - 11:43
    Então basicamente inverter uma matriz, no Python, a gente pode fazer
  • 11:43 - 11:47
    utilizando o módulo do NumPy de linear algebra.
  • 11:47 - 11:54
    Então np.linalg, e do linalg eu vou usar o método inv, de inverter.
  • 11:54 - 11:59
    Então vou criar uma variável matriz inversa e vou atribuir para ela a
  • 11:59 - 12:02
    inversa, o cálculo da inversa dessa matriz quadrada que a gente
  • 12:02 - 12:02
    criou.
  • 12:03 - 12:06
    Quando a gente inverte uma matriz, o que que significa?
  • 12:07 - 12:11
    É como se eu estivesse fazendo um cálculo análogo a um sobre um
  • 12:11 - 12:12
    determinado número.
  • 12:12 - 12:13
    Esse é o inverso dela.
  • 12:14 - 12:18
    Então um sobre essa matriz é a mesma coisa que a inversa dessa
  • 12:18 - 12:19
    matriz, perfeito?
  • 12:20 - 12:24
    Então se a gente rodar esse código, a gente vai ver aqui a matriz
  • 12:24 - 12:27
    quadrada que a gente tinha criado e aqui é a inversa dessa matriz
  • 12:27 - 12:28
    quadrada.
  • 12:28 - 12:32
    Ela é uma matriz quadrada, então ela pode ser invertível e ela é não
  • 12:32 - 12:35
    singular, então ela pode ser invertível também.
  • 12:35 - 12:38
    Tem que obedecer esses dois critérios aí, perfeito?
  • 12:39 - 12:45
    E aí a gente pode depois no nosso código verificar essa inversão
  • 12:45 - 12:45
    dessa matriz.
  • 12:46 - 12:47
    Como que eu poderia fazer isso?
  • 12:47 - 12:51
    Se eu fizer o produto escalar da matriz original com a sua inversa,
  • 12:51 - 12:56
    eu tenho que ter como resultado a matriz identidade, ou seja, a
  • 12:56 - 13:00
    matriz identidade no contexto de álgebra é como se fosse o valor 1.
  • 13:00 - 13:04
    Então é como se eu multiplicasse a matriz por 1 sobre a matriz, eu
  • 13:04 - 13:05
    vou ter 1 como resposta.
  • 13:05 - 13:07
    É isso que quer dizer nesse código aqui.
  • 13:10 - 13:14
    Seguindo no nosso código, como a gente falou de determinante da
  • 13:14 - 13:18
    matriz, a gente pode verificar aqui como calcular o determinante de
  • 13:18 - 13:19
    uma matriz.
  • 13:19 - 13:24
    Então vou criar aqui uma matriz para a gente calcular o determinante
  • 13:24 - 13:28
    com base nela e eu vou utilizar o mesmo módulo de linear álgebra do
  • 13:28 - 13:33
    NumPy, só que eu vou usar agora o método det, de determinante.
  • 13:34 - 13:36
    Então qual é o determinante dessa matriz?
  • 13:36 - 13:39
    Se a gente rodar esse código, a gente vai ver que o determinante
  • 13:39 - 13:46
    dessa matriz é 4.99. Se eu tiver uma matriz singular, o que significa
  • 13:46 - 13:47
    uma matriz singular?
  • 13:47 - 13:50
    Significa que é uma matriz cujo determinante é 0.
  • 13:51 - 13:54
    Se o determinante dela é 0, logo eu não consigo inverter essa matriz.
  • 13:55 - 13:59
    Então essa matriz singular que a gente criou mais embaixo do nosso
  • 13:59 - 14:04
    código é uma matriz que não teria inversa, não seria possível
  • 14:04 - 14:06
    calcular a inversa dessa matriz.
  • 14:08 - 14:12
    Outra operação extremamente importante é a norma de um vetor.
  • 14:12 - 14:18
    Então a norma de um vetor é como a gente calcula, de certa forma,
  • 14:18 - 14:19
    o tamanho desse vetor.
  • 14:20 - 14:25
    Então a norma desse vetor, existem várias formas de se calcular a
  • 14:25 - 14:25
    norma de um vetor.
  • 14:26 - 14:31
    A mais conhecida e a mais utilizada é a norma L2, que é também
  • 14:31 - 14:33
    conhecida como a norma euclidiana.
  • 14:33 - 14:35
    Então ela é dada por essa continha aqui.
  • 14:35 - 14:41
    Então vai ser a raiz quadrada da soma dos valores dessa matriz, desse
  • 14:41 - 14:43
    vetor, ao quadrado.
  • 14:44 - 14:47
    Então a raiz quadrada da soma dos quadrados dos valores dessa matriz.
  • 14:48 - 14:53
    Então se a gente tiver aqui uma matriz 3 e menos 4, a norma
  • 14:53 - 14:56
    euclidiana dessa matriz vai ser 5.
  • 14:56 - 14:58
    Como que eu chego nesse cálculo?
  • 14:58 - 15:03
    Fazendo a raiz quadrada da soma dos quadrados dos valores desse
  • 15:03 - 15:03
    vetor.
  • 15:05 - 15:10
    Bom, então para calcular a norma euclidiana, eu posso usar o módulo
  • 15:10 - 15:16
    de álgebra linear do NumPy, utilizando o método norm, certo?
  • 15:16 - 15:18
    Eu vou ter a norma euclidiana.
  • 15:19 - 15:23
    Existem também outras formas de norma, de normas que a gente pode
  • 15:23 - 15:23
    utilizar.
  • 15:24 - 15:26
    Por exemplo, a norma de Frobenius.
  • 15:26 - 15:30
    Não é uma norma muito utilizada, mas apenas para a gente conseguir
  • 15:30 - 15:35
    visualizar que existe um parâmetro, eu posso parametrizar o tipo de
  • 15:35 - 15:39
    norma que eu quero na função, no método norm do NumPy.
  • 15:40 - 15:45
    Então por padrão a gente utiliza, essa biblioteca já utiliza a norma
  • 15:45 - 15:49
    euclidiana, mas eu poderia definir outra dentre as normas possíveis e
  • 15:49 - 15:53
    para saber as normas possíveis a gente pode olhar na documentação
  • 15:53 - 15:55
    dessa biblioteca, perfeito?
  • 15:57 - 16:05
    Outro cálculo muito interessante, muito importante para criar IAs e
  • 16:05 - 16:09
    para a álgebra linear como um todo, é você calcular distâncias entre
  • 16:09 - 16:09
    vetores.
  • 16:10 - 16:13
    Então eu posso ter dois vetores e eu quero calcular o quão distantes
  • 16:13 - 16:14
    esses vetores são.
  • 16:16 - 16:21
    Para fazer a distância entre vetores, eu posso simplesmente calcular
  • 16:21 - 16:22
    a diferença entre eles.
  • 16:22 - 16:25
    Então se eu calcular a diferença entre eles eu vou ter um menos o
  • 16:25 - 16:25
    outro.
  • 16:25 - 16:29
    Eu vou ter a distância de cada vetor em cada dimensão.
  • 16:31 - 16:35
    Quando eu quero criar, utilizar uma distância euclidiana, o que é a
  • 16:35 - 16:36
    distância euclidiana?
  • 16:36 - 16:41
    É uma distância baseada na norma euclidiana, então vai ser a norma
  • 16:41 - 16:45
    L2, a norma euclidiana da diferença entre os dois vetores.
  • 16:46 - 16:51
    Então eu vou fazer a raiz quadrada das diferenças elevado ao
  • 16:51 - 16:52
    quadrado, essa que é a conta.
  • 16:53 - 16:59
    No Python, eu poderia simplesmente fazer a norma das diferenças dos
  • 16:59 - 17:00
    vetores que a gente calculou aqui.
  • 17:01 - 17:05
    E aqui eu coloco a ordem 2, a ordem já é presumida que é
  • 17:05 - 17:08
    o 2, por default, e aí a gente tem aqui o que a gente
  • 17:08 - 17:12
    chama de distância euclidiana entre dois vetores, o quão distantes
  • 17:12 - 17:15
    esses dois vetores estão, certo?
  • 17:16 - 17:19
    Outra métrica bastante interessante para se calcular entre dois
  • 17:19 - 17:21
    vetores é a distância de Manhattan.
  • 17:22 - 17:25
    Então a única diferença entre a distância euclidiana e a distância de
  • 17:25 - 17:28
    Manhattan é a ordem dessa norma.
  • 17:28 - 17:32
    Então 1 a gente chama de norma L2, a distância euclidiana, a
  • 17:32 - 17:36
    distância de Manhattan a gente chama de L1, tudo por causa da norma,
  • 17:36 - 17:38
    da ordem da norma.
  • 17:38 - 17:40
    O que é que isso muda na prática?
  • 17:40 - 17:43
    Na norma euclidiana isso muda que a gente usa o quadrado das
  • 17:43 - 17:44
    diferenças.
  • 17:45 - 17:50
    Na norma de Manhattan, na distância de Manhattan, norma L1, a gente
  • 17:50 - 17:54
    usa o módulo, como se estivesse usando uma ordem 1, elevado a 1 aqui,
  • 17:54 - 17:57
    esse número, então a gente usa a norma dos valores.
  • 17:58 - 18:02
    Então se a gente verificar aqui a gente vai ter diferentes normas e
  • 18:02 - 18:06
    cada norma dessa vai ser mais útil ou menos útil dependendo do caso
  • 18:06 - 18:07
    de uso que a gente tiver.
  • 18:09 - 18:13
    Outras operações úteis aqui no contexto de álgebra linear, a gente
  • 18:13 - 18:16
    pode transpor uma matriz, então frequentemente a gente vai ter que
  • 18:16 - 18:18
    calcular a transposta de uma matriz.
  • 18:19 - 18:21
    O que é a transposta de uma matriz?
  • 18:21 - 18:25
    É simplesmente eu transformar o que era linha em coluna e o que era
  • 18:25 - 18:26
    coluna em linha.
  • 18:27 - 18:31
    Então se eu criar uma matriz 3 por 2 com esses valores, com esses
  • 18:31 - 18:35
    elementos, a transposta dessa matriz original vai ser simplesmente
  • 18:35 - 18:40
    essa matriz transposta, ou seja, linhas vão virar colunas e colunas
  • 18:40 - 18:41
    vão virar linhas.
  • 18:41 - 18:47
    Então no final a dimensão dessa matriz vai ir de 3 por 2 para
  • 18:47 - 18:48
    2 por 3.
  • 18:49 - 18:51
    Então vamos rodar esse código aqui para visualizar.
  • 18:51 - 18:57
    Eu tinha uma matriz original 3 por 2, a matriz transposta vai ser 2
  • 18:57 - 18:57
    por 3.
  • 18:59 - 19:02
    Outro conceito interessante é você criar uma matriz identidade.
  • 19:03 - 19:07
    Então a matriz identidade é uma matriz similar a um número 1, então
  • 19:07 - 19:11
    aquela matriz que se você multiplicar uma matriz por ela, é como se
  • 19:11 - 19:15
    você estivesse multiplicando um número por 1, então vai dar ela
  • 19:15 - 19:15
    mesma.
  • 19:16 - 19:20
    Então a matriz identidade no Python, utilizando numpy, a gente usa a
  • 19:20 - 19:21
    função i.
  • 19:22 - 19:29
    Se eu colocar aqui como entrada 2, eu vou ter uma matriz identidade 2
  • 19:29 - 19:30
    por 2.
  • 19:30 - 19:34
    Se eu colocar 3, eu vou ter uma matriz identidade 3 por 3.
  • 19:34 - 19:38
    Então matriz identidade sempre são matrizes quadradas, ou seja, mesmo
  • 19:38 - 19:40
    número de linhas e de colunas.
  • 19:41 - 19:46
    Então se a gente rodar aqui, a gente vai ter a matriz identidade 2
  • 19:46 - 19:52
    por 2, vou ter a matriz transposta, e se eu multiplicar uma matriz
  • 19:52 - 19:59
    por sua identidade, se eu fizer o produto escalar entre eles, eu vou
  • 19:59 - 20:02
    ter como resultado a mesma matriz original.
  • 20:03 - 20:04
    Certo?
  • 20:05 - 20:10
    1, 2, 3, 4, resposta 1, 2, 3, 4, perfeito?
  • 20:11 - 20:15
    Agora algumas funções auxiliares que o numpy oferece para a gente.
  • 20:15 - 20:19
    Então o numpy oferece, por exemplo, uma funçãozinha que é
  • 20:19 - 20:24
    interessante para o que a gente vai fazer durante as aulas, que se
  • 20:24 - 20:25
    chama linspace.
  • 20:26 - 20:27
    O que esse linspace faz?
  • 20:27 - 20:33
    Ele simplesmente cria pontos linearmente, igualmente espaçados, vamos
  • 20:33 - 20:33
    dizer assim.
  • 20:34 - 20:36
    Então o que essa funçãozinha aqui está fazendo?
  • 20:37 - 20:44
    Eu vou criar 5 pontos entre 0 e 10, e esses pontos vão ser
  • 20:44 - 20:45
    linearmente espaçados.
  • 20:46 - 20:49
    Então 0, 2.5, 5, 7.5, 10.
  • 20:50 - 20:53
    Tenho 5 pontos e a distância entre eles é igual.
  • 20:56 - 20:57
    Outras funções auxiliares.
  • 20:58 - 21:03
    Eu posso criar uma matriz só com 0s no Python, utilizando a função np
  • 21:03 - 21:08
    .0s, e aqui eu posso passar como entrada, como parâmetro para essa
  • 21:08 - 21:11
    função, a dimensão da matriz que eu quero criar.
  • 21:11 - 21:15
    Então eu vou criar uma matriz de 0s com dimensões 2 linhas e 3
  • 21:15 - 21:16
    colunas.
  • 21:16 - 21:21
    Da mesma forma eu posso criar uma matriz de números 1s, utilizando np
  • 21:21 - 21:25
    .ones. Vou passar aqui, eu quero criar uma matriz de 3 linhas e 2
  • 21:25 - 21:28
    colunas, só com números 1s.
  • 21:28 - 21:32
    Então está aqui a nossa matriz de 0s e a nossa matriz de 1s.
  • 21:33 - 21:39
    E a gente pode também concatenar esses vetores, ou seja, eu posso
  • 21:39 - 21:42
    juntar dois vetores ou juntar duas matrizes.
  • 21:42 - 21:50
    Então aqui, por exemplo, eu tenho uma matriz chamada array1 e essa
  • 21:50 - 21:56
    matriz é np.array, primeira linha, segunda linha, cada uma com duas
  • 21:56 - 21:56
    colunas.
  • 21:57 - 22:02
    E eu posso ter um vetor, uma matriz que na verdade aqui vai ter
  • 22:02 - 22:05
    uma linha só, uma linha e duas colunas.
  • 22:06 - 22:12
    Então se eu concatenar esses dois arrays aqui, esses dois vetores,
  • 22:12 - 22:18
    essas duas matrizes aqui no caso, eu vou ter, na verdade, no final
  • 22:18 - 22:22
    uma matriz, esse array concatenado vai adicionar essa linha nesse
  • 22:22 - 22:24
    vetor original que tinha só duas linhas.
  • 22:25 - 22:28
    Então vou ter um vetor de 3 linhas e 2 colunas, uma matriz, no
  • 22:28 - 22:30
    caso, de 3 linhas e 2 colunas.
  • 22:32 - 22:37
    Esse parâmetro aqui, axis, ele significa quando é 0 eu vou adicionar
  • 22:37 - 22:41
    nas linhas, quando é colunas eu vou adicionar nas colunas.
  • 22:42 - 22:44
    Então um eu vou adicionar embaixo, o outro eu vou adicionar ao lado,
  • 22:45 - 22:45
    é como se fosse isso.
  • 22:47 - 22:50
    Então aqui eu tenho um exemplo tanto adicionando linhas a uma matriz
  • 22:50 - 22:54
    original, quanto adicionando colunas a uma matriz original.
  • 22:54 - 22:59
    Então se a gente rodar esse exemplo, eu tenho a matriz 1, 2 por
  • 22:59 - 23:03
    2, e a matriz 2, que é uma linha por duas colunas.
  • 23:04 - 23:08
    Quando eu concateno elas utilizando o eixo 0, o axis 0, eu vou
  • 23:08 - 23:10
    adicionar uma linha a mais.
  • 23:11 - 23:19
    No outro exemplo, debaixo, eu tenho uma matriz aqui de duas linhas e
  • 23:19 - 23:24
    uma coluna, e eu vou concatenar um array nas colunas, então eu vou
  • 23:24 - 23:26
    adicionar duas colunas diferentes.
  • 23:27 - 23:32
    Então eu continuo com 7 e 8, vou adicionar o 1, 3, 2, 4
  • 23:32 - 23:37
    aqui, como colunas novas nessa matriz original.
  • 23:39 - 23:43
    E por último, para fechar o nosso lab, eu também posso utilizar uma
  • 23:43 - 23:48
    função de reshape nos meus dados, nos meus arrays, nos meus vetores e
  • 23:48 - 23:48
    matrizes.
  • 23:49 - 23:50
    O que o reshape vai fazer?
  • 23:50 - 23:55
    Eu consigo alterar o formato dessa matriz ou desse array.
  • 23:55 - 23:59
    Então imagina que eu tenho uma matriz aqui, um array na verdade, que
  • 23:59 - 24:02
    eu tenho 6 elementos nesse array.
  • 24:02 - 24:08
    Eu posso reshape, fazer um reshape nesse dado, nessa matriz, e
  • 24:08 - 24:11
    transformá-lo em uma matriz de duas linhas e três colunas.
  • 24:12 - 24:17
    O único ponto aqui importante para a gente pensar é, no final, essa
  • 24:17 - 24:18
    conta tem que fechar.
  • 24:18 - 24:24
    Então se eu tenho 6 colunas, 6 números, 6 elementos nesse vetor, e eu
  • 24:24 - 24:28
    quero transformá-lo em uma matriz, as dimensões aqui têm que
  • 24:28 - 24:33
    multiplicar e dar o mesmo resultado que a quantidade de elementos
  • 24:33 - 24:34
    desse vetor original.
  • 24:35 - 24:38
    Então se eu tenho 6 elementos, 2 vezes 3 tem que dar 6.
  • 24:38 - 24:42
    Eu poderia também fazer 3 por 2, ou 6 por 1, mas eu não
  • 24:42 - 24:45
    poderia fazer 2 por 4, porque daria erro.
  • 24:45 - 24:49
    Então se a gente rodar aqui, tem o array original, e esse array,
  • 24:49 - 24:54
    quando eu fizer o reshape de 2 por 3 dele, ele vai reajustar esses
  • 24:54 - 24:57
    elementos em uma matriz de duas linhas e três colunas.
  • 24:57 - 25:00
    Se eu colocasse 4 aqui, daria erro.
  • 25:00 - 25:01
    Por que daria erro?
  • 25:02 - 25:03
    Porque eu só tenho 6 elementos.
  • 25:04 - 25:08
    Para fazer um reshape de 2 e 4, eu teria que ter 8 elementos.
  • 25:08 - 25:12
    Então o único ponto de atenção seria esse.
  • 25:13 - 25:18
    Então agora você já sabe muito sobre a generativa e já deu seus
  • 25:18 - 25:24
    primeiros passos sobre álgebra linear para conseguir você mesmo
  • 25:24 - 25:26
    implementar os seus próprios modelos de a generativa.
Title:
GAN CAP01 2025 VA05 APLICACAO EM PYTHON
Video Language:
Portuguese, Brazilian
Duration:
25:30

Portuguese, Brazilian subtitles

Revisions Compare revisions