Escolar Documentos
Profissional Documentos
Cultura Documentos
Introdução
Nesse trabalho foi utilizado a regra delta de Widrow para treinar um neuronio
ADALINE, a fim de encontrar uma função que represente bem os valores
fornecidos na tabela ao lado. O código foi dividido nas secções abaixo e
comentando. Além disso, foi plotado os hiperplanos que representam essa função
encontrada e a convergencia dos pesos w1 e w2.
for j in range(len_amostra):
w[j]+=a*e*x[i][j]
return w
Declarando as variáveis
#entradas
x = [(0.2,0.3), (0.1,0.4), (0.4,0.3), (0.11,0.9), (0.84,0.6), (0.1,0.2), (0.6,0.2),(0.2,0.
#saídas desejadas
yd = [0.13, 0.17, 0.25, 0.822, 1.065, 0.05, 0.4, 0.08, 1.13, 0.01]
#pesos
w = [8.44, 8.28]
#taxa de aprendizagem
a = 1
#quantidade de amostras
len_amostras = len(x)
#vetor de erros
e = [0,0,0,0,0,0,0,0,0,0]
Verificação dos dados
for i in range(len_amostras):
saida = u(x,w,i)
e[i] = erro(i, yd, saida)
w = atualiza_peso(w, a, e[i], x, i)
print(f'{i + 1}ª iteração:\n')
print(f'y = {round(saida,3)} w0 = {round(w[0],3)} w1 = {round(w[1],3)}\n')
1ª iteração:
2ª iteração:
3ª iteração:
4ª iteração:
5ª iteração:
6ª iteração:
7ª iteração:
8ª iteração:
9ª iteração:
10ª iteração:
x = np.linspace(-2,2,10)
y = np.linspace(-2,2,10)
x,y = np.meshgrid(x,y)
z = 8.44*x + 8.28*y
fig = plt.figure()
ax = fig.gca(projection='3d')
ax.plot_surface(x,y,z)
plt.show()
for i in range(len_amostras):
saida = u(x,w,i)
e[i] = erro(i, yd, saida)
w = atualiza_peso(w, a, e[i], x, i)
w_0.append(w[0])
w_1.append(w[1])
es.append(e[i]**2)
eq.append(sum(es)/20)
Hiperplano final
x = np.linspace(-2,2,10)
y = np.linspace(-2,2,10)
x,y = np.meshgrid(x,y)
z = 0.546847610790358*x + 0.816775464408366*y
fig = plt.figure()
ax = fig.gca(projection='3d')
ax.plot_surface(x,y,z)
plt.show()
Figura 2: Hiperplano plotado com os valores finais
x = np.linspace(0,500,500)
plt.plot(x,w_0)
plt.plot(x, w_1, 'r')
plt.show()
x = np.linspace(-10,10,20)
y = np.linspace(-10,10,20)
x,y = np.meshgrid(x,y)
for i in range(20):
for j in range(20):
w1 = x[i][j]
w2 = y[i][j]
for n in range(10):
soma = entradas[n][0] * w1 + entradas[n][1] * w2
erros[n] = soma - saidas[n]
e_2 = []
for k in range(len(erros)):
e_2.append(erros[k]**2)
erro_quadratico[i][j] = (sum(e_2)/20)
fig = plt.figure()
ax = fig.gca(projection='3d')
ax.plot_surface(x,y,erro_quadratico)
plt.show()
Conclusão
Observando os valores da secção “Verificação dos dados”, é possivel notar que os
valores obtidos para os pesos nas dez primeiras interações ficaram de acordo com a
tabela. Pela figura 3, temos que os valores dos pesos convergiram, portanto atingimos
o valor mínimo da função do erro, pela figura 4 constatamos que é um valor mínimo
global. Sendo assim, o hiperplano final representa uma função muito proxima da ideal,
que cumpre os valores fornecidos na tabela mostrada na indutrução.