<jupyter_start><jupyter_text>Camada Linear<jupyter_code>import torch
from torch import nn  # neural networks
torch.manual_seed(42)

perceptron = nn.Linear(in_features= 3, out_features= 1)
print(perceptron)<jupyter_output>Linear(in_features=3, out_features=1, bias=True)<jupyter_text>Os pesos ***W*** (weight) e ***b*** (bias) são inicializados aleatoriamente pelo Pytorch. Podemos consultar essa informação de duas formas:*   iterando em seus ***namede_parameters***<jupyter_code>for nome, tensor in perceptron.named_parameters():
    print(nome, tensor.data)<jupyter_output>weight tensor([[ 0.4414,  0.4792, -0.1353]])
bias tensor([0.5304])<jupyter_text>*   acessando cada parâmetro individualmente através do seu nome padrão<jupyter_code>print(perceptron.weight.data)
print(perceptron.bias.data)<jupyter_output>tensor([[ 0.4414,  0.4792, -0.1353]])
tensor([0.5304])<jupyter_text>--> Equação do modelo<jupyter_code>w1, w2, w3 = perceptron.weight.data.numpy()[0]
b = perceptron.bias.data.numpy()

# w1 * x1 + w2 * x2 + w3 * x3 + b = 0<jupyter_output><empty_output><jupyter_text>É importante não esquecer que no perceptron esses valores definem um hiperplano no espaço. Como 3 dimenções está na capacidade de vizualização, aproveitaremos para visualizar o plano aleatoriamente inicializado pelo torch.  Usando a bibllioteca de visualização matplotlib (Toolkit) para plotagens 3D<jupyter_code>import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

def plot3d(perceptron):

    w1, w2, w3 = perceptron.weight.data.numpy()[0]
    b = perceptron.bias.data.numpy()

    X1 = np.linspace(-1, 1, 10)
    X2 = np.linspace(-1, 1, 10)

    X1, X2 = np.meshgrid(X1, X2)

    X3 = (b - w1*X1 - w1*X2) / w3

    fig = plt.figure(figsize=(10, 8))
    ax = fig.gca(projection= '3d')
    ax.view_init(azim=180)
    ax.plot_surface(X1, X2, X3, cmap='plasma')
plot3d(perceptron)<jupyter_output><empty_output><jupyter_text>Forward O fluxo de informação de entrada através da rede recebe o nome de *forward*, já que a informação é passada *para a frente*. Vamos realizar o forward da nossa rede de um perceptron só. Para isso, usaremos uma chamada de função com a variável onde instaciamos a camada *Linear*.<jupyter_code>X = torch.Tensor([0, 1, 2])
Y = perceptron(X)

print(Y)

plot3d(perceptron)
plt.plot([X[0]], [X[1]], [X[2]], color='r', marker='^', markersize=20)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.1267605633802817, 'fraction_numerical': 0.043910521955260975, 'mean_word_length': 5.474530831099195, 'pattern_counts': {'":': 0, '<': 22, '<?xml version=': 0, '>': 23, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '6', 'dir': 'jupyter-structured-clean-dedup', 'id': '582641', 'license': 'MIT', 'n_tokens_mistral': 1013, 'n_tokens_neox': 949, 'n_words': 232, 'path': 'Camada_Linear.ipynb', 'repo_name': 'albertomendess/Data_Science', 'size': '2414'}