From 262d97b6b9bc6fdf1647cb460de8e298f37c2fc9 Mon Sep 17 00:00:00 2001 From: Blanca Date: Wed, 25 May 2022 20:00:23 +0200 Subject: [PATCH 01/76] =?UTF-8?q?Escribe=20borrados=20de=20experimento=20d?= =?UTF-8?q?e=20#109=20Algoritmo=20de=20inicializaci=C3=B3n=20de=20pesos=20?= =?UTF-8?q?de=20redes=20neuronales=20Incluye:=20-=20Descripci=C3=B3n=20del?= =?UTF-8?q?=20experimento=20-=20Descripci=C3=B3n=20del=20test=20de=20hip?= =?UTF-8?q?=C3=B3tesis=20-=20Requisitos=20t=C3=A9cnicos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../construccion-evaluacion-red-neuronal.tex | 2 +- .../optimizaciones.tex | 1 + .../1_funciones_activacion.tex | 513 ++++++++++++++++++ .../2_algoritmo-inicializacion-pesos.tex | 129 +++++ Memoria/paquetes/comandos-entornos.tex | 3 + Memoria/tfg.tex | 5 +- 6 files changed, 650 insertions(+), 3 deletions(-) create mode 100644 Memoria/capitulos/5-Estudio_experimental/1_funciones_activacion.tex create mode 100644 Memoria/capitulos/5-Estudio_experimental/2_algoritmo-inicializacion-pesos.tex diff --git a/Memoria/capitulos/4-Actualizacion_redes_neuronales/construccion-evaluacion-red-neuronal.tex b/Memoria/capitulos/4-Actualizacion_redes_neuronales/construccion-evaluacion-red-neuronal.tex index 2ab24aa..e64ffb4 100644 --- a/Memoria/capitulos/4-Actualizacion_redes_neuronales/construccion-evaluacion-red-neuronal.tex +++ b/Memoria/capitulos/4-Actualizacion_redes_neuronales/construccion-evaluacion-red-neuronal.tex @@ -331,7 +331,7 @@ \subsection{Qué función de activación seleccionar} %% Formulación técnica \section{Construcción explícita y evaluación de una red neuronal} - +\label{ch05:construction-evaluation-nnnn} Ante todas las consideraciones expuestas y puesto que no existe ningún resultado o hipótesis a favor de combinar funciones de activación, en pos de simplificar el estudio, vamos a suponer a priori que todos los nodos están compuestos con la misma. Entonces, una red neuronal para nosotros vendrá determinada dos matrices de pesos y una función de evaluación. diff --git a/Memoria/capitulos/4-Actualizacion_redes_neuronales/optimizaciones.tex b/Memoria/capitulos/4-Actualizacion_redes_neuronales/optimizaciones.tex index 17d6fd7..05bdde3 100644 --- a/Memoria/capitulos/4-Actualizacion_redes_neuronales/optimizaciones.tex +++ b/Memoria/capitulos/4-Actualizacion_redes_neuronales/optimizaciones.tex @@ -167,6 +167,7 @@ \subsection{Descripción del método propuesto} \begin{algorithm}[H] \caption{Inicialización de pesos de una red neuronal} + \label{algo:algoritmo-iniciar-pesos} \textbf{Input:} Tamaño red neuronal $n$, conjunto de datos de entrenamiento $\mathcal{D}$, constate $M$ involucrada en \refeq{eq:method_inicializar_M}. \textbf{Input:} Red neuronal, representada con las matrices $(A,S,B)$. diff --git a/Memoria/capitulos/5-Estudio_experimental/1_funciones_activacion.tex b/Memoria/capitulos/5-Estudio_experimental/1_funciones_activacion.tex new file mode 100644 index 0000000..c20a71d --- /dev/null +++ b/Memoria/capitulos/5-Estudio_experimental/1_funciones_activacion.tex @@ -0,0 +1,513 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Estudio empírico de las funciones de activación +%%%%%% +% 1. Comparativas en cuanto a coste computacional. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\chapter{Funciones de activación} +\label{funciones-activacion-democraticas-mas-demoscraticas} +Como se observó en +\ref{def:funcion_activacion_articulo} +se desconoce teóricamente si una función de activación va a ser +mejor que otra, es por ello y puesto que nuestro objetivo +es reducir el coste computacional de una red neuronal +que procederemos a realizar un análisis del costo de las redes neuronales. + + +\section{Caracterización de las funciones de activación} + +Si bien por conveniencia teórica definimos las funciones de activación en \ref{def:funcion_activacion_articulo} +como una función de $\phi:\R \longrightarrow [0,1]$, no +decreciente, con uno como límite en infinito y cero como límite a +menos infinito. + +% Nota sobre el concepto de función no polinómica +\setlength{\marginparwidth}{\bigMarginSize} +\marginpar{\maginLetterSize + \iconoAclaraciones \textcolor{dark_green}{ + \textbf{ + Función no polinómica + } + } + + Que no es un polinomio. +} +Nos basaremos en el concepto \textit{actual} de función de activación: +basta con que sea una función no polinómica +(véanse los artículos \cite{DBLP:journals/corr/SonodaM15}, \cite{modern-trainable-activation-functions} y \cite{FUNAHASHI1989183}), +además también incluiremos la función de activación identidad. + +Funciones no polinómicas hay infinitas y reincidimos en que a priori no hay una mejor que otra; por tanto, como criterio de selección nos guiaremos por la intuición que nos brinda la demostración del teorema \ref{teorema:2_3_uniformemente_denso_compactos}. + La imagen de una función de activación es relevante a la hora de aproximar la función ideal desconocida, ya que reduce el número + de neuronas si se usa convenientemente. +Por lo tanto, una buena heurística sería disponer de un repertorio básico de funciones de activación que contemplen distintas imágenes no polinómicas. + +Además de las propuestas en \ref{def:funcion_activacion_articulo}, +añadimos a nuestra colección las siguientes. + + +\begin{table}[H] + \centering + \resizebox{\textwidth}{!}{ + \begin{tabular}{| c | c | c | c |} + \hline + Nombre & Expresión & Rango imagen & Gráfica \\ + \hline + %%%%%%%% Identidad %%%%%%% + % Nombre: + Identidad + & %expresión + $Id(x) = x$ + & % Rango imagen + $(-\infty, +\infty)$ + & % Gráfica + \begin{minipage}{\coeficienteAncho\textwidth} + \includegraphics[width=\linewidth]{funciones-activacion/Identidad.png} + \end{minipage} + \\ + \hline + %%%%%%%% Indicadora %%%%%%% + % Nombre: + Indicadora $\lambda \in \R$ + & %expresión + $Indicadora_\lambda(x) = 1_{\{x > \lambda\}}$ + & % Rango imagen + $\{0,1\}$ + & % Gráfica + \begin{minipage}{\coeficienteAncho\textwidth} + \includegraphics[width=\linewidth]{funciones-activacion/Indicadora de 0.png} + \end{minipage} + \\ + \hline + %%%%%%%% Función umbral %%%%%%% + % Nombre: + Función umbral $p$ polinomio + & %expresión + $Threshold(x) = 1_{\{p(x) > 0\}}$ + & % Rango imagen + $\{0,1\}$ + & % Gráfica + \begin{minipage}{\coeficienteAncho\textwidth} + \includegraphics[width=\linewidth]{funciones-activacion/Threshold de polinomio 2x.png} + \end{minipage} + \\ + \hline + %%%%%%%% Función rampa %%%%%%% + % Nombre: + Función rampa + & %expresión + $Rampa(x) = x 1_{\{0 < x <1\}} + 1_{\{x \geq 1\}}$ + & % Rango imagen + $[0,1]$ + & % Gráfica + \begin{minipage}{\coeficienteAncho\textwidth} + \includegraphics[width=\linewidth]{funciones-activacion/Rampa.png} + \end{minipage} + \\ + \hline + %%%%%%%% sigmoide %%%%%%%% + % Nombre: + Sigmoidea + & %expresión + $\sigma(x) = \frac{1}{1+e^{-x}}$ + & %Rango imagen + $(0,1)$ + & % Gráfica + \begin{minipage}{\coeficienteAncho\textwidth} + \includegraphics[width=\linewidth]{funciones-activacion/Sigmoid.png} + \end{minipage} + \\ + \hline + %%%%%%%% Tangente hiperbólica %%%%%%%% + % Nombre: + Tangente hiperbólica + & %expresión + $\tanh$ + & %Rango imagen + $(-1,1)$ + & % Gráfica + \begin{minipage}{\coeficienteAncho\textwidth} + \includegraphics[width=\linewidth]{funciones-activacion/Tangente hiperbolica.png} + \end{minipage} + \\ + \hline + %%%%%%%% Valor absoluto%%%%%%%% + % Nombre: + Valor absoluto + & %expresión + $abs(x)= |x|$ + & %Rango imagen + $[0,+\infty]$ + & % Gráfica + \begin{minipage}{\coeficienteAncho\textwidth} + \includegraphics[width=\linewidth]{funciones-activacion/Valor absoluto.png} + \end{minipage} + \\ + \hline + %%%%%%%% Coseno %%%%%%%% + % Nombre: + Coseno + & %expresión + $\cos$ + & %Rango imagen + $[-1,1]$ + & % Gráfica + \begin{minipage}{\coeficienteAncho\textwidth} + \includegraphics[width=\linewidth]{funciones-activacion/coseno.png} + \end{minipage} + \\ + \hline + %%%%%%%% Cosine Squasher %%%%%%%% + % Nombre: + \textit{Cosine Squasher} + & %expresión + $CosineSquasher(x)=\left(1 + \cos\left(x + 3 \frac{\pi}{2} \right) \frac{1}{2}\right) + 1_{\{\frac{-\pi}{2} \leq x \leq \frac{\pi}{2}\}} + + + 1_{\{ \frac{\pi}{2} < \lambda \}}.$ + & %Rango imagen + $[0,1]$ + & % Gráfica + \begin{minipage}{\coeficienteAncho\textwidth} + \includegraphics[width=\linewidth]{funciones-activacion/Cosine CosineSquasher.png} + \end{minipage} + \\ + \hline + %%%%%%%% ReLU %%%%%%%% + % Nombre: + \textit{ReLU} + & %expresión + $ReLU(x) = \max(0,x)$ + & %Rango imagen + $[0,+\infty)$ + & % Gráfica + \begin{minipage}{\coeficienteAncho\textwidth} + \includegraphics[width=\linewidth]{funciones-activacion/ReLU.png} + \end{minipage} + \\ + \hline + %%%%%%%% Hard Hyperbolic Function %%%%%%%% + % Nombre: + \textit{Hard Hyperbolic Function} + & %expresión + $Hardtanh(x) =\left\{ \begin{array}{lcc} + -1 & si & x \leq -1 \\ + \\ x & si & -1< x < 1 \\ + \\ 1& si & x \geq 1 + \end{array} + \right.$ + & %Rango imagen + $[-1,1]$ + & % Gráfica + \begin{minipage}{\coeficienteAncho\textwidth} + \includegraphics[width=\linewidth]{funciones-activacion/hardtanh.png} + \end{minipage} + \\ + \hline + %%%%%%%% Leaky ReLU%%%%%%% + % Nombre: + \textit{Leaky ReLU} + & %expresión + $\begin{array}{c} + + LReLU_{\alpha}(x) =\left\{ \begin{array}{lcc} + \alpha x & si & x \leq 0 \\ + \\ x& si & x > 0 + \end{array} + \right. + \\ + \text{con } \alpha \in \R^+ \text{valor }\textit{pequeño}. + \end{array} + $ + & % Rango imagen + $[0, +\infty)$ + & % Gráfica + \begin{minipage}{\coeficienteAncho\textwidth} + \includegraphics[width=\linewidth]{funciones-activacion/LReLU.png} + \end{minipage} + \\ + \hline + \end{tabular} + } % fin de llave de ajustarse al ancho de la página + \caption{Compendio de funciones de activación} + \label{table:funciones-de-activation} +\end{table} + +\begin{aportacionOriginal} + +\begin{teorema}\label{teo:eficacia-funciones-activation} + Sea $\phi \in \mathcal{A}(\R^2)$ una transformación afín, sean dos funciones de activación $\sigma, \gamma$ tales que + \begin{equation*} + \phi \circ \sigma = \gamma, + \end{equation*} + entonces para + el espacio de redes neuronales de $n$ neuronas creado con la función de activación $\sigma$ es + igual al espacio de redes neuronales creado con la función de activación $\gamma$. +\end{teorema} +\begin{proof} + + Sea $\mathcal{H}^+_{\sigma, n}(\R^d, \R^s)$, el espacio de redes neuronales con $n$ neuronas con sesgo. + + Para cualquier $h \in \mathcal{H}^+_{\sigma, n}(\R^d, \R^s)$ + la proyección i-ésima de $h$ será de la forma + + \begin{equation*} + h_i(x) = \sum^n_{j=1}(\beta_{j} \sigma(A_j(x))+ k_j), + \end{equation*} + con $x \in \R^d, \beta_{j}, k_j \in \R, A_j \in \afines$. + + Procedemos a definir $\tilde{h}_i(x)$ como sigue y + se tiene que + \begin{equation*} + \tilde{h}_i(x) + = \sum^n_{j=1}(\beta_{j} \phi(\sigma(A_j(x)))+ k_j) + = \sum^n_{j=1}(\tilde{\beta}_{j} \sigma(\tilde{A}_j(x))+ \tilde{k_j}), + \end{equation*} + con $x \in \R^d, \tilde \beta_{j}, \tilde k_j \in \R, \tilde{A}_j \in \afines$, + por lo que está claro que $\tilde{h}_i(x) \in \mathcal{H}^+_{\sigma, n}(\R^d, \R^s)$. + + Pero por hipótesis del teorema $\phi \circ \sigma = \gamma$, por lo que $\tilde{h}_i(x) \in \mathcal{H}^+_{\gamma, n}(\R^d, \R^s)$. + + Basta con considerar la transformación afín inversa para ver que ambos espacios son isomorfos + \begin{equation*} + \mathcal{H}^+_{\gamma, n}(\R^d, \R^s) \simeq \mathcal{H}^+_{\sigma, n}(\R^d, \R^s). + \end{equation*} + + Dos conjuntos isomorfos donde para cualquier $h \in \mathcal{H}^+_{\gamma, n}(\R^d, \R^s)$, + se tiene que $h \in \mathcal{H}^+_{\sigma, n}(\R^d, \R^s)$ via el isomorfismo y + luego componer con la inversa de la aplicación afín. + + Como demostramos en \ref{consideration-irrelevancia-sesgo} se tiene que + \begin{equation*} + \mathcal{H}^+_{\sigma, n}(\R^d, \R^s) = \mathcal{H}^+_{\gamma, n}(\R^d, \R^s) + \subset + \mathcal{H}_{\gamma, n+1}(\R^d, \R^s) + \subset + \mathcal{H}^+_{\gamma, {n+1}}(\R^d, \R^s) = \mathcal{H}^+_{\sigma, {n+1}}(\R^d, \R^s) + . + \end{equation*} + Por lo que para un $n$ arbitrariamente grande, se acaba de probar lo buscado. + \begin{equation*} + \mathcal{H}_{\gamma}(\R^d, \R^s) = \mathcal{H}_{\sigma}(\R^d, \R^s). + \end{equation*} +\end{proof} +\end{aportacionOriginal} + +\subsubsection*{\iconoAclaraciones \textcolor{dark_green}{Relevancia práctica del teorema}} +Este teorema lo que nos está diciendo es que si dos funciones de activación tienen \textit{la misma forma} +(independientemente de su grafo) +entonces \textbf{aproximarán igual de bien}, +es decir, con el mismo error dentro de un conjunto de datos. + Esto a nivel práctico significa que \textbf{si se tienen dos funciones de activación + \textit{con la misma forma} (o muy parecidas) elige + la que tenga menor costo computacional}, porque a + nivel teórico aproximarán igual de bien y de esta + manera ahorraremos recursos. + +Notemos además que la demostración nos enseña que la igualdad se da independientemente del número de +neuronas fijado, es decir que no es un resultado +asintótico (lo asintótico en términos prácticos +significa que sea resultado de una serie de +aproximaciones). + + +Así pues a la vista de la imágenes de las distintas funciones de activación +recogidas en la tabla \ref{table:funciones-de-activation} y +por el recién probado teorema \ref{teo:eficacia-funciones-activation} podemos determinar a priori +que de manera teórica existen conjuntos de funciones que aproximadamente puedes producir los mismos resultado, +compararemos entonces su coste computacional y tomaremos como representante de la clase aquel que sea de menor coste. + +\begin{table}[H] + \centering + \begin{tabular}{| c | c | c | } + \hline + \textit{Grupo escalera} & \textit{Grupo sigmoide} & \textit{Grupo ReLU} \\ + \hline + & Rampa & \\ + Indicadora & Sigmodea & ReLU\\ + Umbral & \textit{Cosine Squasher}& LReLU\\ + & tanh & \\ + & \textit{Hard Hyperbolic Function}& \\ +\hline + \end{tabular} + \caption{Agrupaciones de funciones de activación con forma similar} + \label{table:Clases-equivalencia-activation-function} +\end{table} + +\subsection{ Implementación de las funciones de activación en la biblioteca de redes neuronales} + +Las funciones de activación han sido implementadas con cuidado de que sean eficientes +y valiéndose de las características propias de Julia, para ello se han utilizado técnicas como: + +\begin{itemize} + \item \textbf{Programación modular}: Tal y como se recomienda en la documentación de Julia \footnote{ + Consultada en la página web oficial de Julia a día 23 de mayo del 2022 con URL: \url{https://docs.julialang.org/en/v1/manual/modules/} + } se ha utilizado una módulo en la implementación de la biblioteca, esto aporta los siguientes beneficios: + \begin{itemize} + \item Los módulos pueden ser precompilados y de esta manera se aceleraría la carga y el tiempo de inicialización. + \item Encapsulamiento de los métodos y facilidades de uso del espacio de nombres, lo cual forma parte + de una buena metodología de programación. + \end{itemize} + \item \textbf{Macros}\footnote{La información consultada de macros ha sido de la página oficial de Julia, a día 23 de mayo del 2022, URL: + \url{https://docs.julialang.org/en/v1/manual/metaprogramming}}: + que permiten sustituciones de código cuando el código es analizado por el compilador, + de esta manera, funciones que devuelven otras funciones dependientes de un parámetro se verán beneficiadas. + Puede encontrar la implementación de esto en la biblioteca de redes neuronales implementada en nuestro + repositorio \footnote{Esto es en \url{https://github.com/BlancaCC/TFG-Estudio-de-las-redes-neuronales/tree/main/Biblioteca-Redes-Neuronales/src/activation_functions.jl}} +\end{itemize} + + + + +\subsection{Coste computacional funciones activación } +\label{ch06:coste-computacional-funciones-activacion} + +\subsubsection{Diseño del experimento} +El experimento para comparar los resultados ha consistido: +Se ha evaluado cada función a comparar $20000000$ veces y se ha medido cuanto tarda. +Esto se ha repetido $15$ veces. Puede encontrar la implementación concreta y los resultados concretos de cada iteración en el repositorio del +proyecto \footnote{En el directorio de experimentos +de \url{https://github.com/BlancaCC/TFG-Estudio-de-las-redes-neuronales}.}. + +\subsubsection{Test de hipótesis} + +Compararemos si los resultados son significativos utilizando la \textbf{prueba de los rangos con +signo de Wilcoxon} (véase \cite{OpenIntroStatistics}, \cite{BiologicalStatistics}, o la web de \href{https://www.cienciadedatos.net}{cienciadedatos.net} \footnote{ + Prueba de los rangos con signo de Wilcoxon by Joaquín Amat Rodrigo, available under a Attribution 4.0 International (CC BY 4.0) at + \url{https://www.cienciadedatos.net/documentos/18_prueba_de_los_rangos_con_signo_de_wilcoxon} + Con fecha de visita el 22 de mayo del 2022. + }). + + La motivación de realizar esta prueba es la siguiente: +\begin{itemize} + \item Las muestras son independientes. + \item Los datos tomados, el tiempo, permiten ser ordenados. + \item El tamaño de muestra es pequeño y no podemos asegurar normalidad de la datos. +\end{itemize} + +\subsubsection*{Hipótesis} + +\begin{itemize} + \item $H_0$: La mediana de las diferencia de cada par de datos es $0$. + \item $H_a$: La mediana de las diferencia entre cada par de datos es diferente de cero. +\end{itemize} + +La utilidad de este test es que si rechaza la hipótesis la hipótesis nula sabremos que con un $95 \%$ de certeza tendrán medianas diferentes, es decir, \textbf{existe una +diferencia de tiempos}. En caso de que no se rechace no podremos afirmar nada. +Puede encontrar la implementación en el repositorio del + proyecto \footnote{En el directorio de experimentos + de \url{https://github.com/BlancaCC/TFG-Estudio-de-las-redes-neuronales}.}. + + Los resultados del test de Wilcoxon han sido los siguientes: + + \begin{table}[H] + \resizebox{\textwidth}{!}{ + \begin{tabular}{|l|l|l|l|l|l|} + \hline + ~ & cte 1 & Identidad & Threshold de $2x$ & CosineSquasher & Indicadora de 0 \\ \hline + cte 1 & - &\textbf{No rechaza $H_0$} & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ \\ \hline + Identidad & \textbf{No rechaza $H_0$} & - & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ \\ \hline + Threshold de $2x$ & Rechaza $H_0$ & Rechaza $H_0$ & - & Rechaza $H_0$ & \textbf{No rechaza $H_0$} \\ \hline + CosineSquasher & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ & - & Rechaza $H_0$ \\ \hline + Indicadora de 0 & Rechaza $H_0$ & Rechaza $H_0$ & \textbf{No rechaza $H_0$} & Rechaza $H_0$ & - \\ \hline + Rampa & Rechaza $H_0$ & Rechaza $H_0$ & \textbf{No rechaza $H_0$} & Rechaza $H_0$ & Rechaza $H_0$ \\ \hline + ReLU & Rechaza $H_0$ & Rechaza $H_0$ & \textbf{No rechaza $H_0$} & Rechaza $H_0$ & \textbf{No rechaza $H_0$} \\ \hline + Sigmoid & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ \\ \hline + Tangente hiperbólica & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ \\ \hline + Valor absoluto & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ \\ \hline + Coseno & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ \\ \hline + Hardtanh & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ \\ \hline + LReLU & Rechaza $H_0$ & Rechaza $H_0$ & \textbf{No rechaza $H_0$} & Rechaza $H_0$ & \textbf{No rechaza $H_0$} \\ \hline + \end{tabular} + } + \caption{Resultados 1 de 3: Rechazos con un $95\%$ de confianza en el test Wilcoxon.} + \label{Rechazo-1-de-3} +\end{table} + +\begin{table}[H] + \resizebox{\textwidth}{!}{ + \begin{tabular}{|l|l|l|l|l|} + \hline + ~ & Rampa & ReLU & Sigmoid & Tangente hiperbólica \\ \hline + cte 1 & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ \\ \hline + Identidad & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ \\ \hline + Threshold de $2x$ & \textbf{No rechaza $H_0$} & \textbf{No rechaza $H_0$} & Rechaza $H_0$ & Rechaza $H_0$ \\ \hline + CosineSquasher & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ \\ \hline + Indicadora de 0 & Rechaza $H_0$ & \textbf{No rechaza $H_0$} & Rechaza $H_0$ & Rechaza $H_0$ \\ \hline + Rampa & - & \textbf{No rechaza $H_0$} & Rechaza $H_0$ & Rechaza $H_0$ \\ \hline + ReLU & \textbf{No rechaza $H_0$} & - & Rechaza $H_0$ & Rechaza $H_0$ \\ \hline + Sigmoid & Rechaza $H_0$ & Rechaza $H_0$ & - & Rechaza $H_0$ \\ \hline + Tangente hiperbólica & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ & - \\ \hline + Valor absoluto & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ \\ \hline + Coseno & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ \\ \hline + Hardtanh & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ \\ \hline + LReLU & \textbf{No rechaza $H_0$} & \textbf{No rechaza $H_0$} & Rechaza $H_0$ & Rechaza $H_0$ \\ \hline + \end{tabular} + } + \caption{Resultados 2 de 3: Rechazos con un $95\%$ de confianza en el test Wilcoxon.} + \label{Rechazo-2-de-3} +\end{table} + +\begin{table}[H] + \resizebox{\textwidth}{!}{ + \begin{tabular}{|l|l|l|l|l|} + \hline + ~ & Valor absoluto & Coseno & Hardtanh & LReLU \\ \hline + cte 1 & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ \\ \hline + Identidad & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$& Rechaza $H_0$ \\ \hline + Threshold de $2x$ & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ & \textbf{No rechaza $H_0$} \\ \hline + CosineSquasher & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ \\ \hline + Indicadora de 0 & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ & \textbf{No rechaza $H_0$} \\ \hline + Rampa & Rechaza $H_0$& Rechaza $H_0$ & Rechaza $H_0$ & \textbf{No rechaza $H_0$} \\ \hline + ReLU & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ & \textbf{No rechaza $H_0$} \\ \hline + Sigmoid & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ \\ \hline + Tangente hiperbólica & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ \\ \hline + Valor absoluto & - & Rechaza $H_0$ & Rechaza $H_0$ & \textbf{No rechaza $H_0$} \\ \hline + Coseno & Rechaza $H_0$ & - & Rechaza $H_0$ & Rechaza $H_0$ \\ \hline + Hardtanh & Rechaza $H_0$ & Rechaza $H_0$ & - & Rechaza $H_0$ \\ \hline + LReLU & Rechaza $H_0$ & \textbf{No rechaza $H_0$} & Rechaza $H_0$ & - \\ \hline + \end{tabular} + } + \caption{Resultados 3 de 3: Rechazos con un $95\%$ de confianza en el test Wilcoxon.} + \label{Rechazo-3-de-3} +\end{table} + +Como ya comentábamos, si la hipótesis nula es rechazada podemos suponer que hay una diferencia +de tiempo significativas; en caso contrario no podemos saber nada. + +Sin embargo podemos entender estos rechazos como una clase de equivalencia; es decir, la diferencia en coste computacional no es tan significativa, dentro de ese grupo. De hecho, como podemos apreciar en la tabla \ref{Tiempos-ejecucion-comparativas}, que está ordenada de menor tiempo a mayor, + estos se encuentra en posiciones consecutivas. + +\begin{table}[H] + \centering + \begin{tabular}{|l|l|l|l|} + \hline + Función & Mediana & Media Tiempo & Desviación típica \\ \hline + cte 1 (para comparar) & 1475,959 & 1473,478 & 26,332 \\ \hline + Identidad (para comparar) & 1479,817 & 1467,311 & 27,021 \\ \hline + Hardtanh & 1495,105 & 1491,046 & 21,334 \\ \hline + CosineSquasher & 1522,128 & 1521,117 & 19,223 \\ \hline + ReLU & 1546,379 & 1552,049 & 21,435 \\ \hline + Indicadora de 0 & 1554,432 & 1556,114 & 21,814 \\ \hline + Rampa & 1557,449 & 1552,169 & 25,043 \\ \hline + Threshold de $2x$ & 1562,809 & 1556,669 & 23,029 \\ \hline + LReLU & 1564,124 & 1561,367 & 21,722 \\ \hline + Valor absoluto & 1583,266 & 1580,545 & 23,464 \\ \hline + Sigmoid & 1608,797 & 1601,079 & 21,938 \\ \hline + Coseno & 1630,392 & 1629,634 & 26,113 \\ \hline + Tangente hiperbólica & 1664,006 & 1653,295 & 23,025 \\ \hline + \end{tabular} + \caption{Tiempo de ejecución en segundos} + \label{Tiempos-ejecucion-comparativas} +\end{table} + + +Si volvemos a nuestro objetivo, que era encontrar el representante de +menor costo entre las agrupaciones dispuestas en la tabla \ref{table:Clases-equivalencia-activation-function}. Concluimos que los mejores candidatos son: + +\begin{itemize} + \item Para el \textit{grupo escalera}: No se ha rechazado la hipótesis nula, luego a priori no hay deferencia significativa y podemos seleccionar el candidato que queramos. + \item Para el \textit{grupo sigmoide}: La mejor opción ha sido \textit{Hard Hyperbolic Function} y después en orden de mejor a peor: \textit{Cosine Squasher}, rampa, sigmodea y tangente hiperbólica. + \item Pare el \textit{grupo ReLU}: No se ha rechazado la hipótesis nula, así que no podemos decir nada. +\end{itemize} + diff --git a/Memoria/capitulos/5-Estudio_experimental/2_algoritmo-inicializacion-pesos.tex b/Memoria/capitulos/5-Estudio_experimental/2_algoritmo-inicializacion-pesos.tex new file mode 100644 index 0000000..2fdeebb --- /dev/null +++ b/Memoria/capitulos/5-Estudio_experimental/2_algoritmo-inicializacion-pesos.tex @@ -0,0 +1,129 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Experimentación con ALGORITMO INICIALIZACIÓN DE PESOS +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\chapter{Algoritmo de inicialización pesos de una red neuronal} + +Se desea conocer la bondad del algoritmo propuesto +en \ref{section:inicializar_pesos} que plantea dos objetivos múltiples en lo que respecta a la inicialización de pesos de una red neuronal: + +\begin{itemize} + \item Su inicialización reporta un beneficio considerable con respecto a una inicialización aleatoria. + \item A mismo tiempo es más ventajoso que utilizar un descenso de gradiente. +\end{itemize} + +Para ello se han diseñado dos experimentos: + +\section{Experimento 1: Contraste de hipótesis con inicialización aleatoria} +\label{ch07:experimento-1} + +Las preguntas a resolver son ¿mejora nuestro algoritmo? ¿Cuánto mejora? + +La primera observación es que como +hemos observado en el modelado de una red neuronal +en la sección \ref{ch05:construction-evaluation-nnnn} +una red neuronal depende de varios parámetros: +la dimensión de entrada $d$, el número de neuronas en la capa oculta $n$, la dimensión de salida $s$ +y la funciones de activación de cada neurona. + +Por simplicidad fijaremos una función de activación +Así que deberemos de formular el test +para diferentes tamaños $n$, $d$, $s$. + +\textcolor{red}{Ahora mismo no tengo muy claro +los tamaños porque tampoco quiero que dure mucho tiempo la realización del experimento, los concretaré tras unas primeras pruebas}. + +\subsection{Descripción experimento} + +El experimento costa de los siguientes pasos: + +\begin{enumerate} +% Paso 0: Selección de data sets +\item Dado un conjunto de datos de entrenamiento $\D$ se separará el conjunto en +\begin{itemize} + \item $\D_i$ \textbf{Conjunto de + datos de inicialización.} Debe de ser mayor que + $n$ y lo suficientemente grande para que el algoritmo diseñado funcione correctamente. + + \item $\D_t$ \textbf{Conjunto de + datos de test.} Se utilizarán para el cálculo del error. +\end{itemize} + +% Paso 1: Construcción +\item Fijados $n, d$ y $s$ se generarán dos redes neuronales: + +\begin{itemize} + \item Una inicializada de manera aleatoria con valores dentro de un rango de valores. + + \item Otra inicializada con nuestro algoritmo. +\end{itemize} + +% Paso 2: Evaluación del error +\item Utilizando $\D_t$ deberá de tomarse un registro del error dentro de tal muestra. +\end{enumerate} + +Los pasos 2 y 3 se repetirán tantas veces como +muestras se desee tomar. + +\subsection{Contraste de hipótesis} + +Se desea comparar si los errores observados efectivamente son notables: + +Para ello se realizará un test de Wilcoxon, con las siguientes hipótesis + +\begin{itemize} + \item $H_0$: La mediana de las diferencia de cada par de muestras es $0$. + \item $H_a$: La mediana de las diferencia entre cada par de muestras es diferente de cero. +\end{itemize} + +La utilidad de este test es que si rechaza la hipótesis la hipótesis nula sabremos que con un $95 \%$ de certeza tendrán medianas diferentes, es decir, \textbf{existe una +diferencia en los errores}. En caso de que no se rechace no podremos afirmar nada. +Puede encontrar la implementación en el repositorio del + proyecto \footnote{En el directorio de experimentos + de \url{https://github.com/BlancaCC/TFG-Estudio-de-las-redes-neuronales}.}. + +\subsection{Requisitos técnicos} + +A la vista de todo el proceso es descrito surgen las siguientes necesidades técnicas que deberemos de implementar: + +\subsubsection{Capacidad de crear una red neuronal aleatoria} + +Deberá de crearse una red neuronal con entradas dentro de un rango $[a,b]$ con $a < b$ reales, +que tenga una entrada de tamaño $d$, +$n$ neuronas en la capa oculta y +una dimensión de salida $d$. + +\subsubsection{Implementación del algoritmo de inicialización} + +Deberá de implementarse del algoritmo \ref{algo:algoritmo-iniciar-pesos} con todos los requisitos y atributos que ahí se describe. + +\subsubsection{Función para medir el error} + +Deberá implementarse una función para medir el + error, no es lo mismo problemas de clasificación +que de regresión, así que deberemos de ir con +cuidado. + +Además deberá de realizarse una busca de los datos + +\subsubsection{ Forma de evaluar las redes neuronales} + +Dado una red neuronal, una función de evaluación y un datos ser capaz de aplicar el algoritmo de \textit{forward propagation} descrito en \ref{algoritmo:evaluar red neuronal}. + + +\subsubsection{Bases de datos de prueba} +\textcolor{red}{Nota: +Comenzaremos probando con bases de datos de juguete +y en función de tiempo y prestaciones ya veremos si merece la pena plantearse el uso de datos reales +} + +\subsubsection{Implementación del experimento} +Deberá de implementarse una función que realice el +experimento tal cual hemos descrito en \ref{ch07:experimento-1}. + +Podrían utilizarse alguno de estos: + +\begin{itemize} + \item \href{https://github.com/JuliaStats/RDatasets.jl}{Julia contiene las base de datos estándar de R}. + \item \href{https://juliaml.github.io/MLDatasets.jl/stable/}{Otros paquetes básicos provistos también por la comunidad.} +\end{itemize} diff --git a/Memoria/paquetes/comandos-entornos.tex b/Memoria/paquetes/comandos-entornos.tex index 8fd8354..b057a54 100644 --- a/Memoria/paquetes/comandos-entornos.tex +++ b/Memoria/paquetes/comandos-entornos.tex @@ -8,6 +8,9 @@ \newcommand{\Q}{\mathbb{Q}} % Racionales \newcommand{\C}{\mathbb{C}} % Complejos +% Otros espacios +\newcommand{\D}{\mathcal{D}} % Conjunto de datos de entrenamiento + %%%%%%%%% Mis comandos %%%%%%%%% % Para escribir código y pseudo código \usepackage{minted} diff --git a/Memoria/tfg.tex b/Memoria/tfg.tex index 18799b1..8059f5b 100644 --- a/Memoria/tfg.tex +++ b/Memoria/tfg.tex @@ -264,8 +264,9 @@ \chapter{Las redes neuronales son aproximadores universales} % Hipótesis -\part{Estudio experimental y exploración hipótesis planteadas} -\include{capitulos/5-Estudio_experimental/funciones_activacion} +\part{Exploración de las hipótesis planteadas y estudio experimental de las mismas} +\include{capitulos/5-Estudio_experimental/1_funciones_activacion} +\include{capitulos/5-Estudio_experimental/2_algoritmo-inicializacion-pesos} \include{capitulos/N-Exploracion-hipotesis-planteadas/hipotesis} From 08ef47fe795b28154270ecc52a30c38c12b6a894 Mon Sep 17 00:00:00 2001 From: Blanca Date: Wed, 25 May 2022 20:05:07 +0200 Subject: [PATCH 02/76] Borra archivo renombrado #109 --- .../funciones_activacion.tex | 513 ------------------ 1 file changed, 513 deletions(-) delete mode 100644 Memoria/capitulos/5-Estudio_experimental/funciones_activacion.tex diff --git a/Memoria/capitulos/5-Estudio_experimental/funciones_activacion.tex b/Memoria/capitulos/5-Estudio_experimental/funciones_activacion.tex deleted file mode 100644 index c20a71d..0000000 --- a/Memoria/capitulos/5-Estudio_experimental/funciones_activacion.tex +++ /dev/null @@ -1,513 +0,0 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Estudio empírico de las funciones de activación -%%%%%% -% 1. Comparativas en cuanto a coste computacional. -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\chapter{Funciones de activación} -\label{funciones-activacion-democraticas-mas-demoscraticas} -Como se observó en -\ref{def:funcion_activacion_articulo} -se desconoce teóricamente si una función de activación va a ser -mejor que otra, es por ello y puesto que nuestro objetivo -es reducir el coste computacional de una red neuronal -que procederemos a realizar un análisis del costo de las redes neuronales. - - -\section{Caracterización de las funciones de activación} - -Si bien por conveniencia teórica definimos las funciones de activación en \ref{def:funcion_activacion_articulo} -como una función de $\phi:\R \longrightarrow [0,1]$, no -decreciente, con uno como límite en infinito y cero como límite a -menos infinito. - -% Nota sobre el concepto de función no polinómica -\setlength{\marginparwidth}{\bigMarginSize} -\marginpar{\maginLetterSize - \iconoAclaraciones \textcolor{dark_green}{ - \textbf{ - Función no polinómica - } - } - - Que no es un polinomio. -} -Nos basaremos en el concepto \textit{actual} de función de activación: -basta con que sea una función no polinómica -(véanse los artículos \cite{DBLP:journals/corr/SonodaM15}, \cite{modern-trainable-activation-functions} y \cite{FUNAHASHI1989183}), -además también incluiremos la función de activación identidad. - -Funciones no polinómicas hay infinitas y reincidimos en que a priori no hay una mejor que otra; por tanto, como criterio de selección nos guiaremos por la intuición que nos brinda la demostración del teorema \ref{teorema:2_3_uniformemente_denso_compactos}. - La imagen de una función de activación es relevante a la hora de aproximar la función ideal desconocida, ya que reduce el número - de neuronas si se usa convenientemente. -Por lo tanto, una buena heurística sería disponer de un repertorio básico de funciones de activación que contemplen distintas imágenes no polinómicas. - -Además de las propuestas en \ref{def:funcion_activacion_articulo}, -añadimos a nuestra colección las siguientes. - - -\begin{table}[H] - \centering - \resizebox{\textwidth}{!}{ - \begin{tabular}{| c | c | c | c |} - \hline - Nombre & Expresión & Rango imagen & Gráfica \\ - \hline - %%%%%%%% Identidad %%%%%%% - % Nombre: - Identidad - & %expresión - $Id(x) = x$ - & % Rango imagen - $(-\infty, +\infty)$ - & % Gráfica - \begin{minipage}{\coeficienteAncho\textwidth} - \includegraphics[width=\linewidth]{funciones-activacion/Identidad.png} - \end{minipage} - \\ - \hline - %%%%%%%% Indicadora %%%%%%% - % Nombre: - Indicadora $\lambda \in \R$ - & %expresión - $Indicadora_\lambda(x) = 1_{\{x > \lambda\}}$ - & % Rango imagen - $\{0,1\}$ - & % Gráfica - \begin{minipage}{\coeficienteAncho\textwidth} - \includegraphics[width=\linewidth]{funciones-activacion/Indicadora de 0.png} - \end{minipage} - \\ - \hline - %%%%%%%% Función umbral %%%%%%% - % Nombre: - Función umbral $p$ polinomio - & %expresión - $Threshold(x) = 1_{\{p(x) > 0\}}$ - & % Rango imagen - $\{0,1\}$ - & % Gráfica - \begin{minipage}{\coeficienteAncho\textwidth} - \includegraphics[width=\linewidth]{funciones-activacion/Threshold de polinomio 2x.png} - \end{minipage} - \\ - \hline - %%%%%%%% Función rampa %%%%%%% - % Nombre: - Función rampa - & %expresión - $Rampa(x) = x 1_{\{0 < x <1\}} + 1_{\{x \geq 1\}}$ - & % Rango imagen - $[0,1]$ - & % Gráfica - \begin{minipage}{\coeficienteAncho\textwidth} - \includegraphics[width=\linewidth]{funciones-activacion/Rampa.png} - \end{minipage} - \\ - \hline - %%%%%%%% sigmoide %%%%%%%% - % Nombre: - Sigmoidea - & %expresión - $\sigma(x) = \frac{1}{1+e^{-x}}$ - & %Rango imagen - $(0,1)$ - & % Gráfica - \begin{minipage}{\coeficienteAncho\textwidth} - \includegraphics[width=\linewidth]{funciones-activacion/Sigmoid.png} - \end{minipage} - \\ - \hline - %%%%%%%% Tangente hiperbólica %%%%%%%% - % Nombre: - Tangente hiperbólica - & %expresión - $\tanh$ - & %Rango imagen - $(-1,1)$ - & % Gráfica - \begin{minipage}{\coeficienteAncho\textwidth} - \includegraphics[width=\linewidth]{funciones-activacion/Tangente hiperbolica.png} - \end{minipage} - \\ - \hline - %%%%%%%% Valor absoluto%%%%%%%% - % Nombre: - Valor absoluto - & %expresión - $abs(x)= |x|$ - & %Rango imagen - $[0,+\infty]$ - & % Gráfica - \begin{minipage}{\coeficienteAncho\textwidth} - \includegraphics[width=\linewidth]{funciones-activacion/Valor absoluto.png} - \end{minipage} - \\ - \hline - %%%%%%%% Coseno %%%%%%%% - % Nombre: - Coseno - & %expresión - $\cos$ - & %Rango imagen - $[-1,1]$ - & % Gráfica - \begin{minipage}{\coeficienteAncho\textwidth} - \includegraphics[width=\linewidth]{funciones-activacion/coseno.png} - \end{minipage} - \\ - \hline - %%%%%%%% Cosine Squasher %%%%%%%% - % Nombre: - \textit{Cosine Squasher} - & %expresión - $CosineSquasher(x)=\left(1 + \cos\left(x + 3 \frac{\pi}{2} \right) \frac{1}{2}\right) - 1_{\{\frac{-\pi}{2} \leq x \leq \frac{\pi}{2}\}} - + - 1_{\{ \frac{\pi}{2} < \lambda \}}.$ - & %Rango imagen - $[0,1]$ - & % Gráfica - \begin{minipage}{\coeficienteAncho\textwidth} - \includegraphics[width=\linewidth]{funciones-activacion/Cosine CosineSquasher.png} - \end{minipage} - \\ - \hline - %%%%%%%% ReLU %%%%%%%% - % Nombre: - \textit{ReLU} - & %expresión - $ReLU(x) = \max(0,x)$ - & %Rango imagen - $[0,+\infty)$ - & % Gráfica - \begin{minipage}{\coeficienteAncho\textwidth} - \includegraphics[width=\linewidth]{funciones-activacion/ReLU.png} - \end{minipage} - \\ - \hline - %%%%%%%% Hard Hyperbolic Function %%%%%%%% - % Nombre: - \textit{Hard Hyperbolic Function} - & %expresión - $Hardtanh(x) =\left\{ \begin{array}{lcc} - -1 & si & x \leq -1 \\ - \\ x & si & -1< x < 1 \\ - \\ 1& si & x \geq 1 - \end{array} - \right.$ - & %Rango imagen - $[-1,1]$ - & % Gráfica - \begin{minipage}{\coeficienteAncho\textwidth} - \includegraphics[width=\linewidth]{funciones-activacion/hardtanh.png} - \end{minipage} - \\ - \hline - %%%%%%%% Leaky ReLU%%%%%%% - % Nombre: - \textit{Leaky ReLU} - & %expresión - $\begin{array}{c} - - LReLU_{\alpha}(x) =\left\{ \begin{array}{lcc} - \alpha x & si & x \leq 0 \\ - \\ x& si & x > 0 - \end{array} - \right. - \\ - \text{con } \alpha \in \R^+ \text{valor }\textit{pequeño}. - \end{array} - $ - & % Rango imagen - $[0, +\infty)$ - & % Gráfica - \begin{minipage}{\coeficienteAncho\textwidth} - \includegraphics[width=\linewidth]{funciones-activacion/LReLU.png} - \end{minipage} - \\ - \hline - \end{tabular} - } % fin de llave de ajustarse al ancho de la página - \caption{Compendio de funciones de activación} - \label{table:funciones-de-activation} -\end{table} - -\begin{aportacionOriginal} - -\begin{teorema}\label{teo:eficacia-funciones-activation} - Sea $\phi \in \mathcal{A}(\R^2)$ una transformación afín, sean dos funciones de activación $\sigma, \gamma$ tales que - \begin{equation*} - \phi \circ \sigma = \gamma, - \end{equation*} - entonces para - el espacio de redes neuronales de $n$ neuronas creado con la función de activación $\sigma$ es - igual al espacio de redes neuronales creado con la función de activación $\gamma$. -\end{teorema} -\begin{proof} - - Sea $\mathcal{H}^+_{\sigma, n}(\R^d, \R^s)$, el espacio de redes neuronales con $n$ neuronas con sesgo. - - Para cualquier $h \in \mathcal{H}^+_{\sigma, n}(\R^d, \R^s)$ - la proyección i-ésima de $h$ será de la forma - - \begin{equation*} - h_i(x) = \sum^n_{j=1}(\beta_{j} \sigma(A_j(x))+ k_j), - \end{equation*} - con $x \in \R^d, \beta_{j}, k_j \in \R, A_j \in \afines$. - - Procedemos a definir $\tilde{h}_i(x)$ como sigue y - se tiene que - \begin{equation*} - \tilde{h}_i(x) - = \sum^n_{j=1}(\beta_{j} \phi(\sigma(A_j(x)))+ k_j) - = \sum^n_{j=1}(\tilde{\beta}_{j} \sigma(\tilde{A}_j(x))+ \tilde{k_j}), - \end{equation*} - con $x \in \R^d, \tilde \beta_{j}, \tilde k_j \in \R, \tilde{A}_j \in \afines$, - por lo que está claro que $\tilde{h}_i(x) \in \mathcal{H}^+_{\sigma, n}(\R^d, \R^s)$. - - Pero por hipótesis del teorema $\phi \circ \sigma = \gamma$, por lo que $\tilde{h}_i(x) \in \mathcal{H}^+_{\gamma, n}(\R^d, \R^s)$. - - Basta con considerar la transformación afín inversa para ver que ambos espacios son isomorfos - \begin{equation*} - \mathcal{H}^+_{\gamma, n}(\R^d, \R^s) \simeq \mathcal{H}^+_{\sigma, n}(\R^d, \R^s). - \end{equation*} - - Dos conjuntos isomorfos donde para cualquier $h \in \mathcal{H}^+_{\gamma, n}(\R^d, \R^s)$, - se tiene que $h \in \mathcal{H}^+_{\sigma, n}(\R^d, \R^s)$ via el isomorfismo y - luego componer con la inversa de la aplicación afín. - - Como demostramos en \ref{consideration-irrelevancia-sesgo} se tiene que - \begin{equation*} - \mathcal{H}^+_{\sigma, n}(\R^d, \R^s) = \mathcal{H}^+_{\gamma, n}(\R^d, \R^s) - \subset - \mathcal{H}_{\gamma, n+1}(\R^d, \R^s) - \subset - \mathcal{H}^+_{\gamma, {n+1}}(\R^d, \R^s) = \mathcal{H}^+_{\sigma, {n+1}}(\R^d, \R^s) - . - \end{equation*} - Por lo que para un $n$ arbitrariamente grande, se acaba de probar lo buscado. - \begin{equation*} - \mathcal{H}_{\gamma}(\R^d, \R^s) = \mathcal{H}_{\sigma}(\R^d, \R^s). - \end{equation*} -\end{proof} -\end{aportacionOriginal} - -\subsubsection*{\iconoAclaraciones \textcolor{dark_green}{Relevancia práctica del teorema}} -Este teorema lo que nos está diciendo es que si dos funciones de activación tienen \textit{la misma forma} -(independientemente de su grafo) -entonces \textbf{aproximarán igual de bien}, -es decir, con el mismo error dentro de un conjunto de datos. - Esto a nivel práctico significa que \textbf{si se tienen dos funciones de activación - \textit{con la misma forma} (o muy parecidas) elige - la que tenga menor costo computacional}, porque a - nivel teórico aproximarán igual de bien y de esta - manera ahorraremos recursos. - -Notemos además que la demostración nos enseña que la igualdad se da independientemente del número de -neuronas fijado, es decir que no es un resultado -asintótico (lo asintótico en términos prácticos -significa que sea resultado de una serie de -aproximaciones). - - -Así pues a la vista de la imágenes de las distintas funciones de activación -recogidas en la tabla \ref{table:funciones-de-activation} y -por el recién probado teorema \ref{teo:eficacia-funciones-activation} podemos determinar a priori -que de manera teórica existen conjuntos de funciones que aproximadamente puedes producir los mismos resultado, -compararemos entonces su coste computacional y tomaremos como representante de la clase aquel que sea de menor coste. - -\begin{table}[H] - \centering - \begin{tabular}{| c | c | c | } - \hline - \textit{Grupo escalera} & \textit{Grupo sigmoide} & \textit{Grupo ReLU} \\ - \hline - & Rampa & \\ - Indicadora & Sigmodea & ReLU\\ - Umbral & \textit{Cosine Squasher}& LReLU\\ - & tanh & \\ - & \textit{Hard Hyperbolic Function}& \\ -\hline - \end{tabular} - \caption{Agrupaciones de funciones de activación con forma similar} - \label{table:Clases-equivalencia-activation-function} -\end{table} - -\subsection{ Implementación de las funciones de activación en la biblioteca de redes neuronales} - -Las funciones de activación han sido implementadas con cuidado de que sean eficientes -y valiéndose de las características propias de Julia, para ello se han utilizado técnicas como: - -\begin{itemize} - \item \textbf{Programación modular}: Tal y como se recomienda en la documentación de Julia \footnote{ - Consultada en la página web oficial de Julia a día 23 de mayo del 2022 con URL: \url{https://docs.julialang.org/en/v1/manual/modules/} - } se ha utilizado una módulo en la implementación de la biblioteca, esto aporta los siguientes beneficios: - \begin{itemize} - \item Los módulos pueden ser precompilados y de esta manera se aceleraría la carga y el tiempo de inicialización. - \item Encapsulamiento de los métodos y facilidades de uso del espacio de nombres, lo cual forma parte - de una buena metodología de programación. - \end{itemize} - \item \textbf{Macros}\footnote{La información consultada de macros ha sido de la página oficial de Julia, a día 23 de mayo del 2022, URL: - \url{https://docs.julialang.org/en/v1/manual/metaprogramming}}: - que permiten sustituciones de código cuando el código es analizado por el compilador, - de esta manera, funciones que devuelven otras funciones dependientes de un parámetro se verán beneficiadas. - Puede encontrar la implementación de esto en la biblioteca de redes neuronales implementada en nuestro - repositorio \footnote{Esto es en \url{https://github.com/BlancaCC/TFG-Estudio-de-las-redes-neuronales/tree/main/Biblioteca-Redes-Neuronales/src/activation_functions.jl}} -\end{itemize} - - - - -\subsection{Coste computacional funciones activación } -\label{ch06:coste-computacional-funciones-activacion} - -\subsubsection{Diseño del experimento} -El experimento para comparar los resultados ha consistido: -Se ha evaluado cada función a comparar $20000000$ veces y se ha medido cuanto tarda. -Esto se ha repetido $15$ veces. Puede encontrar la implementación concreta y los resultados concretos de cada iteración en el repositorio del -proyecto \footnote{En el directorio de experimentos -de \url{https://github.com/BlancaCC/TFG-Estudio-de-las-redes-neuronales}.}. - -\subsubsection{Test de hipótesis} - -Compararemos si los resultados son significativos utilizando la \textbf{prueba de los rangos con -signo de Wilcoxon} (véase \cite{OpenIntroStatistics}, \cite{BiologicalStatistics}, o la web de \href{https://www.cienciadedatos.net}{cienciadedatos.net} \footnote{ - Prueba de los rangos con signo de Wilcoxon by Joaquín Amat Rodrigo, available under a Attribution 4.0 International (CC BY 4.0) at - \url{https://www.cienciadedatos.net/documentos/18_prueba_de_los_rangos_con_signo_de_wilcoxon} - Con fecha de visita el 22 de mayo del 2022. - }). - - La motivación de realizar esta prueba es la siguiente: -\begin{itemize} - \item Las muestras son independientes. - \item Los datos tomados, el tiempo, permiten ser ordenados. - \item El tamaño de muestra es pequeño y no podemos asegurar normalidad de la datos. -\end{itemize} - -\subsubsection*{Hipótesis} - -\begin{itemize} - \item $H_0$: La mediana de las diferencia de cada par de datos es $0$. - \item $H_a$: La mediana de las diferencia entre cada par de datos es diferente de cero. -\end{itemize} - -La utilidad de este test es que si rechaza la hipótesis la hipótesis nula sabremos que con un $95 \%$ de certeza tendrán medianas diferentes, es decir, \textbf{existe una -diferencia de tiempos}. En caso de que no se rechace no podremos afirmar nada. -Puede encontrar la implementación en el repositorio del - proyecto \footnote{En el directorio de experimentos - de \url{https://github.com/BlancaCC/TFG-Estudio-de-las-redes-neuronales}.}. - - Los resultados del test de Wilcoxon han sido los siguientes: - - \begin{table}[H] - \resizebox{\textwidth}{!}{ - \begin{tabular}{|l|l|l|l|l|l|} - \hline - ~ & cte 1 & Identidad & Threshold de $2x$ & CosineSquasher & Indicadora de 0 \\ \hline - cte 1 & - &\textbf{No rechaza $H_0$} & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ \\ \hline - Identidad & \textbf{No rechaza $H_0$} & - & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ \\ \hline - Threshold de $2x$ & Rechaza $H_0$ & Rechaza $H_0$ & - & Rechaza $H_0$ & \textbf{No rechaza $H_0$} \\ \hline - CosineSquasher & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ & - & Rechaza $H_0$ \\ \hline - Indicadora de 0 & Rechaza $H_0$ & Rechaza $H_0$ & \textbf{No rechaza $H_0$} & Rechaza $H_0$ & - \\ \hline - Rampa & Rechaza $H_0$ & Rechaza $H_0$ & \textbf{No rechaza $H_0$} & Rechaza $H_0$ & Rechaza $H_0$ \\ \hline - ReLU & Rechaza $H_0$ & Rechaza $H_0$ & \textbf{No rechaza $H_0$} & Rechaza $H_0$ & \textbf{No rechaza $H_0$} \\ \hline - Sigmoid & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ \\ \hline - Tangente hiperbólica & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ \\ \hline - Valor absoluto & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ \\ \hline - Coseno & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ \\ \hline - Hardtanh & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ \\ \hline - LReLU & Rechaza $H_0$ & Rechaza $H_0$ & \textbf{No rechaza $H_0$} & Rechaza $H_0$ & \textbf{No rechaza $H_0$} \\ \hline - \end{tabular} - } - \caption{Resultados 1 de 3: Rechazos con un $95\%$ de confianza en el test Wilcoxon.} - \label{Rechazo-1-de-3} -\end{table} - -\begin{table}[H] - \resizebox{\textwidth}{!}{ - \begin{tabular}{|l|l|l|l|l|} - \hline - ~ & Rampa & ReLU & Sigmoid & Tangente hiperbólica \\ \hline - cte 1 & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ \\ \hline - Identidad & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ \\ \hline - Threshold de $2x$ & \textbf{No rechaza $H_0$} & \textbf{No rechaza $H_0$} & Rechaza $H_0$ & Rechaza $H_0$ \\ \hline - CosineSquasher & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ \\ \hline - Indicadora de 0 & Rechaza $H_0$ & \textbf{No rechaza $H_0$} & Rechaza $H_0$ & Rechaza $H_0$ \\ \hline - Rampa & - & \textbf{No rechaza $H_0$} & Rechaza $H_0$ & Rechaza $H_0$ \\ \hline - ReLU & \textbf{No rechaza $H_0$} & - & Rechaza $H_0$ & Rechaza $H_0$ \\ \hline - Sigmoid & Rechaza $H_0$ & Rechaza $H_0$ & - & Rechaza $H_0$ \\ \hline - Tangente hiperbólica & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ & - \\ \hline - Valor absoluto & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ \\ \hline - Coseno & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ \\ \hline - Hardtanh & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ \\ \hline - LReLU & \textbf{No rechaza $H_0$} & \textbf{No rechaza $H_0$} & Rechaza $H_0$ & Rechaza $H_0$ \\ \hline - \end{tabular} - } - \caption{Resultados 2 de 3: Rechazos con un $95\%$ de confianza en el test Wilcoxon.} - \label{Rechazo-2-de-3} -\end{table} - -\begin{table}[H] - \resizebox{\textwidth}{!}{ - \begin{tabular}{|l|l|l|l|l|} - \hline - ~ & Valor absoluto & Coseno & Hardtanh & LReLU \\ \hline - cte 1 & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ \\ \hline - Identidad & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$& Rechaza $H_0$ \\ \hline - Threshold de $2x$ & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ & \textbf{No rechaza $H_0$} \\ \hline - CosineSquasher & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ \\ \hline - Indicadora de 0 & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ & \textbf{No rechaza $H_0$} \\ \hline - Rampa & Rechaza $H_0$& Rechaza $H_0$ & Rechaza $H_0$ & \textbf{No rechaza $H_0$} \\ \hline - ReLU & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ & \textbf{No rechaza $H_0$} \\ \hline - Sigmoid & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ \\ \hline - Tangente hiperbólica & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ & Rechaza $H_0$ \\ \hline - Valor absoluto & - & Rechaza $H_0$ & Rechaza $H_0$ & \textbf{No rechaza $H_0$} \\ \hline - Coseno & Rechaza $H_0$ & - & Rechaza $H_0$ & Rechaza $H_0$ \\ \hline - Hardtanh & Rechaza $H_0$ & Rechaza $H_0$ & - & Rechaza $H_0$ \\ \hline - LReLU & Rechaza $H_0$ & \textbf{No rechaza $H_0$} & Rechaza $H_0$ & - \\ \hline - \end{tabular} - } - \caption{Resultados 3 de 3: Rechazos con un $95\%$ de confianza en el test Wilcoxon.} - \label{Rechazo-3-de-3} -\end{table} - -Como ya comentábamos, si la hipótesis nula es rechazada podemos suponer que hay una diferencia -de tiempo significativas; en caso contrario no podemos saber nada. - -Sin embargo podemos entender estos rechazos como una clase de equivalencia; es decir, la diferencia en coste computacional no es tan significativa, dentro de ese grupo. De hecho, como podemos apreciar en la tabla \ref{Tiempos-ejecucion-comparativas}, que está ordenada de menor tiempo a mayor, - estos se encuentra en posiciones consecutivas. - -\begin{table}[H] - \centering - \begin{tabular}{|l|l|l|l|} - \hline - Función & Mediana & Media Tiempo & Desviación típica \\ \hline - cte 1 (para comparar) & 1475,959 & 1473,478 & 26,332 \\ \hline - Identidad (para comparar) & 1479,817 & 1467,311 & 27,021 \\ \hline - Hardtanh & 1495,105 & 1491,046 & 21,334 \\ \hline - CosineSquasher & 1522,128 & 1521,117 & 19,223 \\ \hline - ReLU & 1546,379 & 1552,049 & 21,435 \\ \hline - Indicadora de 0 & 1554,432 & 1556,114 & 21,814 \\ \hline - Rampa & 1557,449 & 1552,169 & 25,043 \\ \hline - Threshold de $2x$ & 1562,809 & 1556,669 & 23,029 \\ \hline - LReLU & 1564,124 & 1561,367 & 21,722 \\ \hline - Valor absoluto & 1583,266 & 1580,545 & 23,464 \\ \hline - Sigmoid & 1608,797 & 1601,079 & 21,938 \\ \hline - Coseno & 1630,392 & 1629,634 & 26,113 \\ \hline - Tangente hiperbólica & 1664,006 & 1653,295 & 23,025 \\ \hline - \end{tabular} - \caption{Tiempo de ejecución en segundos} - \label{Tiempos-ejecucion-comparativas} -\end{table} - - -Si volvemos a nuestro objetivo, que era encontrar el representante de -menor costo entre las agrupaciones dispuestas en la tabla \ref{table:Clases-equivalencia-activation-function}. Concluimos que los mejores candidatos son: - -\begin{itemize} - \item Para el \textit{grupo escalera}: No se ha rechazado la hipótesis nula, luego a priori no hay deferencia significativa y podemos seleccionar el candidato que queramos. - \item Para el \textit{grupo sigmoide}: La mejor opción ha sido \textit{Hard Hyperbolic Function} y después en orden de mejor a peor: \textit{Cosine Squasher}, rampa, sigmodea y tangente hiperbólica. - \item Pare el \textit{grupo ReLU}: No se ha rechazado la hipótesis nula, así que no podemos decir nada. -\end{itemize} - From a46934ce4cddfd40d763bf98a313b9c35b929e98 Mon Sep 17 00:00:00 2001 From: Blanca Date: Fri, 3 Jun 2022 10:42:52 +0200 Subject: [PATCH 03/76] =?UTF-8?q?Comienza=20implementaci=C3=B3n=20del=20ex?= =?UTF-8?q?perimento=201:=20#115=20-=20Crea=20estructura=20para=20generar?= =?UTF-8?q?=20red=20neuronal=20a=20partir=20de=20matriz=20-=20Crea=20el=20?= =?UTF-8?q?algotitmo=20para=20actualizar=20los=20pesos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/initial_neuronal_network.jl | 79 +++++++++++++++++++ .../src/one_layer_neuronal_network.jl | 62 +++++++++++---- .../test/one_layer_neural_network.test.jl | 23 ++++-- ...=> 2_descripcion_inicializacion-pesos.tex} | 8 +- ...x => 3_algoritmo-inicializacion-pesos.tex} | 32 +++++--- Memoria/tfg.tex | 11 ++- 6 files changed, 177 insertions(+), 38 deletions(-) create mode 100644 Biblioteca-Redes-Neuronales/src/initial_neuronal_network.jl rename Memoria/capitulos/5-Estudio_experimental/{inicializacion-pesos.tex => 2_descripcion_inicializacion-pesos.tex} (96%) rename Memoria/capitulos/5-Estudio_experimental/{2_algoritmo-inicializacion-pesos.tex => 3_algoritmo-inicializacion-pesos.tex} (81%) diff --git a/Biblioteca-Redes-Neuronales/src/initial_neuronal_network.jl b/Biblioteca-Redes-Neuronales/src/initial_neuronal_network.jl new file mode 100644 index 0000000..876910a --- /dev/null +++ b/Biblioteca-Redes-Neuronales/src/initial_neuronal_network.jl @@ -0,0 +1,79 @@ +##################################################################### +# IMPLEMENTACIÓN DEL ALGORITMOS DE INICIALIZACIÓN DE PESOS +# Basado en capítulo 7, algoritmo 6 +##################################################################### +include("one_layer_neuronal_network.jl") +# Tamaño de la red neuronal y conjunto de datos +module OneLayerNeuralNetwork + +""" + notOrtonormal(point_dict::Dict, p::Vector, new_point::Vector)::Bool +Comprueba que todos los vectores de `point_dict` no sean ortogonales al vector `new_point` +Esto es que `p.(v - new_point) neq 0` para todo (_,v) en `point_dict` +point_dict es un diccionario donde los vectores son los valores. +""" +function notOrtonormal(point_dict::Dict, p::Vector, new_point::Vector)::Bool + for (_, v) in point_dict + if sum(p.*(v-new_point)) == 0 + return false + end + end + return true +end + +""" +InitializeNodes(X_train,Y_train, n, M=10) +""" +function InitializeNodes(X_train::Matrix,Y_train::Matrix, n::Int, M=10)::AbstractOneLayerNeuralNetwork + (_ , entry_dimension) = size(X_train) + (_ , output_dimension) = size(Y_train) + # inicializamos p + p = rand(Float64, entry_dimension+1) + + nodes = Dict{Float64, Vector{Float64}}() + index = 1 + tam = 0 + y_values = [] + + while tam < n && index <= n + new_point = X_train[index, :] + append!(new_point,1) + if notOrtonormal(nodes, p, new_point) + nodes[sum(p.*new_point)] = new_point + tam += 1 + append!(y_values,Y_train[index]) + end + index += 1 + end + ordered_values = sort(collect(keys(nodes))) + # Matrices de la red neuronal + # A = n x d + # S = n x 1 + # B = s x n + A = zeros(Float64, n, entry_dimension) + S = zeros(Float64, n) + B = zeros(Float64, output_dimension, n) + + # valores iniciales + S[1]=M*p[entry_dimension+1] + A[1,:] = M.*p[1:entry_dimension] + B[:,1] = y_values[1,:] + + # Cálculo del resto de neuronas + x_a = nodes[ordered_values[1]] + y_a = y_values[1,:] + for (index,key) in enumerate(ordered_values[2:n]) + x_s = nodes[key] + y_s = y_values[index,:] + coeff_aux = 2M / sum(p.* (x_s - x_a)) + S[index] = M - sum(p .* x_a) * coeff_aux + A[index,:] = coeff_aux * p[1:entry_dimension] + B[:,index] = y_s - y_a + + x_a = x_s + y_a = y_a + + end + return S,A,B +end +end #Module OneLayerNeuralNetwork \ No newline at end of file diff --git a/Biblioteca-Redes-Neuronales/src/one_layer_neuronal_network.jl b/Biblioteca-Redes-Neuronales/src/one_layer_neuronal_network.jl index f82b1f9..547b385 100644 --- a/Biblioteca-Redes-Neuronales/src/one_layer_neuronal_network.jl +++ b/Biblioteca-Redes-Neuronales/src/one_layer_neuronal_network.jl @@ -1,12 +1,20 @@ -module ModuleOneLayerNeuralNetwork - +module OneLayerNeuralNetwork +# Constructores export OneLayerNeuralNetworkRandomWeights +export OneLayerNeuralNetworkFromMatrix +# Evaluación por algoritmo de ForwardPropagation export ForwardPropagation +# Tipo +export AbstractOneLayerNeuralNetwork + """ AbstractOneLayerNeuralNetwork The basic elements that define a one layer neural network +Must have two matrix: +W1: Matrix n x (d+1) +W2: Matris s x n """ abstract type AbstractOneLayerNeuralNetwork end @@ -19,17 +27,13 @@ abstract type AbstractOneLayerNeuralNetwork end mutable struct OneLayerNeuralNetworkRandomWeights <: AbstractOneLayerNeuralNetwork entry_dimesion :: Int number_of_hide_units :: Int - output_dimension :: Int - activation_function - derivative_activation_function - W1 - W2 + output_dimension :: Int + W1 # pesos de la entrada a la capa oculta + W2 # pesos de la capa oculta a la salida function OneLayerNeuralNetworkRandomWeights(entry_dimesion, - number_of_hide_units, - output_dimension, - activation_function, - derivative_activation_function) + number_of_hide_units, + output_dimension) W1 = rand(Float64, number_of_hide_units, entry_dimesion+1) W2 = rand(Float64, output_dimension, number_of_hide_units) @@ -37,8 +41,6 @@ mutable struct OneLayerNeuralNetworkRandomWeights <: AbstractOneLayerNeuralNetw entry_dimesion, number_of_hide_units, output_dimension, - activation_function, - derivative_activation_function, W1, W2 ) @@ -46,12 +48,40 @@ mutable struct OneLayerNeuralNetworkRandomWeights <: AbstractOneLayerNeuralNetw end end +mutable struct OneLayerNeuralNetworkFromMatrix <: AbstractOneLayerNeuralNetwork + W1 :: Matrix # pesos de la entrada a la capa oculta + W2 :: Matrix# pesos de la capa oculta a la salida + function OneLayerNeuralNetworkFromMatrix(S,A,B) + # Comprobación de que los tipos son correctos + if !( typeof(S) <: Vector && typeof(A) <: Matrix && typeof(B) <: Matrix ) + throw(ArgumentError("El tipo de los argumentos no es el correcto\n + Debería de ser:\n + typeof(S) <: Vector && typeof(A) <: Matrix && typeof(B) <: Matrix \n + pero se ha encontrado: \n + typeof(S)= $(typeof(S)) typeof(A) $(typeof(A)) typeof(B) $(typeof(B)) + ")) + end + (n_a,d_a) = size(A) + l_s = length(S) + if(n_a != l_s) + throw(ArgumentError("El número de columnas de A (que es $(n_a))debe de ser igual que + la longitud de S (que es $(l_s)) + Los tamaños encontrados son: + size(S)=$(size(S)). + size(A)=$(size(A)) + ")) + end + return new(hcat(A,S), B) + end +end + """ -ForwardPropagation (h::AbstractOneLayerNeuralNetwork, x::Vector{Real}) +ForwardPropagation (h::AbstractOneLayerNeuralNetwork, activation_function, x::Vector{Real}) +Only use an activation function """ -function ForwardPropagation(h::AbstractOneLayerNeuralNetwork, x) +function ForwardPropagation(h::AbstractOneLayerNeuralNetwork,activation_function, x) s = h.W1 * push!(x,1) - ∑= map(h.activation_function,s) + ∑= map(activation_function,s) x = h.W2 * ∑ return x end diff --git a/Biblioteca-Redes-Neuronales/test/one_layer_neural_network.test.jl b/Biblioteca-Redes-Neuronales/test/one_layer_neural_network.test.jl index a193da4..e844758 100644 --- a/Biblioteca-Redes-Neuronales/test/one_layer_neural_network.test.jl +++ b/Biblioteca-Redes-Neuronales/test/one_layer_neural_network.test.jl @@ -3,7 +3,7 @@ using Test include("./../src/activation_functions.jl") include("./../src/one_layer_neuronal_network.jl") using .ActivationFunctions -using .ModuleOneLayerNeuralNetwork +using .OneLayerNeuralNetwork entry_dimesion = 2 number_of_hide_units = 3 @@ -11,19 +11,30 @@ output_dimension = 2 OLNN = OneLayerNeuralNetworkRandomWeights( entry_dimesion, number_of_hide_units, - output_dimension, - ReLU, - ReLU + output_dimension ) -@testset "Dimension of one layer networks" begin +@testset "Dimension of one layer networks random initialization" begin # Weights have correct dimensions + # Notemos que OLNN ha sido creada con la iniciacilización aleatoria, + # La única hipótesis que debe de cumplir es que: + # 1. Inicialización con las dimensiones correctas @test size(OLNN.W1)==(number_of_hide_units, 1+entry_dimesion) @test size(OLNN.W2)==(output_dimension, number_of_hide_units) end +@testset "One layer created from matrix" begin + S = [1,2] #vector + A = [1 2; 1 2] # matrix + B = reshape([ 1 ; 1 ],1,2) # matrix 2 x 1 + @test typeof(OneLayerNeuralNetworkFromMatrix(S, A, B)) <: AbstractOneLayerNeuralNetwork +end + @testset "ForwardPropagation" begin - @test typeof(ForwardPropagation(OLNN,[1,2.0])) == Vector{Float64} + # El resultado debe de ser un vector + @test typeof(ForwardPropagation(OLNN,ReLU, [1,2.0])) == Vector{Float64} + # La evaluación debe de tener las mismas dimensiones que la salida de la red neuronal + @test length(ForwardPropagation(OLNN,ReLU, [0,1.0])) == output_dimension end diff --git a/Memoria/capitulos/5-Estudio_experimental/inicializacion-pesos.tex b/Memoria/capitulos/5-Estudio_experimental/2_descripcion_inicializacion-pesos.tex similarity index 96% rename from Memoria/capitulos/5-Estudio_experimental/inicializacion-pesos.tex rename to Memoria/capitulos/5-Estudio_experimental/2_descripcion_inicializacion-pesos.tex index 34795c6..878630b 100644 --- a/Memoria/capitulos/5-Estudio_experimental/inicializacion-pesos.tex +++ b/Memoria/capitulos/5-Estudio_experimental/2_descripcion_inicializacion-pesos.tex @@ -260,7 +260,13 @@ \subsection{Generalización del método para funciones de activación } funciones de activación menos restrictivas como las definidas en \ref{table:funciones-de-activation}. \begin{itemize} - \item Por el teorema \ref{teo:eficacia-funciones-activation} también será valido para \textbf{funciones de activación que sean afines a una que satisface \refeq{eq:method_inicializar_M}}. El proceso constructivo consistiría en: (1) hacer que la red aprenda con la función que cumple los requisitos \refeq{eq:method_inicializar_M}. (2) Los pesos obtenidos transformarlos con la misma técnica que se aplica en la demostración del teorema \ref{teo:eficacia-funciones-activation}. + \item Por el teorema \ref{teo:eficacia-funciones-activation} también será valido para + \textbf{funciones de activación cuyas imágenes sean + afines a una que satisface \refeq{eq:method_inicializar_M}}. + El proceso constructivo consistiría en: + (1) hacer que la red aprenda con la función que cumple los requisitos \refeq{eq:method_inicializar_M}. + (2) Los pesos obtenidos transformarlos con la misma técnica + que se aplica en la demostración del teorema \ref{teo:eficacia-funciones-activation}. \item \textbf{Funciones de activación asintóticas a 0 o 1}, esto es funciones que satisfacen que: \begin{enumerate} diff --git a/Memoria/capitulos/5-Estudio_experimental/2_algoritmo-inicializacion-pesos.tex b/Memoria/capitulos/5-Estudio_experimental/3_algoritmo-inicializacion-pesos.tex similarity index 81% rename from Memoria/capitulos/5-Estudio_experimental/2_algoritmo-inicializacion-pesos.tex rename to Memoria/capitulos/5-Estudio_experimental/3_algoritmo-inicializacion-pesos.tex index 2fdeebb..1513ecc 100644 --- a/Memoria/capitulos/5-Estudio_experimental/2_algoritmo-inicializacion-pesos.tex +++ b/Memoria/capitulos/5-Estudio_experimental/3_algoritmo-inicializacion-pesos.tex @@ -2,19 +2,10 @@ % Experimentación con ALGORITMO INICIALIZACIÓN DE PESOS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\chapter{Algoritmo de inicialización pesos de una red neuronal} -Se desea conocer la bondad del algoritmo propuesto -en \ref{section:inicializar_pesos} que plantea dos objetivos múltiples en lo que respecta a la inicialización de pesos de una red neuronal: +En la siguiente sección trataremos sobre la bondad del algoritmo expuesto -\begin{itemize} - \item Su inicialización reporta un beneficio considerable con respecto a una inicialización aleatoria. - \item A mismo tiempo es más ventajoso que utilizar un descenso de gradiente. -\end{itemize} - -Para ello se han diseñado dos experimentos: - -\section{Experimento 1: Contraste de hipótesis con inicialización aleatoria} +\section{Contraste de hipótesis con inicialización aleatoria} \label{ch07:experimento-1} Las preguntas a resolver son ¿mejora nuestro algoritmo? ¿Cuánto mejora? @@ -127,3 +118,22 @@ \subsubsection{Implementación del experimento} \item \href{https://github.com/JuliaStats/RDatasets.jl}{Julia contiene las base de datos estándar de R}. \item \href{https://juliaml.github.io/MLDatasets.jl/stable/}{Otros paquetes básicos provistos también por la comunidad.} \end{itemize} + +\subsection*{Estructura de datos} +Para mantener eficientemente ordenados los puntos +lo normal sería utilizar un \textit{conjunto ordenado} donde ir añadiendo los datos, que la propia estructura los ordene y tras esto sacar +los datos ya ordenados. +El problema es que el tipo de dato \text{set} en Julia está basado en diccionarios +\footnotetext{Véase \url{https://discourse.julialang.org/t/can-you-sort-a-set/47948/2} +link accedido por última vez el 3 de junio de 2022.} + +Por lo tanto hemos recurrido a una biblioteca externa +utilizado las estructuras de datos propias de Julia +\href{https://juliacollections.github.io/DataStructures.jl/v0.9/sorted_containers.html}{estructuras}. +La documentación del lenguaje está bastante regular. +No hemos encontrado en ese parque un conjunto ordenado. + +Por lo que + + +Por lo tanto lo que vamos es a almacenar los datos y luego guardarlos \ No newline at end of file diff --git a/Memoria/tfg.tex b/Memoria/tfg.tex index 78a7d19..6d21ef6 100644 --- a/Memoria/tfg.tex +++ b/Memoria/tfg.tex @@ -259,11 +259,14 @@ \chapter{Las redes neuronales son aproximadores universales} \input{capitulos/4-Actualizacion_redes_neuronales/aprendizaje} \input{capitulos/4-Actualizacion_redes_neuronales/otras-alternativas} -% Hipótesis -\part{Exploración de las hipótesis planteadas y estudio experimental de las mismas} +%%%%%%%%%%%%%%%%%%%%%%%%%% Hipótesis +%\part{Exploración de las hipótesis planteadas y estudio experimental de las mismas} +% Estudio de las funciones de activación \include{capitulos/5-Estudio_experimental/1_funciones_activacion} -%\include{capitulos/5-Estudio_experimental/2_algoritmo-inicializacion-pesos} -\include{capitulos/5-Estudio_experimental/inicializacion-pesos} +% Estudio del algoritmo de inicialización de pesos +\input{capitulos/5-Estudio_experimental/2_descripcion_inicializacion-pesos} +\input{capitulos/5-Estudio_experimental/3_algoritmo-inicializacion-pesos} +% Comentario sobre los algoritmos genéticos \input{capitulos/5-Estudio_experimental/combinacion_funciones_activacion} %\include{capitulos/N-Exploracion-hipotesis-planteadas/hipotesis} From 193b93a8a594a5a81602e220bc64b7fb9b0e4a03 Mon Sep 17 00:00:00 2001 From: Blanca Date: Fri, 3 Jun 2022 16:01:52 +0200 Subject: [PATCH 04/76] =?UTF-8?q?A=C3=B1ade=20test=20correspondientes=20#1?= =?UTF-8?q?16?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/one_layer_neuronal_network.jl | 12 ++++++++++-- .../test/one_layer_neural_network.test.jl | 17 ++++++++++++++++- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/Biblioteca-Redes-Neuronales/src/one_layer_neuronal_network.jl b/Biblioteca-Redes-Neuronales/src/one_layer_neuronal_network.jl index 547b385..44dd52a 100644 --- a/Biblioteca-Redes-Neuronales/src/one_layer_neuronal_network.jl +++ b/Biblioteca-Redes-Neuronales/src/one_layer_neuronal_network.jl @@ -61,16 +61,24 @@ mutable struct OneLayerNeuralNetworkFromMatrix <: AbstractOneLayerNeuralNetwork typeof(S)= $(typeof(S)) typeof(A) $(typeof(A)) typeof(B) $(typeof(B)) ")) end + # Comprobaciones de que los tamaños son coherentes (n_a,d_a) = size(A) l_s = length(S) - if(n_a != l_s) - throw(ArgumentError("El número de columnas de A (que es $(n_a))debe de ser igual que + (s_b, n_b) = size(B) + ## Coherencia A y S + if n_a != l_s + throw(ArgumentError("El número de filas de A (que es $(n_a))debe de ser igual que la longitud de S (que es $(l_s)) Los tamaños encontrados son: size(S)=$(size(S)). size(A)=$(size(A)) ")) end + # Coherencia A y B + if n_a != n_b + throw(ArgumentError("El número de fila de A (que es $(n_a)) no es coherente con el número de columnas de B (que es $(n_b)). + Ambos debería de ser iguales.")) + end return new(hcat(A,S), B) end end diff --git a/Biblioteca-Redes-Neuronales/test/one_layer_neural_network.test.jl b/Biblioteca-Redes-Neuronales/test/one_layer_neural_network.test.jl index e844758..af91059 100644 --- a/Biblioteca-Redes-Neuronales/test/one_layer_neural_network.test.jl +++ b/Biblioteca-Redes-Neuronales/test/one_layer_neural_network.test.jl @@ -27,7 +27,22 @@ end S = [1,2] #vector A = [1 2; 1 2] # matrix B = reshape([ 1 ; 1 ],1,2) # matrix 2 x 1 - @test typeof(OneLayerNeuralNetworkFromMatrix(S, A, B)) <: AbstractOneLayerNeuralNetwork + h = OneLayerNeuralNetworkFromMatrix(S, A, B) + # Comprobación de tipo correcto + @test typeof(h) <: AbstractOneLayerNeuralNetwork + # Comprobación de tamaños correctos + ### Para la matriz W_1 + (n_rows1, n_columns1) = size(h.W1) + (n_rows2, n_columns2) = size(h.W2) + (r_a, c_a) = size(A) + @test n_rows1 == r_a + @test n_columns1 == c_a+1 + ### Para la matriz W_1 + (n_rows2, n_columns2) = size(h.W2) + (r_b, c_b) = size(B) + @test n_rows2 == r_b + @test n_columns2 == r_a + @test n_columns2 == c_b end @testset "ForwardPropagation" begin From 6993c6c5a389e97b5f96f9f114b83fdae05a9b30 Mon Sep 17 00:00:00 2001 From: Blanca Date: Fri, 3 Jun 2022 18:44:56 +0200 Subject: [PATCH 05/76] =?UTF-8?q?Arregla=20bug=20en=20=C3=ADndice=20del=20?= =?UTF-8?q?algoritmo=20inicializaci=C3=B3n=20#115?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../test/initial_neuron_network.jl | 30 +++++++++++++++++++ .../test/one_layer_neural_network.test.jl | 7 ++++- 2 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 Biblioteca-Redes-Neuronales/test/initial_neuron_network.jl diff --git a/Biblioteca-Redes-Neuronales/test/initial_neuron_network.jl b/Biblioteca-Redes-Neuronales/test/initial_neuron_network.jl new file mode 100644 index 0000000..6d53e59 --- /dev/null +++ b/Biblioteca-Redes-Neuronales/test/initial_neuron_network.jl @@ -0,0 +1,30 @@ +################################################### +# Test inicialización de pesos +################################################### +using Test +using Random +Random.seed!(1); + +include("./../src/initial_neuronal_network.jl") +using .InitialNeuralNetwork + +# Declaración de los atributos de juguete +# Matrix +##### Problema de regresión +# función ideal a copiar +f_regression(x,y,z)=x*y-z +data_set_size = 3000 +entry_dimension = 3 +X_train= rand(Float64, data_set_size, entry_dimension) + +# Data images +Y_train = map( x->f_regression(x...), eachrow(X_train)) +Y_train = reshape(Y_train, (data_set_size,1)) +# Número de neuronas +n = round(Int, data_set_size*0.3) + +println(InitializeNodes(X_train, Y_train, n)) + + + + diff --git a/Biblioteca-Redes-Neuronales/test/one_layer_neural_network.test.jl b/Biblioteca-Redes-Neuronales/test/one_layer_neural_network.test.jl index af91059..64d529b 100644 --- a/Biblioteca-Redes-Neuronales/test/one_layer_neural_network.test.jl +++ b/Biblioteca-Redes-Neuronales/test/one_layer_neural_network.test.jl @@ -25,7 +25,7 @@ end @testset "One layer created from matrix" begin S = [1,2] #vector - A = [1 2; 1 2] # matrix + A = [3 4; 4 6] # matrix B = reshape([ 1 ; 1 ],1,2) # matrix 2 x 1 h = OneLayerNeuralNetworkFromMatrix(S, A, B) # Comprobación de tipo correcto @@ -43,6 +43,11 @@ end @test n_rows2 == r_b @test n_columns2 == r_a @test n_columns2 == c_b + println("Revisión ocular:") + println( "A=", A) + println("S=", S) + println("h_w1=",h.W1) + println("B=$(B) = h_w2 = ($(h.W2))") end @testset "ForwardPropagation" begin From 5c08c93c90906e8a027776e87dea083153c2b9f5 Mon Sep 17 00:00:00 2001 From: Blanca Date: Fri, 3 Jun 2022 19:22:50 +0200 Subject: [PATCH 06/76] =?UTF-8?q?algoritmo=20inicializaci=C3=B3n=20ahora?= =?UTF-8?q?=20devuelve=20red=20neuronal=20no=20matrices=20como=20acostumbr?= =?UTF-8?q?aba=20#116?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/initial_neuronal_network.jl | 27 +++++++++++++++---- .../test/one_layer_neural_network.test.jl | 6 ----- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/Biblioteca-Redes-Neuronales/src/initial_neuronal_network.jl b/Biblioteca-Redes-Neuronales/src/initial_neuronal_network.jl index 876910a..19c19a5 100644 --- a/Biblioteca-Redes-Neuronales/src/initial_neuronal_network.jl +++ b/Biblioteca-Redes-Neuronales/src/initial_neuronal_network.jl @@ -2,9 +2,13 @@ # IMPLEMENTACIÓN DEL ALGORITMOS DE INICIALIZACIÓN DE PESOS # Basado en capítulo 7, algoritmo 6 ##################################################################### -include("one_layer_neuronal_network.jl") + # Tamaño de la red neuronal y conjunto de datos -module OneLayerNeuralNetwork +module InitialNeuralNetwork +export InitializeNodes + +include("one_layer_neuronal_network.jl") +using .OneLayerNeuralNetwork """ notOrtonormal(point_dict::Dict, p::Vector, new_point::Vector)::Bool @@ -22,7 +26,18 @@ function notOrtonormal(point_dict::Dict, p::Vector, new_point::Vector)::Bool end """ -InitializeNodes(X_train,Y_train, n, M=10) + InitializeNodes(X_train,Y_train, n, M=10) + Devuelve una red neuronal con los pesos ya inicializados + de acorte a los conjuntos de entrenamiento. + `n` es el número de neuronas en la capa oculta. + El tamaño de entrada y salida de la red neuronal vienen determinados por + por los propios datos de entranamiento. + El tamaño de entrada se corresponde con el número de atributos de X_train (su número de columnas) + y a salida con el número de columnas de `Y_train`. + + M es una constante que depende de la función de activación, + por lo visto en teoría M=10 funciona para todas las + """ function InitializeNodes(X_train::Matrix,Y_train::Matrix, n::Int, M=10)::AbstractOneLayerNeuralNetwork (_ , entry_dimension) = size(X_train) @@ -62,9 +77,11 @@ function InitializeNodes(X_train::Matrix,Y_train::Matrix, n::Int, M=10)::Abstrac # Cálculo del resto de neuronas x_a = nodes[ordered_values[1]] y_a = y_values[1,:] - for (index,key) in enumerate(ordered_values[2:n]) + + for (index,key) in collect(Iterators.zip(2:n, ordered_values[2:n])) x_s = nodes[key] y_s = y_values[index,:] + coeff_aux = 2M / sum(p.* (x_s - x_a)) S[index] = M - sum(p .* x_a) * coeff_aux A[index,:] = coeff_aux * p[1:entry_dimension] @@ -74,6 +91,6 @@ function InitializeNodes(X_train::Matrix,Y_train::Matrix, n::Int, M=10)::Abstrac y_a = y_a end - return S,A,B + return OneLayerNeuralNetworkFromMatrix(S,A,B) end end #Module OneLayerNeuralNetwork \ No newline at end of file diff --git a/Biblioteca-Redes-Neuronales/test/one_layer_neural_network.test.jl b/Biblioteca-Redes-Neuronales/test/one_layer_neural_network.test.jl index 64d529b..e6942d5 100644 --- a/Biblioteca-Redes-Neuronales/test/one_layer_neural_network.test.jl +++ b/Biblioteca-Redes-Neuronales/test/one_layer_neural_network.test.jl @@ -50,11 +50,5 @@ end println("B=$(B) = h_w2 = ($(h.W2))") end -@testset "ForwardPropagation" begin - # El resultado debe de ser un vector - @test typeof(ForwardPropagation(OLNN,ReLU, [1,2.0])) == Vector{Float64} - # La evaluación debe de tener las mismas dimensiones que la salida de la red neuronal - @test length(ForwardPropagation(OLNN,ReLU, [0,1.0])) == output_dimension -end From 4b916c93c0d427965d9fe72452c421233339b4be Mon Sep 17 00:00:00 2001 From: Blanca Date: Fri, 3 Jun 2022 19:24:26 +0200 Subject: [PATCH 07/76] Cambia formato a los test #116 #109 --- .../src/one_layer_neuronal_network.jl | 14 ++++++++++---- .../test/RUN_ALL_TEST.jl | 18 ++++++++++++++++++ .../test/initial_neuron_network.jl | 8 ++++++-- Makefile | 4 +--- 4 files changed, 35 insertions(+), 9 deletions(-) create mode 100644 Biblioteca-Redes-Neuronales/test/RUN_ALL_TEST.jl diff --git a/Biblioteca-Redes-Neuronales/src/one_layer_neuronal_network.jl b/Biblioteca-Redes-Neuronales/src/one_layer_neuronal_network.jl index 44dd52a..c338360 100644 --- a/Biblioteca-Redes-Neuronales/src/one_layer_neuronal_network.jl +++ b/Biblioteca-Redes-Neuronales/src/one_layer_neuronal_network.jl @@ -1,3 +1,7 @@ +######################################################## +# ONE LAYER NEURONAL NETWORK TYPE +# and evaluation with forward propagation +######################################################## module OneLayerNeuralNetwork # Constructores @@ -20,15 +24,13 @@ abstract type AbstractOneLayerNeuralNetwork end """ OneLayerNeuralNetworkRandomWeights -# Arguments -- `activation_function` should be a Real to Real function -- `derivative_activation_function` should be a Real to Real function +Return a random initialized Neuronal Network """ mutable struct OneLayerNeuralNetworkRandomWeights <: AbstractOneLayerNeuralNetwork entry_dimesion :: Int number_of_hide_units :: Int output_dimension :: Int - W1 # pesos de la entrada a la capa oculta + W1 # pesos de la entrada a la capa oculta A S (sesgo última columna) W2 # pesos de la capa oculta a la salida function OneLayerNeuralNetworkRandomWeights(entry_dimesion, @@ -48,6 +50,10 @@ mutable struct OneLayerNeuralNetworkRandomWeights <: AbstractOneLayerNeuralNetw end end +""" + OneLayerNeuralNetworkRandomWeights +Return a Neuronal Network inizialized by three matrix +""" mutable struct OneLayerNeuralNetworkFromMatrix <: AbstractOneLayerNeuralNetwork W1 :: Matrix # pesos de la entrada a la capa oculta W2 :: Matrix# pesos de la capa oculta a la salida diff --git a/Biblioteca-Redes-Neuronales/test/RUN_ALL_TEST.jl b/Biblioteca-Redes-Neuronales/test/RUN_ALL_TEST.jl new file mode 100644 index 0000000..3526d9f --- /dev/null +++ b/Biblioteca-Redes-Neuronales/test/RUN_ALL_TEST.jl @@ -0,0 +1,18 @@ +#################################################### +# CONTAINS ALL THE TEST +# Those test are: +# - Activation functions +# - Neuronal network structure +# - Our initialization algorithm +#################################################### +println("Testing Activation functions...") +t = @elapsed include("activation_functions.test.jl") +println("done (took $t seconds).") + +println("Testing Neuronal Network Data type") +t = @elapsed include("one_layer_neural_network.test.jl") +println("done (took $t seconds).") + +println("Testing our initialization algorithm") +t = @elapsed include("initial_neuron_network.jl") +println("done (took $t seconds).") \ No newline at end of file diff --git a/Biblioteca-Redes-Neuronales/test/initial_neuron_network.jl b/Biblioteca-Redes-Neuronales/test/initial_neuron_network.jl index 6d53e59..1bfd92e 100644 --- a/Biblioteca-Redes-Neuronales/test/initial_neuron_network.jl +++ b/Biblioteca-Redes-Neuronales/test/initial_neuron_network.jl @@ -8,6 +8,7 @@ Random.seed!(1); include("./../src/initial_neuronal_network.jl") using .InitialNeuralNetwork + # Declaración de los atributos de juguete # Matrix ##### Problema de regresión @@ -23,8 +24,11 @@ Y_train = reshape(Y_train, (data_set_size,1)) # Número de neuronas n = round(Int, data_set_size*0.3) -println(InitializeNodes(X_train, Y_train, n)) - +h = InitializeNodes(X_train, Y_train, n) +@testset "Nodes initialization algorithm" begin + # El resultado es del tipo correcto + +end diff --git a/Makefile b/Makefile index 421df66..37159f6 100644 --- a/Makefile +++ b/Makefile @@ -29,9 +29,7 @@ workflow-spell: install-spell spell ########## Test biblioteca redes neurales ########### test: - julia --project=. Biblioteca-Redes-Neuronales/test/activation_functions.test.jl - julia --project=. Biblioteca-Redes-Neuronales/test/one_layer_neural_network.test.jl - + julia --project=. Biblioteca-Redes-Neuronales/test/RUN_ALL_TEST.jl ############################### Generar experimentos ############ experimentos: From 5fe1f5c7e0c54034d3cb25a1fa00ea6106b0489d Mon Sep 17 00:00:00 2001 From: Blanca Date: Fri, 3 Jun 2022 19:48:32 +0200 Subject: [PATCH 08/76] Corrige forward Propagation #116 Modificaba los valores de entrada, se ha solucionado con un copy --- .../src/one_layer_neuronal_network.jl | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Biblioteca-Redes-Neuronales/src/one_layer_neuronal_network.jl b/Biblioteca-Redes-Neuronales/src/one_layer_neuronal_network.jl index c338360..67883aa 100644 --- a/Biblioteca-Redes-Neuronales/src/one_layer_neuronal_network.jl +++ b/Biblioteca-Redes-Neuronales/src/one_layer_neuronal_network.jl @@ -94,10 +94,11 @@ ForwardPropagation (h::AbstractOneLayerNeuralNetwork, activation_function, x::Ve Only use an activation function """ function ForwardPropagation(h::AbstractOneLayerNeuralNetwork,activation_function, x) - s = h.W1 * push!(x,1) + x_aux = copy(x) + s = h.W1 * push!(x_aux,1) ∑= map(activation_function,s) - x = h.W2 * ∑ - return x + x_aux = h.W2 * ∑ + return x_aux end end # end OneLayerNeuralNetwork \ No newline at end of file From 5f67780f2c31c25fb586cdeecabb548969a51ea4 Mon Sep 17 00:00:00 2001 From: Blanca Date: Fri, 3 Jun 2022 19:50:02 +0200 Subject: [PATCH 09/76] =?UTF-8?q?A=C3=B1ade=20forward=20propagation=20test?= =?UTF-8?q?=20#116?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../test/RUN_ALL_TEST.jl | 4 + .../test/forward_propagation.test.jl | 81 +++++++++++++++++++ 2 files changed, 85 insertions(+) create mode 100644 Biblioteca-Redes-Neuronales/test/forward_propagation.test.jl diff --git a/Biblioteca-Redes-Neuronales/test/RUN_ALL_TEST.jl b/Biblioteca-Redes-Neuronales/test/RUN_ALL_TEST.jl index 3526d9f..2bedb01 100644 --- a/Biblioteca-Redes-Neuronales/test/RUN_ALL_TEST.jl +++ b/Biblioteca-Redes-Neuronales/test/RUN_ALL_TEST.jl @@ -13,6 +13,10 @@ println("Testing Neuronal Network Data type") t = @elapsed include("one_layer_neural_network.test.jl") println("done (took $t seconds).") +println("Testing ForwardPropagation") +t = @elapsed include("forward_propagation.test.jl") +println("done (took $t seconds).") + println("Testing our initialization algorithm") t = @elapsed include("initial_neuron_network.jl") println("done (took $t seconds).") \ No newline at end of file diff --git a/Biblioteca-Redes-Neuronales/test/forward_propagation.test.jl b/Biblioteca-Redes-Neuronales/test/forward_propagation.test.jl new file mode 100644 index 0000000..cd1dc85 --- /dev/null +++ b/Biblioteca-Redes-Neuronales/test/forward_propagation.test.jl @@ -0,0 +1,81 @@ +################################################ +# TEST DE FORWARD PROPAGATION +################################################ +using Test + +include("./../src/activation_functions.jl") +include("./../src/one_layer_neuronal_network.jl") +using .ActivationFunctions +using .OneLayerNeuralNetwork + +@testset "ForwardPropagation correct types" begin + ## Comprobación de tipos y dimensión + entry_dimesion = 2 + number_of_hide_units = 3 + output_dimension = 2 + OLNN = OneLayerNeuralNetworkRandomWeights( + entry_dimesion, + number_of_hide_units, + output_dimension + ) + # El resultado debe de ser un vector + @test typeof(ForwardPropagation(OLNN,ReLU, [1,2.0])) == Vector{Float64} + # La evaluación debe de tener las mismas dimensiones que la salida de la red neuronal + @test length(ForwardPropagation(OLNN,ReLU, [0,1.0])) == output_dimension +end +@testset "ForwardPropagation matrix order and " begin + ## Comprobación de evaluación correcta + # Debiera de ser la red neurona identidad + S = [0, 0] + A = [1 0; 0 1] + B = [1 0; 0 1] + h = OneLayerNeuralNetworkFromMatrix(S,A,B) + + vectores = [ + [1,2], [0,0],[-1,4] + ] + for v in vectores + @test ForwardPropagation(h, x->x,v ) == v + end + # Debiera de ser la red neuronal que multiplica el primer índice por dos y el resto por 3 + S = [0, 0] + A = [1 0; 0 1] + B = [2 0; 0 3] + h = OneLayerNeuralNetworkFromMatrix(S,A,B) + + vectores = [ + [1,2], [0,0],[-1,4] + ] + for v in vectores + @test ForwardPropagation(h, x->x,v ) == [2*v[1], 3*v[2]] + end + # Debiera de ser la red neuronal que suma el vector (1 2) + S = [1, 2] + A = [1 0; 0 1] + B = [1 0; 0 1] + h = OneLayerNeuralNetworkFromMatrix(S,A,B) + + vectores = [ + [1,2], [0,0],[-1,4] + ] + for v in vectores + @test ForwardPropagation(h, x->x,v ) == [v[1]+1, v[2]+2] + end +end +@testset "ForwardPropagation activation function" begin + S = [0, 0] + A = [1 0; 0 1] + B = [1 0; 0 1] + h = OneLayerNeuralNetworkFromMatrix(S,A,B) + + vectores = [ + [1,2], [0,-3] + ] + soluciones_reLU = [ + [1,2],[0,0] + ] + for (v,test) in zip(vectores,soluciones_reLU) + @test ForwardPropagation(h, ReLU,v ) == test + end + +end \ No newline at end of file From d49af91d460bc2446f88cf2160c96a3a1e754a32 Mon Sep 17 00:00:00 2001 From: Blanca Date: Fri, 3 Jun 2022 20:03:50 +0200 Subject: [PATCH 10/76] =?UTF-8?q?Corrige=20test=20de=20RUN=5FALL=5FTEST=20?= =?UTF-8?q?#116=20antes=20hab=C3=ADa=20colisiones=20con=20los=20m=C3=B3dul?= =?UTF-8?q?os?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../test/RUN_ALL_TEST.jl | 1 + .../test/activation_functions.test.jl | 1 + .../test/forward_propagation.test.jl | 27 ++++++++++--------- .../test/one_layer_neural_network.test.jl | 12 ++++----- 4 files changed, 22 insertions(+), 19 deletions(-) diff --git a/Biblioteca-Redes-Neuronales/test/RUN_ALL_TEST.jl b/Biblioteca-Redes-Neuronales/test/RUN_ALL_TEST.jl index 2bedb01..a7c597c 100644 --- a/Biblioteca-Redes-Neuronales/test/RUN_ALL_TEST.jl +++ b/Biblioteca-Redes-Neuronales/test/RUN_ALL_TEST.jl @@ -3,6 +3,7 @@ # Those test are: # - Activation functions # - Neuronal network structure +# - Forward Propagation # - Our initialization algorithm #################################################### println("Testing Activation functions...") diff --git a/Biblioteca-Redes-Neuronales/test/activation_functions.test.jl b/Biblioteca-Redes-Neuronales/test/activation_functions.test.jl index 86fa52c..177cebf 100644 --- a/Biblioteca-Redes-Neuronales/test/activation_functions.test.jl +++ b/Biblioteca-Redes-Neuronales/test/activation_functions.test.jl @@ -10,6 +10,7 @@ using .ActivationFunctions ######################### TEST ######################### @testset "Activations functions" begin + id(x)=x # Propiedas asintóticas funciones clásicas @test @ThresholdFunction(id,0)(-1) ≈ -1 diff --git a/Biblioteca-Redes-Neuronales/test/forward_propagation.test.jl b/Biblioteca-Redes-Neuronales/test/forward_propagation.test.jl index cd1dc85..c4b8701 100644 --- a/Biblioteca-Redes-Neuronales/test/forward_propagation.test.jl +++ b/Biblioteca-Redes-Neuronales/test/forward_propagation.test.jl @@ -5,23 +5,24 @@ using Test include("./../src/activation_functions.jl") include("./../src/one_layer_neuronal_network.jl") -using .ActivationFunctions -using .OneLayerNeuralNetwork +#using .ActivationFunctions +#using .OneLayerNeuralNetwork @testset "ForwardPropagation correct types" begin ## Comprobación de tipos y dimensión entry_dimesion = 2 number_of_hide_units = 3 output_dimension = 2 - OLNN = OneLayerNeuralNetworkRandomWeights( + OLNN = OneLayerNeuralNetwork.OneLayerNeuralNetworkRandomWeights( entry_dimesion, number_of_hide_units, output_dimension ) + ReLU = ActivationFunctions.ReLU # El resultado debe de ser un vector - @test typeof(ForwardPropagation(OLNN,ReLU, [1,2.0])) == Vector{Float64} + @test typeof(OneLayerNeuralNetwork.ForwardPropagation(OLNN,ReLU, [1,2.0])) == Vector{Float64} # La evaluación debe de tener las mismas dimensiones que la salida de la red neuronal - @test length(ForwardPropagation(OLNN,ReLU, [0,1.0])) == output_dimension + @test length(OneLayerNeuralNetwork.ForwardPropagation(OLNN,ReLU, [0,1.0])) == output_dimension end @testset "ForwardPropagation matrix order and " begin ## Comprobación de evaluación correcta @@ -29,44 +30,44 @@ end S = [0, 0] A = [1 0; 0 1] B = [1 0; 0 1] - h = OneLayerNeuralNetworkFromMatrix(S,A,B) + h = OneLayerNeuralNetwork.OneLayerNeuralNetworkFromMatrix(S,A,B) vectores = [ [1,2], [0,0],[-1,4] ] for v in vectores - @test ForwardPropagation(h, x->x,v ) == v + @test OneLayerNeuralNetwork.ForwardPropagation(h, x->x,v ) == v end # Debiera de ser la red neuronal que multiplica el primer índice por dos y el resto por 3 S = [0, 0] A = [1 0; 0 1] B = [2 0; 0 3] - h = OneLayerNeuralNetworkFromMatrix(S,A,B) + h = OneLayerNeuralNetwork.OneLayerNeuralNetworkFromMatrix(S,A,B) vectores = [ [1,2], [0,0],[-1,4] ] for v in vectores - @test ForwardPropagation(h, x->x,v ) == [2*v[1], 3*v[2]] + @test OneLayerNeuralNetwork.ForwardPropagation(h, x->x,v ) == [2*v[1], 3*v[2]] end # Debiera de ser la red neuronal que suma el vector (1 2) S = [1, 2] A = [1 0; 0 1] B = [1 0; 0 1] - h = OneLayerNeuralNetworkFromMatrix(S,A,B) + h = OneLayerNeuralNetwork.OneLayerNeuralNetworkFromMatrix(S,A,B) vectores = [ [1,2], [0,0],[-1,4] ] for v in vectores - @test ForwardPropagation(h, x->x,v ) == [v[1]+1, v[2]+2] + @test OneLayerNeuralNetwork.ForwardPropagation(h, x->x,v ) == [v[1]+1, v[2]+2] end end @testset "ForwardPropagation activation function" begin S = [0, 0] A = [1 0; 0 1] B = [1 0; 0 1] - h = OneLayerNeuralNetworkFromMatrix(S,A,B) + h = OneLayerNeuralNetwork.OneLayerNeuralNetworkFromMatrix(S,A,B) vectores = [ [1,2], [0,-3] @@ -75,7 +76,7 @@ end [1,2],[0,0] ] for (v,test) in zip(vectores,soluciones_reLU) - @test ForwardPropagation(h, ReLU,v ) == test + @test OneLayerNeuralNetwork.ForwardPropagation(h, ActivationFunctions.ReLU,v ) == test end end \ No newline at end of file diff --git a/Biblioteca-Redes-Neuronales/test/one_layer_neural_network.test.jl b/Biblioteca-Redes-Neuronales/test/one_layer_neural_network.test.jl index e6942d5..b92c98d 100644 --- a/Biblioteca-Redes-Neuronales/test/one_layer_neural_network.test.jl +++ b/Biblioteca-Redes-Neuronales/test/one_layer_neural_network.test.jl @@ -1,14 +1,14 @@ using Test -include("./../src/activation_functions.jl") + include("./../src/one_layer_neuronal_network.jl") -using .ActivationFunctions -using .OneLayerNeuralNetwork + +#using .OneLayerNeuralNetwork entry_dimesion = 2 number_of_hide_units = 3 output_dimension = 2 -OLNN = OneLayerNeuralNetworkRandomWeights( +OLNN = OneLayerNeuralNetwork.OneLayerNeuralNetworkRandomWeights( entry_dimesion, number_of_hide_units, output_dimension @@ -27,9 +27,9 @@ end S = [1,2] #vector A = [3 4; 4 6] # matrix B = reshape([ 1 ; 1 ],1,2) # matrix 2 x 1 - h = OneLayerNeuralNetworkFromMatrix(S, A, B) + h = OneLayerNeuralNetwork.OneLayerNeuralNetworkFromMatrix(S, A, B) # Comprobación de tipo correcto - @test typeof(h) <: AbstractOneLayerNeuralNetwork + @test typeof(h) <: OneLayerNeuralNetwork.AbstractOneLayerNeuralNetwork # Comprobación de tamaños correctos ### Para la matriz W_1 (n_rows1, n_columns1) = size(h.W1) From e13fbbe49b268bdd8a940915d0febb7c3512501f Mon Sep 17 00:00:00 2001 From: Blanca Date: Fri, 3 Jun 2022 20:53:52 +0200 Subject: [PATCH 11/76] =?UTF-8?q?A=C3=B1ade=20m=C3=A9trica=20de=20regresi?= =?UTF-8?q?=C3=B3n=20y=20su=20test=20#116?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/metric_estimation.jl | 17 +++++++++++++++++ .../test/metric_estimation.test.jl | 12 ++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 Biblioteca-Redes-Neuronales/src/metric_estimation.jl create mode 100644 Biblioteca-Redes-Neuronales/test/metric_estimation.test.jl diff --git a/Biblioteca-Redes-Neuronales/src/metric_estimation.jl b/Biblioteca-Redes-Neuronales/src/metric_estimation.jl new file mode 100644 index 0000000..74ce60b --- /dev/null +++ b/Biblioteca-Redes-Neuronales/src/metric_estimation.jl @@ -0,0 +1,17 @@ +#################################################### +# Función para tomar métricas +#################################################### +module Metric + +using Statistics +using LinearAlgebra +export Regression + +function Regression(X,Y,f) + f_x = map(f, eachrow(X)) + diferences = map(norm,eachrow(Y - f_x)) + return mean(diferences), median(diferences), std(diferences) +end + + +end \ No newline at end of file diff --git a/Biblioteca-Redes-Neuronales/test/metric_estimation.test.jl b/Biblioteca-Redes-Neuronales/test/metric_estimation.test.jl new file mode 100644 index 0000000..efd3789 --- /dev/null +++ b/Biblioteca-Redes-Neuronales/test/metric_estimation.test.jl @@ -0,0 +1,12 @@ +################################################################### +# TEST Metric estimations +################################################################### +using Test +include("../src/metric_estimation.jl") + +@testset "Regression metrics" begin + f(x)=x.*x + X = reshape([1,-1,-2,2],(4,1)) + Y = map(f, eachrow(X)) + @test Metric.Regression(X,Y,f) == (0,0,0) +end From 3070a9b28630918fa2a0b8549ba974e941492c88 Mon Sep 17 00:00:00 2001 From: Blanca Date: Sat, 4 Jun 2022 18:25:47 +0200 Subject: [PATCH 12/76] =?UTF-8?q?Escribe=20test=20del=20algoritmo=20inicia?= =?UTF-8?q?lizaci=C3=B3n=20#116=20Ahora=20mismo=20pasa=20los=20test=20para?= =?UTF-8?q?=20el=20caso=20R->R=20Me=20he=20tirado=20demasiadas=20horas=20p?= =?UTF-8?q?or=20culpa=20del=20tipo=20Matrix=20Resulta=20que=20el=20para=20?= =?UTF-8?q?conseguir=20el=20tipo=20matrix=20de=20un=20vector=20existen=20v?= =?UTF-8?q?arias=20alternativas:=20hcat,=20reshape...=20Pues=20cuando=20es?= =?UTF-8?q?=20un=20vector=20de=20una=20dimensi=C3=B3n=20o=20una=20matriz?= =?UTF-8?q?=201xalgo=20o=20algox1=20todas=20esas=20funciones=20hacen=20cos?= =?UTF-8?q?as=20raras...=20Total=20que=20al=20final=20lo=20m=C3=A1s=20senc?= =?UTF-8?q?illo=20y=20que=20adem=C3=A1s=20optimiza=20el=20c=C3=B3digo=20es?= =?UTF-8?q?=20utilizar=20el=20dispather=20jejjeje?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/initial_neuronal_network.jl | 145 +++++++++++++++++- .../src/metric_estimation.jl | 8 +- .../src/one_layer_neuronal_network.jl | 2 +- .../test/RUN_ALL_TEST.jl | 6 +- .../test/forward_propagation.test.jl | 32 +++- .../test/initial_neuron_network.jl | 34 ---- .../test/initial_neuron_network.test.jl | 50 ++++++ 7 files changed, 233 insertions(+), 44 deletions(-) delete mode 100644 Biblioteca-Redes-Neuronales/test/initial_neuron_network.jl create mode 100644 Biblioteca-Redes-Neuronales/test/initial_neuron_network.test.jl diff --git a/Biblioteca-Redes-Neuronales/src/initial_neuronal_network.jl b/Biblioteca-Redes-Neuronales/src/initial_neuronal_network.jl index 19c19a5..067c022 100644 --- a/Biblioteca-Redes-Neuronales/src/initial_neuronal_network.jl +++ b/Biblioteca-Redes-Neuronales/src/initial_neuronal_network.jl @@ -48,7 +48,7 @@ function InitializeNodes(X_train::Matrix,Y_train::Matrix, n::Int, M=10)::Abstrac nodes = Dict{Float64, Vector{Float64}}() index = 1 tam = 0 - y_values = [] + y_values = zeros(Float64, n, output_dimension) while tam < n && index <= n new_point = X_train[index, :] @@ -56,7 +56,7 @@ function InitializeNodes(X_train::Matrix,Y_train::Matrix, n::Int, M=10)::Abstrac if notOrtonormal(nodes, p, new_point) nodes[sum(p.*new_point)] = new_point tam += 1 - append!(y_values,Y_train[index]) + y_values[tam,:] = Y_train[index,:] end index += 1 end @@ -83,12 +83,149 @@ function InitializeNodes(X_train::Matrix,Y_train::Matrix, n::Int, M=10)::Abstrac y_s = y_values[index,:] coeff_aux = 2M / sum(p.* (x_s - x_a)) - S[index] = M - sum(p .* x_a) * coeff_aux + S[index] = M - sum(p .* x_s) * coeff_aux A[index,:] = coeff_aux * p[1:entry_dimension] B[:,index] = y_s - y_a x_a = x_s - y_a = y_a + y_a = y_s + + end + return OneLayerNeuralNetworkFromMatrix(S,A,B) +end + + +""" + InitializeNodes(X_train,Y_train, n, M=10) + Devuelve una red neuronal con los pesos ya inicializados + de acorte a los conjuntos de entrenamiento. + `n` es el número de neuronas en la capa oculta. + El tamaño de entrada y salida de la red neuronal vienen determinados por + por los propios datos de entranamiento. + El tamaño de entrada se corresponde con el número de atributos de X_train (su número de columnas) + y a salida con el número de columnas de `Y_train`. + + M es una constante que depende de la función de activación, + por lo visto en teoría M=10 funciona para todas las + +""" +function InitializeNodes(X_train::Matrix,Y_train::Vector, n::Int, M=10)::AbstractOneLayerNeuralNetwork + (_ , entry_dimension) = size(X_train) + output_dimension = 1 + # inicializamos p + p = rand(Float64, entry_dimension+1) + + nodes = Dict{Float64, Vector{Float64}}() + index = 1 + tam = 0 + y_values = zeros(Float64, n, output_dimension) + + while tam < n && index <= n + new_point = X_train[index, :] + append!(new_point,1) + if notOrtonormal(nodes, p, new_point) + nodes[sum(p.*new_point)] = new_point + tam += 1 + y_values[tam] = Y_train[index] + end + index += 1 + end + ordered_values = sort(collect(keys(nodes))) + # Matrices de la red neuronal + # A = n x d + # S = n x 1 + # B = s x n + A = zeros(Float64, n, entry_dimension) + S = zeros(Float64, n) + B = zeros(Float64, output_dimension, n) + + # valores iniciales + S[1]=M*p[entry_dimension+1] + A[1,:] = M.*p[1:entry_dimension] + B[1] = y_values[1] + + # Cálculo del resto de neuronas + x_a = nodes[ordered_values[1]] + y_a = y_values[1] + + for (index,key) in collect(Iterators.zip(2:n, ordered_values[2:n])) + x_s = nodes[key] + y_s = y_values[index] + + coeff_aux = 2M / sum(p.* (x_s - x_a)) + S[index] = M - sum(p .* x_s) * coeff_aux + A[index,:] = coeff_aux * p[1:entry_dimension] + B[index] = y_s - y_a + + x_a = x_s + y_a = y_s + + end + return OneLayerNeuralNetworkFromMatrix(S,A,B) +end + + + +""" + InitializeNodes(X_train,Y_train, n, M=10) + Devuelve una red neuronal con los pesos ya inicializados + de acorte a los conjuntos de entrenamiento. + `n` es el número de neuronas en la capa oculta. + El tamaño de entrada y salida de la red neuronal vienen determinados por + por los propios datos de entranamiento. + El tamaño de entrada se corresponde con el número de atributos de X_train (su número de columnas) + y a salida con el número de columnas de `Y_train`. + + M es una constante que depende de la función de activación, + por lo visto en teoría M=10 funciona para todas las + +""" +function InitializeNodes(X_train::Vector,Y_train::Vector, n::Int, M=10)::AbstractOneLayerNeuralNetwork + entry_dimension = 1 + output_dimension = 1 + + nodes = [] + index = 1 + tam = 0 + y_values = zeros(n) + + while tam < n && index <= n + + if !(X_train[index] in nodes) + append!(nodes, X_train[index] ) + tam += 1 + y_values[tam] = Y_train[index] + end + index += 1 + end + ordered_index = sortperm(nodes) + # Matrices de la red neuronal + # A = n x d + # S = n x 1 + # B = s x n + A = zeros(Float64, n, entry_dimension) + S = zeros(Float64, n) + B = zeros(Float64, output_dimension, n) + + # valores iniciales + x_a = nodes[ordered_index[1]] + y_a = y_values[ordered_index[1]] + # Función afín constantemente Y_1 + S[1]= M + A[1] = 0 + B[1] = y_values[1] + + # Cálculo del resto de neuronas + for (index,key) in collect(Iterators.zip(2:n, ordered_index[2:n])) + x_s = nodes[key] + y_s = y_values[key] + + A[index] = 2M / (x_s - x_a) + S[index] = M - x_s * A[index] + B[index] = y_s - y_a + + x_a = x_s + y_a = y_s end return OneLayerNeuralNetworkFromMatrix(S,A,B) diff --git a/Biblioteca-Redes-Neuronales/src/metric_estimation.jl b/Biblioteca-Redes-Neuronales/src/metric_estimation.jl index 74ce60b..943651c 100644 --- a/Biblioteca-Redes-Neuronales/src/metric_estimation.jl +++ b/Biblioteca-Redes-Neuronales/src/metric_estimation.jl @@ -8,9 +8,11 @@ using LinearAlgebra export Regression function Regression(X,Y,f) - f_x = map(f, eachrow(X)) - diferences = map(norm,eachrow(Y - f_x)) - return mean(diferences), median(diferences), std(diferences) + f_x = map(x->f(x)[1], eachrow(X)) + diferences = map(norm,eachrow(Y .- f_x)) + println(Y) + println(f_x) + return mean(diferences), median(diferences), std(diferences), cor(Y, f_x) end diff --git a/Biblioteca-Redes-Neuronales/src/one_layer_neuronal_network.jl b/Biblioteca-Redes-Neuronales/src/one_layer_neuronal_network.jl index 67883aa..06b139c 100644 --- a/Biblioteca-Redes-Neuronales/src/one_layer_neuronal_network.jl +++ b/Biblioteca-Redes-Neuronales/src/one_layer_neuronal_network.jl @@ -93,7 +93,7 @@ end ForwardPropagation (h::AbstractOneLayerNeuralNetwork, activation_function, x::Vector{Real}) Only use an activation function """ -function ForwardPropagation(h::AbstractOneLayerNeuralNetwork,activation_function, x) +function ForwardPropagation(h,activation_function, x) x_aux = copy(x) s = h.W1 * push!(x_aux,1) ∑= map(activation_function,s) diff --git a/Biblioteca-Redes-Neuronales/test/RUN_ALL_TEST.jl b/Biblioteca-Redes-Neuronales/test/RUN_ALL_TEST.jl index a7c597c..b5f8ee7 100644 --- a/Biblioteca-Redes-Neuronales/test/RUN_ALL_TEST.jl +++ b/Biblioteca-Redes-Neuronales/test/RUN_ALL_TEST.jl @@ -19,5 +19,9 @@ t = @elapsed include("forward_propagation.test.jl") println("done (took $t seconds).") println("Testing our initialization algorithm") -t = @elapsed include("initial_neuron_network.jl") +t = @elapsed include("initial_neuron_network.test.jl") +println("done (took $t seconds).") + +println("Testing metric estimation") +t = @elapsed include("metric_estimation.test.jl") println("done (took $t seconds).") \ No newline at end of file diff --git a/Biblioteca-Redes-Neuronales/test/forward_propagation.test.jl b/Biblioteca-Redes-Neuronales/test/forward_propagation.test.jl index c4b8701..2e376d0 100644 --- a/Biblioteca-Redes-Neuronales/test/forward_propagation.test.jl +++ b/Biblioteca-Redes-Neuronales/test/forward_propagation.test.jl @@ -62,8 +62,21 @@ end for v in vectores @test OneLayerNeuralNetwork.ForwardPropagation(h, x->x,v ) == [v[1]+1, v[2]+2] end + S = [2, 5] + A = [2 3; 7 8] + B = [4 7; 10 -9] + v = [2, -1] + # Calculamos manualmente cuál debiera de ser el resultado + c = A*v + c = c + S + c = B*c + + h = OneLayerNeuralNetwork.OneLayerNeuralNetworkFromMatrix(S,A,B) + @test OneLayerNeuralNetwork.ForwardPropagation(h, x->x,v) == c + end @testset "ForwardPropagation activation function" begin + # Comprobamos que admite una función de activación cualquiera S = [0, 0] A = [1 0; 0 1] B = [1 0; 0 1] @@ -78,5 +91,22 @@ end for (v,test) in zip(vectores,soluciones_reLU) @test OneLayerNeuralNetwork.ForwardPropagation(h, ActivationFunctions.ReLU,v ) == test end + # Comprobamos que aplica correctamente los coeficientes + S = [0, 0] + A = [1 0; 0 1] + B = [1 0; 0 1] + h = OneLayerNeuralNetwork.OneLayerNeuralNetworkFromMatrix(S,A,B) + + vectores = [ + [-1,2], [0,-3] + ] + soluciones= [ + [1,4],[0,9] + ] + for (v,test) in zip(vectores,soluciones) + @test OneLayerNeuralNetwork.ForwardPropagation(h, x-> x^2,v ) == test + end + + +end -end \ No newline at end of file diff --git a/Biblioteca-Redes-Neuronales/test/initial_neuron_network.jl b/Biblioteca-Redes-Neuronales/test/initial_neuron_network.jl deleted file mode 100644 index 1bfd92e..0000000 --- a/Biblioteca-Redes-Neuronales/test/initial_neuron_network.jl +++ /dev/null @@ -1,34 +0,0 @@ -################################################### -# Test inicialización de pesos -################################################### -using Test -using Random -Random.seed!(1); - -include("./../src/initial_neuronal_network.jl") -using .InitialNeuralNetwork - - -# Declaración de los atributos de juguete -# Matrix -##### Problema de regresión -# función ideal a copiar -f_regression(x,y,z)=x*y-z -data_set_size = 3000 -entry_dimension = 3 -X_train= rand(Float64, data_set_size, entry_dimension) - -# Data images -Y_train = map( x->f_regression(x...), eachrow(X_train)) -Y_train = reshape(Y_train, (data_set_size,1)) -# Número de neuronas -n = round(Int, data_set_size*0.3) - -h = InitializeNodes(X_train, Y_train, n) - -@testset "Nodes initialization algorithm" begin - # El resultado es del tipo correcto - -end - - diff --git a/Biblioteca-Redes-Neuronales/test/initial_neuron_network.test.jl b/Biblioteca-Redes-Neuronales/test/initial_neuron_network.test.jl new file mode 100644 index 0000000..89c0e25 --- /dev/null +++ b/Biblioteca-Redes-Neuronales/test/initial_neuron_network.test.jl @@ -0,0 +1,50 @@ +################################################### +# Test inicialización de pesos +################################################### +using Test +using Random +Random.seed!(2); + +include("./../src/activation_functions.jl") +include("./../src/one_layer_neuronal_network.jl") +include("./../src/initial_neuronal_network.jl") +using .InitialNeuralNetwork + +@testset "Nodes initialization algorithm entry dimension 1 output dimension 1" begin + # Comprobamos que las hipótesis de selección son correctas + M = 1 + @test ActivationFunctions.RampFunction(M) == 1 + @test ActivationFunctions.RampFunction(-M) == 0 + # Bien definido para tamaño n = 2 y salida de dimensión 1 + f_regression(x)=(x<=1) ? exp(-x) : log(x) + data_set_size = 5 + entry_dimension = 1 + output_dimension = 1 + # Número de neuronas + n = data_set_size # Debe de ser mayor que 1 para que no de error + X_train= map( + x-> (x-0.5)*10, # reescalamos al intervalo [-5,5] + rand(Float64, data_set_size) + ) + + Y_train = map(f_regression, X_train) + h = InitializeNodes(X_train, Y_train, n, M) + + # veamos que el tamaño de la salida es la adecuada + @test size(h.W1) == (n,2) + @test size(h.W2) == (1,n) + + # Si ha sido bien construida: + # Evaluar la red neuronal en los datos con los que se construyó + # debería de resultar el valor de Y_train respectivo + evaluar(x)=OneLayerNeuralNetwork.ForwardPropagation(h, + ActivationFunctions.RampFunction,x) + + for (x,y) in zip(X_train,Y_train) + @test evaluar([x]) ≈ [y] + end + +end + + + From 4a9b7c9ff1c3ca9aa6b5cf5e0ce0478a067217a4 Mon Sep 17 00:00:00 2001 From: Blanca Date: Sat, 4 Jun 2022 18:36:43 +0200 Subject: [PATCH 13/76] Arregla test de metric_estimation #116 --- Biblioteca-Redes-Neuronales/src/metric_estimation.jl | 9 ++++++--- .../test/metric_estimation.test.jl | 6 +++--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/Biblioteca-Redes-Neuronales/src/metric_estimation.jl b/Biblioteca-Redes-Neuronales/src/metric_estimation.jl index 943651c..dfe7eb3 100644 --- a/Biblioteca-Redes-Neuronales/src/metric_estimation.jl +++ b/Biblioteca-Redes-Neuronales/src/metric_estimation.jl @@ -7,11 +7,14 @@ using Statistics using LinearAlgebra export Regression -function Regression(X,Y,f) +function Regression(X::Vector,Y,f) + f_x = map(f, X) + diferences = map(norm,eachrow(Y .- f_x)) + return mean(diferences), median(diferences), std(diferences), cor(Y, f_x) +end +function Regression(X::Matrix,Y,f) f_x = map(x->f(x)[1], eachrow(X)) diferences = map(norm,eachrow(Y .- f_x)) - println(Y) - println(f_x) return mean(diferences), median(diferences), std(diferences), cor(Y, f_x) end diff --git a/Biblioteca-Redes-Neuronales/test/metric_estimation.test.jl b/Biblioteca-Redes-Neuronales/test/metric_estimation.test.jl index efd3789..b6b861d 100644 --- a/Biblioteca-Redes-Neuronales/test/metric_estimation.test.jl +++ b/Biblioteca-Redes-Neuronales/test/metric_estimation.test.jl @@ -6,7 +6,7 @@ include("../src/metric_estimation.jl") @testset "Regression metrics" begin f(x)=x.*x - X = reshape([1,-1,-2,2],(4,1)) - Y = map(f, eachrow(X)) - @test Metric.Regression(X,Y,f) == (0,0,0) + X = [1,-1,-2,2] + Y = map(f, X) + @test Metric.Regression(X,Y,f) == (0,0,0,1) end From 05e5694b82069c6a42ece9b6ae3f52e1f98c3dfa Mon Sep 17 00:00:00 2001 From: Blanca Date: Sat, 4 Jun 2022 18:41:23 +0200 Subject: [PATCH 14/76] =?UTF-8?q?Arregla=20sub=C3=ADndice=20de=20memoria?= =?UTF-8?q?=207.1=20#107?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../2_descripcion_inicializacion-pesos.tex | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Memoria/capitulos/5-Estudio_experimental/2_descripcion_inicializacion-pesos.tex b/Memoria/capitulos/5-Estudio_experimental/2_descripcion_inicializacion-pesos.tex index 878630b..48aa1d5 100644 --- a/Memoria/capitulos/5-Estudio_experimental/2_descripcion_inicializacion-pesos.tex +++ b/Memoria/capitulos/5-Estudio_experimental/2_descripcion_inicializacion-pesos.tex @@ -122,8 +122,8 @@ \section{Descripción del método propuesto} \tilde{\alpha}_{k p} = \frac{2 M}{p \cdot (x_k - x_{k-1})} \\ \tilde{\alpha}_{k s} - = M - \tilde{\alpha}_{k p}(p \cdot x_{k-1}) - = M - \frac{2 M}{p \cdot (x_k - x_{k-1})}(p \cdot x_{k-1}) + = M - \tilde{\alpha}_{k p}(p \cdot x_{k}) + = M - \frac{2 M}{p \cdot (x_k - x_{k-1})}(p \cdot x_{k}) \end{array} \right. \end{equation} @@ -133,7 +133,7 @@ \section{Descripción del método propuesto} \left\{ \begin{array}{l} \alpha_{k 0} = \tilde{\alpha}_{k s} = - M - \frac{2 M}{p \cdot (x_k - x_{k-1})}(p \cdot x_{k-1}) + M - \frac{2 M}{p \cdot (x_k - x_{k-1})}(p \cdot x_{k}) \\ \alpha_{k i} = \tilde{\alpha}_{k p} p_{i} = @@ -175,7 +175,7 @@ \section{Descripción del método propuesto} %selección de p \STATE \textit{Inicializamos $p$}. \\ $p \gets$ vector de $\R^{d+1}$. - \COMMENT{Como heurística será generado con distribución uniforme en el intervalo $[0,1]$} + \COMMENT{Como heurística será generado con distribución uniforme en $[0,1]^{d+1}$} % Cálculo de Lambda \STATE \textit{Selección de los datos de inicialización $\Lambda \subset \mathcal{D}$}. \\ From ffcefe766b910af7e1d19e64b9a09837b4241ad2 Mon Sep 17 00:00:00 2001 From: Blanca Date: Sat, 4 Jun 2022 19:35:48 +0200 Subject: [PATCH 15/76] =?UTF-8?q?Creo=20experimento=20sint=C3=A9tico=20en?= =?UTF-8?q?=20R->R=20#116=20el=20resutado=20es=20evidencia=20que=20hay=20a?= =?UTF-8?q?lgo=20regular=20jejej=20ya=20que=20la=20gr=C3=A1fica=20queda=20?= =?UTF-8?q?como=20translada?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../0_experimento_sintetico.jl | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 Experimentos/inicializacion-pesos-red-neuronal/0_experimento_sintetico.jl diff --git a/Experimentos/inicializacion-pesos-red-neuronal/0_experimento_sintetico.jl b/Experimentos/inicializacion-pesos-red-neuronal/0_experimento_sintetico.jl new file mode 100644 index 0000000..e928f7c --- /dev/null +++ b/Experimentos/inicializacion-pesos-red-neuronal/0_experimento_sintetico.jl @@ -0,0 +1,38 @@ +######################################################## +# EXPERIMENTO SINTÉTICO DE NUESTRO algoritmo +######################################################## +using Random +using Plots + +Random.seed!(1) +include("../../Biblioteca-Redes-Neuronales/src/initial_neuronal_network.jl") +include("../../Biblioteca-Redes-Neuronales/src/one_layer_neuronal_network.jl") +include("../../Biblioteca-Redes-Neuronales/src/metric_estimation.jl") +include("../../Biblioteca-Redes-Neuronales/src/activation_functions.jl") + +using .InitialNeuralNetwork +using .OneLayerNeuralNetwork +using .ActivationFunctions +entry_dimension = 1 +output_dimension = 1 +M = 1 +K_range = 2.5 +f_regression(x)=(x<1) ? exp(-x)-4 : log(x) +for (data_set_size,n) in zip([3,10, 5,15,30,100],[2,7,4,10,20,90]) + + println("EXPERIMENTO SINTÉTICO") + println("n=$n y tamaño conjunto $data_set_size") + # Número de neuronas + X_train= map( + x-> (x-0.5)*K_range*2, # reescalamos al intervalo [-5,5] + rand(Float64, data_set_size) + ) + Y_train = map(f_regression, X_train) + h = InitializeNodes(X_train, Y_train, n, M) + evaluate(x)=OneLayerNeuralNetwork.ForwardPropagation(h, + ActivationFunctions.RampFunction,x) + #@show Metric.Regression(X_train, Y_train, evaluate) + interval = [-K_range,K_range] + plot(x->evaluate([x])[1], -K_range,K_range, label="red neuronal n=$n") + display(plot!(f_regression, label="f ideal", title="Comparativa función ideal y red neuronal n=$n")) +end \ No newline at end of file From 93f6807e7ac1513baea8d8c4edc01446d8d96f48 Mon Sep 17 00:00:00 2001 From: Blanca Date: Sun, 5 Jun 2022 08:46:01 +0200 Subject: [PATCH 16/76] Caso funcional aleatorio de R-> R #116 --- .../src/initial_neuronal_network.jl | 31 +++++++++------- .../test/initial_neuron_network.test.jl | 35 ++++++++++++++++++ .../0_experimento_sintetico.jl | 2 +- .../plot_107.png | Bin 0 -> 26100 bytes .../plot_109.png | Bin 0 -> 26191 bytes .../plot_118.png | Bin 0 -> 27452 bytes .../plot_93.png | Bin 0 -> 25177 bytes .../plot_95.png | Bin 0 -> 25809 bytes .../plot_96.png | Bin 0 -> 24036 bytes .../plot_98.png | Bin 0 -> 26457 bytes 10 files changed, 53 insertions(+), 15 deletions(-) create mode 100644 Experimentos/inicializacion-pesos-red-neuronal/img_sintetico_nodos_aleatorior_R_R/plot_107.png create mode 100644 Experimentos/inicializacion-pesos-red-neuronal/img_sintetico_nodos_aleatorior_R_R/plot_109.png create mode 100644 Experimentos/inicializacion-pesos-red-neuronal/img_sintetico_nodos_aleatorior_R_R/plot_118.png create mode 100644 Experimentos/inicializacion-pesos-red-neuronal/img_sintetico_nodos_aleatorior_R_R/plot_93.png create mode 100644 Experimentos/inicializacion-pesos-red-neuronal/img_sintetico_nodos_aleatorior_R_R/plot_95.png create mode 100644 Experimentos/inicializacion-pesos-red-neuronal/img_sintetico_nodos_aleatorior_R_R/plot_96.png create mode 100644 Experimentos/inicializacion-pesos-red-neuronal/img_sintetico_nodos_aleatorior_R_R/plot_98.png diff --git a/Biblioteca-Redes-Neuronales/src/initial_neuronal_network.jl b/Biblioteca-Redes-Neuronales/src/initial_neuronal_network.jl index 067c022..dec5ff2 100644 --- a/Biblioteca-Redes-Neuronales/src/initial_neuronal_network.jl +++ b/Biblioteca-Redes-Neuronales/src/initial_neuronal_network.jl @@ -96,7 +96,7 @@ end """ - InitializeNodes(X_train,Y_train, n, M=10) + InitializeNodes(X_train::Matrix,Y_train::Vector, n::Int, M=10)::AbstractOneLayerNeuralNetwork Devuelve una red neuronal con los pesos ya inicializados de acorte a los conjuntos de entrenamiento. `n` es el número de neuronas en la capa oculta. @@ -118,19 +118,21 @@ function InitializeNodes(X_train::Matrix,Y_train::Vector, n::Int, M=10)::Abstrac nodes = Dict{Float64, Vector{Float64}}() index = 1 tam = 0 - y_values = zeros(Float64, n, output_dimension) - + y_values = Dict{Float64, Float64}() # float porque la salida es de dimensión 1 + my_keys = zeros(Float64, n) while tam < n && index <= n new_point = X_train[index, :] append!(new_point,1) if notOrtonormal(nodes, p, new_point) - nodes[sum(p.*new_point)] = new_point tam += 1 - y_values[tam] = Y_train[index] + ordered_vector = sum(p.*new_point) + my_keys[tam] = ordered_vector + nodes[ordered_vector] = new_point + y_values[ordered_vector] = Y_train[index] end index += 1 end - ordered_values = sort(collect(keys(nodes))) + ordered_values = sortperm(my_keys) # Matrices de la red neuronal # A = n x d # S = n x 1 @@ -139,18 +141,19 @@ function InitializeNodes(X_train::Matrix,Y_train::Vector, n::Int, M=10)::Abstrac S = zeros(Float64, n) B = zeros(Float64, output_dimension, n) - # valores iniciales + # Cálculo del valor de las neuronas + key = my_keys[ordered_values[1]] + x_a = nodes[key] + y_a = y_values[key] + S[1]=M*p[entry_dimension+1] A[1,:] = M.*p[1:entry_dimension] - B[1] = y_values[1] + B[1] = y_a - # Cálculo del resto de neuronas - x_a = nodes[ordered_values[1]] - y_a = y_values[1] - - for (index,key) in collect(Iterators.zip(2:n, ordered_values[2:n])) + for index in 2:n + key = my_keys[index] x_s = nodes[key] - y_s = y_values[index] + y_s = y_values[key] coeff_aux = 2M / sum(p.* (x_s - x_a)) S[index] = M - sum(p .* x_s) * coeff_aux diff --git a/Biblioteca-Redes-Neuronales/test/initial_neuron_network.test.jl b/Biblioteca-Redes-Neuronales/test/initial_neuron_network.test.jl index 89c0e25..50d3990 100644 --- a/Biblioteca-Redes-Neuronales/test/initial_neuron_network.test.jl +++ b/Biblioteca-Redes-Neuronales/test/initial_neuron_network.test.jl @@ -47,4 +47,39 @@ using .InitialNeuralNetwork end +@testset "Nodes initialization algorithm entry dimension >1 output dimension 1" begin + # Comprobamos que las hipótesis de selección son correctas + M = 1 + @test ActivationFunctions.RampFunction(M) == 1 + @test ActivationFunctions.RampFunction(-M) == 0 + + # Bien definido para tamaño n = 2 y salida de dimensión 1 + f_regression(x,y,z)=x*y-z + data_set_size = 5 + entry_dimension = 3 + output_dimension = 1 + # Número de neuronas + n = 3# Debe de ser mayor que 1 para que no de error + X_train= rand(Float64, data_set_size, entry_dimension) + Y_train = map(x->f_regression(x...), eachrow(X_train))#ones(Float64, data_set_size, output_dimension) + + h = InitializeNodes(X_train, Y_train, n, M) + + # veamos que el tamaño de la salida es la adecuada + @test size(h.W1) == (n,entry_dimension+1) + @test size(h.W2) == (output_dimension,n) + + # Si ha sido bien construida: + # Evaluar la red neuronal en los datos con los que se construyó + # debería de resultar el valor de Y_train respectivo + evaluar(x)=OneLayerNeuralNetwork.ForwardPropagation(h, + ActivationFunctions.RampFunction,x) + + for (x,y) in zip(eachrow(X_train),Y_train) + #@test evaluar(x) ≈ [y] AHORA MISMO ESTE TEST NO LO PASA + end +end + + + diff --git a/Experimentos/inicializacion-pesos-red-neuronal/0_experimento_sintetico.jl b/Experimentos/inicializacion-pesos-red-neuronal/0_experimento_sintetico.jl index e928f7c..0eaffb6 100644 --- a/Experimentos/inicializacion-pesos-red-neuronal/0_experimento_sintetico.jl +++ b/Experimentos/inicializacion-pesos-red-neuronal/0_experimento_sintetico.jl @@ -18,7 +18,7 @@ output_dimension = 1 M = 1 K_range = 2.5 f_regression(x)=(x<1) ? exp(-x)-4 : log(x) -for (data_set_size,n) in zip([3,10, 5,15,30,100],[2,7,4,10,20,90]) +for (data_set_size,n) in zip([3,4,5, 8,15,23,51,73,100, 103],[2,3,5,7,10,20,51,72,90, 100]) println("EXPERIMENTO SINTÉTICO") println("n=$n y tamaño conjunto $data_set_size") diff --git a/Experimentos/inicializacion-pesos-red-neuronal/img_sintetico_nodos_aleatorior_R_R/plot_107.png b/Experimentos/inicializacion-pesos-red-neuronal/img_sintetico_nodos_aleatorior_R_R/plot_107.png new file mode 100644 index 0000000000000000000000000000000000000000..5ea6605a62ebd39b68e2e4955cfee3d73f91937d GIT binary patch literal 26100 zcmafbcRZGT`1YMjqRdES3(3k}A)D;IC3|lY8FeGsJ9~v}*|LhPWUuUGZyDLV=k59Z zKJVxK>-F@B=W^ZO>$=YGIgaBv&#NFM1*zMZB$x;U;hF#WN{!#0BcV^oHDM1cDMFBmPwFW%Bxzy9mM331a(TvrJkPpW6r%6Z^hgWeu+5 zmcOU9evy99xG5R4VL_EupzEk|L6PTM*WX0q689Oz{$bL*jom+)8|Q4gMkVrFbjRx) zvpwk`Rc~{%)^qFi%yX+sk}GiOILusr1VXNVtLcKAkT5njR>GAM;Y(*;6{N%%EA;w! zZ=^^!oI<#`u<#@QeFE3Tp9y@-aPiBP0K|;0Swdf4i}})GO?D=-^zO7?YGF zVBV8lq+8us^z~?WDOWCGXLa}y4-b!Vk;}I?*Pq3+6qWy4>`q$hO=HCm3aK=(ZMrx= zN#=9LCm=}5+{sbW*5>m$KXqLjQ6_sQLlE5Ry!i9z--LZ0_QwaRNht-ICI7Z&(!M>n z5TbeejhNrXLQd}1aE3A+9i3Tw7}?R$5r5Zcq4rzc@oIa+a*3#ji08Jpp|~$TYjJaP z!^Lf@)U5?Q|J|bEbXo2rxkyS#u(Y=qcK9t)t7rE;mOVl4?%jC)VE@2C8sxy>U}%k1 z=)sH+1(nOc^|72!^$%lWW2um6XlS3XzkggxiU*BW^A(Lk83N>IJ2xY#BJW9?Zo_>*aajkN9whB$SAVD5pH4)5PlHsGDad zS?Dzh)%O>l6Pek>KB!Zl{%xliEz)hD`-@E>B~^RtVh0kCk?DIT zC}&BAl0V^RVCZOVZJnNO^g!c49?>@c`SXYHkp?9an_Tcy^mRN@At51f26|l`PFY#m z7cXA0b8r+D7QT7=R!mg1;-WyKfI`Tt!-QSHZCy)4!|nX^sJ>p1m9->8EO21OrR?ke z+Gv`fN3#k04IJ|I+1ZS)*d&}CV`JL%+_ie%2b)tv zLqn&hUQ$x+eSJ!XhK4EZ;p9(5F^*17G}YAf>R@?@&L-TYUnkqL27P!JfQyQ{0b ztZe7t0Cr6vz-T-zv!;faYVS`g7Q0g!;~PpRXJ=<8r~3MO8(Uj-Ms-n9w5Pb|=jZ&^ z^cNCY{a;*GL|K#>WB>mB%WBy8v$uC?_ej6aZTNJ}7TipN8gDFQ_w>k_Jqp~1;94Yj zt*Pm7hS-gb9e;oSd-v|y+1V*5D9lIQWi{w9DT9;dc*zL}P#<~psNmhZcMzp(B?{Rp zQ+4iJ{aI3kgoL6QrJe_y1_lQ6O^lBoMMp(lL-Xq)Ey&L&7xqq0O7dL)_1SG>99FmF zDIMiOkjpmp#_-nd$53?QL>ekhQa8iSOEgbs@s`yJ#OgctA(D zxVXqp9Kxdi1sM?V=j9pym3jDDT>SFo%c>MaLP~sm?wRW{18n}!pR`!@FaJ_=b89dW zDJF5t4`M_nCwqY(XJ%4^bC(zj-@SYHOm=5yhsB^?OHXg|i|d--)f*(l|H{pK85tQN z-qaX}v!BIBMMoDE712;r>r`508){`JeQ#@{d+?xhVTapxTwGjSOIzFW{MqK}{uF76 zUhNL-jh{$*ZQ+nmH4=%ucH@TiXwGZ9NZIVAo|LYiKks1rzeT@YR$e}MQ;Ugcrt!4^ z4UHIeWX+c^5TR=oYsAvdk}3tm{r&x5liyCYczAe;bD8&kCUOOPWjHhDkjHM6N$x|S z&>*KhmdLJlZB5ojdue6&!yY6j-6=jXR=H53-g6&-{`gdBB7)ALWfukRz}wjn-R zspV!h#GfK2ixn*5${=-k>5zMkpzdRb2gUj{rsn_>E<* z)f-AM>c?HUp{*+W83S{D2zj~--8qitBp&HD#WN#mq^#Q8p0hO`uRe;E&DL*8ed77c zrYa{SH+QK!i6`<(FGgqA8>w(|OLJEKlt$xr?35@TyGe_|oKQE~;^N}bV*SB8Y+m-X zI2XTuX?4p^R9K3gTZ1q2FU3KL1FyB3*45V!#ohV)x7KYV@$K8UImBtbO|SOz|Gm;I z)XLZ$=1BN?o0Quk{_*xbDi4?T_I7K-(0+@Gjfv{fb4f8sFFQwGEnV?(an!1>BrSx3 zA_NCUN(}9#XNAuXuTs(CVz{mULODHT9y}V!h$U=!bZUZ((9lp3%EQCCaARZR68$0@T$)85S6@;urRub&1$+rOhrB5J@SiXv>pk ze=HMXb#?W9c_d_|vy%g1=S4Yq!W{V|2*0PekY*EKKo)*cKE@m71E2zI^-Mt_EGS63 z)@i{!?X@IPpCS^n=e$!bZ&-;=@FGI)#G*lPI%FVYR z1bT%pP}ym;#L%$G`*mB$J&cTh8xz**XqL_F!3FC>N;PJuM#mQC^B2`3dQ+dA?5zyaE2geP zUK4y1M*bxKp=ycv^1=caY`F7M4^(vt35mxEawMVub{3v(jI-PmIeDjAFkDqtB}eBx z^hw#<+xy$MZyaVnYg|@Tn7@fo+c3_X_WYe|Ut`KsV(2jYshX=`$+|vLL@K(Ro8~>h zM8%poQmCEvP(wpQ(qPSXWkBNOj+oHifPp~m#P#dfAKt<2ZWar~rb2=jYdm}T;`6VT zmbcwzQ0}dXqN+a<&?^+~4(1K7&b9!6vzxBZ(`I-4Bfht_P|KYnuBE0Xo?23A94Aey z$1*xHqTx)uR#04wee2eDHo2v1`QbME!$L!ANf<3HEtOleLMQ7S$UX>}BJF{4bH$YC zLhLhfY46uvam<4({~)-ik#vfwHqwZ30hv%2{8?~7Jke-6`2m*Qg?PiLx@0;$2nigj zAygetd77=_9}qx|+?;7L>>>eJ{05ib=e*u5h^j%7$9_5l_jt9Sq~b1%cG)$mJ=n96 z9Z7b)RYL-=gDH2649meBOI9WZhEk{#pFc--n#|+xET2H_;WE90DWRkkF&pGC-w`>E zC4Bh%YRZ(aUMmDgWpHHRN4olBy5@)o+>N&qEb-B!Jmc2N40q;-H&~laMOml_s6>~8 zSsVKdo&n6m73Jsg=La0_cppGSpqWeq{_O8>Zz~TBoTL@i)MCtn{Adzg8kNdM8G>8! zG5r&l*kNn?rg_KZnDG*Oc}2_m6S@{gwAoo$SZHWkdV9m=h-u$Y#xd&#;PQK)*0>qn zY7shKrs+--BoDVC@&qTV^dyY(bg;6@@A)Ehx-IsGlG6uL;J2x%GssS3V`KJMz2oCw z>}MJmpkm3$@Ly0)m)_;g54c6OwXnTg3{y@x8pohbU(VjT-R;P3+$oGFgpu(K_W zr{MI7&oW7_60<$`bwi-@L*$AsM=J{T8`PL|;-|QkUcG@GVLjv><`3bY^b%rKN29-V z>Nz;B4Ywy08`m4=C=Ad{b5N`bVaUNhC zMn-aSGSpj-moMR5EePZ-n-xhhL*ihYa>nP|GPU%!SLA6WnGq))S; z`0eQEn2?Y_Cg3*2SIuPDc%Nzy{M54PZc8bN@rZD!#Tt}}wUMGu?p5?_dP~!!_wUya zBls2h8&7w-Ag=+)1+*reJpcu4_hmgKV<`y?DcX_SMe3jHINbhsV*xv|ai=4zpxl#}^mp zX8_5l z(pI6USous*k(HIzemFl?f#MoKN}zIug@qv@x9sihuU=*AgKY13f3))+q$hH6@)EOz`D4@+Lt?)?;q& zf3O(;W1j0N_Q+FyPF({gA{yi>7yFLw$yL#g&d!HGZvN?u(j&w^4O=D1(cxmaY+iJ* zRS-~(y>VF`dU$r82CP2OA7YM_(;`Br2$(6w;}_S)B2tr+>j6ihucKq#WtptDpMhBG z6hDN#N{yU;eV{KkT`(9d%S05tWLJiN7A|srU~Bla;fvJBc|(LQ`-2AywvlQY8r+n4 zt6tON!teZ+h~%qO^VHxW8=My2$H$L;QqBTQ)yeS{kOA;Q61T$P+5_2a6|v&gmx2Zx zGd?jU+zMEz{rmTba5t-`o10M4_`5nwny%c{t^}$zx?-nL z9IyAx$Y{2D#(VA0pPlVlv5gn=uYIXBiuLl;7{O%~ggB|s05Q%-hoh(WTR^!P2T<|Z zxE&-FDIp=)tDGEPJr=`CE5g7Q$bW;4%tS%rP~xq>l5~nGUwAP`cakWP@}0BN)3TsR)`byAYGt!)v9=nw-?!49J^ z6C7-OJ}vn=EfJBg0LATQ8udM?y-p8512J$T66e}L56~@r{tYY)SXft2uTY}^w2hh4 zSH!mh($Z!?oS}H~>LW*-0_oV-4<9~!+AZRGnL8l0No?ZtIK`ZLoTQd##M`dl@@5GE z->a8k`*CeHVc{m3r8fur`}*}S9aCB>4kk!~#4`&EnQpak_WH^t9J$27oeu+wEKy@@ z52q-Zsu5>oWi_m_xi@x$mW{1%V&Vj)>nWrR+)-kDg?Dk^b$X=ln zxu%DTyG(;)W3@m!0q9GG-S0ou%uoW6F8kZsa6d>>@Hn750diKoXc|{kCoShezkc1r z!vpF=NV0UuMLE#9pS8M8u4cD$;x8?a-VL8ZY-``{h`l|`WI;>-f z6T_*!=q&XP_ZW0gRTUM5G@+?l=Ow^|Am8xu^2Wr)0a`i$%h%S{zCQUUficV52)})7 z+$IOG4jA9r@qSlt@5Ri;IjSlW6I)C^YzMk66-rVG@{XtH36LnCNn2!|euWfADcC;uUm9(^e0fui6xmW&b--@0-7o}$yG>mt5 z%P(!r6Evz9Xgr{&k9JRkFdp&|$$ktHF6b|1y{QU3_k_|Yh>3|QD1>dtD?mH+ZJ%rX z{@v?nAwHnJ(EiW&AYgzbz-<6bKY8+m03RQ9U8rBH!v*L=z`UwJKrIGs2gqJDy`r0g z14xqZ!otkhi0zXyd^W}_L3|#Ajnyfl3*@}d>+rjs!siagwRsGJEZqu=en7oWpnSQ{ zymklNb_;zD3OTs2i=$(|-6(u|O^V`mg=tsZ@87>cwK+aH**!X~sHlJxZ~?Z5-F`rN z^%zh9AW~2zy!VGSL74;6J%8T!+aB3%*8Ab{Tp)!vrPu?{Os=1vTMh1~hkrqX++QDa z?$4AU<9C5=wY0Rfli7 zw!sUoXIl3$&u43Yea$!@*$;u9-BCofUh6|s6s82fwY1{fxqhdLnMy+5ND%(6+R8BL> z>AY|=g~OCQ1F$P~$Y%+d9uS2Ce zxzH;SW3PUH^{e!8I7=`^DOe|3Wm<*61(ti6vQ+X=V%d{wyxJg8Pq^Nm1;2mqGOhpt zCV_oTr^X>8C;!#i@pk}>oox-^M)y=w?@N6;du<6A9I~l(^%fP9_*NT=Z3UmfR*lzL z07mXGia`&f8A`R1D$NWhcv=G96ZktVv; z=toI<{9U-D#%{rvpE>frPDv6sdxt@HBo0L%fXJZ{pYj+EX6(IGXJ1s4OtZSD7OO8g+G zq{%5MT>AAL28&!hDWB9BQGzRwq};(e*R{p9wP)xwxEOn*5+iaN{&O!K9Y0IcI=Q)x zY_US^eHh;baLj7mPg`9bdP_w^Lu%YfQw5r=?(PR=W$cmCCieD*p5cfx9iR|rOPo05 zg3{8`&)E~8lA(k|EhZL5MwC|k(cRDstY>(kOs*1?(C2 z1f&$eq+B>J7Mwg@z2XmS=}*{mD`Q&lrK7XDx|%;@s5}E<1MPNXK zM_1R|n3w~s+Io8T2?(IT{MpzbBO;Q-6^DC|?kqgxQw2T7)wQxm0fHztC8c}TVUJ$w zHT1;56|znElyY;fnXw`6@_m^McM>L9v-za@`=;LiH4Er z`)CtIM$hZGZrM}^e6H9SDGb_%8VJ&aT@M#`%Fd1x@tZLO^Pi=Bd0aTdZ)1clu4*dX z@(${EcHfpAR z4yy&CA<{p{X0HzAsk*pu4*MZ6Lr8gwS8~vJR?LwYR0`Es)JxJB#B0@Vz}c^wfHY6n|* zHIe`g>F=*hCQZg-*eI9P-`vtdYN#$L86cWLX;?mHV{UHVjS55)_5=usxzPb>W;(pG z@f-0e)9U-Hj|WH7R-yTyP6chVk7|ta!gvN>Tu=;wA*dACs#Rs;x95~dSk!%UG6?tm z1M-nu|2qp18VWht3hH1=iaw~SmrG|^-l0OW{rocX(s2(je-1YCLW(8c+|<-^(fbht zgA(I~VIX>?PD)ae?#WAsSlQU5q=H>Zq>{37q#g?oTNDV-0|P2Mu7F@YJZ`6K?C$L3 z7Zg;+1M^*+pC{(kOF3mab{zQw81UicmkE(LMy1^pP_IEycev}L=!Tu}sYKV)9ZY4O zy6WJ=&LI$@7!u;*Oga^x0Et2$BTAYU>c`&B4hhIL#FYHI3?_X%??8ynj;&%J&J!@-tw*t2t>5Q6HR?3?QqK)(yVZf%}+c_&R$-pSyJIOdUiTG z<8Q8G*-h5WuB{~{C4m+<3B=9behVa8klo}{1^Gbd0PZtAJ$=kIQ{za(!qPJ~c2u|3 zs9SE<4cfdob^m;4v|5n_m7=NT$ z45B8LSb!H$XDD@I7*oIwHmB;K9Sz%-%4IzQtKo@0(kMIxgoGywdkY+al+Wp-2<6KO zolG#%pFc>^S(tpd7}hk5tagElgp$i1^1(nzNz*wAl{oHq(B=p+C6tx>pT+R8VkgHlcK0%B4$qi<*gcpW5%<@#qQck?)n z7-D6CoNGsd91C zPoWdG8;6uz?t~_slxK4;Tv$O`npp6q19L$->V_ewE-Q7;`227lTxr%&YlpOY0m5Ai z^o@CJe)-N_EG#xRH-kvg+$;(~itGdEX~SsNNEudIxBbPV|Q z*q#=nd169@v=Cb7S6Cn_X?H?W+Hv(sQsG1{}#2tEidltryU}DE; zXTB49MkoagdZuYlJk6d{qYMiI3VecyNz2#h7yR#y+ayC!Izegn+3n_mdIbXs06sev9u*6ONNkT^aeq3e8yuE2!n%a>|uYBp0}hDS%;C#r0jhzhPycmV{pKN$ru z4Nw4jq&&5H=UuE#0NFL!&&;mPz!G%ws7{E?tqd4mDIG2^ELzhQa`GdT( zLpD5+??NJ|+aRWOjB=6y#I^=K3Fd)>Eje`@9N0V*tBl*j0H2WyzGUO%bOCAVI2P)R zr5!aH8QEPHJ?Tav$3Nfgo6g*h_bg*&32|}zpr?fFgN;v+TLirq@Gmen?;Y}<;bClb6_x$gl zR`}t#I=uVVpq;6m72NGFpy}Wfq=vDFf1a9JMs|P4fg;%=ovnf$Xly0?$L5$8KWOps zRkr&!JV+%Qn{|j)01Z!FDSgrA+Cq~!EeC*=!z@@FXP6Rc^+Csb`s$e0FNzjWfqh?D z<^|!J>pD;0W2*gk_p;zvjOkc`&9x86RLKvj%jCpSrM^pDU%vrrDzMTgFSkWJQH^Q? z4UHVtLvV`u4+pRKJa#^sao_8^qvJsRy%x<)T6krj0EH$>^^9y_Xl7>?# zIWYe=^bn~09DwN&cS4v63FtLPCrQ6fFN%zCopCIyi&s;b>S944EXY9)0NFALCbFO{ z`ELiR5-%TLWC;ufy?XWK{LU}gZ1yKl^vyBX2L=X!hNSqX%T%t5OJl4ToqEa`D=Gtc z`HIi1SF_y~N^0o!R|05!&pM-*kT3@a0Tt+DL$Elg9uW}{YojIBnBe}SgM-cho{DrT z#~VC(Y8~L`jEoFWUtHYXOB@TYTVOIf-Ou1&^Pa=v_W637^sVlSf-M5U=BZvnpgu6L zsC~Cwo<8~HVo~}8>@+wym@A(osqkDs3u+IGUX25E6IAjlfZfkKe1&Z7^SAXb@FS?x zp!7X``V^|?!S?nqP+hXJXi%h&iiih`oyk48aCfIZJ>EzjOjdz_jhYp}aIBq#c2}gT6GV3vXm-#Xr40t1Z?eI2w53H1 zRJLEGRM44$(jNN*I8*eX$y>VNKhVj1clU9|^9gpltw>_kEqa)=Gz;Z%z#OI;3P^6z zan^(pw~o8ewQ;Hy1YUZ|!OlJ~I;u$*4Q<)Rlg&El9m8Y+@Y#aD@veUT31ZYA`D!^{ z^FQ0tE5#-iL&4i^3Qtc@UEK+oCW4MCGGcL*mfv;N1+qE-80%gIpcPVC{X%DZsz@bo z@5XaQeqXwQGJ!6OZE8B%i*r@xKyM8MVzA6<;fHp)*%{axK3ex`pRv~AN6bU3O6ZAo zqN*VzI?#MoRaL>{`g(e&Q|>cl!ror++ijQ9u@5a|@T{Aw^6m$*Q*}Q#_(D)smdFGG z6V(tjYy{1IC-*RpMSpd3(;I3fBx88E2z{9qmsb#Os5}BkVJ;94Z+3O{hY34M9D+>* z^lCp|@sNcjEE&xcy7v)xl425QMUlAnziInZU6b9>jgUuP3<%$#;E<3)$0N|nK6*Sc zYQEOp+kWHv^+?tZ3X?vM_@<_&9QTk#37}S?#B6=$bn;mkQ~^@DU!pxd?#qb-F-j-@ zNsmX3EW9BX_5IXOjWPc!gm&Kxm_{_I+7#d3Fu}=0aS((^u#rX(F4cF6$5LMBJg%;U z|Hb>gkT?t=)-PWCfdEL_rQh0rEI7`t;~Fvj>ELt|AShF`BmOL;AW#rd=7eblnCu|U z?m?f!NqSg&94||k!wtw9!TbhKlH_AVxQWuzzHi^2awL%ZzkHj!_nAeBVl5-M5Dlz zeGD=bOd!l?)PO1vgLY}IgBE~aLvchXdI%jnvF{oRS_qhGs}A8HEWDYBf|COW9q@y` zL!Uh8&tqd?g&`3b&tzp`(BK049XveM0L0}J*cU*WxrLt9)(mhTGTbF!>88b!40I(^ zJ35Oho2ReoE7%;^r;qMbV~qWWto@2RZ*rR6_&=QVaqdQ&S^3R3pBh5&@H0S!fGRaL zIf*L@6*@t{-413qp*?ENw7#^2l2+SFh7cpad}U%a!^e9KNAFY`6SvJeP~vg>O6XgX z;QbGUC90eX>9gkK<*liy`QW7w`B{ze$jf`Kz*bOU8COEtPTdLZa?jcHC8d#&RXqXq zL!tor^$Bn!!0%sbYB(Fm+gdP4>^t@bRO@iF#Yn-KKCsi!ijs%BLp^~a00>ZsfngbB z)6kMZtzYL2kNFz}XZinIS-I_~l^Q|>y1@6c8EIPB&P(|oG})J}PF~GQ(6E0Fev02xvb;k|1QfM7lm=Nku2BR=Wn*yf1j<;lD({BX=;BD;{=7@{zpY| zv1F0FN!C;DA%~~-|DA}`Qn~~g;rTt%#R{I1|6Ru4^nqwd&+prbI&Nk-a$nG)TAFC1 z!slj?QddD2g+cZu-KG2X2cN3h@#(y$X|8(#Argpq%O_N7%S0t_VH3%P z@{{2e*8i@}#q0WxN_QpAG1^#Io_tZ)SAU8s zCWyrQw9O=?<2N{7pFUIE_)m+F$Hq76hO4MOpjQ*}`A@V+B%*CjG`bbnjl_8t=2gNN z|KCm0T?^VS`XHoV_+^jj$zQDhQln@DhII=CcOCzkMC+W^e|c4n5^n_En9VkqiTP}e zKKmmQm6i~kH>HuT&nv8Yv4a?%e2M+f9H?V+w^NH5elUkO$zGZ*1P9+}ij8E-?MK-F zK@-EX;7?)K;gKSrQgdQV6>(KBZAa1QM(D_2K2pd{{EUp3SLyP8JSg*wzs%vjkKs&W zgoI&N+yWi`I5N^o`J+qBKE(gi%U0JNQ+m|0N5n&nr5O1%qP+G(;yU+v!dFG{eb zk^4v^ZdD;XL;gbi1r;*XdlWRj;#&5c0#x>2X~)tgB4i~luT6r5ZzSg68Txhk7D^7e zEGb$M7^K%)ennEm%`_+-QKw#Bn-i0^8NIm{E$LxbFpeFv{|?li%zhF>30K#BNa-ML zL#rKT&tdGC#LztWtIc31zfFb31$y9v86zZK6)kE<&5;7l09T5&K2r+`or9uq75$c0 zxtaXjn$5$)6A65;iL$}E|BBevd$U4xpj?0iKfeYonlNBwz$0wDDw(eajL99>{H{Cb zdgAr#>8zU6Rq*lYkkgP-s3-tcYFra}C*NE1oa_z|2+SYdyJTu`!ao!1?cd*Ed;mK3 z&|~9XlXY|Z7jT=jV-)7@I-?%6VWuZ^E;!Zdg&7fxV(@)&z9CPrp>Kb3?oRwx!qtK< zbka^us(Fz-yW7SJ6QPn>XU>_$*&&}bs=Uu$MM_sds|`9}sX$b0A89b$0gyj$ zO%$AM_1Sm;z`tzvfR~(^^u=n0`5)tnLi*RDw$JIp{@+zCC%P?yK(fK58p@KwArC(Q z#Q;XmhqZnJT!qBkrt{E$-ia@|bExMaB#46ObUTvz9FyJ!!{0BV2KX6Ww2bQ=W}N@4 zc7k2lcz87P)W*lhNvg+*u4Hknn-#MNT4fr)}S zcuB>@#RX+=yzc2%vp<2E4Qt6lV`0uO)dEolw?oyITt#XbO(D3-bI zME6nVd@n`8VAN%Virj_;_`X_0Lu1oprU#y9!1RieQ)93gb4udw1hhR9i&^b@}JD zlz1wgjOjep2cI&@(h3+qURsO@6Q8OT(#PZ1XA*Ty8jt2LkH$eM*uR!__qWYjR7=wT z6kTK^uBlF@sVj6iO3fzw_0z)3lXl=Rl&}X2)N0j9n zWQr?6eeiC0B@G2h%3XzI>-`9L3Frc^M?m5_8iL4joR;PTpQGhx5S z22!3lR#AMbZttg72+A21Jo_HG~IgF>Qt1(u#P({q^?NBbywo&>VlG`lqUnEKLq4PA49QgZd45 z*cgbuvOLDFSW}7j_3KU^{wjKfckULLm@-->sOV)z#pRp45bwjVCQa@_S*VM?(Dr63 z^Herr4`D=?BQ_3=9Dn&T$BM(5O=*num(Ny@G(S-gW*t)RS6KfbdlHnfX%>lv_vhbz zg>4%wpYtKRHrbqT;o(_$>n|~1G@t2_hRpleZ0hWf;@TP?@#7h~#OFiFnjJ)c`~DiS z5}v@55H*#_D63G?)=Ot1c-TrE(nfh$ zW%7dNW!1Ibu+5Rg-xCCaq;Kr)inWYFU+!Ob?Y}h%E3^Ge06)*hGJe{Nl$)yV2a{H_ZL6 z)RFeuziTttD*CShG1FEq8jZNbD1F4P;E7Itim^@>=S4r>AX%|w4LHPsC~5T_0^zFq z{#i`6KR6lOcjo*IQd1>8DhOBtl>_B^GKSyPmP)Sv&jLns(!Y3rGhq)aC*cGuATctG z$bXH=?aF|x3t*vXJE@GI>5k3OSG#{pF7!C4D5ONCajSDv3IfoMp!R#d zGs7_6mFL?$< zPR$0v!ybekWA9g$LP7^Ch4q&oj@K3Qb0i3xpzCR(_1%G-BB30X$tI=zp@`w9@|^{S z_fA8YeBB1p<*qqne1pkPw7jP<1n3isIA{e2O;&;;0z<95a0%cNhpwhGr4Ob#?GM(*qJuWtT&A=EQbdbMS_ zCpGhlbpc1zb(+NwLm|}&&PS+cqwkf8U&?;uG`Qe#?|rk)8+*mOuLhC@wKmXdjk1=* zHi-w<`LTVg;i~oSTLvH>cZ@>ANkK;DAtR%cgM)=vcehy#y*HN>*}k~;oKIS8dI{QJ zj}0BKiHB3IU4Q3_T5n`xUS_7;zK>U#kohWfy$Z2QIbF^J^L%+blRUibiJOz}S!`N& z*38JrWt^P??U>?zVg#{4w+n`==B>dYtC5Xxyq7hyFTzp3i^!EG8;Zsrf6Zt8?Y&=Wwe#z; zE~uNLjeG9_-j~{17`~4x0X>uL76GQe{iB~tyD;Z9a~R8A?l`?X=joJ(zjSs|pu`(C z$2%>G;@VTSH(FW?4y!-qn;+QHy_VayNi=Vmce74)O&|b5@YaY}{&_gTws^faldTU& zvlQrx>v^iV(5c21y@7q7n9~9`(AX~e_uu7D)g0c7q4}Gc%r^jA|8431$(@49-Jtn* zo*PO`-!(Nx6B&A!J~qi3nsva~FJHbC5fK5$gl&SCJ%1hY%PW24apRPKl3kmY$Mrb5 zbn|ZK-inIXZy&;-YMZu(8&4MCCG|FpQCZ@EGZ?{x@xG(=@?LmdZ5Uc*ZKIZNBwzjE zaZ)#3JQPWp?H{o`>a8K<5w?1&E=!H7aU$jH<9Do~W8RkkgHwA@`2()-z9iRF`z>7^ zHW+v^GcrAi0K^F`?CFRVVxyJ8tt-yy8e%;6l;}AGb9qvv?bj{xwV%)peY2uiuW+fO z7S7r}2`9X+4b(woE}eBl(_L9adt`~vgyx#Sdr^+?}#$!yW^INXK+xM`bH+4g) zvE`-0#3^9je(<=S;O_s<0$j9j+h~@qH0%V9e!{*1P!S02@x4XAnNH2%pI=<}gn7S_ z3U=G|#6w3d*!x^fIY!J?1Thp(^0rD@=`JwpmYj?$c85VO!8MRK1t<7kmxT^zSOWkG zVkK7t;4F2`_uF%kCv1py>V2XWe=?3WxYe&W?b4JLy1b*78au;vlwy-bU{S<#&IpV( z+fO&n)1~#bEFCwPug&z>jaYsATvqj(zbvyMghCcpv+eh!sf~FGLjqK&(=`aeL&zQ?V#cB^HynDZ1X6%P#tdu-A%G8jK=rKn=pZd2UCF$_H5!E9q<5@@K~ z&Q(V-7pS-RRBRX^GQ9Y0@!^KIAQ}GbMa$l82fcqZ6HS`^VZ*I~+>EWQU}h-!zT&?e z=IVc*Y9^4N(^w?;QS}rY^sOV0l(ByFtY6Nu+$mME`tag5F<7wWwnJ-be15s9gR0im z5X)9l&SA?j#e7W5^JBh&HTp{Paq& zFV(daQ;`%4wHtk9`_A8T^i`W8^Pki@ln(n1XFMtp8y$!bFPLL_#zOW7iM{ZTJgB@V zFAVDgj|J&<*S7-Ak{NRrG4$tmE5b-Z9R60Nl>Id7G*hpowLeQ9m=k{V4D%B<<_A_{ zp)0q5$b6=5_BO(IQtvjva}negNb4i8IH zC(-Fqj_-GI@_%Hj1ztz6nMYuRnmN0_a4%zQ#2}Fl^t!ku}W0n75-aR#^-1%#u-?;V+z`f6+4>Awka1=fBuM(LRD6~ zaa{+$QYZ8qhp5tBVkLXIEI~(mYa5q}9oeu~o(xX|yKWhS@&L@E*2wtBmOjg|2jNuF zZPpiPEd^JH9sP)|*xh_O^;^x>B*pggjVufMkE=%UclzAh-T^Y5Fpt?a_tf4Hdyiws zba+lPR^-f>@L{zE`X}VHqI2b@na)=&MY*}@B$aO$eU$X?zXy6~vgX#}ewtG34z2x0 zAt(y5!u9B9&#oYDqswQ>zxmp?IsHAR;KxnPnD%2l&YEd9miy*MuJA{*tKd=eW+(ag z81ktfHg~_@Txqwt8-iD=`PSzfujq3GuPG-Xn%Irzcm4hEwRvJrPH=hehsYzcI0{ca zwT})|VxKXRx4t(Hdx&jcwK@<@HW|J$e5J=16_M9yo9V>c`#*bEP{rRVn2VV~;;IE2 z_c&B>f#yW-@~*5VU2s;XGm_a#f=hrhWbid*_qW*9WdwrmHonndS!PBPwZ&6-5*>ed2pI5Do6_#d}T{+&Ee z%r@8!$)6=Qf;u&0eQ>hz9JILUZyCQjdE9UYqK4W7;g}~iDsHdtX1UTUNM9=$6zD5z zI|VNQL*a2oE1vx&^~kTh`J)7F)`;pl8~>MD6ePy1$N4rfUg z!E}$d*-Z3YNA>qj3B!yp;kXKQF-HfHM#!>?(m#KT1_tZY2iOaGGLnnWR_ts)g<%tu zRfN9z@|4;}NI}EGp5nzgmuWL`B3bmR1rs@y!|#9hAjo7>Q*_8L-20159I(U5?$`k( z1Vr!Za;dSGYC}3}^Dx?d5!+6a?l+{?r{8c?JbgOroUel4HCIAp2M@`SV0%?-;|&O8 z4v$!due=F(D^u-91+rANz34l4g-33UO5N5svL4Fa40t@@Vpg>hf~)e*slb3PMz~(X z$pougp=0m%^UB-LD>kpCSR>e;IXvg#q4UGue{h_vzUR_5j`dq-_)h;ivOLh8;SZtlclmRa8OA<71Z^j{(wmUrJ`@q}n*YP~(v358*O)*A#8XI`E0NJ1`miB?hv5$0 z#HTWyK4@8B96Ct;bIg_)O*q`|d)#LwpssG73w?uk#$i7=qE^To``j=^g0BWe$WpjB z2Nw)M0_nMpJZX-**?wUyz#Om9@Jj7yC&Ok2y)rX#j5}hO+joTk;hc>2{151BHu`Me za`L{Us@&g@s-MF+z-1=xS=4b|u^fgDjI?r$?h$+ApTFG$P2O!<8n=4gP=CU!ZdG#= zUu}y(d#(d07yu~@*`30h;n^zp?%%&pNC*hHpiR@7PiVjW>Ut?eaOKl$A$e>#oSsyp z-o(}IY{-Z*IojS=>aoX#>p#go6d1eP{5CgR9CnRfo;<~}idN0T#csdz=`9{URf<9y zk9{iinpN^p|0)g*4b9d})6Ah2^N;85>uqe~%N7e&=8OT;MqN1>MO(P%ZVqiWkr<6+ z->Qv|T%|CmVpR+x)Ke1GV&iD*oDH;f#0g$Ko}7R!B%UU-bn8*Of#v&vU6dOBkq{cm z5K6M+$jP)Ndq*cl5ai2gtn#&=O~NG`xDdH<)gvy6%=Y8Nmf!q7t_APrIyN=SDr z(%qedG!i0>(hUv>64Kz%As`JBBHi8H9e4BH`{Vn4S*){W4V-=UocGL*v)|`AAcuTq zd$dT4gpd%Vj}&VovXTnH>ae5P@n4$$0!3`UcfSw27#f>=Jd@C(s5`kceSnSpRanYR4krV&Ck~l21V-!QzV2>v{sEy`XF~ z*m}hK6ht+SZIv!#d`n0nhl_yHq&=_UxQnSI!6I1xI7tS0fHnRi$Sr|NfJ}BW5g$(g z4`=)>Llpl0{Ttk{5A=yNAx)kRAol}+fy*ANo#e>=och3ySa#Kl)xB+1y|mwE|Cjyf zsjGO7j$8(Ni(K0MNFff%yDOEBQ8Nq`%9e_3es2&;5DjiC-1=-mSFC?3Uq zfY`XV`U%WZ=V-D#Oz?kUeVBtE$?_3?0Nu9G*YsEYlkq-S@-Al&OIluK>M3@Fq`x75 zArI!F<-@5;8vqQ{0jfn-R+fq?qf-m>qy&?Z(MUtdCUE-#mFJ zG+4l77scABe9M3o2DvM16vT}#>^pvP=RL2cXj`VBaTd%bA@Qjbn%Il~B*)|zEibaK z#YT%=xI#_8n-_W7*j}}smCSmoELGW*{(7NrLn>uP(~Gl{%n5sp@`-X3B69*{^hs(x z4O{ubt+e9-s+KS@RsW#0w8H)M#lwO$mT;=XbN+d+`jnBj@3dj1;WZ;2dRtym zR0(Vh|C?5ZX|Il2qtD7AAe)8rg2@4_ZoABk(5J;zw(FI4*{?=1qx$clgX0TTP9W z$mHa;b~jhgW+JHEJjtWYeqKwWEt}-meR!?Z#zInlAGxIK?JACTon`{&DY4KPpJL5X z1oCwWl^!iE+tM@D@Uc3)aFz|9nHzGs$sC%?LYb-^9-j6{5K2V_$kGRfn!gJ@=0CVg z?$EVD2!mQ$3e^36Tuh9-Is3zP>i9fM4Kj`g>ZXZC6mk7WMI%=5@45R^B0syoJ@1J8 zitsm-1^#luVrE2o;%VxB#R*C}TgkDPt@MC*zF7`$P(6wv4Ny-0sME3DTqLAEP;&94 z6|y`;)DSI|BO{@Z`F7J@qkf9WPjBZ0k74k~g&vU~T$u=b*fh#Lxn%v#nZ+c1k)FLI zeZ##2IUK%vSSC%HteZ_%Xn&t22bGH74Ua2^N#%m3V9it{zjU%FgQ>7WrUClZXemx^ zktDi%r_#s5pd0WOwtL|sbq#;rFdctm+-%1)SkK~OH3#K{!OUKLl3NKWS#XOubZhi) z-ofO4cTuMcnkI8ge%BkDkO(13nYqLaO$~+>tpM@^!dXf*;&Uwr}~;*ifYkki7}{YijXF7r4 zOqVpp0oR^XSkBO$VU|pQEz=G*{wW(@;zbqwQy}dHtY;l9q)$v&qCfwZmTf)Cbu70PG7>aP;Tw~HZs~mve8Ift z*Zl5M^c7;23@L(JTG<=7N>*AnVai(yY_dn@=)i_DcOW0qp8rb0!08_m-9WbuZSrUS z$Q7>m;ck6K=day1Ir^-u9B7a#X!5AIMa^X7P(|v3b zU~B9Ib#GU=xspH2>^itWgX-70hsa%Wp1@aR)q}W3Ob{F;KJT}&D&ko1G|CD5ij znlup&Jr@WgSX7wm^Io~^6Ye#h`0+OkIPNZ}x$wI2H=CA6xrmjN1aT;1Al#?e;xZU7 zsPwh4hujC_yrUN6$8k_3)JzNkV(7JQ$DAhO{MYLxl2w?yB5K16#oNuds&#Pr0w;X1 zH+f#{M@?o2A=dl7oU0OYnQb`~Bx{<&!F7YB6r&wS0`I@!j~!@x|G;{T`K~8wU<-+c zV}b~LEEXJDTXSkW8c008)yWdK%^~mV9@m5iDz#hH*`P}E>phaL$DjlXOl37G!pTWb zzM_+Ip7_fbPvu`$^GiWmSGalN`+LpaJyXBCBrZ;SG?)uZ)vcFSV(GnUB>4G3~5f7fvLY@@QEq8C1Q*3YNrJ8tvyz!QqiN2u1s3C`BYN zPxqD1wNx){|HltV)mhjYq{=mX3}zbvkycI$Ue)gA-EewVNV1Pe!qw$66>mFrb7_qM)zkzi+$GET|`X*EAGnJnZ@oUEh5((zFw^*(ZkqUB@ zoAG?Xp@zh#`49IFqg5HMd5YP?pnkVaHv>MBiMTqDgIt0~i1oAyU!@)X=L11fvFSvD z?Cos6?4`Ay(`bzqscZr^+XiRcBU`(X$n{+Ho3nNwx7XQ$z2ADyxk z&2>N!89gVAlFO6x$dBy9n#@C}gA^NI8x-DT-(xSW0(+%#$0 z+bZW-Ay}vyys`9Nr6$*r%1EhVe4KvI92z^;A4lw%=-9I|NnBF&i1ej+0)l;x^7be! zHhxx)oq*MCurb$X7t2h*@m})?DK>Ly;_71ITaXC#J0yt$YF-Bw)wB-<$K6ip|9;BD+xCab!+<11{$*KFF;k zRH9jdVrNn>hiE#{I-vLPkxZ3wS{h?X_$L)CameF3KMJaC)98I!{D7!ni&hq8QltPV z{zdcX5InD=nh`4|z%Y2ZHAKT`P!xrReu4L&BP@Pz{=5FKD+)1L+9Qpb9*8Ow?9uQd z)VCr?xR&5?PNt$sYViaU`c)`(koaXNJZD(^@Lp-b7Gsd=1Y%+gksu|kkZOj%xScgz zJw{^06u0`Rjfx7+a!cX+iVUz)UBl`GBCJJQ{?inJb%HAn(OUE-@U$emZR<*5LlOSm zZ7vxNeJH)?cbH-0=s{W6$T*h{QPDq7E{CG_?bbAED3F`;&i^cBy3t%l9WwgnU5o}kMrQB z!!b#~FhgKHlsjHJ(|>o)y}9#pdCBx{f!$(2@MwUzohCwH1F!WrG>B83`0=c06qTOo zh0+tFITxQ3j{+5Lx;~^!x6!CBBj0yL^qrXbjAME5R;3iuZ8soL>s%bsj@zA zTgJa^swb5X+38b~NvlAdv*Qet~MwLKD!^6jidn-(H8R1cJ2*W_t2wev2 zM>9g3M$rYM=C~4@q^HH5a8aJ!bb%{;|qo80z zNy#oqPnv1=y9dkz$oB7W1oZ-PjhCdQHxCva;AgYgH*1&$Onj#uyMf-~duoM4tA#y|D8bx-J1r{JTui8&~C zxu`@zAcrd_XXR*_G5&K{d3pI7;J1O9ht>+N0bpt8izCm6BlFvk`3_Pu zUO2Y6CpHC67g2Pw;6`A>2D#qK>~3e(s~m*3$g#$)FDyoEVvC#g;-pkl!PhhpqZL?C z!F2Qd+}^^%!l)Y9O*J$ec&884(U=*#6sXv_e|hPrUsm6wAKvUgU;cwZ%3{xrfsWng z)8~6WtEHxP4CeDdYyvQ^QNX|b`TLjZYFff}DT0z^9gXBEj>k|=&C0ox$8%D$nLu=W zvJmPMPa(Z(`w#2s9>9|WJS&%DdXCs2mL03QlkghFdsl*c`0gJMch>ZYMAT9ZDMr># zB4e?(im!#`<<21MyX{C5$(NYqxbDNv;jO|Y{O~y}K{Ik)hK)J6h%lB5RBquHa`x9= zDUP?v?lU$MBbiG29QTWrg>KTBuO_Ss@g<-EI0+4t)5q8x?~=a>71q~p#xu{!#=hitYIW&Y%?c+AinybpAByaF83Vq}C+)vC8;EWuRLv5jZ?j~2 zF3&Fl1rz%t<)k)9yntea^;Bp>LkDVFKFcaz7Fygu$e8S!YbxfyUzN zH3-ck6q*g~rbuCd*!}w6gG1pE7Ao&E0-p15sR%ke|FAGx4A8)eK_y<+3gNlLgo#N> zExrzsdDx9Uu}P{}$GrAm@7|V*B?0$;$AV@iytUG1%m@0IX~YT zZP2xUBP$@0B(Hv4)wVPch z)I(?0+LMTnpH9|#%N?~nIgNpmL2|xuxu0!Ff!~h;Om}`Ip6`?KV>ijoCWcH!UXlB! zRKCANp%3DhkmK*bskVG6THpTDscD64xWtDY_5O#$YhAawhA-o9Jc!FTb$q-Sk5j5jaYH1f7%>N2IH|dza&8gUwv6zv z%(uPjQ@%>}4(b`AIc#=B!S1|t;r-pF!xaS)A9g*kXioyDF_#y1!D1DX{F0~wQw{^e!&0@4EJe7kupim?9S$kiYdl2E{1zQMA zFuG?DG~ep`dL}P%89+Lo>J+yIZga^bzt^9LxJVa6hDdxWGJ7@HXV3czUP3d+7f@d$ z{p-E9Lqr(-)kFkaL}nB*=vIs~Ba!qQ6lIjjTTQjXCtM7RC-W%I!xgBC2278SE+g1N zY*^k(5tc7)L+AsjQAl|&dEFhE8)_25mDid#(|TcH6)x;qb1tRi|Y6ZI*Zg6v=E( zh&3J3c>4Go#qi4^Q`)Sl%!w(ckJoix_c*yT{ltXj4HzGCNv=N`kxXc!qCOUfaAtv# z$9Ly5W&Zsnn{$3dl{`2Zs#N$D&KEO6)tND?x=u@!y#Mzht=mjDp3x<4SlVv>=*Qlg zK3ziiDntd(@`UvFuhy(_5+qGvVOJ;mw}_EH8Z@j9){IzX?Tjl{p!!AvCmYGw(GtN8 z)8Y5|C<2e~_0iSJSF80wMt$snVob<&fI0n3*q5N{bTCQAO)b##Os$GPE-98V8lm<* zooK3HuoGjqxLZ8feXYH)`%d~jE+Z*QCEh2MKglw^3YX=ov{}ZSOmK=SaTRjHw*C%1unJ3 zREw1AIJROtCfqoT3Ue0F*to8oryjwnpuE_^gr zcV*R5&B*Q)x}f$!8Kk&)oh;SotZw-Khy-FAvx}MdW~j zRQgpX3(T)PDi}IQqPT-PTHIBJWww>RP~AvlcS^64e1F~1+gV@vRH0+wB_}DkL^-jJ z9N6YN_gH=%nAzcuR(}5K{?MBJ#mTplq@DIMVf}S3+Aq(~*V*YD3 z9qKx2CTEEQmIoeU{(kl;|9|E^g&Yk@bcA{JF`_~_+(<}If*+m{kdLb(shx%$9<5tI zr?4w*`*15Di%tPmW{x{4Rpu%2QEDnj*Z-wqlA;~Hr{%D!3zZk;jEI-0gv!0b_{T5;RmWI zVQhikkJ4I5N5SubKl-kL@u>{7S+L+qr?@~VaH$xpSCIF>%%!8|GEleXI@AS58KThI zH>o=aX|vXgmeNe@2|*WxEEdP#L`@gr0 zL8OT09dLUdxUq19CFsuh3`PCLew!jv-Y}M6{(IUy?^rPzA)~+S<0c>|_zWks$lEm;-a!^BqKl zD-^&n5iC7}#~^*Y))E4egXL`gd#fEOOfL}zZuY{at4p%8&4zO1A7rIZhyq8ZrXI9J zS65fS_YxEiSDOJGz?|RxEg;s=sC))joox)FM8GX$;M8m`DA?RKy7vNVoUzpnnYVBI z0ZXN)rw3}*>~rZH-jU@dP4`H+m8PJmr~xc^+E7jFT$GSF=2G1cBrX7*)>-U9=v z4|r+-;I9hYUSv-xax_)~Cl#RLK=lT`36o>n#{fe0tnby|n~N^d(t?72^~AFqJ39a* zHLGepXmbR^`FBs3bJnV$P*;EZyUiC(S{I4BNbN~;7xM@L7?ejR-o ztBL?q5wLn;KUG<9eu&LC^V6gawIqBfbPiQhMdfe}?r3We4rBU)A1UKaB}KZhQDl=0LNur-GfC!ie7#Q%maX-`@5UU z)hASU?APnQ@q!Xz+H7m@Ust}cG0!Z)f&k;wFsTCx(dBxz z?I=sh_7Fi}%lpGymF2_QN&B&%lyZ1LsBi;d5x?7QBRhj`NK4_rcHpd>^*1^IruO^I zcYa>`jpyL80kS{n4S?b7(-^}BaM&19Lm|Nujgosn768Z)U6LpAd%+}z7o%k#s{jGG zvtwUk_ml>lkWrVv!a(X>4|qT;b8~A0OnUf(DGvBo!BALgWOTIZ!7PVKVrxK1U!i5> zdkQ$!`Emy1qr2F5Co*8q($J+Qc}|0jkJUk(k0TRgfvPc zc^B{R`^Np}j_W(dtDJbA{p`K=TyxH~HbE*%ayU21Z(?9z;5>dL{R{)+sul*ul?cRD zc;!qpXaN4gGFFh2#<;lrFRd{*3Il^0zxgARAaxL6_I4# z82_3KPbE|Iwo>#s4(r^v>KIAG77%c66-^>_O^kOO)c5b3jFspQq>5`g$zWh~=W<9g z5r;%YMM+6XWoBfsu(GP_Co8eg)0?h-&(2j&-Rkrk{qZA7)YZP#AEzgd^WtF2R>XdY z+j6u>yXw`*=ajy#uI=63&yK4f;35^VwYGCj*$Q#7(b2pQC;Acv;y4ZO;p3+lEq#!Y zmF3W{-&-3g+QvQzP8C`q(`$7~-naV-Z8Su)-`1qy8 zMJBr-F)=Yjx`6F03|wH&!xt&+eo#a}!tSv8ogO{-E%ffxi{G1V?d_N}YWn)cYr&4M z9=ab$Bl6!|y!rc65~gp$U~FPSh?iH*u3~3r=ilz~usN?WH%HuO%Q238waKql*-l#X z1=11{Um9F@*VfjotgT7dw4NIo(I62p_&+nBYaCaPgUpFhq3%U+Fno=`)6{v zHPheUzi59iT)?;uK^rgp4JH_7JC04;eq;Q>L|poUtD9S}bcSr|@lFq?VWZm}0s>|YQBW&$RN z$D$5D-MMpTs>YTCah;{efN^nto`8a4I#S_@qM{5!F_B-F~8j! z*aE{s`}w)Lx?*BseP4A%4?>6}CnsMH0`nH}-pWvB>)Ld(@9U8Q^{d`LLpYnpD=ng? zRYmXpSx)uhU}dEvx#`yej~N|JgjPuv^OSv0`t>VB1PV zLqknX&BlfUl?O9AJ3C8GPF^v_z{t3~xJZqL7|O`V2yD6c&~0U91;$8V+uhwA{PDxU z^3>E6Yf9~Xdis%(k;qi}$B%r z7}V9(1xUfk&d$fpZU6c;Dc5rhS3ia9XBiWrZ2bJywY7pGA|mwk?HwHfJxd=_tt+oy z!^YkF``3Ivl<@oa?*)a0$w^6_Q-DDODGx)!!bS%NN%^fl`uethHZaiCBq1V-j*Rp+ z(rSKt*3i(vMD%a{3|5%au&KAJD^foD&6_tcD{RE;jd$n@OG=a!6o!X}o=(%NtE)G< z?)snFb<%hlw70h({+Z)sW24}Cd3$?b5^;xw1RD#Bn24xsVk2EDKv-Cq|Cs;JbX`9FJH2){>g~Ar@-Ma_VWz|02d47Ik z8zjx`@cYS**z1Fh3GvgvQdU+QyUPOsx5-dM_r%{)&{SGa@zY}Bqhe!Ydt%wA8r=^e zipl{-`A4%bg=?9sTcu@XY0;IHl`JeQ2|S+W=6O|Be6D@t9&U#GxXs97qDNEUK<*%pXjVZn7+TE-fw5CrWIS8yOg+;LqLIU`ZYw;G7 zh}nRy2rhQhG#28=Xo+tdS35W3Uyu3k( z(y=i{F>~(upZ0T2o`2k|_4FvVT`3>BslB17c0aVC=x8_I2J~P0@O-k;f{%}HQAk=^ zI->cOj*boqr-4;JU&|d<4Qh0WULCjVj>!&fESom1^ENXhW5B7WG@@Lq2oMiOI5g_A z_9Ops6hqhV*wobUg`-bq1B(ajkjkY0b|SHrfBpKknE8Murr!CF!Hx-}&C#JDnt_|G zWkL?Wf50|pwCv|Y%}0`^d@!y0M|yU>HF9g>6E+R+%ifQ_pClzDbie$>Omx#ul8J`K zXyIFETR?O|0!!k11d5fl5D;({g0?+`1TsAh|9X|>7(8%_kOKn?%UZbjIdwmN>O*%1 zclPp$_=E(2Pfji_E)kKFt(nh_Zu=jmjA2VXuo^FejS}GRpOc-9iH%JtqAegGu;cs@ zfr268;f2E#`1|=Ki+iQGba!=G051u@_YmOh1|HsAgDa2k*Fl(rrl>Yrv6BrR^k9W) z&%N`)tgP#rh!)5S=!nmsKTod-zu6!~t$Z2~qq_%te(%rR#TV~uG&D4Td+>i&jiN7H zz2Cn-+d6q1o0xb45O25e4gW+ggWS*0&*hf$LwTanjM7Zn!LDXE;Ep0>2Ms;a7nQwX8~ZSVKDV$4Le{_j71Z#i1Su@wt(!ycTprx)J^Wg(+ zjqOC4(KUY~3fzFxRYFPg7cUmp*WGu2_jPu50*bwQ_3ByvkE0`(36o~H?RzpFpov6x z?!-h#JDwdo&3~B6O?@k0VzBEw`0ZPca;g{!hhAV zrkpgw&%O3XH0>3V_^ruN=HK3vwY383(V&kHHdzI<-@M_crJQhnZ*v#j7H8C#z}FY= z0&t5+zvMBuApSy-2|Q+DMQ8*HfZv`0e;J33m{mkXSHlH3UR^d}B4tQB?ZG~JZ_iOU zx!<@vLCl&S*GdY7GNG47PEJgWjEyxP&TP&$-lf@V#S`z8$E6fTpFb33RNdf{-^+O{ zFHft?@3^9ZR)Nebf$S&-bof^WE98*Zy^Oa)^%tQd;o= z7K#p?qnJ3_W>=zzyj&Xu4IUoejsk#=53-`VI(E}ALEBrl3)AS)BZQr_jM(ALn>T53 zzne;G>FO317WNpI17YlPIGGROM55deHY|*TfFsKwtS2iUYkW_lzK`qQ(Ae1J2e>1P z=t~uE4k96t%yW4n!K-$#IThy-aX&^rC^YzyJVnP?sbM%$r_P@KUsc-`Js#i7u=5Ch z?BVhD?b`|hV|+kx>gEF&aza7^?5&FMCK+A2#6AutCTiu!6rFFk+esEt^B8Vh({&XD zw1`Hy?MZBD)A3E3J%}9s?U$CXUKJG=$3J069f-TbFOE=r@}!`kz{C$&s02dsBbTHG zN>A36la-ZqLLsm;d|Fe2iHLwi&mWIUDO&II8yuR&)m3KA^7?vV@* zA9DV+;Gg7YY{Y;qKynBSZ^v^s9r?&-&(_*Wu@Oi0!1^oLIFgHb2%^l7_g0CCiS7M@ zodAxEt8-(65HY(B`aj)J zv)~#b6;&JpVpu(~eL1SxcOCBm~uCS~^z6+2a4Q)Su8Gtx>mbFID_0Qd>V+DSrN7;awdWMExpyn0{jCFOI-#+}; z!sBlw?LL_-;v7g|?B{X*Z+UU7`=Qlj@Ez81tLlwkz@>-0nm;V}Cucs(Z?pUGJ~?>? zUW4?Qn3ObqYTCu7Q`reR>pnHU841(z`mF6?(Sod zTkqem%xD48z&NM#dwo5`h}1O*NVx=0gox|$$q6hr78X_tqyVO`b{yCBbyhY7O6EyX=o6q4%Adu-j^dn0T8zR_`%D_ z$jHMJ<$?2FaPq?gE-ncKeyFXzA4o|1o)4e(uh4)rvEQC=hY0SGHvrfLWB|^-v0-I@ z1_^1&V9MMq7?=u7jF{`reNN6&_#r4xpab+8zsT!emUPRI$*7qYv~7ol)6Y zSsT-Jy8zU6b#*|;t@X@9I*VP&LvwO-HMO)Ji53+Ubocg}lxwlCsYrNG*gp<8(z-Z5 zQ+@UfG+!6x&4dz(kl4Ih*V_8}Z*6Uz_XsW^U-ax>wAfL!mi6{N(SH2&=@4YqYuB#r z?(TM_qFBWufpB>I{ff<~oHAWyNrGB|QAtWldY&B6_y0;5{bZ)BEsogHb=g_GA*79u zlAhz3XGdK30nEY;cmYW!WhB`Z?Fr?^EQA0O}J|A7t4v531;}=(+koDR+b;$tC+k~TS$TMz zf&>LFZX(Cn_8^sw#Ps^rE89)NJHIn7(K{sWw@=p_ z6PZUSZSm0c-+%2FNg4R=K3y!UZW~NVu2Qmm_A^gU&&z)}s(S3Njnp|T-zNx~w!9-U zWcu4f`T8-*MT31hRV{F zxD(RS(aF6h17X}&&M zTzn+`av-G84>17mV2xg z=H}zQ)KXS zS!e~rG-vbaGulW|pd}u)o=1OwIV|_{nVkdc3XM-T7rq2ZTB=-Vm{ou6HbxnyJ9S-S8ef@ z*j^BVB_Sh&He((A{(BAf4#CqGi2-^y9!%8Cy`6HT`vpURdHHPGL%g$`0^qwRY0bkYV(uYL9IFh>J95^n#r`~0%wtK zI*_$_Xd?#Zkui@8&@;lCr7pYIuR8|@!r#BYkDac@LO&b*-L^yyAtWpec~XFZ;pLCK zr;GM=BaigB!C0~sMkLme@y@}(E5PXi{R;XSh_p-yF@C^q@z1q2a?r)Z#G}&4SLWt> z8xuSLA$)u>(>tfYM1q5ZN7*&QV6S+4OM*RMV`DS?0;|f@va-7R<)?`@cK^i}9Z5+P z#&fjJStFHz^dZt2;9x~Ls|tp(ZmCB@UTU_ycr3g3+xlwi03HI7_ADRPRyrs?o@{&O zeMku1952doVs~ff73}DusW-9d&+@^jBJ?)`VxzJV?6YtLTTfE&9(++XS1IPveS2Te zjmatn+Q_4S|M)y#xP+YkTTTTKtO$U(fc$O6pIF-yDxVFOUu;ZFWGO*zb~fLxBl2vD zTS~0c+T2{F;U=n5iT9H@X|htPh_emY6A zQRlaBSdqty)Mzy77tFD)Kn+-6)M$R&+38aaN!lM?$E%Dx3LJ(_NnrJ5%Hg%2Y)yrY zi%BacodEO8K3Rj@Tx^@cpC#xVG2Xz9uClJkwV@fzS9z6x$}=VV5ZvdL0+ z3FI&J z4Q4(#F($di@Du{v+#t}$!EXk$d0~DY?s*6VgULYFx~f>WMp#fV3Ctd_Z`(Hg)6>&o zW)lT$@BPz~v#~q{GO1h1X9G*BtLqM^pXzn)3hN16Qv77&lT-k%UEOr-mag00ijj>C zKt}bek%GLuJOH_~qlIuVl+*R%GWvfmgo_)1XtixVBSs=$AN@4~=K)-!$*HLxN{J%v zPv5$`*T77s^4xp+=usyS2T(@IF)@5*{S-S9S(NFmHa}EibZcz7WSu_zvaf@z47oB& zk(i8(Szz1|#>x zX*4Gkotnxy=JXo$k2I&r4vw<4rb~OeE^K9B^j(}(;ITgF3=0UrcI^g9n;0M8#bD`Z zLdLCKOk_({R8kUqH>GuK><~0QB7NeMnZQnD1g{$vP1pi3gopp0y8_y_CBF%Fw$X2J zdAe1_z`(#p9HRH^*)wjZHMKhH=hL-z6*q|FVwqW3XoX9AR#sQf0IwD;5)7}%1PlBa z8y)R7-Gw~^V%#!|tD+a!Fj2q`&>0#rX^IYdpihEwAZw%#-LSE-Cp>ia)(KJR5$2B~ z?z$}Lo6z+ziP6W%gCJ3`v5-a>k^TnzFgBJU5&YuVh7cf|fQWrm+Q0jgMeLWX_@_EM z1NEM1Xz;rqSk=+pg`9ioYnfP2klRss{oBc&Zfc*M6%!Ut5XG^hO1JuP>*@mx8dtT5 z!9f-KvAg7<)s|x=PV1vI=&M(+nndwkh_yh_^~9{Nt?jrpFc^$e*w>6cC*^ne-76bl z_((}9c1nC8o+rRV*`(vkYxRql>K!h-zZJpGcXh4v_m>6R1PhlU&jmY0nigCr#w{u+ zABBU@q}M6~`c_KHHzwvzT?6RRqM|3t%Hg7WkH zj~+b=3=fBL3J^XgXJ;ULklKM$RGjN@w`9uo0`5WN9@q%iguxk?j}Hw+3StfP^_iAy zRamlvwHgx>BP%NlF5e=_OHC?Kd+m05+r{(@4Deyl zXu7aBU0u7J$}KH0JE3L~7`AWkOd>5K)85v`Mfx5JY?rkeU_BWbEig$Q3KXbEw2|;W zkXjvTB$!O&6BEn^R}|&tgF{1$3k%mr3dev>2c5K%-u5r@P6y?emL{R8dDuwef<&Rx z2U}V)s;l`yoeAZh1gFL&fzY3iTLb+GG5YBf&%e(1)JOzWO`?;Nivi^p7BVw4qY@KY ziEb7b7bgmGLOG+jq=bRr!rt}eO9p?V#r{w<5RkI6GLS`}kc^Ce{r;UZ9#=7 zV1M(wHy-#9yKeOc@KaSMeGHWfn<+~ojKMdc!@#!`5)uMlnmvzT#&E<#qA}h%yPY0A z75~A(Splu@%=vNEsfig*WcaTUmZ3Be5JtcXl<3U`KgLgk5elP zwPA^3r{xpG6%34bhd$KTF)-3bsV{%Z<3pgJaQq6#2MKTK`2O!LVNE0~Iuvg5>WSs4 z4|!64Ha-unA}T76_0etDL6e5+j8v^qC$l1;APT8IZ%v0ua{aB6e)3mxOMHqBQ*m0X z1Tb6vtNRk`2dOZronqE(6*yqhz`X{){{P(h|Ld*wNl7h25A{h50pn{J80HTX3Rnjj zTubMr6kIJvTkm=v5V{BZ5s!XVzlu>wn6Gxc*aZd7@4;j8_X)t5hkUcAz$&YTdq2NXQW@7vh|H#DSK4Oge8JX4QF_P8 zBO9j4kzQW}fscA37w)e)aHoeaFE0)^RxO`HoDP}|(wyqwB8Bmam0iNfPiEM#IbyZ0 zNWvm{)wh|k?_Gx}e|NaDBN>SN?nwTOiYiBID=(z+zZe+I+Crjx z-%715q%g-$IXpF%>CnW6P|^HO=@VfzOGpyZCL?6OG)htQEKu`?`ZHz>j0li|b{FTK z>SOa~DPo>(hg1%?MeWhFCWpO_D;dc3es%F_D)pRjFwKvE zTa;zMj0XYM2THjaaOLg??b+b>;i z)B_&R&*MpS@X5W}iTOhN*dsZs*(W4nH+9E662RaaJuf@}sF zDi=zwuB$8Z;@f+mSx~@%x;oxn{@&qX2Vh8l3UrN((i0Q!;@h%nmVkNH-PsA|bE?=G zlwQPK{!*iupdt=M?Ua-hPJ@QO`}_L!j?6Lgmo6AE8+;U$vBBj!+}#EF>N)l-&`n2I zH&xhat+2F-{Gl5!s&j5mTv%AgMjnI>@Y;#-@mfegB_(0)#y9+0romHBqCl%CDfI() z3}gmaYB#o%l=O~?895R6JxE7WH^6fj@d?q<`F?#4od8{mJZ^jD%F4=EzTU_LE+d~E zUnEV=?qEV%&yHlLRB74*6UL0D7XH1b(~^?r`F`=1T_hY@W$${HXweX~=Fgu;08NXH z^+$rY;J&jMl%H>5Y&An$64SWcZj!!4+0SX6^4mER%4lqxl z=K7>}6ZW^__4J&a-vLx_ADwyu3xv5<%~wMY7N{43ERemP4#^lww(Tf|nhhFhprZeERgMx%mQkJM2Mo z-UJD12?QT6@8GJVvAl4yQo738`ubeeAZ{9(8qjtVgh$W?>=EW3S0T+3J#dB1Pv&Q3 zGUF`&)urAaxua&CQZ(ojy4~(lhq2mHT8c49>A96Pzb;Z=U*9GU9Tc>YOe`$HE`ra$ zV7R-Vba%@WhtN;0I@C?Kw4mDKk)fbXv3w=b@)j1%VG9+Po+u85pvsoIpoKL1y>Pko z(@!j5{sdVu6liK|GuIGJ_`If|0+h(jU51)Aj2!w%MpsPR8P=eZ=C)s89IgUt7WBU= zQ*;0x)n&z%o!uG~8OX<)@^VQ8+1oUfpQ3KQgrUoup(xdio-^lOY6>zZG-{04*wxY=;K?Qa!#KguDT(DL*;=3Je zkP#9Nml}%ySI{aoXq>Hz1_uhX^~aB-XcaJDpFVx+u*MM3Wl}L=RfkekRGg=RQO=_w z-2Va*1-DNY0dn=SCiC$pyl`-E0392}T9p+{JP73!Q6T_XS>;0LqkvMHnz}l;xP_1= zpgU++pNE;5S;&5|Q#>Yfh?vu0`t&AOlK)>{4ojE!j3fsmlH1wylJ$M5p#*`@&VYFP zF9Q>}3LPdP!MZTfsd( zK6j=0QEJ$HgOK4#il{3L;Wic>?0|(ATMVTt(j?tgIxOoWw^Vw*Pr(TVnWrHFvwylRhaN#JNEjL;TF;!q#`QQ0j4! z1i|BgH}R2=?iZg>T32CO7RkJ(&}`*nhANe}`cuUX_4U~WqJa3rYT;i%CM(tcgm?V52N3YQ; zaI@vUM8?FIAhsY*U>&%){z6X#1lHMNlrl7G$Td)Ma&oqxOwY{BnA*m+{^~5j=kJ@G zOjt3jhvCD{BJ>lz2mL}DP;UTnez|r<4Hj)L=aQJa^3>MceUYl8{!Xw+&>%w%Z5-2V zX^&W9xZ`^R0};^H)ouo*80XE&kyxtPqT1Tjm*)LsLW&wY)Od50j5jFe(#0k9R8{H5 z(yk<6{Wp=zyZ?eWpU&u_P%V%V=NA^#_3_iLw&Cp(V3Wz`R<8Fp1LuL2?qb$bRh4o? z(kg&b3zB~M@@2P92}SJs-{X&riv-vlKIt_;%Ns)M`=g){46J&3XVxyjkh9a%(NaS% zfI9HAz{7!QPX_V?KW~nCs%7SW$|`uGm!Ld+vHUDMo|xf7#&@i&(g~#=p!$P;%**e~ z>g$0RN5RHhYyqu`tkH!y4kLY#0TNeL6-=0mX_%sC#FK)zUkKymhvU%1?JpUZ8nr#e zkPwM@bRTAFs=?LaQK#1%5olcUHD>Gun+Pa!wIe=sW@(OgrlvjZ7NV;J3t^KqalWYay^4`$f{k~t!EJvH3X)Lu>0E-;oy=z$ zt7l|yzXO#v2=B=Z8Bxz;H724kD)IBPC?Ad0L5};BQmx-4bu?L7dUNjT63}zaGhw79 zgVMaz<>0p1FF{KwLwz?L`ZdKsfB)$4a8x2N@!yM!q-11WTlG>1btsBOM}JIAv^4)B zNKKiQc)R|Liu9Y~K~cCT3+p>jK$QV7L(_E*0Y}+1##YK?&?y6U6Ac>roS-=s>ROXm~vI{T)uoyK;^!}A-7GLhCUyc6$SPcf+(Gdu_~ z4bKQ^wr(#4fhtHTJou=*+IwW&>Us|_-r3)nZ6bb2@7!CFCwi@p+Jlp#!`H_r&_M+1 z+|VBb)$(hX6=!|OFVMjOm2q?g&=Tn70XF*J_7n{E<;xst+OJ$}LPBIdW!D@BsHG7P zk^@HCMTZ`o<=zT^NTN{Gh7&(%i1p6KPt;A8@jlVbyX531zB1;PmV_74ad8Uw3A8QO z+JXpA_SYGSLmobSc!_Y(9)}ySySJ*^{!3rNeWhBm)1K1c&8vX^BN;^NU~}9JxdaL1 zRSe-UfZ5PcFm)=yyF>*FUPvK8FhldJA?SoSr#wjnbPwhktuHD5pjt3Mk3ob>mvU(lI^#}GwE zLE!-e9=ch9)@SGB5VXDtrxekc!P5HkT>h@3F7u?=3V(bpQ|@Bt%P8A^>f5Z=5{(=o z-6Xtx)U^a(k>A-bA^!QGb(&56x3sBbWM8LG%MXH=3^eFHKKx{#n`>(Nj36|VpE%>9 z(8ysYmzid9*)=n3{Kx*_{ z8oc_~a7Gk#YLS<&+^_eSCIT%VqU8!5XiA#=w#Wc_4aXcYVE7oq-di42G~V5OX{(96 zS>JY!Z$BSWxkn{1=Cf^zvGSq2rw5)cXH5s=PGCrgWpljq1q4*NUcgv~=*R}o7jL){ zwFA4lCIVy79&Bs_aQ>mYhSh*IM&6EsG29F*fgwg7A4Me3_=*pRtgJ|%HoH&6s&K>c zSIiQZm}}uX1y`wF;F^KBe|Q_~#Z0|Zv3s!=8*z{{m$~-tjq6u$`k`{22dVEDj0Ame zI#a1~TK%Ts6K#&oaX@~lGBK#1hEPji%xdE~tH4hYnH&(AWTStN{jTZmkqd``DyM!L zN1avXL`vL9YHP5DdHMWU?>A!buU|@g3E4)UhzVP!Ph3^?m03zfYXxxW z6^b9MhzG*HOWam|KcA{Jsf{?n)drdKG?CCGiWPoO^XRV<@udfVf&RgTAd78`XM1Tg z&swW=d0ZgBD{ac&WlKyo1^b@c%s^m}IVriV-G2&~*nQ)uf9|8#c{GRuP_lQ-oF6VIVQL%5tlCWL`F=u|sN@;+M6ioFy zooDORZM+{7lhl&%76T?xk3bsbXXxfm|ufqrE<5lDG*Uv7mBRAu# z(%O$t5`vy!E*TVtMSb;n#usTsYFWl9KJQ(4&yfNX1H&onKr-<1+xricu~!i3pw2Mz zXb>prk)an_`_=t7dJ5VtWeQ4g;2FX&!PP+N_{s`2xI7gvG&K z+HSA)Vr^2KxEnAPeG;&`NZIW2<8V@4a*7+5kM;`7=P#Ac){D(&RMJE(c!cm=Zr;?V z*fT$5rF5t2c}ub+N7OH4!$0l3gV^5Rz3;0^fZXc1`lgi%r0G?0aY4G`YGa zkOqkk__p}Xkm2W3sR@6j!NP*?+QD~Q+Z=j-ZUm^K)W=}KB;?>@cqxsA%mugz1&zzo zCK!%LM9W2n3ey&0d%8gOYjKFaJZzmQv&h6mT{X4)?kj6+^68z+g=#FGr$=_$+7p-F zgQDV8)8N7Im>I?X>W6^*r5A4N1@#HG-vnmRvOzh~V?;qe{`U6;) zm_SCs%!A@BrKrna5bSO{S*nMXE0;Dcm^s-=mT34WR1Lr%FyEU1 zH|0r^;8O*KTQs~-a)6Ej=v`?u_=t%*t7b1tydT|^Bs9aur?K&9(a>OhC__XF~3pPLqW| zqDgPd%3Y`N-5z*M7~YY{Z5qt>&E(0GC-U<0ffvvK28um#MevoiwI?LC>al`NCf|+) zd}p#*LzUT2xOZs?f_VA(rqZ9y5X1Fp`VmHytdN3@*>56PEh+conM4|7HnC`row}YwnXK z5V&amzZZi>8N!=>5IapxO>lam4aZN7Wgi-nFI^KFAW&sxTwo)BKECYd8Oo5cHZ<>e zowOpryZc67NH6FL#ycB@8)FDY#ROjP?(0yHdbYSTOG}%fYq^@U(AOefJH#a?{GR_o z3Lol!kj_yrm7Dg)l>b$*YfI?7+y6G-$vbKfJf52LYL|%##=q`FutgtABAf91GI$)5 zUM{i=GGB*V-SGK)_C)RpsVe2Uu3CHnE5NtJKWfBWc+0%GFix@S+vfj+4QWZv)n_IzZpxNo!%Z-K%IZFz z`D+CSr^sfbYp&KbmYqg&=UWPfys-q561TvfVx1tabA zJ8G*d!LijE%{02wc)0iF)%8hW=XYO`9Ot$wWzMw!a~{jI7^1F!=kiqyc-4_dMDd}o z=}`!e#s4mQ<+@Qwx!e<76&Gve1~s3;dX`J*xb0Kc{!!_kRm0a@u`M^^B%-Sr5^>m) z0$gdKM(Ezi9GalZ_0)CV3_(~>POAd0>Jwi# zS}zZHzr5I{{G)pg?^++se4LD`6J|Zv`}F)JAq&-^kt-vG1?Y=94JM-Rq_-b)Qd-$5 z-^5f^#{|4>pi088zTtjEq|?3osozu-OZI%>JASzLStJXkt8P+jz&S4r-t{Y)QKAZO zRpoR?eeT)AQ7_E8h8)@6UtG;Aa@uzo{s~Fe4qhTAE18}my48JI82j%F{{%B%-b~Sp5n@lmfF^@$%&x*Nx-`$$53UOKn`v2xt~xzFYdcopF5F1aC^ny`$bh5(UH1)diGk z^P_`lIA3%xT>anTUhygOYm;Stx z?2S0dWf@Z#6JBpETWc-bP(Rst$w~QMQu1+31Rz(M8xl<^Z#Iw37tW!u{>r1T4EsO$ zNXEEs6p%rdz;l9Ae4}B-(*NPR&p@=&2w_;}lP{Kc>F&8$#)z@DVg8M}yga6f3+Qu(EFiCKqbWTyYKoUkeM5Bpi!P-O+C9;@palQ2 z;!1!0mszUk8!#Bb1tcLRhR*{ZnV6jHR^%}s1T%_}Jk%e#b9e}Lsl!y96!tZHa8Tow!xY z5+3(icb)7bCJqj$7VUv~dnXlo?4ebrI6uFur$+?RDRi05@#h&< z@_N>HZ_ zuNIU%ilZS8k)eGmFkb9T>MbFWu9Eeg!z(ThsvBStw%XBec&x9lGd}tF+|tq=jtS+E zK>a8F$!{nGLi@#?RB)`JJ9`X{olP0gj}+wR|GGSWP()2r{kMhF5a*#Dy{X#Gp{O9< zM%nu50>76f4`*Yv6o> zF#_#Xvy~RZ&=VPC4?Ps%h|-{KrfbXLqyP*R8o}IqKR$qYgT}2_C-$GQOD?)6mz`z& zCU~sM5-0wH=%MJ>p@Y!c-`}rvpfdUej)50I5rY!A2S%4rgx!w}W&jc4TM+FKoaF4OJZ8At;qmbkV06qLU^;194Lo*w z8eTRoftMMHXP-T6_0vrZNCU5#XI8q~8`cY=5C>`0}`*x?TqK_`~gdh@~jG6Ow@woIzbm6ZbQEe#& zj0N|)5o61SfOJQ13)7l>w#t8ks0vs{9cjN-UFF`l#*eTnAbx%ThApF($VOdyBW8tz zlabbLH?Cd320Fr*dc$!#=P3Mp35)&BhfxfnEPi1;kms7H5h7GKV+7WDx{?>%lh)!M zMgoKDcd#1AE6do?FvqV1>p{ZZn|k9% z?K$i3C4;xoA4}JQ0aR-+CCBrJ_7ux$R5zr;^agx>!!(+cz<84T+O%yd=cf*(ma!Cm z20&e3Vig`hd9)g&%*v`y(tay5;0AXX#IEo$%LPBceni=YzwvrTAokCbEz;O zT1q6%y5%x7jjmMR7zo+keDJyvh8>ONQ)ZcFZn564Kla+z9e9CUMaLu?H{!N`7>{S+&|x$#ic@?=n#po#P;vW08$ORMb1=Q@A4uVQ>T`9fwCm&@}uJ=*X^tjpm? z#wz(hO~m#GHxJDulNQhNfmO%|(fO@t@`-95SBx&?Ppvm9pBo zbL31;f`7n>ZHAt?qBy7KzHwT?BVyMjZsx6an|&oH*~h!?3dT=Qn9>^ugE!PD8`pGm zP3Wl(a*~vyZvMoTg2^GcZshE3RKMGlr|e=tvWsRa`}I6bbmI-~f9zTnzKVA&LiMHG@7JJV3QEI_O81KJ3ui$&{xR)fQx-4K>*ES#rl>xiR@<91X5ab)T+NcIz|1 zfLh79o_$Q#dAr4UhF9~zVw_F4n=1cELla1&1fx%g%!gp($1;!gwV#^W+37znudE2v zP;Z%!+gVMzisNgQV8k$zmSQbG<}|dPZT6~YZdh$BNRDh8Hy;8I$1c}H%icwG|7;hS z0Oz_?{EkXRyC2FMD5RsH-u-B`xRE;~8bpg@#3VNg<=bPHiq>e0{VT{>J_nYZ#M-ER z<^E-PnDfzX@MO(`R99>5RRUM}FCBB5yP0n~!*2PMiDalakyvxg)+88B6sDe0>*MS( zQ5`<;1@c%)VxiC8T$@&ume!C})KozcL&8;Xv#!dIH>fPIBvD3yV~m^Fe0AQ+-M=x& zzv;o)V5e-rs{vG|*2nHcMI?HLFs5}_x1nyMtp=;`kYm%-gIj&=g{-<$HpI$Z4*WQh zxM-p{^|+WZB9fm=e($@lYUq>IG)V^zfkILzuSZpvNKBE|kbb-Oymw@nkLyQ`35|1X zcWVhVT${MHApD>f)0DAh;A}CjG$T)DUyUxOVEsDA%FQeS3nc@)r*DlEpGKBdzSGg~ zEntU^+FyZ|!F+q&d^qdl{h7`^nD@~cWOg%)9i-=HVEStjW(yM2{P?E z+fT1{9Z0jarxWy2$|^pl8-C@#v-2e1EoWm^ss4A)H{x%jw-Z7NET?WrA`37>Q#dB+ zPWwgY>duz>9mEnY*<#v$*6CXJbWu{x#7LdCiyeO{O8`yDfU%C6T``xG!#AX6SXCYT z{s2mx1h0f!J}UaJWtDjPl=eMb7t^}dlqsLT*T$&FdaUS|M_ouQl1s~~s`sIlc|i7= zU4p-9T^Od#^YkVDK%*BH7N+Bg>1)AnOp)kU*IIA?E=oSyt&8weDij|G>a z#)j5;&m`s7`hdto`A!sun*1|$29{2uJ1^CjU&6H>blYDiJqyiQVoh+x97wQOHWlqI z2)Hq(ipTTr7Ww84AC*QGr@i-aUN!q;ik2uB$KZ82Pe@5C)V0!V9R0;z{Y*W*$lpyv zZ2d?YdH+~NioT498Q)hA<;Qw5YRaoWaqt`5_5JECLU28OGX1VD8Qa9^F8n?U+_NzG z@{=?Y6B>+7AH$x3CyJ$=-4TmsTngX!U)kRx#VX~q3U;mDXE?tta95SCaaPaDkK>yk zs|O3FWL_BWM$(>{$4*C;ZSGTN)rf6lc(Uj#BtPO_Hau2VS~APA4<2^Be#g~n-9Dvw zFfT4=xYo_`uI|Iobe#gK7v!BFI#r*<8Hv6fiRqa7CbMBY?36PlL40-4xHiq;W8Bk( z6rJc4**>qZUuI^#yG_B7T|N6_ftS1t2=ZZKmd{jKk1C+pqpMCqOmB+;0mNGVq zgCh6pU$JLFdDN;A@p=idY@JH!nsHeViVYsP2P!7vc;tTGtKQ*FLwWUcfPgMueWJr6 z^m$!lziHJwu_brVmAs$?iIE(hRj>CkUTvQtpM}oP;3!9Jm>QMo?5|{7zZ;#>Smd8D zDC>}3^~q9I>9W-netQ7-e{IBr=ApfW9oz7`P~aRF{B9L!^vY%UQ1N9-HuVNkcx22sIX#UV;Y2#oXrKxy`Y>KiXgIyXH?QmcCV(H9vCcU zqCvo+N~r0+eDOk6R~JsU`1txxSXED7y0<|=K|q-Y=G#Nyc*uXhM1hlp2~#$Em3?OI z&GSa(oRQ*pPV z{W9`R%RD+Z3`cFk2OA3nUXeQ{U0J(A!jIsIx^6p`lD8K*zD`G5V zhJN&j|A2-s|)0_1JV}fK#Dh{`ke+3*I6>iHkn{x3g|F*X5Ezawr zuR~l@OLzE#Rd&!KscP-G-=ARJ;qtWPiHz6l8*5?qYJnK$U|8gyefK@Lw|b^1)SB*^ zbK)Zx$s=>O#ah=j)h9v{ZcRDg*6>BjbA_@-RP09An{|y%2RX~~oeCp0dDoq1?d*~N z%K-Bq&{;^PfScjUt;jo9uAFoVM=IIR^00M${|*9!dxt${LJ%n#Zn>O`9e+#^QS(~b z_o>)fccwqAIoM*aB9O9_OD*Nvt3h7I8T>GKi_11T#^WcW)mw$!ghT4-sigN@ukIk; zU^zqluY|lnXAV)4NRO_Rg~U5me=!~_%`02|XTPKO*xr3@sMN4vZIm$dawq?hw0^0b zZdm!n%}W{tsC(Mf7I(;ejQqw(z96~T*N07G-?VzCdbW7}^6IAk^h{Y!XQA_8ZG6UV zdE?|T^B*DlXqK>02}ypNch&|8>u5=p>+zE}DW&$=?(<&E9bAC{1{e|w4Z(Cb$q7Fn zrMy9ad&^juB9&s>KMvZl9KC+~_N}S+rXpG1EK5hRNK(Z5bylncCb!1d?6>!@0cLOmb(F>?@q|(6V`Z=CW*6qaSO(V`7CQR%03@IJ+%$5b>=~;+z6F${K ztxLaGux!eZs$HpYnbWzhtF1i%iyM>_6bN>3Lp9Grn)D1Ysil=w4M43BIee(1Vh9;7 zh}-b;%egyFHu7j;Bc^1Y_J^R zmDf1liEvoBGRvb##~o9XW;O0R%`8pVDvbSuF6SK?xIL^0TOKMZ-zV04MUO`93nn~s z29{5QYuBdE87m1poV|K+I6pNjwbpI*UKiGmaCBL zE@DUVSmRUAQkLCN=a#+T6b=$fmIs9l1_%OnMo0;<&5oGyZI8X_t@JR*Kt`_3sE9|q za0BnSs%yz!K^|4&I&zokw>DTMf)Ll@1<3(}UjI9ZYR#3^l)Ux+3B^ zyv*=hp3H-YJ;$|oC(DCcWm57IM`YV$H1Il-QJ9GHtB3|!681y8KOf!FgnNGEdkG8~ zCM2`Je~z6n2$LD9A1q=HZWl3wMLt%nv@PCs{8?$H;DB$4XyH%6eBkZ;AMF+;9fdls9@!;Y-nZKFN&dYqIEbVbbE z9sWLW1n;YUIZTU}+P|)*ns9Mh2QLRUZH?FPDvd6WE_g)-oE}3G*VJ(mSkC(vzpl3> zenBK^s^k4<#Y+LO!QHJIVvu1*7J!r_yNb+pUA$*O+T!fDkTDrQw<97q2&b~bFgNzu zpaM=WNBZJI?Ay7NcM~Tal_ykn5|TIpyE~Tx^6EcpVjw4wqL%ueAZ2TvX6#%*E&VpN z<2Ym!jX6W5%!@8eW&MptqJM3LJ$zKR@n|+Ze(a(b>qN)l+Sl_>5QoLZ3U_8iPP=9L zqPdS+eZ&q&w~r^f;y8Kr%W|b!eA4>6`qu^q>UT0^PKQK;0oKmA_qVPIcjNYILDtLR z^T$E3wUstsPtDg#&O1)1mo;LXRyb|;&ta?0`w!PsDs}yQ|D4(G(&pd4pT26~sBmxY zJMroHEH5s|Tvz?~_i$rkoo?616CbA9VRc>2Tkjle%Xe3_TVwz+w45R)yY^MV*BiY1 zPgJ|SI0prYYs(0gp=rN*-9L*5H2Tg|{j`quJ?*DZnWABCD+X{wstUhVa z-$21WyT(y+4B{@rIG85%sQ9TTbuzNZs=IyZP&LxXPViYr$R~D*l))BqmvUkJcCpc!PLnN6Fg`wtc0PXgX1U0x zbDQS(S#tHJ5neo^0cCW#p4yN=yD`i0Rw=D;AzH2}^`PV7x1`p>;hT%o>EEPI!wHBwvQ@{~S)O-7avq@?$*El}UA>PU*0lgKmcY zF$%0uHtKyZR)nfzX}(b~R_rlA_gNUL-dOk^X`FF-79+$}8opM!EU%f!bLDlg@U^uj zudjC|g*evgKNbWUb9;6pv3Jj&^?p=Zg+)tPw8uMPA5zJP=5CQ`26#5=D$=gMr5~p@MPBeww$9i~^sCdhI1dE8-o|tC;kov~tZe8*tKb`QJs&wNQLO1ZlIMND% zFqQUulu31xBW@*_z7A6sfyL@87-Rk+RDeZ=XnoDzUS3d-!L;1UElty!N~eWZxj4}+ zV^jrm6cXYpQ8WGig#UW7@!7+}+q8q%^khzkCPd z&#vPB_Wyn)Pq)?eXj566o-9%`^8JPbn=@m+OY~Fg(2!X~ATP-QCf46c@i$xC?zmcu zkZr%m*iV5Q{9R0qnbOBvAEF<%cv#i5(Kd$KqI+gGyI6m%Yjuw|whnbgW$t=L#W!U6q>|oV7Oj)$zx03rl9A+T7hvs!tJU zFO0jtGSc?j*=LK`ZX-!~w2DGAV|K?tMh9AI53sxCo zJndRadzAd_RXVJCO-GHB7=IU#t~CsvVO9Bfe#dY7U;VNwYmsqRo%Fw+2d4aoef_I9 ztrgR|LLybG>D3ZmoxT-jlr}%9XG>^GF7SRVvG!~^>hMoOp}>%>@<@234cl{C>!1*u z3-IBFB4MxZamhYD`er8IS8OrRZTmdvo?$S-3{EVQ$iSh12(Un){nJ9-WDe7OjAi~k zSpM=Mr}`5enIDd>rTe6BXh(ICty%o$zUoB6xyPUHR!cs;>tkiL0F^!+g(5)8foQ3d zMc9uZFdyvhW)H5Y@0s|k^H4->KtqO@njajLMMxc5Z5M{hZ8Ma7NPKyO{a0!7m(6@x z=o}%-sio7rm`0+_&GnW8}GaUWvIXvTT8tD9R0u z1oBkCs6yjPzy(v64_c>$29 z%p$xw2AHSao|g4RRQLMsr{_988~MR>S7R-4S%^sB9*!W5^`egqp$CdbO&y|H;rGA{N&^>$Q= zKL2x`PYpL19|z(ipXiU87i}1akJ;GTrrW-=GN`3o=FQQ0*~9;l@bshxs2Zr%O>0j! z8mT)LTp>hgzY3Uwx3@P4mPW)mTTlsBRw4$#=s{Zk#>qPz?$n73n^Y4eT=X6X+m2w* zs?Edj5WHF(7Ol6I<-3$Ue!gSM%TPXikXl=Qdn3tae__%sWZb|9&`icir9kw|N58t{ z_K_}rac`RZm~4?}yZOzI_;cxFFfmCy*jLQa%7OGY%h8}+DGa{*nf-tm;*TzJVdD}K z0O&LyqH<%xKjDf)^@mP37YxrOTu`|F%0UE12YoP1w^HRJ8a4 z+Nwt;o(u87M}X`GZqOo(tC{Y&w4XQ8Lwp}!fvK--(D z4uM)?QedBfz$?RfNLGNM7BEBvJLF)ydwP00I$}E(fRbzL?k4Qw&Q@@%@cvO@UWu28 zbIksCyYeJ9Bivcf(@*y{$IM7!tGUn9rano=%OS>HO-T0V31?af_7R00W)Zy>?qfGw zTm*1E43vK&0{0Y;L;1e;6VL5iDN`sdXGh^Rg_L&l6r7%JYo2Jm^vV(WbUFm;8Q6*3 zXu@I?c48HFw!|j3rHX)Tk&8Szp6+e`7;5qwUvqHGttG9Z{ABn0&rT{-*q-27Bd8Vr z#_HK=Xz)QmI@QIg#C^D$$A>lz$K%<2fte|z6VY(xLrEfoI#)A%U56e`{7d`xknI-R$<&x~;JO#}ta%I>l{y0}Kh5;e#1ru-A!d|DQ=qlHfB0Q^ zW&};>)xINi#=+bBHw^ex1Jv0HWJ(NN9hP~*WFMgJ_fgBlU7Cp$pC!Io(zMFjk=!uA zjyPi!axa6r{YS8+da>9oUUhn%OU#eH7?-s2eNd5;aKn6WlTA-F*s@Pzn7zt{m4}H6 z6n_{+{I^?fHik>RqWR7I($BO!XDjUHe#>*{ev!TApz)`^w$Gb>NxYNlSD>J^4a|M& zGc{>$`1CjKe+&-o;;z%Mlu7OJDf;~4*__xE!!vz0cQtQsBeyrqK7JRH3}%1J^fpY) zoIQh~6=h+iXJe&**tT`v-M#B+_brn;j?N?Hqp}!Ull|}YlOL9jW#;BcZLVrH%^G)7 zy-l~jI2s7oC#ND;x7$E`kuw;DuDDdvlS!E=chvNLGXJOEVGY-Ou`@r@B{qh%MC9** zv7Q0v6YiiFbGjCpDT~_A7c>_k+cBMIYz~|sxwK0C@eb-F{qrr_%WR{Z4rc#hG>GWtn>`x3pIAfnM*x(1`V238{_EK_ z#>=;&&QY3q&w-)vVKClk^a41$Gj1{7N4VQ_;76yz{B{!ahBkP5Y zt`M;*FBQ=3+grUJK(HHy->%qS^#2~Szlw7Q}r!K0`<;gMe zkGKQt&>Y7h-iA+O({IL1CWv|&c|&m$qAJXnuQJ7{AlSu+41KgsH4PymxW-hykfrA; zZe1Ypxxav?PjPQ2Vuj^P^k(LS4QBI~zz_`oC>V~@g82W|_82seg34+d#4n>e1og&w zh2v6DYllWQxm~eKRNsa2xV3(AUcb(LU0h@3JNbaa)i6ST7o|Gz;r`o*xMSB$KTB^{ zE?84ct~79;Gi+brD_1SJzx9X9bV{15@3Ia`fp&)FGj)HkLXe%MIsGVVunkjduBUD{ z%?4Q<-*cm?=}`|fTDkEx^ZH7zYotEQb^~2ZKZ*v1YRbPqUUj~YcmJ-DXBu*kc7>iM zmztVfyM6avr7b?jj8V??JmD;4o2jE{5b_^5;Aj17V_6x6bDWBbvzTt2rruT{Po3pE z=afrr9SiB)Q)bDMI{D<}z02qTVzjq{vCxo>Wv>{;4lq6b-CW4<#thEJj1$^O>|BJH zSaH9Iyn%teRZ`)6qTaKsV_LWye+v?9lWSh<%cV%%`ISfBk0sgJz+IDaKVagNpV!x* zUV~)5f2?MlG=xpft}seWcY85+kPPX>PkqkL%N82ec{58{%+^8IlFNkun;@EfH@}3p z6z}(DT(0dQZT0{umQS&mtjd`2%X{V?u^?CwIpa_E^`>np5z)En)9(m~yTdz7qHG&* zvg%WoWAa$j#J%M3xqD{m;`FDcS$u>O4ZVP z+wVujggw%t@rs_f6OJUDX2Jy(rswFF=IBTG2q!i67LAwB55^Dvql*{#H&_<5>gM^X zqM{|QG6+-lvcTUS{m)m$N{8fSp3dEO{)m)OIgRFaA98kg0fndoW;`W5f~Z2;@X7|| zkNtCY7IP=7H^jrQ;nTVEYgvF!WW#N#6E8%|K=A5JdMJ(IUUX|+% z`_~^A@~Pp1oFWpw+eDgt>{BJ*xHUGn_%aO4E- z)r&CoXfl;YpoAj^?G~yzFq(;K=ZJ_{Pyc-SII;(>uWQ$4swq7BM@L_-4hfu=3}C^} z%?(?>K7L4#r`7JdBAL^c9lOscqZ9K1?HPFslOM%K?ezhc=+f3Ki%+uevf|Q$`RWh zmz?ai^5fdOPXqn^te*3zT0U2I@#HU{4+irPcdRWayS#C8A9C~Z}JYHoi>K4eRUu@3K z&YJtGy1IxbM}Arc3o&Q_W`uK}e}PIL%o<=${~47dMY2@8%i)z!y?0*fn0dO-y+Z}D%j>F0Ty28UQN(-zp!0^^H-vS{}^{X0*@dD?O z9AEX*-*Cgcaf_^2G<&0vV=J_FuENWS?c4?t3>I8UO3jnTAV`|m+Pg^N5mHU9t-rdB z+w-AD?Ck6WQN1YHnDpOX`L#4*8&eDh1FnLxP4Lx{vqQRYIP5BlFf{_i9>`1ii$>G+IA3vNnyooT^fX)O@hTqPF zhfEeNWr?e$thOd7x zqHGibwGL3?!otEJ$bd1XrmlW^v*3$18ekL-!?}is0gwifo`69y7M?O1g5p$vFVP40 ztPBTKI8@Zrr}qvisR^wE8Bq#O^uf;RaCGZSBeq5%kLXVD0)kqDb=Bnoe+R1srru15 zicMCUmp9~ew1fN;Vvp-z|HAGdmTs2il>UR>le!VF0$(A(75&c*)_91BUWi7ZfTmIY gA1n0#`FJ3g{eu3cf=iGcM0knrE2=Bxqs;>TAInf87|1>6?7i2TYsU9|a~?yKm88*8iBJ&;1iGw@gen4YLmPoW`iOD^Ub)Z;8Gyg; zn955_Ag-?e`_!Bpg+M$+$V!N+yCrYWy6WSuT_JuA7~C;0YoC)B5s{d=Dfv=tE7e)g zws^`$udqh5SaaHDtK`S?>JJUoHM{<}FZ|vFYOH_9c??yZjuG2)HL2rWi0e zIf+Rw^e!~i<77X(#mu^)QyJH_W@&+Y8smIv?N-Sd{tC0EUN`u2fTI-E@7 zDk?Zwnu`2pPb_n$Fdio-CmLE9GA7w$%blvy)=MHp!7K%y0%hKkr4FCBM%s5q6#Ws5LA`?KTm zj)H}S<;fH6m)%@EJYc76bp{RAdfRapJw3gK2eOfGkTLC1tt>66mZzkmqM|t6e*J`H zyr`d1$&{*oJ{{X>YGH1!-{R%I^z}WhQnK6GpW+s?(VO||e6Lm&$jQ^#&A#TH=j+wl z!(-m#%SuXi!lUi%?8tSP>VaW7- zO-)U+=kcGz!_h@BM1SQxgfo%ggJK6y<1pk`wWO+b+K4rh6`&VC&_nJWJeGwu>Eh!Dsw* zn!`EDd+6x5{pw$>F~lyftu@xwVcmMUHz(NH-qa+Zrl!W7bg@1}UmO0z#Iy*DdpTeKJzx4Xy+XyP@AaIkS$mnP%SZaH_n5XAii}%^o^fcoY zm$0xfti7$RZEjA8o_=GsFG)4O3j9P=RMg3TadGirZ2%6bp|LSIIGC82nDIx94E57A zAvn|H!$XCqPg}iC992{z!o#0lU0zJu)yO??cXuBe8giI#DbCA#@#+;CIyx68ry9$( zNjJwB;T~32Yonv1;4o`zYvClkk-HOkVVw~X5!Tk$V(Ejh4r*$N`tq2xw6x^pdx({l z6?S&^Loq%!gp7;~*lK++{mtUVaCM$^d~9sadG6w(X~XdFuqrKW?%<%Zt?gE#@Td6r zc-p6_gZ#lCzQCh;dcx-Fz{fH=0{%cqR#a4c{wzWhCHpNcK3=Aj5)XACO*kzoYH4+q z``O?_p|ny%0~Hk&2?+^ZU81l~N7%#Ny9>YF4%0X|IpJyn0Rbi^rf99M{(c__Q%g%r zB_*YBGQson^XMzxaYXceeEgiOtcmGq{wGi9Sf7HCoHkTtWkcfP#{H0P+DwSq*=>XS zOHf8cMUB8Kw{G~$`S0)V!{#8+mseIMr>BvTksBKu$4O!uU?b|9n!^V448Eb^;iUxy zs$L|UcxeO({YICa$x5pm{>H;uvWG^61qJrA4M&F?Y6%LfJ3FLAL0QS{UfjUIK+u9VcB z;Es){>cYh>g~D$`@o8zkzZW};ii*H>7)&*j^+-raPXFxKT3O}dyjh%yOiuQ?ICU=9 z-rn1rFEtX5R41+dy}!~^S62rqD3aRS+gn^rY*aW!mp&~5_R6AP_c1AHYj>9nAOGu$ z<5mNgg;+WpCFScj<09>HvGT#;;r$-g*7Ng&0oUz`q54-=9t%U6((-b0Gz#&9B?kN+ zcSW%nwMqnBwkJ{rJvEE8(=X?U!+j3Q@Q08O9a=APWKAMu9(x=JAM@6L3T5BDkonS*4B=} zX;);vejqK}|DBYWNcQA~NPVx7@5ODztF?ZE2B-XtU*%@s=t6ZHU5dMFQ@YIi(}ay^ zqK3A1XX@21#L0!co?K|H*aqCadlxZSZYF&+E1A}hM=;j%cM&b7G^4!y_f)m5?Zkp( zy}sZ(|C`9Fc-78Znh0g1X2@-bPZNdUoXFrLcSv|0B_f6qpNEFnDJVpBS0Zd%JVZTU%R&ZqkQoB?gVFtE)LAsbOI~ka%LW;$*0)q~0mBa9Z}pA8n0` zKW7&67#zt{$^5fBTbQg5nJF?VDn@=dt)lz*5ff8US(&oRs)4lGc!>ehLmr;EOImNX zdn8Yk>xcJRuTnGU;1F#_=~fsf?EZi|#kkJy&Nd<$uXM+t5wNI}eH_b_4u=dN$qt^k zv~=@oWp}s4(ZV1KKYj6?)6dUHD}p~47xy9Ri8PDuH(wbT7-+;Awfdx7y3obmBj&z` zP*<|YlN=K6URqir#*w;N{ZT?&Sy{yDEhN$(y4oyptyh<4h(V|okgy=x?SGG;f^bKa z*^Dtrvh!g#G&D?2PVUS$^3c$%4yKDcHCpXVRqM03F0==_?#_g~ef!DtPL5Jafp(nG z_V&&WFG+t8IM~Y1&+ab6CIj#p#inSGTiVz=sbXNHDC1G9(FD4d1AKA|} zB|zFDB;<9N6NseV+1`#m$X*Q@oSaPfw#01Iat^_Qjg2iHbPvhz=TGC6NGPRok00Wp zZtR1h5XO+aRjItEko+<-C_QAieiS2#tRQ1asyG>aZ@g2=^#MN;Wut@}7Z+C%btJQ# zl$2CnUj9BBgoMFZ6QrF;rEP>*9H;2diCn|4gcceVn=a_DBA$o9xaMkJ+p?2iiw$7 z$HEJ|wHBM9kTNI(-DbB}9NmqLABti@3f5#%@U4gJCwj$6PapCS1t3XeB#vZ4UEPz0 z>MU8xTYgcrPZ{v#sBt_!Jzqb>Gg|xdMdI~CK=ILPC`YZO%Q1{v>%Kqeu?u|LSdCf~ zuGZCsY6X1GwO3}uXvMgbQlg`?=pY%&-+8mJxTxBZluc&?&V+!KD0SlW;Zh*ZPu9{x z1MlCze<+$76O&ybZj(J>1`*$7j&my_GBQJdX*gScBa+py=~LX`#YwkA!k;!|a>VCY zW<499CB8AST`DFPmOF_54!-tPUkblgJrDiEhd%-FLV^z^=cqcK_cc1Pd}r9~frN{kIIjJLPSzK9O zo*>{}v6!Yn6J`H_aaUTvarvzR&DnZp`1*NPNEiWYXy@YboG0tUha%-4zb(PS2@p!D z0y?>f#}U!dhXA{MeXq*O*gCy5F9w;Vw@uBcQGOxJG=sQBr=+<_Be}6~X+d@6X^fAuj)`6N_E zo7@l7?_doIbE&r+5dqjt;#kRmgT7_U7Mp-fI{V{eavu&}T=a+97K7Q53k7@T4nKE4gP4)Mt`f&{_mwEp7H zw$5oODnl*xut8>je?LRq>BdTZeSNo?ly0?6w&O}ri(GPie4e%{Flm>ascZINZVo7u zF19e2J*J%aae_h(EKC@fDdc}%Uf%Az3Uqk7y1E6WsyF>beqEmJr2$pj94mAh_6FVs z83Py-o>mjmr=}(^cmcAhlA>Z?SC>l5rIw0Hy4S4yR#S7c221|%8zQ{M50@*2mkU4q zF29TgTMm+Tc9X}_AU!jrn!TT+!2Z@RHZoFGUELgrtH3>fsriue)js0WsU&@ttEF&Z z43Z}wlaryq7y$aAqsK$tdTe8P{`WTkjTxvyq4ycr8QTDJ-|z!(u&HQhZEf8bCKvR$ zg)l9Tw-03Gs_iVh7GwZU;El;)_wNM7wke_bXcGgE_7Wm{I! zMrC1RBj2%V{DnQls;_!K^Vrw(#m+EbcMVS;AiyoEL5TSN{rlme)9IQJGr&_aq_e+& z^LnwGNH_LoB%*TOu2F6#(L_eZvH(o7AB@!eo(1K zT!Zr1cz9S@S*_rpFjUCh^mm$5#|n;KrMs>Mq7g(B7d=KpLpusgRKAiMc95|6LjTOg zUge9zg@b7;C@w#L{sg`WR3a!iSWjE~BXvSlRHaGBodgBVa6c|y51@#Tt&@kwr8mX_ zDMEhHueKQjq6S>o)WU+xeSaCi8<4vw>ih}f8~&ew_I>&!Vxe}3qj*Z}lp9D51l{xL z(*Z5uq0Jr|^*ct)4QG-Uv;xf%VaLt|S`l$^v~fN6H30q40%h;O6wYEz7^KGO0{tFM98bopwR^|or=9j!QtwdthP2-dKT;l;!$sJFL?WBW45p18t^Uod$vd_6KGL`UjUCMnUF$`h4NHr@&QaQ#0yTcUC>f>X zC+Wkog&9iHnWtK+zq=S*E5*ITvjOzC)YZ9xP|L7p?!}RfiFq5!g__z3phb{^w5G{LGQS~$0|V);+Pb^t zPJQA%fS7?2um-pxRmi&mger{S%yaoXrFA7SkB{o;>)}6P5e%)S_g!1K^_7(eA@x#G zQQ0a5pbHRPTwFNJ)M4Y|W;!}o`mDv;3}EWc(2fytn9CGu7TYjuZuKe$W02lJtV|Yx zMCJ}605OmKpjojsWbZ@L1cve3U}8e1n}{@@)BNDzZymvy!Y9kPE4I{C*TGh+fItXZ zdcaY23*HCN39qezma=YDOvlVTTW%J-m@eqe{`~nXD8(%(r6QQ-^N?q%JIo7;)!E-X6CBLcT}LVp4TNQl{t7J(#T5GM z*JTbIH7Qj}1Q!y{^1%rKi~grq0*cf)LnDcKGY$p!g@lCQ^xeVpp%!IoYpbY;j^}+g z=b%+gq>k%pz4)Vd^qy{tZp?=gBICKttIepVLg{pyZ!m?v_w|wT*e7@Q-b{r2ZUZ&n z)N~Pu`{-4H8yak$7RB`1d*j+n&CIAMDL1uB8|c+?K2p~Mtv_AX0}00zZxGSpk32NVCpjuTGYDW@+hidT0%5pP=WTzb7Xbz$|>P zE{=h?!40qZIrsA^Iv?4i%`w|AZ?O{+5zUpa0Rj}IZ>}=qVu$3iHEH^~w_7*`vN*51?tOzGF0&?Zb zqPvU?iYS)tc*!ip{7CN8%*;$6WG;(eLUgTS-Q)cH5KtdsZ2*0savs5AU#<4)RNKUK zQ!^1cIy)Pbn+D2IqhespRauXKU;rAi+uvUc02KEOc5pxgKh<3S_3M}LGhG>dMN|?{DO2f$bo~8G?An%X{)` zp#y0DkHvs0NInp0Jv}{JGxY}z&Rg~n+T`TEaNc_@XZ;-=OP~Tev7bIu04a5TXaZo3 zNkf02l~ZtM`ke0KKY!Z#l6V;ROn{)l{)WvS#yF&@YVCLj9PX;#i@J%B zm+ygM&}wT*7~{NAiY55OkXJ0mdK1K7fcs)s)l<1oul339+y{K}^s88Twg`rT6dg;* z2;E$#XJ;e1W-$pCKp><(kmNh^!p?j^UI^u27(sP>k_?q-D5V2*=1^1TMBBq8hZZD1 zkfqUkMwUYFyH3%Eg@kNOlvAC@0Ri0?PzExGORJ>L!UpgGlECY)oIQC=x#Ulr0gH0ujl zsi~L0z9&Yox&1Qk)OAkOk+L`eG3jS(t?>_WkP5rU=%DU&z7OgyC@27VDbwrgD_2*o zQ~?Pil!8Y>9_rLMv-PiN`S}|>PhP($#X6#xST96cs@$vj?@ixcIq@%-im=N2e_! za5gJG6rmZQd-YjX#;_(KiMY7bXfwGuI%bR*0>U>o{`rwY{PJ|G6cG4zCX0@SWC46l z&D%>?POcmBDkMWe0RfMr%}&$u^|qN%qeIhjkdmf*dyA%!%0WD4U|^u4>gew;0Rbo{ zCx@YpP9}SJdwUy-Bw4sL=8Bx6VsTN?;r_nrq@|>!BnaFHZ9P3LPghXzEuEa43=KiV zl;4|c<|R?`@PI0v-Pq`fKJY7(r)TY8O!_8JOVGm1t*oXeCJy)J(+1X{GZGsY*Vxc7 z>{(P$un7tQ35N7aCO8QEsVXm5Nl=3)ZiBL#pPx^H@oj9Z8mdWXGX)+hlnzh>H8km& zn1J;Ka!&e zO-o=SBO@dA`X#29!_b{OKlg&}8_}Jmyi!R!KeK(Pqxk z+}sRIO}FDqI#?2DJWg0=YHBJ41;t)sa}9fSuSA|}cZl+Q`9pOpFwG$zEqsiqU(H|n zV9c=un=*iig^P=ep57Y#9(V^N<2I(Z_xvxXvry7=GQkpu2Jvv(Mon(zEghnH?8cO% zccIRLBya1;k0GYm4Nx4CF!(E!7{QAV&!qE)esYNgV2Ry9FNND(MkxhY48>)&GkHtz!BRL0vR6Gc&NOm!%c6|2Ftq_(wcOGU8VHo;H@4M-2$poL2pH4GlIesFEtT zQUy0l?(Wt?gs1Skg7l$IKT{xM5!>vYUwEvw2P+*AzCFRxS z`N=89t&O&~*i=qD_uZmeq)-qu80m}gDF3av(`GZ|<9L4BlRq?%qBi-lzzWQ2YEJ|1 z`J?xIEnn1m*K$)7g<_P0>qr7F{NUX~W;o)C2S=crWBCzdx?Vl)3`PgPwB{7b^@7u-?EU~@`7#o0g?h&cv4uG+&7zsL@ z5J+)cfUUS}f4I53)6?AX_`Mhi5Ca4^VJPQNue;1Eg2uwb7UG^6UgWx8;0VkDwv#2|6ZVogJW|P(|hCuSg$&)Gy4(&yPv+q)ekw z6S^{Y{6VLS>$aa{82)=w{u)59>FMc^#z2L4b#_KaN3X7}ov*USHE@HD zSen}5k`l;ZLO$niAhskVOhOPrQxvo- zeQ`GcXrS?fG)Ebc2lj#;1C#p>74^;Q*A380$ycLA0QNOeSC0+}=>iFX2NROZvd1B{QA1L5ebZNb0{;oxOfL{z3~XD zietS1RNwaYjEoF1cB`VoLR%=Q=rP={Eu*dj#==Bf+J$bGEJiXD8nW41u& zaw9iwm=z@2jkPuD<9!vpnCNI~JXDyxI0P+_pO+WubHH8P)&3N{ov*Ozeq%PoCph$L z>ALnuj$#r3w2|9iOkaWp(*}IC+&Y5LU%9y4@dH4}631`;9SiZo)s-Af0Gi8pU? zh}zdfEWptkk$@-SUbOMe3p%=Q4Lf}5EmHvIPbn@p!Mfxr)w zG+OQ%7=VsLc{M1og~9}~?l?C7A|kEV6%U%GOtocYbWBX@`GI|wBh>-`;-Jw2Ee?oJ zTPdlppkvwiRBpb6@()u18qLeVd;|mqZ{E0ZO@2VDZqSAZgC5hQ9k(c!SUQO1NFsoM znw!1*jy82)$pugcJ8aMEoc|&cHm_?j6GchC`gL$%J613TiKw*cIvAl-mSwcIvI6|! zSxYsfAEY zaAIf6QBM&+4Q6Y&sAMaqTo`6wWG(3cwL#cTRpkS&1T=@hdhh^%L!WFE4bo>&g+YqY z2`{M5<9#HC`00$sC{U9yZ~H(f9gAW#i%GABiJJP$#6%rj3*ZOb{$i(g9>8v`X=fn=2JmEi`^k=y)T0!<@Rro09q!sp<^uvRFS6E)A1 zGCJ#x+W=wXgIsh?A*H4FU_6OT!&Ze;K0qoJ>6WN^i>ztm*#Pw4wR%-9VFFxS)%1wQe${R26OpD@N(QCs^B`G6<~n@UO{ z@v-&a7b*G#w%o_q48Qn};{-z5dFudPSxX+s2T%`;<~e)5+(!3CetnH;p814eA^y&` zcklji8mARQ;rak-DAcl(t&$cMu@w{hVv|+zbS691$O{J{x?^G5=M($UcFM& zX@+^5PoF+_b;-K-0@=t>pi$F#>r|jq11WXd-H&<~Un6}j#2sLzJQKd_#&BRp9ta>q zYBG#498?UQ$-}LA->cclNq5jnKp9b0*jF_)yo9*}0P*33oH;OL0KF?DKag2KJq2um zPA)X_?OX0DeOUxP*8n~RqGPoEdu8$8A!ftze}ycI)-i!vs3KyMk}$buHiiHu_Mm%? z5eyGYah;`4OGtoTbkq9!GYFaM?!d;d#g8H#L>XkE$jC@&k8&jRf&|ka&rZe1m-uaI zw$(Q+HS#(5I7kgbFxyAf#5t-DP0U{nfie1g0f2?yNOqYo*6F=hBWUALl?_O&gGMJD z4v4;pYyA{P)eiT;n?S>W5>A9zc02*PxDhe}0vwb{19f$EZS4o-)3&;ry zE})5kly?ptwB6lZpmeqNT&f?W`<`Im5dFo6Nf*{)F63C#A`ZFI24e2Zw{Jb>9H)0B zpr?Ge4}VXQ6d!`WfVbTcj9 zjXqR7bbb8T9KFR8B|?$kT*n+Zn(s2!RDW}0m<80T|`RTK-<(FqWXKo|s3 zklkfl+sMcW@riu&7-YI+Vc$7u)%ZLd0?Z8*8(J#Bsi9!!yJ>cS*bf6><8^zzWsh5B zYc*t2C1RzLD^eRZ!=^`XDZSSJkCPDp%$g2Dr=2ai`>i!hJzgUwC1+0r3qnu6PYC-) z*H4#S)(%VvMLIt)ATo}c`&V2Z8uo~&4FhYNk^8$R^}VU zt#k?MttRk58~mz|C_UZXuiv~GNZ}vPQ6$C>yPh8oa;T)x{$sB|Oxv}@e~Nw+$WG;_ zz%vwp1dLcHusvxkiH_Qw`!vnLary#Zp3m#e`(NK~vucpC$!TL4$__x&YiKSdEzRTg z2Hk3VT+&d-Fd{PVzk_wweTLm~okcgtK$)zmt|o=mG2Uw{xadwc%% z!vAH`y2Cyr%ZVxYIO#AR8Xk^$0a5T{V`GC0@6W*jF~5sl2V*g5aL*QpGLCz{*Ixw# zyVN%0s(2%X_jiG4{|_ZMdv>OXHjV;F!F{d2Rs1oCpQKn=gTJ2J+-@CL{@r1_zt8bs z?b#R>3;P8|yF3^W2G;o8*47gs4M^qOUP-!bY?Y7gXVaNZBW3rnuPH--GH!OD#4{Tk zBIxr%cJ1!&hCqjo<72O+srEfVvA<_>QHJ9Fk3U%oUHg*tntK2fej%hh-N|T|@|5QI z)gO_x5y_uZ|GS&o= zFgJ(1zm_G&*!(0=K5y}rop(~{n3Vj-pqC#=P*T5p($s$;?~pe3j~geFypah&eBR@& zf;}|p7yai6%t4VTgg1z(_FNXvwEhdroK9u%@%VrbEY0pj%Z~rq<}UjuiSI7IX%u@O zg(xnDgg`7LqTGZTA7dPj3_OPtX%vdAFJ(9sv~1d%(OL_#J25U9FjavP2cxVjk59;`dLt*k|;fO@lapmoQ%cp*zPk9UBQ<}aai<#w4 z_>b>@yd*TGq<&w2o+>UeL3b^Z#9t!?iVo_K<1&?N?L-6@`6(@aoz?j?xQibdMC zZ;`Py1ZkmSi+z7V=maZ@nxmqAS(|;E_rDeSJn*2TcF$?DH_09k-};vePEFR~RtjR$ zA!ZKUsE+?VQt-0`3iUwrxbr8v#ejc1%tDSwK|&~;e!zx2av$yA$I`!ovgBuv=du~x zAq|g2upg0%DDJK*`%?E1x1{_|HGeCp@`})Beu!7t+iuwPUPo`m0vD)NHY|xwlvNx- z7@F18WxCDSDrkE>yXeI$DI5w+P**}Il@c+}>iqwGR0=+N$WG7hhv%TPazYhn;2qIYx&}KusczSWvznF&@Cg{H>4wuDTO}(%grl@+juf zkGwM3)^ZCKg7WK=yVL#Ne8v(`l zvS|_b9U>WwXg4|N;O$c@x{#0G0yJ|Zl9flKDB4Vuf)p7}Z3&bUORg~}FGsWliql@+ z*SNdaS`ztp^T@xA4QO{EvCk2zQjY$$Z}-IxnEV(XI~vTf^Wc zRHY(0#cGqYulP{^yGWVx@bRN=3w0@-S;zFrLBdB`m(gL8e4*DD`VcBpQX@R3B6un` zV^MT!Sdwc5CBQT37_L`pAp-6sM*7w^!I|u~4ZcwQ_MC;aPb`ZVcyg9ePz=f$FHRhn z8(9=;q(lE6SJkq>oKZNaY9CD=iIH=@mi>IN$hRgIH8^y?G)=Qbc34s!4(RYZL@FYH z4@+xnj*eQ}ZbTF}w14}{*%r1~ULbp&#FOtKPmZLP5`IJjZu*p^5g9;N91N?G3BSjJ z{lSU0@{4k~6a`km$>2W|n5&Y0350ir;av_C?IHj3RsSL~gJdbgo%mQ6i-@&qa(q~> zAlw-RkvStvbC=d|JonA0-GstWj4%*X-SBHe7(RgbMrgX4dYvg7Y8`Qfx?yw1q6_JP!bB#&s?SD zueTD)GWr>Dq)0MFqtL?bzv$7!-Rn8mCDu*E-o2n27l<7*GjI{X4EkJi_|^KqhqGVj z20shYcg+JU4qJaeiY0b_=goMFt4bjha|7}uyZF<9KlBxX^esQ{NKy2uV*aj zRgv8X6eQJQ_m>7(jXTiU=x98axM`5EfHz^?8v518of!C>aPC`S3lpVx-xf)Y?B2rS z1PZVv`?EPd6m+m!zjeA~d~&ja$|y{spI=<8^(EE9Xcs^T_Jnd1AH-5)JZ#wCT>D*u z*7-O~eVzLB%j+%Q0|*cV;(1`;P$}WPuL~W)1Wek4@Wh<@%dBJejb{CVFvS$&Ksy2l zrD?LxtL^FsoLU6saOp7pb3^zx0uvw&RbZ0Ub$wq=di@;Ue79gfA{0VJSnfS#^gaDV zc~b6@d2M?XKqa^Q0C7YA3~>#t7dp5U>m6Y{2?i@qtJBivf$SH@Ac*XXZWe`GrFlNW zC?CrUuPQ21I8n`e`B!~mNRcM3gesmXrE>x&Z<{BJ;(wHOzz0i?_0&4@QBV0p%0QXK zleDn10x0DQU%9wOF

KI)E$>mqMEkdK8*B218eN^6%d@kLJ(sT4Rmsy2SPRCRFiv zdf$^k;WT_i$B)^6(?>kiH2l_*cc%8&QlqV!U7B_ zLX!$6Go(9e^H~@A0|W^$nhUgOZv8wal9Mg`f>~!ft7JS=0HoB}Jws;m;d!NG#96IdE<*Y;9fp zBJk$b)Z0j(f|;=&`t8Ub+2K`?%+!;f;-$?N&t8{1uKRs7Vv$oNP}ex@mjv zQSsO7)Rn}B{lokt?t+<=okE@iGQB8-i{ANwkdAD+=F;{3x#Cf5%d`3GcSE+{=cUdj zF?sU%gdd|`=?9Z$fsa2np)3kSON-wci1#hM%(PTM{ty=zChw3kWO|)&t0a@2rajBY zuX;3{8tFk2!yue0%fdq`n@>m_dnCFP(6{eDgdZlf~f2H;MdDfB}C@W(~ zF7Iu=yhA6W3E20w7wGN?c(5*^Px3|JT+UEKZ=62Y;Au^m)=+}w`7;d21rco6+|hyr z0*WF0yw%}>#i`=rG=0tDEf1(om_8CPbR_m@z0;E4@`_jx0+do?3pwPKtoq^SZ@8nGQVQxPNN zeK8NxpwID`S6LiK2~TLmT(5I}!F?LBV#4i=-xgxf#F~(bRcmDys#Ig>{bBI$-a#SC zws#sMwK$hooZa0hdgk7f^A#9hJ&jfsX0qlYd-9GtBVKM zfHx!adShevaMQWRthd)&QN-9Tdn)qK?z1jApC$4vj_MUq5Qtl0&v`EzBg2px4TXk0uJ<%|8!kPnqKcHy zEAmiG`C3&~8UIV8?UMX=KM)C<$MGoD?}flIK8EM{2^JJi@nB+XUwDS=k%~Az7B~z?}h&5_X_oONUu5}I;j}D2@Lpinm>Ut zG%#_~|0GnVH{XBBTzNV0DHpjvdhR4w;CCwizv#!nO;-X3A|B>PMch+E>)Gf*y_`{w zNhv74-f=$M8~2UDTi@Yj^rkQ0T>fy7^NH83dDdsC^IscG^-YK}ZBs7_C--l*()3IN zfV@O!&MXthRNuGeheDx#--$kD4ub;nhI95p+}$h5 z$k(!A)W0Jvj#;ctY{6QWXt?PmPL+>_d-6tAnU}>PdukKQGnUi5W2^^=Te!g3-E7#K zsBipUSnVfk5(Oe4-G}`?2=vtI4h__udg3sX0<5G*A`Ou*?HW{me5E| zYuhAv0$e`$kd{M9W<{o|Ms(zIDITBucCb&|eP(AQ6Z@2f$kNNH+0ICHJPI0P%I=*qV>PBRhq`fN73Nl zQ$yt z7JpYpO&+L)2?HYI^7)-Uuta^h*Y|L*%gW_5>HP?;Y@Ru*3gSV|KDOGL^S@{3#YRyi zEibn)(4k)(unDqNSC5?equW<$J8}Wnj|oxMjYoDQ>==!Fe4nlNmV&%zPIhyIbdv9t zwaHCt@%aTa%F*CQJKyzm_Jt!?$WI=x6EXMnkL_pf?Ynwg9Su3wB$d{*Lm6{+e3@S) zLB~q}an-6z4t2dICHb;7D|-1Cp`}wzrMd1@`L_P$MQ%Np^^D(csg!?+GN#N8p(9$J zM~@$az%^Z6{qqegIFPRIDd)&nS;hrmqOnC;%9_!7F%b-r(ce*DSp?Q!(KHR4Mmm7q z&EruYtZIU7ru*W2`q=J&)W`Kko_iRNazr(gko;2bkCa4x!s9CBnTgi0$)A`9wZ683 z4uT!Ms@Hec<*3)!q>RR22AY}`$XoGRAJl^?HZ9GM;tyUX;B!ZVg?Bzzxjf#-FpaB=<5KcfXooP?MZs3Ofmn?i zCn5g9U;-rAIfZAEKKS%{6Po;(uT$ zpb^I!S@9jPE8J$T6IKiR<&@7ujkF{fB3`;&cw3i9Pyq|yZ0+uG36nsDDBES>*ZQkF z6j@Z!3Ji?BF{>6b2bXbw_Bkyi-NB@HQVxnp-sx6b=<;(EZ{MYnpa0Em1}3(SBp`HA z`C}&iusWtvCdjyZ@qA|8QCJAtuSOU#Q0B;g%qpH3r5O{&(&wWVlf=@eX!WZvp{5^> zIOlz3xi3LZ%uR9Quz5AXc7swYu$@b;d8>=r18e6*ir1Yr=g;bY9c$b^^Tkupc{k4< zK!o%tO0H6^utK%4LJbxQzg*kTpSkBpp!JsB_I%*H6<*Je1Y_bYe$_*AH=j{XS~Bd1 z5BpnVFkMF+$!Xfmb$sfopn$gv&g&`ZiIq)E%?gPHeaOga-!3Q`*U-t=&?znCnE#Gi z0b6DA)QWB9uN9{o=?}DC@e>wL5;_k!bP!|QA7r$tOZro*04Z0EfPmy&vd*)9<#6xU zrC0!w7z@6JMN>hyOn$dgakrO2Ov=}vN$fkbpyej}?dDtv8&C0>P1%0<#W~W-PPY8o zQ$sT5-YbKuNjTrd_SaOz`>rh2iRG`^7S}&v1nAP_vlTL2XlPizD`R6 z;eu@BYs?lVff`7AwsK7MNw3Bk^%e;2ZHU{|9r!#^&aa;fn+Cty}o=eBDA47oAZJg|tD`TyF-qlf~m@ z|K>dj@cmW%l&RROX&%kAa}mcAzPy|1tI`a;1qz-jN8I%sJMJ2%jG(SL{xRjR=Gfp* z+!+mBPTJrX8GQhH`1RLAK!bIIQ4qw($jFM9OHv8}&SSH&GGraP=OWx2L5Ffr)M#6I z@3wn=DO#*-Jn+#ohl~(uRS+hJWwW?!s$#KO**&@jb(&Ev4VQ_kCX8pgbK2>%TdW#m za^)PGH3jxutM3(bPqK_)qyk0?8yBV@iwMxzt#_mF($4--7n**`Rf~$M7Mq;zvPeChNjp=C?#?!dfPBA=?LMd93r^@( z6Hi9QPs|ZG2s-95*LR94@_ci3`YbxrxAb&n0`ysGGcsQLFh|I^2^gY#mVvMhZTD;= zv|BfXTI&sqGU((8+G^K2M64zkYI{$R_>zg<3%eD(?O~j5oU!>44*X(PBTGs8thloS z`n#R^A>3&W#*>X3{2wj94u0TarWS*L+5u*MPMvLR3g8=q=z%b{a0atPzvT4FPLP(% z7%S>8spaD;0}>BO6^ULQa1Ycb*F^99&<*CI$kNKf#)y)t9&E37fytWduNHQh<4J;$ z?g0ObKA%IeWi08I zZj0aAFlggb2w%Z%3UBD{^b4yqGAEnBSMp#w0A`6Pqq^X3w#`f-Hk~y7sp!w&A=guC z`YO9(NagMzyBL{$lcq4>+833B=w9XO!9EjiKV2sC_eOr)G6rF~40-TT=r6TSCFT|8S<3MBhydo2G{BlFsx}n(+<%(EN_wvwZA#IC3L46z^ z_L0nl(vD0)=S2qV(j3+*(Cm%c?150HRJ1FeX!Yn;vyi4DiGLq#F{ZRrno)R*^x?}C z%e!VV3Iens3&3+IgV-Uip#O)Ejp!YXq)IWmP(3W>)CwrAp?#R3x@Pd!}b&rO;w& zZ=PQwJY1#0ZJ+OD zU-R(N@3gfHS<-0T;KgAOzXw0m?rm78>(U=d-OA6#ll5avi(gedjkiAG?39>z=UhSa z!^!ksBW0uTJL_(nEID4JSpY-r^I94$-k{5{v~k;Kg<=;VH-(plM5uhEO0VerNFQW( zHwJ#N$4~_6-;FW6Q;*aA4!wq?Jp$QwewktSQN8mzZc$Jfb0A zRU5JIRys6$JT;zTz4Pp#GiR~&c)94T*Krd@Jsko*ie-~HUdD|L_gp@oun42)J6MT( z6T?37>MrtbYktZ5+w6mP?Rc|rG3}n*(jy-SXu<7C+`w^~997~=nMOY7CXEF`dU*UJ zpBG#XJz|v^#KPu5ZeOgK=!)bRs|1nTYaZ(hRMzb7wSsWmN9(Spj7A)ecLXLvcK8vA$$= zjQnhM8~P^ZY)9&khEglB;vR%CjQ;O9v5E?T7 zpT^EID#|bV_mnb#!T=&AF?4r#cT1;8N_Pm70}_HrH_`$E(l8(?Aw8rt2na|BNasEN z{_C!L@4GvT^#CvCQ} z;aX#D%yKQ%e-CvC!6t2EFVst;MLy@ZofnW{qsC6LPmrk6z(SeCQR25OlUVww$1`h9ME$=oL~Cmtk7 z{f~KsDF571c3A~hS)Q{&Ea_iDHaE)BxS$TobUJ?KYT}$FxwjSpzLXSt{^zJS{s&)q zlQM==Z4#Bc>8$DLP|;wYqn%KPIGD0oAjU)u?TY138j35~EA@6|_7@PbI9K}87_fo| zg?o@F>IZN+LTdQuBvo!tML`HJrvM*LQ>^bIF&whml{RL@Avm zYb(xriLTm6`xy_J^_M`{gz4+i^PM}jgEd$TeS(0fMGn`;ySxgA+yJhdR2!Lk^)eOe zsLR(YpO}*BDnHj}Jac`)NM=+PPElc}kwHglADLkr2^dd&J!+F929(3$l%dp*)Cvo> zb2Dzl-53o{p{}Bf(0R;vX*7A=Wu@?a z04=fe^l53~j%}h#LCaGFQ;MqKB;@nJz6qo|WO_yFeE7*P;%MHcm_HhOts_dDie(b6 zwn|rrk>|ONw?7F_Pn#0=YOqt##)%hsE~_$fUcpLDe)MjLPImv!SsAld<{QsSQbuH` z^6SK*)wQi*LgAsqMGRDCoQoZrg9~gfx!sK0M7t*VG*)cq;%jUYruTP}4(CrZw-)0l zRPymo=KSH0HENq8_bXG+b?aok*%TD7ca?+D_p3{J*OkL^RrwM~a;R_(9%5oxh7bxJ z-x%I)CLMpm>-A28ODu=)^JLcN=Sv31NY+#zL|DAFj^j}`8QxLHo(JO5 zvtMT0tM23`G*UNV6W&~dG!?oMxWx|RVq#O?dg<+TQ2JA{@Axl4N_MBRKg?^G&)KKF z(BAAc>3q9?4Ea7QJjecH)5+pz?dT7@?4O&XpEMb$`?7Jv?4cksC|{?CESGJ?e8B44viI{_KE5a zA`F?faO4AKx{+_i8TJs{1`H+)OSkB0Bn2-#VxgFsDs~qK!y>)7Qkk6W>&;~&XY6lt z<9t%CVZL3BWoU_)Hk6tPM%k)h#$#l`P|cBgKKq3ZeWYo^Byk7F>cQRwffy7nt;m>g z&Un-z!W6em2Ra^)>$0;nN5{-1)aTH!e`~iQuh}F|a)|4dgkD(+2M(HImQwlrTrU+V zZ5+qMPX_s|O#{vEq_(feqz-PCv#|utv}B+UY2yCvwdWp6V@2y?vUYQ3zuuQ->_hy|JbQxjMH}_L z$f3XS%nqS{e7JHkxQ_RPTO@`ueWaQ*$@R|EfiR`&7eQun7jo#XYAnk#_*U~wkTU7F zV{#SbhR~{#fPzB)Lzo*8r27SNMWLu2ge?Bu5?d~Ca@>bY$d++5bs~Q9r|{=rW!%4- zZ_5;3NU6fQd2EG?U&5tT{m8Ze0^>2dBI6%e?4n;vtn;58>r!r0p;Kzl{aWzW(y* z*Ie=Fgq4Z`Mo^(1ok%@otsDwJ{8}b}2#7qK(!M-cN?h2QNcglqS#S_+EE%M6o7wTh z!er;>VCCO;I+^j=;BPBrq1|{zncH`BGJ2xSKWJurn9N4rYnKmYytqBB$UL!p?0Bz# zd-BE^vymHF>1DLqYD%C@`(IXW!r?Ja*~6Mq#f5^={bYgeQt{CnkPxwVqH9CYH|8w?DvZQpqaPAPOTKT29{ajDyj?g zaQGulRtdy7S8b7I=5kecf>pbh{_RM|%GIuc-V7W;Y%nF(^m+Y)*zg^d7m4TK6HwOQ zQ1~hlzv6Okr^U+q_+`4Fg*`#{?wyfH<-e63Z+f^6B7Zsm(HHko9Ey({-ek1I74Kpv zB+B)4(<7n9aP`)p-zR3#yil4K${342SwroiDroySGCFI!)jFtZ?Bn8ecPolmBRpN- z!d^qFq&@tqvDzk4Kp9392CW*&L2n*_@|+SL#kqI$tq2W_2RN8GT!d}vBz^T>>E|C? zuGUZzeAg`?&z0Nv1)iO{ONz$ai|DPnDN4Q?g?C7)67TLZ+#`g7?__Y zonY1=+WyCW43c;ZvvR6Oo+o(jLKA6Sr<{2>BZrA>meHiykMka*=T7^Z6kz~`! zivjaW>-X(LLOkKWLTEG%d~ zvj>~A%XR+WMUVCq0-a}=o<)6P`%H`R9(=X6WPZDbJYt11@nP_45WmHMAgh^{YXMoM z%eK(cxcl%l()~sX6i%Jo{0WzbIqDA0QFMwetBqV^SW;UZ*_?G)_*Jhu>Wc3!dZy-nf9NV2I zTAnR-JT7be^97yhM%|vG%i&G090{cRZ@0;Q*VvR&y`xt!^hk$^$nxuADA_ZE!ZB_c zK70HyMsX+{D6oKU3Iv9Oh)mO(m-2vn0fLuX?;D|h?^tSI*9XX^yxy}t5}do4_`LdB zPP;)NNud7k6yq-^-yGpNkj46ZNAzQUuzqEJQ}fm-nNKbE%0T^RaiSn~5R47HlBQdE z`##qTt{qFa=WvuprWA6^e92q2d9xAo?^`3%{%82p_MDLgQ;VxC;xpQTKWf&|X<~jC z4JXv+!$@1&<_f$r?&7)k*wD?lGq`1x6ElG@uA*Wk;Lle;9622bkU;_4QBGSNJgS69 z7w8J<*!yVQ-|^DRBqjgNJ%lpfejmpt(o!(u@e{R=lJ{^9*D8}1dBp`i0+!`Z1P9y- zfK-wU5~rt^FGNCRK;U!+2uJ}D)md2}lXLUUO7npI1|V!5mE79c_-x$pd*1O33kYab z(pJ+rzPbbt(iHYI3oq#U7AfJ`MWt_QKwu)gq&(*0)@_;GWwmNx<)aW4h;huNi~J&B zQVvb)?k{$m!N`W~5gB08!j(AQ%IYGXND?ZI3Fc^QxzEQKNCW-Pk?5bczx~z0hh3Ne zVGBbw(>^ zr!}w*Y1MO$+p_Y8^r(`&O+W=NspL}0hcwD}$H2U7x^UJymWFNlG=*JniBr!;Rj?yJFwQOBVHmdN_a511 zB=Tfte`4|O1ZgQP65eO>th$!r(`T%lmVxa3su&$#e`UoZOGTt{S&c@NvhIQo$3_9a z^o|En4@b6EwHL+e-`CU-gG%EDmnD&`5q%>gQVNPVqr!3iS)-jb;qD&HBGlbQyvM)( z46Vv=9WCML7EaUII3)6j1}BReFKubI4yn$+|KmD;L+074*Qg7&4)du68cJIys9zh# zQeIqQ_)VcpUjXbtwP{N&P~N|+0pJTQuOTUe2*&|1L)I!B_`coPijVFf9bDq3mKx>X z<26;Xx8wNTza$0uK;~#>7YlxX$sop3-GDb~-omB<3wgxi7{)TMz>g{x)JGy43l-bV z*dzps9qTP4e?pX$6sa9`*VAYJB z-W*M&t!x!&sTgX}DrA{wkn67~a1P^_wu#&FLgiOQ1LMN7TKiBN9B|Kex=V@n(yoj3 z?o;!gb#0j-1@Myj7HklZ-bL+9ys{iVf^Mc>RLwY z4;;gwE~i6SLhra^z%m8~oJ1vcd=S5)VX(1zy{rm%qMhP#c=zpL^j?qOa}3v*?Zx$y zq{W$^RU)+dIqn8IJ3`)uwFcjvabd?YeC7j69qCzvZZhJ252PXO@rBmrG=id`0c&uv zSFu8+lIPo8xU9GVc%_pTBG-{nnkIqPim@0yyQOImgQd7Qz3Gu9OGLqG_%b4jL}G$P z?i=<8{pBY+jyqB8Go9oRnL|8>c(#$BF6x_N=?m z%)38XJruJHpL5LUMxCi_`S#DBxf1TDcsTM>SrXBFmXUi0wcMnA2_GPV(I~V$Cn2T% z;YBVc3k{RRnoTHGI6k*?50>PxFkr&vn-raFX}PT#FQ|5hiFn_jc;AGmT3EZJ*;gm- zrMxsNwy)k}x-_meh&f}?ARl~d67hveVz@htJ*J1j?iYV!3RKBba56!*=? z|LoC`jhixL~mWt=_2ojZ0$Gaz5C9y`TzrV@wHj& z>JW+u9xoqIIF7e)6$TE!|&0@^)Kn+Hs-L&EPq)NyGQG%wxc9{uTIn2!KPD81}YP>dN(Qc z*=c=+<--<{GEB@Ud2lIZG=i1i038tnQpi`(Q@dxq$zfAvkMjVTm~sk}6*IIN`Ys#! zn7Wjw8E085qI(Jpe~q5Z63#Jac*Zakq6k9F`M5=n51}rXFI-F>1e_+{Y#5*KVYs-n z2y*oGmz>GYx;=A!v=z5@UwNMu?b1@L>@hVIUsB9+MP3i-BE*1UFvKVBUL$v}kNEd* zL|4A6o-2>I)G|dZXATyV;75hN!)952_C1Rh3wHe;G0u-oxked^LR?IbXYFn=MkMg$ zaKt6C$!M7KiG?`5U`uk^zP22DFSCJ+hBoT{8fXj_pszwZ}$&d45&ff@nrgBbnupWDeo?QN%S`=QuRC1loJHv$D?Tmu zh@BLw(BJvFYV1`)-QF9bcu|YtX4Cl3whk69yG_o zgUR;52`8Wee(RJ*r&TMIVv;ViE`z-N6>CaDjqzty0JT}*==D`rzUh&e<%r*1AUQcg zdU%1YJy6F*KCSG%yYeG;nZt)JgdrS*(M4l%zlL1(#l_&)^ah`zB^3?U#-flPij5Y* zns%LZp)W|^nUuf#U;Kv7yuhPe$@rb~L!LMfUVQNvbb}Qi$6^sWG$+ zgVD_rHPVWbaHChudL_g;R}g09zO~Hmi^CYN-$;&r(m}}G!@(j&5C-iufFBl7$3Ojc zq`8s!T-`}kIN-7n7v0D- zHfyiK@@>VU#ll=b@$u0^240?VHQsJ}L^SZpdhtfj7E+yJgLr687z8yi(_EgRAE~W? ze9=5k;N+I5gDJY)2|UGPngfhv1D67+)*mx0`Dou+M{ua=>2=BS}N+l zHVMP0r<<00u6~kgEd%*LB0M($vXJ%OTl%w6y=xT6G!or*I2Oh9`+fA!#0>1ZSN}CX zwb)m#!DglusLUb{v&&21xy*F{D@V&z7f;Xjk8PY5q47PctU?4`!TG%p`w1A`D5e^{ zx75U0OB)p;K3`Iaa&6uRfywg6p;D$}KB;Y{{YPa5htu!;cfk13T~-NSqlZCJ#JI`_ zE=WWqe#!8DX$*h%*#^_m$WoZqbHE1oms^sYxH?aw9J)H+xE#7N&$wK8H=)}XFm6CQ zgg9DZ!6u!&GWV|!koq5z1?qS(Sv?bKpPpU%Pmm@UhtiSRCx$X?D|d|J+&AuA+iyO! zjSEYI0_BTYJ{sv04a^7&2@k_1jlpN1hr31_6M$WsJYaTB8EdG0Di}RG8I=FcM_FWE zM!Bt>k^DnCKeo9H6iv!CdM44Hor1{QU#c;7Lk&lCR%NuImY3Z+nB64Un8OujXH250 z+@VEAtn$*k-hwF_scpi9toWp?uI5l+p#4?qWI2NV->d^HeB04Dv?%KpA_MB-uOQH( zBu`#pPrtQb=#L|e9B9;szEyScNm3ww*-o=|R?!$+RwAVBRCFtPuht=j-%QozJw7IEL@y_*R*5z2|l zRo(Zi2ygW-W`Y=&#Ok?XE#>7ZJ1jSvK*H?p-7ukdL1o%hmBIH)M_oM*{FfI^$T%}I z!(t}CA`L}Dkpj-)|MM(-cM47z>?Vzi-m_*f*qhqFft+;<`<9lL&)&Kc%s!m0baY!n z{QHHrg8)}j0O050?~ch*X(b3VE9>t1JuL{~tpsGAvgzLy_Zk+MFcg#!O)PjSCkl#G z+W)S`|5WDRbB(0L#l3Y21Wv5f*=Yi-0DvF^My)(EF52lJKqvg;_?VfATlKvI?2Y1~ zBeQokzAJCe0iG~AIvTa^>J#4T!`(~(gYy8iGM`p)T3RbWLm-P&*onCUE~q5{R>%`O z8JDePGhs``qzXK2zdm@5py~LKlXDC1$GQ7S+#%$DTr|;eQ4bijVrM_BfCBq};7r;2+5w=vKx|XKm-Zd1pds<0*h)qi9IBiM$j`f{gQ-)3Zq+A`N+(-@oEH!}*Vi${ z0Ze%CWsT_#w}{9U0P%pAMqTTnn3U-v-VO>1krNRo55yY8>*k!g--}&s7ZL|cCl&$D zNq=vz`0)TO_RNmsui5DttP}_=B_#z2_p<<` zbV6R5I^dvX%l!3DF@XG5OqYAHzrn0iXte>9eSnP~8yFaOXvnDs1Q4v))V3Nx&HzzG z6ymS>xVe!pxB$pifSFl&ryvjs1jLu)vUuu%)Cfef;5Lt-Um14ERRfa1+`@o+3(%+G zaCoe97YN4+1e%~h{b}$La7hPf-1YT+c38t7K9-prCtnHts}8_oy;PjHJg8~R92^o} z+gbny4(@wMsp@t8ml*JltoOgSxKaT~AVAaAIXxi-6FmwB|2q&{`~MEk|9hbR|NMO& YoWe;XRIUDr2nBqUvLle2wH@Ugs7Tp%G#uh$o0hwtj$Gs45B8a2NFpyE^3$g zI(S0BqVjKjfnlllmx_U{@@GX=l||mG)M{Eq9>W5cZW7wl`qFbryptb8(XReIXxmHH zZN4Y+n`qnZ>?V8s7lQcC`i=Js;Lddv1t(z5hbu=BKq#Q zQ~7fxvhwik^`r_$Qa>svC@`$0WQ%?GuEKTe&um+y%bXkwGxPr6$&+@*G*+!DtIjw! zst1yx9RIA08W2qodzUmI6db^KNFV(?E(sHKHP63zNtdkp-(?2{)0 zL!QfqMn)tYx~HRhuPWQVPqZ(ly=w40a>yy{dr9N9+aGe1C879oY<#@1`|i^D*~#tO zx8+8~#8Sj&4kziS(4!^pEL&TYqYVjf+VL43JZ63c2-Awd(@ zXtw^d^6%fjySvx$@x2c>=~Qp`mkM$@RetZ!k|JT#WQdafH96T9MrLGdtEZ=zmXhMR zw=xVjCnh0Lr6BimobQOOv>g5Wv$C_ZGgRo;zyKEm!v~Lpzf{lKXPSfb8a&B}iT8JU zh0C9R#7`~>dHWWnsyZk+tyyXDR6(I<@{3E+$B*3nZ4F*0+pZ7U;|ssNxSWn>GgWuA zUOkLt3?POe^FXTgNG z&Uex-%sm(N+ajovQfU#IO(P@waH6^u=24}koIJ*G?2Zdv54=wgbJM)tS4Y@PI|oZ> z8DtzrKOl~@7wq9{^WF=oSZ^Jx_4sms04=E+Jer<*Vfhs z22@;JTyEXUO6Ic_a@+RroX4jT($2o*Q*gR9+t&O35eqBp4J4-5@$T|;V`B&Z^78WV z@bJ{slojs@7z%#jIubLKm@RXvyQAZYoLpCTcgwx5!NL0s4F2A8QPI)S@$o?@_p{^5 zvV$P_5uwfd__3?2tD>}Yc_15y$JEQKzPh^F$H(W%r6DaLA)$`DxgS0}bld)rp8mRX zet%_{<=(xw4U7Fs%F4<%Ha5?m5m(xUg@vKS;Ar_cIo*zT^Cjq)C#pHTJWHRSo*p^E zPr=>T0zC#IWttk7jj6Mf141#st9UD;C3;zoaxyY-QTN4*{GuZ365V=FFRxhJ+js7i zja$W*gfX;#|Ni~YpFb?>#UFBVA}AlI95v^V{9afvwXi5qxa9QW#S0!Do`!~oUFR^` zU@+MoM#i0^Q#$cLS65f=y{(m%mAt&XwKXf^(BWLgwAZf@xXo&U=I7@%G&FWiinrqe0v?YR>rk9o$;-=YYLf4bpPrun`0*n%GZT)1 zg@SH-XD2Hw3kL@WUdJM!URz!sUutwa+MZ8Ip%fJSQfkzel$e;Wy5AYk(b>_F_f&wF zcON2*m6(NzDfm2m@HPX(L(jucwY5L{`|am`L@g{V?7C=G^9p$$D&2_z*H)gk_44vk zQ&TfFy%RC}$YUQDAK%7eLJakNxKJH@J3KsGDvY$>ZtDp{^x@$lxK2}(n3mQ=dV0Fe zWNm)=b2X-F>DJa(dwY8V8lms@5AWUk1lBJ~AfJR7kPIUgrD-xP=d=0cdV07e=<@f+ zyhH3oeHQ1>dlUV6wv`DdG7wa%edb`fu%jNFon z$YU*pP2va5{{BrH-zgIf&TW0@xVOKrAS-KW>SH@uTWLV1UaU zmZt$H6Jow7Nln#pa^m(%;d_6Jm5J%M9e+eb#1M)6!THI?E&u(E>FFUeBO{~y4NFMo z9eC4!C%?!Q>ug3^qoT{ce`a^0GMV{@A z>VZ8zaQMWss27ACLDdrVyV~Ez$;&I`x=HIrxzbj=9l%@3OD*^^OlWXr#Uh%aM6Yqm zZX!A%K{}0gm|zv$csGqPs2M5{fmemztFzdt$xC$pv;5BcK|)Cai^zPofuo(pY4=sO zV@z>z@#G8rRi(2gJIeSc+3TEMd&}ym^XZE-8Zq;ZcXwC9Qr^8YHaGuaT0UB&6%SeF z-8%^?iKOJ@#kn~qsVv{V@o_i!JqW2U;Dlu+ohUKLS?Emb=qLzPGfOHG3bmz`RoE=Q zmrm|8K@X1;aI@)J=heN{(Z$}h-0fM&#wroSR8)^V4>yB@gW*Owxw%r3k_svOgmm1- zKTz)9)KCHs9t8ONQ$BEDU}yh(xHZclGcr1Qur}@pmgcjal2cS{gphBedDUfF4wa|_ zVzalkrG-tmj+Cy#Vz^-SLRD8+ffp%OK$vBK6-VQJc!_TJXfaLoRZe#H(aFiiubQ3x z^@+s9#A=(#%ySI_0)j-jks+>EP$gldLAYeTsN?x~y*#cbPoDfBzM2slDho+Dl1eZx zA;I-<)4DwQPY*JqJ%&+AN~#e63)~bSN+OSCoC9Sn?Z<+G%>6R6?xeln z-~1{nDxkn6_AVNczJv@DN8HC0OUr=t4OzK%{mw(z&EN3BgoK1*8GTbz)MtW7uy8nP zWgxo~VlX-;W@GY8wP6c3ZnOLTnhXIE4NY2iG9P?uZgzGHl%1d;#~N)_Rn=qaSbnRISr8k(a);b&(PiH!p8-L4n1JADC7^fSio1NUNHii);IMZ*}PX{MvXqp%@fr z{#WOxJBz)yZrutZpou^w@!7uLo`r1A#mQ+<`W&LHx2sD|UjA$;D-!dvPkw%WlIYT( zKLc=tF^q~(<*E7YUJLYmv77OAsL0Hu$HKy*Y>Vg6qXxH6N^%FQ2?`40HnZ#2ya4%ChkfV=I7TG1i}X|n7OPB-St;W6Y@%;DZ*G%N2v%0mNXncNsVd? zrwBqFAFq}yW5ly+_@Xpxo$?)!H~nMo$Y(}MR#qn@CiWlvh1?sAI^OQ&h!xKpR$#ip zjPZt{ol)`qZ+;t7(~&L%7Ex4lAYRr!aV$nY?e5l=vf05(Cr9IlCdmhL6Sj?yk$~i6 zP2|w7kO{bmKcbM*S}7<4tlQn?G*#z@%z%_pe)Ka(J~#{-Zr620s*WX{7lOy@y z?Qwm7<1LFX<@(=zO*@pXiCG+lk@JK!9EAo4iy-#^4?j@qzD%A?^bztbbQ>jTwM z0$KFDG&7MvMRd$Ajh2gxh;FFbR`0lgCB74C94D@&S3Ozn8Yo#svaqlaiZL@fliwx|g`IXR?&J?Eynu3s%m7P7Uo_l` zd?GdY`?tP-AEfK0dhC3RRPfn?F3bMR$6^^uN4eG22TT1~z(Ml5<+JYLdYr6R6N(Mp zWr}^mPuW9pA-a-KHq$nZZ2si7vp|RmD1dPOE1<{QjEq=UukyO9}>II1N1T*as-nUFWuwl9HlkA%fHapG?%K_)9@1;A9RN3SvS!RXt~I@(T%_ z#QI&{-tqB7?+ygrF1Q+<|HwxTaXn`Z))7eE($RIEM_fE}5d5sftHKvY1ZU+muTD#k zV@tGaqP=aBElSnAIUH)xCG;LQ_vu`W;!@fQpcW;izQJ5YM+b+YwDP$x;$*fK%(?Qj>MJwqB=bgG3LZ{{H=YW~!yhU%vq1O3+71Gi3h! z!o)nOm3M0Cq_3F~fa-|OHjo{L6iMiumip){_`ND1H*GXt2+`5eF){{uN4a8Y zOBW7geIFZ3=v^csCRTa1Fh36*70{Kcb(lrwzVB0o^3riDVd2JKzkY!)_PbnGYjBUf ztjR4EJB-nMPfu?;EDU%4?f35z{z~rdwcD%d(%CBheTC{J@5Hyaw|Q-+JfXJ1vdYT1 z<~N^t-ja=H*8#RAA@Q9=&(jCxzC9=7=~>s<*eFoX{P5AEr^j;27foP6HJib#HQvWJ zHMF&@Y;6^VrGim#KdyWC($B~FR5UpAWbQV`17!h#r=_6*d0%1PPmQJ)&@>beXH$t> zhs#22Z1U{!9&T>=R$6&NJS{CP^ijbL7?YmeNV;eSAmxw)8=*>*+_>?>m@BqS>xoGO zq*7MmP$8)dCF#oi3Vcx%4l(Oz&!g?W4DozFhgQH9DreMsb*@{jocVZsk5=AUSy?eN zGXuR}+Soqw1OzII;Z=f7CvkSzewEL~+Leu*XC4sFO7C?>g|3tbgI~YuLsH*pIAPyA zk&%|>2kxTHu71QioUV9qdb9%s5vo4GWWeay0b-PG!128gXRrdq`ggg^qsz-3rKP2v zoObIy4o=U`<{gdzDY-qQc3uf4x_~xCW>{)rVS%RdA-2Znr$;k0Gk{!lzPw}$ZOO#P z%FpTKv-ljMB4`Fx%wnwjDbo!VjO1gPKm0Z?UL>ZamGpdk+CUPU#_;s2vwBuw+D+_$ z-7w{}j*E%Ys%$W3K|x4^ym^DEe;P1f>tsC6`OYldDLBqU(!(Orb4fgwc9e~di}+qH9y<%&Q1#Tzj^TZ* z930c7Mp$Q8WlKv-)ehoD5`|xR!(n8I2f<-nfI9&L1IRik{wI{9A+Mwapi|~{Ix(FS z962z{YMY3mjWk;1@i)wyH`yM0xmef;#5(eEaTVm}-{s)Q<#WuqC?e=6G~o`m_{zl0 zoO!&*l+VqqwAv1;O8$joZk`2n*BzO!O|hIz$TKS0ZKDO` zrpkI^;m@D#-`_BRJkDBLk?+s4XI!z^d~s-`d)Ga9|)$!K=f^;(dj>C{M}Fn>Xj@=JKWo=GWJ$08zeu zE7C~$}x;P6~g6#PjLXz2g`C#LG}306J@HYu`^+mz9+TN()DRdg|$(yboaUgUX9$JL>>o zOgNanLqkJ>Uj&)0V0nXsp&=nlv3WJTDid*#?L$Jaj~iwIlNJ^h!tyDoIr(lqc#udN z9Cb@-KvgM2sba9m{4TKWp=_>h)fypxhW4k0&(^2vCx9+=#Ile-j58NJTVXZQ*B9A4 zJNfNLKt9zelA*NrtH$wUe;r9j9SQjDb8T%cC{g`w8A3uP9XIfv-6SLwwe5fn)Ow%Q z1_WFg#u5JpTLkUUA0V6F6K+^R73*E^F<7R13 zpFP8;;I#tk2*CjCQ4oj*AU!Wn}zUh`}tyw*RzFYZ8)qNu6g1H%F=nk^eoE#UN{ zqa$R6HvMi+PEK#^6}&B+*}&Lm#lzi`giCpGVx7>&JSm)1Yd$LEkYex zoo;+pxbbbjg+xy&-Zg@P?=OI(yLaz`_5vx<%JlvXa`Kg#8A39$2Y{~=5)$ADtN`Ex z$zdgy^_wuP1*eW6=V9jIaR%iDWJOSvr{Ufp3p{lX(tQ5>6j%n)8{;2u>41wxhJ|@< z&$WY@s;tHb0Ly}XRI`)|zhyoS1t~rL{d;ea0%84Ce<`C?%+2$(*k8uu*@Y3;4g$`z&t*G{3E`#QOk8UOG8_u&Dv!bGp+TAT|T&j}*=%CFK-A@J*Iy zDZ;OGyOTTfjAmQIL74vXa-AGl8#rf7bTnWt0xAJ+*j;)$?Yz0QHU%iBe3kewjWNbBkQ0+>+Rcy z^WJdD!*A3VXGszAs-5Y6#>&b%Qmg}jCZCdxm-pGc!efvRLAA+N3^_hibqQ5EUP!h@ zi9w8K5qxkz4kzUld*EMdu?X7H&^+;t6)vq~EYPO&9W?lF(6-4jwr^VQu|9lQ*PpBSZ{H2d;ITl@^9hZ) z#$hYV8?f>N5bTi|AROJz9n8#C92yx>8U28+u`6LEb>(u+)i38k;5 zrlzC+&+P1S(YRQ~CdBQ^w8kB+74Gthb$R zz}rZ>8{Y{cP0aiEJ%**Ac#H!)i+w*0Ygfsyfa1M71GUS<#N^qtXS+02a(6o0+h?|1 zJI+HuG!Fq;DIx;@+O;>4k%}@hocHdLav2AAus4>4fqsF3;RgaT==lIPflA!Kj&1Y- zHM6!>fRQm*a^vU0;g->glNcKH9&B*LcRmeK&ddozl~q^sadY1YZGns|mhovOKNJM* zq$G06Hj4Uc22s?(#z)5n*mY zj{pS2`5F+83SbkmvYiWx(aHd3DJdzRvp&<+ec$0=uGYL!ID7lLh}ll|<)@#e>mtSb@r%(JSBBzIX@ z?sIb5J2+%g<7RRx6pl)U$lU?><}q6ZTqNLq2hke_xD{B>n@q;UWFC4HdiCy)Q&mbo zeL}sFfX>OwmoGcYAf9EW-K^D`74Hgn8kUmV#1BbX6D7Nk_V+8N7N$)^>SEE&z7v(E z>bjJ!<$W|C52~y8b~_`U;scCy@!i5vCPex=>@OrVw7jegkffQue!4>;3Bm~YKFPPpIfVFZ<+ntMA&x+5(zksAO50YT)*qX)Q%oWtW|=z)z74RM1^&zAc5QXi3B z1PXz8tvmQ-6^U+w3LwScPj@`ue^>ozF%gLLQCjp%OFaL*B>%|!Kda3QIuSK zx{>~y${VbualW!Gn*OyEJcCc2Q0v%DfH=AL>a-^ZY8i7^?>{$W6N@&swq_fAxlFO*3LSiA-?#tI$Nc}S;D0X-uG4;OuusYh!YPI2RZu4{U;Zf( zo!G@y`TO9SK`m^+XwKmX2xU?uO@dg)+s=82eyV4&#WC&1q=BX5n(qj~JK<-Y(}eAq zQOjrXe%|@A4(xJw958;aT;c$Lrv)i!4>x~`xSM~yud3xX(Hm_YonD}S)YnJ1Xm_cf zyBP@Qzcpf=JeNWsiX>6~pvHhsn#hh>kp-|&NZ6c@W z9xOVsAAOAJ><=QAnc>RPhaQxFo$e)PnNm4*u!0Dqb0F>9%VmWQlkH5(9Gpvt*CU|r zkAM`LSp26Oba7C&i=t%Ojm!M~{U@qz#H>?gugXpzA;hxA;#iSE^m?rAn?gGte1mc`7rrp8O zG4{Zlg`NEw(~Vt1>1gOp&>}Mv-=Hv+m6X!AMg5gzWZuZ#Q7w-yD=Py8z2Xds63}zA zJvI(bw#r>EX^`sxRqo8+Rlbn@73muK|I7k33sAtX-UKE97z_$L==p&G0mGxCg*)F~ z4#@cSrE77xX_RKxB`l-eI2;6e=%(uG>H^J#H4C}?O$iO{%u~*yq@p@lpO6Z71gZ;Z zwR+0E5E33485tg9nfu<#<51!&SXhyyoJ~DF>_S5C$-Q?Lt$nIaoBbOK^BRN=TeSj`b ze0(dFAXiGz6NV;wdiq}dD;Ed7?D+WH)0h@RXz!|-q~zr>&D%uz`T51it4}PRaPar6 zF6+fpGLmjb1m@x*`b0ScjFok;baW}LLMJxWua+N3j1qug|UVF5a`h5ZvUdVs6I7*$nOAPJvAE$7f{(ALxxupIda zUJtdV5sns=^Kak2UAlBhemE{FY70OXoChWyH)w<;B=NA)L^wqu_z(cPdy z|7&b*RvL1d1!jNB5q9`q$eh#hTzfgr9KMsKI#r77yJe3t01%)aH zKPA5N<&qB{B-rCwaz_f)IbgygRp{_fKow3 zPO@k`rCA z`sTzbAXm99_E4>m)@49q0{a{tA7cls6RD9V8!bKh^w&O&*45BMjs}6y%z#h>EoB0_ zG!Yju-5{g@X@;qRAS{q0x+!h*<>cw3JV9|~?tOLxI{@0TL#u(-4oEuUP|*L95)ziy z*1}Lvq^0d#Tx>1aA!k5+2R`&g=4b zWk$TK;noH-NsKY=LmPcpP^_iI^fE+o3DMf@X0`qca_=8P`|uTvg6sp`%Qr)U(Eb^A zS`P7Z->e53$xgsEK={ok^M{}W)$u({TWrsFa^i+YMgkX=1KAwpp8pXd!0rGB4VnXa zPS+r^giklc^VOaN{6Y^LB!y;W8R_Uu0<@o;oJ5mqa&q#jKQww}#xkn5U@vq-26|AS zO$h9re!PN14B7;@u&70)?F%xP9|RAS z(*k*2^~K$1AYpc7d9%j@kkH<<)UP@IadD{pOeGj+q7?5L6-b%gHs4=gmi_oxI@R59xy=z$FyFU~!{+e#YGf7;PQ zOm_H5TUxH7`yYGgCN+(a=SAVvlTC7wufo`RYC ztB{>z^?b6k=b@K%(K?UTeo~cKKsF4_E9X)zJfo0O1yy#6)SomzW06<8*69VbdLYkG z;^!vzBYl5wxdO||>gg^B4h#ELW+JOa{Yk^ylVYMabgR!r>(Q0)yyD_#yh#|&Ux_RU zqZwKZ?VDdRp536Jfb{bdYW{s4q`B0PpIdLL;3&YDv732h=L@u7#<0@Bs_%^veyJLyiNz0){dqX!uRL5`c`M?PLb6BCq3$ zv@|{NXMpHJr<=|Dt3noilj_PE%pC1zTD%SgL{OHMG7@h!0ceLIvOK4AAlQ3Qkx^p6 z6W}<21q22Lg6B@wIu}Zs{^ZAb{Rs%0$D16Drw~CZCUX$; ze8bZXWDwVbLu{Y+QcNR|I-u=oYpY#VNI5((!5tYH0XgBlr0EBI-88zJxh~|92~!4+ zfW>Ym^IF3w$X~R;%*M9d4D&Y4O--P@E@OaX0Emef#;=IG|9~C@C_elp>I&O{%wL`- zX1@nw@`|EvHkbm`e0>fHApu+!inba)5eNqFMz5hTqf%2RH;Kov1Ly?>wdRS(fD=O9 zVaD*0bZVlNAZ^{jEAXIfcA`Qc9#ulB2h9aKy9Izmm|fI4d3d_p+eMMtA3l7psgY0S zErNOq#dffTgPy(#1|7iMAk#mx`;FkSgTF(ah0=5 zWr{x-fIuYBxo!F96)z>Y*?(~>54&(~{+KH0f*vva`>SRM?<2)c2xM|{7+Opl85%k~ zIZ^dugm4_2m{Bj*!p#+~PQm2PzW z`rWy*(|Agc;rsCjgcohQCq0YnIOmSx1b+eM3If82NQ*;htUk%q(sEoeB%MOMO>lSA0`K-OGXz5amsy%umEBAeH1w^#70Cs2^#AnyY{;up-bPu&lOeIDQx$cD`b@E+w6A`s?` zI3(=5`};Qhr^&Vr8PwQ^FmuW;ATR}xVsi2f(5ITZ3Vsk;ItG9VD8jGX6pdmbI7Qcs*ZBzY$V3Duld0-|theQh%}C;I+^U=NrJqlHA8qwmBD&86cFi z(9ldnBYovce5dsx;+C+mu*nALd?=`a7N7LJMqVUK5{g+-NTrxDblc34#X^K5vhM>? z2_E&3W_uV0tUzQ?zzwy1;y?7LA-rOvCKZ08LV}S%tSXzz#*n?;z2hIfsZfJU{wNwv zDPS_(@&vx0Y^8NnSm|%bk)ZEE;k?kv$i#Y|r7By;>)1%Vw?S_7GQyk$rr02SO=_|G zBJw;+t73Wpz|nbc&^f>1MEN6}o=q%VUE2owfSmj!%jQDXeXkBb7) z$CG<^^)YJOoglwNDWA!GJS88z{ic<#(m#j1NM1$==KWzMF$j<~hZd3U9CK%<` zg>vPVI-v~Lzh5d!cM<*Jy!{o|HJW5IPZ!>XTs8nr{P0XFctg*q7Co%3DN5tlmv^yw z%;@swSo7ZszCQHA71P!??W|?s*fuhHqJ&E*ZzYq7V-W5WxFMA^N5kPg}&aZK>FCjz}p$F&x)}RETaW3m7a|xYa5liMMu(E&Y*r^a* zB|+A|8;MBy(Viyvf93phSQt$E-=!d5+Ea?QsVgK2(p)kB_Y&5>T|UATJtXjMG}!B< zMpg3s^MmwR5!5-xA_ax(e!hHN`#*yU;A74-k{(4ChXfH3%~-MP%kGKqmq-g)YLwlmV>ayUz}8eDf+9qRqMc2UF_`A&+EKScq7}gBB99&xE+Qq zJUuyWq5-J z%vM5c36MUWKTIAGU%w7|bTRs^5k>bWIx^VFsJp;>Qq!(RxWY`#=5JBxB!Gx1E&T&9 zEHD%=e;9=DK08(}v9_}MtPL3Sz0%kr8Gn>?1!R-PP@{4ZcI~l!Y%L!e?u_FF4L@Dc zqLa@saKm&Xi7nsJ@Ae2igG>_utd@&=I>9|~nL&nkZ8O8sj&w|om`V2MMs(VSf-dmtz04sj@ePU-puhZ>l=eBlvL^wnWQR(nh@ zKDFbeon=d#30I=rok7>9siXk<=>YUU4~1JK%C(v{x8pm5l%w$07fHt+KS3x8*Yiol zGVK0*f73y#3YzEjHxfh8Em(mLqNzXx;6G=OY^_TQ)-io%jSq^kP2H;hlyfC^0sfu6 z?QHnzyQaSYJ>Y2}3m3|`gyVa-&Gy>aZYAXdcE3TaWf50kCBBa7gCc+EYNw`lLna!T z@#BXyOeaD^xVxwN5h)(I*1>LZre>j{863I!Ej-K_|7+JrO7t#ZrmPOC4OCSF0|O)- zYzc*=e&p_tO5!pJdCm${=Nssj&x*BcV3mB-c@`Kc9KZLliQ4r3X?cisX$;ZNz@+lk zlHh>~hq)gxuBl3LqwM)dAQ6HO9?<#Y;^BeN3!`>uWqR}XH|Vofd*x7x-B7ESP9gYWpDrzO`t{=V^gJe?MTk8Svn!&9cld2?+3IYM0Za8CaNM)emA#OwX62~pR(L1VE`oW|C2H0w+pmwWXdKC8Ev3-IkW zT>cu<>+pRpmUC^2_$?%{v+N1c&tn*RYyI{`U;JG?XIdZcNHzpfBytOzIyizNYO8aFmH4LF|O^ei$ zM1cu=^n&|*Oci+o_VuZH=?i`+kL z(wpIB><9{iWR;t4(aQqdtzn^4FPjL=zM|i|A%dzRdi7OW!zPfGF9tp~aD_|!>l-n| z>-RpiR=2~t330uu1!{LFZyakGuA#>ZFLH4D6AnCnpQK%PFsA_x7Z2G~#YHVpvu{w5Sr7(y&I%%1 zunIfx@L|A2EP;boHC-`1^=`H>?76QK+{$|3|D_9o*hOMyTqPw)rf={_%qxP>>rPk+ zVT_9=i?z#vk0hZ*^1L=NZP}q#yMDq5w!2Cqwew{bYhWh*f3G&X&V?l>5Pkj$fmkG?rE&rk3{yz7{oQRB)WtqL^-R_64<{aI>tU$JZ0rbVSjoPjDyIyM7|hI)A1S{ zL1YnAbWB%nT35wuPkQn5iMcs}ry}#E#cN12POYd6W;TMH~+KFEo9Tn@4VGB2Nb$q>r8N#Un%(>GN=702|$0M z8HVUsgPdeX zUqE87d#?C?xc3R@5m=Vx|q$W!GhE%f2zxE^01lH9R$78iCxF* zfQ8x_tO2K!Mo7y7$R_-z9Wwu&Fbf(ug^!qsgEbGc&IMaAKrhp)>U>XE*Q8nfX z95X0u0hqPs`gX0iKvJ!6t_6NJ@3*BfgoBk%`6GduxYGW5mKqGIfjBPT)Dp$s9m=FgK)-CNv2> zQs|8XWe05?TD-CLS8+*y&(1cR!uUK4HQ~c#!-=PJ{MP1+01A@MZCyLcT239=RY;7Z zztlxQ?RHANT4e|<*$W;sfM)@Y;HdzBNY+zzHU0g?dX49sp!pNfthiy*``^QOzZJY3 z`|1oTnKjqIrNY>(6MA$&_F0o7#Xt#LQ6iulLU-Sik|d=(j(1;(iTOTfwK<^_yp;9T ze*4cunPa0IoEML9GY%fk2w=nE4|Y8edtz_D1;Z6EvemcAW@I#rmUy7`&A|bphhdZd zHFBi{Y!gR5mXPR5=7Uv4_Ac@XP{AW-zrRiMb~i%Mva#GJn!O9iJJwXKW^maU!LX?*vm&@Ej3<;OyLVu?+Lid;q8DVxK^RZbE2U z;p^AQ$ibGPRF@&x1os7Xao zju%Y`k2c?>_zb=c!vGPe70@tY$_hq`4n5C7g-%|+n-%o@j#x~8IkSRQwdPTM#C}rZ zYT&Car8vFNi5=%MZz#_|U_cG7?4JSU<%2FiKfmW`DgN~1?D}iIcZTjrgwjZmArn|UWoZgkMDS+uGYEfb zq?ol2*=E;pK28j#CiMxzG`*e?m-vbes2 zI|~m711iQGI6T|#Lqq2r3)2|!!dsD@vN*6_6G`W97IRAm*ZwUD0cX%!RY8K; zsA_M41@FWS>?0y@)#N~k@WD<6X9)-AOddNc{z-s$Le(`Zd*g5oT^7D3qhAhdAy&}R zus7wqn{QMbNBoIf!iZ{Xn(N;otkWW$UyJh5H2-agt$nF6~KKBLB}J%bJ?61(=M{5Z)XgGo$C8 z-9|Tvm>}H4dcXeqd${*7Gd=Df0(}AR{qEF6?Ty&QZ$p z#VnSZxBeg(T@lUm2ot|!M5*v}$R2J!3RZS0@I`AS>Gmjp0c3NR*(>IV8d|Ttlx3A6 zuI?+1>T;&)|DZF4C~AcvEI=?_ORz_ zU7zame|4g>xVDF`!76|XUhjir8JKPq=P7zAr4fPpWxHVNyLYd-$3&b6Rt+}6Z^jGn zS}bN4Zje`g+T+A#TlEVEP2>AuuA(-4bs#3+bsSWp|GpPMSYPdkMvE|iT}OG!zI71X zv!-hF8lsO6w$SUe_E1clE#k{}_>`}${q!zYG-yXLCqs%&29BB4>(HFY0h$|GazZaI(8bbGtxgZZ(Jo&5yU~n@#Y4;w6X726t}`zsCZ6PO$K&lX z`YW-XH*W(|HL>X?{`txO8Q`0%@4Yl~7Fbnf<4QlJR)K@2z8(L5J2N%ysm>!qbbq0e zn|%mJkGK%I`o_{o2?N0$^iJmH)9jD|F*g~Xx(X%br?58Fcf`yEPwd~nHnI3t_Q^zR zjLd1z@aXEFJH(U}Qel>3-yVyhUP|(JdV0HVMHYTm_#61>>OCF#TURFxS#c-X8T_p2 zurDp)2LB{?d*PD_H-!x|XX$pzVoTS&Gco*k&!44oU3l8=Wo+xuiD60^ucjo3f_@5N7x;b&FZj|S(t4HF?5$0Dmt(5j$_&Id6NQ13E#1{ZL_?P1NjDk5sJ z9i1VZyvf!ELCFc_a%^M7Ri177aRF?d-&0@{PQ$iWMaN#)r#_OOO44%Iuipz2cJWkg zrs&>?D3N`8bGX#XRWANALP-=AvTf+5kx^0iTvv0`r7^b5FtaMj#I&7Av)q3KFn@75 z<1|OY?Fz$dMV!1r%b8jrf8PfMfyFEKnfIF6j$0b1PAIbxe$tw+)Q9V7M;5X>NW^il z(vQv%NCDf?o?vF}cZ?kE>hEqEcwVoHebmnmneG5HhX-jpvaveEYY!c1FMLZOpef3+AZsUOn;ArE<2pJ^j-}6k%5;P9?vJ_2XQfJi`>f6Dw);31Gpq)WP?ELteS-?H63- zGpi*+I9;JDj=tFtO)~!jTMzcy8LAr-El?GHy=^4Xde(fYKiPURfUQE3e@(9d$5%;@ zl)y_pDMr`cJ=gA-Imhw{D>8iH^UTR$@bF(a<=4+t)Z#mF^x8ul=C6#y;xxXoNcjnenP!*a=Nf zD_&=osp;-&K0AbeLoC*zU0CX9I>B#mmEzhUY6W+?#+`0XikU(E4c9fUllO-0$y@Nq z4Z(L{{sn^&wn#_*Q{6{>7?Hc?_9&qkWj|la=a6E1E>FdQ?x~HPT*xmka!Ssi2uB;>1 zji)A*9wf!}ETiMiOm?hoRhF~rYnO7Mc-?(Jtsn4NrQ!r<^{G~629K!$pWCMMexNt2 z(8p*Im$%UZFJOC&;z`MLo$YVqiOblmYKo@^Q%xVPv^k#NI z_Q|M5pm(VK=Pu&GfXJ&Fvy5fISN?vQL1>04{lG5E9`DUAc`vJ%+ur#Yltt~fzk!oy zVL|fqWBj7q%k>;qk!@b^f{=xWwx` zx;n}p2M&9kH^x`FBXrb@wK!rp9r<0|r%tqFWTIq|p)c$Xs>jw1Ajbh4dJ|#BE`P>5qn5dh6KU+^6as%4}Yc z)ica^^hQswO!8#_`+a$M7Jxy9N~eu9asmP5@$#`s1nVIPyb$P+1jbo9h#W}2t z5|Qr0-B+;<-|P`iBRuu%S6xBD3N+B*YXd}(?eh-o@i5uqhaOylsT8;&3 z5yrl2MD}DS%D!cnrI19~%f2Sr8DuL|(#R6BFW=ke^Zny{{r>y8<~lR3Ip;a&Jm)^o zxu55GzhC2w_E{;!iod^nbeFWe?i?h!8A^$RW7HYB!Bl-vl(1>tCWyJ9>kJ|+u(R=m zxw3wJYY7r05~arjKf5|R(=#%@zz#tRcn3suQ}(APGdXQ4EI!IyXnviNde-Y;y4`mc zdb`9mSOq;*`m$3<&7t1zt(KENg*{rI9-0~eB;a`J-S-&E`3UHf^Dr|rb-d~Y67u9#b)gMEY@ zS6qypXFE;dN$>XLOX6xKD&HO(yx>s3#CqZZb*AIXb4|iA@ruwvnmmK#x|Ir3vV70& zqP+aZER7Z&!ylwsoikIU50MOY56gx8HuqFCX{;pkRg=xH+P0WCGIp`>aGn|90xA45 zDulKwI^ozMseD7-tL!PGm-1PymB=E4+)Z^D0h_a?^JO4g*cnW0b%FfhTeoj--UfUQa@4*N-j@uCtxSq-eml6IN)#en{f%@%t^Oy z+aLao>5}l30gj&=rhRca+J?!mxhbl?pBsOxhic@czb1D2SuQH?r;X9> zR zwy6@I*1k5GC*Za_FD=;VnPc74vzzWnB9IacTs~xKR|!T@KPGrKOU&m?&Nnpqm1d=7 zDcm+|)8g7hZJ}DP!b&u1;d1E9Rc~JxSS5U$Gio4?nHn6>3s zS|b;_V6wmdknQ2I!=76xzt8e3kpUZ>z+&%T^$pdssPjz!oyp~BK6$$#e83@)I>A_^-X9%r43|u?30(#1Q0h$RWxx#@%0l&fwQ=|iF|F%k}Qjk1C z%wB-Ki6&BJV_yaAjn;fJ_x}B5Z2w0LKGBI;XXY_q7+LU*=d*A+dm)1E4x4SGrWczX zr`BT^-~M%T+#uCqafJbNA9DB}#g;ePw0So%Nh-A&-^0Qz|5WSHymHC+qSxuXdJ!em zb`W=1(~SzO&BW!rua_N*@8CTNne4(B!?>QQ7fG6TXhF3RK{*+2z2bcbjLYWExUWs= zu7BV5E>Pu5n$kYd=khr7;oq894Z8U$`lxe1cJF2>N7G7$*QNz|D9^{uTk`|sLt%(P z6Mm(5(gMnn{=lRd&7tP){N=WCc0tQlPOL2{q5*+H4d*Scb^TQ7$J*@qm3l6@uzQTJ zJ<%t4Wcrk|>DlG7xH>S%-k=NVu=#bvDg~FzZJlA*zl!#JyMG-2{PBblKH{B;Fk+KB zlJ>Mh3PPEOZE(4Jda? zyvcGYEnexru4a(XF7f^6$qld_`d<|vpt{}WItNtb_IzaU+Tf ztxQ}#;oQh$m7%<(o7KW)Rjgko){m^33g-IbIxao#{(~<{E!RUKFBsNg zxDkAU{yTMI@-vJ@{zq&-J}MpVN1>sd!v#k7iu<)@h(&S+F68;`vbllFxO1@(T;Fl; z<^vvh@l`+nV*BSJE590bj+Fxq$~&uFh!le{zP#@Bb=Y%OPEg5#3u;)-rH zcg^?`%@XCIxGWNEK7MRl>|F9Wr1Iar8M_y?QCUp&6Dvf?(3b5gF9+uy)}j(o{QTKN zIgfc7lfZpnufDE7RkqqZ8MFv?1P_ev38R>e_*t$^H&}11Y9DVV)pa?2kb9O#m4HsB zd6Mr?tLG*iOX6+VpvIf6Oj0)R#aZj3q7G7Xf97n`i1Pi4RPQ-x&9nzC6B4u!l^h+8 z=C(?wIes4aw`?9d#!WF5;NSZ_`so5kK=@LjO#qmWv9YrQQw6kNGNG%LfeggTA;-G}xd z5IlP9pHmafo`uVo5I8y~qh*@C(l^0YU;9KW0-u)~_n3Xfo*Wv5-1ZNJFYSfK1bwD- z0@Z4NGvgs@pe>KL`bK)vaBavEM6Ov>fEo+d-E#4KH~+r>&^(WNUjU0^kZmLXi;!9x zobc&8sMVI)@@GcRk^e|@6n)Mo zl%JlLI;eH#K@rLmJp)rd`jl)N)YAY~ozgCllbnzFaCzy}8d{R;3KS9RGLY%* zKURL+Gq{>ZO|&O1%rFNgT0od&fmdeam$J@u^<6_NtNB1bzN=TS3J5$YbPVBq=C|Gr ze(lO_D2VNzLXF)DOYB|ysS^2LvTIM>@Xxtu&cRbl_a`x8bwlZd)Ffn5qalF&%a>?Z}=R)z;F{D~jZlyd1r zC1_>W+Xgm(lQ&JHn%LXj{r-@DaTyfHcH-xOlx1}GpLEW6S2ZK7u7OXttjY3Rzsr%; zbe&4V@nfgo9+F(91cyOWZmz^MiPP*p8#Ghk#sTDr#NDy!-4qSJOaRh#S^@I~xEuE^ zE%S;VF~xiUioko05ph#p-TBTi{|`V7!3KEWxEXjBVG^Bh`@kArr}XZQmp6v@^%Te7 z>ReNcoI4|6dxyiG4kL=FNxM#m8EPDQK}|0*J@twMCmLCIoELPDaSl|X=Kg<2Wy~SB zyy3RqC&N35s~H|17SJo4uC9YAz_#{w@(`cn!|fcXW`F>|e#bqTDZ`-~SI6PbD&y|#7ZS<>4TE9G)TfORdWAAsevkrr^or#BH$c$9%=;?L!^pa9jy?@q&03Ili5Fg|IJiG5<9t?z0#d^rZmKm$E zvi`DfWN4azWde?dSzbrl3;jIy&tG+nPSqX3OHV(IUnWRJ2Og=~*b<5>|E(enlStsR zEv?$4eEpJ95J>;oEF1X+T&t%&KTfKl(IlSpF*xOASgCt6f&)TzUnW}@3Up}zl<&1f z{om$YW|o{+tkOma*V&7{lOU18tj0#~T<5^!ks@fM3-)VTWk0_YrivzQ2bhf5AO0>k zG<$GDU4a=>AS{4Q13IcOK?#P@r9)q$gVQXT^kxUR&-fze>WC{6qlIrIFNMeI#iaN1 zS!q!PnL}LviviX3^zy39`GRhNSb7a0o)At_8g@UxM}j4}K=-}JuVIkge|f{uay@~v z!rqvM|f!G0u`R~%FA`kxHa20r>eSv7Y z5PNPhF{D6w8X6N3;Cm{vxqmT4qgzcM%zel zU$g2sLy=X7o=WFgzWubJ$t*=$KS7U^Lo6flazQ_8FeeX1bnvl{q$ug8X*S=~`{!e4 z0;K|)QZ!W!zn|q_{~$JrEG8ipWIcZhvR}l}V_nR&tgF*%h3PfB61msr8}4XXbACaL4uUz@DDe9_R=dktAi@+qR5b%(R_<##U@rrG&Fa` z-SGzE9T@|cLQpQhkVM4IK62rJ6scNIGxQIq2B*ERF@7Vp8q)|P<5<605g`e(bJrSW z{`WY7BdB9+NMmnNhIDz3q<*=Jf;&w1KFF#_Y}_`U+)S`jUa7BeQiKm?qIs}dM5 z-hRQ>O)WhyiM;KH8)1pfaKIy5+G@{<=YpY|W2kMhG}f4!C6n88SU%#vOe8lapMSfX z>67RPN(UZdzYU$1Q?=8*k7yKWD>k{XzGZ?}Qe)KkR=khz1szdgP_#(Z#2A*A4^*5V z`e3v~N?f`OKlujlwQ{U3QeAPM4nA|y8$J$ zkt!{6jy`LTrD3H`&v5*~+fO>R8LodcG)|``w_dQVP)o;YxG7NASVq%ACQIDn%s(kt z@sgAMeluqkOO}+7wCA|%8|tVecf|RfXUS~q;1x>{P4g!SK7~OcXo7TK+Au$W z%doAdGrL=e{->SMex!CQs%tlev~~J}!+d%guR-R=4nEN#HJk^xfSxJ~%Pc#@<)Axn z-`gj@a8`SzhRQ{ua5Alg)_@H&8ScF1y zTF%iS8lKolOLApvsvh6txW#bFI;!#q=~wK)Qki$QJU^3%QhhM>xJbq|^re)cj;k5h z_)gyUoxai~{hP@kc9_(L2@b|=nv{NvV|VjgD4hEm6uW9A$;0`Usw@5O^0*8pWMvI? zi0S;1k`WWjF!*PL?z2CVqs^NF!K*M#`CRkehCzGC1V7XH-7&r|xs~QZtF!?nleFQ{m$HJU0^& z-{5PkoO`w0dmRb?)jZCRdV(LOGe*ls#zq&m<2}N{smBNBoYWb)h60I+DI;kS2ke-U zgdq^Sfu9rr9*M$F9KC8Si4Y*d+z5=ihB>5;>d`I;KClB>3*xBFG$CDlNQ;t zp;e?uP@XMvC4yN~loOQj?{f7Fro607i@*@vG3P2SF0Pu*9e<~E3~5JG+o)e2``3M3$C4Kw|KU#NnM*Txx&=SB7n?L8Sv^k(vFgN4LX} zihvQF#7P$GfhIRFJ}vFz{prT*-@Kt(5QC{AD)6QVO~L=WthHR{Dj7AtecSW*XVJ)f zz=8l({@*<(!I6Xa<+y$$&JNuwf9m zpr4)z07kXo>IASPkS761%?hMsg0g(X$VES(aumZO;qU&e*IaX7zWjLj?&Zrx z7~BLV*s#jF`;M;M%c;Qo6U$o`JDrb2+nNT4hbwRs6#&FiV?z>~0l@tv6^@fQPleF| z-u1h&^E+)o=k;EhegJU6;?Nz|BLf0s#^8q(HX~3~IpF4q$`g z${p4%)WZt^CmVAqs3-jXorU&v0_m3**^EjYyZ`DH((RP^_`%Pg7X$oY+&6?1NJ1Ah zk%xm|=lU1T9~sG+ZXYG5#8F{f3L!8tF#&S}ylU!fWP72&VF88u)UsCyXVcDn6b!`% zxCSEDE(7y0OU(9D{c017ELpk8U3^3exac9d0t(r-t6bN8Fx@4ilg+Q5kHKItreMVH z&wjX=7m@$`Ie5?S7T?%C_w45hl}{`kg#IP3UV)ch)CtcIUsMA=>WXpIOF-{Bh}!`% zfswKCaBE68V*M`A3uQqf-x5qRqYWWi4{lXQp5612gAwOhSTZv*?#UJKI{|!&e&J7` z?7&xfv4IL4cq76d9DsTkL}3z4lmNGW{NzajI=1<0x&|PU-v1RB6BA?Vr(KN!g_nny z*B9UOfMf#InB_D1AZ{cgC^ua6f7_n_+YbHzeLkiURHKh&VtRW7T2F);MoYO&$s*)` E05jb<1ONa4 literal 0 HcmV?d00001 diff --git a/Experimentos/inicializacion-pesos-red-neuronal/img_sintetico_nodos_aleatorior_R_R/plot_95.png b/Experimentos/inicializacion-pesos-red-neuronal/img_sintetico_nodos_aleatorior_R_R/plot_95.png new file mode 100644 index 0000000000000000000000000000000000000000..a7ccd3465c369b39ac2aaf09843afd5935ff9614 GIT binary patch literal 25809 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 literal 0 HcmV?d00001 diff --git a/Experimentos/inicializacion-pesos-red-neuronal/img_sintetico_nodos_aleatorior_R_R/plot_96.png b/Experimentos/inicializacion-pesos-red-neuronal/img_sintetico_nodos_aleatorior_R_R/plot_96.png new file mode 100644 index 0000000000000000000000000000000000000000..6c060281c05946b5b852be8fd5761fd19566a148 GIT binary patch literal 24036 zcmZsDby$>N(Dtf;E4e5k4N6HXl9DTkgp`zYhag?j!U7^GNSB0wv?5(fO1FTNNQ)8z z5)$vMzxVzA`c|(Cc&^>^oHJ+6%zfW8&xWZg%MsyI<0B9VBKi9=>IlSn9R%WB4Dvi& zInfRqfFF3KigGfDGwi?Djrnm11S3LTMq0x&?dOb#&y~Hii(3OT76NzH@?7s`g{%K5 z|Jj(x$e}0wDl1SOMcVXSGKNXdf;aiv^Y@92Pu>lxEA+7Eyc!lC$+by!+W)(7yTdgm zAulm^bEP$u#H(?-F;#!VEpxzkgE)sB{~X*tlDyyb9AY9PRmh=KxAMn;2B%QZ#x5$nK#Yuxi$B7by0~pFE;u9Mc=)^(a;F3ANo=hnTqdBQCA@=Hd0dM(=%h4-XYZ#iC9DVj4k0CfCi`#uO{PT4xsY zYA1t#ai=ED@#)`9WELz`&vc$*xYorAqpGY-JQA!UaCGO51_#w6Zyz5YqH|CSb=F<}{G4=J=(rKD;NY;iz0m3H?X9h$A?CUDZMxQl!Ds7Jh1GyoiEg`VB;oU@ zsEnIt9q%oAz^-Ou2G?Hht`1#iXD|4~A>#C1#? zrLqJb1L`YRT=srw^758>>6=+wTg%Ibsj?S$TAVi~lDVdqDdEeZ((Js1FCS}A@BZW< zmcv#?+7p%scY75d&uviWI+QJICpfiL6dM~$&Z%X6n;NgD0{!gSGwm|NC!YoKa&s9m z_o8UKjPb8wh#4gGms}eS87L?y$jQg*+}4i_7RHVI4VnpXJ}TU{{qpmBdpPSAGgDI@ zgSy4#WkKVQh z9E^;w;imdLNUSTkpa-HIEN?r+{169^IB6_ijuCB0*`AUU{%d80EnWd`55CGrxIWwH9iN{L>w?!Ue*ULohB`VrEB)zC$C7Lw z4<9}xARy4Ivg=ye$;r;XeEBl_ixlv!lc_{rqgim+_HarvSpnNG#V{vgV&af-Fh%a0 zH%yrK@884tt6_eAez%f~KYZ8)w~LC3l8}%CiZ*ei#5sL@xnbSgua=z_U)h`-{2DK$>21!3!a`O1Z#Fg*gFO!jtmKxk4 zY+W^)srOJR8cX>QO^Sv)KYjXiAX8FBUVd#PKU$wh==8}G0=_@HYa_6PZ{LjRqpifm zMMaPP{F<^8thXI6b-kz^-`(9^s$ctivFi$9D;kZ4ZSF8l_N%O@s4z1#8yOzn^=iz_ zG%7P}d_0BFe5(;nFMc^p=G?h+tj+2i@i%VV=wJxFv@pOaDR~Bt{^-#oIA4MdU5AH< zi980~pFg9JIO%shhzSUa8e)F`{>^XIpPQFgS5vdQIXBnd-k$c}sL3ZeE^c9SlQ&*r z;rn+}Q`7sgKPTRqbw<$@rAdm2h_JHe6%-W6$Fcez?K-)+37kHesp?2dN`jrS8OaN4 zH^szg6`d?ZOVW#Zs?IdAu&~I!)d&G+n*7PBUCPYDvhCRbaiq$6s3li7U73=G=I>%x zTv{4!t^VvA#l(*vrCeqyuI$oxjgM>dB+k{kuyJs_VD17Vjie9k*^ieRAhT{f%+r`v zP5xvzU>8*De7*<@syYu6$~5UphYA2^oh-Q}J8NX?Inva99Lgx9qn5CAmTS zai#9Hm(Sb34-c!q$W~BP+9>I6Ll@S`>N>{yRhqBOvhId*kl`<|fOmyTFy_E!`u_cs>=Ly#q9Q4aq!aUW>`l7aQFK+(ufecPD1)Dq zvuE+|=Y?&EK4xMnB~={^{>MX}Z+6E81qHv%&CPjo8yXtIrt%vagHxl>LiW>q5&<1f z(~ESczpCfVZ&4kU4duwCrV-y>p=CPxHCyk&+sJ>@bEi)za{vAw`i=U~MV#HN00C<* z=^D3nEsScl{Y-E2;o;7T`dhNrayZB=tgNhTY`lgIS38|9UJT96Wp1@|MR|F9@2`(< z_9pYcd-pEW|5PNzgr1%rLfM0q+mnsn9{T#z&n{eC6@;itNmTYmsGjvf3JxA#hNS-~ zT%qLAM-mg?I}`U#OG=smzh&?{nD2C7u0@KDV|`F}5dHI~ zU7E?r+K=8_!Pv?nc9jEzzw!+Nj?wHK@N=UANqu9JEkVU+)b;%x&|j zmev=Ts$9g?XDHn!9}$ClmX@rVJqFQbWo6OP0}y5*4n@)3xwk1A*{b(OJs5*w#2oFe zVRL7`O6EN|IfsdIlg}|sAy1V8%d@is?Q00BZZV6Bin6d+Ks?wb{=6lTY9tlUad93Z z1Swh^rWh6FxBa~xRy8v-BQ7R3=pVEN>GNuc$elY5vkiy+>36Cf=At4Zn2{|bBNgT4 zgM4~2GHu{{tA61Spi6Y#q1nltYxNhzUy1}-SoWm^qrNtJS8vNS8gBmj)o1$d)~#EG z-b{2D*d`}ON1bxxPqi*9rG|~vbaW3+u4sJv^hqv?7J|Yl*!*53bufxr*zxuJ5-u*T zy}dm$3;aS7Pyj#z#YCPZ=i2`MeoMTpvN8uLsgID_78VvrAk*c_U%?DQ$RVn@5#J3N z#q{c*{yUrcwa!bBZ(!*=J3DugzrI%X@adIQ-Q(rum6U8Q(W|~ED+`C0OHxu&KtS`_ zOXI78{-?)nZEcXec$*H+cRERAI{5rVU&P)IBDZq7C^;o%wMi?UL}s+f1Pnk}@e2;t z;^&v4Bn(XuNFV|bg|>|3J>cgVIA+}4+k5h*coN+5J4};7V)}#4Lrl!}xlFAhaRu$D( zX(6+Cn~#V2f@gWwT3yWIb6n!Awrs?bWZ9MJC<9mwHIiK^I9%=Y_|aksce(jLr+cHPNIdajZ^TDntEeY29N=j{fy%2}Yg&=o3U}8-C zkCqaRu3_?&l1;@10&xjeEmE#vN=r*+Wo1Lcu*U*Pbd~QTU$9|tS7v5H0xJrca@)rA zVAZx#;J2q(+)z7YjC;tw6oDSk?=8Uuq-co2x0SMj%3W6aJN{DCNxoh-NqAf-%E%bd zXGz0=m&|}sR#pc03<=wBEHcB;1l@TLz zZHRLvm;DDM&8s0pdLf_kGyS@koCh+*^|Z7s#ZKZ>ByLKWjY9;(3~tT0u9?X%guQ+H zmUZ0=LZ-O5IFY26r)R_77d`68kl6~2&{>;~j*b+iOmT1br3#ODA_j?u?!;8H;aqtn zlNWIIeo`L zTb~{ucC7H@5z}6!ph$?1mu28dG71n;&JYVjr9krCo}7j-klN7YI_2B;oRl>`!Kyzk z3?&N8hN!4u$`W<;>Qz!w(koZuVq%Pw?i<;N0@ToM(&wTWsidM6b_~cah?YE^Sj4c1 z)A)XPcKY=0YU`sQ6^X;PV-hEbUmcVW_SQx&b~-H#EPZ@-;cAHQb~|N98NeOtTjuvI zEtg@Z`}AMFtDf_lIvB;1kKJu*N6mjwkvw_TI-e%tTi4Jq?RnJjbSGk;+qL>h-&AZ+ z(A{RglMlKj+ZWB70Oe3+9s=)TOYIXh%#mW8unuu(I?Sun9Hew42yTJcH=czico%gg zK0(gEZ}jmV=SpvPHwOoYv%9-s6gws+Cnu-6+CxF18w)P>@35}4t~OD}F+43hfeIx25j*hzP=koZ4<) zp-u?1k|(<(nSMt$V}+W##?Juy{n$GKq(+q)=mm%pKtI4a!zLejhQNk?1>5$;g^zr_ z0AnCY>_!9hg^*(YPN%YtBI8t;BRbs%&@Py2bFNv1VKwPtKyqwcoSJ5;oTq0^mcesW zoy!U_nw_72Wbri-mfk^Tv_H5hDG6|E3?jv6c=hz~D+%o&<|ZJ^mKilS0mhA_5xRy& z@xVzI*4OoxP*1M_mSF)M@F!Ddy1D@$~uw`OtnYYcd0hvb2Y9)R{1av@y#+ekepQ-^#G| z>5W2V?|d}B=Bp#8Syy7aR5|#Nu&Bo8@Rqn~Hn51+5Tcv`MRA`4M>wutjkAlDuG7?T z!d8KOYiVf#Hh|f2#dYa$Y01jAYa97$9xg4%+-HU~APEzMM7O%l3i-d&DNVvfUQtOY z;`wuSZtlqE&#&ILj!|N5brQRC$NS`H&rQ#!Wb4o;?uKv_&Fs@UkI$2nwOVFls}EYt zcVC;l==!7Ta;{R>Y>8ylJm>}o2O0@T0+4!g?~Ti0go&@o$jDq*2bll_gEX+&^tV)> zC!fUh+V$&hq6Q`Scaf3Q0^MU{ZU9&T(l72Df*LXYxN;<4MTn|PpQSb6aS$*E%wRIV z6-To^Yupe~)9>HT>B=h`8-`EmDJd!WgUXi&f_Z@YnZkC(8*#>U{is??Ic^l#)T5X5 z)8DDmcq;V%@mS&K&-dSIhytoLGBT>`TnA7Dgs`NQP48)B!SENw*jy2BHHvTxvG-k4 z`6EMj@$;0^bwhu1<-fyWn&G6Qqbt!W;`E>BSdF|PBvk#oZ1wteuZD+>1=II(^RL!9 zQgZ9&4q5XUHdy=Az+u?{Z6&GV7}BnVr6rK)(SsK+feULl1+@795)*|T09Ff>7ij+u zgjN7h)ca@0oBn5UfNq9AAb_L`wmw=w&O}9P3Q8J@b;@AOG`^O zm0weMSNK>jhdH~rxHvmU{QVMxTXk_kAiGcy9Y++B!F}sitVFYBdS9wgeqNs6(ON#7 z7y(0#CHGtrVcPx=HX}`k%c;P{9whOZ0BE)oOx@u3XNh}Rw3=C(0@38p>QGLd_O_=O zMRrb=wCJcZUN-Wbt|a`)12j^=|7Lo3_dadnG6w~2&T3QNG?)6>!bOhnd~f!*zD zd;G)0!;9+C9Z8UW;{BIl2Z6i?1qBt=y9eI@*T3VsilU`WOG|42tnC$JZXuc;)oxl_ zTPq?ey1cTI|K`n8Z*LmERCpyMbSyddO%nIY>=RJsILMi=*3^6Nm%`ze&ySmb+^n6g zVwV&VTI$nzUG#FV*zzx6VEOqg4$UVCF!fBX+mn~T+?1_+aq%feE*2Xb8^|o+JzlvC zeKq?NKD5Ma!otEgZmez0)B_UZ-_Zoq{4U~+Ew5#`09G#ti@9rw8sQ4crIQ1EAjZadi-nO}x*t7Hd zcj0vPmS==k_bMP90WtxG`trJ5O7W{~_Js;l{9x0WIycKN`pIQwytk-@o}q@;(2GBO_z?{?{W}Bgw6k{W%&Tfz#ui0a!(kXVtk2 zc)&+S3{2uF(H?DCg@P9v4bPg-PRjb1Kpi2XzRfNwnnJ%}-Orc&Ln%Xys&gBB-^$!P z>G%b+e5<_g5z$Tip=+2gC3;rFx4h|GFLq?hhI88>TI~ApJU0v zw-f=}+thu}Nw0?xQoRR9*jX7kgJ55zRq}Yebmq=xgW2k9qxa@v`aD><({dn#j)sPY zfdPo%@mP^IK``12$Hmvl#bte}dNb?_8yqAb$hHt2v@|rhbjm+EKF+cl$Z-7xq3eOX z{NY-DW}U~T{ppa9FVVq81|P@cgY8$ZUI9D=)RO=EdDh^dDo>*K!PY!*6$jW42$2Gr zc&}3f6ce~^@bJ*zaW9tF=5HJZeKQ?IGZvO5fMfuemI!2(F}*>)!bsBCL<&Hiq@R4{P>>T7={Aq#`Kgr0nr z@lPHH;vS}Fh6xUC{JT*PiV~31Mu36_KflD79zJCNARS~7h#c{EIQrzGe<&#_?e6dAcOH#Du(n=> zT?UK;c}2y@J0&T}^T+607R7{vgM+L0@cMv50tkaVm?>bZ1p*$R8guhSplKYLH6<0e z1QeLi&@*tsMz6hWUZIGvFcDyUx$<$kRdzN>zXYo9dCmO>M;%D!UjfH*a&iK6s|N}# z-5>5<*%#Z}+n}Zc2X}`94ijfpN-`ERoGApoMjPCWPIRR+s!&tKakucLESyc7h% zFC8xQqOPAk+4PpuEh4B=q~m!RxVX6mYQ@2>;;XFT+nPz5g}+77FS4=c#z%qo+O_X6 zP(dMQHHT5!;>t>>Nz(Q!C@X-hm(nH$A0p(}XsS?>mVPGB`$mbC|54&0u7=iOpjV~t z6KA$pRQ#65b7v4n3OiWBfWRg$C+4=o;(!FO=jv$-uY;w6k2#s3< zE^hj6!c)P?X}c}#$^)LRZ`+<&WW8+%p|51;%Y8KsH2S>nI$=;i03wc;*VoR(hx?YS z+HN`H!ulZSqmd-xmjZR_TyLCgy$9$>ZOMNo+5!PHS!sU@IKQVr!=TUZ>p1`_<2}Pa zDDMe$vyDQc?EnnCvf?64>+gRC^irE%I%j+xhGP)(d_BGnGW8^6k2tfl;^N}>?{BH7 zs4O@HtH15->51!E>bSspKi22;SR}OdCSj^!jpKZGJSPBYG5hHnc)=<7E<6kIvYYMF z{aD}>%RoMnf!2_`RaIkjOJKH(gg_qN{=K_%21w(s8);KhlcpdSB=NNwulx7!12KbW)|1G4 z=p*6lAM*pY8`S)o+FH$1;o;$75Q?ClLkg1h8%4@=<;0AP4UnQINXf{_hsGO|^tn?q zGD^oDb26|(E^lvZV<*F})u*SWwG$gYfp{dE-oHrijm!dl0%&95*kcuy0Z7295oe`O z&UFB;*Wie+uCA6}(E;&VU!OL$Zv!GyI0g5M@Nkg)0c|Mte~MwIVqnOGUyV#RS5~wS zk76MH9UOSZD~y4Kgl0X17@tGLd^c&=O2t~KoBr}8Q@jFav{s2y+4$ds11N6fK`wI% zC>wkHK!W!Q7)r=tHn;xT^z<}Tx;W?bRda@pA+iDOb*^myOmHiii=V#&Xx-FQeFy>m z+LQR%+{pZq#5!&I>7?{@0E+3Ushni^P@eh<2I{_WLZoNr=;#RbioQ8&8@H+IRo6No zVOySJ3nOtr-Z?mafH9y>0H_gUrQqOT0MI-GLozWiFu34d6)L|+jfvnVM(5d{d;JCEH$nHG6PK>A{+z0gUeiT*8bn%*vLn9j z#mC3P!T^c-{h729j)I!Yijp>tlz0Fm4k8H~7ecabp8cIW<8oR!rLR_`ETjjuNG+ZB3BW(?j+$i#rKL zY$KHjL=xmI7Z6#gEnjaMwwX@OZbV5xu1pzN;Wuda$HB!Fuo-TL)xmy zLmR7dkOn44^iBb?1{egXB#Ec3RFy2) zLrWIrY2rzxxQLH@vCR3(>2;3t=sbdR6fjC25C%Q#`6`bn6cfgYPG&~#mA>$2SM0Lw zG9KVDq3=&T@jMI?HrP;vPrzEH>;#Z!_GB5M_poLkH!T8Ca@n26@TId{>Pg@lc1tGs zXo%4f>x@4|>K3Q{{`**~oiKJj&rMQRNIp=hB=dmP0!rThVr-kBRVx!BxB7F_0PHzB z1BY{DWF)!t`xt~VbzV0LN=nJUya2+E!b|v58=?l2UauRE?HO^>vpJ?#Th>t^5C!2x zG=c|*hflq9|IWM@beN^3r$0S%gL;l5Ac@^(O{f~Y=^hyHaCG$ib$A&t@sQLM5);vWG?2iCt%Z-#AV51T z!bN6*aMBEf46L#~S+N4Vugsu+d3}AVNShbbin~E}0PP^zkdTmUjujp{Bc*m0sxV4p|i zH4G|5K17*Yv?hV_E0x*12(u@Uj&g@U~N z{LW!BR1E4jo4n6XPe6{g=t*EXB$n&1n{wcG>VMKOD>Cf2UDAI7;01wF`?K zZRDR4(<7MMsz2}~F=62YsJiY(LqeFGoCMH@l}oCth0xYe+JuFcI?sccox_jkM+LnRQ0jt8Xi{qGUtr9m$DLZG6}h?QJqg_LD^OB2m6Af7 zY>tkOf}4Z>mA?$z@b?nBs)&-eAn5n+n_b_!l*S=y`xD^fgT4VB9B;PUpnyZA>jr1c z#>Qrum;270DRUdhY9Ka35Md|#vFEkWuYT982!IhlXnq_=AD?4jVugA=P*cMrp+5%3 zbqxd3v5n=E4oBLuw87P8mEh@0TWt_zi%p7)PjDcniaDD0SMvuOT)d)g1!)z5z@T)Y z8wNmDFxmtJo8LP-AU~eAl1O61NLMTil=*-he0^^berU#uRZSuBbLrQV!|s6$1}gt- ztxGF)R*z1!{H~d?sk1kF6~&`UVD-x+Q?} zvN)ZgRD~b>9USLYvK^o$*A-CQhzJRDQ!SX~U$lP*Z}ja$g*VQij-j*4 zfe0g+USx~9|FoWdt2l1MZdf)h1WwA%z8deK214l5r-!gns~&6dre z2CHc~9vVQx6||ce1nx3!M5d{haMI_k%usAx|F_|E__5+!4eF!rXClx>F=1Ebs&j1Rd0f3(hp?R?fqlbB*QM zf5{hdhY%fMERXj<{g_zD-~xh=6(m;BYQTjQ-VF2I6cE^huv#Rx133e-i@}s;v3@Ox zW;>OII7p^?LNq4k?m7~4<;R`zB*@Z(_o2cf25KY-4ZHEnAAp5%@bXJKeQ$#h__+QB zwmg1(Cn}J7VvRA_-@a~nu#j^a5Z&NM_7^Xrqb0rn6n8~xK&O%m2(+!ypeiOOCpR_a zdE}`TjX|3SXfYkt`dz)fqw9Mh-dY?>aQ*3&(8D}$T1!b)u^F|&;)mNj)RB3R@kG;0 zK?Yjrj21c_gY2bOefsyA6Yy#Wa7!p*&w4II9v}O(+QNaLCnLKJlm>{`(X1s$JoF10 zgF*qh^zm%N)4uADcy7k|+-M96J!~@KEY!DBy&1GqRP*T^;-kHq#^ekQ(FYzv7v$f8 znKvS|%64{K(kQHwyD@76EhW3bzf4R_z|A0$rrxr^M_Yr04cDU?BrPi@*_6|gpl!{^ zM=Y_Y@#zlhOwDwYuQw2W5GSd>@!E?06hS^J&49BLuN@^HqGSRXMyfUIexvBTS8FlB zbsbh|>!{V$)tH!=@^U_m>iU-wI0sTHXM5vDcieu+%#B4bceS<29K9a`_5B#sLO4SB z!RK``d;J+f5RB=CnO3HfTZBSBJ{U(>i}3|62_F*V6%|0X4BIXdUJI3E#6Wi*IX>>m zF)L>91vw{d)r%L@l77c$Cv#_qM@NakiyZx{|@l9KLA#`4|1jYX3L6kL26aAD8LR>_HMOylkXv~#xhR=x%v6?CnTUJb4`ul z9?%IV4Ka=!znw(#_@mvDdzZajB=tA3CeOj#?CUh&j=aE>ANlMcQssGG3cWO6Q+T(8Wa~H$wEi9Y=nN2K4pfOuN?K z3`n(a79@;|On>O?#rsyB&j8!axjrlmiL$Cb`tDT5mIn3;E43o(8ix4-+bhWzMV{*G zG)IsK%FQC#kvB_&T-zePFX*v1Mq#rlLMQwl8DQ4XFQk~>M{XzD|6yuwYHb)GH^-8L zmu`r1`4$#HBZ>xBLrN;rQjpg}$j|C#oL*?oJ-dW3Zo=Adsw#4gBLG)cPVUYfy&uZS zkvxFOvn3Xso6;ZoNhVN^KEvLvY#mCnk02fC>+8Gm$1sPXTDI?vpZg=aI@NsBpuHK| z@t{h{{b8%)D&}f9H{FTJ_PYnAeR^hg#3M@xgkg9^#SYXvby^9jBk`Ep=07GjQc#ci z(onB4T`rTQaUZel?veXP01&OzHvg@l(Ed2D$G7WWSW6o942nVZ$oh7WGt71Wzf0iQ zKLqv5)L+fmyk>iJ0ZfIC6h)FMf9~kJA#r&9kzu#%4OoBDPz{`cC~X2m}SWCCga@OyJ{#knX&wL*d1cq`+X=y%Zr@pPxfR&&ipP*-uKJW9=b89g>hsHp{ zFw`+{%^3#0%}#(f4|$UW#I!m$+oMj1oqAR1Ro_i><|0&%2#Q%6Z)Ud32^@Sk= zlhdoHB*WbiYK00(cv0VvSCPSXD7Y+<&-9`(fe#D}xPt>9OY z0CnUTG4j1Kv;6x>JBp&461Z>rjrohX>!ghtex>4JX*od^l8BC!Om?QmsTEoroYxEG zAWGJpGQD_s=byt!-7Ww2(h~vzRCwN~+W@{%R_=#7xOuJH7;jfWvdEm@M{mb)%888s zj!got9tPwv8weh$sZ*fUY|J%p0-VIYJ*_h_`s~B%mX~^o`9EVPSbU-|@x;DrmJ%G) zrk6|TT4vcLP8)q%R{n*(kAdF|bH-u`)ARZ~brZJOMuNc%<&4Od$0l}BKhqD}n|;c7 zZMjzbmj~-pIEyK+`|6L0YVDuqRi)rLH+MeR^ zHQ^a~17jBWqcCM1?mL(FXf-{*>EY~i09&rVAZ<;dHgJ` zfPM2hX`MUY&uyA=xpz&TC{Y3)e(eYEyd2Uscha!?rTxA4O{GNaReHEe&GSlF*-+od zHK&v@^`D6wc#ti1-wr;I{qd`C+!T7H+~dj(GczQ>F`)~qi)J=2eGxZ>#Sw^)w$B)g zISJ#MPizhsaP~@i{u_3K5xGvhAS$eUntd?-1}fD1;Q!jaY?$u*N0UbZN(Kkok*EglmEmeU*CMJ+7KvRLh} zjXcCk9|);mumF;ThgT+RYJcRc?{#1M?@k0L%w9*9rnb9hbl?+3_6H*W?!-rlW8(XL z&nNEJ#>4Uz8c#78VFDl7;uUN%?Bw#&Q2Th@Jx>uUh)}@A5K^wgSMB7{S2V``E&lC) z8J@JxnIrw2O~-h5QD@KP94z5OeB_iu>EbXsxuzXi3=I*17V_`1)B{E&cksfb{^_5F zK!YCF!{qrzBzWtdy^M@mS@b!9SAWnB4t1L7Tsy_;#VR(2Vy# zKR63uv}3H1`nfwh{Qcn_PW27Gf9~NgjS{3yD9T@W#f$%^WYkjJ>fh@8gBa~p_0Lq- z3X*Z}B>YhPX7d0nLC%Pzp>BRa;uq?7IMu}5^X)qtuF~T$U1&R*TduTAt!9bU;QY5@ z>N`lZ<^2$)`AX}!YB#27S3HQ^xYD1mcE#M#Z~k_?$pok`KputZ{lvHSnMAlr`rn9S zO4<a#p!^?J~|Y_hJBM$$^n|N%TI4AzU`To2DQ)_iv zONxfPvg9YEotoT@%@@X@jL0Ve<$sY~F>jyhQEG`bc4AMNu>)Mb&}_ilDgP3;Ub|pZ z-weAu<(w#tV9-=U<&GRDdGm&<;bAiNsD6ZF{q-^ckRG=6v1(q*v)|(2Cq3Z8-Uw-H zGh|rKPVv~+2rFD~Emd72Y$gxr15XndHd?*CLqo{+yV_SiA@LUIvWN*mBsvxIZsK>? zOWJ|ur!>oJ;X6q@7eO)v+xE5ab(QZQ{PJ3|Ps{I9HmjqCDQTiGRS!nJi_JfeHuMp6 zZ_FD1o2fik9s!~(d@k?eRC|T-zVm}4v#!_j$j~4fxOvX5=z9(M!g!5j@EZBb7aB#M zZ;^K_gnLC4&bdjWzFu&D=%1(}M6scl-26-N5QAGI)$1yYK&T2RJd`d}{5*X5{Rf#c z^_a&jCl2Z*%!+4+9&ZCjUoH6D!=};~UpqLr5*4Z3J?4LMp_|dVf6R=&zHF5JVbw;J`fJOKH?v91Bv!- zCD>TpRf`Ku@A*JAz}!05i9C3I4l$O^(Y?zOoLi^^D`t`PvLJn{z8Ww4^?Ts3Gx;NR z8Lfgf9tAXG3$AGzZwKx*eMS=@r;f-x)cKn&m-5b1L<1Xh=}haN*7ncoAB?0Na}zAa zH8Zw3=W(7#@U_<5gsJ^d#FwvBH&Q>?fA#&mLfM;Cr<#eEF`u1)AGj=gR)4&S{`U11 zs)y!%cBJg>S@R~r@A3^~FaYs?euw&toDr9r9$Q|`Vv?<;@qE!USs zvRIB_!#5x4aB5T)o-(aX7i{198N3qumm4d^~ zF}=yCF67%QObHb;4USnDRF6{@8KuIv#pfd5#NWF#y#CYgGEVVR*Km8W)V0?xjTbxb zfVa){oZ&lNvFP+`na6A^FkY_0GXfc`4TOhVRfHv;VRV%5r#ZfhKy@XR&Oo;ODhbIZ zQALp5Zz{Rs=?Zs4=)0J&T1FFl=*BQe;pm_D@25My zON$YHub<+4LHEiv5hk}5S#|5NN7N0?k>@*>@5}Wq;<~Ymm8Z;A<$De?N3>hku_Jzx z%C3>)*0s?3N>`P#?`MAO86#gZy{h~N zT?UtG2|8Odk!v!a4KBUq?_c0IxLuHf8>CvIg{}I)gBw^m4eI4GGMJ?=xV;#Hwy1~A zTqo;3vkAE0n;b6HM@n7oa8*O-2q+W{k(;j*+;Tg7R2OJx;Fnj*sAm)t31@OTp2dS@ zv6Qw90j!5hP6)kxeui7HGf)~TmMu_zgGO5!Sy>`FQ4mV=qoTAt?mp{~AABb{-mE$Q z%%Nv zoj$85ykBmEpH*Kqv8$x+t0(?dPmC+==^0#ZWR7o#g)A+8a<^~U-dd@SVoXaZH|H62 zGM(ch$E>Zby?OJdMDI*o>K$-1pyw32lm*w*Q2YL=loM5sXVn&6?}pX*=V|fE^>Phi z&_3mnrKVBK=E0>rTbE&{i|2aU8IBvy5(Jc5o#9Iytc}lZ7j-|aJG$~(g!$BU-w-c|47l&i(d$i zp{Z!qjx{)toYR3pW}j z2EoWRw4KtzWG~m)r9o^{`5=hms|-*Z0I6AfruS+HJS8$IX(xpHB<1dXw(;O86k6nL zzv<`;3uL_4vsa@&pDT!c6R65X0i|yrka5Ulfx{Rycy7Zp994sLQof()FkpJRIlaQV zQ`^~u``7{)=lRzXs$>!F=LE{X*~~*@!%VG9Cv++Tx5hRdWyvCo@jEMOA;Hq2MIrrZ zJ8vM~jNCFH1qL63JJ9Fp<<-&FR-nNFPjzT#6ybcqWy8$K34e%UKVABprpfSmHm#2+ z;LfY_Q?g7r+-Ozqa1wPC{=C!0suwZBq7Y3pd@8oKL`(e(Tn}9J*-hZ!KPIWWCms3i z1=SXQ!#8F7ms7}hW`DZZ-V9lxWN%_`Jj#YdZ#}*m%0?wR24M8f&6VF(_kK7JCzpa+ z@Pi14iEn%^$QoV0XrE%_`7^LK%VU=@ ziNU<~LSbIhJ6>opkeq69pnG|?kO&B672hQZ7I1w~0RJ(LH1fwKWn>+pv%!a;rJpbB z-K)M=8}JpAA&jpuBBgy>p89~)50Oqq^Oc4F4)mP~`pT1z$eu%Bakuozb>^tyn+&zw zU!#y({b!9vuC6&v!kKH?QrGbea$es{v6DbLq2_l6a1Tr4n+yH;$qS{B=uudW`GX2R}>wXNTK3`ivCVw`|*2rFv`} zso?)94#+<}k0{2pGqmCaoa+Z@6HV?)S6t`E;j!RTYQ$IXYvkTjr8JHUHE_FI$g|!& zj$I{6HS$X8mBi8ASJ|bdNkI>qmi8{KTxvV%2(OD)?KI#Psi@u^e*)?sQgpZd@LHbY z1$TU`kJvevH5^Jj(lLotX&+gCgroLE#_Cn}{OrV8B^&j7=AvLHIvfMM`FU|QW!U`#xW2KeLYQ>$Z13MtdAHP-?U=TpTRPgda74pe=3tz*|jhO~jbem-z z**eB#I>6Chs-`Jd)puR}^iLTwOJ?vXW3w+qM4w5WuyOtC2gt|gxm)m-csslVKJDjz z9QkYb3`C{I&N|*nPAbt#uEVmQOL1h)zlO=p`3)$`9}Hf@5eTF(xtmH8sB(PwObr#) zO1Tq%YQqRQL(!~%$#4H=eOOs}4`Zm70m}Z(O4vDs;6+^wQAq{C^5?txBUx%X1dvT) zvmVYQZcw^Y<-U-JtF$xis=bg~m;`Hy#IA+(1CokQ=;~aI4DnuIPR!R&I(CrWh)b@2 z;LR+^9x(UckpPMgH?iOOQl5GNF-r9_oQki5Qbp}`eef608@UgRg`Tj|-06JMMPF)k ze`tHtr78XG(E_C>HD3Y62c&f5YuV2T!6*r2n-ELfoonA@v}fkUo|R8InzWU_$lo8W zE_@uv%Z0umYwj$09$(hA@|tN?$K|f_ReOj+P_ef1zeBCP!FqGuUiI;h=7|Y zj1u)~Sl=1JN%8~P8tLW-7d}nU8alGUf0AjM&dQ+N3h>)MO(@o+oY`xk3YNar(f@7r7Q9jc!d7)u#KF?x58zS;3o&E~!2IX+r zI>U>dBHs>X#7AN|Mp^`d?iu!b0f?ngw;~4656^Fv>~{&!WvP7@^Qw7Uv+3#UWcbL` z)n+$2JM+usTUMq1?47(x>kRk{wsu$a@5A|#{@ft)$#a6Yj^zpRrv8eh0P<}G)|IN~ zpEFn1uBBLYS%j&9>J>eY1D~Ws^=}hc)_X~ZralSyFMljQMV8OfAIy?DyYmq;R7wad z3thoAz+=L=;y!{;lfT`MPmESeajw!vjPoYZp!#jT61rD@A%Lub3>@U>CF)=^2nr?p zib%-0(=(Jl*F=K8U&cO|J6qfx$Q8$mRNn6u(wp=UfR+|>mI@K5w6qm-T8Zh5kdTz*On;E7gJ)f z+`)u-^x9k^+clYlB7wJE_mLHdVb*ctSYw{_U_gANO(Rz6j$i;0^``1w{6;4vcbi?F^groD& zHTKIUgX8B5aiy(gzcB^7N5=?XzARUFk(^1UP!rU%Cr1mvU)}lIBj<)Y3Bb0>%0+o( z*=}GtE${SdXs6vL_w&k^|J|GPh$(oAAvS!TDLC>%KjrX+2Wt#(U)*}Kp=jWq!g}&f zbYA62$CWfTV{gF~Pwam)?<&T&Tb2ZPA9-NviM33gbNojGt&YSpCJRAMbgNbbBZ*dw z>ScZM<4rz=eV&EK3%P;|mpYc;&-mVdOYmhh^Vj!J&VLwl`yK!E5Dqfq2s~r_z$2~B zB@+@QaeXe>ivL_16h+Htd{zI>?&A2GlnVZ>1 z&Nki7+r}b7?T2Vff@)Dd9XzbV{1_y;fnmgnCv~PoZ)EQgl7*c%5e5z0xE&_f{iLi5 zEPgR+uDMHPpvBSR1RgcNdT;JZsH3Y{y_X3sPenWb3)4D;@fi3J@kvYz&EzP}Rt$QJ z<7)VW{Pb-Z;B4gPYwt%sO!AIi8sEd61Zz)Ae|Fxn6sfJCotdyV)nbMKJUnUZ$kkA?JPs!#&-+XTBv(I~0^Cm%_xyCGoa?IF zc+IGcommmz4UW|ZIg79%bNMX6eHOqjI#J_EM(~*5t*)gZD{L3a`6{A;0y!|8O%htp6Kf-_SwLdjaei2iP zQnyO@*&KQQt;>SM#Y=WHI9c&255E7#n=_k3yBU--n|^5XlJu`5`hrPZzYe9t~`(_5(@Kahvc zn43>96uafaADq{txwO~G4|CPCv=?7?n>J=kr5-B5n&X3yV$ljkOft9hzu!l))JUP9 zThvGe60l(IhhPN+cv1*it$%hAvdkr%ti2RS?zN?7d?nqRnNEcm523J8bI)91j)i?AFrr7W3OZ}8Ug?Ug{&^LHc z@Y}QtvCerI{l||NUBatMq5^FMv8V|_fFfN6FB?+QWRPlPj|vBi$Z`v1%D8|O=IR0+ zWz3X>OXfD09u+bwDx%QBM!Wm|=ZCO;Pm)Z_SWOAksXNFsy73E?qe0ksQ7Q82AjJFx z#e0wx(AdhS&)yz9oU)Srfg0qkF@^UZ7Bl_XL8H-*c~Gcn4ysvE!F%;124R(eZQPn5 zRijruwo^qWr^LqL#w5059Y^y74ll!kH8{be5J(d{;u9Pa7faS24f97gH1mep$+=WU zo=GCEev~3C>gX7Xkn(wW3tOR^pa-{)t$#0mJn6^e7>-cA0P#?WA9c1QlC0O^N(aJZ zKAfTSwD5a>zfUnp=YZ(Sbv|$q55jr%ESmrd6kFqSpiwgFgy41!zO#zKfM|CHT4w9C z@%MUWY_lb{0#apCPN`LRS50KgM-8r6!Ig7&S92JBF5HIip?Tc|ie1Fpa|aBM%nL75 z!Fa%y^Fsndkvp*sdJBkW?#$1c9=}xeQO>!wn$3KxcS=`$crsC7vzR_7~K!Nt~ z0tY)_WA{#s3SRkup1mVK{F6 zJyJA0+G4Au)C-SLK!+PNatKls{TPFXyP!871c)I?_`(|wM#hiX!H z^ULcYnTRE3q$wek=HXk-F>5s&DXSdw&Mp%aKMp3Df2gykl{%NZvj?*0!9t z{T0yC(vqi=XQ7=jZfV50kw0;<0 zQ-=IcS(m2}y9`a5UQl?=RbPX?9BA}9gzvO@WN#3e5D?5N*y-;nRrIoQtsP5Yy-6B%AtT*oi~tEx=w~$_cci(i=a=P#NfNe}@(`#H_pcGod%)P`XoFj5C~@yT>m#1G9%-Elb^9rU<$Y8g9?gIGi~>wTf>$Z=3$79(#I=jQ%MP`xU?7 z2){e`KRvV)M`w>O^Bc(!>f_=@b!fr(w;q;I54Zc+kG$;O+@#0d9o|?S`~JRU!y^|a zgws%u%|xZNTTjk2sT@y3$FEI&va-pip1A9Vb4$W0B2Y7!yOefm{T3n(DwOdWeigm1q8hUW2s6Hz};D68BegunK;Q2NH{@G+Ji zQS%}v1{3mBDghJ1#G13c#i^NFoPK?Zl{V^Q#pkH9z#bY?L;amVo~kYJ z9ZPDs+`aJI5r;*n34W==`Qb4#tiUV3%KZ!|b( z6>(9Axnma*w$yyFoyXFt%>^K~kvf|d$Xy`9Y|jdDtJ z*AJvM^U>Yie$xa%STH?-A)~g-%v2Aq(c>j(>O{Sl&6%1p{mnlnY9m+FF-L?xUEJF& zffIE_g=i?OKhD1##iH(iftsWtzf<)o>sS5zi;mKJ6;G>Q6Sw#3<`2E!r?JgmBR6j? z7bWA~Ak*mFXDBTT#}hBl_I@Wdj}1fk-gMzrk}1zp_gNm{BoJFMsCkde@`s8IJUHq< zIon79Dl`>p>lTA=VUq5|?q)~oxJK0bvB z_Ztw?XZ@vh`b52fzC`(DTwgdBRi??|6`YXM-OjI5y#gnCe+1ji$8p!qN-*!#(5cm*9B{dD zlKrEK`)a}?j_&jVyM^BGbJEsZS6I5`jP7;w=43qOqH3iXld>K8xWD^u?Z{l68OL$e z_@kw~Xn;~!ZJR2p90EIHFO*Fhu*jp43xw6%3Y2FT4b|9m19salh^% zRrJO_i>b2`cET{@QpG!Y<;-qNJkz04MHbQF81PQcTmb=6N;WM+!5SnX7N&7Rep{JB zJpH^yrw&J2@oC7}^T>=B91N>us^u){%$;9~Oj#*93eLcvx?3=RY|RrA2>?%Y2IS&VtNYYDgjQ`D9&)pdjq9BzI#z9nbHg9c zBbcS|@p;!6=WJ~-x+drkAKR5!dKbIB{hPDp($tN7r)BkXrm~`pDQD zgRA_PZ_P1rKxybyUEq2;;qAf?P5cZATu zn(Ys!Nluop4r;FrNV>M?S#}h^?y_~vnTKf@8(&~mb&<&hN?ucHo4hP zTVBG#L+u^q5vPBswNYl86iV+k)@k`V{kW_#Ps`e=YKxa9pDm#?>`V8$rGP9L6dq=5+#+- z32}ap@b4%8^59&)W^0_{zNw;-hT^&I{&S&MA)G65i920?hV5#H5Vc{EG@Ko4kzPvi)V~}QaAi3 z0|P6SmgWr_Sj$}@U`a%8ou=FbPYS^s=B!;j6eKb<7~kM#{lPL8jX4zuz17w5gJ-23?) z>6Fj3HP0_(?_gh?G_%>c?=YjW89Dp*Y|iv+I-|1qu@2h&51GXf;+8+5VfplXW&X*Or!$2QKUFg4WQK@o z+xjGK7?Qov5Jtm3GCCKEtT>0c7vzSg^QPr!AJoXrOxvjUkaFoq5p9&4Xe6?W4rv^RHU{UkeGvLLHguV=ART$ zsatLAm#$)?h{gBD8LR%TIEcmdt59KrQ)IPa#IKzWYc`pUJU8X%P3!t?u-@=Bzr_{y zYv(rDH_r!~(fVXlGKS`GxwVOU9+<)zBMp*kN&cJXC_0o^fTMB?$)2hASbmTdbN!+| zk&juLhsL${F>?{|L{gOM*)Z)*(OM@~Vp8EA&+VkN#>P8ZCviksei z5_EFX`1xF_hnSNZr66%v(#w*kOpOk=^LkR}&8t_nk9O98c`q@mU9K%_0p0@8=Ohr) z@M=K%G2jjYXglA*6uL*O`Kh+7b*0ZN-BNB-? z9PXu%$>FBjb*2$u3xLH2s%8twnbFa!C{**-=!x=E2NoUC0{cOs*pqwhENi*0EVHMp z7g^~xh4YMfBa;Y17k17P#&gNY6H|AcA68;m9@BVaLNN%IA}lwlc|m@BeN>IgvlwzYf+OcH zUhGXI#rlFFL$Yq(?(XhH%kuQ}$MsqzBP%1L+2!TZ0Y~`>Qv(B!{6Do-Rl=r~?c?JI zpQpfi#CZC2qv7kfPOh%GOcBN7)?#O&b-0MD&m4U*mb8ua55`q5OUDz8Z%+)wqcX4Y z&R*NFrG4voVOagP6W2xc`?vG3_6Mnvy-8tp6`cn(q((I<%~re#QiNvDyu`$`eSZxN zO78Z~lV6y|zl*(10yOl?`1E$64sAd1^MD%#9_@mQ3m6=?Js}`umzI`Nqtvqp0Mpf5 z0P_HlL)6rJ)p7$1e|-JkiNy1E>Is=3bBDf#{ALyn-Pq!q#@Av(G`mJ`8L<^g#dKYX zv+6daMtzyk_(6t^BrPnSe&pqwV2W0J&&8Rdw^#4%UlY!D^(?O3j6F}f(E%AJN-Z=%h&#ClEq!U-Lo;OD=C?~p;L*z*-$5X$?2{@M7#S@J0;Q8mwAy|?M`9BINsgXS-;4S^CDq}2^=tYy3^K5Oy{DTZyg zs1JTc&r{>7p`7m*qZv~r2jm7%9Z+%CX;T&jhg^mQn)ES(TfmCzzo&a~5cCx8`E`?V`EP-Gy8095mgy#s;iBRj07ym5eV7j;9vwle|}@jmy3TvW`R2O z5*zIX0q8W#u5#A*QEm+h_QlTlds6Cw@3 z3xW-X6SNzISz-b3R3Jjhs;hed>=Q^kW@XtszNwg*jTYX>2kHY17)&fI`QCCq!QzR4 z-=(IG6N$2S+n>zL*gjX!_P)*>aXD_M8K_Yp;y`_wbqVYPla|RA6^;X0KxHh!&9t znMuL*Y(XI*l!Ah&)q8emRLG3Sm$Wpp?G3w>HT!^Ci#^UKtkZT%Hu{GjMl&D)M6?qC zKSDowS=wFMe?h8c;v4@bN2z0lLhIc{^4_)a8=$tcwao$KliRjG0}aF*zOT=u;gVUz zK~W=U3Z66ZhI)H@cT|>yGt-PviOd7)0=&rR`+!D5Sn!2{k`izpE}3tvuNM~-7?hv) zxc96A8VR-9ej1#&+9P*8WzBy@#>FvC`ha^tegee8k^rWFTNA8{mu?j;X@YR&fIpl* ze}N1g!&`_Qu$35J|9l;R+Uyc4gBt~*LNu7JNl}F@DK#7PN`uu!FQ&k(+wf21W_b=Ka3;7;NaHMXnvZ*PwSzA z9q>YL05KBzQh1z|F{LD>lu6cmcx)#d{ literal 0 HcmV?d00001 diff --git a/Experimentos/inicializacion-pesos-red-neuronal/img_sintetico_nodos_aleatorior_R_R/plot_98.png b/Experimentos/inicializacion-pesos-red-neuronal/img_sintetico_nodos_aleatorior_R_R/plot_98.png new file mode 100644 index 0000000000000000000000000000000000000000..6b5a440bae19c40e205d100d5a67a3badd54d10b GIT binary patch literal 26457 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 Q*?o`~3L5fNvZf*b1D Date: Sun, 5 Jun 2022 09:08:26 +0200 Subject: [PATCH 17/76] =?UTF-8?q?A=C3=B1ade=20gr=C3=A1ficos=20inicializaci?= =?UTF-8?q?=C3=B3n=20de=20pesos=20correctos=20R->R=20#116=20El=20fallo=20e?= =?UTF-8?q?staba=20en=20el=20dominio=20entonces,=20porque=20al=20hacer=20e?= =?UTF-8?q?l=20rango=20equiespacioado=20ahora=20salen=20bien=20los=20gr?= =?UTF-8?q?=C3=A1ficos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Experimentos/.config.toml | 7 +++++++ .../0_experimento_sintetico.jl | 14 ++++++++------ .../img/f_ideal_y_rn_con_100_neuronas.png | Bin 0 -> 25605 bytes .../img/f_ideal_y_rn_con_10_neuronas.png | Bin 0 -> 27730 bytes .../img/f_ideal_y_rn_con_20_neuronas.png | Bin 0 -> 27958 bytes .../img/f_ideal_y_rn_con_2_neuronas.png | Bin 0 -> 26463 bytes .../img/f_ideal_y_rn_con_3_neuronas.png | Bin 0 -> 28048 bytes .../img/f_ideal_y_rn_con_51_neuronas.png | Bin 0 -> 26074 bytes .../img/f_ideal_y_rn_con_5_neuronas.png | Bin 0 -> 27846 bytes .../img/f_ideal_y_rn_con_72_neuronas.png | Bin 0 -> 25458 bytes .../img/f_ideal_y_rn_con_7_neuronas.png | Bin 0 -> 27779 bytes .../img/f_ideal_y_rn_con_90_neuronas.png | Bin 0 -> 25418 bytes .../plot_107.png | Bin 26100 -> 0 bytes .../plot_109.png | Bin 26191 -> 0 bytes .../plot_118.png | Bin 27452 -> 0 bytes .../plot_93.png | Bin 25177 -> 0 bytes .../plot_95.png | Bin 25809 -> 0 bytes .../plot_96.png | Bin 24036 -> 0 bytes .../plot_98.png | Bin 26457 -> 0 bytes 19 files changed, 15 insertions(+), 6 deletions(-) create mode 100644 Experimentos/inicializacion-pesos-red-neuronal/img/f_ideal_y_rn_con_100_neuronas.png create mode 100644 Experimentos/inicializacion-pesos-red-neuronal/img/f_ideal_y_rn_con_10_neuronas.png create mode 100644 Experimentos/inicializacion-pesos-red-neuronal/img/f_ideal_y_rn_con_20_neuronas.png create mode 100644 Experimentos/inicializacion-pesos-red-neuronal/img/f_ideal_y_rn_con_2_neuronas.png create mode 100644 Experimentos/inicializacion-pesos-red-neuronal/img/f_ideal_y_rn_con_3_neuronas.png create mode 100644 Experimentos/inicializacion-pesos-red-neuronal/img/f_ideal_y_rn_con_51_neuronas.png create mode 100644 Experimentos/inicializacion-pesos-red-neuronal/img/f_ideal_y_rn_con_5_neuronas.png create mode 100644 Experimentos/inicializacion-pesos-red-neuronal/img/f_ideal_y_rn_con_72_neuronas.png create mode 100644 Experimentos/inicializacion-pesos-red-neuronal/img/f_ideal_y_rn_con_7_neuronas.png create mode 100644 Experimentos/inicializacion-pesos-red-neuronal/img/f_ideal_y_rn_con_90_neuronas.png delete mode 100644 Experimentos/inicializacion-pesos-red-neuronal/img_sintetico_nodos_aleatorior_R_R/plot_107.png delete mode 100644 Experimentos/inicializacion-pesos-red-neuronal/img_sintetico_nodos_aleatorior_R_R/plot_109.png delete mode 100644 Experimentos/inicializacion-pesos-red-neuronal/img_sintetico_nodos_aleatorior_R_R/plot_118.png delete mode 100644 Experimentos/inicializacion-pesos-red-neuronal/img_sintetico_nodos_aleatorior_R_R/plot_93.png delete mode 100644 Experimentos/inicializacion-pesos-red-neuronal/img_sintetico_nodos_aleatorior_R_R/plot_95.png delete mode 100644 Experimentos/inicializacion-pesos-red-neuronal/img_sintetico_nodos_aleatorior_R_R/plot_96.png delete mode 100644 Experimentos/inicializacion-pesos-red-neuronal/img_sintetico_nodos_aleatorior_R_R/plot_98.png diff --git a/Experimentos/.config.toml b/Experimentos/.config.toml index 43cc504..1d5e308 100644 --- a/Experimentos/.config.toml +++ b/Experimentos/.config.toml @@ -23,3 +23,10 @@ FACTOR = +1000000 # Parámetro implicado con la cardinalidad del conjunt #DIRECTORIO_IMAGENES = "./Experimentos/comparativas-funciones-activacion/img/" #carpeta que contendrá las imágenes # Descomentar: Para mostrar en la carpeta de la memoria DIRECTORIO_IMAGENES = "./Memoria/img/funciones-activacion/" #carpeta que contendrá las imágenes + +# Configuración de +[visualizacion-inicializacion-pesos-R] +# Descomentar: Para mostrar en la carpeta del experimento +DIRECTORIO_IMAGENES = "./Experimentos/inicializacion-pesos-red-neuronal/img/" #carpeta que contendrá las imágenes +# Descomentar: Para mostrar en la carpeta de la memoria +#DIRECTORIO_IMAGENES = "./Memoria/img/7-algoritmo-inicializar-pesos/" diff --git a/Experimentos/inicializacion-pesos-red-neuronal/0_experimento_sintetico.jl b/Experimentos/inicializacion-pesos-red-neuronal/0_experimento_sintetico.jl index 0eaffb6..681eb21 100644 --- a/Experimentos/inicializacion-pesos-red-neuronal/0_experimento_sintetico.jl +++ b/Experimentos/inicializacion-pesos-red-neuronal/0_experimento_sintetico.jl @@ -3,6 +3,10 @@ ######################################################## using Random using Plots +using TOML +FICHERO_CONFIGURACION = "Experimentos/.config.toml" +config = TOML.parsefile(FICHERO_CONFIGURACION)["visualizacion-inicializacion-pesos-R"] +img_path = config["DIRECTORIO_IMAGENES"] Random.seed!(1) include("../../Biblioteca-Redes-Neuronales/src/initial_neuronal_network.jl") @@ -23,16 +27,14 @@ for (data_set_size,n) in zip([3,4,5, 8,15,23,51,73,100, 103],[2,3,5,7,10,20,51,7 println("EXPERIMENTO SINTÉTICO") println("n=$n y tamaño conjunto $data_set_size") # Número de neuronas - X_train= map( - x-> (x-0.5)*K_range*2, # reescalamos al intervalo [-5,5] - rand(Float64, data_set_size) - ) + X_train= Vector(LinRange(-K_range, K_range, n)) Y_train = map(f_regression, X_train) h = InitializeNodes(X_train, Y_train, n, M) evaluate(x)=OneLayerNeuralNetwork.ForwardPropagation(h, ActivationFunctions.RampFunction,x) - #@show Metric.Regression(X_train, Y_train, evaluate) interval = [-K_range,K_range] + file_name = "f_ideal_y_rn_con_$(n)_neuronas" plot(x->evaluate([x])[1], -K_range,K_range, label="red neuronal n=$n") - display(plot!(f_regression, label="f ideal", title="Comparativa función ideal y red neuronal n=$n")) + plot!(f_regression, label="f ideal", title="Comparativa función ideal y red neuronal n=$n") + png(img_path*file_name) end \ No newline at end of file diff --git a/Experimentos/inicializacion-pesos-red-neuronal/img/f_ideal_y_rn_con_100_neuronas.png b/Experimentos/inicializacion-pesos-red-neuronal/img/f_ideal_y_rn_con_100_neuronas.png new file mode 100644 index 0000000000000000000000000000000000000000..27f82ab558b9bc912c0d426d78abeb276a354821 GIT binary patch literal 25605 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 HHV^(UW=<2h literal 0 HcmV?d00001 diff --git a/Experimentos/inicializacion-pesos-red-neuronal/img/f_ideal_y_rn_con_10_neuronas.png b/Experimentos/inicializacion-pesos-red-neuronal/img/f_ideal_y_rn_con_10_neuronas.png new file mode 100644 index 0000000000000000000000000000000000000000..ed841f2122606dd62043c448df156de691dc5416 GIT binary patch literal 27730 zcmafbcRZGT__iY5WproH>=}{0$8GNw3fVJzXYZ9L30cX?mMscJRz?Wfk}V>8d(XS) z_j}(zU(fUT)N|ji>-vuKdz{C49Ow1KXsRpVU8lH?fq{Xiq$sP6fpPgh2F9i5h|BQF znSRVS_ygNqML`zh0{zdMrh-Ha3|b5&S?PO^GuEfQr3jZVu5K;g!6YEC9{cKbTSoKJ zP1iT0chK{wh1`1_

X{H)X9@b2t*31R2A7PtIJ=-u}R% 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 literal 0 HcmV?d00001 diff --git a/Experimentos/inicializacion-pesos-red-neuronal/img/f_ideal_y_rn_con_20_neuronas.png b/Experimentos/inicializacion-pesos-red-neuronal/img/f_ideal_y_rn_con_20_neuronas.png new file mode 100644 index 0000000000000000000000000000000000000000..e00d64ab1d30c8787a96d728be3046f7548777ec GIT binary patch literal 27958 zcma%icRZE<`@gbIB8TjeQIsuv@0Go`>`g|`?)!d?>vdhvaov&Xs`7X^6gX&TXn2nlWHiyxuIrW2MGnIc zEDI%h8MG_Zzc;N#iD+oFXpdwhwY{@`FFcdDZF_~b`;#4=kWgVp`mZ_xkuffTylgq; zx8~T*tA+dk0?b)!rTiwE1U8b8u-dXa_UCYJgQp}KT1F9DusU-xBLl;W z@NhX!`4h`MH#cgq24ry*~epmm|@AwZ~NkmFoHtcnAcGMY7Dla2r=g_R3kdSbbg!QAx zhNjZ{mKRR*_0D@gIz2r-olWAsoX6j(z?XIhb8UTneKRvNFJHcV`8$K*0x4(D zK$Zs&W?Fn|%F0-HN4)*~BErKZ>t+>VNtDOK5M;gb=&&$M~cq9+$FTn1(IZmk$J!dN z?GP27Zq)0*^F8^&56I_U?K3mp-LcfsBy2zSysi5FZqJjl8G0Q48s&AIl988Zala$x zFTlz=u(WjbB@`PM3!RR~aq2xR%LNRf#&+1t-QA&%>)E=*NB>jz1ck#+Qd6gyN=bWy z+~KR!pSem(N+ppNRRZu46eOpcC^u?=+i<5VJA^~5XJlmLi2Bio{aN~yo0a9{Ua&%O~pO1-&Nm!VYE-5pUl9*VQQ3ys%Mm8}q5pUWzHI*{JghUvd znCQ3|FSht-85t>=BxPltZ%&rAw1^00FXqeR2L%OD#ON*!@5jA<{d!hgVWVMQ4x`1M({T!O3p^(#ZN&&E-pL1 z4QWY9hv%mUuU`{#bJsw`9Bzz9GPZf?ULI(u9G5@xZyz zN8VCKM#jWs;YVk5ZvZ=C~cJ}M;q$o#%0zEzb zVymB?y1JQ##gDD6`8vnxuHPgKQQU-a-O;aJ`Cpz3N+QL?#2}41cFh%I!AQ+MqdDNj z$o*T6poxVgx_w(qN2k!PSjgiSQp&DBh0Tgc1~EG`!)jP-_j4#a=<@Vuz4N?S= zKAoy^MlLQwx`Lu2y~mFi)6Vnq^1QsfCPXb=Txdv0In)w zL6`oU-N_k`bw3zKB8A+3VAR>5byULY_gitv))y4qn`Hh7>uh6Xr9RCUc*>iO zWeg0`Hgrm> zSCM^e{AaPXId8bl_bBST^%j-Dn~%5V8=u~nL~53Jzz!)UnEm(~IXO8w!3$xaesvQr zg(B*rOu77;K?x~E%JGZKf z>r*nyA3BGve){*V@o8{y@C5Ntj%cQ@+!#@bwxV2fbu|}PVL<^#2j{Jby9o-#g1w3* zkg^?Ha2-76Bu>WF#OcE1UXhKa4M1k0x`o~CRxSBJOe_%QwHlZ7`t{o$IV>q7qxpxH zU2y-Ou!3c}<@ESluvhalGg$&|^vukg!{S%>b_jAs{ob9h`pg&@8vgw~djL5U4pD>4 zl9!vCB*J;2Nhe_&E=R|{CF1c*-OkR=!NI}RmDA@n#0|%hxH6U$B_$;dO>W|SweS}& zvc&>2j935sX#+$eA9si0{{4uE2$ydk6MC&E$jIWa9=YGn4fsngWjFd(_V`N2*jTw3 zL#mpvV}9Pq{u#B1H24|%2+ETf%y1%RGy5FXHZHpBeSuz%s;#;=By4S=y$@4X)Yw9IQ}o%n>=*i;gV9%ftj^fv<#(74S&82RGGi`ZCI4Gj%x zntSNxsq7~DtW#YvlsgN}$G=ANU%o{ASdv&xOfEu;NioE_f@kvd3j|KOqYxpl1Ztl!a_n8 zWPEV0y5nf>GcaU}`b~9pVbOU&0hFz0q>ka^NJI1bS0b6AuL&JG*KEfReyW5ug1RH%Z^VeG7^7>CvVR z2M0&kNE9(kai^m{ZEZut&Q$q4z`y+be6?&LYjbnS@Tao%aF6Dg-NOwn-g$b&55O=8 zI$K*?**-X5NU4S9XL^0<$;mGs=>09vAIFl~AFgzmEbX$&;d7>tvfG}koA?SremCr$ zTJ8r0I&^ah2{c~DgkwBdb`}<;gp;j`Pt4BQBEM&x_<2_`$Mf6Y8gJ7bUK}s6XaahPxNH?E(%j}%{QJ)5U>%Q_(qM;xn7Gg; zf7K3S)2Hb1O;UCl1XQW#88Zc1agmXcKPVDUj<5Kjj>`7IUJ^*%zOSnNG`oxl5%h1H zA61+1kM2U6feJ7?%QVCh!z$65bln^PijS;p>#^_2E}c)p2SgYzFK>8wI81Yf@>z8-In(2Xe^SqsF0Acz zos!oSc5!ZKD7Mq$2F7(+ixu>|7cXS3tqbY*=IR^~d4T3wG<$54j;rhHbZW|@qHwBj zosQ&5M}6&2<+vMmetw?BH9a-;dP}=J!cH*Ti^|;EnnCI%@E`snZRXa%3!xafyH{j5 zrv7`FF>=jb+Zo!-h3_gJw`Le_@Ys#ehK&?FN_<~lo=iACKAv0;fRhz~S*H;;b_BrW zxw$#vXMc*B=*a)}a3d!Bl39SXEd9fzJoC03$QCB0^VnZ~B-=ON;L_0!mFb)ImKkr| zD5Jqg*SxneBy>EG2Zgd#7Y=NPvLHjw*Q?YKm(y7-r30VR5GN!ent;`P^$OR)F~|~U zgiP;)u_S`cv@L5cLl~}9Q&V%O&*XPWNlsQt=aMZku!AFw$b*NK&B`1E5~!&SLl(!x z#!g(wP_Rn=4B%wxpPQxS3UDxWtsYBzREUS$;&$|q{4r{HlEAcj>-79!xFlD{w`>s# zmjG4lkL}&%j?t@21~^o*`J+8s_b}z%LHNmjTAG@xjF zqx2^URkzMCTW-*$;L*3YhBi7>w`>8ZN#${hiM5eqK5p@T=xJvFrzzZgf^Glwyfx;{ zyTl@6cGHip=7xrIX%8)nu|w4#$RIQtR4uCXt?GPKR8+XzG!8uGhPYOPB;4Hc*R5nzc*QEIH9J#-{D-d*f zzBOGz%mnH6e4{A$$B!S?)z!so9863aXHKozOzuygLZn`<_9nt+LFMG7ae0-_ZTrFW z)8)zD3M>+X@J%4TS+p7W@zP}Mb zn}mcfHZ_?OdC$)Uljudm&7pLt!be%T!0Um!>2pSBjicS&!^2mRks2)wrnc7BOh;Gr zi0d7du<^2r=H|;o*}}jf;sF_45NGT~vl>)eU7nu;>Y1&w#Fly>DtZAMg34x_NDU5D zeiKJ*>Ur<4-r%jK59?_&S=B>E%Glf68?#S;`4XJb4X9>hB;HrMEblP-X`^wqSh#;? zYAOngnwbG#5`PfD$*o?gP ze#mlgRB+o4sdtF@4Bkf~lEmlMvYR#x6VKE$M?etv$#x#GFQKgaEAf!D!_D+z3QsH~zQA4B1Jv^n|xyIFP9 z4)7Qcp@6Pe`gi_`r@Kg-4tDM@mXchMu6V=@Iei!G!P)q>puh@4=!|sS(`{1#v`As%aoo zVlS{D<<@UN7q4J1C~7XVg`bfS6K~H{g*sKy0=WuMkY5Ez2|WD>PFF`b-pyOLRMpgI z04vvB{)F;Mg21pH&SA(jd<0{qHKNZ97U}3)b9Z>VnQUnpZ}PjxCbO$siapiH#Kc5j zU%@L|edJ_MVu8MNXIEX3t|s7MkbjfqM$qY6YF1X3N+zF1&@mjUYJ3N+D*g9@PuI`) z`#JO~9^>KQ2nC)CM0aNJI_g@Al{F3bK0SuPQc$dgAjihXJ2;i=q%bG-`o~08b82gA zfi-LA9!ST^xw9OlG?I5~+S_m7i=UgBn?n_s{p&ynbK?zUP)W|st+8%H{Jpx5NJ&!}OQYlvkB^Prq7iFx znyvOdP$<+C%6{VL*uMt(=_vr(k_giD_BHq9Cb1yItX__9(!dIRXg^l4o@_vT%0fg! zqIo4UF}Kn+K0SROKNPZg8F@-k0f28GA0Idf6A}+n`+GSG_r4q<==k{?pwM)G{px=> zDnH>-xS+sC4ye5ZKP*NBm%?SX+S>2$Z$Tj1u`6&j1Udu9&&)65+DzpZQzB4MQd3j;U78h}JT@#WEM5cDPE5=X9D0KrHfFA;mR^r5)K7Rbx{H$W} z+8bS6-PNE20CW?Qcdb%IgMzN`S-i(lC54A#8{q#}PAAx)QWFhC$jQO5c<=f(iWojf zCh5xWcxFL-61L(pFf)5|7QC$DzCMr+dP?U!&u z0pi2iDqUxGe*UiFryF7M`mBp}j(P`Ee13nO!bSl3QJS(SU>(r}ohO_ne7Zbi;pLs| z?S16=?IPkP4vrK8m{iufNKg$lYV>65*{=Wsls0_gN>|=H>ZN{rn4f6*mItbln%F4@ zU9H=S+@!D5Ce1EHzfiUqtWSw{skXbj&>)~8#%!Y=Uw3zp;C4XbOD#U*C&@g-aozvQ z36g~R{V$HDmjaHnYigbX>Em@`q1z%Z7KWt?|GoIFhZ$RCqc#{xM?^;U(RrRPPhG%a zqIhqmn?}t41d0Lhfqy`ZK%811%q;p9RSl^O9X-@E@YH%RgBM~GKClz#KoxLtae0K- zvLV(h%{xArG^b=__yR5>xGSenI5wEc&*Gqfg@1IxEW`$a|i21YclE zKb>?qZ5RowzUx|FGEg`u_;}=8GIe{OJ32yDi*g0rEFeZesr(1rHu=&-vB&5$$EWk^ zckgVVS}5uauF3&9@;?5v02eEzvY-C@$D-0cc2BEFwUhJrr>lz{K+n?B(jaJUZEve= zlaAa2ffSVyytXL>rC5Mm2?(H+&WYe*MX}S>+xYl#Kqhb8X2ih8zR$>b33~(F074ZO zBxWaI&U4)Vmxb$l{P42uVol{ZIEn9SREzqX|4QUv7V)Xc9H|4Ng?=O-4wiE^VhadslBC z2UQr>fhzhJ2AmssX0M>o0|5Xd$VpEZ3^?;}_qW=zuM4JdUW1brWspteEwTtDKv7AF zc$WU|-DJj0l zvnLPoLg9x{ZkqvtfHR)6rE6+ddft;IMqe%VK(8vM*%>dw7wnA%zQ+3#!W#?*qS?)C zgK$L+=E>zyfRKvgPeD_JoP|%v<2+aE8%P-C+f6`-vA6JSNrNLr90Wx7g6z$n@`Inl zECEyP?ID9UT3S)j(f5_p-gw~ppYL@?;g)juLpFb%Jx%=T)vKW_LFvKqlk3Hr)as^M zTKPnoz#~qVt}aPS23VhhaWh%s|9gA8mnMN0fl7A62_P-cwzfguk2>Pn*tl&`mG)ji zJ;S?@E-Kwxo3wXr-=x`#iI>8hYzpuJ=*P14Gc)>|Oga5)j~m?!_qhANHF+vAWp^y6 zrKf9X!EzRYiPDJp6T ziL2#`WeYJ@dz#4@iPw~Rwgmj+6B25A|6Um=OK)!pgmLNJUC83z-U5Pw#c;Oa@F)_K zLU{tx24OsL2%7HLnC9KPcQ+^Gxzd5?Y01mW6FBLX8`c31DbuTnrR4tuV0UkC4*=r# z&%vd7Pr1^6gQfx687@|S(A6a@4KV@(Sck|RwNXwjb#-;n&VUjZ`jjfbWo~Y6^a;g~ z=Hc1yjUw;_J-t+s1dRkoIRvObpy}kPrzIv@LZz7-F8}y3?f0_o&Kf9UbY;2^uRkXA3;pQ>o z4Nwq&|8^pYmMu4VUs3|jR)0^=_dRbw{d~N?cVJ2Jf3mS|m8lBMzt=quKEyP~X*3U`W9a!}0)3DTuk;+@-0)5wyZ??~vmV(JAf9 z?hKspDBc@_l%7VZZXXMX^)0r|io5b#z$Rf%8Gaav(_w(=+!^WM z=>ZzrTpVbluPFJ4=I5JzXzl|Ye`8TxH8=lRxeEycgn=NNG#ohZNL zAN`+jeJMdn+KJde9W;sCy=(4%e*gX*?|_*uLHW`5XcH8EL%TKV<{I3g<G!rIRe760et+@tZlg0|L+U>Fpq_R7jEX8 z2OkfrFh1Tz1;$%$3@KeT)8#VT%>$30=Jq;a`invgs8})g2$$&j{X!b)-I_11vop7MjZGX z#q3DLFWg|HIa&XLJlWOdoQ54E23l<%XvJ3`hdP@?9sBLC_5#}#^B3LN*Z`>dbbSEm zLv&5e0bnbscl~SoOj_@hvjp~X25)8DvvlGnCUsL5qfJ+1oT2Ow1_Z~eX<2o2A z;OYF^EUTbs+#nfybUiQDQqA5V;l1(cRAygH+>d_4av8MeLoQ@X%%; zZGYcAYy|LHOKa;-0AN-B9b(@+O#R3dH)v z%*--xrTo!wT=KU`KS8Pb`bqi%+8BVNTrSUF&8=NxK_w3i z3Jm(jzMcLU4aPr&EHp^i4cf&$LLf+=*C%a>TKF*G* z0Kv39U6I?`Dk}9rSlAEHq*YUPcD6S2;P7xmU7fRCGn)!}@GgjeQFE(s=3keVK> zk&F3%%*~}q?3F>p+z~ZA0P>_;acvU+O7k{?`lJ3MY7GX-Gu#*#Dzp*4cAUtUZ*_6P z_tl4#0YX1mDLutfS^GA_V z0O3t*?Fh&b3*Wwh7>|^?_;;MDa1Q_yERV>Y9nhJeY(fzfhy{XEdLs->+uE9%yZwze zgA`nQ5Zk54PgzN#&;Ek#4vg0k$fIDwGdQZDd&7}wU(CJ>uoK}>&e^eyNYEMsP=G({ zot6&A)%fbe0FDUH!-uE4gS;}`oi)EF;;KvCGsHeE;tGT}9aMgGZ|^2zT*7*jc=D|^ zX8swFl3r2(3xtvPn3<#e=Zn;6ps0bP0H%(>#({TBNXYfcJA;%&f_w;0HKm|?L2T?0*iW0z zy4qT*VIvT%fM=52eZ9SvGk7BX1HihMjV4)u<_))-R!^QhHZ)XhV`pPa?q7q<=ukgD z#&dcYd3bm@GBN^0Z@T#qVi4?RnD~!_EqrYnL_W92Ld%OPHNndj%D$DMZo)oP@#h(y zoYbLD@c*~n5LFq0ECs+-Rt89i)};W__Tb0VO&J0fYK zet&_FLHa1u-`w5~xH$9NKLTeLnp5y_aWksyRYt97Mch|=fU$11mh(M)2p*BCwY4=U zw?M|-+MoX18sakZ+Dl2I#&bF`qz`^kCW*m3p#UE9waE- zBYdRfQpg=FI&}|2(r)>Vqm^1`Js}eLeRWmFE0+#I58ViyoRxsk;h=&=`S+blCcs&+ z*6%CZRi1{I!VCdi-T|QzT%2@eXlp1)O`U#8a5o%}vK~0Imex2(e;_g(ZcZv4)qqu| zUuA)rt(w}u2JBYM^}B?$(L-L|HTOo)#ZYD|IBG=4Nh(~RgN2hok@Px0*@J8WfD}H6 zyp8c9@XsLu|Adx^rCR&M=H`FUAJgD8JC=r*5D}miEnhUg^v_H-22-lhI1n@npzu@8 zJRr@#uWW4%{A-Zld|w4hSgp zVS#5GMc`&%0F4efJ47*Opble-&>#m^ZtwKj*%_)Oz!dW7IdEj)gb)j`!Vsl02xtpT zqkS1o$^j9cCE~-y#)d~{<>UmyCRZm;Xh_J3|0P5)ffU3&B}jQvJ+reuP(-3c;FesR zoMv3<5KJea>u73ff_LzDubU>(w0mjE)HAEOp`qbNzk8#xEM*=A@UhM)Vgz0FPv)~@ zhw$N_5ied`K)Qx{20mfxTS6Vt{Yn>QRc4Bqzl#zt?KeL+fyoBlOEon$C6m`n!O)EE zjC%PJ(a8aWM-b{z5tWM zXc55@ZwzTB8#}wZhqDB^+1Wpo-@HDDc53!`pI&-}XKKhF^n8$;)$`3fJ?j+iY4)Y0 zr9sR>738TiVQ?CjY)`w7$Hr?(hnp8t|2rFn%mPN0C+$F220K0}{Pim;L0Ak|Fzg_m zws~y4h8{X=>osUr(ye&B;JzU5ndR5ZtW?P0*k$+o7ci{>{{X6=g*B4nGZe?QZ2X5~DNSMc=N3NTG`m=3 zMqvBq@gI|zf%6*_Z_|aPz+7>MW}Cg0EAlQg z2M5L2`_9zw7ekrZw}0NsG~CgI;{F~9a8!aj5VSxzhHM7aUk3(WWn4mFfkVK|0NoAQ z;z5C5LNHb4zCwEIwAd@w!2274O;emWz^hnjxg`DA=q{7`o$rs_Lv7UoFW+ZocG#RK z0lh_?;={9pbrm4&`@E7!V7jH2lWXoiU=)rSbHnt(w<@J(mFV9HLxIt<)LhQL_N_M; zPG+`nq_FakXuDqk-#vqt1b_imz!X=%<=_Buy>a6PA`cEeh+){6m_R5s90fRxKbko@ z3O`*}2EYb^9v=ylIojXP;CIQ1iNO=(ps>Ttpi*B7tQ5WIANoB;BdFv_5D`3}KhwUmjK7Lkn*uGFaQWX0jPX+d4T}osRfJ_m29EOiHX|6Po%%Hg5&My@p=nh zw|ImXy7x1j{d`CS1n?KG%tl3L`lIq1Hi{(~CS)6_Bod!S?B33{ho>h1!l&DFy#KXw zIXgLl2nHVlDOd+Udrv(*J2{frVt30Az3_3RqrLePbgnNSgA(+xe+ zF~N|AdzIUO>!g&zDhS4~n)pS5_i8&hQEbq-781e^Ml}FUsL)-VouH$P+SLL}0fozY zuGU^L?hu`=Xnc`?K5XVrV0&7Tvg4Y3ya(^+YRoY8DE;iyd2}?x4v1?gv^wMb&T}$i zZX3{P0Sy?fL04_%<=e2E;Flt$1Y)7d@fhj=9UUE6`02?B^q_*&@csLD=zqk<#s(_| zFv*LodOzs1p5y!C%Q8MwFi)|!ocKiR(aoCZpe4J#qZ^ZRqmNSygKoX`p{UaiB2SZQ zDlv=Wy`kKMSF6&U=Fv?3Hq&5*Rn$#RbofJ<`4OZAg=|42eVBeusKb^Y879wdAbqr+ z`w~6Cs>vurR{PX`c=CTG?4v^|2fuy?$3Jlj-lB|JWOz{6yr<#slbM7f^#8_s(dndK znwV}E<6+-cc&V8-NdnSB4hcrPSm=w29Jx-hiA8&({|73A+J|LP*~ zWU6XfI8z^AIMw$jUv|009eaJm9Qs8;L#`}Wx;FP2|-k7V~0-YAhcgCJUqp>Oy!&8j=O^z|UJYv~fxRe*_jQh=U1D5M_{ZG{=TWdr% z++Pi;-)lOkdTQU-`sfyB|BM zp^3+;JmP<}9L(GZ$i|0d6#Ot3%yCP+<0X{n(Vm%lMq*p1D+fMEXQX3{pzA{Wt(s>}(5K zAyzG9xvP;3vh-oT65ODF*s*Nmg}ofJ?xM~axrrK889Lqk)A$Fxs=7LVux}F@ zX}@~tH~kT-8~x%ckJ@b|_$w)eimTnZ-R3{xs5)^A>I7PCTs^iFwLHHR^JuRc-&E&V z866>vX=?PZ#7oXs+r+dlKmP2JA5li#LSYMT;S1)RWsa|F=dKxQ>7|eeg2B%(?dLt! zPoI)0qW%m4dy3dNqWP2ND}GHV7Vh>p7?xYANi@JSYJ9Eml-|II6v9PfD+KjxvY4Si zqTWxOT{RiL5y2mO1xuXZi|!;?M*X>;^qCDcVNyicm6`rr|LobLs*3L^sA1!@mfswS z)j!31hWF{p=VSMStz%=FL#}pZ52GR|rD%q5Xs^1DDK>+SSGV^wsMmZQs)=zD;+XzM z(3DT&z;?V@lb}5h638r@Z#@pYKn^{B=ulm#LxAq0fKN*?<-mXrv$J>;vm5lwC#D$h zQ;}F)zL-sMXe(=YmkcBkTw3HMz6q&X;~UMa?6+d`0+hcE-?ex~q2P|JB<;DWz=xmw z_3InFM~z*xKc=g{$HK6M(D7;s)>l`-&tP7Js`ulgyFZX2pqIdks5#A^7Z$EXxYVxw z@`+=e;ZxH!QC-=m>>FRgU@5t~s7s)FHlhwIOr42!eHps=RiQV~+FG^^+Vjk-^e1pJ zBwx{piwO(QFDwM~zGgs?4IrfA{>^L{womn2&oPE~e&OdXn%%*Tsruq#MNsw)6@L=l z@6t<0L6DHYRAR!R4+CB11ZXEvG9Wl8Yy;kNvK-%>yFe%-LdpfnRgxjH;^c}FzMiW} za0gd@{CEONHpnSu&o)4b0q-!ss3-!N!DZbCs0ZGb;H_RDY3FPx%+$ZJA~m^s+Cv!4 zOs6PYuKNHsicJb#C!Z|56+AE?+TgTNh|0bQQp6hy zJ#?d&L3caTLC|Ewa_gWQ+Ng$=nSi^fAMs&|~ z_w*c$G?wH*q^>UrH&P(^h3E= zSueGuNr67$*Jis@feIQtsz+FA#xh3!acsvOM-ki(S1P^I#jW=|RJ-tk5s{=SEwX0~ zbTe2*u%s1`7*fB$0tT~(mz#V1x0g{!&hP{C_NNA(p@ZqIF;xvZGQ`G7=x7r1?}8-+ zynfFBa=83E?*cUIWn`oQ=w(vya94pW(5C-WmoTn>xu5G_4Y(6JrTn2`Wv5lc8Q+yJ zVscy!8CaBui%aE0Va^d{W+jS-=3z#G2m>#HFuJp(qy#u6v{0-*m!gQN2NxH5sKeqv ze0ZX-pH@}|rphKn8eq16%aqR4S(3Lgh9_e3cX>P7{|jUo9$!0%Qz)s7iJ;rfA(b5Z z1CO?*gHGxV$vfI(pI8`>l6LJMR`7>bFx6khP}!8CqdkwkIrM$!3%NiWEBAsoV@^;^5z;6LHWYmT%NzWSjqcC6GFPDpXeq>h&&e*od}HJ z$|`}&6~~;%WzP~Sm~IWC?j{L$V+94=-ac4BSjUs#zfpB#23L-{QrLdBle80EdC;O< zHKQqop(X?~zlFGNe*4#HEMeD+K1`jy4UdWB2-#GWERNliW_486&h+JM*F)C&Oal) zI>*CI4FCSCdjCB)biwxJ`xb?)90e6BGpuK*Iqyl(I+0NQyp^qe^qs>Yqln;deN=Hu ztxh`R79MPjb{mUh{P@)ZMfXK!O)`N^=dc&j|4rioJo!dGw}3RGuJ~DQrj%(hH70Bn z)^+m(H-Gs^&6R@A#wa3F?%#qUaW^1y6CuI|BOZDlop1{N zbqR4+I@YU3G+O@w4C)*3$1k3G|8A3pjb&K6#Tg+CMfMlSAr5HIe%Tc|HF{PBZ#e3jQCTVaKQ1Ai z$(E>!4U>_$D?vL!7G5aYG1vHa4P8{oef0iY#Wy>sut0++JqkKG+>8jKYaHm;zk`(z z=;+Pe=Mu$_l;@xDNRQ9`y8pQA>r*ln)UsTI&bx8^w8x%TS*Z!Ewa7atJV=d(`mNjE z=UJ+Q0a9ElKRrDD7qG{RU_*)gk=K$@W5?r^<(#Gf01yPvi<|6-rd>^R==ksW|HBTh z#55ywT>W-g)$L-X@b$l9xlM`DP9pit)sixk?L*@;CTi62t#w2qjH14Le8F8abSL(9 zE$RhPv|?$Ot?M3!xGdOD_~RsZKAivceMi0}n%=6+NqI}85{~2?8r;i@^DI$N{KE;~ z#fpPTTZU61{SO7MCT_w&SUWp(*L`P64{7elS8-l9h7aU8v=UWVy6*B7bO~CT6X9#Fp{BlS8SEy7Ej}V`YVrawSqp( zu_-3hR$svsJKeCbBgdCsaxWJ5T6TPa^SqVrss(FWj(6QWx`RylB7vKwf<`CTxrHt8 zE~U-eYXIl4f-8A{9nr9pYEQNXmM{*JQT|q~H^%ud%Qev=>v5>2X)YeE9o_FvV1d1BLnLS?ngK$pAC&Wn;8VsBe$NR!JM zt?>U3<`@!Vv`=-^ZgoXfT-;@vPbu8O5iL$gK z`fp_b56+bSdS{|9imfd!u%sS7I`v;ZD95>O?l=y*1JX@R_p$cQ*s{s4Ev8INLGn$2 zk#kDiiBCTH9kV}ts9|cl1co)JCcM({y55gEc-a7Y#^mbf2}Td`1kvU67Q}jU_Zl}f z1F$w-LPQ4=;~HK#!ou3&K@EZza8Uf%7gQitE)^9YOcqw zr1c5vMs{5{hX!6Vv+wW%5HukdHu1oV5uFxvVNjC!K$wHq+4wR|c6pS3atYb)I79MngbM>~FL^QYZp‹nBN} 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 literal 0 HcmV?d00001 diff --git a/Experimentos/inicializacion-pesos-red-neuronal/img/f_ideal_y_rn_con_3_neuronas.png b/Experimentos/inicializacion-pesos-red-neuronal/img/f_ideal_y_rn_con_3_neuronas.png new file mode 100644 index 0000000000000000000000000000000000000000..d01cae2564b7885750336aa1eb9c93f21325b827 GIT binary patch literal 28048 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 literal 0 HcmV?d00001 diff --git a/Experimentos/inicializacion-pesos-red-neuronal/img/f_ideal_y_rn_con_5_neuronas.png b/Experimentos/inicializacion-pesos-red-neuronal/img/f_ideal_y_rn_con_5_neuronas.png new file mode 100644 index 0000000000000000000000000000000000000000..7a4afb5708221df42cc3e339929b7996e6b088c8 GIT binary patch literal 27846 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 literal 0 HcmV?d00001 diff --git a/Experimentos/inicializacion-pesos-red-neuronal/img/f_ideal_y_rn_con_72_neuronas.png b/Experimentos/inicializacion-pesos-red-neuronal/img/f_ideal_y_rn_con_72_neuronas.png new file mode 100644 index 0000000000000000000000000000000000000000..d522f64a2bf0816cf2853f383ee33e1eac981298 GIT binary patch literal 25458 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ʝ#MkVTXZ6DOuJAm`j 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 E05jb<1ONa4 diff --git a/Experimentos/inicializacion-pesos-red-neuronal/img_sintetico_nodos_aleatorior_R_R/plot_95.png b/Experimentos/inicializacion-pesos-red-neuronal/img_sintetico_nodos_aleatorior_R_R/plot_95.png deleted file mode 100644 index a7ccd3465c369b39ac2aaf09843afd5935ff9614..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25809 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 diff --git a/Experimentos/inicializacion-pesos-red-neuronal/img_sintetico_nodos_aleatorior_R_R/plot_96.png b/Experimentos/inicializacion-pesos-red-neuronal/img_sintetico_nodos_aleatorior_R_R/plot_96.png deleted file mode 100644 index 6c060281c05946b5b852be8fd5761fd19566a148..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24036 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 diff --git a/Experimentos/inicializacion-pesos-red-neuronal/img_sintetico_nodos_aleatorior_R_R/plot_98.png b/Experimentos/inicializacion-pesos-red-neuronal/img_sintetico_nodos_aleatorior_R_R/plot_98.png deleted file mode 100644 index 6b5a440bae19c40e205d100d5a67a3badd54d10b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26457 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 Q*?o`~3L5fNvZf*b1D Date: Sun, 5 Jun 2022 09:30:17 +0200 Subject: [PATCH 18/76] =?UTF-8?q?Genera=20im=C3=A1genes=20inicializaci?= =?UTF-8?q?=C3=B3n=20pesos=20red=20neuronal=20#117=20Para=20poder=20inclui?= =?UTF-8?q?rlas=20en=20la=20memoria?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../0_experimento_sintetico.jl | 2 +- .../ejemplos_sinteticos_regresion.ipynb | 201 ++++++++++++++++++ .../experimento-iris.jl | 5 + .../img/f_ideal_y_rn_con_100_neuronas.png | Bin 25605 -> 24327 bytes .../img/f_ideal_y_rn_con_10_neuronas.png | Bin 27730 -> 26206 bytes .../img/f_ideal_y_rn_con_20_neuronas.png | Bin 27958 -> 26456 bytes .../img/f_ideal_y_rn_con_2_neuronas.png | Bin 26463 -> 25454 bytes .../img/f_ideal_y_rn_con_3_neuronas.png | Bin 28048 -> 26495 bytes .../img/f_ideal_y_rn_con_51_neuronas.png | Bin 26074 -> 24898 bytes .../img/f_ideal_y_rn_con_5_neuronas.png | Bin 27846 -> 26107 bytes .../img/f_ideal_y_rn_con_72_neuronas.png | Bin 25458 -> 24260 bytes .../img/f_ideal_y_rn_con_7_neuronas.png | Bin 27779 -> 25659 bytes .../img/f_ideal_y_rn_con_90_neuronas.png | Bin 25418 -> 24197 bytes .../f_ideal_y_rn_con_100_neuronas.png | Bin 0 -> 24327 bytes .../f_ideal_y_rn_con_10_neuronas.png | Bin 0 -> 26206 bytes .../f_ideal_y_rn_con_20_neuronas.png | Bin 0 -> 26456 bytes .../f_ideal_y_rn_con_2_neuronas.png | Bin 0 -> 25454 bytes .../f_ideal_y_rn_con_3_neuronas.png | Bin 0 -> 26495 bytes .../f_ideal_y_rn_con_51_neuronas.png | Bin 0 -> 24898 bytes .../f_ideal_y_rn_con_5_neuronas.png | Bin 0 -> 26107 bytes .../f_ideal_y_rn_con_72_neuronas.png | Bin 0 -> 24260 bytes .../f_ideal_y_rn_con_7_neuronas.png | Bin 0 -> 25659 bytes .../f_ideal_y_rn_con_90_neuronas.png | Bin 0 -> 24197 bytes 23 files changed, 207 insertions(+), 1 deletion(-) create mode 100644 Experimentos/inicializacion-pesos-red-neuronal/ejemplos_sinteticos_regresion.ipynb create mode 100644 Experimentos/inicializacion-pesos-red-neuronal/experimento-iris.jl create mode 100644 Memoria/img/7-algoritmo-inicializar-pesos/f_ideal_y_rn_con_100_neuronas.png create mode 100644 Memoria/img/7-algoritmo-inicializar-pesos/f_ideal_y_rn_con_10_neuronas.png create mode 100644 Memoria/img/7-algoritmo-inicializar-pesos/f_ideal_y_rn_con_20_neuronas.png create mode 100644 Memoria/img/7-algoritmo-inicializar-pesos/f_ideal_y_rn_con_2_neuronas.png create mode 100644 Memoria/img/7-algoritmo-inicializar-pesos/f_ideal_y_rn_con_3_neuronas.png create mode 100644 Memoria/img/7-algoritmo-inicializar-pesos/f_ideal_y_rn_con_51_neuronas.png create mode 100644 Memoria/img/7-algoritmo-inicializar-pesos/f_ideal_y_rn_con_5_neuronas.png create mode 100644 Memoria/img/7-algoritmo-inicializar-pesos/f_ideal_y_rn_con_72_neuronas.png create mode 100644 Memoria/img/7-algoritmo-inicializar-pesos/f_ideal_y_rn_con_7_neuronas.png create mode 100644 Memoria/img/7-algoritmo-inicializar-pesos/f_ideal_y_rn_con_90_neuronas.png diff --git a/Experimentos/inicializacion-pesos-red-neuronal/0_experimento_sintetico.jl b/Experimentos/inicializacion-pesos-red-neuronal/0_experimento_sintetico.jl index 681eb21..7fa046a 100644 --- a/Experimentos/inicializacion-pesos-red-neuronal/0_experimento_sintetico.jl +++ b/Experimentos/inicializacion-pesos-red-neuronal/0_experimento_sintetico.jl @@ -20,7 +20,7 @@ using .ActivationFunctions entry_dimension = 1 output_dimension = 1 M = 1 -K_range = 2.5 +K_range = 3 f_regression(x)=(x<1) ? exp(-x)-4 : log(x) for (data_set_size,n) in zip([3,4,5, 8,15,23,51,73,100, 103],[2,3,5,7,10,20,51,72,90, 100]) diff --git a/Experimentos/inicializacion-pesos-red-neuronal/ejemplos_sinteticos_regresion.ipynb b/Experimentos/inicializacion-pesos-red-neuronal/ejemplos_sinteticos_regresion.ipynb new file mode 100644 index 0000000..edfb3d9 --- /dev/null +++ b/Experimentos/inicializacion-pesos-red-neuronal/ejemplos_sinteticos_regresion.ipynb @@ -0,0 +1,201 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Ejemplo sintético de regresión " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Función ideal que queremos descubrir: \n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "5×1 Matrix{Float64}:\n", + " 1.1173469733884014\n", + " 1.5670876392807782\n", + " 0.6578336266482825\n", + " 0.456540126597453\n", + " 1.5090594388897025" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f_regression(x,y,z)=x*(y-0.5)+2z\n", + "tam_set = 1000\n", + "data_set_size = 5\n", + "entry_dimension = 3\n", + "output_dimension = 1\n", + "X_train = rand(Float64, data_set_size, entry_dimension)\n", + "# Data images\n", + "Y_train = map( x->f_regression(x...), eachrow(X_train))\n", + "Y_train = hcat(Y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "InitializeNodes" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "true" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + " \n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Set([4, 2, 3, 1])" + ] + }, + { + "data": { + "text/plain": [ + "Set{Int64} with 3 elements:\n", + " 2\n", + " 3\n", + " 1" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s = Set([2,3,4,3,1])\n", + "print(s)\n", + "pop!(s)\n", + "s" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Set{Nodes} with 3 elements:\n", + " Nodes(2, 4)\n", + " Nodes(4, 1)\n", + " Nodes(1, 2)" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "struct Nodes\n", + " v\n", + " p_dot_v\n", + "end\n", + "\n", + "function Base.:(<)(x::Nodes, y::Nodes)\n", + " x.p_dot_v < y.p_dot_v\n", + "end\n", + "\n", + "x = Nodes(4,1)\n", + "y = Nodes(1,2)\n", + "z = Nodes(2,4)\n", + "s = Set([y,z,x])" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Nodes(2, 4)\n", + "Nodes(4, 1)\n", + "Nodes(1, 2)\n" + ] + } + ], + "source": [ + "for i in s<\n", + " println(i)\n", + "end" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Julia 1.7.1", + "language": "julia", + "name": "julia-1.7" + }, + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.7.1" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Experimentos/inicializacion-pesos-red-neuronal/experimento-iris.jl b/Experimentos/inicializacion-pesos-red-neuronal/experimento-iris.jl new file mode 100644 index 0000000..66d5718 --- /dev/null +++ b/Experimentos/inicializacion-pesos-red-neuronal/experimento-iris.jl @@ -0,0 +1,5 @@ +################################################ +# Resultados de la inicialización de pesos +# utilizando la base de datos (elegir una de aquí) +# https://juliaml.github.io/MLDatasets.jl/stable/ +################################################ \ No newline at end of file diff --git a/Experimentos/inicializacion-pesos-red-neuronal/img/f_ideal_y_rn_con_100_neuronas.png b/Experimentos/inicializacion-pesos-red-neuronal/img/f_ideal_y_rn_con_100_neuronas.png index 27f82ab558b9bc912c0d426d78abeb276a354821..1db4ddd97b22e5f7f829b03d3cd061617d5a4d0d 100644 GIT binary patch literal 24327 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 I@%Y960dQSTmH+?% literal 25605 zcmafbby!qu7cU~hNSAb%NQ)pTF%BV(fHVlwsf41Gz|h?-C8Yw2fYMTe0@7VlQX;7g zeHZ7u_wUPjo^zfv?AiN`^{(}cwF%eKP$I&o!^gtHBD$xHx{rm0ZGeS!DGq@RpPcH4 z_rZT~Emf6JSmzi2UtIEUElozkdCZEp;$i?HEn{wxq=1{lk`5cf6M>we7o81$zn~y8GLl{}Jtc*Tkuf_t zd4$QrLgjT$&A(4`e(sMSlb*kXv2>^KcXxN|cz8sxQsT!lNVu&Ha<2JLOii()F+P6v zSN1k4nitF?YHDg;y_($^tC(^gVuP{YMVK~teP}snl5oReMeE}&FRzchMdazdeIRPa zCo9X$y0o#u+o>Ko1V1Aq&IQSzg4;q#*wO!fPZX@mNmey_AF!c`86{trV157oJ%;Iy zB+N%sQxiXU&`apL<|`3V(GEdu6x);bFf#KdpLhW(GP3!lC62m~gWnT-u=LJ{tU_*? zwv+$v-@h;HFkB+$I;&MW?Amnrb!H|TnYXmEBI|d8`4Vthzru{4n_J5x3ZI1%pPJ9$ zp{=dh^IfZO|G%44W7E?nW`AFC?RYgXNg5sGB7}PEixvCn2?YXKRA+F@TsRKM8RgMPBAVq z1Lo-OhRaM{^+>1PkjRvam-MTO3PEJo)Rb}l?sZCh*V%>%h%1GTA_E^8W>za(+u~KZ z_f=IQ=>D#F_G^q?`i;-`e*N2=Lgs0)8i&&5;gpblN6w43_T|WKP1o-2EOuI3Tkrkq zJvI{Jqf%8;3Pt9%fBm|kibl>S-OwRLI*z_0yGDT@eCNf!93orB*Qo08!JipKo<&JDCJ%(f~P{TQ-ERxH<}7zi#k3tZZnQ?&)#*`6Yl5 z_wGqE9~G~Z)KpJTRLjHHuU|vhW_2z;_x6Tuq!9dK^KomgIVUG)uG(>oj9t;r&Ms^g z)-^LJ>2*QDBU{_loSgI3fr8y#H$1%1yt|=qN=xsdwT+C9V3}a=1X3NXtwkUIlruFo z-N8;yPF`DEgP2Z9Nr9NTNIsBC(ktdH<4(l5mj?T_AUb=(im%w^^)LQ9 zSX(c{1Qm|6nb7^a%iR|V31Sr1e2pN< zr^+S zVvY)Fx3kcZdE1#h`??qPm}~Q?V&VOcISsaWKg>K{fZWUG1DM3%+~*Pvu34qDw6rkN z-RVS_R^BPybq3Jz~esy(qT-mhNyx9+t*VUzLYilcw3pwJ%98Lk+OiB*J;J z>IMe~s^L*SjN{t1Yx$O*o}LS*R{4E@fA!Muj9ZnGE!ZA}k+BPyd}i_Ue`sM5pOrP; zMW6XLo{shGRK;Xkh|t}`1BK}5=$Q9+nQLM^eU^SLbc|6mOPsaSuH(jCws$2ZUxw~I zc#y)ktQ1WbOu9bxX)E!%rm(PZxk+u{ob}1kMn%4`7h6?jrSQ$05>FOTPENmJ>N_!o zcf9}guk9!E>Nk1qEI@+38$u|LP|uMu-8Yja%gD%Zu(SIO+sVtj0l|l1wRCkg*U@3; zp{1m(db&9oO2P~YtkM76@BHla#fujljEo=&C~%Ok^k%~O{+N`ML_jT|ytP?o{7EB6=JabcJ!Ii~ z_wMPJn>=xMZxgIuunNpz4tV`5Nkylu_9LIWBz_e~3$_E^x zg$-SO{oG)ua`Fn0vRaFa-XaZt~D+La3__Dmb{KCp21QZ#v`TVRN_2KWv z7(4nwxyeLVrxTI2G8%$K4xwGDYly$N7}eX;14tW1KtVxqk0T)@MDgCet4%nXXi9vA zlbE&XT6awLFrXa;0>H3q9+J_D6xkYHY$(L$OufF(5Juk*P>5n{+t6&4{SZeA3;NG& z!P}*W@oCEl~tTFhqJSDc*ZC3a8#JTFAlc6hyP0p zn$WhEt!SthWACu&II>uzk2^J3!79+xbvvcw|JOSTSfDwYt2_c@t3!OOAuh z%EzbX!|LbOn|=%Ld=KC##yP;tcNLDi7jGb6I4P^g;jZ;SYh9hBbT}0?b>wY%4stl( z9by3%h?C{oW1Aw7cC z-Il$4`7#+22As_OZ_2fq6>ak)>wo*6rUaQdoYbN6E$*|uU+U<7Sep*|&so{okPG$n z^#MWO*=fB9o-&HdxP)>Dvheoh?$k&s$k%oC^<%@s%4(4V!^255KA0g*SynV8fdOT& zwh*GB{{FaE%fA*D0&}XOZ;6Q=?CyU5_RZccCZ_6!P7x%IELndupK0n>2uN!aUGy{4 z)9=d49$8vu)OY+677@w1<6X0=NgfU*kOduQS2O^Ry@K5WvA1)=5eaGQiFnqRFLDi$ zOiBd<+Z6^2-44Q7hOdi?xVX3^B_zWA^B`C)6LPe;8y?SN2P3auy-H^OXK9I&lr%0Q zW3r3E@b2Ba%*@PGkt5UT8IWb#g?>YP<#T>=nE~LJCS(y9AFrM0dcIbi)1G+*CtCK zds8ah9ueFMiT55M3+C*2iwt?NHJAG2?gH>FYC$u;CLCEKj&goT%ghpPR;H%e?GF^A zXjmN-6%n4BlOruHc~A$+%gf`VfwIxD4tMd5E2d>;YGzC7?O%tvArNxs=c}flAJ1Q+ zt$Mg`3aB&?+T8tUZb<)zGbu)hz3 zFIpYFdi@S38LO3xi@*R$tYBy7jWDXo@p0vS-T71_X)K1!-dQM0z#w<`_97!9P~C=n zDJZXnm8dW|7IDC7!35NULqh;|cfRM?5fS|$wL=4UEzvH3I=Z_(f4AYujqBG}ARQ7D z69efR_C>V%4r>3NC-W=%YupWGU4{{qO zZLl{}EV5W6D=#l^-!>f(49Foggt)V9XuPL?rfb{VQEQ@ImcM$^p~PM!3? zw!ImglKzllwY0QQD0FmmFCfjRsHkoB3$}md$`$^plHacnq?yv}`aVuLq2t=Ietxa~ zT%2aB1BEcHbz43?KIlDFEYV$u zIz_@D{ul(0dx>1YoP$F{LAmMe>{Lqmq{>i;QBqb{Kiyqc4Pwr#sd->($~eb5DEfn| z&pMt<^Bb^Mw3dNETKl+&G~rrsWtet$z)Ow83qV{mK?I4xj;M1vT?fw8g9 z^Y%_R|FX1pWmk#&At*ab%Y~mmA+69cF$tI*xRTBW^7s7$PJ zmGxZLg)1Q-cLXRHQoBt*xn%Dn?APqKp!kYE`;(QKX{@W8zFv;*A*Y=g;HYwxRMtzKYsj z%zOPBWm!8Nix=bqMO&>v4f+Nuff|f>x z$lCaaM}S!7TZ8$%*RjvYiqz5vf38}GTbdu^FJaGJlz<(9k_!9L0q#c4CRp6)JH2;O zYFuWFw6)3T=y=Q+W22&`Ke?KJ93A2V*(0$qPaKX-er^3d45y@^pr)ln6KeQhh<;L` zrbR=Vhp3Smgf|=7rtejwO>YL|7>z7(?GtSN)|I`TWteYgC?Aa2qycNTV|jg@ry>rf z05k_P5c`QTJR^4dsdRWa!_Ll*@a&&?R}x}ks=h$L&|bzlhFY03%Pg zW__U|KYMln$_xqpZ8Z^JQdV@VDjiT5jK){nU*9VI?7bdUwpRyrE>{0${lLV;lqz5v z5gqN^prgZZ=Gg#4`@d_tP~hGnScI8p9jtcLzjLQ?e}Dh$l*INodLY&dhH;&Xz9*Ou z*7Ng;BW!GJ2?+_?YnK+DA$tSG$N|p1*|EeBhet*xevZ7>>*IWfgd`S^gbAgfAo>ci zQ=rYp+3hD%_xZE*^IeYHw;x#YVm>S_EDXL&+o52{xy{1X={uMk&#v@c_;U4?#6urn zUjY2afV6jJO}G*dcNUc(TD84}Wek-UZWAB7vLx(#Jbtbn(jtt=Q;4JjjpJ)ahws76 zv%x;hJ$3bKL~37(KQaIsb5(4EQSShF0%;)S(hXryehx1Xhri`{^cHzo4b2Q z_s@cJYu3}J=>D_QyK+q3?D=m#{pXr5mzf}iC(x>Vnt{SS&<02 z3N&Tm(>xwAgPmdYO&ET(xOnUaf6y#xUH>dK0(g~bjq2LRyOALzwgtgNm7LJH(}QG23tpM7|A zwCVYt&BKR3*M^Eg+PmpE%J=NqGbqhIY%`Fg6-Kz2nR9?}nKZuegcII;b_9ZfDWDK$ za&k6Ge1DKKsB-oOfoX|3Pqwe@bw<&)%|9k)5Z_)MV7Ikhf$aVB3P>=|evf}}nUVDL z{0p*oN>b7ZU_eMXcH7}JgD(#Ls22>PABt&2M@??>r+$5 zU?`o@^kP~ICL{I6fXdL8E54Gj!H@Zsd(XdfGU zwmDgiiHZR^4Nwyrjs6+*lM|#n=ZQ+|!`ntE*k}k3rFbdJiZt zmZS-GCKLc0K!(wBQz@YN*a440IWnz(YG`cy3G?A}@oRJ&Gv!MwCaxhC_#GS*m@O2? z16UzI$Z#S5jT`q=RqH{EEiB~p`)KXxSPwZA1b7lU5j)_WPoF~mX*@n$$pKc$LGBYN zAt~uHS!EA!+4pGQu-2_GH8r)V$xlN=12l&8TefE>dzuY8CP#L_nSa3lTS?Oay}MA@ zFJ?MM#moB^B-E41N??J%{<&Vk!9gi1YNQKWul&dcK@em=2s@|kaB2KcP7}f>GRKg( z5qYYq0`nt=-rmQcTr60>d-v|aJA)5EJzIkCE`;vs=@Y0w-v53>p*vqrHAlV8*Ww1X z^Odmmcc}S*64n+L$SEj3KHW4T4<9aaZv8G4tHmKJ>klFYIinK}wgpJ;g62(>*WQ+u zW#6)m!EDR&B-cIaB;L`RKX~tDs)WNl@q2ZZ`@_tKN1bdRLfOM!@wxA>YVX*-0s0F{ zQ)KfKh=K(RASX}@e)RWiDJd!GD(+j+uJw7J9(nF)XLv}S0vGTSf~22s3CQd0>@1(` z5|NCdB7;mGsju}B!~|Z)!TY>ChzOD$?Nsu_Dh?6xSkkulVBSQ0Y68tQG&tCI(~yaL ztAn?n{9_C;lQj2En&h23cLs>zq$CejR zBsjDIuV3-$fD>ZTiW8pqMud*&{FHARSV4PeCfE|_kdOtv=R0_xMK%lzFeldf`ueop zi+c!#xzx|_W7ha0@4W9~10}Tn{{2htOfu(p%x|WUvhz)tynClq1oe*4y< z5MlTC?+_{r#rVjQ&!5xU<~;zfYI?wvAd70l#xcE34t3zk6C+TS3`MO-ce?>FD@ar*!z_#77`?3hMQm zQt7>SDH_G9eH#}h#R=w#g+*R`{6K%+UC6)$`1n9@;bd&z`MS8%%Q5- zaY9Jnjitxp;LSif2PiYhdBI~Fp5JAQm%eky)Wl@m>8ZVaDFBxJcf#>UM@J0}(rZBx z9hQ0z9%O(A*RxXk_AMMZ(K9W2hyvKDNDYyAD&}Z5SZ`3Zdh2Rf(D(!dj*gBOs)p20 zP_1Nqk2omtFTA(6`hq?~`8qVLy4u<;R>DviGN)A+wpt+o^mKKVw+erK|MA1+@lTH+ zyggV;Fi|8Jh|i>ih=|wZ5O4*6pVw7YPzXFApG0SwyXB$7wdUI?^70>D%AJ4!;p69j zE^P+nk3Cf%D=8#_Fy#_f)y4m-sC);@(133giW!L^X$gXpmhUo_T_Ysy#l$)9{nZcP z5GsUTmXiuVar=W}00#+e&ViS$p{%Uz>|9n|?fLle`+Zki?A&*`v7}%?s|3j)!HDJ| zB4>sFB;$tv??V&<3rnt0o(%^JD|e8E44iT;dq!Te(b3VGUn`F!V{A^XB;?+AW{~_d zaBtE5VAGPLShmVNd9PCi4a*1UL(7BG?aTaQN=D@M%iiw{g$OB5Bbef@vfG*G|*yw=0h?@^5Q?Hu90X?z^DD> zRtk9iJWbU(5eqs=|NTInYvMN!4 z^~%K>z5KOt65c;k{7(^=VRp1I2eMk=Us&HB=Pz4b`9e~xTrZjs zC{vN$%RG{CTnL;%^~~Elhd$5Cz&rwAqrwN$oi`vJ2ZuN9yBG`xV8;`2hUdV?2hKij0J}A_yav5J%_WV!(>NCZT9qB2cE>!W1^mH(9BL)3; zm%@XB+Mq81@*on4+ztks28e3TXRo)$dFuD(W@18u5wn~lw*ng~Y<;pqY)?<6FnQNC6B(ejT(1 zJ96KRD{;cgE4uSg6f!p$(-&x;`pDliODqB z3ozwIXtALEG^m)wLH1^>JvD(xHveV zY5gp{0HOd!z`pC(HGzc)l9H0Xlx5!p!vbtJ@EDMY-n5&GIsRv*6&0>-6wXS-u?DId z8bA8_s88>)#lvoLe2098s^abK?S;{d9&MhO40hPK>!YMYzS0hd8zNdH4=jAG&P@-i(g?SP%gi6($rC`0Ie7E)|oYI+LL zDEirCZ;W;KbSN;y*NrEpE&t5aaid%)yq! z933etDBSVEyx-~LWwZq;6in1YRd5cCbPWPaOK(JWke|jW033k^4m%06kPgeM!AL+I zUl;9lc2E9>!^ptt0#Yb~nS;O_T=M|ByyL17gRsKyF48m_-jk1cG-Y`T$)A*s6fslh z35c<+z6tgF_wR+p#ho!Ay>Y(5ASk?g^-A_+I|ze>28)65bm-sE9=vAj>gqq=dPTZ- zcx>!C2M6F`KWAPL*vu=fzWwK$0i#K}BTXip9yRuiQ)Jgs9S#-;`3(Vqa>#NtAqt9$ zOyZBRSchS3z;5vb_f8Jofy)4Fqe62C?y8}$Yh)n^39W=^2G2phlJr=G)wM<7_MuP9?qmM0JabzLWLODl#+aLD+A2{;|IP7~~PUlY8?61xl{dpP%e3bO76ixmADqbg;8?IQanF zjUQPOk06pEC4>9qU#4F{1{Hyb7`ydmdJnkfMa9MXdU{Y4yW88XfDVe#IS=G30C_cS z_B#b$WG7+-m;h<_HHsGUt~m&xZ{Kc!KMM*5hbk7vVs85VH!HV9*>~KZqM$Jjn0%zI zw>^v&W0%jXU)}@k96HlHBpX{27>KXmzD?y{R#X%+*WA_B|81oF>{Hn51&f*HNt+oN z(4*wA`fBZQ#~<|uTBNyceTYdx&=P(H6;;6>B;PyWJV1V|Fl$^NEbIoolMD&{F_7px zV;EJ{)TH6pU{!EdQir3A8edeG^f?WeXu}nVJXlxI>9Qp~FJx-Kj_gV?D8ztW6|~PW zNPE4{&3y>f5O{)@@g!6T0NLB3THHy{5639}_$Qt31Whtc z;0TMz*}(0f153jr9ZzrJ4zI=~v}A^ZMqZEYaP{Dp~7g_8L$9f$`W<{wfR zHQ?5kym@nER3KqT`Ws-aP*mHz$hbx!LttQFihwD;Y!3lyoB3Cx=f(r$cP1|Ed{EdW z9(^U;;RD9Vd5X>hpMfd%dYy5+)bZKb?TL7&Lg$-+a9M13?dhyP7yx_lJwI#2w0`;W z1&+ssg9N1%^79r1C$tGcq=INM@U%^dD0_worDT;8zri>b zmy(JUG^utN0a{0f1V{ltwjT^2kAmw4`gD%T?MWf*fJbu`KQ|+9Pvc<8adL8TK}od+ z*=T{FAU|Kgyot}$3s4S*!qy7-`zMEyHxGglMkpCkB(NU%2@eL%{Hr+)J-t5&s%{f; zd<=LP{cOqh1&y0_57Vw;VO60#J*%PKL9K9ha%xZYKin;Bu~mdFR_Mg6YSG>|*MS?u zK?4a%RO0jHuGIV$+Nw*8^?$z7tPC9gzHwT|BT0qzG6CA=UJtFoKBXE6ys+XfudGby zwJ|m@P^RP+6kKtuEh;L?=Y(EXSy^*v5o>RMz1fOesr9upo(wVVB2&17YQU=O3b1aeX+rtrqI16?*2;+i3|jp269S;X?=*``FtodfV*v_jMLq2 zLD&co3L+Mw+1uEUtDk0B4ejB0oiX9(6Q^JAF4aWDT)|?&LlW2j zx+^8R7Z=^bNuI|CYA+n?NZEiFVEtk4zP(9U4><`+I#izs(!s&Oh^VM`^J##!pie+z zfvVGj*ZJ~kK^9o}9KZi``<*iY$&MP$X$M>f{L?RAdkh)VMwt z72%$bC2*>eB0*AybZ_vkHCOaA!VBk2P(C0751 z^s>+_8A%F~W{3Y_ib~<+#KiL#FCr8N7MZ}8up3}InQ-#5CgYA9d9dLYN-9!pwOfU@@`Xs@wbfl#Mn*G|X!jiiU^ar!M z9GPE$#i-!p<1%A3g?oGcS`woa(S8mS5W9yf_FD=gNzcJf7B zyuhfx^?f38#YhS6coNIQi4?x zA*?xp^+M^8Qyw8_MTX7VmZ+~6B)R=|=lpL*xi7-CdI#f6G>8W7Nn$4>;oCfE@SG~M zAf?pc9CeD(?Q4t|FEA+RbfA>CM8lF8HY?1%MG1Ica zZ!W&QFLT#;wLlg2LqZm&y{`-fGChVsVhRp#uh&6*e^bs z=xEsb{e=P^Tr2lPSCotmwM8Gc&>BS3s#E&knv4|Ig~vHrX$T7$-}60J$|v!O^ms1+D(T z0L;$r*_&4gvH-b_Td2*pf`eeqr5R%uu=tvhiDvU{C! zz265u{Ja(v@@Gj7Bn~WH0uFdy{sGhX=X-XB&)9lkEwJ=1Ls~?OOgB8gV)&>!VrYV! z>6bQy3{L<=3=)SteRL@2`0N|@^#%F=W(c2S1YgX_{n!X4U>K<8vyk}jHp!R5x6LU- zM74E{r37WV0=)zn|Jx@X7P2!E87rG6ikl*ah|`PZV7vIJ*YTn0{iq7!(3e`eWUpcK zwXVh?&Ow0P@%oBZoc-8J=6r6_~NbrOKSN8Pu;GTPfH3Se+GCPJeL;Q&)D1OhM*P7H!DRLJ*uwr-r zn^XdE^4#nD#r#DjM54(NXlP6XB#FUz`TL*4cr%fCVblN}fN8Xv!L0h?Pq%hXw`a)-p%Wj2*BpK>TEjqK^VQ# zCIkST4HKJxc})Zd`%;L-;AI&}Mz(lm7Lg}cQ}41(gG>P&nhXh?61s+g7i*aCqp^a>mDO?M*1pmC^VlgmA zwdp8s-n#WjI32SA)(9v~inuY*!+QaY%VOXB74cQvo|QiN(R-+i`{cd#UP#ZjmoyPk z^lf~#8!b$ZR1Jy5u03Sa``gx!Q zybvKRJv}fm04TX>%9&u_Prmxf1jdzCSCL_z zi=Z|(`JXefiuj#)5r^J_eqS)w`C-j^Gep%N=t^O;sVAmVyvZo#4mb>Pt)N3+yA1u zi=Lykh&0?|i={QQzJM>>cK*gKNDm$?WVfULFzOz!jj-`PwG;lYSXf^Ue{YYio)N&p~6Z^D5Lr1 z_XtUoQs0efo>5#RaJlPv;qMi~P-Ov&r$gnkf|NFG7o}mfhlQ+$wCsS?!f#R~i0{7| zl1<0aO2rm;BjeJX8h?Wy!+&45#SMSIEYcX%WysvwPaxRx-|{cBegdiFM@vyCWq>>jPGY{x#prVxzNx7uBx+A`JM;UOu^2K|Gv5=$Ch+Cp*+6Gu{p=#&;OnZ zVe&n6H13=H^K*vq74HAwQ19h%Et#$mo5`3zZ4pe0RR7_ERW-OW8m{~p;d1i#gT{YQ z(GFJ`?RM9~V5oj_gCpdBcSON;iD&O`s2YmJT;HR-K$%#E@@z@hMR~9DvoAKRu2f?O zf?WmJhXTHBBkc3t@>lYP#Dz(d>;4kOZM#l<$HSv)!MqbG%Zi2NfgguhuISzl*J(1T zO%l-ZV1XNE;D&3R+07iM4dIY5H=U4J z@pO|o#8jNi_B;C?|J!#2ms_#mCD7Fp*elk`rf`idc~#Z3vs+jFiXmDhxs}n*s@~(D z{N9zQx;9ac{?8^M3P6q5go&t|p5OF-`=i1aulM3DZYyv72B|E<0vp)lM{r|-Fw`d5N53A~ zM*fu4&H$r}A+x}cuZ~nR>m@d6E>4hC{0Bc75ge`m3T_=qowvKw7J7biXQ9T%l2d}y zcv@m8QEDuiHTt=k&j``n4*-@ChokjrA%%1&_b;RO7Jmgl2$fyT55U4^gwu5J`ma6J zk?Q7K!5<2R9N?r=lECnWh_kr74pw7b-qprq%j{nR%#k0zT$utT7IHTD^PtLsucAsF z79D-9@wTvVWmQ#D_fskMgqo(JzOa^W)G=%PvS}PAEm!_1z`=_L(KeOe_$d@}fcjv& zC#R&qyHD_rpkn^T%N)@2`OQigX$Q3)IzOCGpGpaq$x}qu^b%#K%p6CL(C{Ml`2+LW z;b4z|J}wRlJE$Ft_gq@hSHatqez9NT@u4%8nVy!m+Rt6(Wv<2uopku_@1BU+<}-|< z*CU~O17w%5UalwHt#BzSe@KRFEgV2P+ym6c%@%g~!UmrtI19Q8AGNpK8(BvR8M?uHuoB@TqaNVk=p!swJa#XI`$G7 zVH?n^V5GJOOEzv!-^z}c%40)UG3Yi>=D-im_Oq*p*5JhOxR(}gcB#_S1CYw~>dEcMLQ%L@apJP`Tmqc}>i?7?Px`^|ECm}FW1Ok8sRv0vk4{29-T z4)-F{WpTnbafX-+83)kNHY#i`=Ca|>a4iLwnx)77y5{D97Q6@uB0+G9u$2#xWAPP> zPf2-TZtm*fFnP4ebICK5DM{cdK}5MpA34>qoF*I)?w1VY^B_rpyAB3C2wC*xY>BCP`u32r&`S3+~+A82pqH+cUA#G}7cdc<{$R99zZ3|z7fz=NH`xdbI9 zp5X`)N=R$z=*WAdGyJ96>KnPYw>LVjxY!n28t&gGk5-g|S3}v^t#wK78Eblv4^M0n z*U~$YtjP=8{j`Sz2XGd~guY5aXCh<$o$@5Ow)Rj{_H_7&=mu}^8M~upjtd8hL4&Tc z<+9`+ra7`+=UhN;Y~v78IQVTw-9!FL6X_H=c^7GE@)}2L z4Dz~Nh<-lM&D8S0p46uAaZz;WSje7=H+Dun zLhursy?C=K2gjIGj_tQs*lU-MsU(`>Pkyl*599&B*@gN`X8+W4`01vO-+>3iiH#uO z@|((N#-wFTZGpI}Ut@Ath;1+2z&H>!E>9-9TD17vpZ*XEH#vp1Ta~37(;(o2q9zhP3rNyIW)od+;FI+ zlUQ&M4aaTN>10B3(wIB@6)mU@ShX;=0WxK)#&Fe6PKL5~`!Fr?LK< z#^dy(J*kB&1Dsm?@P+3vLW$L=vzV-t^~#ar8=83^VcD0il3T3Ey>{HtJpD}PpbX#t z@9zQ(u=<>H481Yz``<;7*o*W2{FL`RFin3FXBf(;hW-JI9!H{#&JO?4C4qd`&aTdZ+6j&31`nV6)O?@QBO%utRAR$iD=hqtUH@rCTU^Xn@$KMUms z=3)7Y0l(}G>@q9mYWbBlr5FacJW_@wNro>VaRSdi$-0}**8YmCkNBof>`p&n93uJBL|h)Dc(l94O2?(~T|0U0vi!?Xhkjfp&r9gvr=o@Wve$3T!M%hNwP@q|~Hqx6(Tl^whXw_0-<*<>}q>Tvy>$HVSr7 zOctRiPa)GDGijS1`eLBjIovg_JC}j9i+spJ#=|-@u$LBkS7ZD9pIU}=6+zx7?Mw#v zvl0CqQTl=pKk~p!D|-ZQR3dPa`H*_F(WdWAJKwO_3*R^@6d7{h*HP=cH}qYpPuU#0 zP0KX@YPpWFu#)kxv)%LmHJNbQElB)0?QnYUlt%bklP#Q7@=@JA!{FcfY+N6cOdos| ztADt5a#uAr*cd8B=C^2_0wJx*{%9nxdLI4iZs?&S+BDhIh(FFK|DO zK9xG#=x?gOYf0n3&wfLa4I()7Dkc!WD7W%mgx&)qgD)0TS5*maWC`Tt`p8VQ7D9{%Sw{m2fTlQbP%QlAI<q##sKfyFGaU zlvphEd0JX#t%AHf0zBp10t+eED0tGU-jGKhy&)G3GO4_&+V=Uu6wT0+;nhEHok0|E zuq;&F8RD?>_+jj#jQ$=4y1j#jY2dQ@@F^R&mhSeuh_@t6u8GnVT8t znkOigau2@|5V-DW`{pLTXpe(u52Eh2uJI$rM-)1bF7xsS)^o`>x^p#D1fWWm;MC1C zV(ja`mOU5zYR3G|1WynvSK`ch-0IqgNc`@Ii1oB9=v~XQT?PSde!X7dL>t2b>j*-; zQmM=gBaaUQoW~pFM0Skz>N*;*`x4mcmO{2|UrxK*&^6Szri&+Ao$#@eay)*p-*Ok_ z-J77yru6LgAsV9N*Ll72*2VUXqsy9I$$YUU&ENCRGU!{+|8Bw$Hu+g2HH^p@XEXXQ@|iawtx*^ktCE+F4^{?5fP*IxUrt$fwN;K%n>4{7SxbLH%Q z+uu+|^90EWr8ThqJYaTTtf&~m*mw)lh+mcqZR5AS_G{^V(~{e+dsksCZgQ=3RGdaN z-$-T2$S00E42^-&WF|e~C};ot0>A8gK|O?gwnM|?jr}?O-(JP%^qxQQsgu|6@pA9- zJgOWVs^r;o!%?WMs$^JPmlnuh8swj-qr!gVSQo@RTK%>$y_`UAAb>|o8T}^s^`nOk z4^_Kb;+XUI2}PxgrsM^1aeZo_DYj5z@cx`&p0%6;F zgHMF^hZv&1cBA4gF&riOF#+5^{S{-EV09JNYsy0?sB&s|HcG-~zRKIka6J~lX2GNR zR3jjEM~uIkja{#iJNtqDKf?mY^jD%b>$!7}K9@Io`rjpD%W`HU;Xqzf*qnF#QrfWN zF|_?YdrWD)cD-%ls@zA5>B*y$p6~Cf7NSIu@^p=FxKk|?@~0Y`B8#6?d@CnTVc%Dd zJCu}x)leO}Zt#VtF1wN+(~`2St?S4yZhpxwLhB1}PkFD3MN#2)vrp0c^fleLBy>+1 zDD+L|T(f?^JIY8ndAM$73tYBvEh>w*WZbjVV{ZF>+)4{21x*(2OUg_2QHkj$X$d{O zhibM(sU`G{de3@>o^jO0*3^7lcT_pMmxFc7T}t$jqZPz0c#j)=ALwZnt_^_xy?+(?ns_+x< z{T2P7TP%H9smG=AOh`%W){*q(w6DdwOWW2|l$6jBVq|O#rYZqWU|1MJU0pp~Sf@x0 z#4L9=w+v_*0YMKC>CDk4b}dU>7p}Y5XJ&&#_T{5hr8#K?$Fo6m%FDT;LS}cQq(pE0 zdE~5UnL4<{7U383N+-HDvu2C~&$#;@E=rWftgHd})dBqB8E~)u_b%qkmoK4RLBP01 zt>FuFGC(Ug{NVt20ksi~N%*5EA)%q4{OaY*!stBOt{CH;e#nor6cT0oxz0jfwTGqm za%618_WH;BGAW$?`NFsE5Azd5*VF$ar21UGdvk~u%QoP9++DT?X!e1wBvK^&J)Q4K zH$d=BQAR^gHz6@GG>9r9)S-u9>$7I(Zl@JPQMP`2c7@J1d61 zVKcK=sC4L}A|W9;5e;g|)#8R83UgI7h^X*hUyFI7@@wEKHNwbXQt+bkv<9?ANWOiJ zob3^n&7N#Zc>nw_eP(v!WHo2Wtv@%fv??#~aPv*2hzGn+zWZ8+6*d6RGwqb&$k)V<{_1RmNbGal$h_h_RW~vUVT>4NjO?xJtxs` zc#szOkOuz9#n{g;BK^4;816rv+`V}^BF(1N3*o=wn*z7?h0vr(6TdqPyyA5+VcpB1 zKnBR=uF4sy-o0D!&18I%B3zA&o{kRMB%tex4V|XO71R>P{m91Vfss)}^RLI^5cSYg zXKtLAojn8Zr5e*Fw?bzdU3AeZw^87zw@_`2JJ)Wi>%FOiQhMj@|I^u-heH{?ecVLq3 zAtO3r3nx!2DOrc80Who})o}rZF=Pop7h~tw0(IR!~FK~a+jd+)QGo4=F^OA zUdOp*)Higg*2PN1u1)Ym%V`S)+MDQZ?=#GcBDpRmi{n0Z9!|_G6_Ka9GY3 z$|&U9))#k6gKiKVi~RRVWe*;AXPhV;7o)o>NqygnQ_9vVXWt}2Nt555cwUZT7~irj z>Zz?pU4%jshdgYe>Opubw-g`MfBlR%?0*|F#bSCuUXFBR)Ica9P?8mhW+JG=6*&o` z&0!U{&Jo&`$&EG-Yt(4DSv<0{BZxhXvhS*KXvq?;jR6~vZ!oPqe1%(|A-lqCgfSQb19ce+9+LG z*mXTR*H=Kugd&JWlKO0CQ;v)BEuMJ1+Lr3cgO-`S0xxFUTG}9$#qLpmBIZz5%rNIV z)w-zb8s`JY1Z z+zT!5Orx<_`9RLnSoQbM6DSlZei`EfHibJ-Cp-eKGx;_mn}GyXAry6v=`d=37vG-IduY8!yD~x2)wDzAEe-FH{&|tt#Bhg$K2E>z zXknF&fktd47z1K+G>g8k-PYBu`^(5 zX?v+p1oH_$E`xS#B}sHqCLs1+Vr{F?(y0+ooa?@_;j!Dn^TzYys-kU6hwug$2}&@8 z{mIMvGFH|;@jCOR+#7Q5nP+H3St+u+7u6MmSTXYw>U0DbqT4*LNXjEA<$Ski&A9yz z^goNrm~M?|``ru?+wdLX>b9C;3bAoP6SV##Os}^oJU8UcT)X*q&+3G+y4PSL0*k7k z`JZMrXKwpNZpt*5Ahex1=U{7clsEPF1I1H%&2vsf+lXf9$fY#WjV^mT36z8#M~$ET zm%@+iNi_^!Q5bbAGaPP*`5mq#S4wf5NQ=APF{Dkj4$=Eh^NuoQ zIOmN-Czx2Wd72)KAE!^nd>6yD%4+uAJMB5-@`z6nmTqZgsyYpocC`U!Un6glJ-B@# zDa#&FL?DkyL}JYAs&C7+)!nhIQ+ix43Cggkde^Rqq1qXSqlN>LPZq%{C`9w8ve6!a zclp@EDfM5+LMoGt6`R9xxptRZKDL@Olww#(q?!^OF0J!NE}gU_)ePVrN4Mg1lx48` zO*iC6xD3$9;Pfmmn7Nkh?@Z4Bxn`@Og)?v|rqWRGeq`Xz$b8Y3WRyC#4!t|9QWhD> zQ~bGVu9I&&KNC>fJ2(Sd@h>Qm_cy3zeVUtKK9WRy zdY+1Z)5uuRG1>L=XSFYSK91P1H@9JYNU6oDR=D(xhz8d==;<_Y?xonlJ2H==TyOpS zvR);+cDx*TEUw+h>G34`InQige?LZ>o|jk;g~%qJt?nGk!P1jP)1MsuJ&@wGVb++( zGyL_Wv!&x7NFdDVyGl}k#PnIXPSD80c^&uKS8*Q>_DeFEG!l0hWv?5pU_MR~_KRe5 z)kkhXM<7fhS(vUil@0iXWxVYigR9eR^l$l`qu@^!W`mK+emEV}CwdOPxf$g$CrijM zK#^O;v4Z@!it1@`wu<9{gtSo5x&ye*WuXM~TsU;bHsr zZzRRko8)<#3HwBf#0UHwl@YW^%(P4O6OCJ6-4)cD-#Ck<496YZk{uMFbX`CS8k{YJ zz7sOb?H9t?BmDYO^jLj=_2UWSHf;^dB_L1HGB3VK0g?za${>W5B>b!Hzq5@(o!a*V zeelYw`(z(=TP4{qFfl|)ta#g@1+$q86_7;8;ui7WF@|BYhj;757l+qUa@1qgm?flD zgG5%$p&8&NOzRuxnvK3Q43iSyn{piXZ*cg;Ez140@6I#7FBU4d1~8V{4wniarL%%^ ztsXS(2E4IRQL`?Ehdm&nkd^Rsb=}<9uuH(7vGXua2!spO1{<%5r|vj-@@c>KWE7G3 zo)j*zLU3B3N1?1~LRMet%={=B7z~Y!ZV&9hCI`SHEKfDGwO<$&*?b(synrM-zd>o% z+&X!m=f8$*N}YLoXVaNgOvL{aoBqG`1obRLhblVmaaNZ795@5q=3*Tuej_0Y5wB( ze?vJiO70v+Uz+t9yzldnSU}7^^#WJaxr-MAtLb(uU?C4_8K4Xr^Xti;^=;81J&3!2 zjiHtiNQ;m-yyCUHHT1ZC$?_~k%*AMzR^1`lJ`5I-D^9s`k1Wy1tyEoCcL;11Akuxb z$0nNz8HInKsw~n2Z^%z@Tely*f~3l+V*kp=u@y)LR9c3vesvTBLkzZ{l+$w~vTSsA z!PKI^UR{(XBtY`r!Bp@pOS%`={=v=?{z-K~o_~0HzlalQ<{Q3j`xLBwQRMtxlFab| zyZzUaO}1^8GBx=5{9`}R!kmI|9>_L=?FM}ASgRtvR9Kh4er+vU3%Mka#*m>v61@mg z0*KpzVq^&a0aT2&9u5OSaqVE82}n8T6r=fGp%t%H_FhY!H4)E(-p~E!Y`i0#(LGgR zUnlWFgg4)JBqGCf^*)itfKk!#QjcGaY_a|ZT|g~*ROY~ zGcTVH1L)|pTcrU<`&ifPz-eG3`qVS$*krYu-;7M~C*?l4FqlNU_3`49hUAo^dglQ1 z6Mp~9^^#^L#qnUWU2|O?_agOl$z9MxgZU8j#Mdxf2^}M*zA?xjfH^=Zgni!bkpj;E zFd8CaV;f*M3`8hUdlqSP867teh=p>FVBXvI2{dxZc%j`K8}0T|PHOSi9xSh^Sl-?0 z>=rXe%NPuulLt98SXcoon93|EB_)0(8c?$$BCnBD;M@TL2?$F7a|MKgcR*`B)F5=E zZky?--A(jZcKVQSenrMkvSQ)@^&*ROT}Rf!3yHRET!acnpdyp(^J{LPp)sxVKsXCV}!m7?8K5KP8)Td zFNA5_Vvyn1gST8GnnF0qwl|FHuCZ4NrOL2>+r#G8T-{ZTtw-`q&+&`NJ8Bsio=$~C z6{LxMH(9SIT+6+Dn;fUfQqov0@4b@a(Q|jMLFV(@T8?nl&uMS?%R*Yk)He(e=pfIw z1P3A=k!$R@3GF{V$Ajq~In%_8WqT9MHdcBfS8!54#D|F$G{y&Gc`i-an1~G0wetbH+rnaiO(Ux6UJ52>}lSLV9J_r#;z1=?Yee zWNR+I*BLkOdRfE|Y`*n)+w(AGEowA_I3#UuLBfebk{Z_7XM&MUVJ>qiP0g2u|IxVl z$LzEuztT}L87`LO+h|-E!d)-7%|wVwYG(F3o8;J02D6i(g7_>W*&996mezcYWtP46 zNdz2xHUk!~s(Eqq$_ihte$K;gQ>$8+Bi=79)}YpugTxSs#mq|8DB`0c)|9$zrdkRn zZ8euP1#E0bR_MZLze|!6v$eDY`*2HGh8s|o=L*8435`2SM*I8^9rFU6rm{8t@(1e? z{`u3C{Y>B6K0X>3*gvBva{OCFC@FER{%2x`1>f4U zWtaAG8HBQuEMyt*+9q(^&P5TQrA#TVH~A(TST>XN{MB}0_~pQ2TYk&#JngNiQy;Rh}XGua}VQv!j>04He$V{0_II{5c^CHFZI(FVJcHV-hNDR_aOn0(DV~V%1 zT30o_M>w!?N79LxYJbp&WNT3VM^M&=c}!i?gY zm_ayvv)nVDOQcFFXOvV#W!`Bh-<8iE5O|7zOy|-&Uu`p$?J=a{9YyuBwpsV#)_wB1 zN6A%HC3S*Lp_ZOKVg2g=>6uL*b4Hn--U^atoo>ESAz#A9$6e!5H?R3Jd*u@Tr=}V% zT{6~Ne56kO-RD2^ty|hP9SPhCyrVIU)9A_vJlzq+cfHS(pa?2BqB^NR5EBhHs<36- z>v%j}z>Uu-RjuJ_oW9BRbY7G03zDZVZ}qt8p-jPWVGAdet8pEb%9tInR7|0Ug$C1CQt z{;Cd`yzU$8=shZ|ZmKurC>HP<*3)$}!MjO6-^(y6i+=SDb1zwOE%*Mn!-tl+8`m$t z5OETu=8QFob`Jd;#!5oK*y8CLUtO&h+>$EeAeQgI)B0h37!3atd<6o%;&bWq8THE( z+IO|O#*E|6HLPUB-{<*zsa6eVEu1?M!uN8^b5Ey zdz|4Yu9X~!DcsZQ`l-DBVQZOCH}v={H=CH z*J>uOny)6sWSq)5{pNxaH-${7N3Z$Gfw(68w2G%kM}H9wI$By`lTexdIThyNO z{Q)cwJ-x5)G=JX#tPk8di`*+}V6z4t>40tpHHpQtgQH{g^XFD@?yICEamP`?(?u1~ zOCT0)122|8-JXYkA-Jj`1lepe{o!J(Bygt)E>QfhW6WFol*P*dUa%g~H}kIqE9fHH z2!mbh=(r6LUo3eUBS(BbkkPmkgiRuFeapMxm+|uOcvy?9%N}|}aW>@R#~TBoqcO1Z zi+YPeqXt4N20?dpYH4dPDJx>Vh5j*#bYQ*Fd5l zqyU5T{~Y1r=ag4gCIrA+kpBXKJZ7?miGYAO@$@$W0Pzi$5Osa)(m! z=x3Ap+m&%(UD@uHE6K~Fm-co6v(X#=_TfeM+SAZ{gWniX_t@D(7oV)$0w4wy6cALo z_w0fA-`FTOKvQ|M0x{m#k-!5Hc7CczZ|O;hC4-vktGm*tHNg6SI~lx#X(IMi1C^tB zAV>x6G{nYZl;blpAgAGpa|-y- zkZ3W-Q2^#XU7NUxeO_*_!8rt`M_}^2N>A^0zv($WLp}l)#5T*#C>owOeECJ$N~2-S zY3dkcksd6g7J3hXW8e!0_9ZX#LCO-jU%&vubzAbT;E^m$*`y z*GWmeunhqNr#c;xX9@7%K{Te(4ge5d+JblQNF0jfA4q^o7b@SADc9?ca=I{;U<7?O z)~Xw*q09l@S@I#Kz{&=0i=e@W7>R(x>LD#&PR{VfA1lP+twNV$G}>)GCSw;l`B~0v zoClNd3usD!OaV#>>tOF@NBIe;=ba%1uXI6F3>YG?joDog1505$OQ7XO`+aU*cx7M{ zqQGRRCpBsPQCY;bV0i>d5)d5cS${e9Uv*Rfy%KQxz)1xj@*J+H#V1*8s%mO`;AZuZ zyn^~&P||Q)Rds>jfH+8_1|S0fMQl7da&BMz(vsINCIS*TSYIltsEFf=LBAz;v_n0h zG*$t-8-Uk3U z92{ZIK8~6Fc7FeQq?0;hqNA-#na6=Qdy2F(G#mpXEWl>5on;=7egOZb_eLK;04QxD zs=h!f3Q}$?((WD}6kr`L&F~ERp9#np116h3cq072kH;)r+N3mPFGamUkwu`Uq^Vep HHV^(UW=<2h diff --git a/Experimentos/inicializacion-pesos-red-neuronal/img/f_ideal_y_rn_con_10_neuronas.png b/Experimentos/inicializacion-pesos-red-neuronal/img/f_ideal_y_rn_con_10_neuronas.png index ed841f2122606dd62043c448df156de691dc5416..3178683cb131b1ebd7ec413a4d30aa833648a850 100644 GIT binary patch literal 26206 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 literal 27730 zcmafbcRZGT__iY5WproH>=}{0$8GNw3fVJzXYZ9L30cX?mMscJRz?Wfk}V>8d(XS) z_j}(zU(fUT)N|ji>-vuKdz{C49Ow1KXsRpVU8lH?fq{Xiq$sP6fpPgh2F9i5h|BQF znSRVS_ygNqML`zh0{zdMrh-Ha3|b5&S?PO^GuEfQr3jZVu5K;g!6YEC9{cKbTSoKJ zP1iT0chK{wh1`1_

X{H)X9@b2t*31R2A7PtIJ=-u}R% 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 diff --git a/Experimentos/inicializacion-pesos-red-neuronal/img/f_ideal_y_rn_con_20_neuronas.png b/Experimentos/inicializacion-pesos-red-neuronal/img/f_ideal_y_rn_con_20_neuronas.png index e00d64ab1d30c8787a96d728be3046f7548777ec..a25eace4283fdb48bf802fb8612e377510953daf 100644 GIT binary patch literal 26456 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 literal 27958 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‹nBN} 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 diff --git a/Experimentos/inicializacion-pesos-red-neuronal/img/f_ideal_y_rn_con_3_neuronas.png b/Experimentos/inicializacion-pesos-red-neuronal/img/f_ideal_y_rn_con_3_neuronas.png index d01cae2564b7885750336aa1eb9c93f21325b827..e9adaab4920d1efa489c772562bd845b2686502e 100644 GIT binary patch literal 26495 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 literal 28048 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 literal 26074 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 diff --git a/Experimentos/inicializacion-pesos-red-neuronal/img/f_ideal_y_rn_con_5_neuronas.png b/Experimentos/inicializacion-pesos-red-neuronal/img/f_ideal_y_rn_con_5_neuronas.png index 7a4afb5708221df42cc3e339929b7996e6b088c8..4a76c98adb189d43b4495a28881a23de658dc02d 100644 GIT binary patch literal 26107 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 diff --git a/Experimentos/inicializacion-pesos-red-neuronal/img/f_ideal_y_rn_con_72_neuronas.png b/Experimentos/inicializacion-pesos-red-neuronal/img/f_ideal_y_rn_con_72_neuronas.png index d522f64a2bf0816cf2853f383ee33e1eac981298..e48aacd11e4a5d43b7c17dfa57d60a3d89cabdcc 100644 GIT binary patch literal 24260 zcma%jbySsIx9?T~w;&->5&~k-C?y>m0VSmyq#L9gR8SODM5MdBrAttxyIZ6iN!iqy z+wYz`&iUhxae2p!j%V*D)>?DT`HT7Z?x}(_J}xCL0)fDP^7xT50&!6jfw=Gqc@d7B zYP{=#KX8m>r5_>AG5;miWriUTbciR9#8utn)~DRWRF=*}x0g(aIO*5%af2?2Kf=De zDV$^5tYog2KRi6Hy;fOvFp)d_(IB$Uc1pcjuT0^`OC&CCN(!I2>H+el7>aK0u%)U? z{*sX<&ga854o5!zrLcQ#9*KYA?tM|uy#x1;2r^y0h|ng>S3gcXKapmS-_XE)+C+hwBh{l98OVDRUMS;uy>4(j^3)>?T%p6k<)t|eDJH$pWkV5eYE)d;A@K9 zq$Iir5B~i8K*br|Ias#b7jx}{RH@(jS%R<^C&f9QyGY{su#Wvyt;fLNP;_UqM4<2a zsav|T<$a%>`L=*hKYsksP;cu?mDXYd}30`h^qcX zw(+|;IN;M*sd;S93$0SKp-_&hs;WI3x6Mfp80pm1l*_phXY^c4NKb3)eYFL2=hC2s zn%dBWeFM#n8*R_-;}G7YCL{Z~w0np6iH*(rbe-4X*39{Q+jT`nMU_a)i|1#D4ffNu z{FeQ(?zGX#_p@mWOgR3iWCh7Z�@y_q5+;a%i`f72F{zpd# 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 PC!WUr$0}tAtFZq87dddk literal 25458 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ʝ#MkVTXZ6DOuJAm`j zxFrAU#!jN7Y@?)8?+E&Tm~t{sP?;-J`Oc~h|M_&=`=y#M%k2LmrU(MtA}?!p=FxXf zXPwc>q$qaXMHXV!&Pm%=C{{X$Qe86qK!%89}fki9~Qrq_Av{ET_GkJB)v zGGs>d9~9DjVQ-Nq?mWZ1{ywd=BcYOs0LD`VPcTmW7IKr^u?>{zn@16LStQ?0Cw+q~6#ym0ykFZxXmw!57->a#nU*nTwz+tFt)079U-%xr@;)kyY6CjVG`Jq!O(C?>kP+cQK2+ z*-JbI()wwc;w8YQki*QclL(%;&6NDyLyy%x_N4yuIhSY*mXd}!PCqN7 z*7bLPwA%YX{?9SaL7jSSE%YV%LQvUX)|d#J;=)Gv*Z0!*4G>;-#cU0@xH0ffK)d!A zUxwvOM%y)#nfTDC-K~wyyZJhFx(xFuZjiP@*(JKSy=nhj3()%csPm3^WXUEIb$@@Z zqJ$C5kp>_UF2S$1%llQI%d5hoqOf%%8`~JkR9qH?aP9?&LLeOjSe3@p_0IF`Uw%|!*$ijS2wiS4BEOA z>x(ehzIChqWkry$lbw!>hH80!Bii&1YT@tB^3(da%eu)r1?eRr$2LR!WI@`4f6NeULU;Ot+HoF!_e*yyHqmzDa56TlN6rAaNS3{ul3pXyjEb?Bp$s zE|=C96AJKH-F3NQUrSz47HX;AUY7s8GP>-QYUhN}1fNS}aC2N;2t(cT)VjdaY#Wvp z8k#=iHmOFJ-C?OCt0c3NYxE0P^zXo*d}6m$y%m;OTwMId;2U2t-?XK5u!w(BV5VWH z&J$b8I7uZ`bxixmi>`=wNrr}r)MLgp$7MpgU5G}lK&BstA`S1o74i(|j}JFLOm)fR zzA%3M%Iyb8NSS)kYV30zLAp+=@;cT!S+$Lcrbb`ib6JEI*6Gipl8q<^i|_TNS}lGl zBe*Ui{E4r3ZO3k6ahbm%hY2A{-4l=~C^a#6w!Xy=DK7OVyrISGF9GMg(r4l4p^PIZ zUsy13u6sKpZGS6^p(Q`HI6<|N_kpV-E?q?(Sx@iR?$+^v@n3fm{^Yrs7ce74Q(P4qR#>qs7u{7dLmBT<=gy8}=oRDS<#97?FVZIE^9PD$ zlSMV}??TdaYMf2CB@=FVSN&l?^>IT5E_ zZ|y|{s#jS|P&B!jH0|XE z%8UJiY@_e(EUtCVKYQwlQ8$^him0h7_fHQgqI2lwzS`* z<+T!}*QF{&cq(N!ZdS7Cy^0-3BI43dv476rZTCz*z=YFv!U^}6oZl;4#$FF>`F!_$ zN{`OUpT)BE*2xD8=^WoK@q#0LCdOPcd$svodq=2}Um*7G$)|ko(q}fwN}kt5-QN6) z{Jyqe+a>fw_~VNe%QfF9yG&qKv`Z3oDX+|ZPX_w3Hxy0j`^q0EP+rWu2wJz`zTdsh zhJpPJ+wuLcqZRw=KIwr9X>|mZW7@ZU@UH5m`ETk8(i3B6#alkbN#5kqni>;an}6)t zNp;;q0W0%x^T^o3Klhq=_H`bG=veuZ-}6g}oD~zx#ok7{>Eyp{Xy4-{ta)54J0HBa z`fU2H^!j7f6v~^E+Y4A!0l0ExD(r7tc`fcH3rcB3r}6XiaQ&$C(Olb3p8n>>xUz1! z(#IU|2+`%6Mu?qtcaTwNxbCDTt9)$VsMu%~*WB!a?X!1<>WOjOU)4%_)Jpq&%-gQt z9(MOrcky!)Y0ZuDi)OdZWUnUY|GM^7p9~F9_xtznaDaAdDg$MAKV2dc%6TgC^Shzo zvb$S_odAdXnFYt--Gem~pXsB(YqPgbd4IPNVxe>kLQ~Ang>D^e@twDsxRfxB+aRUphD@ZLgMdh z(ktlSv+f-=z&d2pSd|tLb)%q#dM`pqDa4;l<6RKbc=>}6s3!wSHb>V^MWq|^)R?02 zso(!o0I#7jG&nd0;u&CRkmF2ROf$LJBzr7A&nJyFPxy`64vq`fKD%st+0>Bps~Vq% zpV^6+QNsQ->!4WVG-V$R_m0uJP0q%{7bW6t#rLE0C_%`CYDF(Nr+{FFQgA@(aI~Kb z8>9Zh$?W%ec_GN;>(*Z&)eYrPaG27##Ws`M%I`rJd&7f(AOQQG6I_ zrS8fU=hk2>`Y8eyU=WJe;D}R} z#=U##P!zKD3(kqF<-iHE0B%H2PY)E(Xi0;X3dw#a>tK84I7nL+Kxrw%%cQEqRK^$d zXLF4sxi0>iYmGbKYCC@*x?DijWO@G{**-aA^DgwsfbgP6->&qGVXRTsM3>ulBkK^M zvr5)>l2(fx($JFIm#T$y$^7q@SIJ+4td^xv+);*rjy`wQ`}dkz8h(CF#TQVas4QSy z0roGTegHC@?GI=o#Nfvf?%vI(#6N%XP`+jf#juq#Saqe3(0|uW(5~;6=YVJ~zeMEl z(2%Hv;1v;-XmYc2Ny(!9H}rc&#CyYAO19M0d9fs@U6ohM?aS{=XAA!2(Lnu$JQ`)1 z=D8zf_1<&EENv)IR=a&01XmIi2)t1Af&WN?PSehgYb&vDfdKm=QOMr{YLBIXIXLN7 zQmnQH)HL?9z9$9WcRpJ=Q!i0}OND_15`VK%0RpKF8a)EKE*H8G(VuRlG*?F4xLlW& z``Y=g+;8t$i1};<^(yS! zztp zXc&Gq0V2dG|DwSdJ4tD?u7c za;ZKxkd%Us1Q!=~5;EzK)ivc8hx+Z25o%_j?NC4DXl)&gw7i}KNA{qE98-D)y90g_ zWaub3sQRb%qG3;9w!-80_xyRxe=PMSTq+5fMYP#>Ae@Q_-W1qmL#`V>(HSU~7&wr_ z`hPk*&uF;5uy@2{p+tRKF1aPdgSmQlM}kAm9iE;JEq zi{9msj7 zMXn0|X7cNfsdX$p6>YzXBEsF|g#@v+kzWVy%)K$y_n5~=qeR^z??%+O5qGu)nc~QX z>BF0j@O5>^9j#Jqm!>wHH!ZUlx)I6U;9k@$@=ij%8Q%#474}EStY*T0sSDPXZQ&D@Dyj0oT#O$44b?PufpaFuY75CLs z_O-Rv>#)Esv~xpJ&K{tZ*9Cjbv3BRi|AWHpmBM zbVOn~#r+&{#gg{;I~{(po0{b6=Wa<^YyUM!v6ixqJqAj62x%An4q2R3$)Uuyz0{~b zNeFGBC!Kg5yY2ej+TyW`9t@s{YnHnJa>)$}R8-U=jt>mnU80X#?;xDUYt`=>T48$u zEXV>#aW<%Z8OIsE6gM*3pAT2iyPvY+oN_hMi*ONyDRB^jGQd8*7_4zGKKn#ds8k&f zKYd(swKz9eurA<-H%r=}*beUJFR?0=-cR@{sxr=+h-f`o!Oqmeh z#a)Mnjd1CRO8KMkimFJ z_!!@?%1xy-WWJE0#&QFu?11A3ahSRZSxP7?V+CI0h7fDGTwJr4V9qIj+<>!Z$K#Nv^2g zaS&&tMOaviEQNyl2kmnn)h5lfptaY9+uy>GcD0f;aHkisAqRt#x_<~Ef*>};6O~K) zKif3eEh*XE986C$@|nv~BT$yc>R<71?-l8%6!Uo4`(mPBh~B8=!7ER+8L2mZOcf#5v;h%>%vOGHbz z>~~l5EZ(GKRaC6?ID~NwE}HM?M)St%O4BP zKtMwxzi^=9ma*;l==HM#zkANVGWD6Yy}0y?Bq{dn9NO5XQ;3FU$U;Nd$sIzl@^6Nm zy&WcZTVV!)2D81S*YBp>35Y&*lvh>3l8mtnz-eEIrAP3s^$!rf)*L)%**pmG6ZR0- z`yECfxj>-=8gTUAAZWi&FwqdSPW_-;9rkVY=qjh0^8Gd#ELEhUo27n6cus|Gk-h{W z|IXZ#!;xiK7|iG2J82+sFh>-ApI6kFqN-0y8s$1P?DcBFmKHzz1tQmu>h?PAC{GK8 zv|6)iFPIMd=!w#$1{j@-A13sEIQG)4q>k8IYJ0`cO|H8k@vjpzo)W7~44JjpJc1-k zU48bkHh1XR_jOuevo#Qi<_QdjTG@$`PlqmGfdNAhoTV!C=VvhAnpoOa;+}N#bjx+| z=wzwU@2?tzMOM^AW8R_>tXMekx*(>o0EMrUg_X8=!{%%DuO5|ToQpOt9#U;J=z2nI zO}rnA4-kC(f2G2+70dh6?uxuA%&iviI})4;qkkR$(mCsyQoz89LH4VS541^9F4fpH z=+U46wXX!aHbdi5H>AI`?_Bha`&W{<;XNt1-cX)tUqRj{ZH~@d4YQ~CH-6XU8?=wC z`CiyHE!&sSRqUo(Z@`t+Vna#QPHsU)lQ-wriEI4%qht^fQ~AiaoqJt$)6y6kfB4;ur51{V%(~8Vn3m%Hv+=!m=`e zyv#7=Wdu}1?Tr;Lb6}i3uK=ba!{VK|6Wk5goCVA@c8i@lQ|@!itF@wXzHTkQMRc

!OU+E8HQW&A_(r>=;$^-Z8K3Ve^%RcO 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 UKc3D4B^HK?f~I^K;#tW50C$1CH2?qr diff --git a/Experimentos/inicializacion-pesos-red-neuronal/img/f_ideal_y_rn_con_7_neuronas.png b/Experimentos/inicializacion-pesos-red-neuronal/img/f_ideal_y_rn_con_7_neuronas.png index 3b2095c84cb6cd321e05c71d50d103270b9b8b95..0d8a7385bc1e57581a95d7cb8d387532b8939868 100644 GIT binary patch literal 25659 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 diff --git a/Experimentos/inicializacion-pesos-red-neuronal/img/f_ideal_y_rn_con_90_neuronas.png b/Experimentos/inicializacion-pesos-red-neuronal/img/f_ideal_y_rn_con_90_neuronas.png index e25cff66b9502fcabdaff13880158e2dae6c4204..95f2af0edb5c0dcdeeff12877c27d6296a0f7294 100644 GIT binary patch literal 24197 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 Fe*kme-xs~qFlduC^3W+WqI?~$EVHd)yt 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 J#VY3b{{coOo)`cC diff --git a/Memoria/img/7-algoritmo-inicializar-pesos/f_ideal_y_rn_con_100_neuronas.png b/Memoria/img/7-algoritmo-inicializar-pesos/f_ideal_y_rn_con_100_neuronas.png new file mode 100644 index 0000000000000000000000000000000000000000..1db4ddd97b22e5f7f829b03d3cd061617d5a4d0d GIT binary patch literal 24327 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 I@%Y960dQSTmH+?% literal 0 HcmV?d00001 diff --git a/Memoria/img/7-algoritmo-inicializar-pesos/f_ideal_y_rn_con_10_neuronas.png b/Memoria/img/7-algoritmo-inicializar-pesos/f_ideal_y_rn_con_10_neuronas.png new file mode 100644 index 0000000000000000000000000000000000000000..3178683cb131b1ebd7ec413a4d30aa833648a850 GIT binary patch literal 26206 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 literal 0 HcmV?d00001 diff --git a/Memoria/img/7-algoritmo-inicializar-pesos/f_ideal_y_rn_con_20_neuronas.png b/Memoria/img/7-algoritmo-inicializar-pesos/f_ideal_y_rn_con_20_neuronas.png new file mode 100644 index 0000000000000000000000000000000000000000..a25eace4283fdb48bf802fb8612e377510953daf GIT binary patch literal 26456 zcmaI8c|4VE_cp$hv{BiH5SdcOP{uOb#>_JrQ>J8y%yVqYln9w6na9jz2$|=QnKF|h z^US;U{r!DEpWpk>>-poppNs3-*Lj|69qTxbwe}sPsw{hzfQkTtKwNz!C#8-+;OHU{ z7v3Xr;L52^P%r!g@2P^U6yhBFzfZN99}oz7#3LyQP1nTL$>#>7!;N_Vcs^h-?~BrK z{OE7d2haHFQG73ZYN+>OcdS~|KyTdYMcJ=(=gqRR{ITwI_*bWIHnqPDCtRd1=%Ccp z9-A_Y^!ZsuIyDX=?1!NLJrNNR&i{TG8Jm9EJg@$omPWy4G!gq^aM|&Af8+dMHr%2& zS;S+{y2@ZG_JzeMT6R zDGBZ>tUuE;{yVSELIyXn>l9eOWwxXDIoWJo9WAk&s(HQ~$osthbWa~{oBZa&F@7al zJ~}ee;c#pI4G~>@LAE9v{M8K#3LOK3i3c`3gwLc+xkrDdD~y-hbb7rO6&0oPIkC65 z|C+9EaYI^KTI_UZAc9dgl!6#NR$(_C8|JnZTW6%(t!KiuPfIR6o!0UsY< zi!({gr%s&yf!mg;NI^tcN_T=lLV+{v8yc43C{m!uB_@`FA|WULg;JRkpYqrcLARZq z9&=2-XR`T~_Zah@lv!EVbj_;l=y;<({O#M{o30av>#)U74IZcU=jncJY-o6$&xAr| zC?#mCtN%Rc=5Mh($g;V;zdjif94xP(@XEmb|p-nd0rfKJn05 zcHpO}1$OI&*x0Ooyd}m9xpnK7u!snC{v9GZ(TS>87IJcJaXc1@NlDZ;wRnOq>jtW- z^wIKR6f_SV=Em*nC##+Q{%-L9Yag~YRu=O1?Z1EjvRW5$EeSe0I~RMB6b2k!U0vb% z0q8$vFNU8!eF{ep?-O(Paby0;pEq;`Mzv$(E9t>G%k!tLE^ zokfl$!$fh43yX`gNH^F~GwvHM5qkM&o2_)0iD<2}%OAsvNf>Ukv32~sYI2QER1xWR ze!35PXO$%ER_uN3SLR2XdSM6IZ8A!micWQ1Omd+WcKyyVQEo%c@S~-LNkBly*!6hN zCO*T^z@WIecqB47I9Sx{2!$@Uog9m`DTs{TLF(k|?f(1I1eaH*Y7=_TTSI2H4@)e1 z&57RHH@CJLe{;^SshJob_h@_1pscJsk*<;=+TGK$x4Y})>|E!(re|P~C{F)2G<0?3 zE2BPxfPerK6O)*j7z@kN;bKbW@_CXC2PdcZ!9SC~zw#mI5+FF?bkfyFVbA{kduhw3 zEh8i2>FFsWgV%KL?Ci`R?n`g=ytY;D&e ztdd2&*dpXkPEPQyP(FF~tceq%^+UU9lAu#@S=szqdzx%GH#hgz))qGp596&{V`VQ| z4fV$HUe3?WnVOj$9vr|^Uv_F}Xs9F!rfcVZb6h5&r8SyNc~Le7i%$@+)7I2HI6AsU z&EM72)AQ+_0cXAEp@X}-`=duenVE~9B>eR%Y;CHw@F)WxDJp(>F38I}_#{F(^PBgn zV0i05Jx$Bb#z*z+(4Zi|b#h**PHex`SRe|<5`10k5S z4scUpJ4q7KOiWCC#1;RXJMJzAN4`=5e{yniIIW1F+twEYP9g#VDnZAr25;Z!xHz|k zuDHa+o6O9aaLhhFKK|)tr@ZE-rip@1Y+_>P=^u@r`h<|83k<)J)6o@bvenkqgzj^! zx`a(u7}R^8Zq0X6g=Odz8ug0oC))elP1kwBNv^J1N5~E4>sQoy9jlX>^~C&{S&v8t z1eo~|^z-LWUtixpO>cCnqPr|CEcQ?Lr>V)5lLUAF7S=1v%U3(hcP#a%jW%-VmoGV1 zS4_Dp_*g=sm;+daQUS2-!xgB<9 zCwB5ra@NJO!SB+ldgDXcO1o)MbQ=brG*p1%_%t*;+=8y|U?v35e*O3FB9DDrQtA_c z)|T#A9*b*D_crR!MHx(C&+vR^78cCy>k8MdUGqNLVcjQU zXJ>~67<#RKy-7nuNI)<`(6WeRXJa$(j&Jr-6Q>wczeTU~#Pg-SS$ zkPPw$pH);)y%Ut1iVBFOjpmIa-F?ui_jq3J^EXyqp7*{w<|?#`b1?m z@!>1c(;bad()Ed|4<@mhDk;})K6ropG+lievb4*Kf6w<1fbrRGp^yEGx|6NWiSP*s zd5FL^v4Ft9jP!K-lAZJWhO)9)&~1?Ej)F;b=8&G)fEdVBnf~U&#mQ+qT5N_+Rb`7dH#cAT zTO_fxwzjssdZvhQv_g8XpXUT6uUo}8S-X8`hGe!d3* z1wdoI@5_9~&c_#RDE~krOFI|vkAo!W%C)2)n*iR=%d+@BnGi72B|$1O@yAs@BEJ*Kl!h zQRpf6zxjf^-(&4j1&>PtCl3Ib6;)KkUM(mBG>stt;F-wF2WzrHP=-)&)d36u#{Vib z-uV3+koiMwY*r!vtA(zLY42mG_bw1LUdMY2-3hg|wO2)Z7jXaB)t|~B-DblCu5`49 zQOhFl%Nbt;&WBDda{BwLuS&2Y_*w5L{m$<0?)LWh*JrY5bR#g*kuEsNq`EOkx8vQv z`vWRshBdC6aOOao%v$4}*2aLJuH?qiVe0DY;4oo()`oI*Ad_2YW3VV*u>efcNxo2mCL2l`in%~095;TSPST#3yrJiF(7@;PhIwg!yZQa94#|Dhkxp~ z+zEgKXU4d?xhZ#l8bkmbImE z7Rm!E_Cp>3UIpFO7007g5jNS&sb3zdubWH%g=OXBaQmpSu@N04b&HH(*KQtSag@Rg zwP=7R;kwvE6a4v$I_rL>y}5Ztem;lNz!BZmBfLZ*mmaB$Ii@I#nVA{vjxcTbDeEU6 zw!L9W0VJf4GV*Y(V!E=orF<@c!sy=D7O3mA;lr6KbY4LZC9>4B^~$X7M92Xv*bNvR z9mRS5y|c4(=Y?tbQQcMt`$S`LF}IG6j=sLWe>kT{e@~89?#LSe*jpI*dFj)peRzkv z1&<-Tb@r^-?Pw=kl?530;K!oerSS?bm+PxKkr~Udy(M?b2+-)Z*B38W4)NPg$RU>} zzX`bLe{I#PJSOKy0x_)g`UTNLjK0Ols8pl7P@ggd|94rTiwGT`QD{*0nX9Y2yR57% zTJH8l$^wm`Bfa^(rD!TjF>m4H4?4!`nwme(7%I-YpN0q1h`0~#5ZYP(dP!sQ=n+1{ zmkxX1mXY2cjRAyJZ;&!!Q~(u;5fS#gD_XYmkkv^Zo++pJqd)*Y8o56*9sx!UoD9JI zMqU>1sWh3epJHT4+*gY|cQ8f9p(~*`cmh#R`>vqduvPpfUp~YsEiG+}kL|nVflN|# zx!rUDSO2mj$RX;K-eKcC)pU?DTdp9$zu0Aew6hGXFDonS`*-nm zjoP!LzY|t&Zf>pNbo-l|Zfj-3mGg`;q5pPwML-WhP&nlx2?)0K_f_QN`mD+p1Qc1w zloR-sQdM6vla3Udh3MrcKYW$(aQ29tL+^)|D-dWuKR^4~mK&aqi(PS&$cOGbEXVIB z+qM_FXK7#23OVP+37MhW0HOe63w)N=*Qe4IKF-WMjZ?SllEgWHZv z{r>*C)?@#dnDtPO78DdRf=kDYL1mtYTN~X^UX~}k08Ior_2%QpVV7yIOfF5fXbcJ) zqt6a7sJ&c0ZEfv0I-22mCPi0-oIinZNbFesO}suFh(fDr0v5ymMSl2Dm6><7XQU)k z@QQL#$viN2`SeJkvs<@s|M*?X?@^qz_W3KY=cDLm{)BUS^~y;w$vZ+OEqm?xKTgAH$G^Wg`1$$o+zFVJO@X^bM7##G)NIB| z`*nbQ1GIufw1n3*GD@ziDJm+`&dt5J_x28j(Cym-0v|;v+l)MIgeRJC_qLy$FpIeF z(4TvjbUpVye8EfW`c$=%)@otXwT0QeOfO$P{i*CdVl*2&`*5N0`C^KXsQ1YOcm}n1 zdU`q@BcEad$oG|@TmhT0AGDn2l;$9SJVjGZBTT8J)$me&{v9qPMFaT{GsaOG0PSji z-fN56!(7@Qt#)2J`rUBxRlMQkapSe%{))M_2*!_`hBMk=3f#dg>8rChG&JDd8Cuh? zcG*Zy#QscF*cp3OHPi)UJQonC0N!nD^7QEpWSJLKq0rDPwwjb1bX_Jh1G(qdL9fpV z3YScQ^xs_nwozSO4Z#&k9kXh$7AH;0yn5s4QIduXi zP8+UcWOO!ak#ghw{o=bzX3u%!86*P@>O89?-&}+Dd*$S0CZ_mexS+eUbHJ+1iIRxl zX=M-yHRQzX`Ps&Kn~%pEfTbZF77mUzU^rG*Rv_NLJo;c@U@&t31D)5-e-W@^m0QhG zcz)@-clHQrx_Qp}_LG0+aifUsVat2oKPs=T)=*;wAioW_HwoyH;9vqYvgsZG&C}y| z&ssuFRCY+vzzb3$BGkqO(t!jt1zrW=t_#{890!%e2b++5U!S$czp4deg>NM3E7uyx^XCt< za^i2JwgxYMtNCt$X<=|nfPe{Dk9;@(2h#KJp6058Zn<^ba`@$ArLN9S9@pW}=_tXH zii+OO&XDkMc>CHQ@R4|_&KF|j)0>-{Vf8>;Cbp{A^Z^(R9zVwF(YJ4rUVq@hRm@x~ zlW>;Z%K@3`={IUxPLKCh;&~t4C8rZ|?)s#nh$Keh0{N)-Irla0!ezNbS6G z^RXl0e`@Pljby*M(j-#nvfIRlQo=+1UXxbSf=|K`qobDUO7!tTe+aoCIlH zRoUZpY7@#B8<83smas6iZ>J1?MQqt0=yTis7 zJ&EmYZBGhg=8agkLT&h4XdU@R=ApiP$;->T#z00z761PI``Fkv5j-=hW9QqqZ@(0( z!@PGt7hd}MW-wGBUg8m;I7@J~`)lZi_E39`E^ELpbPLsVfmAO37@wE#l3 zz1S=E^0#kA#eQF^BzCtiERKxm4h&&68OUS6s#iYED~^JD=|drXeSJW%A$vz1QKGY% z5i}MkI=bGg_<<%fv$Kyl#1yVHO;kH|PEIBz_+e0|L*K8Of^*s;)*pJqIxIFe7N3*} ziRGM!Qld z57GiO-$d7<1<{=ws~a&~#96+savYp9jga#{SK;-ntRs>eHXloz1hGU=_|g99G)T4qENz zJuX=hJ{-x)&+PhIl$ilN^S4%n)M1M1bt=!`UuRx<{t>iE26h|ZL#Or^}RbE zgjgtzP)zGAu(`J1RPvn8UBjT#Mql&f0loiVA$tEYSKe);m#3#UaP}anVu%2c3&7L% zKyv{v(yh#8=RISs48ID%BT&3xv^s3A!KK_ z0Td1Eg~J=dHW_GYYFb&Xz(aPnb)jI8pv}8tzd{lZ4i3WWUZdiDE3*0Q9T-Q!pRxM< zDmDK^t%m?Vzw^pqHqcsu2e@41Az+$2!ts69PK`MC@#|AE2->NExJoJ=_FDU{gRh9~A!+@^0sLOL7#FHgHICV}-y`{3o1 zMhrfXZSG{@=9?fgL*Kpg-kN&^8(d*M>Hszr81e8{T!0z^l!2dyp(H$fwZK9a+}73x zF?r|Col~%JBO)T$qOGQC-0)g`Rs!<#*MhIJI|@$1IRky!hgHytdb;*~l4xNx92Mz# zL+Aa#tRo6;p9E?Hm|bue%7o;`jceV4rCvJR+_I>+UokaFV{b^vVF;5I;$U^txZCdgAr^be7d zK+BzAm!hJgV2`C_WfOcnzsZ0b2I{m9TqUr#1#BlMsi_mdo`9_bFD5K@CqfkY_ z+(*wHVN1QbVauQpf`9M?A|HZF#OLf}Fk1u8bv#w_4VZMDeq4X-$SY0L8gAdYQ~R%x z5N|sf@B{MEzRp>lT_$qA0BIZ7e1(&s) zy!_9Pmb~%c=8ZftMJNrN9_`K=p{>p`Ba*1v#f^-nwtK~T4Ff_#LKRwl;8WrbuWGyG=YwBzBW%MWmJjRCe*js1N{NT>9gnHSWI*PEk2qx z$pbj2?$WSgC41)NlEuZsQt5ffef(!{Z|@o*VXlMRPl(XbDw*-J7XmMTi~G}gL01aO z`RZ=-QDa9(M^~33SY)+{zNpB!xb~jvcBUVYE=KOl>9CP@5a7V1>t6oB5lT`jG^!0% zDPq2JXR^{h4XlNG_ufysiFlvrvXHH`E=Na2fgxL6S-E6q+z8Es>!3XWt*2(hZl`}_BI+R;j%^SZFGu!b-37*qhdA(XPdNHxVU=T+ra`8 zSlU>apJyc_P*G7?4^l+Ssj2k`5K=feIIOO&o}8X~?5?DryG4EY!1%GV7EGzL+d@Le zU|Mj;b&ZZb6c(O%vTAHY{p8;Y0RaKl^?zx8M?~ZlFvO~?8fY^Z`fAylkR$5ZgRUoY zfLeuy-?a7gR^aJtYm;fRME>~7(77rwsEP#O1ZT9ZP425M^i;IqMZme@w{;Sn1cOxi zR>WqWp%!fRN8qd!q@+C7BlljdP}dmamFn35OLlN5mQQzZalz8DO?;j}6X=1tgCdKN z<9+%2yYt%Eb#n5Us3@%c?OK@z&6mfvwgsDS*no`J)YL#s;kB}jJbFA@82jy;2f$hA zWw&3416d#8Ea>QrbG--|Zi|Q*<_C@cN-Oa(y&NC&yppiSor2I{@YWS&3ja8W-mIi5L^5e2!L5IxZrKXSL zsJ>W@8ig*@qeqWg27X-BrF%iiM}X*kXA%q0#7Y*7jquzd?|%)KW_P#A%M}6Uq z%>V1dcySpJh*C==8iBCvhtMi|kPBMHT^EfGk9?7LV@Yn3-GnOj5d!ffI^GgRf|k0Fnlt#9Pn+{oj!HXuu~s> zUF#l!(`+d|0+FXgdJT=nycS_!A9@-8K11%Z2ix^b{0pDjkD;XuWcKc4a6Gg`p)=rp zt!#dA5zKss`}ft-`d@YeqXe&aW1>of>xG+)k|0w0^`sW-CZBfGcQu41xptne8ki`{ z+Jkv@elMXr@cQ-Z&KM34aIS#npUkzBmJ2g5G)zyQhj7(V@>vZ++w5$W-5vX+!vb2e zX_=%Cw$*x{7$s0RzUjai06&Y*Ast%OK;9cYlU2>ugmyMHnH4Y9Y~zY$*%*LzzILZ5 zIEZ|8IEMM!Ue#lX-l_uQOm2FoujCU`RJ(b?7>`r21T3iMUtfA+40uh`3BJYlip~0q{Q3&|m@< zK6p0=|C)%fjjZ0}wZ%n>8#iuHQMsR=d6kdNG=~7Yg>e92oelT2PE1|w?V&VdwG#CF z`AyqUWqL|TuoCIK4^qR!d*3rif;9(F|KHeyx3~9^*p+M7fLlR-UQp0|tn@hp0|U@K zP}4x`_IGw}0;hcQrWKHMqyrkJ;NbloEBotv;UcVZ^a0dNeCU({%>+^e6APOMo6krK zE3|U8t%W2dB`;s4(tP}Q8^a9#ktwrmI!lhiM^5gzP?Wm5x&tUFR*ei48Y~~6Zs3wn zQKjTa#PKy#HQh5YF@Y7R=MGVD8Y~SL(&^X1df*JlhK8cOfWwW0iF{;}!crtVn%)%o z_M_q;{>xA6(Y%9$LWn-o=;v(_p)yD7RA8V7`u z0M`$Q^phVdS-4^Kcp7uIaa zgAJy@rS;WE6ozXum6LXepk8}}xaO)m@IysLM}r!JsgO}=;11vH(*h+Tu6E~Pn*zXk zHu}>pf8(n%f)s%!iGX<18Pm=N(|A?9nvOb7!paKn1ND6cN*YN^#Rmj^kx?(&=$?l; z>iy`B3EJYW>A$Kp09_@M^LjWWum{iJByM4l0gWK@4@rL zym^x%>=rrc1fv34w@JXuzjdo8MN9?xwX94@UVf~|L=r|fl$Cp+ge%!$K>if3twMZ^ z_rT520N4InH8HVsUYM7c_`v=toC33AtT+-V1I}x4F^@`B7O;~thR6H5k{msj`ck!G zpw~L_&84@gNs=x4mvQdd8}gt_$==tA>_TunG<90vsU!wy%G?-G_PdR1DKQ~6x8D#` zLzp0Si&I_p;bxZ;CP0Ds}al`T6D;WB^)Uf1E8vw*I{I>sJ$^hvZ~r zZ<}W@n0n^xaRPS9n_kS7nTVvMq|tLS3JRfz50^WkUp8_va-s~0i?fGVh4Ke2>oO2L z&@Q{f%sdSq#LnOO@(*5tkSr+8x$h)q%^MN~+$ez~;?1#ownY|Rxr zRxMT4@4revS=1i?fHoL(KO$pd_)QuyFy^4;Qo<4@^9oFg(?e;PZ=s{3BUQ;ASl-$A zdhgS>E!!HUR#np7i#KDxaknT~Ye||{Ql~aI{!a-;I|>>`Gmpf-!_FeCj=lm(IMH~G zM$n+vJ^J(Y+9QH0OFSpYw3__O+Fze^CBd^lO=x8%jQ_AyHn9hKX<)BrWIQ6PJo&a9KuMCg%{rhjf@C=Q5MPEKD3!W(pL2236@$vx#*UOl%R>_QY##cw!V+x2 zs>C)oi5X>3XvnBm{!cQ3@AS%wS_FH^Fc7K$f%r-Tz!L$ouv!xsW^NuBoi3{*f0mZo zM4{)Gvs@AcZvEst49f7Ea)+1?>WbHp)af;nvwUGCpUfk={AUsqVSP_c7_r0z$snIz z%n&#`ly;q6JCs&LFLwyKlh7Lhi3^-|2rM<@TCk?Hayrt!WOiT>Pfbn1%!g6Y6A4q(ImjbDv(_}9^D{tVDCQo}Yu?|ORzX6uRMF`LbmcpB zjJ<|{Gy%V@PMX`=*@49n{JjUk*efhoS*9S4Hp*|$hIxu=Q)JvY)$YSC__U!5+=`OR&|_Hz zabF1r2tePr>gwX&mf6jBG(zRTwCm4~Ucl@K_zCb-4hB=0fIBLu|!>Zwvja+BZA7>dDB+Sfa7* zexn*!dl)$c6oh8JGYn+FJ8~M;z$Ak0UT{nxJ;8cfWzn=03QzFqiVZMZ!dL!9U%p5& zeW=~;5yGIrNK4Meo)i$Q&W;XPt?fjmiKo4^7x5*>k83A-nVNm&TKjKB)>x|IS+z)y zb1wgd`BlyC3HrRPxoH?21=(j%xRy<2##s8C&LASvl3K86g#hE|_-Xw*Pwm9ZOP3J5 z$)%;GQ1qi>VhUjB&Da&}9XJzdSy^h$De&BYhFFbT=oXu{N8V9*nOymYcezTY%G&>! zme4G`c%&Kxg(<=sE8Cd~3T z=c$$&tWs%@Sd+@U<2WQKdGThpN2Qhsg7-7j`iY4Nh)Sv`sK}1s)*rng2>ATz)Axg! z<)1&*s|*TKtV2jG)}>6 z8nSW%H)(W})V==vOvt0`0fQ-&T=3|j#X%+N`M~4)1%@xBrPvt~umF6(f0aa|N2wDwRuUWrJmSVs1U7iktRE8CPwraPdubiGe@(1 zn99O1Dok!Lo1)@JQ`0P%ZlLNmH;1Me7Qujkp2sKvN=%f;EzQBg?= z-~b#Dplm{pOYcDrhfxcRytoL%1|gnyhGvBoAcMN_o=G$bqI<)lCK0@~0 z>La=Q@p<6lVtf=F$okMUe8Q>^2m}H`!rhA&F`R}S_qxCufpOF==)Adkcua%c3@&4l zc!>TNSOMmC>mjCFb_*DZmhb_W`jYV3>o>e%QodOy1*53=HKBweuEx+7y`A?*?n1nt$o<=DC2l z`xKh5fH6MX-2!i}QkR=`lAoF;7<+CuL)XWQ`?0F3D!9LTdSl=dqa`Kl4;K=?fBz1t zVm(;wF!74tSoR|n`+ z5esVvhW4)AoLZCTFR?lfHFZ5|s8-5;A32*2>sfz8`G5csCdC%5?KW@-ZwM0rd*?8A z35`eMV>r&^zkd%74`Hq_^jL>i2}We$G?!N;`ML2Kh9-w;R}|o>Bxq})eeKC?_uw0f zoEH&@vY`_{Rk8_vCxPUCt5AxnkVok;WLmu5X$ZupDl2b^wi1_xZ*H0yceJWX(=J8_ zD}ywT%|C>#mLi*wjU&^U|12)cc8TX54#Iad-V8P7yq;f8sy~10%FRm%U%lrs5-k6A zo;m6%*#>Ujn#iF=Agt2k3`J8xf@LTMe<YS((uHo|*nB!9^W)ETkHKJycH?x4XEI5HX}z?YNBXBEEnBWI0ebR4<<#i5p`Z zV0MLySI)=8to8-my|bac^Y>$QvHI9Lokqx5-wzGN^!7N!pt_Z)uypeurC;a~Xl);TxvEjd?4$ug#VH17gb1DLqobr;t<5=0jwguP0WatK&2CX7 zE3GkQpCO#BKILz@$tJ#Ca18>@=`eE}h4GuqfE;k`hj)rb1k{yWw#6Ap=y z`G@mKx{W7=gl~g>A>b9XNiZkcHqV8QgG+^uBHumWh21bOip1`xWK(p|;tr92A0sS? zM^_EC_x5hR+v}yXI`hWH0( zvwP3Y`VNKG_)<%zVF$<0`imU%|BW+4dIm0R2`t;A}PJD(750v1Om>!#; z)Y1AT;#pgJW?TFDEB&xkUn{s8Ss(r`nHhsC_`8n<(&=fE1Pj5sVO(-fbSDl?w#S_- zk#O!g&ypnM@U5ki+*$36q6psB`gX8MlEJcu@_3N=iv^0L=;*0<5CI)?8F!r-i+=l!=3(zU= zArfDD)Ol?q)*&^^Pc4gMk`k=9$UH&hIjxZU*z{}p=6>w92S;B{4O2m>>B#ggvtsQz z>=lMomhryV{)9b~Sc3;Hm0f0FnCW}_oq17%7|c7>>wk&R68d6wVd4pKR?C41gt&(3 zDI`RMGaY55o6#FlfE3E-#1cz=JWn0l52+9J6a*k9;&0ZaQ}fFo3^_3j8CDein_^u&llyC3trwqI72oPPnK1ky9|wU5dBG|%lH(#( zAF@$%^ZuKeIQRBAGsTK?OVO2{64^`?;**&r@gfqRK{!*}QztxlkUAr`tSk-B<7fTU zFrRWR1n`WWJUDDWCK)?Om4|iLl9YFPvFrAY`F!V+Nw}QWPc6f$M#r+c{A^i=jLKqr zs!Iq2`7b}e_vIxNmv--li5X41T5_e&FiNqXRd z{P67%C>dbgTpegUG97l2dc4|Cl^al{X77gmK=Ot>dPNY?P&}b%1O4veIENutpzGYw zse*xXnD>Us^T6k(wZzUy6W)~$X4Z_{fU?g8^NaundblNiMNkmHdC)6*a-l*scc?(W zVjae?Z*ZHo0gnS?2`rS+dtrHEWM;#Qhg3oVCbpUeqAdVcrAQ|++1R9{)1Bo35Vc>4 zU{3Sn`}e9U`BvgHMGPJKA02ZXNS($Wv7qH-ZU_b-5Wfo7DFzo87RJWLf~9Wlr9xv9 zcur34-H)AVX=!V#t0Qmhz;J-c8AahLv|7_hkHz=JL+2PnQS*TpSwZrt%KVGTQQ@1# zru9V(0_c+0VdDRPqj^ohPxtP^rd90Symbkd2svoB!*GMr0Omc6yk~1#eP*?*-PN|V zWI65|7#NT;(+<17qImC#=JKC4C?s)N0~KNG<$mY!gN?89`6gs6W&TGKVa;j3FmdE_ z-!RpE$ut=1!@P$<(!D>>3kIs4lM6G^I5;@&Cpw^FS8Ap#m~H8;2Zrp93y zp|i=*wK)7&X$1>BhKboN){yVK+$HW9GU!DOttU**4VnvqNBRF7dD;5APG4)L|@ zH~sA&1siX-Fax30EBc(HeP2p=qTi0IA`rS|<4g-6igsZ-ppM&2vVTW`rif{V|3$3~6Nl)q2_`@- zVGdCw{@1_MTI4Q%{aIlYYM33z^n#fwxbGLCgxo>Fx*z{k&X-Df7B6hRlO&4dsY9Eh zF8dK17Rq(Gpt4{_oY#!w4plYY+tj>WBVIv4OluPWWHFE#)2|ah_TH`Byd^+vPXfkU z1opxB5(fh9uhh(Rp1xInQG*m%zJw@xifpXk)c4pl7|U8W;xQWRjBb1mkoh8j{)FyZ z9V6Mt+{#b?)o=DdxMFYVIzMY_V_zrX=0d^ts6|uLzK;w*P6YSQxhf8|{r=lx1=%Yd zHiuu*E;^;5lHf_~82XdTkA8#%k1#3*{P|+_K#&0OBp-!2|L$T>QNCf|yo-@=PqLE&fO{bkqTQ>(lyiXN{ z(RwfQ?nBB^l0MYDZ-mjRzCita%Op_R4g6nH3JlZ^S%UN_e-Zq*Ry49PM>Xp9jPzk# z?L_fCf&ZRQz<|s(r{K@K#qszsXtQK! zb)?r@XjT=8BGDR9DF|v#I%ieB5_wdq2@u@48i1loIT45hNd(tgYAb0gQW1zEZe(M8(6_6D9RzGCUr_)3 zeuW;{Ej|!=A&typpBP>JKqGukF?;N%5)@W6*TUr<6PW=s8dj~?8E z#KAG31iUPcr#AL>5G5oJw z=las;(Wr^Lpa=Y~Z`xyPzwRYm6Arbg(|U8pfc)E7{>u0=ap5!Pn+tju5ti!* zF}C8{Qfhlm%wGRm%UKsaj)eyQJ!@1J|0U8|(iDRSM54%}fKlxw-SD$-Itqp4Wg9Q5 z7g|gw3ocj3yy@Up!g9JlxYruNljkYIos z|E>A_kc`}`yI-R894=A(h8rIt8!eumpX8>?x}aJ#+te^!1YZQEn#;%$2qj{_e{pa9 z-20yfZM9q)7|J*rI8Iq&ds%h~9_df-sr}RBgZwkAC9>*Zxgt_0(aTt#8-Ek`PYKDT zy-&@1^TWMy1?2P6bnV}P`}i_lme3_yP4Ow)S+bL|U|W=NSGzobC3Kb!D9o<-$o(jb z4Fg)A4ymL9PR)Rr2`&k890V^1vhnE8J#!gwHx$jJovyQ>Wn9(X@L+qIN`!tz-XpG; zM@k9R4MyxfD@RcT3}CNc^(&fs5Sq*>woPaF__@>dK=+^aZlO0_?!#xv!)FC<%y3?# z(RF{S;&grW;C9}1rz2Ku(N#kF6^V`#`IMcEJyMczcDnw#W{D9?MEj!Xk$*`!?B8SR zb=^%poUX&WzxkTbdqj{q*~^^WdB#ALmyf~Fv2A3%5?v6vFG9_ezMm4 zJPP5bEt)x@6w+>Lm2YtnpMtR0UuUKid08ATi-l2y?ResuiQYdbWz<%#;#QD7hn|FPE-TOTH<3}Ci?&530vO3S_ zDkJOpZ*Wls;a9@R2U>{mQqj;D?ijky zk;md4Ootc5%cKQ`hl?E=!+?l)%Pv3TXWw<4edpkk^FQQUEZn6WUUx~M?f%4sZ2O9a zI8Z1Ui-zwGz^ETgD8VW#`|QCs6;IZlHNJqFvqx2h-p@$|mZaNqo_ zm;&~@n%!ru@HJcLCBl4JE+-PctJV?Cei^J8<(bw-g%ld^U4P=}tgzYFI&168 z#q?@6j4>mc+q93zWwJ>B@269lGY*bBVPM)B9M9cd>tC{h2hknO`=FBsKUN0Iy=Qb{ z_%HA7F2}iJ2+8jv@$up7uJA3>pJ1yU2?;I57C}D_>s+x|49&FpDvyQ<4{H)AmX@^OqR~(Tc*oVJd`g zvxr9cOBliBvFOPw%qYcu$5k7#Kj{g=F}aq9;r3v(x@DWcdWOG<*>c7OM5$`*i&C}C zN#V64;lh*`fw$%k%a=fc>5}*reZ{64w}_UTP>dI4fXVo8t^b_`r~>JGmq21odlbAwC`HY7un@bZX(jM`c=Bza#E3PVo6+9ypmn7i|jAN^KJ+`URIGv%`eoc#?X zy7MKakcJy`!L7Ax47WQ%TCl`HK?0?R$5H%>>b%@~Um&#F;fsLNgV`JA)gVSKeCbOm z)n3}Yep7hzV;yl>{s&`42sVew;TN}C?d@1O>C`MlL$^L(n_Xf-_}-yMas*jy%>8S0 z9Nn0fc8g5I=Gu1>cq{W^4@w($e2=1YZDI{wlVw;;sW1|)kjB!wxxu2c=GHE{FU5of zoUp4BmTsOpF2|{)(+Yo zc~Pf7e{-k2U+Gj_s1@2~MI*DbeiH_0(cSfGNFZ=-yvmM1tXy!%C|y!n8Qd##@#)et ze9ZJwi@R7pLsx0!obp5=@_q@|3_Tk{{8T)=2%q@UuEQ1l1P`C2&eC)Ys>*;ddW=eE z;Qp6!(eBN==CRD!H|-@5Y0PLg>AI_AWPVuofoY|W?D1Hbk-JjJKoI=)n#4#caI8gE zI`WP4#~)J6K99K?SF6juGvS7iu?VEMcEGh68zoB61T!gATf>kh{uW)pPr5sw;JE(f z!FnT1zgvz?Rc&>pFs+1cr}GK=9SdAQ2s7fEe2`M>Id?DII*JQE7Rbp*w>6@U-rT-I zcM0LjgluFAj(IRr_aM`9kqV3TPDXp_g%sRG3jM6Oh%6yolY!=qzM=AQ#Atneeu3Y6 zS*F8&eU1B)tT5)mfK1?hLt!*bHXmd7P}?wI^z}}RW)hVe5}~RC4-T6lOl0O_dswRV zAwkV7KwLJ*U&M)p<`Mi_7TK7g+&4CE@*}EoI;S@NsWyEr>m@)P>~GA!7fj35CCD!S zvC-nB*-&66=MJ|YCqVcLN}%|Ol)35+lUSLO za)%~uP^>uME!fqb5Is5wxs)Jg!lreE?&7|PP}PTRP!wD;ODI2+7SbVI*tpNlb^HW- z#~M8{L7;Wh?l0M$bmqMxBAdfGEo^*eUBxxomf1Y$8HkB$rqwbM>y7#E@AKjBMUn^G z`Hr5APF-Ee3`a6Zywmhx#V#q9P{Q&muFYv;OTA&`A!*X*SQIz=`?DL8=HU7H)0dKz z8y<&vTw^;hyOgFDzMo$B6yCts4TbsDj@jmDUGp3A;d{rDjY9-uo?k?tKlF9eor4nojo!L#nkJVv6~TV1vty`Gshv^1CYX%Dh?RpNx-0v*fQ6IJVbwvJn*H#PWHZExilr=|(jdB8LqfzB|fm^?#K@I|H~O=t4Q zA83=YqA(oqDu+=3qT4>YZBuQ-Bbk$K2^x;e1YO;D2o4<16w9F1-Dj%;>MYupCgNZst3rc$s9XU zk?>V|>%5`2PPP7a_0!sy0DT?7TJB-~xrhGggp#foe6sAweoh*^)M7vkUQSZh;XI$N z=dLO+D7dS^qA(v#P*rZw6V=I@o>&+;uGzuv_B0?&v*#n3dZa;zvJK;((XpW0Btpyr zL^{Lnc95s@Bu6ftP1&pQ=CU_*RN&Mh4e%tzLObNq4o8$*mds7 z!^fm@YDBS<$yXT|7W752Ql|T5Ms8~oMC9noZg(D#Je)3wjUnH>eJRQ?B21wwtL#^~ z$UJ@OV;tvK9P!^LTi22b3HUjO zI?VQZ>st(YdETFiK5`Kbxv>zW%pl&`Xvrri9RzYyN4vxMca%ewI%lD38=skjp&M(u z=08n`1cHa@12N-r^PZ3HtLRB75VAaCP|-7C>_>_?l{-h3L@|G@h>(*a$(CYsA}3*H zn7?~ll>f`O_YUMF-UE~wfM?4Goa?sRzsPL$3Zgp`TWY13>cwJl;ywFA&ghke=A=c# zSa6HTLuK+cqLw=3OVhaxA7_{6NvRp++~rhfmoE!eudW%9dEBVOejR=MG`Tj^&R9-i zi!~cfpHC*w*U0}v8~tr$yIDO|^C^48n1Xc@=Eq~XD*Q*j?;jAdW`F-#ShR=2h`XvY z!+-67ZKAyR1am$y@&Ao+TaaDJ1mPTi~93rf1q3<1?8cuvzL{!(|hq zLLg51NrUXgeDhc&I>{h|gG2o~MKnd{V6${6nn{&RUC<^j%qu9&i(#5Iyu6obFF^R1 z;49Hr!apA4<0C>Nf`Wph3KLR4l%&dtKXBffVfvgWG}rZdlKLcUW;2P|N7v!s$CHgI zm!wl4p#EsNX>Cm|ftBOilb;JX&c5OF{i6)i)6ve+IGaq-_(;YYOrX^)9Y1qRPwlqm z9EG}LP+z+E?P-1IOMRdykNgtQ=c5 z2N~I$Q1;H=BYW?p5XmM<5wb~kb{y;2j`ewXecyk;_i{Nuo$+|yANz6c&)e<#bg@PK z8#Pp|Z(w`D%>6`e_D5uwAXlb!2$8%LU`YKnippNi}y8%>Fpo zll)nW57q#q&aS_DVsI0leLi4W z(&TpfkQQbqk>^Zj;`F^?e$aEr0%T7RKdh3HyrbN3Iv8M(&LsDrxQ3gV*IkGV>ViMs zUQPmK&(UT2^TUB-_>+^jGUdy4?VjGP|0Ln8oD8-?BQT@Mkz}hWqd3LLez_NCIOXLM zld648`hP1^P6Y=C{TXd*OG?^HLL)Oje=76eR&pVp=u6*&D|2M@mub`GR0Kf~??Oy= z7bT))JKwGjrmV$24(Hn)L>-o6^2}P=$)u&Rue$9Xf^=aOuPIOe#LxYki@SZ%OE2f| zv*gSl9YorovirS!lv>~ZyQn+m$0^WDsOHb-A0<52#rJz(z=y6W*{UIWfwRZ{WCG+y zjBWk3o3^jFFcQ0>7ZWFs57N6)o{Hey%tu%6`(_^Q%!B1`@(yxwo*pr?D6e>~2L|GvJe%oIw2#Bh%BU2K3`@CwX;H3N*-G;L>a9P!KHibw zjp3PNJQYJuh|j5w4bS~d2)-A>$r)odizaEGihz494fP^9Y+kTuE35tziWR2LW6efq z_gc6rv$IP@D+2-!`>Th(K{4=1b_)JQYX=5N)iAf(tnAQ~^!$qN#$tz>-&%A@#kou5$$hF*h`BRG!{yzX`R)c& z^BJQ6diLtESw3y!WU4{Sb{3V7!`3OK)coP|RZ*+xM=Y;=sq^2;#UkM*(W`s*RAiW= zAti92e+K{{0>EPgm?XkNLO4hY2n!i~z~r0iRPz*1iC3KFXw2AHP>R~fFdyzM{Pis> zKK(xlJWl82;L488-wfkZ5o$ebe^O=D7f*q2I>>(6Lo6c1yH}1LS>0n8JuDvz-PDKP zU`Bv&&Sx>4G69IXfGkyCpAtx=-t|2(NKVXSj?oBkU#>g<(v;-&0=>KcqmJautK)1u zb>=6qu%o(kz2CD-jh}1QY&y!)oL#z@ACP8njXy9^Jw>hE^kqLZ=Eq~#_c!~{e$AE4y{inTMKH*IvDIsST!2)70f)ssV4C~LI2 z_lP^j3P@jaK1ZYaGIKYl+S$-X%gu* z8HwgsD-u7d=J~`#QCxGLRE0kk@O?UJlg_G`5Cqb}*j3soXE$5`6UkDos;UAWgZ2*K zWzf~vmxU6(NYyPeImJiMpNKN}ir93f1Tb#KLYMCN9>Yy*Qsy3q=hG0`QbU!D%YV2y z9X3A1%+OqR_g7B*v?DOB;i`(UiZ)lVwRu@?0nrF}W!MF=hsGrTE#fBQQy3vpVNqZy zHg6~2$#9 zF%c&soP4+YuCg?tMh}sm>Nk)5iUM9(~AGO zkL`gN@0;NWGL-^^ZCpCVK$&~AshIqS_i{ab{-%!(Syry|1CC%`8cF>Ggx(y5j6u+q zmtyh(L&)6%hOoQg-_{S%5)0>#+Me(7;X#1J1K2Ut2PX)DBB{Gd5eTRSXQ_VUo2%Ax zv-M-T>!il42Zk6s-_Qz#4n`w5A_~v&_wud_HioQ6L1wuK2Lxs10w=%zWdnSm5!*c< z_fnQwR!_f*W8YqfT^x=q0v|aPVQ6IJ7vv1?x2URKRCnL+0;;cHr-r~_sBzT_QyqTL z(o`m3Q8C-L#$>uY^@YG)=(DY;PHE4w*Qe_?1j3YwN>vb%ikR~{Hy7p_RrKY!12{uO zh%^k2nMqci#jJC3-3}0SzlO#dt89 z1I`!_=BVdOR7|249c)=kipQtJJ5KW9f6$oS)n(iFeH3OGBNx60;py?kJIY-e`Uhf+ zpHLj5*2=E?IMUq%A$x_U&sWm?;)Hh;rE|pr9zp0CUx9+CPS%2^R+k(`zcn z7aKD$t=9|Lhz^nDz!iwsJ7wt|0$$rQ z2|v|}cNX64W%*@tp_}$do3!r+g4>h}$_J6ErGKzwAeeh0P+Xesm|~$hmr1XJ4-IXf zbGPkKGjei8)+O(z#k24@XpWf916dd`LY+@!p%}fj=F5M@p>Y!kXvkFv3|FSpj=+tm z9X7;MdvW3-8R@m~*)g;5tBYFEqx9jR_p7!$=0h`!DqN>80=gj|c&(gx)4#F^$#lp- zLkc_Ln+@X248HRLr*+5r1^bP^7d}snd;4GT+o+Qu+hR@hel&NuAfZ^k$ZVe`HynT& zVuJ8%`MqY|xl0|Io}& zIOzVDeXdg{kM((i<=@^67!(GPQ5tcmTAMF(BkK6;SRq{Xd>q-{xGOp585NTp0*1Y?Q-sH;8?0J+bBLgr&bl(U(U3#Ff3pX0v6J zfpk;P)S=137}H4Jmqb9};76KN{rf718ZK{a;%h7YzBgR5%{zA#-H|QAkI>=Rp%C-u zJim23=gWYJNM1Mc8hg|loybAW4O)ci=0KfkQ~aWJZ10d=g~A$xx-~eoz#h0j;Cv`_ zxaNH5H}unM8wiVfck*URwkZ>W8>h@tHO*m@22_gAm&(57jN0e-pl8A zwGsy{i)1lNRyU_S6V88rPF~O&8t@^()|_2!r9vddqKW@54t@wUjFO#S#_w8q`r7~P zhqb2%3+bN-Oply}S+Mml#p}#TF7@c8w*nfLB)%`2ooqk&Cd*C*!+i}}^;I)Cb$-SWVY^uIs#;k!GVGnGn-UIP|VS@QbX%F}*VY4xrp zKmH=VJo79X#dUNJ#R`St-oi@%sav;>V)VP8-TpS%0IP>=nU zdp2{)<0y6>pQ6!;bu_R|TJu{J0{51FjUAdW^5dd|!y@A%{FNcNuHD?l`p&C~0DU{! zvQ98NdDexx`9%&TuTv&+s}z%bW&Zk0D*W7k*OI3?ERzVu1xqHCnVjsX$SP6K^#;Aq zmG0yfeRtXceQSfOXg|R~#QQze5BGt*xD5GcyXRndv44aeg*gKo)C z5*m4{w?57KX0flVC%_>Hf!@b6VAdf^+sNpsG&xk9M~O+;4`AGX2vU7G8*uV-g7lL9OB9P&Ip zqwD?h8{E2wcUu2qd39pDQ5{2Ms2(*(7jSH-fZ1_Vb10@I^fbnEgi*}4-2UierAzf@ zv-ia`nNAgM72VUxAyR8cS2X|ee88-j_;+(E7RchfE%Y1LJzNGBcWf-&WH^^jZfeEV z$&dNzTgQoyk{Lc)EIG+9@^W+2FqM)Ok(X3l(oj2o{1T z?LzHq*Gk?-rNswZ%Hxx0`bE$LeqmEJ9Ucm1x^;?)2vyRr7S(lig6`K8k!P|Tl}KKDE8sV zft4|eE9v7`yoqb<%lje@Z?L;I#BeVpLO{hpX*jNFaIvSkxn3L`-AY0)xng$IzOQ!|35)IrvRwZpuAWk};m}^)@b+Y83nBGzJr(;#Vhqty zka4{!jzy&i?DIeORiH!X)#F|TXBn206b)m%y>xs7G%WNFllAOBJ%k&{ex!?~F}Bht z^|@lbF1YSbW7B%2|+{kK(1cNbplaO^*5jS>s`<+o;< zpwTEe?QQQ_B+{yxo0(kwyKjr1&yI0>_iB5!V#=nx?L{Z% zN^S z&`pjDo`dt9-^-P6nudj-f~9{z8Yw1Qnms%yS)?y_IY-b}+PUoM+QrE&Ijozg5Dfi{( z3ppv^ghF4QjhKUg*Cz9qf@%wBiQ_@DzT<3xM_W~}xEr8rvM#tOOMd#JVXQZeL9FsV z$tphCDqaS{lz(Dmc){oKCB3COJ0S4s2Ro$}IG1d0s+eSeuKgEmrtz+#O;2rWrq-E% z6SibjNK8p-jx31w4a0iRlABwq4Exr-yO}D&(#nZ`1&W;Rd}hPo z*bCbdtd-6D!?b?^`se$rgx?C$AG%x|cI@HX)fc~l%JSdzQOovm%I;Ii_OVcNEzOJ? zJ+oI6uh@VI6f8PEZsH{7j{cc+mWnS_@?Pb-6DhYR6V-q@v9gM}ALTapa@ZL<-t@cYlZ$AN|4XCaI}(d1Tt-{4MtOD055l+`;CiT+0Qzam-UvZy3UOEMCu zyqsy*YhLEDH;n!A%tmf!kTrDK=dE#x-eW@!)6gf3c#X7(>gl^ouxrzBnkf~54zWcD=7%}4~*t0vi5cbH^XCsnKS-Jjt^hzrTj9F_w=;# z@PF9vU@`L%7K7-^tX8i=n%fbh1T@jt11O@iqtC`!WeSg}6DU~3Laju!V{3C|gz(Db z7B39w-r?ixW%XvG$q+!$-3jg{J}E6((X#MiSLtgr7vJ@)$+H=>`R!#GF~zG>x!$Z! zYFoD#wW+ls5o6G(ih9!xx31NzeJfj9MQK03p*3lktQT`&iT?9(*KPc&)Y!?LIBa;r z;}-ZsAqafmST7P{v|~%gImJ*B+x{7`sL!qmo`WO3VwJhe61EL)354_Z%dN(`snY_J zf8uFK$xR|HJTc=Yqjo;-aqJ58jFfp~<$W=4N7D>m_SgSVdww{>a&gF{-<9~)iW;g4 zH1sgbL({0KM{CLalk9vX0|@%A7pRMvf(e+KlOhRsT2^U zJ@tJ=RKeMDobYixjujAQ<89nLBcP96d&bVAT*=v1*VAwV$|WiHnK#FmeHZmPjPU<; z@{_M-*&FoHZGo1D9@3-%aeO#=-Q2p!-z-JRMxS} zjH-*txe=$(4k%O$^d(l&D?Y9=B||5N1NK-@vvs zwZ+)dN~kXD`S>%Qe)awOR}}jD8Bj@Mh2Y%~9-heE>w&GntINvd|8e8ufsDuZ1OHdA z>V}b!IOyp3IIBB3PH5;b3gq+<8L+muZ`lz_W+&7MGIq5FZ#4?|!N+w|PQYJA(Q@~7 z^V|;b!QM3q|Ju^p+LM@g=)+9c6HhI?c0NPkc|%t6#=8$cJ39;Pkghqu-vb1ESXhYv zg#pg}SXj^zg!_M~g@BVe4wB2lp2j_i-6P*f!uDPq_2kfXpLA=M3m6n3*zF3HW7Y~| z#0^VQWe*L7l9Q(;Co_RyQdG)-)uu<X+NivoM!w_(D0Y%TC;4gqX0nY>ot5(7aOTu6sZ7CL~6 z=LQ0_w#IKz6I{%U&T+J~v{X}zAFu%opL}3rX`#d3lQ2ah>wz^fvMV_w?}4)j;VB#6SQ)|4Z;!o6o`3)k()a5ZsL> zMoX(mm)k!3%jNM5aP{5<2Ozw_dJH(VT|oSut6o058a4=wwjhg{o|Sdh$Mccbq(%4N zOI)*B0|4=zIoEIz%?amMqyl!t@zDFAf7 zsf|=YqIu>#3Y$H}9+(6P2nYbG2r>()09i;uSlVwzSDNN5H zK#K(nV?K~@9RM7a`*^azt6S(vwL_VWLZNI2vaN-(05RuyXO72R3?W1l4`843pY2nI z!-Js@XyPY>#yuXJfNBLFVRaHC7yxM**u;Kxci%OM6$F|xP)mdKIpAkK$_oo5IgLFA zV(zRQF@SP)2?Z3Z?Cfk7#RR~#z-RQ={NoV%-J*8(5O%|-G^A~vlLCX2?P)qtHz|JA z4h2ZT)wlSIbwg65Eh3$Q_q*I?>rF2MuTQGUZsRp_Ga{@dYZl&TA-hSpVe&Z&XI}^eeJR$_N=ay$H==^X%3nY@h5Y+U$hbqdbuC8{J zo&*aEJG;VPgXEs&EODQ_Js1KxHpfMsN`5lR)hI}07A|B7)nb#*~G#0cO{WlnzA(&9U;Q38N$Mzt0{fb!mE zFt-`d!fXoyL|?urY?}v7>?aU12UaKTibL>pf@D$T3cvva;&$K9pEq>SxqZMOTVG$l zXM~IjxH?-07w)NuFm0)V{6h6acFX^@NkdBHtCJ?(qB zts|ngzPftHAW_r7(eY!@M}@&>g$)hIHxT3IX5eK;OftuT204CCvkfGTiesOHkHYe2 zwgGeM+mR8N6{#v^nn#dT5GT;_SyHicaB$QRmETAGx73F4Ek(?NH7yu*vzKB;+1=<- sv6yMVK7kb+g?EGffffJ%el&fJozi58%zW_F9TbA4EUzwCjW7%OKOdNSv;Y7A literal 0 HcmV?d00001 diff --git a/Memoria/img/7-algoritmo-inicializar-pesos/f_ideal_y_rn_con_2_neuronas.png b/Memoria/img/7-algoritmo-inicializar-pesos/f_ideal_y_rn_con_2_neuronas.png new file mode 100644 index 0000000000000000000000000000000000000000..ec8fdae5b5fbe76f0950cf8dc6b93573ea779192 GIT binary patch literal 25454 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 UIJ59A7$Xt4l{J(KFb@O%50Z5i8~^|S literal 0 HcmV?d00001 diff --git a/Experimentos/inicializacion-pesos-red-neuronal/img/0_1_aleatorio/f_ideal_y_rn_con_5_neuronas.png b/Experimentos/inicializacion-pesos-red-neuronal/img/0_1_aleatorio/f_ideal_y_rn_con_5_neuronas.png new file mode 100644 index 0000000000000000000000000000000000000000..244d84ad22d309972181a5981690cf96e90b53e1 GIT binary patch literal 25604 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 literal 0 HcmV?d00001 diff --git a/Experimentos/inicializacion-pesos-red-neuronal/img/0_1_aleatorio/f_ideal_y_rn_con_60_neuronas.png b/Experimentos/inicializacion-pesos-red-neuronal/img/0_1_aleatorio/f_ideal_y_rn_con_60_neuronas.png new file mode 100644 index 0000000000000000000000000000000000000000..a2d139c78ad47033459b159a6843039382a5d9a8 GIT binary patch literal 26203 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 literal 0 HcmV?d00001 diff --git a/Experimentos/inicializacion-pesos-red-neuronal/img/0_1_aleatorio/f_ideal_y_rn_con_7_neuronas.png b/Experimentos/inicializacion-pesos-red-neuronal/img/0_1_aleatorio/f_ideal_y_rn_con_7_neuronas.png new file mode 100644 index 0000000000000000000000000000000000000000..0612cbb48f0ecdb9bbc5818591d6db435d750b5d GIT binary patch literal 24282 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 Date: Fri, 10 Jun 2022 21:59:23 +0200 Subject: [PATCH 35/76] =?UTF-8?q?Hago=20experimento=20inicial=20para=20son?= =?UTF-8?q?dear=20la=20situaci=C3=B3n=20#117?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../multiple-input-single-ouput.jl | 2 +- .../src/weight-initializer-algorithm/utils.jl | 2 +- Experimentos/.config.toml | 29 +- .../2_air_self_noise.jl | 141 ++ .../data/airfoil_self_noise.csv | 1503 +++++++++++++++++ .../data/airfoil_self_noise.dat | 1503 +++++++++++++++++ .../utils/dat_to_csv.jl | 23 + .../3_algoritmo-inicializacion-pesos.tex | 16 +- .../5_estudio_experimental.tex | 1 + Memoria/tfg.tex | 2 +- 10 files changed, 3216 insertions(+), 6 deletions(-) create mode 100644 Experimentos/inicializacion-pesos-red-neuronal/2_air_self_noise.jl create mode 100644 Experimentos/inicializacion-pesos-red-neuronal/data/airfoil_self_noise.csv create mode 100644 Experimentos/inicializacion-pesos-red-neuronal/data/airfoil_self_noise.dat create mode 100644 Experimentos/inicializacion-pesos-red-neuronal/utils/dat_to_csv.jl create mode 100644 Memoria/capitulos/5-Estudio_experimental/5_estudio_experimental.tex diff --git a/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/multiple-input-single-ouput.jl b/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/multiple-input-single-ouput.jl index 1146f32..0d37f13 100644 --- a/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/multiple-input-single-ouput.jl +++ b/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/multiple-input-single-ouput.jl @@ -24,7 +24,7 @@ function InitializeNodes(X_train::Matrix,Y_train::Vector{Float64}, n::Int, M=10) # inicializamos p p = rand(Float32, entry_dimension) index = 1 - tam :: Int8= 0 + tam = 0 nodes = Array{Vector{Float64}}(undef, n) y_values = Array{Float64}(undef, n) # float porque la salida es de dimensión 1 diff --git a/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/utils.jl b/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/utils.jl index 67f3774..a3fb3b5 100644 --- a/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/utils.jl +++ b/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/utils.jl @@ -8,7 +8,7 @@ Comprueba que todos los vectores de `point_dict` no sean ortogonales al vector ` Esto es que `p.(v - new_point) neq 0` para todo (_,v) en `point_dict` `point_dict`` es un diccionario donde los vectores son los valores. """ -function notOrtonormal(points::Vector{Vector{Float64}}, p::Vector, new_point::Vector, tam::Int8)::Bool +function notOrtonormal(points::Vector{Vector{Float64}}, p::Vector, new_point::Vector, tam::Int)::Bool for i in 1:tam if sum(p.*(points[i]-new_point)) == 0 return false diff --git a/Experimentos/.config.toml b/Experimentos/.config.toml index 1d5e308..79fc1f4 100644 --- a/Experimentos/.config.toml +++ b/Experimentos/.config.toml @@ -27,6 +27,33 @@ DIRECTORIO_IMAGENES = "./Memoria/img/funciones-activacion/" #carpeta que contend # Configuración de [visualizacion-inicializacion-pesos-R] # Descomentar: Para mostrar en la carpeta del experimento -DIRECTORIO_IMAGENES = "./Experimentos/inicializacion-pesos-red-neuronal/img/" #carpeta que contendrá las imágenes +DIRECTORIO_IMAGENES = "./Experimentos/inicializacion-pesos-red-neuronal/img/0_sintetico_homogeneo/" #carpeta que contendrá las imágenes # Descomentar: Para mostrar en la carpeta de la memoria #DIRECTORIO_IMAGENES = "./Memoria/img/7-algoritmo-inicializar-pesos/" + +# Configuración de +[visualizacion-inicializacion-pesos-R-aleatorio] +# Descomentar: Para mostrar en la carpeta del experimento +DIRECTORIO_IMAGENES = "./Experimentos/inicializacion-pesos-red-neuronal/img/0_1_aleatorio/" #carpeta que contendrá las imágenes +# Descomentar: Para mostrar en la carpeta de la memoria +#DIRECTORIO_IMAGENES = "./Memoria/img/7-algoritmo-inicializar-pesos/" +DIRECTORIO_RESULTADOS = "Experimentos/inicializacion-pesos-red-neuronal/resultados/1_sinteticos_heterogeneo/" +NOMBRE_FICHERO_RESULTADOS = "resultados.csv" +NUMERO_PARTICIONES = +15 # Veces que se tomarán medidas +LIMITE_INFERIOR = -10 # Cota inferior de los valores posibles +LIMITE_SUPERIOR = +10 # Cota superior de los valores posibles +FACTOR = +4 # Por cada neurona cuantos datos hay + +# Configuración de +[air-self-noise] +# Descomentar: Para mostrar en la carpeta del experimento +DIRECTORIO_IMAGENES = "./Experimentos/inicializacion-pesos-red-neuronal/img/0_1_aleatorio/" #carpeta que contendrá las imágenes +# Descomentar: Para mostrar en la carpeta de la memoria +#DIRECTORIO_IMAGENES = "./Memoria/img/7-algoritmo-inicializar-pesos/" +FICHERO_DATOS = "Experimentos/inicializacion-pesos-red-neuronal/data/airfoil_self_noise.csv" +DIRECTORIO_RESULTADOS = "Experimentos/inicializacion-pesos-red-neuronal/resultados/1_sinteticos_heterogeneo/" +NOMBRE_FICHERO_RESULTADOS = "resultados.csv" +NUMERO_PARTICIONES = +15 # Veces que se tomarán medidas +LIMITE_INFERIOR = -10 # Cota inferior de los valores posibles +LIMITE_SUPERIOR = +10 # Cota superior de los valores posibles +FACTOR = +4 # Por cada neurona cuantos datos hay diff --git a/Experimentos/inicializacion-pesos-red-neuronal/2_air_self_noise.jl b/Experimentos/inicializacion-pesos-red-neuronal/2_air_self_noise.jl new file mode 100644 index 0000000..6438e87 --- /dev/null +++ b/Experimentos/inicializacion-pesos-red-neuronal/2_air_self_noise.jl @@ -0,0 +1,141 @@ +######################################################## +# EXPERIMENTO SINTÉTICO DE NUESTRO algoritmo +######################################################## +using Random +using Plots +using TOML +using CSV +using DataFrames +using StatsBase + +FICHERO_CONFIGURACION = "Experimentos/.config.toml" +config = TOML.parsefile(FICHERO_CONFIGURACION)["air-self-noise"] +FILE = config["FICHERO_DATOS"] + +Random.seed!(1) +include("../../Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/main.jl") +include("../../Biblioteca-Redes-Neuronales/src/one_layer_neuronal_network.jl") +include("../../Biblioteca-Redes-Neuronales/src/metric_estimation.jl") +include("../../Biblioteca-Redes-Neuronales/src/activation_functions.jl") + +using .InitialNeuralNetwork +using .OneLayerNeuralNetwork +using .ActivationFunctions + +#------------------------------------------------------ +# Data preprocesing +#------------------------------------------------------ +input_dimension = 5 +output_dimension = 1 +atributes = 1:input_dimension +label = 6 +df = DataFrame(CSV.File(FILE, header=false)) +# Miramos si hay valores perdidos +display(describe(df)) # No hay +for i in 1:4 +# Transformamos en matrices y vectores +X = Matrix(df[:, atributes]) +Y = Vector(df[:,label]) +len = length(Y) +# suffle +sort = randperm(len) +Xs = X[sort, :] +Ys = Y[sort] +# separate train from test +index = Integer(2*len/3) +X_train = Xs[1:index,:] +Y_train = Ys[1:index] +X_test = Xs[index+1:len, :] +Y_test = Ys[index+1:len] + +# Data normalization +#dt = fit(ZScoreTransform, X_train, dims=1) +dt = fit(UnitRangeTransform, X_train, dims=1) +X_test_normalized = StatsBase.transform(dt, X_test) +X_train_normalized = StatsBase.transform(dt, X_train) + +dt_y = fit(UnitRangeTransform, Y_train, dims=1) +Y_test_normalized = StatsBase.transform(dt_y, Y_test) +Y_train_normalized = StatsBase.transform(dt_y, Y_train) + + +#------------------------------------------------------ +# Get neuronal network +#------------------------------------------------------ +n = ceil(Integer, index*0.9) # numbers of nodes +println("\nEjecución $i") +println("Se va a entrenar con $n neuronas") +println("El tamaño de test es de $(len-index)") +println("El conjunto de entrenamiento $(index)") + +# Ajuste con comienzo de datos inicial +println("Resultados con h aleatoria") +h_random = RandomWeightsNN(input_dimension, n, output_dimension) +evaluate_random(x) = OneLayerNeuralNetwork.ForwardPropagation(h_random, + ActivationFunctions.RampFunction,x + ) +println(Metric.Regression(X_test_normalized, Y_test_normalized, evaluate_random)) + +# Experimentamos con nuestro algoritmo +M = 1 +h_initialized = InitializeNodes(X_train_normalized, Y_train_normalized, n, M) +# Función de evaluación por forward propagation +evaluate_initialized(x) = OneLayerNeuralNetwork.ForwardPropagation(h_initialized, + ActivationFunctions.RampFunction,x + ) + +println("Resultados con h ajustada") +println(Metric.Regression(X_test_normalized, Y_test_normalized, evaluate_initialized)) +end +""" +6×7 DataFrame + Row │ variable mean min median max nmissing eltype + │ Symbol Float64 Real Float64 Real Int64 DataType +─────┼───────────────────────────────────────────────────────────────────────────────────────── + 1 │ Column1 2886.38 200 1600.0 20000 0 Int64 + 2 │ Column2 6.7823 0.0 5.4 22.2 0 Float64 + 3 │ Column3 0.136548 0.0254 0.1016 0.3048 0 Float64 + 4 │ Column4 50.8607 31.7 39.6 71.3 0 Float64 + 5 │ Column5 0.0111399 0.000400682 0.00495741 0.0584113 0 Float64 + 6 │ Column6 124.836 103.38 125.721 140.987 0 Float64 + Ejecución 1 +Se va a entrenar con 902 neuronas +El tamaño de test es de 501 +El conjunto de entrenamiento 1002 +Resultados con h aleatoria +(404.8662093260707, 419.1115903577392, 41.635752117489275, -0.2961736723908062) +Resultados con h ajustada +(0.1759656798601324, 0.1439178380239382, 0.1418858978301221, 0.1617093840740258) +Ejecución 2 +Se va a entrenar con 902 neuronas +El tamaño de test es de 501 +El conjunto de entrenamiento 1002 +Resultados con h aleatoria +(412.6085843252029, 425.4178063252722, 38.83676957614223, -0.36658463933867147) +Resultados con h ajustada +(0.1887864329420057, 0.1594975256947092, 0.141530618515747, 0.1669516152633034) +Ejecución 3 +Se va a entrenar con 902 neuronas +El tamaño de test es de 501 +El conjunto de entrenamiento 1002 +Resultados con h aleatoria +(407.72244602689705, 420.2626874975474, 36.8556315202347, -0.2874190506953035) +Resultados con h ajustada +(0.19299620315055435, 0.16363726585828242, 0.15253785656821325, 0.1077840541213413) +Ejecución 4 +Se va a entrenar con 902 neuronas +El tamaño de test es de 501 +El conjunto de entrenamiento 1002 +Resultados con h aleatoria +(413.7672171338432, 427.98530944897396, 38.578762699498924, -0.405215165344763) +Resultados con h ajustada +(0.19361423644056652, 0.16653552920747788, 0.1502466320311231, 0.1600790908855873) + +""" + + + + + + + diff --git a/Experimentos/inicializacion-pesos-red-neuronal/data/airfoil_self_noise.csv b/Experimentos/inicializacion-pesos-red-neuronal/data/airfoil_self_noise.csv new file mode 100644 index 0000000..d14d4b6 --- /dev/null +++ b/Experimentos/inicializacion-pesos-red-neuronal/data/airfoil_self_noise.csv @@ -0,0 +1,1503 @@ +800,0,0.3048,71.3,0.00266337,126.201 +1000,0,0.3048,71.3,0.00266337,125.201 +1250,0,0.3048,71.3,0.00266337,125.951 +1600,0,0.3048,71.3,0.00266337,127.591 +2000,0,0.3048,71.3,0.00266337,127.461 +2500,0,0.3048,71.3,0.00266337,125.571 +3150,0,0.3048,71.3,0.00266337,125.201 +4000,0,0.3048,71.3,0.00266337,123.061 +5000,0,0.3048,71.3,0.00266337,121.301 +6300,0,0.3048,71.3,0.00266337,119.541 +8000,0,0.3048,71.3,0.00266337,117.151 +10000,0,0.3048,71.3,0.00266337,115.391 +12500,0,0.3048,71.3,0.00266337,112.241 +16000,0,0.3048,71.3,0.00266337,108.721 +500,0,0.3048,55.5,0.00283081,126.416 +630,0,0.3048,55.5,0.00283081,127.696 +800,0,0.3048,55.5,0.00283081,128.086 +1000,0,0.3048,55.5,0.00283081,126.966 +1250,0,0.3048,55.5,0.00283081,126.086 +1600,0,0.3048,55.5,0.00283081,126.986 +2000,0,0.3048,55.5,0.00283081,126.616 +2500,0,0.3048,55.5,0.00283081,124.106 +3150,0,0.3048,55.5,0.00283081,123.236 +4000,0,0.3048,55.5,0.00283081,121.106 +5000,0,0.3048,55.5,0.00283081,119.606 +6300,0,0.3048,55.5,0.00283081,117.976 +8000,0,0.3048,55.5,0.00283081,116.476 +10000,0,0.3048,55.5,0.00283081,113.076 +12500,0,0.3048,55.5,0.00283081,111.076 +200,0,0.3048,39.6,0.00310138,118.129 +250,0,0.3048,39.6,0.00310138,119.319 +315,0,0.3048,39.6,0.00310138,122.779 +400,0,0.3048,39.6,0.00310138,124.809 +500,0,0.3048,39.6,0.00310138,126.959 +630,0,0.3048,39.6,0.00310138,128.629 +800,0,0.3048,39.6,0.00310138,129.099 +1000,0,0.3048,39.6,0.00310138,127.899 +1250,0,0.3048,39.6,0.00310138,125.499 +1600,0,0.3048,39.6,0.00310138,124.049 +2000,0,0.3048,39.6,0.00310138,123.689 +2500,0,0.3048,39.6,0.00310138,121.399 +3150,0,0.3048,39.6,0.00310138,120.319 +4000,0,0.3048,39.6,0.00310138,119.229 +5000,0,0.3048,39.6,0.00310138,117.789 +6300,0,0.3048,39.6,0.00310138,116.229 +8000,0,0.3048,39.6,0.00310138,114.779 +10000,0,0.3048,39.6,0.00310138,112.139 +12500,0,0.3048,39.6,0.00310138,109.619 +200,0,0.3048,31.7,0.00331266,117.195 +250,0,0.3048,31.7,0.00331266,118.595 +315,0,0.3048,31.7,0.00331266,122.765 +400,0,0.3048,31.7,0.00331266,125.045 +500,0,0.3048,31.7,0.00331266,127.315 +630,0,0.3048,31.7,0.00331266,129.095 +800,0,0.3048,31.7,0.00331266,129.235 +1000,0,0.3048,31.7,0.00331266,127.365 +1250,0,0.3048,31.7,0.00331266,124.355 +1600,0,0.3048,31.7,0.00331266,122.365 +2000,0,0.3048,31.7,0.00331266,122.375 +2500,0,0.3048,31.7,0.00331266,120.755 +3150,0,0.3048,31.7,0.00331266,119.135 +4000,0,0.3048,31.7,0.00331266,118.145 +5000,0,0.3048,31.7,0.00331266,115.645 +6300,0,0.3048,31.7,0.00331266,113.775 +8000,0,0.3048,31.7,0.00331266,110.515 +10000,0,0.3048,31.7,0.00331266,108.265 +800,1.5,0.3048,71.3,0.00336729,127.122 +1000,1.5,0.3048,71.3,0.00336729,125.992 +1250,1.5,0.3048,71.3,0.00336729,125.872 +1600,1.5,0.3048,71.3,0.00336729,126.632 +2000,1.5,0.3048,71.3,0.00336729,126.642 +2500,1.5,0.3048,71.3,0.00336729,124.512 +3150,1.5,0.3048,71.3,0.00336729,123.392 +4000,1.5,0.3048,71.3,0.00336729,121.762 +5000,1.5,0.3048,71.3,0.00336729,119.632 +6300,1.5,0.3048,71.3,0.00336729,118.122 +8000,1.5,0.3048,71.3,0.00336729,115.372 +10000,1.5,0.3048,71.3,0.00336729,113.492 +12500,1.5,0.3048,71.3,0.00336729,109.222 +16000,1.5,0.3048,71.3,0.00336729,106.582 +315,1.5,0.3048,39.6,0.00392107,121.851 +400,1.5,0.3048,39.6,0.00392107,124.001 +500,1.5,0.3048,39.6,0.00392107,126.661 +630,1.5,0.3048,39.6,0.00392107,128.311 +800,1.5,0.3048,39.6,0.00392107,128.831 +1000,1.5,0.3048,39.6,0.00392107,127.581 +1250,1.5,0.3048,39.6,0.00392107,125.211 +1600,1.5,0.3048,39.6,0.00392107,122.211 +2000,1.5,0.3048,39.6,0.00392107,122.101 +2500,1.5,0.3048,39.6,0.00392107,120.981 +3150,1.5,0.3048,39.6,0.00392107,119.111 +4000,1.5,0.3048,39.6,0.00392107,117.741 +5000,1.5,0.3048,39.6,0.00392107,116.241 +6300,1.5,0.3048,39.6,0.00392107,114.751 +8000,1.5,0.3048,39.6,0.00392107,112.251 +10000,1.5,0.3048,39.6,0.00392107,108.991 +12500,1.5,0.3048,39.6,0.00392107,106.111 +400,3,0.3048,71.3,0.00425727,127.564 +500,3,0.3048,71.3,0.00425727,128.454 +630,3,0.3048,71.3,0.00425727,129.354 +800,3,0.3048,71.3,0.00425727,129.494 +1000,3,0.3048,71.3,0.00425727,129.004 +1250,3,0.3048,71.3,0.00425727,127.634 +1600,3,0.3048,71.3,0.00425727,126.514 +2000,3,0.3048,71.3,0.00425727,125.524 +2500,3,0.3048,71.3,0.00425727,124.024 +3150,3,0.3048,71.3,0.00425727,121.514 +4000,3,0.3048,71.3,0.00425727,120.264 +5000,3,0.3048,71.3,0.00425727,118.134 +6300,3,0.3048,71.3,0.00425727,116.134 +8000,3,0.3048,71.3,0.00425727,114.634 +10000,3,0.3048,71.3,0.00425727,110.224 +400,3,0.3048,55.5,0.00452492,126.159 +500,3,0.3048,55.5,0.00452492,128.179 +630,3,0.3048,55.5,0.00452492,129.569 +800,3,0.3048,55.5,0.00452492,129.949 +1000,3,0.3048,55.5,0.00452492,129.329 +1250,3,0.3048,55.5,0.00452492,127.329 +1600,3,0.3048,55.5,0.00452492,124.439 +2000,3,0.3048,55.5,0.00452492,123.069 +2500,3,0.3048,55.5,0.00452492,122.439 +3150,3,0.3048,55.5,0.00452492,120.189 +4000,3,0.3048,55.5,0.00452492,118.689 +5000,3,0.3048,55.5,0.00452492,117.309 +6300,3,0.3048,55.5,0.00452492,115.679 +8000,3,0.3048,55.5,0.00452492,113.799 +10000,3,0.3048,55.5,0.00452492,112.169 +315,3,0.3048,39.6,0.00495741,123.312 +400,3,0.3048,39.6,0.00495741,125.472 +500,3,0.3048,39.6,0.00495741,127.632 +630,3,0.3048,39.6,0.00495741,129.292 +800,3,0.3048,39.6,0.00495741,129.552 +1000,3,0.3048,39.6,0.00495741,128.312 +1250,3,0.3048,39.6,0.00495741,125.802 +1600,3,0.3048,39.6,0.00495741,122.782 +2000,3,0.3048,39.6,0.00495741,120.532 +2500,3,0.3048,39.6,0.00495741,120.162 +3150,3,0.3048,39.6,0.00495741,118.922 +4000,3,0.3048,39.6,0.00495741,116.792 +5000,3,0.3048,39.6,0.00495741,115.792 +6300,3,0.3048,39.6,0.00495741,114.042 +8000,3,0.3048,39.6,0.00495741,110.652 +315,3,0.3048,31.7,0.00529514,123.118 +400,3,0.3048,31.7,0.00529514,125.398 +500,3,0.3048,31.7,0.00529514,127.548 +630,3,0.3048,31.7,0.00529514,128.698 +800,3,0.3048,31.7,0.00529514,128.708 +1000,3,0.3048,31.7,0.00529514,126.838 +1250,3,0.3048,31.7,0.00529514,124.838 +1600,3,0.3048,31.7,0.00529514,122.088 +2000,3,0.3048,31.7,0.00529514,120.088 +2500,3,0.3048,31.7,0.00529514,119.598 +3150,3,0.3048,31.7,0.00529514,118.108 +4000,3,0.3048,31.7,0.00529514,115.608 +5000,3,0.3048,31.7,0.00529514,113.858 +6300,3,0.3048,31.7,0.00529514,109.718 +250,4,0.3048,71.3,0.00497773,126.395 +315,4,0.3048,71.3,0.00497773,128.175 +400,4,0.3048,71.3,0.00497773,129.575 +500,4,0.3048,71.3,0.00497773,130.715 +630,4,0.3048,71.3,0.00497773,131.615 +800,4,0.3048,71.3,0.00497773,131.755 +1000,4,0.3048,71.3,0.00497773,131.015 +1250,4,0.3048,71.3,0.00497773,129.395 +1600,4,0.3048,71.3,0.00497773,126.645 +2000,4,0.3048,71.3,0.00497773,124.395 +2500,4,0.3048,71.3,0.00497773,123.775 +3150,4,0.3048,71.3,0.00497773,121.775 +4000,4,0.3048,71.3,0.00497773,119.535 +5000,4,0.3048,71.3,0.00497773,117.785 +6300,4,0.3048,71.3,0.00497773,116.165 +8000,4,0.3048,71.3,0.00497773,113.665 +10000,4,0.3048,71.3,0.00497773,110.905 +12500,4,0.3048,71.3,0.00497773,107.405 +250,4,0.3048,39.6,0.00579636,123.543 +315,4,0.3048,39.6,0.00579636,126.843 +400,4,0.3048,39.6,0.00579636,128.633 +500,4,0.3048,39.6,0.00579636,130.173 +630,4,0.3048,39.6,0.00579636,131.073 +800,4,0.3048,39.6,0.00579636,130.723 +1000,4,0.3048,39.6,0.00579636,128.723 +1250,4,0.3048,39.6,0.00579636,126.343 +1600,4,0.3048,39.6,0.00579636,123.213 +2000,4,0.3048,39.6,0.00579636,120.963 +2500,4,0.3048,39.6,0.00579636,120.233 +3150,4,0.3048,39.6,0.00579636,118.743 +4000,4,0.3048,39.6,0.00579636,115.863 +5000,4,0.3048,39.6,0.00579636,113.733 +1250,0,0.2286,71.3,0.00214345,128.144 +1600,0,0.2286,71.3,0.00214345,129.134 +2000,0,0.2286,71.3,0.00214345,128.244 +2500,0,0.2286,71.3,0.00214345,128.354 +3150,0,0.2286,71.3,0.00214345,127.834 +4000,0,0.2286,71.3,0.00214345,125.824 +5000,0,0.2286,71.3,0.00214345,124.304 +6300,0,0.2286,71.3,0.00214345,122.044 +8000,0,0.2286,71.3,0.00214345,118.024 +10000,0,0.2286,71.3,0.00214345,118.134 +12500,0,0.2286,71.3,0.00214345,117.624 +16000,0,0.2286,71.3,0.00214345,114.984 +20000,0,0.2286,71.3,0.00214345,114.474 +315,0,0.2286,55.5,0.00229336,119.540 +400,0,0.2286,55.5,0.00229336,121.660 +500,0,0.2286,55.5,0.00229336,123.780 +630,0,0.2286,55.5,0.00229336,126.160 +800,0,0.2286,55.5,0.00229336,127.530 +1000,0,0.2286,55.5,0.00229336,128.290 +1250,0,0.2286,55.5,0.00229336,127.910 +1600,0,0.2286,55.5,0.00229336,126.790 +2000,0,0.2286,55.5,0.00229336,126.540 +2500,0,0.2286,55.5,0.00229336,126.540 +3150,0,0.2286,55.5,0.00229336,125.160 +4000,0,0.2286,55.5,0.00229336,123.410 +5000,0,0.2286,55.5,0.00229336,122.410 +6300,0,0.2286,55.5,0.00229336,118.410 +315,0,0.2286,39.6,0.00253511,121.055 +400,0,0.2286,39.6,0.00253511,123.565 +500,0,0.2286,39.6,0.00253511,126.195 +630,0,0.2286,39.6,0.00253511,128.705 +800,0,0.2286,39.6,0.00253511,130.205 +1000,0,0.2286,39.6,0.00253511,130.435 +1250,0,0.2286,39.6,0.00253511,129.395 +1600,0,0.2286,39.6,0.00253511,127.095 +2000,0,0.2286,39.6,0.00253511,125.305 +2500,0,0.2286,39.6,0.00253511,125.025 +3150,0,0.2286,39.6,0.00253511,124.625 +4000,0,0.2286,39.6,0.00253511,123.465 +5000,0,0.2286,39.6,0.00253511,122.175 +6300,0,0.2286,39.6,0.00253511,117.465 +315,0,0.2286,31.7,0.0027238,120.595 +400,0,0.2286,31.7,0.0027238,123.635 +500,0,0.2286,31.7,0.0027238,126.675 +630,0,0.2286,31.7,0.0027238,129.465 +800,0,0.2286,31.7,0.0027238,130.725 +1000,0,0.2286,31.7,0.0027238,130.595 +1250,0,0.2286,31.7,0.0027238,128.805 +1600,0,0.2286,31.7,0.0027238,125.625 +2000,0,0.2286,31.7,0.0027238,123.455 +2500,0,0.2286,31.7,0.0027238,123.445 +3150,0,0.2286,31.7,0.0027238,123.445 +4000,0,0.2286,31.7,0.0027238,122.035 +5000,0,0.2286,31.7,0.0027238,120.505 +6300,0,0.2286,31.7,0.0027238,116.815 +400,2,0.2286,71.3,0.00293031,125.116 +500,2,0.2286,71.3,0.00293031,126.486 +630,2,0.2286,71.3,0.00293031,127.356 +800,2,0.2286,71.3,0.00293031,128.216 +1000,2,0.2286,71.3,0.00293031,128.956 +1250,2,0.2286,71.3,0.00293031,128.816 +1600,2,0.2286,71.3,0.00293031,127.796 +2000,2,0.2286,71.3,0.00293031,126.896 +2500,2,0.2286,71.3,0.00293031,127.006 +3150,2,0.2286,71.3,0.00293031,126.116 +4000,2,0.2286,71.3,0.00293031,124.086 +5000,2,0.2286,71.3,0.00293031,122.816 +6300,2,0.2286,71.3,0.00293031,120.786 +8000,2,0.2286,71.3,0.00293031,115.996 +10000,2,0.2286,71.3,0.00293031,113.086 +400,2,0.2286,55.5,0.00313525,122.292 +500,2,0.2286,55.5,0.00313525,124.692 +630,2,0.2286,55.5,0.00313525,126.842 +800,2,0.2286,55.5,0.00313525,128.492 +1000,2,0.2286,55.5,0.00313525,129.002 +1250,2,0.2286,55.5,0.00313525,128.762 +1600,2,0.2286,55.5,0.00313525,126.752 +2000,2,0.2286,55.5,0.00313525,124.612 +2500,2,0.2286,55.5,0.00313525,123.862 +3150,2,0.2286,55.5,0.00313525,123.742 +4000,2,0.2286,55.5,0.00313525,122.232 +5000,2,0.2286,55.5,0.00313525,120.472 +6300,2,0.2286,55.5,0.00313525,118.712 +315,2,0.2286,39.6,0.00346574,120.137 +400,2,0.2286,39.6,0.00346574,122.147 +500,2,0.2286,39.6,0.00346574,125.157 +630,2,0.2286,39.6,0.00346574,127.417 +800,2,0.2286,39.6,0.00346574,129.037 +1000,2,0.2286,39.6,0.00346574,129.147 +1250,2,0.2286,39.6,0.00346574,128.257 +1600,2,0.2286,39.6,0.00346574,125.837 +2000,2,0.2286,39.6,0.00346574,122.797 +2500,2,0.2286,39.6,0.00346574,121.397 +3150,2,0.2286,39.6,0.00346574,121.627 +4000,2,0.2286,39.6,0.00346574,120.227 +5000,2,0.2286,39.6,0.00346574,118.827 +6300,2,0.2286,39.6,0.00346574,116.417 +315,2,0.2286,31.7,0.00372371,120.147 +400,2,0.2286,31.7,0.00372371,123.417 +500,2,0.2286,31.7,0.00372371,126.677 +630,2,0.2286,31.7,0.00372371,129.057 +800,2,0.2286,31.7,0.00372371,130.307 +1000,2,0.2286,31.7,0.00372371,130.307 +1250,2,0.2286,31.7,0.00372371,128.677 +1600,2,0.2286,31.7,0.00372371,125.797 +2000,2,0.2286,31.7,0.00372371,123.037 +2500,2,0.2286,31.7,0.00372371,121.407 +3150,2,0.2286,31.7,0.00372371,121.527 +4000,2,0.2286,31.7,0.00372371,120.527 +5000,2,0.2286,31.7,0.00372371,118.267 +6300,2,0.2286,31.7,0.00372371,115.137 +500,4,0.2286,71.3,0.00400603,126.758 +630,4,0.2286,71.3,0.00400603,129.038 +800,4,0.2286,71.3,0.00400603,130.688 +1000,4,0.2286,71.3,0.00400603,131.708 +1250,4,0.2286,71.3,0.00400603,131.718 +1600,4,0.2286,71.3,0.00400603,129.468 +2000,4,0.2286,71.3,0.00400603,126.218 +2500,4,0.2286,71.3,0.00400603,124.338 +3150,4,0.2286,71.3,0.00400603,124.108 +4000,4,0.2286,71.3,0.00400603,121.728 +5000,4,0.2286,71.3,0.00400603,121.118 +6300,4,0.2286,71.3,0.00400603,118.618 +8000,4,0.2286,71.3,0.00400603,112.848 +10000,4,0.2286,71.3,0.00400603,113.108 +12500,4,0.2286,71.3,0.00400603,114.258 +16000,4,0.2286,71.3,0.00400603,112.768 +20000,4,0.2286,71.3,0.00400603,109.638 +400,4,0.2286,55.5,0.0042862,123.274 +500,4,0.2286,55.5,0.0042862,127.314 +630,4,0.2286,55.5,0.0042862,129.964 +800,4,0.2286,55.5,0.0042862,131.864 +1000,4,0.2286,55.5,0.0042862,132.134 +1250,4,0.2286,55.5,0.0042862,131.264 +1600,4,0.2286,55.5,0.0042862,128.264 +2000,4,0.2286,55.5,0.0042862,124.254 +2500,4,0.2286,55.5,0.0042862,122.384 +3150,4,0.2286,55.5,0.0042862,122.394 +4000,4,0.2286,55.5,0.0042862,120.654 +5000,4,0.2286,55.5,0.0042862,120.034 +6300,4,0.2286,55.5,0.0042862,117.154 +8000,4,0.2286,55.5,0.0042862,112.524 +315,4,0.2286,39.6,0.00473801,122.229 +400,4,0.2286,39.6,0.00473801,123.879 +500,4,0.2286,39.6,0.00473801,127.039 +630,4,0.2286,39.6,0.00473801,129.579 +800,4,0.2286,39.6,0.00473801,130.469 +1000,4,0.2286,39.6,0.00473801,129.969 +1250,4,0.2286,39.6,0.00473801,128.339 +1600,4,0.2286,39.6,0.00473801,125.319 +2000,4,0.2286,39.6,0.00473801,121.659 +2500,4,0.2286,39.6,0.00473801,119.649 +3150,4,0.2286,39.6,0.00473801,120.419 +4000,4,0.2286,39.6,0.00473801,119.159 +5000,4,0.2286,39.6,0.00473801,117.649 +6300,4,0.2286,39.6,0.00473801,114.249 +8000,4,0.2286,39.6,0.00473801,113.129 +250,4,0.2286,31.7,0.00509068,120.189 +315,4,0.2286,31.7,0.00509068,123.609 +400,4,0.2286,31.7,0.00509068,126.149 +500,4,0.2286,31.7,0.00509068,128.939 +630,4,0.2286,31.7,0.00509068,130.349 +800,4,0.2286,31.7,0.00509068,130.869 +1000,4,0.2286,31.7,0.00509068,129.869 +1250,4,0.2286,31.7,0.00509068,128.119 +1600,4,0.2286,31.7,0.00509068,125.229 +2000,4,0.2286,31.7,0.00509068,122.089 +2500,4,0.2286,31.7,0.00509068,120.209 +3150,4,0.2286,31.7,0.00509068,120.229 +4000,4,0.2286,31.7,0.00509068,118.859 +5000,4,0.2286,31.7,0.00509068,115.969 +6300,4,0.2286,31.7,0.00509068,112.699 +400,5.3,0.2286,71.3,0.0051942,127.700 +500,5.3,0.2286,71.3,0.0051942,129.880 +630,5.3,0.2286,71.3,0.0051942,131.800 +800,5.3,0.2286,71.3,0.0051942,133.480 +1000,5.3,0.2286,71.3,0.0051942,134.000 +1250,5.3,0.2286,71.3,0.0051942,133.380 +1600,5.3,0.2286,71.3,0.0051942,130.460 +2000,5.3,0.2286,71.3,0.0051942,125.890 +2500,5.3,0.2286,71.3,0.0051942,123.740 +3150,5.3,0.2286,71.3,0.0051942,123.120 +4000,5.3,0.2286,71.3,0.0051942,120.330 +5000,5.3,0.2286,71.3,0.0051942,118.050 +6300,5.3,0.2286,71.3,0.0051942,116.920 +8000,5.3,0.2286,71.3,0.0051942,114.900 +10000,5.3,0.2286,71.3,0.0051942,111.350 +250,5.3,0.2286,39.6,0.00614329,127.011 +315,5.3,0.2286,39.6,0.00614329,129.691 +400,5.3,0.2286,39.6,0.00614329,131.221 +500,5.3,0.2286,39.6,0.00614329,132.251 +630,5.3,0.2286,39.6,0.00614329,132.011 +800,5.3,0.2286,39.6,0.00614329,129.491 +1000,5.3,0.2286,39.6,0.00614329,125.581 +1250,5.3,0.2286,39.6,0.00614329,125.721 +1600,5.3,0.2286,39.6,0.00614329,123.081 +2000,5.3,0.2286,39.6,0.00614329,117.911 +2500,5.3,0.2286,39.6,0.00614329,116.151 +3150,5.3,0.2286,39.6,0.00614329,118.441 +4000,5.3,0.2286,39.6,0.00614329,115.801 +5000,5.3,0.2286,39.6,0.00614329,115.311 +6300,5.3,0.2286,39.6,0.00614329,112.541 +200,7.3,0.2286,71.3,0.0104404,138.758 +250,7.3,0.2286,71.3,0.0104404,139.918 +315,7.3,0.2286,71.3,0.0104404,139.808 +400,7.3,0.2286,71.3,0.0104404,139.438 +500,7.3,0.2286,71.3,0.0104404,136.798 +630,7.3,0.2286,71.3,0.0104404,133.768 +800,7.3,0.2286,71.3,0.0104404,130.748 +1000,7.3,0.2286,71.3,0.0104404,126.838 +1250,7.3,0.2286,71.3,0.0104404,127.358 +1600,7.3,0.2286,71.3,0.0104404,125.728 +2000,7.3,0.2286,71.3,0.0104404,122.708 +2500,7.3,0.2286,71.3,0.0104404,122.088 +3150,7.3,0.2286,71.3,0.0104404,120.458 +4000,7.3,0.2286,71.3,0.0104404,119.208 +5000,7.3,0.2286,71.3,0.0104404,115.298 +6300,7.3,0.2286,71.3,0.0104404,115.818 +200,7.3,0.2286,55.5,0.0111706,135.234 +250,7.3,0.2286,55.5,0.0111706,136.384 +315,7.3,0.2286,55.5,0.0111706,136.284 +400,7.3,0.2286,55.5,0.0111706,135.924 +500,7.3,0.2286,55.5,0.0111706,133.174 +630,7.3,0.2286,55.5,0.0111706,130.934 +800,7.3,0.2286,55.5,0.0111706,128.444 +1000,7.3,0.2286,55.5,0.0111706,125.194 +1250,7.3,0.2286,55.5,0.0111706,125.724 +1600,7.3,0.2286,55.5,0.0111706,123.354 +2000,7.3,0.2286,55.5,0.0111706,120.354 +2500,7.3,0.2286,55.5,0.0111706,118.994 +3150,7.3,0.2286,55.5,0.0111706,117.134 +4000,7.3,0.2286,55.5,0.0111706,117.284 +5000,7.3,0.2286,55.5,0.0111706,113.144 +6300,7.3,0.2286,55.5,0.0111706,111.534 +200,7.3,0.2286,39.6,0.0123481,130.989 +250,7.3,0.2286,39.6,0.0123481,131.889 +315,7.3,0.2286,39.6,0.0123481,132.149 +400,7.3,0.2286,39.6,0.0123481,132.039 +500,7.3,0.2286,39.6,0.0123481,130.299 +630,7.3,0.2286,39.6,0.0123481,128.929 +800,7.3,0.2286,39.6,0.0123481,126.299 +1000,7.3,0.2286,39.6,0.0123481,122.539 +1250,7.3,0.2286,39.6,0.0123481,123.189 +1600,7.3,0.2286,39.6,0.0123481,121.059 +2000,7.3,0.2286,39.6,0.0123481,117.809 +2500,7.3,0.2286,39.6,0.0123481,116.559 +3150,7.3,0.2286,39.6,0.0123481,114.309 +4000,7.3,0.2286,39.6,0.0123481,114.079 +5000,7.3,0.2286,39.6,0.0123481,111.959 +6300,7.3,0.2286,39.6,0.0123481,110.839 +200,7.3,0.2286,31.7,0.0132672,128.679 +250,7.3,0.2286,31.7,0.0132672,130.089 +315,7.3,0.2286,31.7,0.0132672,130.239 +400,7.3,0.2286,31.7,0.0132672,130.269 +500,7.3,0.2286,31.7,0.0132672,128.169 +630,7.3,0.2286,31.7,0.0132672,126.189 +800,7.3,0.2286,31.7,0.0132672,123.209 +1000,7.3,0.2286,31.7,0.0132672,119.099 +1250,7.3,0.2286,31.7,0.0132672,120.509 +1600,7.3,0.2286,31.7,0.0132672,119.039 +2000,7.3,0.2286,31.7,0.0132672,115.309 +2500,7.3,0.2286,31.7,0.0132672,114.709 +3150,7.3,0.2286,31.7,0.0132672,113.229 +4000,7.3,0.2286,31.7,0.0132672,112.639 +5000,7.3,0.2286,31.7,0.0132672,111.029 +6300,7.3,0.2286,31.7,0.0132672,110.689 +800,0,0.1524,71.3,0.0015988,125.817 +1000,0,0.1524,71.3,0.0015988,127.307 +1250,0,0.1524,71.3,0.0015988,128.927 +1600,0,0.1524,71.3,0.0015988,129.667 +2000,0,0.1524,71.3,0.0015988,128.647 +2500,0,0.1524,71.3,0.0015988,128.127 +3150,0,0.1524,71.3,0.0015988,129.377 +4000,0,0.1524,71.3,0.0015988,128.857 +5000,0,0.1524,71.3,0.0015988,126.457 +6300,0,0.1524,71.3,0.0015988,125.427 +8000,0,0.1524,71.3,0.0015988,122.527 +10000,0,0.1524,71.3,0.0015988,120.247 +12500,0,0.1524,71.3,0.0015988,117.087 +16000,0,0.1524,71.3,0.0015988,113.297 +500,0,0.1524,55.5,0.00172668,120.573 +630,0,0.1524,55.5,0.00172668,123.583 +800,0,0.1524,55.5,0.00172668,126.713 +1000,0,0.1524,55.5,0.00172668,128.583 +1250,0,0.1524,55.5,0.00172668,129.953 +1600,0,0.1524,55.5,0.00172668,130.183 +2000,0,0.1524,55.5,0.00172668,129.673 +2500,0,0.1524,55.5,0.00172668,127.763 +3150,0,0.1524,55.5,0.00172668,127.753 +4000,0,0.1524,55.5,0.00172668,127.233 +5000,0,0.1524,55.5,0.00172668,125.203 +6300,0,0.1524,55.5,0.00172668,123.303 +8000,0,0.1524,55.5,0.00172668,121.903 +10000,0,0.1524,55.5,0.00172668,119.253 +12500,0,0.1524,55.5,0.00172668,117.093 +16000,0,0.1524,55.5,0.00172668,112.803 +500,0,0.1524,39.6,0.00193287,119.513 +630,0,0.1524,39.6,0.00193287,124.403 +800,0,0.1524,39.6,0.00193287,127.903 +1000,0,0.1524,39.6,0.00193287,130.033 +1250,0,0.1524,39.6,0.00193287,131.023 +1600,0,0.1524,39.6,0.00193287,131.013 +2000,0,0.1524,39.6,0.00193287,129.633 +2500,0,0.1524,39.6,0.00193287,126.863 +3150,0,0.1524,39.6,0.00193287,125.603 +4000,0,0.1524,39.6,0.00193287,125.343 +5000,0,0.1524,39.6,0.00193287,123.453 +6300,0,0.1524,39.6,0.00193287,121.313 +8000,0,0.1524,39.6,0.00193287,120.553 +10000,0,0.1524,39.6,0.00193287,115.413 +500,0,0.1524,31.7,0.00209405,121.617 +630,0,0.1524,31.7,0.00209405,125.997 +800,0,0.1524,31.7,0.00209405,129.117 +1000,0,0.1524,31.7,0.00209405,130.987 +1250,0,0.1524,31.7,0.00209405,131.467 +1600,0,0.1524,31.7,0.00209405,130.817 +2000,0,0.1524,31.7,0.00209405,128.907 +2500,0,0.1524,31.7,0.00209405,125.867 +3150,0,0.1524,31.7,0.00209405,124.207 +4000,0,0.1524,31.7,0.00209405,123.807 +5000,0,0.1524,31.7,0.00209405,122.397 +6300,0,0.1524,31.7,0.00209405,119.737 +8000,0,0.1524,31.7,0.00209405,117.957 +630,2.7,0.1524,71.3,0.00243851,127.404 +800,2.7,0.1524,71.3,0.00243851,127.394 +1000,2.7,0.1524,71.3,0.00243851,128.774 +1250,2.7,0.1524,71.3,0.00243851,130.144 +1600,2.7,0.1524,71.3,0.00243851,130.644 +2000,2.7,0.1524,71.3,0.00243851,130.114 +2500,2.7,0.1524,71.3,0.00243851,128.334 +3150,2.7,0.1524,71.3,0.00243851,127.054 +4000,2.7,0.1524,71.3,0.00243851,126.534 +5000,2.7,0.1524,71.3,0.00243851,124.364 +6300,2.7,0.1524,71.3,0.00243851,121.944 +8000,2.7,0.1524,71.3,0.00243851,120.534 +10000,2.7,0.1524,71.3,0.00243851,116.724 +12500,2.7,0.1524,71.3,0.00243851,113.034 +16000,2.7,0.1524,71.3,0.00243851,110.364 +500,2.7,0.1524,39.6,0.00294804,121.009 +630,2.7,0.1524,39.6,0.00294804,125.809 +800,2.7,0.1524,39.6,0.00294804,128.829 +1000,2.7,0.1524,39.6,0.00294804,130.589 +1250,2.7,0.1524,39.6,0.00294804,130.829 +1600,2.7,0.1524,39.6,0.00294804,130.049 +2000,2.7,0.1524,39.6,0.00294804,128.139 +2500,2.7,0.1524,39.6,0.00294804,125.589 +3150,2.7,0.1524,39.6,0.00294804,122.919 +4000,2.7,0.1524,39.6,0.00294804,121.889 +5000,2.7,0.1524,39.6,0.00294804,121.499 +6300,2.7,0.1524,39.6,0.00294804,119.209 +8000,2.7,0.1524,39.6,0.00294804,116.659 +10000,2.7,0.1524,39.6,0.00294804,112.589 +12500,2.7,0.1524,39.6,0.00294804,108.649 +400,5.4,0.1524,71.3,0.00401199,124.121 +500,5.4,0.1524,71.3,0.00401199,126.291 +630,5.4,0.1524,71.3,0.00401199,128.971 +800,5.4,0.1524,71.3,0.00401199,131.281 +1000,5.4,0.1524,71.3,0.00401199,133.201 +1250,5.4,0.1524,71.3,0.00401199,134.111 +1600,5.4,0.1524,71.3,0.00401199,133.241 +2000,5.4,0.1524,71.3,0.00401199,131.111 +2500,5.4,0.1524,71.3,0.00401199,127.591 +3150,5.4,0.1524,71.3,0.00401199,123.311 +4000,5.4,0.1524,71.3,0.00401199,121.431 +5000,5.4,0.1524,71.3,0.00401199,120.061 +6300,5.4,0.1524,71.3,0.00401199,116.411 +400,5.4,0.1524,55.5,0.00433288,126.807 +500,5.4,0.1524,55.5,0.00433288,129.367 +630,5.4,0.1524,55.5,0.00433288,131.807 +800,5.4,0.1524,55.5,0.00433288,133.097 +1000,5.4,0.1524,55.5,0.00433288,132.127 +1250,5.4,0.1524,55.5,0.00433288,130.777 +1600,5.4,0.1524,55.5,0.00433288,130.567 +2000,5.4,0.1524,55.5,0.00433288,128.707 +2500,5.4,0.1524,55.5,0.00433288,124.077 +3150,5.4,0.1524,55.5,0.00433288,121.587 +4000,5.4,0.1524,55.5,0.00433288,119.737 +5000,5.4,0.1524,55.5,0.00433288,118.757 +6300,5.4,0.1524,55.5,0.00433288,117.287 +8000,5.4,0.1524,55.5,0.00433288,114.927 +315,5.4,0.1524,39.6,0.00485029,125.347 +400,5.4,0.1524,39.6,0.00485029,127.637 +500,5.4,0.1524,39.6,0.00485029,129.937 +630,5.4,0.1524,39.6,0.00485029,132.357 +800,5.4,0.1524,39.6,0.00485029,132.757 +1000,5.4,0.1524,39.6,0.00485029,130.507 +1250,5.4,0.1524,39.6,0.00485029,127.117 +1600,5.4,0.1524,39.6,0.00485029,126.267 +2000,5.4,0.1524,39.6,0.00485029,124.647 +2500,5.4,0.1524,39.6,0.00485029,120.497 +3150,5.4,0.1524,39.6,0.00485029,119.137 +4000,5.4,0.1524,39.6,0.00485029,117.137 +5000,5.4,0.1524,39.6,0.00485029,117.037 +6300,5.4,0.1524,39.6,0.00485029,116.677 +315,5.4,0.1524,31.7,0.00525474,125.741 +400,5.4,0.1524,31.7,0.00525474,127.781 +500,5.4,0.1524,31.7,0.00525474,129.681 +630,5.4,0.1524,31.7,0.00525474,131.471 +800,5.4,0.1524,31.7,0.00525474,131.491 +1000,5.4,0.1524,31.7,0.00525474,128.241 +1250,5.4,0.1524,31.7,0.00525474,123.991 +1600,5.4,0.1524,31.7,0.00525474,123.761 +2000,5.4,0.1524,31.7,0.00525474,122.771 +2500,5.4,0.1524,31.7,0.00525474,119.151 +3150,5.4,0.1524,31.7,0.00525474,118.291 +4000,5.4,0.1524,31.7,0.00525474,116.181 +5000,5.4,0.1524,31.7,0.00525474,115.691 +6300,5.4,0.1524,31.7,0.00525474,115.591 +315,7.2,0.1524,71.3,0.00752039,128.713 +400,7.2,0.1524,71.3,0.00752039,130.123 +500,7.2,0.1524,71.3,0.00752039,132.043 +630,7.2,0.1524,71.3,0.00752039,134.853 +800,7.2,0.1524,71.3,0.00752039,136.023 +1000,7.2,0.1524,71.3,0.00752039,134.273 +1250,7.2,0.1524,71.3,0.00752039,132.513 +1600,7.2,0.1524,71.3,0.00752039,130.893 +2000,7.2,0.1524,71.3,0.00752039,128.643 +2500,7.2,0.1524,71.3,0.00752039,124.353 +3150,7.2,0.1524,71.3,0.00752039,116.783 +4000,7.2,0.1524,71.3,0.00752039,119.343 +5000,7.2,0.1524,71.3,0.00752039,118.343 +6300,7.2,0.1524,71.3,0.00752039,116.603 +8000,7.2,0.1524,71.3,0.00752039,113.333 +10000,7.2,0.1524,71.3,0.00752039,110.313 +250,7.2,0.1524,39.6,0.00909175,127.488 +315,7.2,0.1524,39.6,0.00909175,130.558 +400,7.2,0.1524,39.6,0.00909175,132.118 +500,7.2,0.1524,39.6,0.00909175,132.658 +630,7.2,0.1524,39.6,0.00909175,133.198 +800,7.2,0.1524,39.6,0.00909175,132.358 +1000,7.2,0.1524,39.6,0.00909175,128.338 +1250,7.2,0.1524,39.6,0.00909175,122.428 +1600,7.2,0.1524,39.6,0.00909175,120.058 +2000,7.2,0.1524,39.6,0.00909175,120.228 +2500,7.2,0.1524,39.6,0.00909175,117.478 +3150,7.2,0.1524,39.6,0.00909175,111.818 +4000,7.2,0.1524,39.6,0.00909175,114.258 +5000,7.2,0.1524,39.6,0.00909175,113.288 +6300,7.2,0.1524,39.6,0.00909175,112.688 +8000,7.2,0.1524,39.6,0.00909175,111.588 +10000,7.2,0.1524,39.6,0.00909175,110.868 +200,9.9,0.1524,71.3,0.0193001,134.319 +250,9.9,0.1524,71.3,0.0193001,135.329 +315,9.9,0.1524,71.3,0.0193001,135.459 +400,9.9,0.1524,71.3,0.0193001,135.079 +500,9.9,0.1524,71.3,0.0193001,131.279 +630,9.9,0.1524,71.3,0.0193001,129.889 +800,9.9,0.1524,71.3,0.0193001,128.879 +1000,9.9,0.1524,71.3,0.0193001,126.349 +1250,9.9,0.1524,71.3,0.0193001,122.679 +1600,9.9,0.1524,71.3,0.0193001,121.789 +2000,9.9,0.1524,71.3,0.0193001,120.779 +2500,9.9,0.1524,71.3,0.0193001,119.639 +3150,9.9,0.1524,71.3,0.0193001,116.849 +4000,9.9,0.1524,71.3,0.0193001,115.079 +5000,9.9,0.1524,71.3,0.0193001,114.569 +6300,9.9,0.1524,71.3,0.0193001,112.039 +200,9.9,0.1524,55.5,0.0208438,131.955 +250,9.9,0.1524,55.5,0.0208438,133.235 +315,9.9,0.1524,55.5,0.0208438,132.355 +400,9.9,0.1524,55.5,0.0208438,131.605 +500,9.9,0.1524,55.5,0.0208438,127.815 +630,9.9,0.1524,55.5,0.0208438,127.315 +800,9.9,0.1524,55.5,0.0208438,126.565 +1000,9.9,0.1524,55.5,0.0208438,124.665 +1250,9.9,0.1524,55.5,0.0208438,121.635 +1600,9.9,0.1524,55.5,0.0208438,119.875 +2000,9.9,0.1524,55.5,0.0208438,119.505 +2500,9.9,0.1524,55.5,0.0208438,118.365 +3150,9.9,0.1524,55.5,0.0208438,115.085 +4000,9.9,0.1524,55.5,0.0208438,112.945 +5000,9.9,0.1524,55.5,0.0208438,112.065 +6300,9.9,0.1524,55.5,0.0208438,110.555 +200,9.9,0.1524,39.6,0.0233328,127.315 +250,9.9,0.1524,39.6,0.0233328,128.335 +315,9.9,0.1524,39.6,0.0233328,128.595 +400,9.9,0.1524,39.6,0.0233328,128.345 +500,9.9,0.1524,39.6,0.0233328,126.835 +630,9.9,0.1524,39.6,0.0233328,126.465 +800,9.9,0.1524,39.6,0.0233328,126.345 +1000,9.9,0.1524,39.6,0.0233328,123.835 +1250,9.9,0.1524,39.6,0.0233328,120.555 +1600,9.9,0.1524,39.6,0.0233328,118.545 +2000,9.9,0.1524,39.6,0.0233328,117.925 +2500,9.9,0.1524,39.6,0.0233328,116.295 +3150,9.9,0.1524,39.6,0.0233328,113.525 +4000,9.9,0.1524,39.6,0.0233328,112.265 +5000,9.9,0.1524,39.6,0.0233328,111.135 +6300,9.9,0.1524,39.6,0.0233328,109.885 +200,9.9,0.1524,31.7,0.0252785,127.299 +250,9.9,0.1524,31.7,0.0252785,128.559 +315,9.9,0.1524,31.7,0.0252785,128.809 +400,9.9,0.1524,31.7,0.0252785,128.939 +500,9.9,0.1524,31.7,0.0252785,127.179 +630,9.9,0.1524,31.7,0.0252785,126.049 +800,9.9,0.1524,31.7,0.0252785,125.539 +1000,9.9,0.1524,31.7,0.0252785,122.149 +1250,9.9,0.1524,31.7,0.0252785,118.619 +1600,9.9,0.1524,31.7,0.0252785,117.119 +2000,9.9,0.1524,31.7,0.0252785,116.859 +2500,9.9,0.1524,31.7,0.0252785,114.729 +3150,9.9,0.1524,31.7,0.0252785,112.209 +4000,9.9,0.1524,31.7,0.0252785,111.459 +5000,9.9,0.1524,31.7,0.0252785,109.949 +6300,9.9,0.1524,31.7,0.0252785,108.689 +200,12.6,0.1524,71.3,0.0483159,128.354 +250,12.6,0.1524,71.3,0.0483159,129.744 +315,12.6,0.1524,71.3,0.0483159,128.484 +400,12.6,0.1524,71.3,0.0483159,127.094 +500,12.6,0.1524,71.3,0.0483159,121.664 +630,12.6,0.1524,71.3,0.0483159,123.304 +800,12.6,0.1524,71.3,0.0483159,123.054 +1000,12.6,0.1524,71.3,0.0483159,122.044 +1250,12.6,0.1524,71.3,0.0483159,120.154 +1600,12.6,0.1524,71.3,0.0483159,120.534 +2000,12.6,0.1524,71.3,0.0483159,117.504 +2500,12.6,0.1524,71.3,0.0483159,115.234 +3150,12.6,0.1524,71.3,0.0483159,113.334 +4000,12.6,0.1524,71.3,0.0483159,108.034 +5000,12.6,0.1524,71.3,0.0483159,108.034 +6300,12.6,0.1524,71.3,0.0483159,107.284 +200,12.6,0.1524,39.6,0.0584113,114.750 +250,12.6,0.1524,39.6,0.0584113,115.890 +315,12.6,0.1524,39.6,0.0584113,116.020 +400,12.6,0.1524,39.6,0.0584113,115.910 +500,12.6,0.1524,39.6,0.0584113,114.900 +630,12.6,0.1524,39.6,0.0584113,116.550 +800,12.6,0.1524,39.6,0.0584113,116.560 +1000,12.6,0.1524,39.6,0.0584113,114.670 +1250,12.6,0.1524,39.6,0.0584113,112.160 +1600,12.6,0.1524,39.6,0.0584113,110.780 +2000,12.6,0.1524,39.6,0.0584113,109.520 +2500,12.6,0.1524,39.6,0.0584113,106.880 +3150,12.6,0.1524,39.6,0.0584113,106.260 +4000,12.6,0.1524,39.6,0.0584113,104.500 +5000,12.6,0.1524,39.6,0.0584113,104.130 +6300,12.6,0.1524,39.6,0.0584113,103.380 +800,0,0.0508,71.3,0.000740478,130.960 +1000,0,0.0508,71.3,0.000740478,129.450 +1250,0,0.0508,71.3,0.000740478,128.560 +1600,0,0.0508,71.3,0.000740478,129.680 +2000,0,0.0508,71.3,0.000740478,131.060 +2500,0,0.0508,71.3,0.000740478,131.310 +3150,0,0.0508,71.3,0.000740478,135.070 +4000,0,0.0508,71.3,0.000740478,134.430 +5000,0,0.0508,71.3,0.000740478,134.430 +6300,0,0.0508,71.3,0.000740478,133.040 +8000,0,0.0508,71.3,0.000740478,130.890 +10000,0,0.0508,71.3,0.000740478,128.740 +12500,0,0.0508,71.3,0.000740478,125.220 +800,0,0.0508,55.5,0.00076193,124.336 +1000,0,0.0508,55.5,0.00076193,125.586 +1250,0,0.0508,55.5,0.00076193,127.076 +1600,0,0.0508,55.5,0.00076193,128.576 +2000,0,0.0508,55.5,0.00076193,131.456 +2500,0,0.0508,55.5,0.00076193,133.956 +3150,0,0.0508,55.5,0.00076193,134.826 +4000,0,0.0508,55.5,0.00076193,134.946 +5000,0,0.0508,55.5,0.00076193,134.556 +6300,0,0.0508,55.5,0.00076193,132.796 +8000,0,0.0508,55.5,0.00076193,130.156 +10000,0,0.0508,55.5,0.00076193,127.636 +12500,0,0.0508,55.5,0.00076193,125.376 +800,0,0.0508,39.6,0.000791822,126.508 +1000,0,0.0508,39.6,0.000791822,127.638 +1250,0,0.0508,39.6,0.000791822,129.148 +1600,0,0.0508,39.6,0.000791822,130.908 +2000,0,0.0508,39.6,0.000791822,132.918 +2500,0,0.0508,39.6,0.000791822,134.938 +3150,0,0.0508,39.6,0.000791822,135.938 +4000,0,0.0508,39.6,0.000791822,135.308 +5000,0,0.0508,39.6,0.000791822,134.308 +6300,0,0.0508,39.6,0.000791822,131.918 +8000,0,0.0508,39.6,0.000791822,128.518 +10000,0,0.0508,39.6,0.000791822,125.998 +12500,0,0.0508,39.6,0.000791822,123.988 +800,0,0.0508,31.7,0.000812164,122.790 +1000,0,0.0508,31.7,0.000812164,126.780 +1250,0,0.0508,31.7,0.000812164,129.270 +1600,0,0.0508,31.7,0.000812164,131.010 +2000,0,0.0508,31.7,0.000812164,133.010 +2500,0,0.0508,31.7,0.000812164,134.870 +3150,0,0.0508,31.7,0.000812164,135.490 +4000,0,0.0508,31.7,0.000812164,134.110 +5000,0,0.0508,31.7,0.000812164,133.230 +6300,0,0.0508,31.7,0.000812164,130.340 +8000,0,0.0508,31.7,0.000812164,126.590 +10000,0,0.0508,31.7,0.000812164,122.450 +12500,0,0.0508,31.7,0.000812164,119.070 +1600,4.2,0.0508,71.3,0.00142788,124.318 +2000,4.2,0.0508,71.3,0.00142788,129.848 +2500,4.2,0.0508,71.3,0.00142788,131.978 +3150,4.2,0.0508,71.3,0.00142788,133.728 +4000,4.2,0.0508,71.3,0.00142788,133.598 +5000,4.2,0.0508,71.3,0.00142788,132.828 +6300,4.2,0.0508,71.3,0.00142788,129.308 +8000,4.2,0.0508,71.3,0.00142788,125.268 +10000,4.2,0.0508,71.3,0.00142788,121.238 +12500,4.2,0.0508,71.3,0.00142788,117.328 +1000,4.2,0.0508,39.6,0.00152689,125.647 +1250,4.2,0.0508,39.6,0.00152689,128.427 +1600,4.2,0.0508,39.6,0.00152689,130.197 +2000,4.2,0.0508,39.6,0.00152689,132.587 +2500,4.2,0.0508,39.6,0.00152689,133.847 +3150,4.2,0.0508,39.6,0.00152689,133.587 +4000,4.2,0.0508,39.6,0.00152689,131.807 +5000,4.2,0.0508,39.6,0.00152689,129.777 +6300,4.2,0.0508,39.6,0.00152689,125.717 +8000,4.2,0.0508,39.6,0.00152689,120.397 +10000,4.2,0.0508,39.6,0.00152689,116.967 +800,8.4,0.0508,71.3,0.00529514,127.556 +1000,8.4,0.0508,71.3,0.00529514,129.946 +1250,8.4,0.0508,71.3,0.00529514,132.086 +1600,8.4,0.0508,71.3,0.00529514,133.846 +2000,8.4,0.0508,71.3,0.00529514,134.476 +2500,8.4,0.0508,71.3,0.00529514,134.226 +3150,8.4,0.0508,71.3,0.00529514,131.966 +4000,8.4,0.0508,71.3,0.00529514,126.926 +5000,8.4,0.0508,71.3,0.00529514,121.146 +400,8.4,0.0508,55.5,0.00544854,121.582 +500,8.4,0.0508,55.5,0.00544854,123.742 +630,8.4,0.0508,55.5,0.00544854,126.152 +800,8.4,0.0508,55.5,0.00544854,128.562 +1000,8.4,0.0508,55.5,0.00544854,130.722 +1250,8.4,0.0508,55.5,0.00544854,132.252 +1600,8.4,0.0508,55.5,0.00544854,133.032 +2000,8.4,0.0508,55.5,0.00544854,133.042 +2500,8.4,0.0508,55.5,0.00544854,131.542 +3150,8.4,0.0508,55.5,0.00544854,128.402 +4000,8.4,0.0508,55.5,0.00544854,122.612 +5000,8.4,0.0508,55.5,0.00544854,115.812 +400,8.4,0.0508,39.6,0.00566229,120.015 +500,8.4,0.0508,39.6,0.00566229,122.905 +630,8.4,0.0508,39.6,0.00566229,126.045 +800,8.4,0.0508,39.6,0.00566229,128.435 +1000,8.4,0.0508,39.6,0.00566229,130.195 +1250,8.4,0.0508,39.6,0.00566229,131.205 +1600,8.4,0.0508,39.6,0.00566229,130.965 +2000,8.4,0.0508,39.6,0.00566229,129.965 +2500,8.4,0.0508,39.6,0.00566229,127.465 +3150,8.4,0.0508,39.6,0.00566229,123.965 +4000,8.4,0.0508,39.6,0.00566229,118.955 +400,8.4,0.0508,31.7,0.00580776,120.076 +500,8.4,0.0508,31.7,0.00580776,122.966 +630,8.4,0.0508,31.7,0.00580776,125.856 +800,8.4,0.0508,31.7,0.00580776,128.246 +1000,8.4,0.0508,31.7,0.00580776,129.516 +1250,8.4,0.0508,31.7,0.00580776,130.156 +1600,8.4,0.0508,31.7,0.00580776,129.296 +2000,8.4,0.0508,31.7,0.00580776,127.686 +2500,8.4,0.0508,31.7,0.00580776,125.576 +3150,8.4,0.0508,31.7,0.00580776,122.086 +4000,8.4,0.0508,31.7,0.00580776,118.106 +200,11.2,0.0508,71.3,0.014072,125.941 +250,11.2,0.0508,71.3,0.014072,127.101 +315,11.2,0.0508,71.3,0.014072,128.381 +400,11.2,0.0508,71.3,0.014072,129.281 +500,11.2,0.0508,71.3,0.014072,130.311 +630,11.2,0.0508,71.3,0.014072,133.611 +800,11.2,0.0508,71.3,0.014072,136.031 +1000,11.2,0.0508,71.3,0.014072,136.941 +1250,11.2,0.0508,71.3,0.014072,136.191 +1600,11.2,0.0508,71.3,0.014072,135.191 +2000,11.2,0.0508,71.3,0.014072,133.311 +2500,11.2,0.0508,71.3,0.014072,130.541 +3150,11.2,0.0508,71.3,0.014072,127.141 +4000,11.2,0.0508,71.3,0.014072,122.471 +200,11.2,0.0508,39.6,0.0150478,125.010 +250,11.2,0.0508,39.6,0.0150478,126.430 +315,11.2,0.0508,39.6,0.0150478,128.990 +400,11.2,0.0508,39.6,0.0150478,130.670 +500,11.2,0.0508,39.6,0.0150478,131.960 +630,11.2,0.0508,39.6,0.0150478,133.130 +800,11.2,0.0508,39.6,0.0150478,133.790 +1000,11.2,0.0508,39.6,0.0150478,132.430 +1250,11.2,0.0508,39.6,0.0150478,130.050 +1600,11.2,0.0508,39.6,0.0150478,126.540 +2000,11.2,0.0508,39.6,0.0150478,124.420 +2500,11.2,0.0508,39.6,0.0150478,122.170 +3150,11.2,0.0508,39.6,0.0150478,119.670 +4000,11.2,0.0508,39.6,0.0150478,115.520 +200,15.4,0.0508,71.3,0.0264269,123.595 +250,15.4,0.0508,71.3,0.0264269,124.835 +315,15.4,0.0508,71.3,0.0264269,126.195 +400,15.4,0.0508,71.3,0.0264269,126.805 +500,15.4,0.0508,71.3,0.0264269,127.285 +630,15.4,0.0508,71.3,0.0264269,129.645 +800,15.4,0.0508,71.3,0.0264269,131.515 +1000,15.4,0.0508,71.3,0.0264269,131.865 +1250,15.4,0.0508,71.3,0.0264269,130.845 +1600,15.4,0.0508,71.3,0.0264269,130.065 +2000,15.4,0.0508,71.3,0.0264269,129.285 +2500,15.4,0.0508,71.3,0.0264269,127.625 +3150,15.4,0.0508,71.3,0.0264269,125.715 +4000,15.4,0.0508,71.3,0.0264269,122.675 +5000,15.4,0.0508,71.3,0.0264269,119.135 +6300,15.4,0.0508,71.3,0.0264269,115.215 +8000,15.4,0.0508,71.3,0.0264269,112.675 +200,15.4,0.0508,55.5,0.0271925,122.940 +250,15.4,0.0508,55.5,0.0271925,124.170 +315,15.4,0.0508,55.5,0.0271925,125.390 +400,15.4,0.0508,55.5,0.0271925,126.500 +500,15.4,0.0508,55.5,0.0271925,127.220 +630,15.4,0.0508,55.5,0.0271925,129.330 +800,15.4,0.0508,55.5,0.0271925,130.430 +1000,15.4,0.0508,55.5,0.0271925,130.400 +1250,15.4,0.0508,55.5,0.0271925,130.000 +1600,15.4,0.0508,55.5,0.0271925,128.200 +2000,15.4,0.0508,55.5,0.0271925,127.040 +2500,15.4,0.0508,55.5,0.0271925,125.630 +3150,15.4,0.0508,55.5,0.0271925,123.460 +4000,15.4,0.0508,55.5,0.0271925,120.920 +5000,15.4,0.0508,55.5,0.0271925,117.110 +6300,15.4,0.0508,55.5,0.0271925,112.930 +200,15.4,0.0508,39.6,0.0282593,121.783 +250,15.4,0.0508,39.6,0.0282593,122.893 +315,15.4,0.0508,39.6,0.0282593,124.493 +400,15.4,0.0508,39.6,0.0282593,125.353 +500,15.4,0.0508,39.6,0.0282593,125.963 +630,15.4,0.0508,39.6,0.0282593,127.443 +800,15.4,0.0508,39.6,0.0282593,128.423 +1000,15.4,0.0508,39.6,0.0282593,127.893 +1250,15.4,0.0508,39.6,0.0282593,126.743 +1600,15.4,0.0508,39.6,0.0282593,124.843 +2000,15.4,0.0508,39.6,0.0282593,123.443 +2500,15.4,0.0508,39.6,0.0282593,122.413 +3150,15.4,0.0508,39.6,0.0282593,120.513 +4000,15.4,0.0508,39.6,0.0282593,118.113 +5000,15.4,0.0508,39.6,0.0282593,114.453 +6300,15.4,0.0508,39.6,0.0282593,109.663 +200,15.4,0.0508,31.7,0.0289853,119.975 +250,15.4,0.0508,31.7,0.0289853,121.225 +315,15.4,0.0508,31.7,0.0289853,122.845 +400,15.4,0.0508,31.7,0.0289853,123.705 +500,15.4,0.0508,31.7,0.0289853,123.695 +630,15.4,0.0508,31.7,0.0289853,124.685 +800,15.4,0.0508,31.7,0.0289853,125.555 +1000,15.4,0.0508,31.7,0.0289853,124.525 +1250,15.4,0.0508,31.7,0.0289853,123.255 +1600,15.4,0.0508,31.7,0.0289853,121.485 +2000,15.4,0.0508,31.7,0.0289853,120.835 +2500,15.4,0.0508,31.7,0.0289853,119.945 +3150,15.4,0.0508,31.7,0.0289853,118.045 +4000,15.4,0.0508,31.7,0.0289853,115.635 +5000,15.4,0.0508,31.7,0.0289853,112.355 +6300,15.4,0.0508,31.7,0.0289853,108.185 +200,19.7,0.0508,71.3,0.0341183,118.005 +250,19.7,0.0508,71.3,0.0341183,119.115 +315,19.7,0.0508,71.3,0.0341183,121.235 +400,19.7,0.0508,71.3,0.0341183,123.865 +500,19.7,0.0508,71.3,0.0341183,126.995 +630,19.7,0.0508,71.3,0.0341183,128.365 +800,19.7,0.0508,71.3,0.0341183,124.555 +1000,19.7,0.0508,71.3,0.0341183,121.885 +1250,19.7,0.0508,71.3,0.0341183,121.485 +1600,19.7,0.0508,71.3,0.0341183,120.575 +2000,19.7,0.0508,71.3,0.0341183,120.055 +2500,19.7,0.0508,71.3,0.0341183,118.385 +3150,19.7,0.0508,71.3,0.0341183,116.225 +4000,19.7,0.0508,71.3,0.0341183,113.045 +200,19.7,0.0508,39.6,0.036484,125.974 +250,19.7,0.0508,39.6,0.036484,127.224 +315,19.7,0.0508,39.6,0.036484,129.864 +400,19.7,0.0508,39.6,0.036484,130.614 +500,19.7,0.0508,39.6,0.036484,128.444 +630,19.7,0.0508,39.6,0.036484,120.324 +800,19.7,0.0508,39.6,0.036484,119.174 +1000,19.7,0.0508,39.6,0.036484,118.904 +1250,19.7,0.0508,39.6,0.036484,118.634 +1600,19.7,0.0508,39.6,0.036484,117.604 +2000,19.7,0.0508,39.6,0.036484,117.724 +2500,19.7,0.0508,39.6,0.036484,116.184 +3150,19.7,0.0508,39.6,0.036484,113.004 +4000,19.7,0.0508,39.6,0.036484,108.684 +2500,0,0.0254,71.3,0.000400682,133.707 +3150,0,0.0254,71.3,0.000400682,137.007 +4000,0,0.0254,71.3,0.000400682,138.557 +5000,0,0.0254,71.3,0.000400682,136.837 +6300,0,0.0254,71.3,0.000400682,134.987 +8000,0,0.0254,71.3,0.000400682,129.867 +10000,0,0.0254,71.3,0.000400682,130.787 +12500,0,0.0254,71.3,0.000400682,133.207 +16000,0,0.0254,71.3,0.000400682,130.477 +20000,0,0.0254,71.3,0.000400682,123.217 +2000,0,0.0254,55.5,0.00041229,127.623 +2500,0,0.0254,55.5,0.00041229,130.073 +3150,0,0.0254,55.5,0.00041229,130.503 +4000,0,0.0254,55.5,0.00041229,133.223 +5000,0,0.0254,55.5,0.00041229,135.803 +6300,0,0.0254,55.5,0.00041229,136.103 +8000,0,0.0254,55.5,0.00041229,136.163 +10000,0,0.0254,55.5,0.00041229,134.563 +12500,0,0.0254,55.5,0.00041229,131.453 +16000,0,0.0254,55.5,0.00041229,125.683 +20000,0,0.0254,55.5,0.00041229,121.933 +1600,0,0.0254,39.6,0.000428464,124.156 +2000,0,0.0254,39.6,0.000428464,130.026 +2500,0,0.0254,39.6,0.000428464,131.836 +3150,0,0.0254,39.6,0.000428464,133.276 +4000,0,0.0254,39.6,0.000428464,135.346 +5000,0,0.0254,39.6,0.000428464,136.536 +6300,0,0.0254,39.6,0.000428464,136.826 +8000,0,0.0254,39.6,0.000428464,135.866 +10000,0,0.0254,39.6,0.000428464,133.376 +12500,0,0.0254,39.6,0.000428464,129.116 +16000,0,0.0254,39.6,0.000428464,124.986 +1000,0,0.0254,31.7,0.000439472,125.127 +1250,0,0.0254,31.7,0.000439472,127.947 +1600,0,0.0254,31.7,0.000439472,129.267 +2000,0,0.0254,31.7,0.000439472,130.697 +2500,0,0.0254,31.7,0.000439472,132.897 +3150,0,0.0254,31.7,0.000439472,135.227 +4000,0,0.0254,31.7,0.000439472,137.047 +5000,0,0.0254,31.7,0.000439472,138.607 +6300,0,0.0254,31.7,0.000439472,138.537 +8000,0,0.0254,31.7,0.000439472,137.207 +10000,0,0.0254,31.7,0.000439472,134.227 +12500,0,0.0254,31.7,0.000439472,128.977 +16000,0,0.0254,31.7,0.000439472,125.627 +2000,4.8,0.0254,71.3,0.000848633,128.398 +2500,4.8,0.0254,71.3,0.000848633,130.828 +3150,4.8,0.0254,71.3,0.000848633,133.378 +4000,4.8,0.0254,71.3,0.000848633,134.928 +5000,4.8,0.0254,71.3,0.000848633,135.468 +6300,4.8,0.0254,71.3,0.000848633,134.498 +8000,4.8,0.0254,71.3,0.000848633,131.518 +10000,4.8,0.0254,71.3,0.000848633,127.398 +12500,4.8,0.0254,71.3,0.000848633,127.688 +16000,4.8,0.0254,71.3,0.000848633,124.208 +20000,4.8,0.0254,71.3,0.000848633,119.708 +1600,4.8,0.0254,55.5,0.000873218,121.474 +2000,4.8,0.0254,55.5,0.000873218,125.054 +2500,4.8,0.0254,55.5,0.000873218,129.144 +3150,4.8,0.0254,55.5,0.000873218,132.354 +4000,4.8,0.0254,55.5,0.000873218,133.924 +5000,4.8,0.0254,55.5,0.000873218,135.484 +6300,4.8,0.0254,55.5,0.000873218,135.164 +8000,4.8,0.0254,55.5,0.000873218,132.184 +10000,4.8,0.0254,55.5,0.000873218,126.944 +12500,4.8,0.0254,55.5,0.000873218,125.094 +16000,4.8,0.0254,55.5,0.000873218,124.394 +20000,4.8,0.0254,55.5,0.000873218,121.284 +500,4.8,0.0254,39.6,0.000907475,116.366 +630,4.8,0.0254,39.6,0.000907475,118.696 +800,4.8,0.0254,39.6,0.000907475,120.766 +1000,4.8,0.0254,39.6,0.000907475,122.956 +1250,4.8,0.0254,39.6,0.000907475,125.026 +1600,4.8,0.0254,39.6,0.000907475,125.966 +2000,4.8,0.0254,39.6,0.000907475,128.916 +2500,4.8,0.0254,39.6,0.000907475,131.236 +3150,4.8,0.0254,39.6,0.000907475,133.436 +4000,4.8,0.0254,39.6,0.000907475,134.996 +5000,4.8,0.0254,39.6,0.000907475,135.426 +6300,4.8,0.0254,39.6,0.000907475,134.336 +8000,4.8,0.0254,39.6,0.000907475,131.346 +10000,4.8,0.0254,39.6,0.000907475,126.066 +500,4.8,0.0254,31.7,0.000930789,116.128 +630,4.8,0.0254,31.7,0.000930789,120.078 +800,4.8,0.0254,31.7,0.000930789,122.648 +1000,4.8,0.0254,31.7,0.000930789,125.348 +1250,4.8,0.0254,31.7,0.000930789,127.408 +1600,4.8,0.0254,31.7,0.000930789,128.718 +2000,4.8,0.0254,31.7,0.000930789,130.148 +2500,4.8,0.0254,31.7,0.000930789,132.588 +3150,4.8,0.0254,31.7,0.000930789,134.268 +4000,4.8,0.0254,31.7,0.000930789,135.328 +5000,4.8,0.0254,31.7,0.000930789,135.248 +6300,4.8,0.0254,31.7,0.000930789,132.898 +8000,4.8,0.0254,31.7,0.000930789,127.008 +630,9.5,0.0254,71.3,0.00420654,125.726 +800,9.5,0.0254,71.3,0.00420654,127.206 +1000,9.5,0.0254,71.3,0.00420654,129.556 +1250,9.5,0.0254,71.3,0.00420654,131.656 +1600,9.5,0.0254,71.3,0.00420654,133.756 +2000,9.5,0.0254,71.3,0.00420654,134.976 +2500,9.5,0.0254,71.3,0.00420654,135.956 +3150,9.5,0.0254,71.3,0.00420654,136.166 +4000,9.5,0.0254,71.3,0.00420654,134.236 +5000,9.5,0.0254,71.3,0.00420654,131.186 +6300,9.5,0.0254,71.3,0.00420654,127.246 +400,9.5,0.0254,55.5,0.0043284,120.952 +500,9.5,0.0254,55.5,0.0043284,123.082 +630,9.5,0.0254,55.5,0.0043284,125.452 +800,9.5,0.0254,55.5,0.0043284,128.082 +1000,9.5,0.0254,55.5,0.0043284,130.332 +1250,9.5,0.0254,55.5,0.0043284,132.202 +1600,9.5,0.0254,55.5,0.0043284,133.062 +2000,9.5,0.0254,55.5,0.0043284,134.052 +2500,9.5,0.0254,55.5,0.0043284,134.152 +3150,9.5,0.0254,55.5,0.0043284,133.252 +4000,9.5,0.0254,55.5,0.0043284,131.582 +5000,9.5,0.0254,55.5,0.0043284,128.412 +6300,9.5,0.0254,55.5,0.0043284,124.222 +200,9.5,0.0254,39.6,0.00449821,116.074 +250,9.5,0.0254,39.6,0.00449821,116.924 +315,9.5,0.0254,39.6,0.00449821,119.294 +400,9.5,0.0254,39.6,0.00449821,121.154 +500,9.5,0.0254,39.6,0.00449821,123.894 +630,9.5,0.0254,39.6,0.00449821,126.514 +800,9.5,0.0254,39.6,0.00449821,129.014 +1000,9.5,0.0254,39.6,0.00449821,130.374 +1250,9.5,0.0254,39.6,0.00449821,130.964 +1600,9.5,0.0254,39.6,0.00449821,131.184 +2000,9.5,0.0254,39.6,0.00449821,131.274 +2500,9.5,0.0254,39.6,0.00449821,131.234 +3150,9.5,0.0254,39.6,0.00449821,129.934 +4000,9.5,0.0254,39.6,0.00449821,127.864 +5000,9.5,0.0254,39.6,0.00449821,125.044 +6300,9.5,0.0254,39.6,0.00449821,120.324 +200,9.5,0.0254,31.7,0.00461377,119.146 +250,9.5,0.0254,31.7,0.00461377,120.136 +315,9.5,0.0254,31.7,0.00461377,122.766 +400,9.5,0.0254,31.7,0.00461377,124.756 +500,9.5,0.0254,31.7,0.00461377,126.886 +630,9.5,0.0254,31.7,0.00461377,129.006 +800,9.5,0.0254,31.7,0.00461377,130.746 +1000,9.5,0.0254,31.7,0.00461377,131.346 +1250,9.5,0.0254,31.7,0.00461377,131.446 +1600,9.5,0.0254,31.7,0.00461377,131.036 +2000,9.5,0.0254,31.7,0.00461377,130.496 +2500,9.5,0.0254,31.7,0.00461377,130.086 +3150,9.5,0.0254,31.7,0.00461377,128.536 +4000,9.5,0.0254,31.7,0.00461377,126.736 +5000,9.5,0.0254,31.7,0.00461377,124.426 +6300,9.5,0.0254,31.7,0.00461377,120.726 +250,12.7,0.0254,71.3,0.0121808,119.698 +315,12.7,0.0254,71.3,0.0121808,122.938 +400,12.7,0.0254,71.3,0.0121808,125.048 +500,12.7,0.0254,71.3,0.0121808,126.898 +630,12.7,0.0254,71.3,0.0121808,128.878 +800,12.7,0.0254,71.3,0.0121808,130.348 +1000,12.7,0.0254,71.3,0.0121808,131.698 +1250,12.7,0.0254,71.3,0.0121808,133.048 +1600,12.7,0.0254,71.3,0.0121808,134.528 +2000,12.7,0.0254,71.3,0.0121808,134.228 +2500,12.7,0.0254,71.3,0.0121808,134.058 +3150,12.7,0.0254,71.3,0.0121808,133.758 +4000,12.7,0.0254,71.3,0.0121808,131.808 +5000,12.7,0.0254,71.3,0.0121808,128.978 +6300,12.7,0.0254,71.3,0.0121808,125.398 +8000,12.7,0.0254,71.3,0.0121808,120.538 +10000,12.7,0.0254,71.3,0.0121808,114.418 +250,12.7,0.0254,39.6,0.0130253,121.547 +315,12.7,0.0254,39.6,0.0130253,123.537 +400,12.7,0.0254,39.6,0.0130253,125.527 +500,12.7,0.0254,39.6,0.0130253,127.127 +630,12.7,0.0254,39.6,0.0130253,128.867 +800,12.7,0.0254,39.6,0.0130253,130.217 +1000,12.7,0.0254,39.6,0.0130253,130.947 +1250,12.7,0.0254,39.6,0.0130253,130.777 +1600,12.7,0.0254,39.6,0.0130253,129.977 +2000,12.7,0.0254,39.6,0.0130253,129.567 +2500,12.7,0.0254,39.6,0.0130253,129.027 +3150,12.7,0.0254,39.6,0.0130253,127.847 +4000,12.7,0.0254,39.6,0.0130253,126.537 +5000,12.7,0.0254,39.6,0.0130253,125.107 +6300,12.7,0.0254,39.6,0.0130253,123.177 +8000,12.7,0.0254,39.6,0.0130253,120.607 +10000,12.7,0.0254,39.6,0.0130253,116.017 +200,17.4,0.0254,71.3,0.016104,112.506 +250,17.4,0.0254,71.3,0.016104,113.796 +315,17.4,0.0254,71.3,0.016104,115.846 +400,17.4,0.0254,71.3,0.016104,117.396 +500,17.4,0.0254,71.3,0.016104,119.806 +630,17.4,0.0254,71.3,0.016104,122.606 +800,17.4,0.0254,71.3,0.016104,124.276 +1000,17.4,0.0254,71.3,0.016104,125.816 +1250,17.4,0.0254,71.3,0.016104,126.356 +1600,17.4,0.0254,71.3,0.016104,126.406 +2000,17.4,0.0254,71.3,0.016104,126.826 +2500,17.4,0.0254,71.3,0.016104,126.746 +3150,17.4,0.0254,71.3,0.016104,126.536 +4000,17.4,0.0254,71.3,0.016104,125.586 +5000,17.4,0.0254,71.3,0.016104,123.126 +6300,17.4,0.0254,71.3,0.016104,119.916 +8000,17.4,0.0254,71.3,0.016104,115.466 +200,17.4,0.0254,55.5,0.0165706,109.951 +250,17.4,0.0254,55.5,0.0165706,110.491 +315,17.4,0.0254,55.5,0.0165706,111.911 +400,17.4,0.0254,55.5,0.0165706,115.461 +500,17.4,0.0254,55.5,0.0165706,119.621 +630,17.4,0.0254,55.5,0.0165706,122.411 +800,17.4,0.0254,55.5,0.0165706,123.091 +1000,17.4,0.0254,55.5,0.0165706,126.001 +1250,17.4,0.0254,55.5,0.0165706,129.301 +1600,17.4,0.0254,55.5,0.0165706,126.471 +2000,17.4,0.0254,55.5,0.0165706,125.261 +2500,17.4,0.0254,55.5,0.0165706,124.931 +3150,17.4,0.0254,55.5,0.0165706,124.101 +4000,17.4,0.0254,55.5,0.0165706,121.771 +5000,17.4,0.0254,55.5,0.0165706,118.941 +6300,17.4,0.0254,55.5,0.0165706,114.861 +200,17.4,0.0254,39.6,0.0172206,114.044 +250,17.4,0.0254,39.6,0.0172206,114.714 +315,17.4,0.0254,39.6,0.0172206,115.144 +400,17.4,0.0254,39.6,0.0172206,115.444 +500,17.4,0.0254,39.6,0.0172206,117.514 +630,17.4,0.0254,39.6,0.0172206,124.514 +800,17.4,0.0254,39.6,0.0172206,135.324 +1000,17.4,0.0254,39.6,0.0172206,138.274 +1250,17.4,0.0254,39.6,0.0172206,131.364 +1600,17.4,0.0254,39.6,0.0172206,127.614 +2000,17.4,0.0254,39.6,0.0172206,126.644 +2500,17.4,0.0254,39.6,0.0172206,124.154 +3150,17.4,0.0254,39.6,0.0172206,123.564 +4000,17.4,0.0254,39.6,0.0172206,122.724 +5000,17.4,0.0254,39.6,0.0172206,119.854 +200,17.4,0.0254,31.7,0.0176631,116.146 +250,17.4,0.0254,31.7,0.0176631,116.956 +315,17.4,0.0254,31.7,0.0176631,118.416 +400,17.4,0.0254,31.7,0.0176631,120.766 +500,17.4,0.0254,31.7,0.0176631,127.676 +630,17.4,0.0254,31.7,0.0176631,136.886 +800,17.4,0.0254,31.7,0.0176631,139.226 +1000,17.4,0.0254,31.7,0.0176631,131.796 +1250,17.4,0.0254,31.7,0.0176631,128.306 +1600,17.4,0.0254,31.7,0.0176631,126.846 +2000,17.4,0.0254,31.7,0.0176631,124.356 +2500,17.4,0.0254,31.7,0.0176631,124.166 +3150,17.4,0.0254,31.7,0.0176631,123.466 +4000,17.4,0.0254,31.7,0.0176631,121.996 +5000,17.4,0.0254,31.7,0.0176631,117.996 +315,22.2,0.0254,71.3,0.0214178,115.857 +400,22.2,0.0254,71.3,0.0214178,117.927 +500,22.2,0.0254,71.3,0.0214178,117.967 +630,22.2,0.0254,71.3,0.0214178,120.657 +800,22.2,0.0254,71.3,0.0214178,123.227 +1000,22.2,0.0254,71.3,0.0214178,134.247 +1250,22.2,0.0254,71.3,0.0214178,140.987 +1600,22.2,0.0254,71.3,0.0214178,131.817 +2000,22.2,0.0254,71.3,0.0214178,127.197 +2500,22.2,0.0254,71.3,0.0214178,126.097 +3150,22.2,0.0254,71.3,0.0214178,124.127 +4000,22.2,0.0254,71.3,0.0214178,123.917 +5000,22.2,0.0254,71.3,0.0214178,125.727 +6300,22.2,0.0254,71.3,0.0214178,123.127 +8000,22.2,0.0254,71.3,0.0214178,121.657 +200,22.2,0.0254,39.6,0.0229028,116.066 +250,22.2,0.0254,39.6,0.0229028,117.386 +315,22.2,0.0254,39.6,0.0229028,120.716 +400,22.2,0.0254,39.6,0.0229028,123.416 +500,22.2,0.0254,39.6,0.0229028,129.776 +630,22.2,0.0254,39.6,0.0229028,137.026 +800,22.2,0.0254,39.6,0.0229028,137.076 +1000,22.2,0.0254,39.6,0.0229028,128.416 +1250,22.2,0.0254,39.6,0.0229028,126.446 +1600,22.2,0.0254,39.6,0.0229028,122.216 +2000,22.2,0.0254,39.6,0.0229028,121.256 +2500,22.2,0.0254,39.6,0.0229028,121.306 +3150,22.2,0.0254,39.6,0.0229028,120.856 +4000,22.2,0.0254,39.6,0.0229028,119.646 +5000,22.2,0.0254,39.6,0.0229028,118.816 +630,0,0.1016,71.3,0.00121072,124.155 +800,0,0.1016,71.3,0.00121072,126.805 +1000,0,0.1016,71.3,0.00121072,128.825 +1250,0,0.1016,71.3,0.00121072,130.335 +1600,0,0.1016,71.3,0.00121072,131.725 +2000,0,0.1016,71.3,0.00121072,132.095 +2500,0,0.1016,71.3,0.00121072,132.595 +3150,0,0.1016,71.3,0.00121072,131.955 +4000,0,0.1016,71.3,0.00121072,130.935 +5000,0,0.1016,71.3,0.00121072,130.795 +6300,0,0.1016,71.3,0.00121072,129.395 +8000,0,0.1016,71.3,0.00121072,125.465 +10000,0,0.1016,71.3,0.00121072,123.305 +12500,0,0.1016,71.3,0.00121072,119.375 +630,0,0.1016,55.5,0.00131983,126.170 +800,0,0.1016,55.5,0.00131983,127.920 +1000,0,0.1016,55.5,0.00131983,129.800 +1250,0,0.1016,55.5,0.00131983,131.430 +1600,0,0.1016,55.5,0.00131983,132.050 +2000,0,0.1016,55.5,0.00131983,132.540 +2500,0,0.1016,55.5,0.00131983,133.040 +3150,0,0.1016,55.5,0.00131983,131.780 +4000,0,0.1016,55.5,0.00131983,129.500 +5000,0,0.1016,55.5,0.00131983,128.360 +6300,0,0.1016,55.5,0.00131983,127.730 +8000,0,0.1016,55.5,0.00131983,124.450 +10000,0,0.1016,55.5,0.00131983,121.930 +12500,0,0.1016,55.5,0.00131983,119.910 +630,0,0.1016,39.6,0.00146332,125.401 +800,0,0.1016,39.6,0.00146332,128.401 +1000,0,0.1016,39.6,0.00146332,130.781 +1250,0,0.1016,39.6,0.00146332,132.271 +1600,0,0.1016,39.6,0.00146332,133.261 +2000,0,0.1016,39.6,0.00146332,133.251 +2500,0,0.1016,39.6,0.00146332,132.611 +3150,0,0.1016,39.6,0.00146332,130.961 +4000,0,0.1016,39.6,0.00146332,127.801 +5000,0,0.1016,39.6,0.00146332,126.021 +6300,0,0.1016,39.6,0.00146332,125.631 +8000,0,0.1016,39.6,0.00146332,122.341 +10000,0,0.1016,39.6,0.00146332,119.561 +630,0,0.1016,31.7,0.00150092,126.413 +800,0,0.1016,31.7,0.00150092,129.053 +1000,0,0.1016,31.7,0.00150092,131.313 +1250,0,0.1016,31.7,0.00150092,133.063 +1600,0,0.1016,31.7,0.00150092,133.553 +2000,0,0.1016,31.7,0.00150092,133.153 +2500,0,0.1016,31.7,0.00150092,132.003 +3150,0,0.1016,31.7,0.00150092,129.973 +4000,0,0.1016,31.7,0.00150092,126.933 +5000,0,0.1016,31.7,0.00150092,124.393 +6300,0,0.1016,31.7,0.00150092,124.253 +8000,0,0.1016,31.7,0.00150092,120.193 +10000,0,0.1016,31.7,0.00150092,115.893 +800,3.3,0.1016,71.3,0.00202822,131.074 +1000,3.3,0.1016,71.3,0.00202822,131.434 +1250,3.3,0.1016,71.3,0.00202822,132.304 +1600,3.3,0.1016,71.3,0.00202822,133.664 +2000,3.3,0.1016,71.3,0.00202822,134.034 +2500,3.3,0.1016,71.3,0.00202822,133.894 +3150,3.3,0.1016,71.3,0.00202822,132.114 +4000,3.3,0.1016,71.3,0.00202822,128.704 +5000,3.3,0.1016,71.3,0.00202822,127.054 +6300,3.3,0.1016,71.3,0.00202822,124.904 +8000,3.3,0.1016,71.3,0.00202822,121.234 +10000,3.3,0.1016,71.3,0.00202822,116.694 +630,3.3,0.1016,55.5,0.002211,126.599 +800,3.3,0.1016,55.5,0.002211,129.119 +1000,3.3,0.1016,55.5,0.002211,131.129 +1250,3.3,0.1016,55.5,0.002211,132.769 +1600,3.3,0.1016,55.5,0.002211,133.649 +2000,3.3,0.1016,55.5,0.002211,133.649 +2500,3.3,0.1016,55.5,0.002211,132.889 +3150,3.3,0.1016,55.5,0.002211,130.629 +4000,3.3,0.1016,55.5,0.002211,127.229 +5000,3.3,0.1016,55.5,0.002211,124.839 +6300,3.3,0.1016,55.5,0.002211,123.839 +8000,3.3,0.1016,55.5,0.002211,120.569 +10000,3.3,0.1016,55.5,0.002211,115.659 +630,3.3,0.1016,39.6,0.00245138,127.251 +800,3.3,0.1016,39.6,0.00245138,129.991 +1000,3.3,0.1016,39.6,0.00245138,131.971 +1250,3.3,0.1016,39.6,0.00245138,133.211 +1600,3.3,0.1016,39.6,0.00245138,133.071 +2000,3.3,0.1016,39.6,0.00245138,132.301 +2500,3.3,0.1016,39.6,0.00245138,130.791 +3150,3.3,0.1016,39.6,0.00245138,128.401 +4000,3.3,0.1016,39.6,0.00245138,124.881 +5000,3.3,0.1016,39.6,0.00245138,122.371 +6300,3.3,0.1016,39.6,0.00245138,120.851 +8000,3.3,0.1016,39.6,0.00245138,118.091 +10000,3.3,0.1016,39.6,0.00245138,115.321 +630,3.3,0.1016,31.7,0.00251435,128.952 +800,3.3,0.1016,31.7,0.00251435,131.362 +1000,3.3,0.1016,31.7,0.00251435,133.012 +1250,3.3,0.1016,31.7,0.00251435,134.022 +1600,3.3,0.1016,31.7,0.00251435,133.402 +2000,3.3,0.1016,31.7,0.00251435,131.642 +2500,3.3,0.1016,31.7,0.00251435,130.392 +3150,3.3,0.1016,31.7,0.00251435,128.252 +4000,3.3,0.1016,31.7,0.00251435,124.852 +5000,3.3,0.1016,31.7,0.00251435,122.082 +6300,3.3,0.1016,31.7,0.00251435,120.702 +8000,3.3,0.1016,31.7,0.00251435,117.432 +630,6.7,0.1016,71.3,0.00478288,131.448 +800,6.7,0.1016,71.3,0.00478288,134.478 +1000,6.7,0.1016,71.3,0.00478288,136.758 +1250,6.7,0.1016,71.3,0.00478288,137.658 +1600,6.7,0.1016,71.3,0.00478288,136.678 +2000,6.7,0.1016,71.3,0.00478288,134.568 +2500,6.7,0.1016,71.3,0.00478288,131.458 +3150,6.7,0.1016,71.3,0.00478288,124.458 +500,6.7,0.1016,55.5,0.0052139,129.343 +630,6.7,0.1016,55.5,0.0052139,133.023 +800,6.7,0.1016,55.5,0.0052139,135.953 +1000,6.7,0.1016,55.5,0.0052139,137.233 +1250,6.7,0.1016,55.5,0.0052139,136.883 +1600,6.7,0.1016,55.5,0.0052139,133.653 +2000,6.7,0.1016,55.5,0.0052139,129.653 +2500,6.7,0.1016,55.5,0.0052139,124.273 +400,6.7,0.1016,39.6,0.00578076,128.295 +500,6.7,0.1016,39.6,0.00578076,130.955 +630,6.7,0.1016,39.6,0.00578076,133.355 +800,6.7,0.1016,39.6,0.00578076,134.625 +1000,6.7,0.1016,39.6,0.00578076,134.515 +1250,6.7,0.1016,39.6,0.00578076,132.395 +1600,6.7,0.1016,39.6,0.00578076,127.375 +2000,6.7,0.1016,39.6,0.00578076,122.235 +315,6.7,0.1016,31.7,0.00592927,126.266 +400,6.7,0.1016,31.7,0.00592927,128.296 +500,6.7,0.1016,31.7,0.00592927,130.206 +630,6.7,0.1016,31.7,0.00592927,132.116 +800,6.7,0.1016,31.7,0.00592927,132.886 +1000,6.7,0.1016,31.7,0.00592927,131.636 +1250,6.7,0.1016,31.7,0.00592927,129.256 +1600,6.7,0.1016,31.7,0.00592927,124.346 +2000,6.7,0.1016,31.7,0.00592927,120.446 +200,8.9,0.1016,71.3,0.0103088,133.503 +250,8.9,0.1016,71.3,0.0103088,134.533 +315,8.9,0.1016,71.3,0.0103088,136.583 +400,8.9,0.1016,71.3,0.0103088,138.123 +500,8.9,0.1016,71.3,0.0103088,138.523 +630,8.9,0.1016,71.3,0.0103088,138.423 +800,8.9,0.1016,71.3,0.0103088,137.813 +1000,8.9,0.1016,71.3,0.0103088,135.433 +1250,8.9,0.1016,71.3,0.0103088,132.793 +1600,8.9,0.1016,71.3,0.0103088,128.763 +2000,8.9,0.1016,71.3,0.0103088,124.233 +2500,8.9,0.1016,71.3,0.0103088,123.623 +3150,8.9,0.1016,71.3,0.0103088,123.263 +4000,8.9,0.1016,71.3,0.0103088,120.243 +5000,8.9,0.1016,71.3,0.0103088,116.723 +6300,8.9,0.1016,71.3,0.0103088,117.253 +200,8.9,0.1016,39.6,0.0124596,133.420 +250,8.9,0.1016,39.6,0.0124596,134.340 +315,8.9,0.1016,39.6,0.0124596,135.380 +400,8.9,0.1016,39.6,0.0124596,135.540 +500,8.9,0.1016,39.6,0.0124596,133.790 +630,8.9,0.1016,39.6,0.0124596,131.920 +800,8.9,0.1016,39.6,0.0124596,130.940 +1000,8.9,0.1016,39.6,0.0124596,129.580 +1250,8.9,0.1016,39.6,0.0124596,127.710 +1600,8.9,0.1016,39.6,0.0124596,123.820 +2000,8.9,0.1016,39.6,0.0124596,119.040 +2500,8.9,0.1016,39.6,0.0124596,119.190 +3150,8.9,0.1016,39.6,0.0124596,119.350 +4000,8.9,0.1016,39.6,0.0124596,116.220 +5000,8.9,0.1016,39.6,0.0124596,113.080 +6300,8.9,0.1016,39.6,0.0124596,113.110 +200,12.3,0.1016,71.3,0.0337792,130.588 +250,12.3,0.1016,71.3,0.0337792,131.568 +315,12.3,0.1016,71.3,0.0337792,137.068 +400,12.3,0.1016,71.3,0.0337792,139.428 +500,12.3,0.1016,71.3,0.0337792,140.158 +630,12.3,0.1016,71.3,0.0337792,135.368 +800,12.3,0.1016,71.3,0.0337792,127.318 +1000,12.3,0.1016,71.3,0.0337792,127.928 +1250,12.3,0.1016,71.3,0.0337792,126.648 +1600,12.3,0.1016,71.3,0.0337792,124.748 +2000,12.3,0.1016,71.3,0.0337792,122.218 +2500,12.3,0.1016,71.3,0.0337792,121.318 +3150,12.3,0.1016,71.3,0.0337792,120.798 +4000,12.3,0.1016,71.3,0.0337792,118.018 +5000,12.3,0.1016,71.3,0.0337792,116.108 +6300,12.3,0.1016,71.3,0.0337792,113.958 +200,12.3,0.1016,55.5,0.0368233,132.304 +250,12.3,0.1016,55.5,0.0368233,133.294 +315,12.3,0.1016,55.5,0.0368233,135.674 +400,12.3,0.1016,55.5,0.0368233,136.414 +500,12.3,0.1016,55.5,0.0368233,133.774 +630,12.3,0.1016,55.5,0.0368233,124.244 +800,12.3,0.1016,55.5,0.0368233,125.114 +1000,12.3,0.1016,55.5,0.0368233,125.484 +1250,12.3,0.1016,55.5,0.0368233,124.214 +1600,12.3,0.1016,55.5,0.0368233,121.824 +2000,12.3,0.1016,55.5,0.0368233,118.564 +2500,12.3,0.1016,55.5,0.0368233,117.054 +3150,12.3,0.1016,55.5,0.0368233,116.914 +4000,12.3,0.1016,55.5,0.0368233,114.404 +5000,12.3,0.1016,55.5,0.0368233,112.014 +6300,12.3,0.1016,55.5,0.0368233,110.124 +200,12.3,0.1016,39.6,0.0408268,128.545 +250,12.3,0.1016,39.6,0.0408268,129.675 +315,12.3,0.1016,39.6,0.0408268,129.415 +400,12.3,0.1016,39.6,0.0408268,128.265 +500,12.3,0.1016,39.6,0.0408268,122.205 +630,12.3,0.1016,39.6,0.0408268,121.315 +800,12.3,0.1016,39.6,0.0408268,122.315 +1000,12.3,0.1016,39.6,0.0408268,122.435 +1250,12.3,0.1016,39.6,0.0408268,121.165 +1600,12.3,0.1016,39.6,0.0408268,117.875 +2000,12.3,0.1016,39.6,0.0408268,114.085 +2500,12.3,0.1016,39.6,0.0408268,113.315 +3150,12.3,0.1016,39.6,0.0408268,113.055 +4000,12.3,0.1016,39.6,0.0408268,110.905 +5000,12.3,0.1016,39.6,0.0408268,108.625 +6300,12.3,0.1016,39.6,0.0408268,107.985 +200,12.3,0.1016,31.7,0.0418756,124.987 +250,12.3,0.1016,31.7,0.0418756,125.857 +315,12.3,0.1016,31.7,0.0418756,124.717 +400,12.3,0.1016,31.7,0.0418756,123.207 +500,12.3,0.1016,31.7,0.0418756,118.667 +630,12.3,0.1016,31.7,0.0418756,119.287 +800,12.3,0.1016,31.7,0.0418756,120.037 +1000,12.3,0.1016,31.7,0.0418756,119.777 +1250,12.3,0.1016,31.7,0.0418756,118.767 +1600,12.3,0.1016,31.7,0.0418756,114.477 +2000,12.3,0.1016,31.7,0.0418756,110.447 +2500,12.3,0.1016,31.7,0.0418756,110.317 +3150,12.3,0.1016,31.7,0.0418756,110.307 +4000,12.3,0.1016,31.7,0.0418756,108.407 +5000,12.3,0.1016,31.7,0.0418756,107.147 +6300,12.3,0.1016,31.7,0.0418756,107.267 +200,15.6,0.1016,71.3,0.0437259,130.898 +250,15.6,0.1016,71.3,0.0437259,132.158 +315,15.6,0.1016,71.3,0.0437259,133.808 +400,15.6,0.1016,71.3,0.0437259,134.058 +500,15.6,0.1016,71.3,0.0437259,130.638 +630,15.6,0.1016,71.3,0.0437259,122.288 +800,15.6,0.1016,71.3,0.0437259,124.188 +1000,15.6,0.1016,71.3,0.0437259,124.438 +1250,15.6,0.1016,71.3,0.0437259,123.178 +1600,15.6,0.1016,71.3,0.0437259,121.528 +2000,15.6,0.1016,71.3,0.0437259,119.888 +2500,15.6,0.1016,71.3,0.0437259,118.998 +3150,15.6,0.1016,71.3,0.0437259,116.468 +4000,15.6,0.1016,71.3,0.0437259,113.298 +200,15.6,0.1016,39.6,0.0528487,123.514 +250,15.6,0.1016,39.6,0.0528487,124.644 +315,15.6,0.1016,39.6,0.0528487,122.754 +400,15.6,0.1016,39.6,0.0528487,120.484 +500,15.6,0.1016,39.6,0.0528487,115.304 +630,15.6,0.1016,39.6,0.0528487,118.084 +800,15.6,0.1016,39.6,0.0528487,118.964 +1000,15.6,0.1016,39.6,0.0528487,119.224 +1250,15.6,0.1016,39.6,0.0528487,118.214 +1600,15.6,0.1016,39.6,0.0528487,114.554 +2000,15.6,0.1016,39.6,0.0528487,110.894 +2500,15.6,0.1016,39.6,0.0528487,110.264 +3150,15.6,0.1016,39.6,0.0528487,109.254 +4000,15.6,0.1016,39.6,0.0528487,106.604 +5000,15.6,0.1016,39.6,0.0528487,106.224 +6300,15.6,0.1016,39.6,0.0528487,104.204 diff --git a/Experimentos/inicializacion-pesos-red-neuronal/data/airfoil_self_noise.dat b/Experimentos/inicializacion-pesos-red-neuronal/data/airfoil_self_noise.dat new file mode 100644 index 0000000..759745b --- /dev/null +++ b/Experimentos/inicializacion-pesos-red-neuronal/data/airfoil_self_noise.dat @@ -0,0 +1,1503 @@ +800 0 0.3048 71.3 0.00266337 126.201 +1000 0 0.3048 71.3 0.00266337 125.201 +1250 0 0.3048 71.3 0.00266337 125.951 +1600 0 0.3048 71.3 0.00266337 127.591 +2000 0 0.3048 71.3 0.00266337 127.461 +2500 0 0.3048 71.3 0.00266337 125.571 +3150 0 0.3048 71.3 0.00266337 125.201 +4000 0 0.3048 71.3 0.00266337 123.061 +5000 0 0.3048 71.3 0.00266337 121.301 +6300 0 0.3048 71.3 0.00266337 119.541 +8000 0 0.3048 71.3 0.00266337 117.151 +10000 0 0.3048 71.3 0.00266337 115.391 +12500 0 0.3048 71.3 0.00266337 112.241 +16000 0 0.3048 71.3 0.00266337 108.721 +500 0 0.3048 55.5 0.00283081 126.416 +630 0 0.3048 55.5 0.00283081 127.696 +800 0 0.3048 55.5 0.00283081 128.086 +1000 0 0.3048 55.5 0.00283081 126.966 +1250 0 0.3048 55.5 0.00283081 126.086 +1600 0 0.3048 55.5 0.00283081 126.986 +2000 0 0.3048 55.5 0.00283081 126.616 +2500 0 0.3048 55.5 0.00283081 124.106 +3150 0 0.3048 55.5 0.00283081 123.236 +4000 0 0.3048 55.5 0.00283081 121.106 +5000 0 0.3048 55.5 0.00283081 119.606 +6300 0 0.3048 55.5 0.00283081 117.976 +8000 0 0.3048 55.5 0.00283081 116.476 +10000 0 0.3048 55.5 0.00283081 113.076 +12500 0 0.3048 55.5 0.00283081 111.076 +200 0 0.3048 39.6 0.00310138 118.129 +250 0 0.3048 39.6 0.00310138 119.319 +315 0 0.3048 39.6 0.00310138 122.779 +400 0 0.3048 39.6 0.00310138 124.809 +500 0 0.3048 39.6 0.00310138 126.959 +630 0 0.3048 39.6 0.00310138 128.629 +800 0 0.3048 39.6 0.00310138 129.099 +1000 0 0.3048 39.6 0.00310138 127.899 +1250 0 0.3048 39.6 0.00310138 125.499 +1600 0 0.3048 39.6 0.00310138 124.049 +2000 0 0.3048 39.6 0.00310138 123.689 +2500 0 0.3048 39.6 0.00310138 121.399 +3150 0 0.3048 39.6 0.00310138 120.319 +4000 0 0.3048 39.6 0.00310138 119.229 +5000 0 0.3048 39.6 0.00310138 117.789 +6300 0 0.3048 39.6 0.00310138 116.229 +8000 0 0.3048 39.6 0.00310138 114.779 +10000 0 0.3048 39.6 0.00310138 112.139 +12500 0 0.3048 39.6 0.00310138 109.619 +200 0 0.3048 31.7 0.00331266 117.195 +250 0 0.3048 31.7 0.00331266 118.595 +315 0 0.3048 31.7 0.00331266 122.765 +400 0 0.3048 31.7 0.00331266 125.045 +500 0 0.3048 31.7 0.00331266 127.315 +630 0 0.3048 31.7 0.00331266 129.095 +800 0 0.3048 31.7 0.00331266 129.235 +1000 0 0.3048 31.7 0.00331266 127.365 +1250 0 0.3048 31.7 0.00331266 124.355 +1600 0 0.3048 31.7 0.00331266 122.365 +2000 0 0.3048 31.7 0.00331266 122.375 +2500 0 0.3048 31.7 0.00331266 120.755 +3150 0 0.3048 31.7 0.00331266 119.135 +4000 0 0.3048 31.7 0.00331266 118.145 +5000 0 0.3048 31.7 0.00331266 115.645 +6300 0 0.3048 31.7 0.00331266 113.775 +8000 0 0.3048 31.7 0.00331266 110.515 +10000 0 0.3048 31.7 0.00331266 108.265 +800 1.5 0.3048 71.3 0.00336729 127.122 +1000 1.5 0.3048 71.3 0.00336729 125.992 +1250 1.5 0.3048 71.3 0.00336729 125.872 +1600 1.5 0.3048 71.3 0.00336729 126.632 +2000 1.5 0.3048 71.3 0.00336729 126.642 +2500 1.5 0.3048 71.3 0.00336729 124.512 +3150 1.5 0.3048 71.3 0.00336729 123.392 +4000 1.5 0.3048 71.3 0.00336729 121.762 +5000 1.5 0.3048 71.3 0.00336729 119.632 +6300 1.5 0.3048 71.3 0.00336729 118.122 +8000 1.5 0.3048 71.3 0.00336729 115.372 +10000 1.5 0.3048 71.3 0.00336729 113.492 +12500 1.5 0.3048 71.3 0.00336729 109.222 +16000 1.5 0.3048 71.3 0.00336729 106.582 +315 1.5 0.3048 39.6 0.00392107 121.851 +400 1.5 0.3048 39.6 0.00392107 124.001 +500 1.5 0.3048 39.6 0.00392107 126.661 +630 1.5 0.3048 39.6 0.00392107 128.311 +800 1.5 0.3048 39.6 0.00392107 128.831 +1000 1.5 0.3048 39.6 0.00392107 127.581 +1250 1.5 0.3048 39.6 0.00392107 125.211 +1600 1.5 0.3048 39.6 0.00392107 122.211 +2000 1.5 0.3048 39.6 0.00392107 122.101 +2500 1.5 0.3048 39.6 0.00392107 120.981 +3150 1.5 0.3048 39.6 0.00392107 119.111 +4000 1.5 0.3048 39.6 0.00392107 117.741 +5000 1.5 0.3048 39.6 0.00392107 116.241 +6300 1.5 0.3048 39.6 0.00392107 114.751 +8000 1.5 0.3048 39.6 0.00392107 112.251 +10000 1.5 0.3048 39.6 0.00392107 108.991 +12500 1.5 0.3048 39.6 0.00392107 106.111 +400 3 0.3048 71.3 0.00425727 127.564 +500 3 0.3048 71.3 0.00425727 128.454 +630 3 0.3048 71.3 0.00425727 129.354 +800 3 0.3048 71.3 0.00425727 129.494 +1000 3 0.3048 71.3 0.00425727 129.004 +1250 3 0.3048 71.3 0.00425727 127.634 +1600 3 0.3048 71.3 0.00425727 126.514 +2000 3 0.3048 71.3 0.00425727 125.524 +2500 3 0.3048 71.3 0.00425727 124.024 +3150 3 0.3048 71.3 0.00425727 121.514 +4000 3 0.3048 71.3 0.00425727 120.264 +5000 3 0.3048 71.3 0.00425727 118.134 +6300 3 0.3048 71.3 0.00425727 116.134 +8000 3 0.3048 71.3 0.00425727 114.634 +10000 3 0.3048 71.3 0.00425727 110.224 +400 3 0.3048 55.5 0.00452492 126.159 +500 3 0.3048 55.5 0.00452492 128.179 +630 3 0.3048 55.5 0.00452492 129.569 +800 3 0.3048 55.5 0.00452492 129.949 +1000 3 0.3048 55.5 0.00452492 129.329 +1250 3 0.3048 55.5 0.00452492 127.329 +1600 3 0.3048 55.5 0.00452492 124.439 +2000 3 0.3048 55.5 0.00452492 123.069 +2500 3 0.3048 55.5 0.00452492 122.439 +3150 3 0.3048 55.5 0.00452492 120.189 +4000 3 0.3048 55.5 0.00452492 118.689 +5000 3 0.3048 55.5 0.00452492 117.309 +6300 3 0.3048 55.5 0.00452492 115.679 +8000 3 0.3048 55.5 0.00452492 113.799 +10000 3 0.3048 55.5 0.00452492 112.169 +315 3 0.3048 39.6 0.00495741 123.312 +400 3 0.3048 39.6 0.00495741 125.472 +500 3 0.3048 39.6 0.00495741 127.632 +630 3 0.3048 39.6 0.00495741 129.292 +800 3 0.3048 39.6 0.00495741 129.552 +1000 3 0.3048 39.6 0.00495741 128.312 +1250 3 0.3048 39.6 0.00495741 125.802 +1600 3 0.3048 39.6 0.00495741 122.782 +2000 3 0.3048 39.6 0.00495741 120.532 +2500 3 0.3048 39.6 0.00495741 120.162 +3150 3 0.3048 39.6 0.00495741 118.922 +4000 3 0.3048 39.6 0.00495741 116.792 +5000 3 0.3048 39.6 0.00495741 115.792 +6300 3 0.3048 39.6 0.00495741 114.042 +8000 3 0.3048 39.6 0.00495741 110.652 +315 3 0.3048 31.7 0.00529514 123.118 +400 3 0.3048 31.7 0.00529514 125.398 +500 3 0.3048 31.7 0.00529514 127.548 +630 3 0.3048 31.7 0.00529514 128.698 +800 3 0.3048 31.7 0.00529514 128.708 +1000 3 0.3048 31.7 0.00529514 126.838 +1250 3 0.3048 31.7 0.00529514 124.838 +1600 3 0.3048 31.7 0.00529514 122.088 +2000 3 0.3048 31.7 0.00529514 120.088 +2500 3 0.3048 31.7 0.00529514 119.598 +3150 3 0.3048 31.7 0.00529514 118.108 +4000 3 0.3048 31.7 0.00529514 115.608 +5000 3 0.3048 31.7 0.00529514 113.858 +6300 3 0.3048 31.7 0.00529514 109.718 +250 4 0.3048 71.3 0.00497773 126.395 +315 4 0.3048 71.3 0.00497773 128.175 +400 4 0.3048 71.3 0.00497773 129.575 +500 4 0.3048 71.3 0.00497773 130.715 +630 4 0.3048 71.3 0.00497773 131.615 +800 4 0.3048 71.3 0.00497773 131.755 +1000 4 0.3048 71.3 0.00497773 131.015 +1250 4 0.3048 71.3 0.00497773 129.395 +1600 4 0.3048 71.3 0.00497773 126.645 +2000 4 0.3048 71.3 0.00497773 124.395 +2500 4 0.3048 71.3 0.00497773 123.775 +3150 4 0.3048 71.3 0.00497773 121.775 +4000 4 0.3048 71.3 0.00497773 119.535 +5000 4 0.3048 71.3 0.00497773 117.785 +6300 4 0.3048 71.3 0.00497773 116.165 +8000 4 0.3048 71.3 0.00497773 113.665 +10000 4 0.3048 71.3 0.00497773 110.905 +12500 4 0.3048 71.3 0.00497773 107.405 +250 4 0.3048 39.6 0.00579636 123.543 +315 4 0.3048 39.6 0.00579636 126.843 +400 4 0.3048 39.6 0.00579636 128.633 +500 4 0.3048 39.6 0.00579636 130.173 +630 4 0.3048 39.6 0.00579636 131.073 +800 4 0.3048 39.6 0.00579636 130.723 +1000 4 0.3048 39.6 0.00579636 128.723 +1250 4 0.3048 39.6 0.00579636 126.343 +1600 4 0.3048 39.6 0.00579636 123.213 +2000 4 0.3048 39.6 0.00579636 120.963 +2500 4 0.3048 39.6 0.00579636 120.233 +3150 4 0.3048 39.6 0.00579636 118.743 +4000 4 0.3048 39.6 0.00579636 115.863 +5000 4 0.3048 39.6 0.00579636 113.733 +1250 0 0.2286 71.3 0.00214345 128.144 +1600 0 0.2286 71.3 0.00214345 129.134 +2000 0 0.2286 71.3 0.00214345 128.244 +2500 0 0.2286 71.3 0.00214345 128.354 +3150 0 0.2286 71.3 0.00214345 127.834 +4000 0 0.2286 71.3 0.00214345 125.824 +5000 0 0.2286 71.3 0.00214345 124.304 +6300 0 0.2286 71.3 0.00214345 122.044 +8000 0 0.2286 71.3 0.00214345 118.024 +10000 0 0.2286 71.3 0.00214345 118.134 +12500 0 0.2286 71.3 0.00214345 117.624 +16000 0 0.2286 71.3 0.00214345 114.984 +20000 0 0.2286 71.3 0.00214345 114.474 +315 0 0.2286 55.5 0.00229336 119.540 +400 0 0.2286 55.5 0.00229336 121.660 +500 0 0.2286 55.5 0.00229336 123.780 +630 0 0.2286 55.5 0.00229336 126.160 +800 0 0.2286 55.5 0.00229336 127.530 +1000 0 0.2286 55.5 0.00229336 128.290 +1250 0 0.2286 55.5 0.00229336 127.910 +1600 0 0.2286 55.5 0.00229336 126.790 +2000 0 0.2286 55.5 0.00229336 126.540 +2500 0 0.2286 55.5 0.00229336 126.540 +3150 0 0.2286 55.5 0.00229336 125.160 +4000 0 0.2286 55.5 0.00229336 123.410 +5000 0 0.2286 55.5 0.00229336 122.410 +6300 0 0.2286 55.5 0.00229336 118.410 +315 0 0.2286 39.6 0.00253511 121.055 +400 0 0.2286 39.6 0.00253511 123.565 +500 0 0.2286 39.6 0.00253511 126.195 +630 0 0.2286 39.6 0.00253511 128.705 +800 0 0.2286 39.6 0.00253511 130.205 +1000 0 0.2286 39.6 0.00253511 130.435 +1250 0 0.2286 39.6 0.00253511 129.395 +1600 0 0.2286 39.6 0.00253511 127.095 +2000 0 0.2286 39.6 0.00253511 125.305 +2500 0 0.2286 39.6 0.00253511 125.025 +3150 0 0.2286 39.6 0.00253511 124.625 +4000 0 0.2286 39.6 0.00253511 123.465 +5000 0 0.2286 39.6 0.00253511 122.175 +6300 0 0.2286 39.6 0.00253511 117.465 +315 0 0.2286 31.7 0.0027238 120.595 +400 0 0.2286 31.7 0.0027238 123.635 +500 0 0.2286 31.7 0.0027238 126.675 +630 0 0.2286 31.7 0.0027238 129.465 +800 0 0.2286 31.7 0.0027238 130.725 +1000 0 0.2286 31.7 0.0027238 130.595 +1250 0 0.2286 31.7 0.0027238 128.805 +1600 0 0.2286 31.7 0.0027238 125.625 +2000 0 0.2286 31.7 0.0027238 123.455 +2500 0 0.2286 31.7 0.0027238 123.445 +3150 0 0.2286 31.7 0.0027238 123.445 +4000 0 0.2286 31.7 0.0027238 122.035 +5000 0 0.2286 31.7 0.0027238 120.505 +6300 0 0.2286 31.7 0.0027238 116.815 +400 2 0.2286 71.3 0.00293031 125.116 +500 2 0.2286 71.3 0.00293031 126.486 +630 2 0.2286 71.3 0.00293031 127.356 +800 2 0.2286 71.3 0.00293031 128.216 +1000 2 0.2286 71.3 0.00293031 128.956 +1250 2 0.2286 71.3 0.00293031 128.816 +1600 2 0.2286 71.3 0.00293031 127.796 +2000 2 0.2286 71.3 0.00293031 126.896 +2500 2 0.2286 71.3 0.00293031 127.006 +3150 2 0.2286 71.3 0.00293031 126.116 +4000 2 0.2286 71.3 0.00293031 124.086 +5000 2 0.2286 71.3 0.00293031 122.816 +6300 2 0.2286 71.3 0.00293031 120.786 +8000 2 0.2286 71.3 0.00293031 115.996 +10000 2 0.2286 71.3 0.00293031 113.086 +400 2 0.2286 55.5 0.00313525 122.292 +500 2 0.2286 55.5 0.00313525 124.692 +630 2 0.2286 55.5 0.00313525 126.842 +800 2 0.2286 55.5 0.00313525 128.492 +1000 2 0.2286 55.5 0.00313525 129.002 +1250 2 0.2286 55.5 0.00313525 128.762 +1600 2 0.2286 55.5 0.00313525 126.752 +2000 2 0.2286 55.5 0.00313525 124.612 +2500 2 0.2286 55.5 0.00313525 123.862 +3150 2 0.2286 55.5 0.00313525 123.742 +4000 2 0.2286 55.5 0.00313525 122.232 +5000 2 0.2286 55.5 0.00313525 120.472 +6300 2 0.2286 55.5 0.00313525 118.712 +315 2 0.2286 39.6 0.00346574 120.137 +400 2 0.2286 39.6 0.00346574 122.147 +500 2 0.2286 39.6 0.00346574 125.157 +630 2 0.2286 39.6 0.00346574 127.417 +800 2 0.2286 39.6 0.00346574 129.037 +1000 2 0.2286 39.6 0.00346574 129.147 +1250 2 0.2286 39.6 0.00346574 128.257 +1600 2 0.2286 39.6 0.00346574 125.837 +2000 2 0.2286 39.6 0.00346574 122.797 +2500 2 0.2286 39.6 0.00346574 121.397 +3150 2 0.2286 39.6 0.00346574 121.627 +4000 2 0.2286 39.6 0.00346574 120.227 +5000 2 0.2286 39.6 0.00346574 118.827 +6300 2 0.2286 39.6 0.00346574 116.417 +315 2 0.2286 31.7 0.00372371 120.147 +400 2 0.2286 31.7 0.00372371 123.417 +500 2 0.2286 31.7 0.00372371 126.677 +630 2 0.2286 31.7 0.00372371 129.057 +800 2 0.2286 31.7 0.00372371 130.307 +1000 2 0.2286 31.7 0.00372371 130.307 +1250 2 0.2286 31.7 0.00372371 128.677 +1600 2 0.2286 31.7 0.00372371 125.797 +2000 2 0.2286 31.7 0.00372371 123.037 +2500 2 0.2286 31.7 0.00372371 121.407 +3150 2 0.2286 31.7 0.00372371 121.527 +4000 2 0.2286 31.7 0.00372371 120.527 +5000 2 0.2286 31.7 0.00372371 118.267 +6300 2 0.2286 31.7 0.00372371 115.137 +500 4 0.2286 71.3 0.00400603 126.758 +630 4 0.2286 71.3 0.00400603 129.038 +800 4 0.2286 71.3 0.00400603 130.688 +1000 4 0.2286 71.3 0.00400603 131.708 +1250 4 0.2286 71.3 0.00400603 131.718 +1600 4 0.2286 71.3 0.00400603 129.468 +2000 4 0.2286 71.3 0.00400603 126.218 +2500 4 0.2286 71.3 0.00400603 124.338 +3150 4 0.2286 71.3 0.00400603 124.108 +4000 4 0.2286 71.3 0.00400603 121.728 +5000 4 0.2286 71.3 0.00400603 121.118 +6300 4 0.2286 71.3 0.00400603 118.618 +8000 4 0.2286 71.3 0.00400603 112.848 +10000 4 0.2286 71.3 0.00400603 113.108 +12500 4 0.2286 71.3 0.00400603 114.258 +16000 4 0.2286 71.3 0.00400603 112.768 +20000 4 0.2286 71.3 0.00400603 109.638 +400 4 0.2286 55.5 0.0042862 123.274 +500 4 0.2286 55.5 0.0042862 127.314 +630 4 0.2286 55.5 0.0042862 129.964 +800 4 0.2286 55.5 0.0042862 131.864 +1000 4 0.2286 55.5 0.0042862 132.134 +1250 4 0.2286 55.5 0.0042862 131.264 +1600 4 0.2286 55.5 0.0042862 128.264 +2000 4 0.2286 55.5 0.0042862 124.254 +2500 4 0.2286 55.5 0.0042862 122.384 +3150 4 0.2286 55.5 0.0042862 122.394 +4000 4 0.2286 55.5 0.0042862 120.654 +5000 4 0.2286 55.5 0.0042862 120.034 +6300 4 0.2286 55.5 0.0042862 117.154 +8000 4 0.2286 55.5 0.0042862 112.524 +315 4 0.2286 39.6 0.00473801 122.229 +400 4 0.2286 39.6 0.00473801 123.879 +500 4 0.2286 39.6 0.00473801 127.039 +630 4 0.2286 39.6 0.00473801 129.579 +800 4 0.2286 39.6 0.00473801 130.469 +1000 4 0.2286 39.6 0.00473801 129.969 +1250 4 0.2286 39.6 0.00473801 128.339 +1600 4 0.2286 39.6 0.00473801 125.319 +2000 4 0.2286 39.6 0.00473801 121.659 +2500 4 0.2286 39.6 0.00473801 119.649 +3150 4 0.2286 39.6 0.00473801 120.419 +4000 4 0.2286 39.6 0.00473801 119.159 +5000 4 0.2286 39.6 0.00473801 117.649 +6300 4 0.2286 39.6 0.00473801 114.249 +8000 4 0.2286 39.6 0.00473801 113.129 +250 4 0.2286 31.7 0.00509068 120.189 +315 4 0.2286 31.7 0.00509068 123.609 +400 4 0.2286 31.7 0.00509068 126.149 +500 4 0.2286 31.7 0.00509068 128.939 +630 4 0.2286 31.7 0.00509068 130.349 +800 4 0.2286 31.7 0.00509068 130.869 +1000 4 0.2286 31.7 0.00509068 129.869 +1250 4 0.2286 31.7 0.00509068 128.119 +1600 4 0.2286 31.7 0.00509068 125.229 +2000 4 0.2286 31.7 0.00509068 122.089 +2500 4 0.2286 31.7 0.00509068 120.209 +3150 4 0.2286 31.7 0.00509068 120.229 +4000 4 0.2286 31.7 0.00509068 118.859 +5000 4 0.2286 31.7 0.00509068 115.969 +6300 4 0.2286 31.7 0.00509068 112.699 +400 5.3 0.2286 71.3 0.0051942 127.700 +500 5.3 0.2286 71.3 0.0051942 129.880 +630 5.3 0.2286 71.3 0.0051942 131.800 +800 5.3 0.2286 71.3 0.0051942 133.480 +1000 5.3 0.2286 71.3 0.0051942 134.000 +1250 5.3 0.2286 71.3 0.0051942 133.380 +1600 5.3 0.2286 71.3 0.0051942 130.460 +2000 5.3 0.2286 71.3 0.0051942 125.890 +2500 5.3 0.2286 71.3 0.0051942 123.740 +3150 5.3 0.2286 71.3 0.0051942 123.120 +4000 5.3 0.2286 71.3 0.0051942 120.330 +5000 5.3 0.2286 71.3 0.0051942 118.050 +6300 5.3 0.2286 71.3 0.0051942 116.920 +8000 5.3 0.2286 71.3 0.0051942 114.900 +10000 5.3 0.2286 71.3 0.0051942 111.350 +250 5.3 0.2286 39.6 0.00614329 127.011 +315 5.3 0.2286 39.6 0.00614329 129.691 +400 5.3 0.2286 39.6 0.00614329 131.221 +500 5.3 0.2286 39.6 0.00614329 132.251 +630 5.3 0.2286 39.6 0.00614329 132.011 +800 5.3 0.2286 39.6 0.00614329 129.491 +1000 5.3 0.2286 39.6 0.00614329 125.581 +1250 5.3 0.2286 39.6 0.00614329 125.721 +1600 5.3 0.2286 39.6 0.00614329 123.081 +2000 5.3 0.2286 39.6 0.00614329 117.911 +2500 5.3 0.2286 39.6 0.00614329 116.151 +3150 5.3 0.2286 39.6 0.00614329 118.441 +4000 5.3 0.2286 39.6 0.00614329 115.801 +5000 5.3 0.2286 39.6 0.00614329 115.311 +6300 5.3 0.2286 39.6 0.00614329 112.541 +200 7.3 0.2286 71.3 0.0104404 138.758 +250 7.3 0.2286 71.3 0.0104404 139.918 +315 7.3 0.2286 71.3 0.0104404 139.808 +400 7.3 0.2286 71.3 0.0104404 139.438 +500 7.3 0.2286 71.3 0.0104404 136.798 +630 7.3 0.2286 71.3 0.0104404 133.768 +800 7.3 0.2286 71.3 0.0104404 130.748 +1000 7.3 0.2286 71.3 0.0104404 126.838 +1250 7.3 0.2286 71.3 0.0104404 127.358 +1600 7.3 0.2286 71.3 0.0104404 125.728 +2000 7.3 0.2286 71.3 0.0104404 122.708 +2500 7.3 0.2286 71.3 0.0104404 122.088 +3150 7.3 0.2286 71.3 0.0104404 120.458 +4000 7.3 0.2286 71.3 0.0104404 119.208 +5000 7.3 0.2286 71.3 0.0104404 115.298 +6300 7.3 0.2286 71.3 0.0104404 115.818 +200 7.3 0.2286 55.5 0.0111706 135.234 +250 7.3 0.2286 55.5 0.0111706 136.384 +315 7.3 0.2286 55.5 0.0111706 136.284 +400 7.3 0.2286 55.5 0.0111706 135.924 +500 7.3 0.2286 55.5 0.0111706 133.174 +630 7.3 0.2286 55.5 0.0111706 130.934 +800 7.3 0.2286 55.5 0.0111706 128.444 +1000 7.3 0.2286 55.5 0.0111706 125.194 +1250 7.3 0.2286 55.5 0.0111706 125.724 +1600 7.3 0.2286 55.5 0.0111706 123.354 +2000 7.3 0.2286 55.5 0.0111706 120.354 +2500 7.3 0.2286 55.5 0.0111706 118.994 +3150 7.3 0.2286 55.5 0.0111706 117.134 +4000 7.3 0.2286 55.5 0.0111706 117.284 +5000 7.3 0.2286 55.5 0.0111706 113.144 +6300 7.3 0.2286 55.5 0.0111706 111.534 +200 7.3 0.2286 39.6 0.0123481 130.989 +250 7.3 0.2286 39.6 0.0123481 131.889 +315 7.3 0.2286 39.6 0.0123481 132.149 +400 7.3 0.2286 39.6 0.0123481 132.039 +500 7.3 0.2286 39.6 0.0123481 130.299 +630 7.3 0.2286 39.6 0.0123481 128.929 +800 7.3 0.2286 39.6 0.0123481 126.299 +1000 7.3 0.2286 39.6 0.0123481 122.539 +1250 7.3 0.2286 39.6 0.0123481 123.189 +1600 7.3 0.2286 39.6 0.0123481 121.059 +2000 7.3 0.2286 39.6 0.0123481 117.809 +2500 7.3 0.2286 39.6 0.0123481 116.559 +3150 7.3 0.2286 39.6 0.0123481 114.309 +4000 7.3 0.2286 39.6 0.0123481 114.079 +5000 7.3 0.2286 39.6 0.0123481 111.959 +6300 7.3 0.2286 39.6 0.0123481 110.839 +200 7.3 0.2286 31.7 0.0132672 128.679 +250 7.3 0.2286 31.7 0.0132672 130.089 +315 7.3 0.2286 31.7 0.0132672 130.239 +400 7.3 0.2286 31.7 0.0132672 130.269 +500 7.3 0.2286 31.7 0.0132672 128.169 +630 7.3 0.2286 31.7 0.0132672 126.189 +800 7.3 0.2286 31.7 0.0132672 123.209 +1000 7.3 0.2286 31.7 0.0132672 119.099 +1250 7.3 0.2286 31.7 0.0132672 120.509 +1600 7.3 0.2286 31.7 0.0132672 119.039 +2000 7.3 0.2286 31.7 0.0132672 115.309 +2500 7.3 0.2286 31.7 0.0132672 114.709 +3150 7.3 0.2286 31.7 0.0132672 113.229 +4000 7.3 0.2286 31.7 0.0132672 112.639 +5000 7.3 0.2286 31.7 0.0132672 111.029 +6300 7.3 0.2286 31.7 0.0132672 110.689 +800 0 0.1524 71.3 0.0015988 125.817 +1000 0 0.1524 71.3 0.0015988 127.307 +1250 0 0.1524 71.3 0.0015988 128.927 +1600 0 0.1524 71.3 0.0015988 129.667 +2000 0 0.1524 71.3 0.0015988 128.647 +2500 0 0.1524 71.3 0.0015988 128.127 +3150 0 0.1524 71.3 0.0015988 129.377 +4000 0 0.1524 71.3 0.0015988 128.857 +5000 0 0.1524 71.3 0.0015988 126.457 +6300 0 0.1524 71.3 0.0015988 125.427 +8000 0 0.1524 71.3 0.0015988 122.527 +10000 0 0.1524 71.3 0.0015988 120.247 +12500 0 0.1524 71.3 0.0015988 117.087 +16000 0 0.1524 71.3 0.0015988 113.297 +500 0 0.1524 55.5 0.00172668 120.573 +630 0 0.1524 55.5 0.00172668 123.583 +800 0 0.1524 55.5 0.00172668 126.713 +1000 0 0.1524 55.5 0.00172668 128.583 +1250 0 0.1524 55.5 0.00172668 129.953 +1600 0 0.1524 55.5 0.00172668 130.183 +2000 0 0.1524 55.5 0.00172668 129.673 +2500 0 0.1524 55.5 0.00172668 127.763 +3150 0 0.1524 55.5 0.00172668 127.753 +4000 0 0.1524 55.5 0.00172668 127.233 +5000 0 0.1524 55.5 0.00172668 125.203 +6300 0 0.1524 55.5 0.00172668 123.303 +8000 0 0.1524 55.5 0.00172668 121.903 +10000 0 0.1524 55.5 0.00172668 119.253 +12500 0 0.1524 55.5 0.00172668 117.093 +16000 0 0.1524 55.5 0.00172668 112.803 +500 0 0.1524 39.6 0.00193287 119.513 +630 0 0.1524 39.6 0.00193287 124.403 +800 0 0.1524 39.6 0.00193287 127.903 +1000 0 0.1524 39.6 0.00193287 130.033 +1250 0 0.1524 39.6 0.00193287 131.023 +1600 0 0.1524 39.6 0.00193287 131.013 +2000 0 0.1524 39.6 0.00193287 129.633 +2500 0 0.1524 39.6 0.00193287 126.863 +3150 0 0.1524 39.6 0.00193287 125.603 +4000 0 0.1524 39.6 0.00193287 125.343 +5000 0 0.1524 39.6 0.00193287 123.453 +6300 0 0.1524 39.6 0.00193287 121.313 +8000 0 0.1524 39.6 0.00193287 120.553 +10000 0 0.1524 39.6 0.00193287 115.413 +500 0 0.1524 31.7 0.00209405 121.617 +630 0 0.1524 31.7 0.00209405 125.997 +800 0 0.1524 31.7 0.00209405 129.117 +1000 0 0.1524 31.7 0.00209405 130.987 +1250 0 0.1524 31.7 0.00209405 131.467 +1600 0 0.1524 31.7 0.00209405 130.817 +2000 0 0.1524 31.7 0.00209405 128.907 +2500 0 0.1524 31.7 0.00209405 125.867 +3150 0 0.1524 31.7 0.00209405 124.207 +4000 0 0.1524 31.7 0.00209405 123.807 +5000 0 0.1524 31.7 0.00209405 122.397 +6300 0 0.1524 31.7 0.00209405 119.737 +8000 0 0.1524 31.7 0.00209405 117.957 +630 2.7 0.1524 71.3 0.00243851 127.404 +800 2.7 0.1524 71.3 0.00243851 127.394 +1000 2.7 0.1524 71.3 0.00243851 128.774 +1250 2.7 0.1524 71.3 0.00243851 130.144 +1600 2.7 0.1524 71.3 0.00243851 130.644 +2000 2.7 0.1524 71.3 0.00243851 130.114 +2500 2.7 0.1524 71.3 0.00243851 128.334 +3150 2.7 0.1524 71.3 0.00243851 127.054 +4000 2.7 0.1524 71.3 0.00243851 126.534 +5000 2.7 0.1524 71.3 0.00243851 124.364 +6300 2.7 0.1524 71.3 0.00243851 121.944 +8000 2.7 0.1524 71.3 0.00243851 120.534 +10000 2.7 0.1524 71.3 0.00243851 116.724 +12500 2.7 0.1524 71.3 0.00243851 113.034 +16000 2.7 0.1524 71.3 0.00243851 110.364 +500 2.7 0.1524 39.6 0.00294804 121.009 +630 2.7 0.1524 39.6 0.00294804 125.809 +800 2.7 0.1524 39.6 0.00294804 128.829 +1000 2.7 0.1524 39.6 0.00294804 130.589 +1250 2.7 0.1524 39.6 0.00294804 130.829 +1600 2.7 0.1524 39.6 0.00294804 130.049 +2000 2.7 0.1524 39.6 0.00294804 128.139 +2500 2.7 0.1524 39.6 0.00294804 125.589 +3150 2.7 0.1524 39.6 0.00294804 122.919 +4000 2.7 0.1524 39.6 0.00294804 121.889 +5000 2.7 0.1524 39.6 0.00294804 121.499 +6300 2.7 0.1524 39.6 0.00294804 119.209 +8000 2.7 0.1524 39.6 0.00294804 116.659 +10000 2.7 0.1524 39.6 0.00294804 112.589 +12500 2.7 0.1524 39.6 0.00294804 108.649 +400 5.4 0.1524 71.3 0.00401199 124.121 +500 5.4 0.1524 71.3 0.00401199 126.291 +630 5.4 0.1524 71.3 0.00401199 128.971 +800 5.4 0.1524 71.3 0.00401199 131.281 +1000 5.4 0.1524 71.3 0.00401199 133.201 +1250 5.4 0.1524 71.3 0.00401199 134.111 +1600 5.4 0.1524 71.3 0.00401199 133.241 +2000 5.4 0.1524 71.3 0.00401199 131.111 +2500 5.4 0.1524 71.3 0.00401199 127.591 +3150 5.4 0.1524 71.3 0.00401199 123.311 +4000 5.4 0.1524 71.3 0.00401199 121.431 +5000 5.4 0.1524 71.3 0.00401199 120.061 +6300 5.4 0.1524 71.3 0.00401199 116.411 +400 5.4 0.1524 55.5 0.00433288 126.807 +500 5.4 0.1524 55.5 0.00433288 129.367 +630 5.4 0.1524 55.5 0.00433288 131.807 +800 5.4 0.1524 55.5 0.00433288 133.097 +1000 5.4 0.1524 55.5 0.00433288 132.127 +1250 5.4 0.1524 55.5 0.00433288 130.777 +1600 5.4 0.1524 55.5 0.00433288 130.567 +2000 5.4 0.1524 55.5 0.00433288 128.707 +2500 5.4 0.1524 55.5 0.00433288 124.077 +3150 5.4 0.1524 55.5 0.00433288 121.587 +4000 5.4 0.1524 55.5 0.00433288 119.737 +5000 5.4 0.1524 55.5 0.00433288 118.757 +6300 5.4 0.1524 55.5 0.00433288 117.287 +8000 5.4 0.1524 55.5 0.00433288 114.927 +315 5.4 0.1524 39.6 0.00485029 125.347 +400 5.4 0.1524 39.6 0.00485029 127.637 +500 5.4 0.1524 39.6 0.00485029 129.937 +630 5.4 0.1524 39.6 0.00485029 132.357 +800 5.4 0.1524 39.6 0.00485029 132.757 +1000 5.4 0.1524 39.6 0.00485029 130.507 +1250 5.4 0.1524 39.6 0.00485029 127.117 +1600 5.4 0.1524 39.6 0.00485029 126.267 +2000 5.4 0.1524 39.6 0.00485029 124.647 +2500 5.4 0.1524 39.6 0.00485029 120.497 +3150 5.4 0.1524 39.6 0.00485029 119.137 +4000 5.4 0.1524 39.6 0.00485029 117.137 +5000 5.4 0.1524 39.6 0.00485029 117.037 +6300 5.4 0.1524 39.6 0.00485029 116.677 +315 5.4 0.1524 31.7 0.00525474 125.741 +400 5.4 0.1524 31.7 0.00525474 127.781 +500 5.4 0.1524 31.7 0.00525474 129.681 +630 5.4 0.1524 31.7 0.00525474 131.471 +800 5.4 0.1524 31.7 0.00525474 131.491 +1000 5.4 0.1524 31.7 0.00525474 128.241 +1250 5.4 0.1524 31.7 0.00525474 123.991 +1600 5.4 0.1524 31.7 0.00525474 123.761 +2000 5.4 0.1524 31.7 0.00525474 122.771 +2500 5.4 0.1524 31.7 0.00525474 119.151 +3150 5.4 0.1524 31.7 0.00525474 118.291 +4000 5.4 0.1524 31.7 0.00525474 116.181 +5000 5.4 0.1524 31.7 0.00525474 115.691 +6300 5.4 0.1524 31.7 0.00525474 115.591 +315 7.2 0.1524 71.3 0.00752039 128.713 +400 7.2 0.1524 71.3 0.00752039 130.123 +500 7.2 0.1524 71.3 0.00752039 132.043 +630 7.2 0.1524 71.3 0.00752039 134.853 +800 7.2 0.1524 71.3 0.00752039 136.023 +1000 7.2 0.1524 71.3 0.00752039 134.273 +1250 7.2 0.1524 71.3 0.00752039 132.513 +1600 7.2 0.1524 71.3 0.00752039 130.893 +2000 7.2 0.1524 71.3 0.00752039 128.643 +2500 7.2 0.1524 71.3 0.00752039 124.353 +3150 7.2 0.1524 71.3 0.00752039 116.783 +4000 7.2 0.1524 71.3 0.00752039 119.343 +5000 7.2 0.1524 71.3 0.00752039 118.343 +6300 7.2 0.1524 71.3 0.00752039 116.603 +8000 7.2 0.1524 71.3 0.00752039 113.333 +10000 7.2 0.1524 71.3 0.00752039 110.313 +250 7.2 0.1524 39.6 0.00909175 127.488 +315 7.2 0.1524 39.6 0.00909175 130.558 +400 7.2 0.1524 39.6 0.00909175 132.118 +500 7.2 0.1524 39.6 0.00909175 132.658 +630 7.2 0.1524 39.6 0.00909175 133.198 +800 7.2 0.1524 39.6 0.00909175 132.358 +1000 7.2 0.1524 39.6 0.00909175 128.338 +1250 7.2 0.1524 39.6 0.00909175 122.428 +1600 7.2 0.1524 39.6 0.00909175 120.058 +2000 7.2 0.1524 39.6 0.00909175 120.228 +2500 7.2 0.1524 39.6 0.00909175 117.478 +3150 7.2 0.1524 39.6 0.00909175 111.818 +4000 7.2 0.1524 39.6 0.00909175 114.258 +5000 7.2 0.1524 39.6 0.00909175 113.288 +6300 7.2 0.1524 39.6 0.00909175 112.688 +8000 7.2 0.1524 39.6 0.00909175 111.588 +10000 7.2 0.1524 39.6 0.00909175 110.868 +200 9.9 0.1524 71.3 0.0193001 134.319 +250 9.9 0.1524 71.3 0.0193001 135.329 +315 9.9 0.1524 71.3 0.0193001 135.459 +400 9.9 0.1524 71.3 0.0193001 135.079 +500 9.9 0.1524 71.3 0.0193001 131.279 +630 9.9 0.1524 71.3 0.0193001 129.889 +800 9.9 0.1524 71.3 0.0193001 128.879 +1000 9.9 0.1524 71.3 0.0193001 126.349 +1250 9.9 0.1524 71.3 0.0193001 122.679 +1600 9.9 0.1524 71.3 0.0193001 121.789 +2000 9.9 0.1524 71.3 0.0193001 120.779 +2500 9.9 0.1524 71.3 0.0193001 119.639 +3150 9.9 0.1524 71.3 0.0193001 116.849 +4000 9.9 0.1524 71.3 0.0193001 115.079 +5000 9.9 0.1524 71.3 0.0193001 114.569 +6300 9.9 0.1524 71.3 0.0193001 112.039 +200 9.9 0.1524 55.5 0.0208438 131.955 +250 9.9 0.1524 55.5 0.0208438 133.235 +315 9.9 0.1524 55.5 0.0208438 132.355 +400 9.9 0.1524 55.5 0.0208438 131.605 +500 9.9 0.1524 55.5 0.0208438 127.815 +630 9.9 0.1524 55.5 0.0208438 127.315 +800 9.9 0.1524 55.5 0.0208438 126.565 +1000 9.9 0.1524 55.5 0.0208438 124.665 +1250 9.9 0.1524 55.5 0.0208438 121.635 +1600 9.9 0.1524 55.5 0.0208438 119.875 +2000 9.9 0.1524 55.5 0.0208438 119.505 +2500 9.9 0.1524 55.5 0.0208438 118.365 +3150 9.9 0.1524 55.5 0.0208438 115.085 +4000 9.9 0.1524 55.5 0.0208438 112.945 +5000 9.9 0.1524 55.5 0.0208438 112.065 +6300 9.9 0.1524 55.5 0.0208438 110.555 +200 9.9 0.1524 39.6 0.0233328 127.315 +250 9.9 0.1524 39.6 0.0233328 128.335 +315 9.9 0.1524 39.6 0.0233328 128.595 +400 9.9 0.1524 39.6 0.0233328 128.345 +500 9.9 0.1524 39.6 0.0233328 126.835 +630 9.9 0.1524 39.6 0.0233328 126.465 +800 9.9 0.1524 39.6 0.0233328 126.345 +1000 9.9 0.1524 39.6 0.0233328 123.835 +1250 9.9 0.1524 39.6 0.0233328 120.555 +1600 9.9 0.1524 39.6 0.0233328 118.545 +2000 9.9 0.1524 39.6 0.0233328 117.925 +2500 9.9 0.1524 39.6 0.0233328 116.295 +3150 9.9 0.1524 39.6 0.0233328 113.525 +4000 9.9 0.1524 39.6 0.0233328 112.265 +5000 9.9 0.1524 39.6 0.0233328 111.135 +6300 9.9 0.1524 39.6 0.0233328 109.885 +200 9.9 0.1524 31.7 0.0252785 127.299 +250 9.9 0.1524 31.7 0.0252785 128.559 +315 9.9 0.1524 31.7 0.0252785 128.809 +400 9.9 0.1524 31.7 0.0252785 128.939 +500 9.9 0.1524 31.7 0.0252785 127.179 +630 9.9 0.1524 31.7 0.0252785 126.049 +800 9.9 0.1524 31.7 0.0252785 125.539 +1000 9.9 0.1524 31.7 0.0252785 122.149 +1250 9.9 0.1524 31.7 0.0252785 118.619 +1600 9.9 0.1524 31.7 0.0252785 117.119 +2000 9.9 0.1524 31.7 0.0252785 116.859 +2500 9.9 0.1524 31.7 0.0252785 114.729 +3150 9.9 0.1524 31.7 0.0252785 112.209 +4000 9.9 0.1524 31.7 0.0252785 111.459 +5000 9.9 0.1524 31.7 0.0252785 109.949 +6300 9.9 0.1524 31.7 0.0252785 108.689 +200 12.6 0.1524 71.3 0.0483159 128.354 +250 12.6 0.1524 71.3 0.0483159 129.744 +315 12.6 0.1524 71.3 0.0483159 128.484 +400 12.6 0.1524 71.3 0.0483159 127.094 +500 12.6 0.1524 71.3 0.0483159 121.664 +630 12.6 0.1524 71.3 0.0483159 123.304 +800 12.6 0.1524 71.3 0.0483159 123.054 +1000 12.6 0.1524 71.3 0.0483159 122.044 +1250 12.6 0.1524 71.3 0.0483159 120.154 +1600 12.6 0.1524 71.3 0.0483159 120.534 +2000 12.6 0.1524 71.3 0.0483159 117.504 +2500 12.6 0.1524 71.3 0.0483159 115.234 +3150 12.6 0.1524 71.3 0.0483159 113.334 +4000 12.6 0.1524 71.3 0.0483159 108.034 +5000 12.6 0.1524 71.3 0.0483159 108.034 +6300 12.6 0.1524 71.3 0.0483159 107.284 +200 12.6 0.1524 39.6 0.0584113 114.750 +250 12.6 0.1524 39.6 0.0584113 115.890 +315 12.6 0.1524 39.6 0.0584113 116.020 +400 12.6 0.1524 39.6 0.0584113 115.910 +500 12.6 0.1524 39.6 0.0584113 114.900 +630 12.6 0.1524 39.6 0.0584113 116.550 +800 12.6 0.1524 39.6 0.0584113 116.560 +1000 12.6 0.1524 39.6 0.0584113 114.670 +1250 12.6 0.1524 39.6 0.0584113 112.160 +1600 12.6 0.1524 39.6 0.0584113 110.780 +2000 12.6 0.1524 39.6 0.0584113 109.520 +2500 12.6 0.1524 39.6 0.0584113 106.880 +3150 12.6 0.1524 39.6 0.0584113 106.260 +4000 12.6 0.1524 39.6 0.0584113 104.500 +5000 12.6 0.1524 39.6 0.0584113 104.130 +6300 12.6 0.1524 39.6 0.0584113 103.380 +800 0 0.0508 71.3 0.000740478 130.960 +1000 0 0.0508 71.3 0.000740478 129.450 +1250 0 0.0508 71.3 0.000740478 128.560 +1600 0 0.0508 71.3 0.000740478 129.680 +2000 0 0.0508 71.3 0.000740478 131.060 +2500 0 0.0508 71.3 0.000740478 131.310 +3150 0 0.0508 71.3 0.000740478 135.070 +4000 0 0.0508 71.3 0.000740478 134.430 +5000 0 0.0508 71.3 0.000740478 134.430 +6300 0 0.0508 71.3 0.000740478 133.040 +8000 0 0.0508 71.3 0.000740478 130.890 +10000 0 0.0508 71.3 0.000740478 128.740 +12500 0 0.0508 71.3 0.000740478 125.220 +800 0 0.0508 55.5 0.00076193 124.336 +1000 0 0.0508 55.5 0.00076193 125.586 +1250 0 0.0508 55.5 0.00076193 127.076 +1600 0 0.0508 55.5 0.00076193 128.576 +2000 0 0.0508 55.5 0.00076193 131.456 +2500 0 0.0508 55.5 0.00076193 133.956 +3150 0 0.0508 55.5 0.00076193 134.826 +4000 0 0.0508 55.5 0.00076193 134.946 +5000 0 0.0508 55.5 0.00076193 134.556 +6300 0 0.0508 55.5 0.00076193 132.796 +8000 0 0.0508 55.5 0.00076193 130.156 +10000 0 0.0508 55.5 0.00076193 127.636 +12500 0 0.0508 55.5 0.00076193 125.376 +800 0 0.0508 39.6 0.000791822 126.508 +1000 0 0.0508 39.6 0.000791822 127.638 +1250 0 0.0508 39.6 0.000791822 129.148 +1600 0 0.0508 39.6 0.000791822 130.908 +2000 0 0.0508 39.6 0.000791822 132.918 +2500 0 0.0508 39.6 0.000791822 134.938 +3150 0 0.0508 39.6 0.000791822 135.938 +4000 0 0.0508 39.6 0.000791822 135.308 +5000 0 0.0508 39.6 0.000791822 134.308 +6300 0 0.0508 39.6 0.000791822 131.918 +8000 0 0.0508 39.6 0.000791822 128.518 +10000 0 0.0508 39.6 0.000791822 125.998 +12500 0 0.0508 39.6 0.000791822 123.988 +800 0 0.0508 31.7 0.000812164 122.790 +1000 0 0.0508 31.7 0.000812164 126.780 +1250 0 0.0508 31.7 0.000812164 129.270 +1600 0 0.0508 31.7 0.000812164 131.010 +2000 0 0.0508 31.7 0.000812164 133.010 +2500 0 0.0508 31.7 0.000812164 134.870 +3150 0 0.0508 31.7 0.000812164 135.490 +4000 0 0.0508 31.7 0.000812164 134.110 +5000 0 0.0508 31.7 0.000812164 133.230 +6300 0 0.0508 31.7 0.000812164 130.340 +8000 0 0.0508 31.7 0.000812164 126.590 +10000 0 0.0508 31.7 0.000812164 122.450 +12500 0 0.0508 31.7 0.000812164 119.070 +1600 4.2 0.0508 71.3 0.00142788 124.318 +2000 4.2 0.0508 71.3 0.00142788 129.848 +2500 4.2 0.0508 71.3 0.00142788 131.978 +3150 4.2 0.0508 71.3 0.00142788 133.728 +4000 4.2 0.0508 71.3 0.00142788 133.598 +5000 4.2 0.0508 71.3 0.00142788 132.828 +6300 4.2 0.0508 71.3 0.00142788 129.308 +8000 4.2 0.0508 71.3 0.00142788 125.268 +10000 4.2 0.0508 71.3 0.00142788 121.238 +12500 4.2 0.0508 71.3 0.00142788 117.328 +1000 4.2 0.0508 39.6 0.00152689 125.647 +1250 4.2 0.0508 39.6 0.00152689 128.427 +1600 4.2 0.0508 39.6 0.00152689 130.197 +2000 4.2 0.0508 39.6 0.00152689 132.587 +2500 4.2 0.0508 39.6 0.00152689 133.847 +3150 4.2 0.0508 39.6 0.00152689 133.587 +4000 4.2 0.0508 39.6 0.00152689 131.807 +5000 4.2 0.0508 39.6 0.00152689 129.777 +6300 4.2 0.0508 39.6 0.00152689 125.717 +8000 4.2 0.0508 39.6 0.00152689 120.397 +10000 4.2 0.0508 39.6 0.00152689 116.967 +800 8.4 0.0508 71.3 0.00529514 127.556 +1000 8.4 0.0508 71.3 0.00529514 129.946 +1250 8.4 0.0508 71.3 0.00529514 132.086 +1600 8.4 0.0508 71.3 0.00529514 133.846 +2000 8.4 0.0508 71.3 0.00529514 134.476 +2500 8.4 0.0508 71.3 0.00529514 134.226 +3150 8.4 0.0508 71.3 0.00529514 131.966 +4000 8.4 0.0508 71.3 0.00529514 126.926 +5000 8.4 0.0508 71.3 0.00529514 121.146 +400 8.4 0.0508 55.5 0.00544854 121.582 +500 8.4 0.0508 55.5 0.00544854 123.742 +630 8.4 0.0508 55.5 0.00544854 126.152 +800 8.4 0.0508 55.5 0.00544854 128.562 +1000 8.4 0.0508 55.5 0.00544854 130.722 +1250 8.4 0.0508 55.5 0.00544854 132.252 +1600 8.4 0.0508 55.5 0.00544854 133.032 +2000 8.4 0.0508 55.5 0.00544854 133.042 +2500 8.4 0.0508 55.5 0.00544854 131.542 +3150 8.4 0.0508 55.5 0.00544854 128.402 +4000 8.4 0.0508 55.5 0.00544854 122.612 +5000 8.4 0.0508 55.5 0.00544854 115.812 +400 8.4 0.0508 39.6 0.00566229 120.015 +500 8.4 0.0508 39.6 0.00566229 122.905 +630 8.4 0.0508 39.6 0.00566229 126.045 +800 8.4 0.0508 39.6 0.00566229 128.435 +1000 8.4 0.0508 39.6 0.00566229 130.195 +1250 8.4 0.0508 39.6 0.00566229 131.205 +1600 8.4 0.0508 39.6 0.00566229 130.965 +2000 8.4 0.0508 39.6 0.00566229 129.965 +2500 8.4 0.0508 39.6 0.00566229 127.465 +3150 8.4 0.0508 39.6 0.00566229 123.965 +4000 8.4 0.0508 39.6 0.00566229 118.955 +400 8.4 0.0508 31.7 0.00580776 120.076 +500 8.4 0.0508 31.7 0.00580776 122.966 +630 8.4 0.0508 31.7 0.00580776 125.856 +800 8.4 0.0508 31.7 0.00580776 128.246 +1000 8.4 0.0508 31.7 0.00580776 129.516 +1250 8.4 0.0508 31.7 0.00580776 130.156 +1600 8.4 0.0508 31.7 0.00580776 129.296 +2000 8.4 0.0508 31.7 0.00580776 127.686 +2500 8.4 0.0508 31.7 0.00580776 125.576 +3150 8.4 0.0508 31.7 0.00580776 122.086 +4000 8.4 0.0508 31.7 0.00580776 118.106 +200 11.2 0.0508 71.3 0.014072 125.941 +250 11.2 0.0508 71.3 0.014072 127.101 +315 11.2 0.0508 71.3 0.014072 128.381 +400 11.2 0.0508 71.3 0.014072 129.281 +500 11.2 0.0508 71.3 0.014072 130.311 +630 11.2 0.0508 71.3 0.014072 133.611 +800 11.2 0.0508 71.3 0.014072 136.031 +1000 11.2 0.0508 71.3 0.014072 136.941 +1250 11.2 0.0508 71.3 0.014072 136.191 +1600 11.2 0.0508 71.3 0.014072 135.191 +2000 11.2 0.0508 71.3 0.014072 133.311 +2500 11.2 0.0508 71.3 0.014072 130.541 +3150 11.2 0.0508 71.3 0.014072 127.141 +4000 11.2 0.0508 71.3 0.014072 122.471 +200 11.2 0.0508 39.6 0.0150478 125.010 +250 11.2 0.0508 39.6 0.0150478 126.430 +315 11.2 0.0508 39.6 0.0150478 128.990 +400 11.2 0.0508 39.6 0.0150478 130.670 +500 11.2 0.0508 39.6 0.0150478 131.960 +630 11.2 0.0508 39.6 0.0150478 133.130 +800 11.2 0.0508 39.6 0.0150478 133.790 +1000 11.2 0.0508 39.6 0.0150478 132.430 +1250 11.2 0.0508 39.6 0.0150478 130.050 +1600 11.2 0.0508 39.6 0.0150478 126.540 +2000 11.2 0.0508 39.6 0.0150478 124.420 +2500 11.2 0.0508 39.6 0.0150478 122.170 +3150 11.2 0.0508 39.6 0.0150478 119.670 +4000 11.2 0.0508 39.6 0.0150478 115.520 +200 15.4 0.0508 71.3 0.0264269 123.595 +250 15.4 0.0508 71.3 0.0264269 124.835 +315 15.4 0.0508 71.3 0.0264269 126.195 +400 15.4 0.0508 71.3 0.0264269 126.805 +500 15.4 0.0508 71.3 0.0264269 127.285 +630 15.4 0.0508 71.3 0.0264269 129.645 +800 15.4 0.0508 71.3 0.0264269 131.515 +1000 15.4 0.0508 71.3 0.0264269 131.865 +1250 15.4 0.0508 71.3 0.0264269 130.845 +1600 15.4 0.0508 71.3 0.0264269 130.065 +2000 15.4 0.0508 71.3 0.0264269 129.285 +2500 15.4 0.0508 71.3 0.0264269 127.625 +3150 15.4 0.0508 71.3 0.0264269 125.715 +4000 15.4 0.0508 71.3 0.0264269 122.675 +5000 15.4 0.0508 71.3 0.0264269 119.135 +6300 15.4 0.0508 71.3 0.0264269 115.215 +8000 15.4 0.0508 71.3 0.0264269 112.675 +200 15.4 0.0508 55.5 0.0271925 122.940 +250 15.4 0.0508 55.5 0.0271925 124.170 +315 15.4 0.0508 55.5 0.0271925 125.390 +400 15.4 0.0508 55.5 0.0271925 126.500 +500 15.4 0.0508 55.5 0.0271925 127.220 +630 15.4 0.0508 55.5 0.0271925 129.330 +800 15.4 0.0508 55.5 0.0271925 130.430 +1000 15.4 0.0508 55.5 0.0271925 130.400 +1250 15.4 0.0508 55.5 0.0271925 130.000 +1600 15.4 0.0508 55.5 0.0271925 128.200 +2000 15.4 0.0508 55.5 0.0271925 127.040 +2500 15.4 0.0508 55.5 0.0271925 125.630 +3150 15.4 0.0508 55.5 0.0271925 123.460 +4000 15.4 0.0508 55.5 0.0271925 120.920 +5000 15.4 0.0508 55.5 0.0271925 117.110 +6300 15.4 0.0508 55.5 0.0271925 112.930 +200 15.4 0.0508 39.6 0.0282593 121.783 +250 15.4 0.0508 39.6 0.0282593 122.893 +315 15.4 0.0508 39.6 0.0282593 124.493 +400 15.4 0.0508 39.6 0.0282593 125.353 +500 15.4 0.0508 39.6 0.0282593 125.963 +630 15.4 0.0508 39.6 0.0282593 127.443 +800 15.4 0.0508 39.6 0.0282593 128.423 +1000 15.4 0.0508 39.6 0.0282593 127.893 +1250 15.4 0.0508 39.6 0.0282593 126.743 +1600 15.4 0.0508 39.6 0.0282593 124.843 +2000 15.4 0.0508 39.6 0.0282593 123.443 +2500 15.4 0.0508 39.6 0.0282593 122.413 +3150 15.4 0.0508 39.6 0.0282593 120.513 +4000 15.4 0.0508 39.6 0.0282593 118.113 +5000 15.4 0.0508 39.6 0.0282593 114.453 +6300 15.4 0.0508 39.6 0.0282593 109.663 +200 15.4 0.0508 31.7 0.0289853 119.975 +250 15.4 0.0508 31.7 0.0289853 121.225 +315 15.4 0.0508 31.7 0.0289853 122.845 +400 15.4 0.0508 31.7 0.0289853 123.705 +500 15.4 0.0508 31.7 0.0289853 123.695 +630 15.4 0.0508 31.7 0.0289853 124.685 +800 15.4 0.0508 31.7 0.0289853 125.555 +1000 15.4 0.0508 31.7 0.0289853 124.525 +1250 15.4 0.0508 31.7 0.0289853 123.255 +1600 15.4 0.0508 31.7 0.0289853 121.485 +2000 15.4 0.0508 31.7 0.0289853 120.835 +2500 15.4 0.0508 31.7 0.0289853 119.945 +3150 15.4 0.0508 31.7 0.0289853 118.045 +4000 15.4 0.0508 31.7 0.0289853 115.635 +5000 15.4 0.0508 31.7 0.0289853 112.355 +6300 15.4 0.0508 31.7 0.0289853 108.185 +200 19.7 0.0508 71.3 0.0341183 118.005 +250 19.7 0.0508 71.3 0.0341183 119.115 +315 19.7 0.0508 71.3 0.0341183 121.235 +400 19.7 0.0508 71.3 0.0341183 123.865 +500 19.7 0.0508 71.3 0.0341183 126.995 +630 19.7 0.0508 71.3 0.0341183 128.365 +800 19.7 0.0508 71.3 0.0341183 124.555 +1000 19.7 0.0508 71.3 0.0341183 121.885 +1250 19.7 0.0508 71.3 0.0341183 121.485 +1600 19.7 0.0508 71.3 0.0341183 120.575 +2000 19.7 0.0508 71.3 0.0341183 120.055 +2500 19.7 0.0508 71.3 0.0341183 118.385 +3150 19.7 0.0508 71.3 0.0341183 116.225 +4000 19.7 0.0508 71.3 0.0341183 113.045 +200 19.7 0.0508 39.6 0.036484 125.974 +250 19.7 0.0508 39.6 0.036484 127.224 +315 19.7 0.0508 39.6 0.036484 129.864 +400 19.7 0.0508 39.6 0.036484 130.614 +500 19.7 0.0508 39.6 0.036484 128.444 +630 19.7 0.0508 39.6 0.036484 120.324 +800 19.7 0.0508 39.6 0.036484 119.174 +1000 19.7 0.0508 39.6 0.036484 118.904 +1250 19.7 0.0508 39.6 0.036484 118.634 +1600 19.7 0.0508 39.6 0.036484 117.604 +2000 19.7 0.0508 39.6 0.036484 117.724 +2500 19.7 0.0508 39.6 0.036484 116.184 +3150 19.7 0.0508 39.6 0.036484 113.004 +4000 19.7 0.0508 39.6 0.036484 108.684 +2500 0 0.0254 71.3 0.000400682 133.707 +3150 0 0.0254 71.3 0.000400682 137.007 +4000 0 0.0254 71.3 0.000400682 138.557 +5000 0 0.0254 71.3 0.000400682 136.837 +6300 0 0.0254 71.3 0.000400682 134.987 +8000 0 0.0254 71.3 0.000400682 129.867 +10000 0 0.0254 71.3 0.000400682 130.787 +12500 0 0.0254 71.3 0.000400682 133.207 +16000 0 0.0254 71.3 0.000400682 130.477 +20000 0 0.0254 71.3 0.000400682 123.217 +2000 0 0.0254 55.5 0.00041229 127.623 +2500 0 0.0254 55.5 0.00041229 130.073 +3150 0 0.0254 55.5 0.00041229 130.503 +4000 0 0.0254 55.5 0.00041229 133.223 +5000 0 0.0254 55.5 0.00041229 135.803 +6300 0 0.0254 55.5 0.00041229 136.103 +8000 0 0.0254 55.5 0.00041229 136.163 +10000 0 0.0254 55.5 0.00041229 134.563 +12500 0 0.0254 55.5 0.00041229 131.453 +16000 0 0.0254 55.5 0.00041229 125.683 +20000 0 0.0254 55.5 0.00041229 121.933 +1600 0 0.0254 39.6 0.000428464 124.156 +2000 0 0.0254 39.6 0.000428464 130.026 +2500 0 0.0254 39.6 0.000428464 131.836 +3150 0 0.0254 39.6 0.000428464 133.276 +4000 0 0.0254 39.6 0.000428464 135.346 +5000 0 0.0254 39.6 0.000428464 136.536 +6300 0 0.0254 39.6 0.000428464 136.826 +8000 0 0.0254 39.6 0.000428464 135.866 +10000 0 0.0254 39.6 0.000428464 133.376 +12500 0 0.0254 39.6 0.000428464 129.116 +16000 0 0.0254 39.6 0.000428464 124.986 +1000 0 0.0254 31.7 0.000439472 125.127 +1250 0 0.0254 31.7 0.000439472 127.947 +1600 0 0.0254 31.7 0.000439472 129.267 +2000 0 0.0254 31.7 0.000439472 130.697 +2500 0 0.0254 31.7 0.000439472 132.897 +3150 0 0.0254 31.7 0.000439472 135.227 +4000 0 0.0254 31.7 0.000439472 137.047 +5000 0 0.0254 31.7 0.000439472 138.607 +6300 0 0.0254 31.7 0.000439472 138.537 +8000 0 0.0254 31.7 0.000439472 137.207 +10000 0 0.0254 31.7 0.000439472 134.227 +12500 0 0.0254 31.7 0.000439472 128.977 +16000 0 0.0254 31.7 0.000439472 125.627 +2000 4.8 0.0254 71.3 0.000848633 128.398 +2500 4.8 0.0254 71.3 0.000848633 130.828 +3150 4.8 0.0254 71.3 0.000848633 133.378 +4000 4.8 0.0254 71.3 0.000848633 134.928 +5000 4.8 0.0254 71.3 0.000848633 135.468 +6300 4.8 0.0254 71.3 0.000848633 134.498 +8000 4.8 0.0254 71.3 0.000848633 131.518 +10000 4.8 0.0254 71.3 0.000848633 127.398 +12500 4.8 0.0254 71.3 0.000848633 127.688 +16000 4.8 0.0254 71.3 0.000848633 124.208 +20000 4.8 0.0254 71.3 0.000848633 119.708 +1600 4.8 0.0254 55.5 0.000873218 121.474 +2000 4.8 0.0254 55.5 0.000873218 125.054 +2500 4.8 0.0254 55.5 0.000873218 129.144 +3150 4.8 0.0254 55.5 0.000873218 132.354 +4000 4.8 0.0254 55.5 0.000873218 133.924 +5000 4.8 0.0254 55.5 0.000873218 135.484 +6300 4.8 0.0254 55.5 0.000873218 135.164 +8000 4.8 0.0254 55.5 0.000873218 132.184 +10000 4.8 0.0254 55.5 0.000873218 126.944 +12500 4.8 0.0254 55.5 0.000873218 125.094 +16000 4.8 0.0254 55.5 0.000873218 124.394 +20000 4.8 0.0254 55.5 0.000873218 121.284 +500 4.8 0.0254 39.6 0.000907475 116.366 +630 4.8 0.0254 39.6 0.000907475 118.696 +800 4.8 0.0254 39.6 0.000907475 120.766 +1000 4.8 0.0254 39.6 0.000907475 122.956 +1250 4.8 0.0254 39.6 0.000907475 125.026 +1600 4.8 0.0254 39.6 0.000907475 125.966 +2000 4.8 0.0254 39.6 0.000907475 128.916 +2500 4.8 0.0254 39.6 0.000907475 131.236 +3150 4.8 0.0254 39.6 0.000907475 133.436 +4000 4.8 0.0254 39.6 0.000907475 134.996 +5000 4.8 0.0254 39.6 0.000907475 135.426 +6300 4.8 0.0254 39.6 0.000907475 134.336 +8000 4.8 0.0254 39.6 0.000907475 131.346 +10000 4.8 0.0254 39.6 0.000907475 126.066 +500 4.8 0.0254 31.7 0.000930789 116.128 +630 4.8 0.0254 31.7 0.000930789 120.078 +800 4.8 0.0254 31.7 0.000930789 122.648 +1000 4.8 0.0254 31.7 0.000930789 125.348 +1250 4.8 0.0254 31.7 0.000930789 127.408 +1600 4.8 0.0254 31.7 0.000930789 128.718 +2000 4.8 0.0254 31.7 0.000930789 130.148 +2500 4.8 0.0254 31.7 0.000930789 132.588 +3150 4.8 0.0254 31.7 0.000930789 134.268 +4000 4.8 0.0254 31.7 0.000930789 135.328 +5000 4.8 0.0254 31.7 0.000930789 135.248 +6300 4.8 0.0254 31.7 0.000930789 132.898 +8000 4.8 0.0254 31.7 0.000930789 127.008 +630 9.5 0.0254 71.3 0.00420654 125.726 +800 9.5 0.0254 71.3 0.00420654 127.206 +1000 9.5 0.0254 71.3 0.00420654 129.556 +1250 9.5 0.0254 71.3 0.00420654 131.656 +1600 9.5 0.0254 71.3 0.00420654 133.756 +2000 9.5 0.0254 71.3 0.00420654 134.976 +2500 9.5 0.0254 71.3 0.00420654 135.956 +3150 9.5 0.0254 71.3 0.00420654 136.166 +4000 9.5 0.0254 71.3 0.00420654 134.236 +5000 9.5 0.0254 71.3 0.00420654 131.186 +6300 9.5 0.0254 71.3 0.00420654 127.246 +400 9.5 0.0254 55.5 0.0043284 120.952 +500 9.5 0.0254 55.5 0.0043284 123.082 +630 9.5 0.0254 55.5 0.0043284 125.452 +800 9.5 0.0254 55.5 0.0043284 128.082 +1000 9.5 0.0254 55.5 0.0043284 130.332 +1250 9.5 0.0254 55.5 0.0043284 132.202 +1600 9.5 0.0254 55.5 0.0043284 133.062 +2000 9.5 0.0254 55.5 0.0043284 134.052 +2500 9.5 0.0254 55.5 0.0043284 134.152 +3150 9.5 0.0254 55.5 0.0043284 133.252 +4000 9.5 0.0254 55.5 0.0043284 131.582 +5000 9.5 0.0254 55.5 0.0043284 128.412 +6300 9.5 0.0254 55.5 0.0043284 124.222 +200 9.5 0.0254 39.6 0.00449821 116.074 +250 9.5 0.0254 39.6 0.00449821 116.924 +315 9.5 0.0254 39.6 0.00449821 119.294 +400 9.5 0.0254 39.6 0.00449821 121.154 +500 9.5 0.0254 39.6 0.00449821 123.894 +630 9.5 0.0254 39.6 0.00449821 126.514 +800 9.5 0.0254 39.6 0.00449821 129.014 +1000 9.5 0.0254 39.6 0.00449821 130.374 +1250 9.5 0.0254 39.6 0.00449821 130.964 +1600 9.5 0.0254 39.6 0.00449821 131.184 +2000 9.5 0.0254 39.6 0.00449821 131.274 +2500 9.5 0.0254 39.6 0.00449821 131.234 +3150 9.5 0.0254 39.6 0.00449821 129.934 +4000 9.5 0.0254 39.6 0.00449821 127.864 +5000 9.5 0.0254 39.6 0.00449821 125.044 +6300 9.5 0.0254 39.6 0.00449821 120.324 +200 9.5 0.0254 31.7 0.00461377 119.146 +250 9.5 0.0254 31.7 0.00461377 120.136 +315 9.5 0.0254 31.7 0.00461377 122.766 +400 9.5 0.0254 31.7 0.00461377 124.756 +500 9.5 0.0254 31.7 0.00461377 126.886 +630 9.5 0.0254 31.7 0.00461377 129.006 +800 9.5 0.0254 31.7 0.00461377 130.746 +1000 9.5 0.0254 31.7 0.00461377 131.346 +1250 9.5 0.0254 31.7 0.00461377 131.446 +1600 9.5 0.0254 31.7 0.00461377 131.036 +2000 9.5 0.0254 31.7 0.00461377 130.496 +2500 9.5 0.0254 31.7 0.00461377 130.086 +3150 9.5 0.0254 31.7 0.00461377 128.536 +4000 9.5 0.0254 31.7 0.00461377 126.736 +5000 9.5 0.0254 31.7 0.00461377 124.426 +6300 9.5 0.0254 31.7 0.00461377 120.726 +250 12.7 0.0254 71.3 0.0121808 119.698 +315 12.7 0.0254 71.3 0.0121808 122.938 +400 12.7 0.0254 71.3 0.0121808 125.048 +500 12.7 0.0254 71.3 0.0121808 126.898 +630 12.7 0.0254 71.3 0.0121808 128.878 +800 12.7 0.0254 71.3 0.0121808 130.348 +1000 12.7 0.0254 71.3 0.0121808 131.698 +1250 12.7 0.0254 71.3 0.0121808 133.048 +1600 12.7 0.0254 71.3 0.0121808 134.528 +2000 12.7 0.0254 71.3 0.0121808 134.228 +2500 12.7 0.0254 71.3 0.0121808 134.058 +3150 12.7 0.0254 71.3 0.0121808 133.758 +4000 12.7 0.0254 71.3 0.0121808 131.808 +5000 12.7 0.0254 71.3 0.0121808 128.978 +6300 12.7 0.0254 71.3 0.0121808 125.398 +8000 12.7 0.0254 71.3 0.0121808 120.538 +10000 12.7 0.0254 71.3 0.0121808 114.418 +250 12.7 0.0254 39.6 0.0130253 121.547 +315 12.7 0.0254 39.6 0.0130253 123.537 +400 12.7 0.0254 39.6 0.0130253 125.527 +500 12.7 0.0254 39.6 0.0130253 127.127 +630 12.7 0.0254 39.6 0.0130253 128.867 +800 12.7 0.0254 39.6 0.0130253 130.217 +1000 12.7 0.0254 39.6 0.0130253 130.947 +1250 12.7 0.0254 39.6 0.0130253 130.777 +1600 12.7 0.0254 39.6 0.0130253 129.977 +2000 12.7 0.0254 39.6 0.0130253 129.567 +2500 12.7 0.0254 39.6 0.0130253 129.027 +3150 12.7 0.0254 39.6 0.0130253 127.847 +4000 12.7 0.0254 39.6 0.0130253 126.537 +5000 12.7 0.0254 39.6 0.0130253 125.107 +6300 12.7 0.0254 39.6 0.0130253 123.177 +8000 12.7 0.0254 39.6 0.0130253 120.607 +10000 12.7 0.0254 39.6 0.0130253 116.017 +200 17.4 0.0254 71.3 0.016104 112.506 +250 17.4 0.0254 71.3 0.016104 113.796 +315 17.4 0.0254 71.3 0.016104 115.846 +400 17.4 0.0254 71.3 0.016104 117.396 +500 17.4 0.0254 71.3 0.016104 119.806 +630 17.4 0.0254 71.3 0.016104 122.606 +800 17.4 0.0254 71.3 0.016104 124.276 +1000 17.4 0.0254 71.3 0.016104 125.816 +1250 17.4 0.0254 71.3 0.016104 126.356 +1600 17.4 0.0254 71.3 0.016104 126.406 +2000 17.4 0.0254 71.3 0.016104 126.826 +2500 17.4 0.0254 71.3 0.016104 126.746 +3150 17.4 0.0254 71.3 0.016104 126.536 +4000 17.4 0.0254 71.3 0.016104 125.586 +5000 17.4 0.0254 71.3 0.016104 123.126 +6300 17.4 0.0254 71.3 0.016104 119.916 +8000 17.4 0.0254 71.3 0.016104 115.466 +200 17.4 0.0254 55.5 0.0165706 109.951 +250 17.4 0.0254 55.5 0.0165706 110.491 +315 17.4 0.0254 55.5 0.0165706 111.911 +400 17.4 0.0254 55.5 0.0165706 115.461 +500 17.4 0.0254 55.5 0.0165706 119.621 +630 17.4 0.0254 55.5 0.0165706 122.411 +800 17.4 0.0254 55.5 0.0165706 123.091 +1000 17.4 0.0254 55.5 0.0165706 126.001 +1250 17.4 0.0254 55.5 0.0165706 129.301 +1600 17.4 0.0254 55.5 0.0165706 126.471 +2000 17.4 0.0254 55.5 0.0165706 125.261 +2500 17.4 0.0254 55.5 0.0165706 124.931 +3150 17.4 0.0254 55.5 0.0165706 124.101 +4000 17.4 0.0254 55.5 0.0165706 121.771 +5000 17.4 0.0254 55.5 0.0165706 118.941 +6300 17.4 0.0254 55.5 0.0165706 114.861 +200 17.4 0.0254 39.6 0.0172206 114.044 +250 17.4 0.0254 39.6 0.0172206 114.714 +315 17.4 0.0254 39.6 0.0172206 115.144 +400 17.4 0.0254 39.6 0.0172206 115.444 +500 17.4 0.0254 39.6 0.0172206 117.514 +630 17.4 0.0254 39.6 0.0172206 124.514 +800 17.4 0.0254 39.6 0.0172206 135.324 +1000 17.4 0.0254 39.6 0.0172206 138.274 +1250 17.4 0.0254 39.6 0.0172206 131.364 +1600 17.4 0.0254 39.6 0.0172206 127.614 +2000 17.4 0.0254 39.6 0.0172206 126.644 +2500 17.4 0.0254 39.6 0.0172206 124.154 +3150 17.4 0.0254 39.6 0.0172206 123.564 +4000 17.4 0.0254 39.6 0.0172206 122.724 +5000 17.4 0.0254 39.6 0.0172206 119.854 +200 17.4 0.0254 31.7 0.0176631 116.146 +250 17.4 0.0254 31.7 0.0176631 116.956 +315 17.4 0.0254 31.7 0.0176631 118.416 +400 17.4 0.0254 31.7 0.0176631 120.766 +500 17.4 0.0254 31.7 0.0176631 127.676 +630 17.4 0.0254 31.7 0.0176631 136.886 +800 17.4 0.0254 31.7 0.0176631 139.226 +1000 17.4 0.0254 31.7 0.0176631 131.796 +1250 17.4 0.0254 31.7 0.0176631 128.306 +1600 17.4 0.0254 31.7 0.0176631 126.846 +2000 17.4 0.0254 31.7 0.0176631 124.356 +2500 17.4 0.0254 31.7 0.0176631 124.166 +3150 17.4 0.0254 31.7 0.0176631 123.466 +4000 17.4 0.0254 31.7 0.0176631 121.996 +5000 17.4 0.0254 31.7 0.0176631 117.996 +315 22.2 0.0254 71.3 0.0214178 115.857 +400 22.2 0.0254 71.3 0.0214178 117.927 +500 22.2 0.0254 71.3 0.0214178 117.967 +630 22.2 0.0254 71.3 0.0214178 120.657 +800 22.2 0.0254 71.3 0.0214178 123.227 +1000 22.2 0.0254 71.3 0.0214178 134.247 +1250 22.2 0.0254 71.3 0.0214178 140.987 +1600 22.2 0.0254 71.3 0.0214178 131.817 +2000 22.2 0.0254 71.3 0.0214178 127.197 +2500 22.2 0.0254 71.3 0.0214178 126.097 +3150 22.2 0.0254 71.3 0.0214178 124.127 +4000 22.2 0.0254 71.3 0.0214178 123.917 +5000 22.2 0.0254 71.3 0.0214178 125.727 +6300 22.2 0.0254 71.3 0.0214178 123.127 +8000 22.2 0.0254 71.3 0.0214178 121.657 +200 22.2 0.0254 39.6 0.0229028 116.066 +250 22.2 0.0254 39.6 0.0229028 117.386 +315 22.2 0.0254 39.6 0.0229028 120.716 +400 22.2 0.0254 39.6 0.0229028 123.416 +500 22.2 0.0254 39.6 0.0229028 129.776 +630 22.2 0.0254 39.6 0.0229028 137.026 +800 22.2 0.0254 39.6 0.0229028 137.076 +1000 22.2 0.0254 39.6 0.0229028 128.416 +1250 22.2 0.0254 39.6 0.0229028 126.446 +1600 22.2 0.0254 39.6 0.0229028 122.216 +2000 22.2 0.0254 39.6 0.0229028 121.256 +2500 22.2 0.0254 39.6 0.0229028 121.306 +3150 22.2 0.0254 39.6 0.0229028 120.856 +4000 22.2 0.0254 39.6 0.0229028 119.646 +5000 22.2 0.0254 39.6 0.0229028 118.816 +630 0 0.1016 71.3 0.00121072 124.155 +800 0 0.1016 71.3 0.00121072 126.805 +1000 0 0.1016 71.3 0.00121072 128.825 +1250 0 0.1016 71.3 0.00121072 130.335 +1600 0 0.1016 71.3 0.00121072 131.725 +2000 0 0.1016 71.3 0.00121072 132.095 +2500 0 0.1016 71.3 0.00121072 132.595 +3150 0 0.1016 71.3 0.00121072 131.955 +4000 0 0.1016 71.3 0.00121072 130.935 +5000 0 0.1016 71.3 0.00121072 130.795 +6300 0 0.1016 71.3 0.00121072 129.395 +8000 0 0.1016 71.3 0.00121072 125.465 +10000 0 0.1016 71.3 0.00121072 123.305 +12500 0 0.1016 71.3 0.00121072 119.375 +630 0 0.1016 55.5 0.00131983 126.170 +800 0 0.1016 55.5 0.00131983 127.920 +1000 0 0.1016 55.5 0.00131983 129.800 +1250 0 0.1016 55.5 0.00131983 131.430 +1600 0 0.1016 55.5 0.00131983 132.050 +2000 0 0.1016 55.5 0.00131983 132.540 +2500 0 0.1016 55.5 0.00131983 133.040 +3150 0 0.1016 55.5 0.00131983 131.780 +4000 0 0.1016 55.5 0.00131983 129.500 +5000 0 0.1016 55.5 0.00131983 128.360 +6300 0 0.1016 55.5 0.00131983 127.730 +8000 0 0.1016 55.5 0.00131983 124.450 +10000 0 0.1016 55.5 0.00131983 121.930 +12500 0 0.1016 55.5 0.00131983 119.910 +630 0 0.1016 39.6 0.00146332 125.401 +800 0 0.1016 39.6 0.00146332 128.401 +1000 0 0.1016 39.6 0.00146332 130.781 +1250 0 0.1016 39.6 0.00146332 132.271 +1600 0 0.1016 39.6 0.00146332 133.261 +2000 0 0.1016 39.6 0.00146332 133.251 +2500 0 0.1016 39.6 0.00146332 132.611 +3150 0 0.1016 39.6 0.00146332 130.961 +4000 0 0.1016 39.6 0.00146332 127.801 +5000 0 0.1016 39.6 0.00146332 126.021 +6300 0 0.1016 39.6 0.00146332 125.631 +8000 0 0.1016 39.6 0.00146332 122.341 +10000 0 0.1016 39.6 0.00146332 119.561 +630 0 0.1016 31.7 0.00150092 126.413 +800 0 0.1016 31.7 0.00150092 129.053 +1000 0 0.1016 31.7 0.00150092 131.313 +1250 0 0.1016 31.7 0.00150092 133.063 +1600 0 0.1016 31.7 0.00150092 133.553 +2000 0 0.1016 31.7 0.00150092 133.153 +2500 0 0.1016 31.7 0.00150092 132.003 +3150 0 0.1016 31.7 0.00150092 129.973 +4000 0 0.1016 31.7 0.00150092 126.933 +5000 0 0.1016 31.7 0.00150092 124.393 +6300 0 0.1016 31.7 0.00150092 124.253 +8000 0 0.1016 31.7 0.00150092 120.193 +10000 0 0.1016 31.7 0.00150092 115.893 +800 3.3 0.1016 71.3 0.00202822 131.074 +1000 3.3 0.1016 71.3 0.00202822 131.434 +1250 3.3 0.1016 71.3 0.00202822 132.304 +1600 3.3 0.1016 71.3 0.00202822 133.664 +2000 3.3 0.1016 71.3 0.00202822 134.034 +2500 3.3 0.1016 71.3 0.00202822 133.894 +3150 3.3 0.1016 71.3 0.00202822 132.114 +4000 3.3 0.1016 71.3 0.00202822 128.704 +5000 3.3 0.1016 71.3 0.00202822 127.054 +6300 3.3 0.1016 71.3 0.00202822 124.904 +8000 3.3 0.1016 71.3 0.00202822 121.234 +10000 3.3 0.1016 71.3 0.00202822 116.694 +630 3.3 0.1016 55.5 0.002211 126.599 +800 3.3 0.1016 55.5 0.002211 129.119 +1000 3.3 0.1016 55.5 0.002211 131.129 +1250 3.3 0.1016 55.5 0.002211 132.769 +1600 3.3 0.1016 55.5 0.002211 133.649 +2000 3.3 0.1016 55.5 0.002211 133.649 +2500 3.3 0.1016 55.5 0.002211 132.889 +3150 3.3 0.1016 55.5 0.002211 130.629 +4000 3.3 0.1016 55.5 0.002211 127.229 +5000 3.3 0.1016 55.5 0.002211 124.839 +6300 3.3 0.1016 55.5 0.002211 123.839 +8000 3.3 0.1016 55.5 0.002211 120.569 +10000 3.3 0.1016 55.5 0.002211 115.659 +630 3.3 0.1016 39.6 0.00245138 127.251 +800 3.3 0.1016 39.6 0.00245138 129.991 +1000 3.3 0.1016 39.6 0.00245138 131.971 +1250 3.3 0.1016 39.6 0.00245138 133.211 +1600 3.3 0.1016 39.6 0.00245138 133.071 +2000 3.3 0.1016 39.6 0.00245138 132.301 +2500 3.3 0.1016 39.6 0.00245138 130.791 +3150 3.3 0.1016 39.6 0.00245138 128.401 +4000 3.3 0.1016 39.6 0.00245138 124.881 +5000 3.3 0.1016 39.6 0.00245138 122.371 +6300 3.3 0.1016 39.6 0.00245138 120.851 +8000 3.3 0.1016 39.6 0.00245138 118.091 +10000 3.3 0.1016 39.6 0.00245138 115.321 +630 3.3 0.1016 31.7 0.00251435 128.952 +800 3.3 0.1016 31.7 0.00251435 131.362 +1000 3.3 0.1016 31.7 0.00251435 133.012 +1250 3.3 0.1016 31.7 0.00251435 134.022 +1600 3.3 0.1016 31.7 0.00251435 133.402 +2000 3.3 0.1016 31.7 0.00251435 131.642 +2500 3.3 0.1016 31.7 0.00251435 130.392 +3150 3.3 0.1016 31.7 0.00251435 128.252 +4000 3.3 0.1016 31.7 0.00251435 124.852 +5000 3.3 0.1016 31.7 0.00251435 122.082 +6300 3.3 0.1016 31.7 0.00251435 120.702 +8000 3.3 0.1016 31.7 0.00251435 117.432 +630 6.7 0.1016 71.3 0.00478288 131.448 +800 6.7 0.1016 71.3 0.00478288 134.478 +1000 6.7 0.1016 71.3 0.00478288 136.758 +1250 6.7 0.1016 71.3 0.00478288 137.658 +1600 6.7 0.1016 71.3 0.00478288 136.678 +2000 6.7 0.1016 71.3 0.00478288 134.568 +2500 6.7 0.1016 71.3 0.00478288 131.458 +3150 6.7 0.1016 71.3 0.00478288 124.458 +500 6.7 0.1016 55.5 0.0052139 129.343 +630 6.7 0.1016 55.5 0.0052139 133.023 +800 6.7 0.1016 55.5 0.0052139 135.953 +1000 6.7 0.1016 55.5 0.0052139 137.233 +1250 6.7 0.1016 55.5 0.0052139 136.883 +1600 6.7 0.1016 55.5 0.0052139 133.653 +2000 6.7 0.1016 55.5 0.0052139 129.653 +2500 6.7 0.1016 55.5 0.0052139 124.273 +400 6.7 0.1016 39.6 0.00578076 128.295 +500 6.7 0.1016 39.6 0.00578076 130.955 +630 6.7 0.1016 39.6 0.00578076 133.355 +800 6.7 0.1016 39.6 0.00578076 134.625 +1000 6.7 0.1016 39.6 0.00578076 134.515 +1250 6.7 0.1016 39.6 0.00578076 132.395 +1600 6.7 0.1016 39.6 0.00578076 127.375 +2000 6.7 0.1016 39.6 0.00578076 122.235 +315 6.7 0.1016 31.7 0.00592927 126.266 +400 6.7 0.1016 31.7 0.00592927 128.296 +500 6.7 0.1016 31.7 0.00592927 130.206 +630 6.7 0.1016 31.7 0.00592927 132.116 +800 6.7 0.1016 31.7 0.00592927 132.886 +1000 6.7 0.1016 31.7 0.00592927 131.636 +1250 6.7 0.1016 31.7 0.00592927 129.256 +1600 6.7 0.1016 31.7 0.00592927 124.346 +2000 6.7 0.1016 31.7 0.00592927 120.446 +200 8.9 0.1016 71.3 0.0103088 133.503 +250 8.9 0.1016 71.3 0.0103088 134.533 +315 8.9 0.1016 71.3 0.0103088 136.583 +400 8.9 0.1016 71.3 0.0103088 138.123 +500 8.9 0.1016 71.3 0.0103088 138.523 +630 8.9 0.1016 71.3 0.0103088 138.423 +800 8.9 0.1016 71.3 0.0103088 137.813 +1000 8.9 0.1016 71.3 0.0103088 135.433 +1250 8.9 0.1016 71.3 0.0103088 132.793 +1600 8.9 0.1016 71.3 0.0103088 128.763 +2000 8.9 0.1016 71.3 0.0103088 124.233 +2500 8.9 0.1016 71.3 0.0103088 123.623 +3150 8.9 0.1016 71.3 0.0103088 123.263 +4000 8.9 0.1016 71.3 0.0103088 120.243 +5000 8.9 0.1016 71.3 0.0103088 116.723 +6300 8.9 0.1016 71.3 0.0103088 117.253 +200 8.9 0.1016 39.6 0.0124596 133.420 +250 8.9 0.1016 39.6 0.0124596 134.340 +315 8.9 0.1016 39.6 0.0124596 135.380 +400 8.9 0.1016 39.6 0.0124596 135.540 +500 8.9 0.1016 39.6 0.0124596 133.790 +630 8.9 0.1016 39.6 0.0124596 131.920 +800 8.9 0.1016 39.6 0.0124596 130.940 +1000 8.9 0.1016 39.6 0.0124596 129.580 +1250 8.9 0.1016 39.6 0.0124596 127.710 +1600 8.9 0.1016 39.6 0.0124596 123.820 +2000 8.9 0.1016 39.6 0.0124596 119.040 +2500 8.9 0.1016 39.6 0.0124596 119.190 +3150 8.9 0.1016 39.6 0.0124596 119.350 +4000 8.9 0.1016 39.6 0.0124596 116.220 +5000 8.9 0.1016 39.6 0.0124596 113.080 +6300 8.9 0.1016 39.6 0.0124596 113.110 +200 12.3 0.1016 71.3 0.0337792 130.588 +250 12.3 0.1016 71.3 0.0337792 131.568 +315 12.3 0.1016 71.3 0.0337792 137.068 +400 12.3 0.1016 71.3 0.0337792 139.428 +500 12.3 0.1016 71.3 0.0337792 140.158 +630 12.3 0.1016 71.3 0.0337792 135.368 +800 12.3 0.1016 71.3 0.0337792 127.318 +1000 12.3 0.1016 71.3 0.0337792 127.928 +1250 12.3 0.1016 71.3 0.0337792 126.648 +1600 12.3 0.1016 71.3 0.0337792 124.748 +2000 12.3 0.1016 71.3 0.0337792 122.218 +2500 12.3 0.1016 71.3 0.0337792 121.318 +3150 12.3 0.1016 71.3 0.0337792 120.798 +4000 12.3 0.1016 71.3 0.0337792 118.018 +5000 12.3 0.1016 71.3 0.0337792 116.108 +6300 12.3 0.1016 71.3 0.0337792 113.958 +200 12.3 0.1016 55.5 0.0368233 132.304 +250 12.3 0.1016 55.5 0.0368233 133.294 +315 12.3 0.1016 55.5 0.0368233 135.674 +400 12.3 0.1016 55.5 0.0368233 136.414 +500 12.3 0.1016 55.5 0.0368233 133.774 +630 12.3 0.1016 55.5 0.0368233 124.244 +800 12.3 0.1016 55.5 0.0368233 125.114 +1000 12.3 0.1016 55.5 0.0368233 125.484 +1250 12.3 0.1016 55.5 0.0368233 124.214 +1600 12.3 0.1016 55.5 0.0368233 121.824 +2000 12.3 0.1016 55.5 0.0368233 118.564 +2500 12.3 0.1016 55.5 0.0368233 117.054 +3150 12.3 0.1016 55.5 0.0368233 116.914 +4000 12.3 0.1016 55.5 0.0368233 114.404 +5000 12.3 0.1016 55.5 0.0368233 112.014 +6300 12.3 0.1016 55.5 0.0368233 110.124 +200 12.3 0.1016 39.6 0.0408268 128.545 +250 12.3 0.1016 39.6 0.0408268 129.675 +315 12.3 0.1016 39.6 0.0408268 129.415 +400 12.3 0.1016 39.6 0.0408268 128.265 +500 12.3 0.1016 39.6 0.0408268 122.205 +630 12.3 0.1016 39.6 0.0408268 121.315 +800 12.3 0.1016 39.6 0.0408268 122.315 +1000 12.3 0.1016 39.6 0.0408268 122.435 +1250 12.3 0.1016 39.6 0.0408268 121.165 +1600 12.3 0.1016 39.6 0.0408268 117.875 +2000 12.3 0.1016 39.6 0.0408268 114.085 +2500 12.3 0.1016 39.6 0.0408268 113.315 +3150 12.3 0.1016 39.6 0.0408268 113.055 +4000 12.3 0.1016 39.6 0.0408268 110.905 +5000 12.3 0.1016 39.6 0.0408268 108.625 +6300 12.3 0.1016 39.6 0.0408268 107.985 +200 12.3 0.1016 31.7 0.0418756 124.987 +250 12.3 0.1016 31.7 0.0418756 125.857 +315 12.3 0.1016 31.7 0.0418756 124.717 +400 12.3 0.1016 31.7 0.0418756 123.207 +500 12.3 0.1016 31.7 0.0418756 118.667 +630 12.3 0.1016 31.7 0.0418756 119.287 +800 12.3 0.1016 31.7 0.0418756 120.037 +1000 12.3 0.1016 31.7 0.0418756 119.777 +1250 12.3 0.1016 31.7 0.0418756 118.767 +1600 12.3 0.1016 31.7 0.0418756 114.477 +2000 12.3 0.1016 31.7 0.0418756 110.447 +2500 12.3 0.1016 31.7 0.0418756 110.317 +3150 12.3 0.1016 31.7 0.0418756 110.307 +4000 12.3 0.1016 31.7 0.0418756 108.407 +5000 12.3 0.1016 31.7 0.0418756 107.147 +6300 12.3 0.1016 31.7 0.0418756 107.267 +200 15.6 0.1016 71.3 0.0437259 130.898 +250 15.6 0.1016 71.3 0.0437259 132.158 +315 15.6 0.1016 71.3 0.0437259 133.808 +400 15.6 0.1016 71.3 0.0437259 134.058 +500 15.6 0.1016 71.3 0.0437259 130.638 +630 15.6 0.1016 71.3 0.0437259 122.288 +800 15.6 0.1016 71.3 0.0437259 124.188 +1000 15.6 0.1016 71.3 0.0437259 124.438 +1250 15.6 0.1016 71.3 0.0437259 123.178 +1600 15.6 0.1016 71.3 0.0437259 121.528 +2000 15.6 0.1016 71.3 0.0437259 119.888 +2500 15.6 0.1016 71.3 0.0437259 118.998 +3150 15.6 0.1016 71.3 0.0437259 116.468 +4000 15.6 0.1016 71.3 0.0437259 113.298 +200 15.6 0.1016 39.6 0.0528487 123.514 +250 15.6 0.1016 39.6 0.0528487 124.644 +315 15.6 0.1016 39.6 0.0528487 122.754 +400 15.6 0.1016 39.6 0.0528487 120.484 +500 15.6 0.1016 39.6 0.0528487 115.304 +630 15.6 0.1016 39.6 0.0528487 118.084 +800 15.6 0.1016 39.6 0.0528487 118.964 +1000 15.6 0.1016 39.6 0.0528487 119.224 +1250 15.6 0.1016 39.6 0.0528487 118.214 +1600 15.6 0.1016 39.6 0.0528487 114.554 +2000 15.6 0.1016 39.6 0.0528487 110.894 +2500 15.6 0.1016 39.6 0.0528487 110.264 +3150 15.6 0.1016 39.6 0.0528487 109.254 +4000 15.6 0.1016 39.6 0.0528487 106.604 +5000 15.6 0.1016 39.6 0.0528487 106.224 +6300 15.6 0.1016 39.6 0.0528487 104.204 diff --git a/Experimentos/inicializacion-pesos-red-neuronal/utils/dat_to_csv.jl b/Experimentos/inicializacion-pesos-red-neuronal/utils/dat_to_csv.jl new file mode 100644 index 0000000..62f1db6 --- /dev/null +++ b/Experimentos/inicializacion-pesos-red-neuronal/utils/dat_to_csv.jl @@ -0,0 +1,23 @@ +################################################################# +# Fichero para convertir el formato .dat en .csv +################################################################# +# Fuente: https://stackoverflow.com/questions/61665998/reading-a-dat-file-in-julia-issues-with-variable-delimeter-spacing +function dat2csv(dat_path::AbstractString, csv_path::AbstractString) + open(csv_path, "w") do io + for line in eachline(dat_path) + join(io, split(line), ',') + println(io) + end + end + + return csv_path +end +function dat2csv(dat_path::AbstractString) + base, ext = splitext(dat_path) + ext == ".dat" || + throw(ArgumentError("file name doesn't end with `.dat`")) + return dat2csv(dat_path, "$base.csv") +end + +t = dat2csv("Experimentos/inicializacion-pesos-red-neuronal/data/airfoil_self_noise.dat") +println(t) \ No newline at end of file diff --git a/Memoria/capitulos/5-Estudio_experimental/3_algoritmo-inicializacion-pesos.tex b/Memoria/capitulos/5-Estudio_experimental/3_algoritmo-inicializacion-pesos.tex index 1513ecc..eed9eb7 100644 --- a/Memoria/capitulos/5-Estudio_experimental/3_algoritmo-inicializacion-pesos.tex +++ b/Memoria/capitulos/5-Estudio_experimental/3_algoritmo-inicializacion-pesos.tex @@ -2,6 +2,7 @@ % Experimentación con ALGORITMO INICIALIZACIÓN DE PESOS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\textcolor{red}{ATENCIÓN ESTÁ DESDE AQUÍ HASTA FIN SECCIONES EN BORRADOR} En la siguiente sección trataremos sobre la bondad del algoritmo expuesto @@ -133,7 +134,18 @@ \subsection*{Estructura de datos} La documentación del lenguaje está bastante regular. No hemos encontrado en ese parque un conjunto ordenado. -Por lo que +\section{Base de datos real} -Por lo tanto lo que vamos es a almacenar los datos y luego guardarlos \ No newline at end of file +\section{Base de datos } + +https://archive.ics.uci.edu/ml/datasets/Airfoil+Self-Noise + +base de datos con la que se va a probar + +\subsection{Lectura de los datos} + +1. El formato es un .dat que debe de transformarse a un .csv + + +\textcolor{red}{FIN DE LA SECCIÓN EN BORRADOR} \ No newline at end of file diff --git a/Memoria/capitulos/5-Estudio_experimental/5_estudio_experimental.tex b/Memoria/capitulos/5-Estudio_experimental/5_estudio_experimental.tex new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/Memoria/capitulos/5-Estudio_experimental/5_estudio_experimental.tex @@ -0,0 +1 @@ + diff --git a/Memoria/tfg.tex b/Memoria/tfg.tex index d890f06..3bb29e1 100644 --- a/Memoria/tfg.tex +++ b/Memoria/tfg.tex @@ -267,7 +267,7 @@ \chapter{Las redes neuronales son aproximadores universales} % Estudio del algoritmo de inicialización de pesos \input{capitulos/5-Estudio_experimental/2_descripcion_inicializacion-pesos} \input{capitulos/5-Estudio_experimental/3_detalles_implementacion} -%\input{capitulos/5-Estudio_experimental/3_algoritmo-inicializacion-pesos} +\input{capitulos/5-Estudio_experimental/3_algoritmo-inicializacion-pesos} \input{capitulos/5-Estudio_experimental/4_conclusion_intuitiva} % Comentario sobre los algoritmos genéticos \input{capitulos/5-Estudio_experimental/combinacion_funciones_activacion} From e32724d6480fbb3f2526ccd001a063622f2f98ee Mon Sep 17 00:00:00 2001 From: Blanca Date: Fri, 10 Jun 2022 22:01:01 +0200 Subject: [PATCH 36/76] =?UTF-8?q?A=C3=B1ade=20fichero=20extensi=C3=B3n=20d?= =?UTF-8?q?e=20datos=20#117=20al=20corrector?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/personal-dictionary.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/personal-dictionary.txt b/.github/workflows/personal-dictionary.txt index e3bb06e..0ea2d76 100644 --- a/.github/workflows/personal-dictionary.txt +++ b/.github/workflows/personal-dictionary.txt @@ -96,8 +96,10 @@ cienciadedatos codominio codominios contutor +csv cte darkRed +dat diferenciabilidad diferenciable diferenciables From 81ce5cfa6b4949b891115e8b61a76562447c0880 Mon Sep 17 00:00:00 2001 From: Blanca Date: Sat, 11 Jun 2022 11:08:30 +0200 Subject: [PATCH 37/76] Renombro nombre biblioteca #117 --- .../velocidad_funciones_activacion.jl | 2 +- .../visualizacion-funciones-activacion.jl | 2 +- .../0_experimento_sintetico.jl | 10 +- .../1_experimento_sintetico_heterogeneo.jl | 10 +- .../2_air_self_noise.jl | 8 +- Makefile | 2 +- .../1_funciones_activacion.tex | 2 +- .../3_detalles_implementacion.tex | 6 +- .../capitulos/Ejemplo-uso-biblioteca.ipynb | 445 ++++++++++++++++++ .../src/activation_functions.jl | 0 .../src/forward-propagation.jl | 0 .../src/metric_estimation.jl | 0 .../src/one_layer_neuronal_network.jl | 0 .../src/weight-initializer-algorithm/main.jl | 0 .../multiple-input-multiple-output.jl | 0 .../multiple-input-single-ouput.jl | 0 .../single-input-single-output.jl | 0 .../src/weight-initializer-algorithm/utils.jl | 0 .../test/RUN_ALL_TEST.jl | 0 .../test/activation_functions.test.jl | 0 .../test/forward_propagation.test.jl | 0 .../test/metric_estimation.test.jl | 0 .../test/one_layer_neural_network.test.jl | 0 .../weight-inizializer-algorithm/main.test.jl | 0 .../multiple-input-multiple-output.test.jl | 0 .../multiple-input-single-output.test.jl | 0 .../single-input-single-output.test.jl | 0 27 files changed, 466 insertions(+), 21 deletions(-) create mode 100644 Memoria/capitulos/Ejemplo-uso-biblioteca.ipynb rename {Biblioteca-Redes-Neuronales => OptimimizedNeuralNetwork.jl}/src/activation_functions.jl (100%) rename {Biblioteca-Redes-Neuronales => OptimimizedNeuralNetwork.jl}/src/forward-propagation.jl (100%) rename {Biblioteca-Redes-Neuronales => OptimimizedNeuralNetwork.jl}/src/metric_estimation.jl (100%) rename {Biblioteca-Redes-Neuronales => OptimimizedNeuralNetwork.jl}/src/one_layer_neuronal_network.jl (100%) rename {Biblioteca-Redes-Neuronales => OptimimizedNeuralNetwork.jl}/src/weight-initializer-algorithm/main.jl (100%) rename {Biblioteca-Redes-Neuronales => OptimimizedNeuralNetwork.jl}/src/weight-initializer-algorithm/multiple-input-multiple-output.jl (100%) rename {Biblioteca-Redes-Neuronales => OptimimizedNeuralNetwork.jl}/src/weight-initializer-algorithm/multiple-input-single-ouput.jl (100%) rename {Biblioteca-Redes-Neuronales => OptimimizedNeuralNetwork.jl}/src/weight-initializer-algorithm/single-input-single-output.jl (100%) rename {Biblioteca-Redes-Neuronales => OptimimizedNeuralNetwork.jl}/src/weight-initializer-algorithm/utils.jl (100%) rename {Biblioteca-Redes-Neuronales => OptimimizedNeuralNetwork.jl}/test/RUN_ALL_TEST.jl (100%) rename {Biblioteca-Redes-Neuronales => OptimimizedNeuralNetwork.jl}/test/activation_functions.test.jl (100%) rename {Biblioteca-Redes-Neuronales => OptimimizedNeuralNetwork.jl}/test/forward_propagation.test.jl (100%) rename {Biblioteca-Redes-Neuronales => OptimimizedNeuralNetwork.jl}/test/metric_estimation.test.jl (100%) rename {Biblioteca-Redes-Neuronales => OptimimizedNeuralNetwork.jl}/test/one_layer_neural_network.test.jl (100%) rename {Biblioteca-Redes-Neuronales => OptimimizedNeuralNetwork.jl}/test/weight-inizializer-algorithm/main.test.jl (100%) rename {Biblioteca-Redes-Neuronales => OptimimizedNeuralNetwork.jl}/test/weight-inizializer-algorithm/multiple-input-multiple-output.test.jl (100%) rename {Biblioteca-Redes-Neuronales => OptimimizedNeuralNetwork.jl}/test/weight-inizializer-algorithm/multiple-input-single-output.test.jl (100%) rename {Biblioteca-Redes-Neuronales => OptimimizedNeuralNetwork.jl}/test/weight-inizializer-algorithm/single-input-single-output.test.jl (100%) diff --git a/Experimentos/comparativas-funciones-activacion/velocidad_funciones_activacion.jl b/Experimentos/comparativas-funciones-activacion/velocidad_funciones_activacion.jl index d87a0ee..6209a58 100644 --- a/Experimentos/comparativas-funciones-activacion/velocidad_funciones_activacion.jl +++ b/Experimentos/comparativas-funciones-activacion/velocidad_funciones_activacion.jl @@ -10,7 +10,7 @@ # El directorio donde se guarda los ficheros es: DIRECTORIO_RESULTADOS ################################################################################### -include("../../Biblioteca-Redes-Neuronales/src/activation_functions.jl") +include("../../OptimimizedNeuralNetwork.jl/src/activation_functions.jl") using .ActivationFunctions # Bibliotecas para tiempos y estadísticas using TimerOutputs diff --git a/Experimentos/comparativas-funciones-activacion/visualizacion-funciones-activacion.jl b/Experimentos/comparativas-funciones-activacion/visualizacion-funciones-activacion.jl index dbd315e..2db3de8 100644 --- a/Experimentos/comparativas-funciones-activacion/visualizacion-funciones-activacion.jl +++ b/Experimentos/comparativas-funciones-activacion/visualizacion-funciones-activacion.jl @@ -4,7 +4,7 @@ # Paquetes using Plots using TOML -include("../../Biblioteca-Redes-Neuronales/src/activation_functions.jl") +include("../../OptimimizedNeuralNetwork.jl/src/activation_functions.jl") using .ActivationFunctions FICHERO_CONFIGURACION = "Experimentos/.config.toml" diff --git a/Experimentos/inicializacion-pesos-red-neuronal/0_experimento_sintetico.jl b/Experimentos/inicializacion-pesos-red-neuronal/0_experimento_sintetico.jl index 4467cf0..6249dd1 100644 --- a/Experimentos/inicializacion-pesos-red-neuronal/0_experimento_sintetico.jl +++ b/Experimentos/inicializacion-pesos-red-neuronal/0_experimento_sintetico.jl @@ -10,11 +10,11 @@ config = TOML.parsefile(FICHERO_CONFIGURACION)["visualizacion-inicializacion-pes img_path = config["DIRECTORIO_IMAGENES"] Random.seed!(1) -include("../../Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/main.jl") -include("../../Biblioteca-Redes-Neuronales/src/one_layer_neuronal_network.jl") -include("../../Biblioteca-Redes-Neuronales/src/metric_estimation.jl") -include("../../Biblioteca-Redes-Neuronales/src/activation_functions.jl") -include("../../Biblioteca-Redes-Neuronales/src/metric_estimation.jl") +include("../../OptimimizedNeuralNetwork.jl/src/weight-initializer-algorithm/main.jl") +include("../../OptimimizedNeuralNetwork.jl/src/one_layer_neuronal_network.jl") +include("../../OptimimizedNeuralNetwork.jl/src/metric_estimation.jl") +include("../../OptimimizedNeuralNetwork.jl/src/activation_functions.jl") +include("../../OptimimizedNeuralNetwork.jl/src/metric_estimation.jl") using .InitialNeuralNetwork using .OneLayerNeuralNetwork using .ActivationFunctions diff --git a/Experimentos/inicializacion-pesos-red-neuronal/1_experimento_sintetico_heterogeneo.jl b/Experimentos/inicializacion-pesos-red-neuronal/1_experimento_sintetico_heterogeneo.jl index 08437bd..af8851b 100644 --- a/Experimentos/inicializacion-pesos-red-neuronal/1_experimento_sintetico_heterogeneo.jl +++ b/Experimentos/inicializacion-pesos-red-neuronal/1_experimento_sintetico_heterogeneo.jl @@ -13,11 +13,11 @@ NOMBRE_FICHERO_RESULTADOS = config["NOMBRE_FICHERO_RESULTADOS"] numero_particiones = config["NUMERO_PARTICIONES"] Random.seed!(1) -include("../../Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/main.jl") -include("../../Biblioteca-Redes-Neuronales/src/one_layer_neuronal_network.jl") -include("../../Biblioteca-Redes-Neuronales/src/metric_estimation.jl") -include("../../Biblioteca-Redes-Neuronales/src/activation_functions.jl") -include("../../Biblioteca-Redes-Neuronales/src/metric_estimation.jl") +include("../../OptimimizedNeuralNetwork.jl/src/weight-initializer-algorithm/main.jl") +include("../../OptimimizedNeuralNetwork.jl/src/one_layer_neuronal_network.jl") +include("../../OptimimizedNeuralNetwork.jl/src/metric_estimation.jl") +include("../../OptimimizedNeuralNetwork.jl/src/activation_functions.jl") +include("../../OptimimizedNeuralNetwork.jl/src/metric_estimation.jl") using .InitialNeuralNetwork using .OneLayerNeuralNetwork diff --git a/Experimentos/inicializacion-pesos-red-neuronal/2_air_self_noise.jl b/Experimentos/inicializacion-pesos-red-neuronal/2_air_self_noise.jl index 6438e87..0248871 100644 --- a/Experimentos/inicializacion-pesos-red-neuronal/2_air_self_noise.jl +++ b/Experimentos/inicializacion-pesos-red-neuronal/2_air_self_noise.jl @@ -13,10 +13,10 @@ config = TOML.parsefile(FICHERO_CONFIGURACION)["air-self-noise"] FILE = config["FICHERO_DATOS"] Random.seed!(1) -include("../../Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/main.jl") -include("../../Biblioteca-Redes-Neuronales/src/one_layer_neuronal_network.jl") -include("../../Biblioteca-Redes-Neuronales/src/metric_estimation.jl") -include("../../Biblioteca-Redes-Neuronales/src/activation_functions.jl") +include("../../OptimimizedNeuralNetwork.jl/src/weight-initializer-algorithm/main.jl") +include("../../OptimimizedNeuralNetwork.jl/src/one_layer_neuronal_network.jl") +include("../../OptimimizedNeuralNetwork.jl/src/metric_estimation.jl") +include("../../OptimimizedNeuralNetwork.jl/src/activation_functions.jl") using .InitialNeuralNetwork using .OneLayerNeuralNetwork diff --git a/Makefile b/Makefile index 37159f6..2cb105f 100644 --- a/Makefile +++ b/Makefile @@ -29,7 +29,7 @@ workflow-spell: install-spell spell ########## Test biblioteca redes neurales ########### test: - julia --project=. Biblioteca-Redes-Neuronales/test/RUN_ALL_TEST.jl + julia --project=. OptimimizedNeuralNetwork.jl/test/RUN_ALL_TEST.jl ############################### Generar experimentos ############ experimentos: diff --git a/Memoria/capitulos/5-Estudio_experimental/1_funciones_activacion.tex b/Memoria/capitulos/5-Estudio_experimental/1_funciones_activacion.tex index e20275b..72d0b98 100644 --- a/Memoria/capitulos/5-Estudio_experimental/1_funciones_activacion.tex +++ b/Memoria/capitulos/5-Estudio_experimental/1_funciones_activacion.tex @@ -588,7 +588,7 @@ \subsection{ Implementación de las funciones de activación en la biblioteca de Puede encontrar la implementación de esto en la biblioteca de redes neuronales implementada en nuestro repositorio \footnote{ - Esto es en \url{https://github.com/BlancaCC/TFG-Estudio-de-las-redes-neuronales/tree/main/Biblioteca-Redes-Neuronales/src/activation_functions.jl} + Esto es en \url{https://github.com/BlancaCC/TFG-Estudio-de-las-redes-neuronales/tree/main/OptimimizedNeuralNetwork.jl/src/activation_functions.jl} }. % Funtores diff --git a/Memoria/capitulos/5-Estudio_experimental/3_detalles_implementacion.tex b/Memoria/capitulos/5-Estudio_experimental/3_detalles_implementacion.tex index ffaeedd..b31fd94 100644 --- a/Memoria/capitulos/5-Estudio_experimental/3_detalles_implementacion.tex +++ b/Memoria/capitulos/5-Estudio_experimental/3_detalles_implementacion.tex @@ -20,7 +20,7 @@ \subsection{Implementación de redes neuronal} entrenamiento más eficiente las matrices $A, S$ se han escrito en una sola permitiendo así una evaluación más compacta. Puede encontrar la implementación -en \href{https://github.com/BlancaCC/TFG-Estudio-de-las-redes-neuronales/tree/main/Biblioteca-Redes-Neuronales/src}{nuestro repositorio}. +en \href{https://github.com/BlancaCC/TFG-Estudio-de-las-redes-neuronales/tree/main/OptimimizedNeuralNetwork.jl/src}{nuestro repositorio}. \subsubsection{Diseño de test} Para las redes neuronales generadas de manera aleatoria se debe de satisfacer que: \begin{itemize} @@ -135,7 +135,7 @@ \subsubsection{Ejemplo de uso} \subsection{Implementación del algoritmo de \textit{Forward propagation}} La evaluación de una red neuronal se realizará por medio de una función que recibe como parámetros un -tipo de dato \textit{red neuronal}. Puede encontrar la implementación en \href{https://github.com/BlancaCC/TFG-Estudio-de-las-redes-neuronales/tree/main/Biblioteca-Redes-Neuronales/src}{nuestro repositorio}. +tipo de dato \textit{red neuronal}. Puede encontrar la implementación en \href{https://github.com/BlancaCC/TFG-Estudio-de-las-redes-neuronales/tree/main/OptimimizedNeuralNetwork.jl/src}{nuestro repositorio}. \subsubsection{Diseño de los tests} De acorde al modelo \ref{definition:redes_neuronales_una_capa_oculta} @@ -221,7 +221,7 @@ \subsubsection{ Uso de los tipos de datos y \textit{ dispatch methods}} en Julia, tendremos una sola función que recoja a nuestro algoritmo de inicialización de pesos y diversas implementaciones adaptadas a la dimensión de entrada y salida. - Puede consultar la implementación en \href{https://github.com/BlancaCC/TFG-Estudio-de-las-redes-neuronales/tree/main/Biblioteca-Redes-Neuronales/src}{la carpeta \textit{weight-initializer-algorithm}} de nuestra biblioteca. + Puede consultar la implementación en \href{https://github.com/BlancaCC/TFG-Estudio-de-las-redes-neuronales/tree/main/OptimimizedNeuralNetwork.jl/src}{la carpeta \textit{weight-initializer-algorithm}} de nuestra biblioteca. Cabe mencionar que el caso de entrada y salida de dimensión uno ha sido el que más reducción de costo ha permitido, ya que en vez de realizar el diseño directo recogido en \ref{algo:algoritmo-iniciar-pesos} puede uno consultar diff --git a/Memoria/capitulos/Ejemplo-uso-biblioteca.ipynb b/Memoria/capitulos/Ejemplo-uso-biblioteca.ipynb new file mode 100644 index 0000000..19260cc --- /dev/null +++ b/Memoria/capitulos/Ejemplo-uso-biblioteca.ipynb @@ -0,0 +1,445 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Ejemplo de uso de la biblioteca" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING: replacing module OneLayerNeuralNetwork.\n", + "WARNING: replacing module ActivationFunctions.\n", + "WARNING: replacing module InitialNeuralNetwork.\n", + "WARNING: using OneLayerNeuralNetwork.FromMatrixNN in module Main conflicts with an existing identifier.\n", + "WARNING: using InitialNeuralNetwork.InitializeNodes in module Main conflicts with an existing identifier.\n" + ] + } + ], + "source": [ + "using Random\n", + "using Plots\n", + "include(\"../../OptimimizedNeuralNetwork.jl/src/one_layer_neuronal_network.jl\")\n", + "include(\"../../OptimimizedNeuralNetwork.jl/src/activation_functions.jl\")\n", + "include(\"../../OptimimizedNeuralNetwork.jl/src/weight-initializer-algorithm/main.jl\")\n", + "using .OneLayerNeuralNetwork\n", + "using .InitialNeuralNetwork" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "La matrix de pesos de las neuronas, W1, es:\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "3×3 Matrix{Float64}:\n", + " 0.861535 0.896356 0.850168\n", + " 0.739211 0.86563 0.733151\n", + " 0.448357 0.212908 0.162976" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "\n", + "La matrix de pesos de la salida, W2, es:\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "2×3 Matrix{Float64}:\n", + " 0.945416 0.505158 0.702458\n", + " 0.805432 0.67205 0.904258" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "entry_dimesion = 2\n", + "number_of_hidden_units = 3\n", + "output_dimension = 2\n", + "\n", + "OneLayerNeuralNetwork.RandomWeightsNN(\n", + " entry_dimesion,\n", + " number_of_hidden_units,\n", + " output_dimension\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "La matrix de pesos de las neuronas, W1, es:\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "3×4 Matrix{Int64}:\n", + " 3 4 1 1\n", + " 4 6 3 2\n", + " 1 1 1 3" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "\n", + "La matrix de pesos de la salida, W2, es:\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "2×3 Matrix{Int64}:\n", + " 1 2 3\n", + " 3 2 3" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "S = [1,2,3] \n", + "A = [3 4 1; 4 6 3; 1 1 1]\n", + "B = [1 2 3; 3 2 3]\n", + "OneLayerNeuralNetwork.FromMatrixNN(S, A, B)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2-element Vector{Int64}:\n", + " 86\n", + " 114" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Variables auxiliares \n", + "S = [1,2,3] \n", + "A = [3 4 1; 4 6 3; 1 1 1]\n", + "B = [1 2 3; 3 2 3]\n", + "v = [1,2,2]\n", + "h = OneLayerNeuralNetwork.FromMatrixNN(S, A, B)\n", + "# Ejemplo de evaluación h(v) \n", + "# con función de activación ReLU y ForwardPropagation \n", + "OneLayerNeuralNetwork.ForwardPropagation(h, ActivationFunctions.ReLU,v )" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "La red neuronal obtenida es :" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "La matrix de pesos de las neuronas, W1, es:\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "5×2 Matrix{Float64}:\n", + " 0.0 1.0\n", + " 1.33333 3.0\n", + " 1.33333 1.0\n", + " 1.33333 -1.0\n", + " 1.33333 -3.0" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "\n", + "La matrix de pesos de la salida, W2, es:\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "1×5 Matrix{Float64}:\n", + " 16.0855 -15.6038 -3.48169 3.40547 0.693147" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "image/png": "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", + "image/svg+xml": "\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Declaramos las variables que vamos a seguir\n", + "# Función ideal que queremos aproximar\n", + "f_regression(x)=(x<1) ? exp(-x)-4 : log(x)\n", + "data_set_size = 5 \n", + "n = data_set_size # Número de neuronas \n", + " # coincide con el tamaño del conjunto\n", + "#Partición homogénea del dominio [-3,3]\n", + "K_range = 3\n", + "X_train= Vector(LinRange(-K_range, K_range, n)) \n", + "Y_train = map(f_regression, X_train) # Imágenes de la partición\n", + "\n", + "M = 1\n", + "# USO DE LA FUNCIÓN DE INICIALIZACIÓN DE LOS PESOS\n", + "h = InitializeNodes(X_train, Y_train, n, M)\n", + "\n", + "# Imprimimos la red neuronal \n", + "display(Text(\"La red neuronal obtenida es :\"))\n", + "println(h)\n", + "\n", + "# Vamos a ver cómo aproxima los resultados \n", + "# Función que dado un punto lo evalúa con ForwardPropagation\n", + "# y la función de activación Rampa\n", + "evaluate(x)=OneLayerNeuralNetwork.ForwardPropagation(h,\n", + " ActivationFunctions.RampFunction,x)\n", + "\n", + "plot(x->evaluate([x])[1],\n", + " -K_range,K_range, \n", + " label=\"red neuronal n=$n\")\n", + "plot!(f_regression,\n", + " label=\"f ideal\",\n", + " title=\"Comparativa función ideal y red neuronal n=$n\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Julia 1.7.1", + "language": "julia", + "name": "julia-1.7" + }, + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.7.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Biblioteca-Redes-Neuronales/src/activation_functions.jl b/OptimimizedNeuralNetwork.jl/src/activation_functions.jl similarity index 100% rename from Biblioteca-Redes-Neuronales/src/activation_functions.jl rename to OptimimizedNeuralNetwork.jl/src/activation_functions.jl diff --git a/Biblioteca-Redes-Neuronales/src/forward-propagation.jl b/OptimimizedNeuralNetwork.jl/src/forward-propagation.jl similarity index 100% rename from Biblioteca-Redes-Neuronales/src/forward-propagation.jl rename to OptimimizedNeuralNetwork.jl/src/forward-propagation.jl diff --git a/Biblioteca-Redes-Neuronales/src/metric_estimation.jl b/OptimimizedNeuralNetwork.jl/src/metric_estimation.jl similarity index 100% rename from Biblioteca-Redes-Neuronales/src/metric_estimation.jl rename to OptimimizedNeuralNetwork.jl/src/metric_estimation.jl diff --git a/Biblioteca-Redes-Neuronales/src/one_layer_neuronal_network.jl b/OptimimizedNeuralNetwork.jl/src/one_layer_neuronal_network.jl similarity index 100% rename from Biblioteca-Redes-Neuronales/src/one_layer_neuronal_network.jl rename to OptimimizedNeuralNetwork.jl/src/one_layer_neuronal_network.jl diff --git a/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/main.jl b/OptimimizedNeuralNetwork.jl/src/weight-initializer-algorithm/main.jl similarity index 100% rename from Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/main.jl rename to OptimimizedNeuralNetwork.jl/src/weight-initializer-algorithm/main.jl diff --git a/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/multiple-input-multiple-output.jl b/OptimimizedNeuralNetwork.jl/src/weight-initializer-algorithm/multiple-input-multiple-output.jl similarity index 100% rename from Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/multiple-input-multiple-output.jl rename to OptimimizedNeuralNetwork.jl/src/weight-initializer-algorithm/multiple-input-multiple-output.jl diff --git a/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/multiple-input-single-ouput.jl b/OptimimizedNeuralNetwork.jl/src/weight-initializer-algorithm/multiple-input-single-ouput.jl similarity index 100% rename from Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/multiple-input-single-ouput.jl rename to OptimimizedNeuralNetwork.jl/src/weight-initializer-algorithm/multiple-input-single-ouput.jl diff --git a/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/single-input-single-output.jl b/OptimimizedNeuralNetwork.jl/src/weight-initializer-algorithm/single-input-single-output.jl similarity index 100% rename from Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/single-input-single-output.jl rename to OptimimizedNeuralNetwork.jl/src/weight-initializer-algorithm/single-input-single-output.jl diff --git a/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/utils.jl b/OptimimizedNeuralNetwork.jl/src/weight-initializer-algorithm/utils.jl similarity index 100% rename from Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/utils.jl rename to OptimimizedNeuralNetwork.jl/src/weight-initializer-algorithm/utils.jl diff --git a/Biblioteca-Redes-Neuronales/test/RUN_ALL_TEST.jl b/OptimimizedNeuralNetwork.jl/test/RUN_ALL_TEST.jl similarity index 100% rename from Biblioteca-Redes-Neuronales/test/RUN_ALL_TEST.jl rename to OptimimizedNeuralNetwork.jl/test/RUN_ALL_TEST.jl diff --git a/Biblioteca-Redes-Neuronales/test/activation_functions.test.jl b/OptimimizedNeuralNetwork.jl/test/activation_functions.test.jl similarity index 100% rename from Biblioteca-Redes-Neuronales/test/activation_functions.test.jl rename to OptimimizedNeuralNetwork.jl/test/activation_functions.test.jl diff --git a/Biblioteca-Redes-Neuronales/test/forward_propagation.test.jl b/OptimimizedNeuralNetwork.jl/test/forward_propagation.test.jl similarity index 100% rename from Biblioteca-Redes-Neuronales/test/forward_propagation.test.jl rename to OptimimizedNeuralNetwork.jl/test/forward_propagation.test.jl diff --git a/Biblioteca-Redes-Neuronales/test/metric_estimation.test.jl b/OptimimizedNeuralNetwork.jl/test/metric_estimation.test.jl similarity index 100% rename from Biblioteca-Redes-Neuronales/test/metric_estimation.test.jl rename to OptimimizedNeuralNetwork.jl/test/metric_estimation.test.jl diff --git a/Biblioteca-Redes-Neuronales/test/one_layer_neural_network.test.jl b/OptimimizedNeuralNetwork.jl/test/one_layer_neural_network.test.jl similarity index 100% rename from Biblioteca-Redes-Neuronales/test/one_layer_neural_network.test.jl rename to OptimimizedNeuralNetwork.jl/test/one_layer_neural_network.test.jl diff --git a/Biblioteca-Redes-Neuronales/test/weight-inizializer-algorithm/main.test.jl b/OptimimizedNeuralNetwork.jl/test/weight-inizializer-algorithm/main.test.jl similarity index 100% rename from Biblioteca-Redes-Neuronales/test/weight-inizializer-algorithm/main.test.jl rename to OptimimizedNeuralNetwork.jl/test/weight-inizializer-algorithm/main.test.jl diff --git a/Biblioteca-Redes-Neuronales/test/weight-inizializer-algorithm/multiple-input-multiple-output.test.jl b/OptimimizedNeuralNetwork.jl/test/weight-inizializer-algorithm/multiple-input-multiple-output.test.jl similarity index 100% rename from Biblioteca-Redes-Neuronales/test/weight-inizializer-algorithm/multiple-input-multiple-output.test.jl rename to OptimimizedNeuralNetwork.jl/test/weight-inizializer-algorithm/multiple-input-multiple-output.test.jl diff --git a/Biblioteca-Redes-Neuronales/test/weight-inizializer-algorithm/multiple-input-single-output.test.jl b/OptimimizedNeuralNetwork.jl/test/weight-inizializer-algorithm/multiple-input-single-output.test.jl similarity index 100% rename from Biblioteca-Redes-Neuronales/test/weight-inizializer-algorithm/multiple-input-single-output.test.jl rename to OptimimizedNeuralNetwork.jl/test/weight-inizializer-algorithm/multiple-input-single-output.test.jl diff --git a/Biblioteca-Redes-Neuronales/test/weight-inizializer-algorithm/single-input-single-output.test.jl b/OptimimizedNeuralNetwork.jl/test/weight-inizializer-algorithm/single-input-single-output.test.jl similarity index 100% rename from Biblioteca-Redes-Neuronales/test/weight-inizializer-algorithm/single-input-single-output.test.jl rename to OptimimizedNeuralNetwork.jl/test/weight-inizializer-algorithm/single-input-single-output.test.jl From 329a326f2050e5db04aeabd550032e76a25a1fc9 Mon Sep 17 00:00:00 2001 From: Blanca Date: Sat, 11 Jun 2022 13:01:33 +0200 Subject: [PATCH 38/76] =?UTF-8?q?Reorganiza=20m=C3=B3dulo=20y=20pasa=20tes?= =?UTF-8?q?t=20#117?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/personal-dictionary.txt | 4 +- .../0_experimento_sintetico.jl | 16 +- .../1_experimento_sintetico_heterogeneo.jl | 18 +- .../2_air_self_noise.jl | 24 +- .../3_detalles_implementacion.tex | 16 +- .../capitulos/Ejemplo-uso-biblioteca.ipynb | 513 +++++++----------- .../src/OptimizedNeuronalNetwork.jl | 10 + .../src/activation_functions.jl | 6 +- ...-propagation.jl => forward_propagation.jl} | 5 +- .../src/metric_estimation.jl | 14 +- .../src/one_layer_neuronal_network.jl | 5 - .../multiple-input-multiple-output.jl | 9 +- .../multiple-input-single-ouput.jl | 6 +- .../single-input-single-output.jl | 5 +- ...ain.jl => weight-initializer-algorithm.jl} | 6 - .../test/RUN_ALL_TEST.jl | 7 +- .../test/activation_functions.test.jl | 3 - .../test/forward_propagation.test.jl | 40 +- .../test/metric_estimation.test.jl | 3 +- .../test/one_layer_neural_network.test.jl | 8 +- .../weight-inizializer-algorithm/main.test.jl | 5 - .../multiple-input-multiple-output.test.jl | 6 +- .../multiple-input-single-output.test.jl | 10 +- .../single-input-single-output.test.jl | 10 +- 24 files changed, 293 insertions(+), 456 deletions(-) create mode 100644 OptimimizedNeuralNetwork.jl/src/OptimizedNeuronalNetwork.jl rename OptimimizedNeuralNetwork.jl/src/{forward-propagation.jl => forward_propagation.jl} (68%) rename OptimimizedNeuralNetwork.jl/src/weight-initializer-algorithm/{main.jl => weight-initializer-algorithm.jl} (78%) diff --git a/.github/workflows/personal-dictionary.txt b/.github/workflows/personal-dictionary.txt index 0ea2d76..d2685c9 100644 --- a/.github/workflows/personal-dictionary.txt +++ b/.github/workflows/personal-dictionary.txt @@ -20,7 +20,7 @@ FSum Factorizando Feedforward Fn -ForwardPropagation +forward_propagation FromMatrixNN Funtores GN @@ -34,7 +34,7 @@ HardTanh Hardtanh Hardtanh Hornik -InitializeNodes +nn_from_data IntervaloCentral Isoperimetry Iésima diff --git a/Experimentos/inicializacion-pesos-red-neuronal/0_experimento_sintetico.jl b/Experimentos/inicializacion-pesos-red-neuronal/0_experimento_sintetico.jl index 6249dd1..8b65ce2 100644 --- a/Experimentos/inicializacion-pesos-red-neuronal/0_experimento_sintetico.jl +++ b/Experimentos/inicializacion-pesos-red-neuronal/0_experimento_sintetico.jl @@ -10,14 +10,8 @@ config = TOML.parsefile(FICHERO_CONFIGURACION)["visualizacion-inicializacion-pes img_path = config["DIRECTORIO_IMAGENES"] Random.seed!(1) -include("../../OptimimizedNeuralNetwork.jl/src/weight-initializer-algorithm/main.jl") -include("../../OptimimizedNeuralNetwork.jl/src/one_layer_neuronal_network.jl") -include("../../OptimimizedNeuralNetwork.jl/src/metric_estimation.jl") -include("../../OptimimizedNeuralNetwork.jl/src/activation_functions.jl") -include("../../OptimimizedNeuralNetwork.jl/src/metric_estimation.jl") -using .InitialNeuralNetwork -using .OneLayerNeuralNetwork -using .ActivationFunctions +include("../../OptimimizedNeuralNetwork.jl/src/OptimizedNeuronalNetwork.jl") +using .OptimimizedNeuralNetwork M = 1 K_range = 3 @@ -30,10 +24,10 @@ for (data_set_size,n) in zip([3,4,5, 8,15,23,51,73,100, 103],[2,3,5,7,10,20,51,7 X_train= Vector(LinRange(-K_range, K_range, n)) Y_train = map(f_regression, X_train) # Cálculo de la red neuronal con pesos inicializados - h = InitializeNodes(X_train, Y_train, n, M) + h = nn_from_data(X_train, Y_train, n, M) # Función de evaluación por forward propagation - evaluate(x)=OneLayerNeuralNetwork.ForwardPropagation(h, - ActivationFunctions.RampFunction,x) + evaluate(x)=forward_propagation(h, + RampFunction,x) # Visualización interval = [-K_range,K_range] file_name = "f_ideal_y_rn_con_$(n)_neuronas" diff --git a/Experimentos/inicializacion-pesos-red-neuronal/1_experimento_sintetico_heterogeneo.jl b/Experimentos/inicializacion-pesos-red-neuronal/1_experimento_sintetico_heterogeneo.jl index af8851b..111dd5a 100644 --- a/Experimentos/inicializacion-pesos-red-neuronal/1_experimento_sintetico_heterogeneo.jl +++ b/Experimentos/inicializacion-pesos-red-neuronal/1_experimento_sintetico_heterogeneo.jl @@ -11,17 +11,11 @@ img_path = config["DIRECTORIO_IMAGENES"] NOMBRE_FICHERO_RESULTADOS = config["NOMBRE_FICHERO_RESULTADOS"] # número de particiones numero_particiones = config["NUMERO_PARTICIONES"] +include("../../OptimimizedNeuralNetwork.jl/src/OptimizedNeuronalNetwork.jl") +using .OptimimizedNeuralNetwork Random.seed!(1) -include("../../OptimimizedNeuralNetwork.jl/src/weight-initializer-algorithm/main.jl") -include("../../OptimimizedNeuralNetwork.jl/src/one_layer_neuronal_network.jl") -include("../../OptimimizedNeuralNetwork.jl/src/metric_estimation.jl") -include("../../OptimimizedNeuralNetwork.jl/src/activation_functions.jl") -include("../../OptimimizedNeuralNetwork.jl/src/metric_estimation.jl") -using .InitialNeuralNetwork -using .OneLayerNeuralNetwork -using .ActivationFunctions M = 1 # Conjunto de datos sobre los que se van a comparar @@ -40,10 +34,10 @@ for n in [3,5,7,15,20,40,60] X_train = shuffle(X_train) Y_train = map(f_regression, X_train) # Cálculo de la red neuronal con pesos inicializados - h = InitializeNodes(X_train, Y_train, n, M) + h = nn_from_data(X_train, Y_train, n, M) # Función de evaluación por forward propagation - evaluate(x)=OneLayerNeuralNetwork.ForwardPropagation(h, - ActivationFunctions.RampFunction,x) + evaluate(x)=forward_propagation(h, + RampFunction,x) # Visualización interval = [limite_inf, limite_sup] @@ -58,6 +52,6 @@ for n in [3,5,7,15,20,40,60] ) png(img_path*file_name) - media, mediana, desv, cor = Metric.Regression(X_train, Y_train,x->evaluate([x])[1]) + media, mediana, desv, cor = regression(X_train, Y_train,x->evaluate([x])[1]) println(media, mediana, desv, cor) end \ No newline at end of file diff --git a/Experimentos/inicializacion-pesos-red-neuronal/2_air_self_noise.jl b/Experimentos/inicializacion-pesos-red-neuronal/2_air_self_noise.jl index 0248871..47d5d2b 100644 --- a/Experimentos/inicializacion-pesos-red-neuronal/2_air_self_noise.jl +++ b/Experimentos/inicializacion-pesos-red-neuronal/2_air_self_noise.jl @@ -13,14 +13,8 @@ config = TOML.parsefile(FICHERO_CONFIGURACION)["air-self-noise"] FILE = config["FICHERO_DATOS"] Random.seed!(1) -include("../../OptimimizedNeuralNetwork.jl/src/weight-initializer-algorithm/main.jl") -include("../../OptimimizedNeuralNetwork.jl/src/one_layer_neuronal_network.jl") -include("../../OptimimizedNeuralNetwork.jl/src/metric_estimation.jl") -include("../../OptimimizedNeuralNetwork.jl/src/activation_functions.jl") - -using .InitialNeuralNetwork -using .OneLayerNeuralNetwork -using .ActivationFunctions +include("../../OptimimizedNeuralNetwork.jl/src/OptimizedNeuronalNetwork.jl") +using .OptimimizedNeuralNetwork #------------------------------------------------------ # Data preprocesing @@ -71,21 +65,21 @@ println("El conjunto de entrenamiento $(index)") # Ajuste con comienzo de datos inicial println("Resultados con h aleatoria") h_random = RandomWeightsNN(input_dimension, n, output_dimension) -evaluate_random(x) = OneLayerNeuralNetwork.ForwardPropagation(h_random, - ActivationFunctions.RampFunction,x +evaluate_random(x) = forward_propagation(h_random, + RampFunction,x ) -println(Metric.Regression(X_test_normalized, Y_test_normalized, evaluate_random)) +println(regression(X_test_normalized, Y_test_normalized, evaluate_random)) # Experimentamos con nuestro algoritmo M = 1 -h_initialized = InitializeNodes(X_train_normalized, Y_train_normalized, n, M) +h_initialized = nn_from_data(X_train_normalized, Y_train_normalized, n, M) # Función de evaluación por forward propagation -evaluate_initialized(x) = OneLayerNeuralNetwork.ForwardPropagation(h_initialized, - ActivationFunctions.RampFunction,x +evaluate_initialized(x) = forward_propagation(h_initialized, + RampFunction,x ) println("Resultados con h ajustada") -println(Metric.Regression(X_test_normalized, Y_test_normalized, evaluate_initialized)) +println(regression(X_test_normalized, Y_test_normalized, evaluate_initialized)) end """ 6×7 DataFrame diff --git a/Memoria/capitulos/5-Estudio_experimental/3_detalles_implementacion.tex b/Memoria/capitulos/5-Estudio_experimental/3_detalles_implementacion.tex index b31fd94..b476364 100644 --- a/Memoria/capitulos/5-Estudio_experimental/3_detalles_implementacion.tex +++ b/Memoria/capitulos/5-Estudio_experimental/3_detalles_implementacion.tex @@ -56,7 +56,7 @@ \subsubsection{Ejemplo de uso} number_of_hidden_units = 3 output_dimension = 2 # Creación de la red neuronal - OneLayerNeuralNetwork.RandomWeightsNN( + RandomWeightsNN( entry_dimension, number_of_hidden_units, output_dimension @@ -103,7 +103,7 @@ \subsubsection{Ejemplo de uso} S = [1,2,3] # Matriz de sesgos A = [3 4 1; 4 6 3; 1 1 1] # Matriz de pesos entre entrada y capa oculta B = [1 2 3; 3 2 3] # Matriz de pesos entre capa oculta y salida - OneLayerNeuralNetwork.FromMatrixNN(S, A, B) + FromMatrixNN(S, A, B) \end{minted} \end{minipage} @@ -174,10 +174,10 @@ \subsubsection{Ejemplo de uso} # Variables auxiliares # S,A,B son las matrices del ejemplo anterior v = [1,2,2] - h = OneLayerNeuralNetwork.FromMatrixNN(S, A, B) + h = FromMatrixNN(S, A, B) # Ejemplo de evaluación h(v) # con función de activación ReLU y ForwardPropagation - OneLayerNeuralNetwork.ForwardPropagation(h, ActivationFunctions.ReLU,v ) + ForwardPropagation(h, ReLU,v ) \end{minted} \end{minipage} @@ -325,7 +325,7 @@ \subsection{Diseño de los tests} \subsection{Ejemplo de uso} Para crear la red neuronal bastará con llamar a la función \begin{verbatim} - InitializeNodes(X_train, Y_train, n, M) + nn_from_data(X_train, Y_train, n, M) \end{verbatim} con $n$ el número de neuronas y $M$ una constante elegida según los criterios ya mencionados en \ref{table:M-activation-function} y \ref{table:M-activation-function-2}. @@ -353,7 +353,7 @@ \subsection{Ejemplo de uso} M = 1 # USO DE LA FUNCIÓN DE INICIALIZACIÓN DE LOS PESOS - h = InitializeNodes(X_train, Y_train, n, M) + h = nn_from_data(X_train, Y_train, n, M) \end{minted} \end{minipage} @@ -374,8 +374,8 @@ \subsection{Ejemplo de uso} # Vamos a ver cómo aproxima los resultados # Función que dado un punto lo evalúa con ForwardPropagation # y la función de activación Rampa - evaluate(x)=OneLayerNeuralNetwork.ForwardPropagation(h, - ActivationFunctions.RampFunction,x) + evaluate(x)=ForwardPropagation(h, + RampFunction,x) # Mostramos gráfica comparativa entre el resultado y la función ideal diff --git a/Memoria/capitulos/Ejemplo-uso-biblioteca.ipynb b/Memoria/capitulos/Ejemplo-uso-biblioteca.ipynb index 19260cc..4e902af 100644 --- a/Memoria/capitulos/Ejemplo-uso-biblioteca.ipynb +++ b/Memoria/capitulos/Ejemplo-uso-biblioteca.ipynb @@ -9,84 +9,95 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 1, "metadata": {}, "outputs": [ { - "name": "stderr", - "output_type": "stream", - "text": [ - "WARNING: replacing module OneLayerNeuralNetwork.\n", - "WARNING: replacing module ActivationFunctions.\n", - "WARNING: replacing module InitialNeuralNetwork.\n", - "WARNING: using OneLayerNeuralNetwork.FromMatrixNN in module Main conflicts with an existing identifier.\n", - "WARNING: using InitialNeuralNetwork.InitializeNodes in module Main conflicts with an existing identifier.\n" + "ename": "UndefVarError", + "evalue": "UndefVarError: OptimimizedNeuralNetwork not defined", + "output_type": "error", + "traceback": [ + "UndefVarError: OptimimizedNeuralNetwork not defined\n", + "\n", + "Stacktrace:\n", + " [1] eval\n", + " @ ./boot.jl:373 [inlined]\n", + " [2] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)\n", + " @ Base ./loading.jl:1196\n", + " [3] #invokelatest#2\n", + " @ ./essentials.jl:716 [inlined]\n", + " [4] invokelatest\n", + " @ ./essentials.jl:714 [inlined]\n", + " [5] (::VSCodeServer.var\"#164#165\"{VSCodeServer.NotebookRunCellArguments, String})()\n", + " @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/packages/VSCodeServer/src/serve_notebook.jl:19\n", + " [6] withpath(f::VSCodeServer.var\"#164#165\"{VSCodeServer.NotebookRunCellArguments, String}, path::String)\n", + " @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/packages/VSCodeServer/src/repl.jl:184\n", + " [7] notebook_runcell_request(conn::VSCodeServer.JSONRPC.JSONRPCEndpoint{Base.PipeEndpoint, Base.PipeEndpoint}, params::VSCodeServer.NotebookRunCellArguments)\n", + " @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/packages/VSCodeServer/src/serve_notebook.jl:13\n", + " [8] dispatch_msg(x::VSCodeServer.JSONRPC.JSONRPCEndpoint{Base.PipeEndpoint, Base.PipeEndpoint}, dispatcher::VSCodeServer.JSONRPC.MsgDispatcher, msg::Dict{String, Any})\n", + " @ VSCodeServer.JSONRPC ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/packages/JSONRPC/src/typed.jl:67\n", + " [9] serve_notebook(pipename::String, outputchannel_logger::Base.CoreLogging.SimpleLogger; crashreporting_pipename::String)\n", + " @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/packages/VSCodeServer/src/serve_notebook.jl:136\n", + " [10] top-level scope\n", + " @ ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/notebook/notebook.jl:32\n", + " [11] include(mod::Module, _path::String)\n", + " @ Base ./Base.jl:418\n", + " [12] exec_options(opts::Base.JLOptions)\n", + " @ Base ./client.jl:292\n", + " [13] _start()\n", + " @ Base ./client.jl:495" ] } ], "source": [ "using Random\n", "using Plots\n", - "include(\"../../OptimimizedNeuralNetwork.jl/src/one_layer_neuronal_network.jl\")\n", - "include(\"../../OptimimizedNeuralNetwork.jl/src/activation_functions.jl\")\n", - "include(\"../../OptimimizedNeuralNetwork.jl/src/weight-initializer-algorithm/main.jl\")\n", - "using .OneLayerNeuralNetwork\n", - "using .InitialNeuralNetwork" + "include(\"../../OptimimizedNeuralNetwork.jl/src/OptimizedNeuronalNetwork.jl\")\n", + "using .OptimimizedNeuralNetwork" ] }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 2, "metadata": {}, "outputs": [ { - "data": { - "text/plain": [ - "La matrix de pesos de las neuronas, W1, es:\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "3×3 Matrix{Float64}:\n", - " 0.861535 0.896356 0.850168\n", - " 0.739211 0.86563 0.733151\n", - " 0.448357 0.212908 0.162976" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "\n", - "La matrix de pesos de la salida, W2, es:\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "2×3 Matrix{Float64}:\n", - " 0.945416 0.505158 0.702458\n", - " 0.805432 0.67205 0.904258" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [] - }, - "metadata": {}, - "output_type": "display_data" + "ename": "ErrorException", + "evalue": "syntax: invalid identifier name \".\"", + "output_type": "error", + "traceback": [ + "syntax: invalid identifier name \".\"\n", + "\n", + "Stacktrace:\n", + " [1] top-level scope\n", + " @ ~/repositorios/TFG-Estudio-de-las-redes-neuronales/Memoria/capitulos/Ejemplo-uso-biblioteca.ipynb:5\n", + " [2] eval\n", + " @ ./boot.jl:373 [inlined]\n", + " [3] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)\n", + " @ Base ./loading.jl:1196\n", + " [4] #invokelatest#2\n", + " @ ./essentials.jl:716 [inlined]\n", + " [5] invokelatest\n", + " @ ./essentials.jl:714 [inlined]\n", + " [6] (::VSCodeServer.var\"#164#165\"{VSCodeServer.NotebookRunCellArguments, String})()\n", + " @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/packages/VSCodeServer/src/serve_notebook.jl:19\n", + " [7] withpath(f::VSCodeServer.var\"#164#165\"{VSCodeServer.NotebookRunCellArguments, String}, path::String)\n", + " @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/packages/VSCodeServer/src/repl.jl:184\n", + " [8] notebook_runcell_request(conn::VSCodeServer.JSONRPC.JSONRPCEndpoint{Base.PipeEndpoint, Base.PipeEndpoint}, params::VSCodeServer.NotebookRunCellArguments)\n", + " @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/packages/VSCodeServer/src/serve_notebook.jl:13\n", + " [9] dispatch_msg(x::VSCodeServer.JSONRPC.JSONRPCEndpoint{Base.PipeEndpoint, Base.PipeEndpoint}, dispatcher::VSCodeServer.JSONRPC.MsgDispatcher, msg::Dict{String, Any})\n", + " @ VSCodeServer.JSONRPC ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/packages/JSONRPC/src/typed.jl:67\n", + " [10] serve_notebook(pipename::String, outputchannel_logger::Base.CoreLogging.SimpleLogger; crashreporting_pipename::String)\n", + " @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/packages/VSCodeServer/src/serve_notebook.jl:136\n", + " [11] top-level scope\n", + " @ ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/notebook/notebook.jl:32\n", + " [12] include(mod::Module, _path::String)\n", + " @ Base ./Base.jl:418\n", + " [13] exec_options(opts::Base.JLOptions)\n", + " @ Base ./client.jl:292\n", + " [14] _start()\n", + " @ Base ./client.jl:495" + ] } ], "source": [ @@ -94,7 +105,7 @@ "number_of_hidden_units = 3\n", "output_dimension = 2\n", "\n", - "OneLayerNeuralNetwork.RandomWeightsNN(\n", + ".RandomWeightsNN(\n", " entry_dimesion,\n", " number_of_hidden_units,\n", " output_dimension\n", @@ -103,81 +114,97 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 3, "metadata": {}, "outputs": [ { - "data": { - "text/plain": [ - "La matrix de pesos de las neuronas, W1, es:\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "3×4 Matrix{Int64}:\n", - " 3 4 1 1\n", - " 4 6 3 2\n", - " 1 1 1 3" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "\n", - "La matrix de pesos de la salida, W2, es:\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "2×3 Matrix{Int64}:\n", - " 1 2 3\n", - " 3 2 3" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [] - }, - "metadata": {}, - "output_type": "display_data" + "ename": "ErrorException", + "evalue": "syntax: invalid identifier name \".\"", + "output_type": "error", + "traceback": [ + "syntax: invalid identifier name \".\"\n", + "\n", + "Stacktrace:\n", + " [1] top-level scope\n", + " @ ~/repositorios/TFG-Estudio-de-las-redes-neuronales/Memoria/capitulos/Ejemplo-uso-biblioteca.ipynb:4\n", + " [2] eval\n", + " @ ./boot.jl:373 [inlined]\n", + " [3] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)\n", + " @ Base ./loading.jl:1196\n", + " [4] #invokelatest#2\n", + " @ ./essentials.jl:716 [inlined]\n", + " [5] invokelatest\n", + " @ ./essentials.jl:714 [inlined]\n", + " [6] (::VSCodeServer.var\"#164#165\"{VSCodeServer.NotebookRunCellArguments, String})()\n", + " @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/packages/VSCodeServer/src/serve_notebook.jl:19\n", + " [7] withpath(f::VSCodeServer.var\"#164#165\"{VSCodeServer.NotebookRunCellArguments, String}, path::String)\n", + " @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/packages/VSCodeServer/src/repl.jl:184\n", + " [8] notebook_runcell_request(conn::VSCodeServer.JSONRPC.JSONRPCEndpoint{Base.PipeEndpoint, Base.PipeEndpoint}, params::VSCodeServer.NotebookRunCellArguments)\n", + " @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/packages/VSCodeServer/src/serve_notebook.jl:13\n", + " [9] dispatch_msg(x::VSCodeServer.JSONRPC.JSONRPCEndpoint{Base.PipeEndpoint, Base.PipeEndpoint}, dispatcher::VSCodeServer.JSONRPC.MsgDispatcher, msg::Dict{String, Any})\n", + " @ VSCodeServer.JSONRPC ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/packages/JSONRPC/src/typed.jl:67\n", + " [10] serve_notebook(pipename::String, outputchannel_logger::Base.CoreLogging.SimpleLogger; crashreporting_pipename::String)\n", + " @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/packages/VSCodeServer/src/serve_notebook.jl:136\n", + " [11] top-level scope\n", + " @ ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/notebook/notebook.jl:32\n", + " [12] include(mod::Module, _path::String)\n", + " @ Base ./Base.jl:418\n", + " [13] exec_options(opts::Base.JLOptions)\n", + " @ Base ./client.jl:292\n", + " [14] _start()\n", + " @ Base ./client.jl:495" + ] } ], "source": [ "S = [1,2,3] \n", "A = [3 4 1; 4 6 3; 1 1 1]\n", "B = [1 2 3; 3 2 3]\n", - "OneLayerNeuralNetwork.FromMatrixNN(S, A, B)" + ".FromMatrixNN(S, A, B)" ] }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 4, "metadata": {}, "outputs": [ { - "data": { - "text/plain": [ - "2-element Vector{Int64}:\n", - " 86\n", - " 114" - ] - }, - "metadata": {}, - "output_type": "display_data" + "ename": "ErrorException", + "evalue": "syntax: invalid identifier name \".\"", + "output_type": "error", + "traceback": [ + "syntax: invalid identifier name \".\"\n", + "\n", + "Stacktrace:\n", + " [1] top-level scope\n", + " @ ~/repositorios/TFG-Estudio-de-las-redes-neuronales/Memoria/capitulos/Ejemplo-uso-biblioteca.ipynb:6\n", + " [2] eval\n", + " @ ./boot.jl:373 [inlined]\n", + " [3] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)\n", + " @ Base ./loading.jl:1196\n", + " [4] #invokelatest#2\n", + " @ ./essentials.jl:716 [inlined]\n", + " [5] invokelatest\n", + " @ ./essentials.jl:714 [inlined]\n", + " [6] (::VSCodeServer.var\"#164#165\"{VSCodeServer.NotebookRunCellArguments, String})()\n", + " @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/packages/VSCodeServer/src/serve_notebook.jl:19\n", + " [7] withpath(f::VSCodeServer.var\"#164#165\"{VSCodeServer.NotebookRunCellArguments, String}, path::String)\n", + " @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/packages/VSCodeServer/src/repl.jl:184\n", + " [8] notebook_runcell_request(conn::VSCodeServer.JSONRPC.JSONRPCEndpoint{Base.PipeEndpoint, Base.PipeEndpoint}, params::VSCodeServer.NotebookRunCellArguments)\n", + " @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/packages/VSCodeServer/src/serve_notebook.jl:13\n", + " [9] dispatch_msg(x::VSCodeServer.JSONRPC.JSONRPCEndpoint{Base.PipeEndpoint, Base.PipeEndpoint}, dispatcher::VSCodeServer.JSONRPC.MsgDispatcher, msg::Dict{String, Any})\n", + " @ VSCodeServer.JSONRPC ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/packages/JSONRPC/src/typed.jl:67\n", + " [10] serve_notebook(pipename::String, outputchannel_logger::Base.CoreLogging.SimpleLogger; crashreporting_pipename::String)\n", + " @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/packages/VSCodeServer/src/serve_notebook.jl:136\n", + " [11] top-level scope\n", + " @ ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/notebook/notebook.jl:32\n", + " [12] include(mod::Module, _path::String)\n", + " @ Base ./Base.jl:418\n", + " [13] exec_options(opts::Base.JLOptions)\n", + " @ Base ./client.jl:292\n", + " [14] _start()\n", + " @ Base ./client.jl:495" + ] } ], "source": [ @@ -186,210 +213,54 @@ "A = [3 4 1; 4 6 3; 1 1 1]\n", "B = [1 2 3; 3 2 3]\n", "v = [1,2,2]\n", - "h = OneLayerNeuralNetwork.FromMatrixNN(S, A, B)\n", + "h = .FromMatrixNN(S, A, B)\n", "# Ejemplo de evaluación h(v) \n", - "# con función de activación ReLU y ForwardPropagation \n", - "OneLayerNeuralNetwork.ForwardPropagation(h, ActivationFunctions.ReLU,v )" + "# con función de activación ReLU y forward_propagation \n", + ".forward_propagation(h, ReLU,v )" ] }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 5, "metadata": {}, "outputs": [ { - "data": { - "text/plain": [ - "La red neuronal obtenida es :" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "La matrix de pesos de las neuronas, W1, es:\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "5×2 Matrix{Float64}:\n", - " 0.0 1.0\n", - " 1.33333 3.0\n", - " 1.33333 1.0\n", - " 1.33333 -1.0\n", - " 1.33333 -3.0" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "\n", - "La matrix de pesos de la salida, W2, es:\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "1×5 Matrix{Float64}:\n", - " 16.0855 -15.6038 -3.48169 3.40547 0.693147" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n" + "ename": "UndefVarError", + "evalue": "UndefVarError: nn_from_data not defined", + "output_type": "error", + "traceback": [ + "UndefVarError: nn_from_data not defined\n", + "\n", + "Stacktrace:\n", + " [1] top-level scope\n", + " @ ~/repositorios/TFG-Estudio-de-las-redes-neuronales/Memoria/capitulos/Ejemplo-uso-biblioteca.ipynb:14\n", + " [2] eval\n", + " @ ./boot.jl:373 [inlined]\n", + " [3] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)\n", + " @ Base ./loading.jl:1196\n", + " [4] #invokelatest#2\n", + " @ ./essentials.jl:716 [inlined]\n", + " [5] invokelatest\n", + " @ ./essentials.jl:714 [inlined]\n", + " [6] (::VSCodeServer.var\"#164#165\"{VSCodeServer.NotebookRunCellArguments, String})()\n", + " @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/packages/VSCodeServer/src/serve_notebook.jl:19\n", + " [7] withpath(f::VSCodeServer.var\"#164#165\"{VSCodeServer.NotebookRunCellArguments, String}, path::String)\n", + " @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/packages/VSCodeServer/src/repl.jl:184\n", + " [8] notebook_runcell_request(conn::VSCodeServer.JSONRPC.JSONRPCEndpoint{Base.PipeEndpoint, Base.PipeEndpoint}, params::VSCodeServer.NotebookRunCellArguments)\n", + " @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/packages/VSCodeServer/src/serve_notebook.jl:13\n", + " [9] dispatch_msg(x::VSCodeServer.JSONRPC.JSONRPCEndpoint{Base.PipeEndpoint, Base.PipeEndpoint}, dispatcher::VSCodeServer.JSONRPC.MsgDispatcher, msg::Dict{String, Any})\n", + " @ VSCodeServer.JSONRPC ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/packages/JSONRPC/src/typed.jl:67\n", + " [10] serve_notebook(pipename::String, outputchannel_logger::Base.CoreLogging.SimpleLogger; crashreporting_pipename::String)\n", + " @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/packages/VSCodeServer/src/serve_notebook.jl:136\n", + " [11] top-level scope\n", + " @ ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/notebook/notebook.jl:32\n", + " [12] include(mod::Module, _path::String)\n", + " @ Base ./Base.jl:418\n", + " [13] exec_options(opts::Base.JLOptions)\n", + " @ Base ./client.jl:292\n", + " [14] _start()\n", + " @ Base ./client.jl:495" ] - }, - { - "data": { - "image/png": "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", - "image/svg+xml": "\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {}, - "output_type": "display_data" } ], "source": [ @@ -406,17 +277,17 @@ "\n", "M = 1\n", "# USO DE LA FUNCIÓN DE INICIALIZACIÓN DE LOS PESOS\n", - "h = InitializeNodes(X_train, Y_train, n, M)\n", + "h = nn_from_data(X_train, Y_train, n, M)\n", "\n", "# Imprimimos la red neuronal \n", "display(Text(\"La red neuronal obtenida es :\"))\n", "println(h)\n", "\n", "# Vamos a ver cómo aproxima los resultados \n", - "# Función que dado un punto lo evalúa con ForwardPropagation\n", + "# Función que dado un punto lo evalúa con forward_propagation\n", "# y la función de activación Rampa\n", - "evaluate(x)=OneLayerNeuralNetwork.ForwardPropagation(h,\n", - " ActivationFunctions.RampFunction,x)\n", + "evaluate(x)=.forward_propagation(h,\n", + " RampFunction,x)\n", "\n", "plot(x->evaluate([x])[1],\n", " -K_range,K_range, \n", diff --git a/OptimimizedNeuralNetwork.jl/src/OptimizedNeuronalNetwork.jl b/OptimimizedNeuralNetwork.jl/src/OptimizedNeuronalNetwork.jl new file mode 100644 index 0000000..d73d70f --- /dev/null +++ b/OptimimizedNeuralNetwork.jl/src/OptimizedNeuronalNetwork.jl @@ -0,0 +1,10 @@ +#################################################### +# Library OptimizedNeuronalNetwork +#################################################### +module OptimizedNeuronalNetwork +include("activation_functions.jl") +include("one_layer_neuronal_network.jl") +include("forward_propagation.jl") +include("metric_estimation.jl") +include("weight-initializer-algorithm/weight-initializer-algorithm.jl") +end \ No newline at end of file diff --git a/OptimimizedNeuralNetwork.jl/src/activation_functions.jl b/OptimimizedNeuralNetwork.jl/src/activation_functions.jl index e19f254..060851e 100644 --- a/OptimimizedNeuralNetwork.jl/src/activation_functions.jl +++ b/OptimimizedNeuralNetwork.jl/src/activation_functions.jl @@ -1,5 +1,3 @@ -module ActivationFunctions - export CosineSquasher export HardTanh export @IndicatorFunction @@ -8,8 +6,6 @@ export RampFunction export ReLU export Sigmoid export @ThresholdFunction - - """ Threshold(polynomial, t) Return a Threshold Function defined by `polynomial`and `t`. @@ -90,5 +86,5 @@ Leaky ReLU macro LReLU(a::Real) return :( f(x::Real)=(x<0) ? $(esc(a))*x : x ) end -end #module end + diff --git a/OptimimizedNeuralNetwork.jl/src/forward-propagation.jl b/OptimimizedNeuralNetwork.jl/src/forward_propagation.jl similarity index 68% rename from OptimimizedNeuralNetwork.jl/src/forward-propagation.jl rename to OptimimizedNeuralNetwork.jl/src/forward_propagation.jl index 560d259..a27edce 100644 --- a/OptimimizedNeuralNetwork.jl/src/forward-propagation.jl +++ b/OptimimizedNeuralNetwork.jl/src/forward_propagation.jl @@ -2,11 +2,12 @@ # ALGORITMO FORWARD PROPAGATION # Algoritmo 3 descrito en la memoria. Capítulo 5. ###################################################### +export forward_propagation """ -ForwardPropagation (h::AbstractOneLayerNeuralNetwork, activation_function, x::Vector{Real}) +forward_propagation (h::AbstractOneLayerNeuralNetwork, activation_function, x::Vector{Real}) Only use an activation function """ -function ForwardPropagation(h,activation_function, x) +function forward_propagation(h,activation_function, x) x_aux = copy(x) s = h.W1 * push!(x_aux,1) ∑= map(activation_function,s) diff --git a/OptimimizedNeuralNetwork.jl/src/metric_estimation.jl b/OptimimizedNeuralNetwork.jl/src/metric_estimation.jl index a3c686b..fdd3a20 100644 --- a/OptimimizedNeuralNetwork.jl/src/metric_estimation.jl +++ b/OptimimizedNeuralNetwork.jl/src/metric_estimation.jl @@ -1,11 +1,9 @@ #################################################### # Función para tomar métricas #################################################### -module Metric - using Statistics using LinearAlgebra -export Regression +export regression """ Regression(X::Vector,Y,f) @@ -15,16 +13,14 @@ Para los puntos (X,Y) devuelve tupla con 3. Desviación típica del error 4. Coeficiente de correlación """ -function Regression(X::Vector,Y,f) +function regression(X::Vector,Y,f) f_x = map(f, X) diferences = map(norm,eachrow(Y .- f_x)) return mean(diferences), median(diferences), std(diferences), cor(Y, f_x) end -function Regression(X::Matrix,Y,f) + +function regression(X::Matrix,Y,f) f_x = map(x->f(x)[1], eachrow(X)) diferences = map(norm,eachrow(Y .- f_x)) return mean(diferences), median(diferences), std(diferences), cor(Y, f_x) -end - - -end \ No newline at end of file +end \ No newline at end of file diff --git a/OptimimizedNeuralNetwork.jl/src/one_layer_neuronal_network.jl b/OptimimizedNeuralNetwork.jl/src/one_layer_neuronal_network.jl index 62a1879..e83df1b 100644 --- a/OptimimizedNeuralNetwork.jl/src/one_layer_neuronal_network.jl +++ b/OptimimizedNeuralNetwork.jl/src/one_layer_neuronal_network.jl @@ -2,13 +2,9 @@ # ONE LAYER NEURONAL NETWORK TYPE # and evaluation with forward propagation ######################################################## -module OneLayerNeuralNetwork -include("forward-propagation.jl") # Constructores export RandomWeightsNN export FromMatrixNN -# Evaluación por algoritmo de ForwardPropagation -export ForwardPropagation # Tipo export AbstractOneLayerNeuralNetwork @@ -99,4 +95,3 @@ function Base.show(io::IO, h ::AbstractOneLayerNeuralNetwork) display(h.W2) end -end # end OneLayerNeuralNetwork \ No newline at end of file diff --git a/OptimimizedNeuralNetwork.jl/src/weight-initializer-algorithm/multiple-input-multiple-output.jl b/OptimimizedNeuralNetwork.jl/src/weight-initializer-algorithm/multiple-input-multiple-output.jl index c4c53da..47e441e 100644 --- a/OptimimizedNeuralNetwork.jl/src/weight-initializer-algorithm/multiple-input-multiple-output.jl +++ b/OptimimizedNeuralNetwork.jl/src/weight-initializer-algorithm/multiple-input-multiple-output.jl @@ -3,8 +3,9 @@ # Basado en capítulo 7, algoritmo 6 # CASO ENTRADA REAL de dimensión d > 1 SALIDA REAL de dimensión s>1 ##################################################################### +export nn_from_data """ - InitializeNodes(X_train,Y_train, n, M=10) + nn_from_data(X_train,Y_train, n, M=10) Devuelve una red neuronal con los pesos ya inicializados de acorte a los conjuntos de entrenamiento. `n` es el número de neuronas en la capa oculta. @@ -17,14 +18,14 @@ por lo visto en teoría M=10 funciona para todas las """ -function InitializeNodes(X_train::Matrix,Y_train::Matrix, n::Int, M=10)::AbstractOneLayerNeuralNetwork +function nn_from_data(X_train::Matrix,Y_train::Matrix, n::Int, M=10)::AbstractOneLayerNeuralNetwork (_ , entry_dimension) = size(X_train) (_ , output_dimension) = size(Y_train) # inicializamos p p = rand(Float32, entry_dimension) - index :: Int8 = 1 - tam :: Int8= 0 + index :: Int = 1 + tam :: Int = 0 nodes = [Vector{Float64}(undef, output_dimension) for _ in 1:n] y_values = [Vector{Float64}(undef, output_dimension) for _ in 1:n] my_keys = zeros(Float64, n) diff --git a/OptimimizedNeuralNetwork.jl/src/weight-initializer-algorithm/multiple-input-single-ouput.jl b/OptimimizedNeuralNetwork.jl/src/weight-initializer-algorithm/multiple-input-single-ouput.jl index 0d37f13..35c8669 100644 --- a/OptimimizedNeuralNetwork.jl/src/weight-initializer-algorithm/multiple-input-single-ouput.jl +++ b/OptimimizedNeuralNetwork.jl/src/weight-initializer-algorithm/multiple-input-single-ouput.jl @@ -3,9 +3,9 @@ # Basado en capítulo 7, algoritmo 6 # CASO ENTRADA REAL de dimensión d > 1 SALIDA REAL (una dimensión) ##################################################################### - +export nn_from_data """ - InitializeNodes(X_train::Matrix,Y_train::Vector, n::Int, M=10)::AbstractOneLayerNeuralNetwork + nn_from_data(X_train::Matrix,Y_train::Vector, n::Int, M=10)::AbstractOneLayerNeuralNetwork Devuelve una red neuronal con los pesos ya inicializados de acorte a los conjuntos de entrenamiento. `n` es el número de neuronas en la capa oculta. @@ -18,7 +18,7 @@ por lo visto en teoría M=10 funciona para todas las """ -function InitializeNodes(X_train::Matrix,Y_train::Vector{Float64}, n::Int, M=10)::AbstractOneLayerNeuralNetwork +function nn_from_data(X_train::Matrix,Y_train::Vector{Float64}, n::Int, M=10)::AbstractOneLayerNeuralNetwork (_ , entry_dimension) = size(X_train) output_dimension = 1 # inicializamos p diff --git a/OptimimizedNeuralNetwork.jl/src/weight-initializer-algorithm/single-input-single-output.jl b/OptimimizedNeuralNetwork.jl/src/weight-initializer-algorithm/single-input-single-output.jl index 3b4f04b..3b9b91d 100644 --- a/OptimimizedNeuralNetwork.jl/src/weight-initializer-algorithm/single-input-single-output.jl +++ b/OptimimizedNeuralNetwork.jl/src/weight-initializer-algorithm/single-input-single-output.jl @@ -3,8 +3,9 @@ # Basado en capítulo 7, algoritmo 6 # CASO ENTRADA REAL (una dimensión) SALIDA REAL (una dimensión) ##################################################################### +export nn_from_data """ -InitializeNodes(X_train::Vector,Y_train::Vector, n::Int, M=10)::AbstractOneLayerNeuralNetwork +nn_from_data(X_train::Vector,Y_train::Vector, n::Int, M=10)::AbstractOneLayerNeuralNetwork Devuelve una red neuronal de entrada de una dimensión y de salida una dimensión con los pesos ya inicializados de acorte a los conjuntos de entrenamiento. @@ -18,7 +19,7 @@ InitializeNodes(X_train::Vector,Y_train::Vector, n::Int, M=10)::AbstractOneLayer por lo visto en teoría M=10 funciona para todas las """ -function InitializeNodes(X_train::Vector,Y_train::Vector, n::Int, M=10)::AbstractOneLayerNeuralNetwork +function nn_from_data(X_train::Vector,Y_train::Vector, n::Int, M=10)::AbstractOneLayerNeuralNetwork entry_dimension = 1 output_dimension = 1 diff --git a/OptimimizedNeuralNetwork.jl/src/weight-initializer-algorithm/main.jl b/OptimimizedNeuralNetwork.jl/src/weight-initializer-algorithm/weight-initializer-algorithm.jl similarity index 78% rename from OptimimizedNeuralNetwork.jl/src/weight-initializer-algorithm/main.jl rename to OptimimizedNeuralNetwork.jl/src/weight-initializer-algorithm/weight-initializer-algorithm.jl index 927c7bf..f97d2ea 100644 --- a/OptimimizedNeuralNetwork.jl/src/weight-initializer-algorithm/main.jl +++ b/OptimimizedNeuralNetwork.jl/src/weight-initializer-algorithm/weight-initializer-algorithm.jl @@ -4,11 +4,7 @@ ##################################################################### # Tamaño de la red neuronal y conjunto de datos -module InitialNeuralNetwork -export InitializeNodes -include("../one_layer_neuronal_network.jl") -using .OneLayerNeuralNetwork #Caso h:R -> R include("single-input-single-output.jl") include("utils.jl") @@ -16,5 +12,3 @@ include("utils.jl") include("multiple-input-single-ouput.jl") #Caso h:R^d -> R^s con r,s> 1 include("multiple-input-multiple-output.jl") - -end #end module \ No newline at end of file diff --git a/OptimimizedNeuralNetwork.jl/test/RUN_ALL_TEST.jl b/OptimimizedNeuralNetwork.jl/test/RUN_ALL_TEST.jl index c8a779e..07dbd75 100644 --- a/OptimimizedNeuralNetwork.jl/test/RUN_ALL_TEST.jl +++ b/OptimimizedNeuralNetwork.jl/test/RUN_ALL_TEST.jl @@ -6,15 +6,18 @@ # - Forward Propagation # - Our initialization algorithm #################################################### +include("../src/OptimizedNeuronalNetwork.jl") +using .OptimizedNeuronalNetwork + println("Testing Activation functions...") t = @elapsed include("activation_functions.test.jl") println("done (took $t seconds).") -println("Testing Neuronal Network Data type") +println("Testing Neuronal Network Data type...") t = @elapsed include("one_layer_neural_network.test.jl") println("done (took $t seconds).") -println("Testing ForwardPropagation") +println("Testing forward_propagation...") t = @elapsed include("forward_propagation.test.jl") println("done (took $t seconds).") diff --git a/OptimimizedNeuralNetwork.jl/test/activation_functions.test.jl b/OptimimizedNeuralNetwork.jl/test/activation_functions.test.jl index 177cebf..5c93448 100644 --- a/OptimimizedNeuralNetwork.jl/test/activation_functions.test.jl +++ b/OptimimizedNeuralNetwork.jl/test/activation_functions.test.jl @@ -5,9 +5,6 @@ ############################################################################ using Test -include("./../src/activation_functions.jl") -using .ActivationFunctions - ######################### TEST ######################### @testset "Activations functions" begin diff --git a/OptimimizedNeuralNetwork.jl/test/forward_propagation.test.jl b/OptimimizedNeuralNetwork.jl/test/forward_propagation.test.jl index 614cbd5..ff87598 100644 --- a/OptimimizedNeuralNetwork.jl/test/forward_propagation.test.jl +++ b/OptimimizedNeuralNetwork.jl/test/forward_propagation.test.jl @@ -3,63 +3,59 @@ ################################################ using Test -include("./../src/activation_functions.jl") -include("./../src/one_layer_neuronal_network.jl") - -@testset "ForwardPropagation correct types" begin +@testset "forward_propagation correct types" begin ## Comprobación de tipos y dimensión entry_dimesion = 2 number_of_hide_units = 3 output_dimension = 2 - OLNN = OneLayerNeuralNetwork.RandomWeightsNN( + OLNN = RandomWeightsNN( entry_dimesion, number_of_hide_units, output_dimension ) - ReLU = ActivationFunctions.ReLU # El resultado debe de ser un vector - @test typeof(OneLayerNeuralNetwork.ForwardPropagation(OLNN,ReLU, [1,2.0])) == Vector{Float64} + @test typeof(forward_propagation(OLNN,ReLU, [1,2.0])) == Vector{Float64} # La evaluación debe de tener las mismas dimensiones que la salida de la red neuronal - @test length(OneLayerNeuralNetwork.ForwardPropagation(OLNN,ReLU, [0,1.0])) == output_dimension + @test length(forward_propagation(OLNN,ReLU, [0,1.0])) == output_dimension end -@testset "ForwardPropagation matrix order and " begin +@testset "forward_propagation matrix order and " begin ## Comprobación de evaluación correcta # Debiera de ser la red neurona identidad S = [0, 0] A = [1 0; 0 1] B = [1 0; 0 1] - h = OneLayerNeuralNetwork.FromMatrixNN(S,A,B) + h = FromMatrixNN(S,A,B) vectores = [ [1,2], [0,0],[-1,4] ] for v in vectores - @test OneLayerNeuralNetwork.ForwardPropagation(h, x->x,v ) == v + @test forward_propagation(h, x->x,v ) == v end # Debiera de ser la red neuronal que multiplica el primer índice por dos y el resto por 3 S = [0, 0] A = [1 0; 0 1] B = [2 0; 0 3] - h = OneLayerNeuralNetwork.FromMatrixNN(S,A,B) + h = FromMatrixNN(S,A,B) vectores = [ [1,2], [0,0],[-1,4] ] for v in vectores - @test OneLayerNeuralNetwork.ForwardPropagation(h, x->x,v ) == [2*v[1], 3*v[2]] + @test forward_propagation(h, x->x,v ) == [2*v[1], 3*v[2]] end # Funcionamiento correcto para translaciones # Debiera de ser la red neuronal que suma el vector (1 2) S = [1, 2] A = [1 0; 0 1] B = [1 0; 0 1] - h = OneLayerNeuralNetwork.FromMatrixNN(S,A,B) + h = FromMatrixNN(S,A,B) vectores = [ [1,2], [0,0],[-1,4] ] for v in vectores - @test OneLayerNeuralNetwork.ForwardPropagation(h, x->x,v ) == [v[1]+1, v[2]+2] + @test forward_propagation(h, x->x,v ) == [v[1]+1, v[2]+2] end S = [2, 5] A = [2 3; 7 8] @@ -70,16 +66,16 @@ end c = c + S c = B*c - h = OneLayerNeuralNetwork.FromMatrixNN(S,A,B) - @test OneLayerNeuralNetwork.ForwardPropagation(h, x->x,v) == c + h = FromMatrixNN(S,A,B) + @test forward_propagation(h, x->x,v) == c end -@testset "ForwardPropagation activation function" begin +@testset "forward_propagation activation function" begin # Comprobamos que admite una función de activación cualquiera S = [0, 0] A = [1 0; 0 1] B = [1 0; 0 1] - h = OneLayerNeuralNetwork.FromMatrixNN(S,A,B) + h = FromMatrixNN(S,A,B) vectores = [ [1,2], [0,-3] @@ -88,13 +84,13 @@ end [1,2],[0,0] ] for (v,test) in zip(vectores,soluciones_reLU) - @test OneLayerNeuralNetwork.ForwardPropagation(h, ActivationFunctions.ReLU,v ) == test + @test forward_propagation(h, ReLU,v ) == test end # Comprobamos que aplica correctamente los coeficientes S = [0, 0] A = [1 0; 0 1] B = [1 0; 0 1] - h = OneLayerNeuralNetwork.FromMatrixNN(S,A,B) + h = FromMatrixNN(S,A,B) vectores = [ [-1,2], [0,-3] @@ -103,7 +99,7 @@ end [1,4],[0,9] ] for (v,test) in zip(vectores,soluciones) - @test OneLayerNeuralNetwork.ForwardPropagation(h, x-> x^2,v ) == test + @test forward_propagation(h, x-> x^2,v ) == test end diff --git a/OptimimizedNeuralNetwork.jl/test/metric_estimation.test.jl b/OptimimizedNeuralNetwork.jl/test/metric_estimation.test.jl index 8802f26..382fa5a 100644 --- a/OptimimizedNeuralNetwork.jl/test/metric_estimation.test.jl +++ b/OptimimizedNeuralNetwork.jl/test/metric_estimation.test.jl @@ -2,6 +2,7 @@ # TEST Metric estimations ################################################################### using Test +#include("../src/OptimizedNeuronalNetwork.jl") include("../src/metric_estimation.jl") @testset "Regression metrics" begin @@ -10,5 +11,5 @@ include("../src/metric_estimation.jl") Y = map(f, X) # Comprobamos que devuelve que para este caso en concreto son correctas: # la media de error, mediana de error, la desviación media y el coeficiente de correlación - @test Metric.Regression(X,Y,f) == (0,0,0,1) + @test regression(X,Y,f) == (0,0,0,1) end diff --git a/OptimimizedNeuralNetwork.jl/test/one_layer_neural_network.test.jl b/OptimimizedNeuralNetwork.jl/test/one_layer_neural_network.test.jl index fff012d..eda7752 100644 --- a/OptimimizedNeuralNetwork.jl/test/one_layer_neural_network.test.jl +++ b/OptimimizedNeuralNetwork.jl/test/one_layer_neural_network.test.jl @@ -1,11 +1,9 @@ using Test -include("./../src/one_layer_neuronal_network.jl") - entry_dimesion = 2 number_of_hidden_units = 3 output_dimension = 2 -OLNN = OneLayerNeuralNetwork.RandomWeightsNN( +OLNN = RandomWeightsNN( entry_dimesion, number_of_hidden_units, output_dimension @@ -27,9 +25,9 @@ end S = [1,2] #vector A = [3 4; 4 6] # matrix B = reshape([ 1 ; 1 ],1,2) # matrix 2 x 1 - h = OneLayerNeuralNetwork.FromMatrixNN(S, A, B) + h = FromMatrixNN(S, A, B) # Comprobación de tipo correcto - @test typeof(h) <: OneLayerNeuralNetwork.AbstractOneLayerNeuralNetwork + @test typeof(h) <: AbstractOneLayerNeuralNetwork # Comprobación de tamaños correctos ### Para la matriz W_1 (n_rows1, n_columns1) = size(h.W1) diff --git a/OptimimizedNeuralNetwork.jl/test/weight-inizializer-algorithm/main.test.jl b/OptimimizedNeuralNetwork.jl/test/weight-inizializer-algorithm/main.test.jl index 5e388d6..3c02208 100644 --- a/OptimimizedNeuralNetwork.jl/test/weight-inizializer-algorithm/main.test.jl +++ b/OptimimizedNeuralNetwork.jl/test/weight-inizializer-algorithm/main.test.jl @@ -5,11 +5,6 @@ using Test using Random Random.seed!(2); -include("./../../src/activation_functions.jl") -include("./../../src/one_layer_neuronal_network.jl") -include("./../../src/weight-initializer-algorithm/main.jl") -using .InitialNeuralNetwork - include("single-input-single-output.test.jl") include("multiple-input-single-output.test.jl") include("multiple-input-multiple-output.test.jl") \ No newline at end of file diff --git a/OptimimizedNeuralNetwork.jl/test/weight-inizializer-algorithm/multiple-input-multiple-output.test.jl b/OptimimizedNeuralNetwork.jl/test/weight-inizializer-algorithm/multiple-input-multiple-output.test.jl index d1b9d35..fc2ecdf 100644 --- a/OptimimizedNeuralNetwork.jl/test/weight-inizializer-algorithm/multiple-input-multiple-output.test.jl +++ b/OptimimizedNeuralNetwork.jl/test/weight-inizializer-algorithm/multiple-input-multiple-output.test.jl @@ -10,7 +10,7 @@ X_train= rand(Float32, data_set_size, entry_dimension) Y_train::Matrix = mapreduce(permutedims, vcat, map(x->f_regression(x...), eachrow(X_train))) - h = InitializeNodes(X_train, Y_train, n, M) + h = nn_from_data(X_train, Y_train, n, M) # veamos que el tamaño de la salida es la adecuada @test size(h.W1) == (n,entry_dimension+1) @@ -19,8 +19,8 @@ # Si ha sido bien construida: # Evaluar la red neuronal en los datos con los que se construyó # debería de resultar el valor de Y_train respectivo - evaluar(x)=OneLayerNeuralNetwork.ForwardPropagation(h, - ActivationFunctions.RampFunction,x) + evaluar(x)=forward_propagation(h, + RampFunction,x) for i in 1:n @test evaluar(X_train[i,:]) ≈ Y_train[i,:] diff --git a/OptimimizedNeuralNetwork.jl/test/weight-inizializer-algorithm/multiple-input-single-output.test.jl b/OptimimizedNeuralNetwork.jl/test/weight-inizializer-algorithm/multiple-input-single-output.test.jl index 1853207..2943a12 100644 --- a/OptimimizedNeuralNetwork.jl/test/weight-inizializer-algorithm/multiple-input-single-output.test.jl +++ b/OptimimizedNeuralNetwork.jl/test/weight-inizializer-algorithm/multiple-input-single-output.test.jl @@ -1,8 +1,8 @@ @testset "Nodes initialization algorithm entry dimension >1 output dimension 1" begin # Comprobamos que las hipótesis de selección son correctas M = 1 - @test ActivationFunctions.RampFunction(M) == 1 - @test ActivationFunctions.RampFunction(-M) == 0 + @test RampFunction(M) == 1 + @test RampFunction(-M) == 0 # Bien definido para tamaño n = 2 y salida de dimensión 1 f_regression(x,y,z)=x*y-z @@ -14,7 +14,7 @@ X_train= rand(Float64, data_set_size, entry_dimension) Y_train = map(x->f_regression(x...), eachrow(X_train)) - h = InitializeNodes(X_train, Y_train, n, M) + h = nn_from_data(X_train, Y_train, n, M) # veamos que el tamaño de la salida es la adecuada @test size(h.W1) == (n,entry_dimension+1) @@ -23,8 +23,8 @@ # Si ha sido bien construida: # Evaluar la red neuronal en los datos con los que se construyó # debería de resultar el valor de Y_train respectivo - evaluar(x)=OneLayerNeuralNetwork.ForwardPropagation(h, - ActivationFunctions.RampFunction,x) + evaluar(x)=forward_propagation(h, + RampFunction,x) for (x,y) in zip(eachrow(X_train),Y_train) @test evaluar(x) ≈ [y] diff --git a/OptimimizedNeuralNetwork.jl/test/weight-inizializer-algorithm/single-input-single-output.test.jl b/OptimimizedNeuralNetwork.jl/test/weight-inizializer-algorithm/single-input-single-output.test.jl index f71cdf4..c1db9f7 100644 --- a/OptimimizedNeuralNetwork.jl/test/weight-inizializer-algorithm/single-input-single-output.test.jl +++ b/OptimimizedNeuralNetwork.jl/test/weight-inizializer-algorithm/single-input-single-output.test.jl @@ -2,8 +2,8 @@ @testset "Nodes initialization algorithm entry dimension 1 output dimension 1" begin # Comprobamos que las hipótesis de selección son correctas M = 1 - @test ActivationFunctions.RampFunction(M) == 1 - @test ActivationFunctions.RampFunction(-M) == 0 + @test RampFunction(M) == 1 + @test RampFunction(-M) == 0 # Bien definido para tamaño n = 2 y salida de dimensión 1 f_regression(x)=(x<=1) ? exp(-x) : log(x) data_set_size = 5 @@ -17,7 +17,7 @@ ) Y_train = map(f_regression, X_train) - h = InitializeNodes(X_train, Y_train, n, M) + h = nn_from_data(X_train, Y_train, n, M) # veamos que el tamaño de la salida es la adecuada @test size(h.W1) == (n,2) @@ -26,8 +26,8 @@ # Si ha sido bien construida: # Evaluar la red neuronal en los datos con los que se construyó # debería de resultar el valor de Y_train respectivo - evaluar(x)=OneLayerNeuralNetwork.ForwardPropagation(h, - ActivationFunctions.RampFunction,x) + evaluar(x)=forward_propagation(h, + RampFunction,x) for (x,y) in zip(X_train,Y_train) @test evaluar([x]) ≈ [y] From 3ccb98cc0a7c0cc56c3e3a5a34dc0bf2be533cc4 Mon Sep 17 00:00:00 2001 From: Blanca Date: Sat, 11 Jun 2022 13:08:55 +0200 Subject: [PATCH 39/76] Elimina variable x_aux de forward propagation #117 --- OptimimizedNeuralNetwork.jl/src/forward_propagation.jl | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/OptimimizedNeuralNetwork.jl/src/forward_propagation.jl b/OptimimizedNeuralNetwork.jl/src/forward_propagation.jl index a27edce..2f61983 100644 --- a/OptimimizedNeuralNetwork.jl/src/forward_propagation.jl +++ b/OptimimizedNeuralNetwork.jl/src/forward_propagation.jl @@ -7,10 +7,8 @@ export forward_propagation forward_propagation (h::AbstractOneLayerNeuralNetwork, activation_function, x::Vector{Real}) Only use an activation function """ -function forward_propagation(h,activation_function, x) - x_aux = copy(x) - s = h.W1 * push!(x_aux,1) +function forward_propagation(h::AbstractOneLayerNeuralNetwork,activation_function, x) + s = h.W1 * push!(copy(x),1) ∑= map(activation_function,s) - x_aux = h.W2 * ∑ - return x_aux + return h.W2 * ∑ end From ff54e4c1bf2e6c17995e8e86cc27375ac65bb3e7 Mon Sep 17 00:00:00 2001 From: Blanca Date: Sat, 11 Jun 2022 13:09:44 +0200 Subject: [PATCH 40/76] Elimina errata y repeticiones diccionario #117 --- .github/workflows/personal-dictionary.txt | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/personal-dictionary.txt b/.github/workflows/personal-dictionary.txt index d2685c9..db2eb9c 100644 --- a/.github/workflows/personal-dictionary.txt +++ b/.github/workflows/personal-dictionary.txt @@ -1,6 +1,5 @@ personal_ws-1.1 es 0 utf-8 ActivationFunctions -ActivationFunctions Amat Approximators Aristóteles @@ -31,8 +30,6 @@ HU HUxx Halber HardTanh -Hardtanh -Hardtanh Hornik nn_from_data IntervaloCentral @@ -85,7 +82,6 @@ approximators aproximable aproximador aproximadores -autobalanceado autres auxiliarDiferenciaPorDerivada backpropagation From 97fe751c5f041f016e2256861afee35a3b5025ea Mon Sep 17 00:00:00 2001 From: Blanca Date: Mon, 13 Jun 2022 13:46:36 +0200 Subject: [PATCH 41/76] =?UTF-8?q?Corrige=20manifest=20y=20toml=20#119=20Ah?= =?UTF-8?q?ora=20mismo=20no=20deber=C3=ADa=20problema=20en=20cuanto=20a=20?= =?UTF-8?q?instalaci=C3=B3n=20de=20paquetes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Manifest.toml | 882 ++++++++++++++++++++++++++++++++++++++++++++++++++ Project.toml | 8 + 2 files changed, 890 insertions(+) diff --git a/Manifest.toml b/Manifest.toml index 1d3dd4d..6551c3b 100644 --- a/Manifest.toml +++ b/Manifest.toml @@ -3,20 +3,902 @@ julia_version = "1.7.1" manifest_format = "2.0" +[[deps.Adapt]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "af92965fb30777147966f58acb05da51c5616b5f" +uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" +version = "3.3.3" + +[[deps.ArgTools]] +uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" + +[[deps.Artifacts]] +uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" + +[[deps.Base64]] +uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" + +[[deps.Bzip2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "19a35467a82e236ff51bc17a3a44b69ef35185a2" +uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0" +version = "1.0.8+0" + +[[deps.Cairo_jll]] +deps = ["Artifacts", "Bzip2_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "LZO_jll", "Libdl", "Pixman_jll", "Pkg", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"] +git-tree-sha1 = "4b859a208b2397a7a623a03449e4636bdb17bcf2" +uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a" +version = "1.16.1+1" + +[[deps.ChainRulesCore]] +deps = ["Compat", "LinearAlgebra", "SparseArrays"] +git-tree-sha1 = "9489214b993cd42d17f44c36e359bf6a7c919abf" +uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" +version = "1.15.0" + +[[deps.ChangesOfVariables]] +deps = ["ChainRulesCore", "LinearAlgebra", "Test"] +git-tree-sha1 = "1e315e3f4b0b7ce40feded39c73049692126cf53" +uuid = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0" +version = "0.1.3" + +[[deps.ColorSchemes]] +deps = ["ColorTypes", "ColorVectorSpace", "Colors", "FixedPointNumbers", "Random"] +git-tree-sha1 = "7297381ccb5df764549818d9a7d57e45f1057d30" +uuid = "35d6a980-a343-548e-a6ea-1d62b119f2f4" +version = "3.18.0" + +[[deps.ColorTypes]] +deps = ["FixedPointNumbers", "Random"] +git-tree-sha1 = "0f4e115f6f34bbe43c19751c90a38b2f380637b9" +uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" +version = "0.11.3" + +[[deps.ColorVectorSpace]] +deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "SpecialFunctions", "Statistics", "TensorCore"] +git-tree-sha1 = "d08c20eef1f2cbc6e60fd3612ac4340b89fea322" +uuid = "c3611d14-8923-5661-9e6a-0046d554d3a4" +version = "0.9.9" + +[[deps.Colors]] +deps = ["ColorTypes", "FixedPointNumbers", "Reexport"] +git-tree-sha1 = "417b0ed7b8b838aa6ca0a87aadf1bb9eb111ce40" +uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" +version = "0.12.8" + +[[deps.Compat]] +deps = ["Dates", "LinearAlgebra", "UUIDs"] +git-tree-sha1 = "924cdca592bc16f14d2f7006754a621735280b74" +uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" +version = "4.1.0" + +[[deps.CompilerSupportLibraries_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" + +[[deps.Contour]] +deps = ["StaticArrays"] +git-tree-sha1 = "9f02045d934dc030edad45944ea80dbd1f0ebea7" +uuid = "d38c429a-6771-53c6-b99e-75d170b6e991" +version = "0.5.7" + +[[deps.DataAPI]] +git-tree-sha1 = "fb5f5316dd3fd4c5e7c30a24d50643b73e37cd40" +uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" +version = "1.10.0" + +[[deps.DataStructures]] +deps = ["Compat", "InteractiveUtils", "OrderedCollections"] +git-tree-sha1 = "d1fff3a548102f48987a52a2e0d114fa97d730f0" +uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" +version = "0.18.13" + +[[deps.DataValueInterfaces]] +git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" +uuid = "e2d170a0-9d28-54be-80f0-106bbe20a464" +version = "1.0.0" + +[[deps.Dates]] +deps = ["Printf"] +uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" + +[[deps.DelimitedFiles]] +deps = ["Mmap"] +uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" + +[[deps.DocStringExtensions]] +deps = ["LibGit2"] +git-tree-sha1 = "b19534d1895d702889b219c382a6e18010797f0b" +uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" +version = "0.8.6" + +[[deps.Downloads]] +deps = ["ArgTools", "LibCURL", "NetworkOptions"] +uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" + +[[deps.EarCut_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "3f3a2501fa7236e9b911e0f7a588c657e822bb6d" +uuid = "5ae413db-bbd1-5e63-b57d-d24a61df00f5" +version = "2.2.3+0" + +[[deps.Expat_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "bad72f730e9e91c08d9427d5e8db95478a3c323d" +uuid = "2e619515-83b5-522b-bb60-26c02a35a201" +version = "2.4.8+0" + [[deps.ExprTools]] git-tree-sha1 = "56559bbef6ca5ea0c0818fa5c90320398a6fbf8d" uuid = "e2ba6199-217a-4e67-a87a-7c52f15ade04" version = "0.1.8" +[[deps.FFMPEG]] +deps = ["FFMPEG_jll"] +git-tree-sha1 = "b57e3acbe22f8484b4b5ff66a7499717fe1a9cc8" +uuid = "c87230d0-a227-11e9-1b43-d7ebe4e7570a" +version = "0.4.1" + +[[deps.FFMPEG_jll]] +deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "JLLWrappers", "LAME_jll", "Libdl", "Ogg_jll", "OpenSSL_jll", "Opus_jll", "Pkg", "Zlib_jll", "libass_jll", "libfdk_aac_jll", "libvorbis_jll", "x264_jll", "x265_jll"] +git-tree-sha1 = "d8a578692e3077ac998b50c0217dfd67f21d1e5f" +uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5" +version = "4.4.0+0" + +[[deps.FixedPointNumbers]] +deps = ["Statistics"] +git-tree-sha1 = "335bfdceacc84c5cdf16aadc768aa5ddfc5383cc" +uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" +version = "0.8.4" + +[[deps.Fontconfig_jll]] +deps = ["Artifacts", "Bzip2_jll", "Expat_jll", "FreeType2_jll", "JLLWrappers", "Libdl", "Libuuid_jll", "Pkg", "Zlib_jll"] +git-tree-sha1 = "21efd19106a55620a188615da6d3d06cd7f6ee03" +uuid = "a3f928ae-7b40-5064-980b-68af3947d34b" +version = "2.13.93+0" + +[[deps.Formatting]] +deps = ["Printf"] +git-tree-sha1 = "8339d61043228fdd3eb658d86c926cb282ae72a8" +uuid = "59287772-0a20-5a39-b81b-1366585eb4c0" +version = "0.4.2" + +[[deps.FreeType2_jll]] +deps = ["Artifacts", "Bzip2_jll", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] +git-tree-sha1 = "87eb71354d8ec1a96d4a7636bd57a7347dde3ef9" +uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7" +version = "2.10.4+0" + +[[deps.FriBidi_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "aa31987c2ba8704e23c6c8ba8a4f769d5d7e4f91" +uuid = "559328eb-81f9-559d-9380-de523a88c83c" +version = "1.0.10+0" + +[[deps.GLFW_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libglvnd_jll", "Pkg", "Xorg_libXcursor_jll", "Xorg_libXi_jll", "Xorg_libXinerama_jll", "Xorg_libXrandr_jll"] +git-tree-sha1 = "51d2dfe8e590fbd74e7a842cf6d13d8a2f45dc01" +uuid = "0656b61e-2033-5cc2-a64a-77c0f6c09b89" +version = "3.3.6+0" + +[[deps.GR]] +deps = ["Base64", "DelimitedFiles", "GR_jll", "HTTP", "JSON", "Libdl", "LinearAlgebra", "Pkg", "Printf", "Random", "RelocatableFolders", "Serialization", "Sockets", "Test", "UUIDs"] +git-tree-sha1 = "c98aea696662d09e215ef7cda5296024a9646c75" +uuid = "28b8d3ca-fb5f-59d9-8090-bfdbd6d07a71" +version = "0.64.4" + +[[deps.GR_jll]] +deps = ["Artifacts", "Bzip2_jll", "Cairo_jll", "FFMPEG_jll", "Fontconfig_jll", "GLFW_jll", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libtiff_jll", "Pixman_jll", "Pkg", "Qt5Base_jll", "Zlib_jll", "libpng_jll"] +git-tree-sha1 = "3a233eeeb2ca45842fe100e0413936834215abf5" +uuid = "d2c73de3-f751-5644-a686-071e5b155ba9" +version = "0.64.4+0" + +[[deps.GeometryBasics]] +deps = ["EarCut_jll", "IterTools", "LinearAlgebra", "StaticArrays", "StructArrays", "Tables"] +git-tree-sha1 = "83ea630384a13fc4f002b77690bc0afeb4255ac9" +uuid = "5c1252a2-5f33-56bf-86c9-59e7332b4326" +version = "0.4.2" + +[[deps.Gettext_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "XML2_jll"] +git-tree-sha1 = "9b02998aba7bf074d14de89f9d37ca24a1a0b046" +uuid = "78b55507-aeef-58d4-861c-77aaff3498b1" +version = "0.21.0+0" + +[[deps.Glib_jll]] +deps = ["Artifacts", "Gettext_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE_jll", "Pkg", "Zlib_jll"] +git-tree-sha1 = "a32d672ac2c967f3deb8a81d828afc739c838a06" +uuid = "7746bdde-850d-59dc-9ae8-88ece973131d" +version = "2.68.3+2" + +[[deps.Graphite2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "344bf40dcab1073aca04aa0df4fb092f920e4011" +uuid = "3b182d85-2403-5c21-9c21-1e1f0cc25472" +version = "1.3.14+0" + +[[deps.Grisu]] +git-tree-sha1 = "53bb909d1151e57e2484c3d1b53e19552b887fb2" +uuid = "42e2da0e-8278-4e71-bc24-59509adca0fe" +version = "1.0.2" + +[[deps.HTTP]] +deps = ["Base64", "Dates", "IniFile", "Logging", "MbedTLS", "NetworkOptions", "Sockets", "URIs"] +git-tree-sha1 = "0fa77022fe4b511826b39c894c90daf5fce3334a" +uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3" +version = "0.9.17" + +[[deps.HarfBuzz_jll]] +deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "Graphite2_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg"] +git-tree-sha1 = "129acf094d168394e80ee1dc4bc06ec835e510a3" +uuid = "2e76f6c2-a576-52d4-95c1-20adfe4de566" +version = "2.8.1+1" + +[[deps.IniFile]] +git-tree-sha1 = "f550e6e32074c939295eb5ea6de31849ac2c9625" +uuid = "83e8ac13-25f8-5344-8a64-a9f2b223428f" +version = "0.5.1" + +[[deps.InteractiveUtils]] +deps = ["Markdown"] +uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" + +[[deps.InverseFunctions]] +deps = ["Test"] +git-tree-sha1 = "b3364212fb5d870f724876ffcd34dd8ec6d98918" +uuid = "3587e190-3f89-42d0-90ee-14403ec27112" +version = "0.1.7" + +[[deps.IrrationalConstants]] +git-tree-sha1 = "7fd44fd4ff43fc60815f8e764c0f352b83c49151" +uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" +version = "0.1.1" + +[[deps.IterTools]] +git-tree-sha1 = "fa6287a4469f5e048d763df38279ee729fbd44e5" +uuid = "c8e1da08-722c-5040-9ed9-7db0dc04731e" +version = "1.4.0" + +[[deps.IteratorInterfaceExtensions]] +git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856" +uuid = "82899510-4779-5014-852e-03e436cf321d" +version = "1.0.0" + +[[deps.JLLWrappers]] +deps = ["Preferences"] +git-tree-sha1 = "abc9885a7ca2052a736a600f7fa66209f96506e1" +uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" +version = "1.4.1" + +[[deps.JSON]] +deps = ["Dates", "Mmap", "Parsers", "Unicode"] +git-tree-sha1 = "3c837543ddb02250ef42f4738347454f95079d4e" +uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" +version = "0.21.3" + +[[deps.JpegTurbo_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "b53380851c6e6664204efb2e62cd24fa5c47e4ba" +uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8" +version = "2.1.2+0" + +[[deps.LAME_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "f6250b16881adf048549549fba48b1161acdac8c" +uuid = "c1c5ebd0-6772-5130-a774-d5fcae4a789d" +version = "3.100.1+0" + +[[deps.LERC_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "bf36f528eec6634efc60d7ec062008f171071434" +uuid = "88015f11-f218-50d7-93a8-a6af411a945d" +version = "3.0.0+1" + +[[deps.LZO_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "e5b909bcf985c5e2605737d2ce278ed791b89be6" +uuid = "dd4b983a-f0e5-5f8d-a1b7-129d4a5fb1ac" +version = "2.10.1+0" + +[[deps.LaTeXStrings]] +git-tree-sha1 = "f2355693d6778a178ade15952b7ac47a4ff97996" +uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" +version = "1.3.0" + +[[deps.Latexify]] +deps = ["Formatting", "InteractiveUtils", "LaTeXStrings", "MacroTools", "Markdown", "Printf", "Requires"] +git-tree-sha1 = "46a39b9c58749eefb5f2dc1178cb8fab5332b1ab" +uuid = "23fbe1c1-3f47-55db-b15f-69d7ec21a316" +version = "0.15.15" + +[[deps.LibCURL]] +deps = ["LibCURL_jll", "MozillaCACerts_jll"] +uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" + +[[deps.LibCURL_jll]] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"] +uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" + +[[deps.LibGit2]] +deps = ["Base64", "NetworkOptions", "Printf", "SHA"] +uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" + +[[deps.LibSSH2_jll]] +deps = ["Artifacts", "Libdl", "MbedTLS_jll"] +uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" + +[[deps.Libdl]] +uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" + +[[deps.Libffi_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "0b4a5d71f3e5200a7dff793393e09dfc2d874290" +uuid = "e9f186c6-92d2-5b65-8a66-fee21dc1b490" +version = "3.2.2+1" + +[[deps.Libgcrypt_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgpg_error_jll", "Pkg"] +git-tree-sha1 = "64613c82a59c120435c067c2b809fc61cf5166ae" +uuid = "d4300ac3-e22c-5743-9152-c294e39db1e4" +version = "1.8.7+0" + +[[deps.Libglvnd_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll", "Xorg_libXext_jll"] +git-tree-sha1 = "7739f837d6447403596a75d19ed01fd08d6f56bf" +uuid = "7e76a0d4-f3c7-5321-8279-8d96eeed0f29" +version = "1.3.0+3" + +[[deps.Libgpg_error_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "c333716e46366857753e273ce6a69ee0945a6db9" +uuid = "7add5ba3-2f88-524e-9cd5-f83b8a55f7b8" +version = "1.42.0+0" + +[[deps.Libiconv_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "42b62845d70a619f063a7da093d995ec8e15e778" +uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531" +version = "1.16.1+1" + +[[deps.Libmount_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "9c30530bf0effd46e15e0fdcf2b8636e78cbbd73" +uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9" +version = "2.35.0+0" + +[[deps.Libtiff_jll]] +deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "LERC_jll", "Libdl", "Pkg", "Zlib_jll", "Zstd_jll"] +git-tree-sha1 = "3eb79b0ca5764d4799c06699573fd8f533259713" +uuid = "89763e89-9b03-5906-acba-b20f662cd828" +version = "4.4.0+0" + +[[deps.Libuuid_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "7f3efec06033682db852f8b3bc3c1d2b0a0ab066" +uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700" +version = "2.36.0+0" + +[[deps.LinearAlgebra]] +deps = ["Libdl", "libblastrampoline_jll"] +uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" + +[[deps.LogExpFunctions]] +deps = ["ChainRulesCore", "ChangesOfVariables", "DocStringExtensions", "InverseFunctions", "IrrationalConstants", "LinearAlgebra"] +git-tree-sha1 = "09e4b894ce6a976c354a69041a04748180d43637" +uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" +version = "0.3.15" + +[[deps.Logging]] +uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" + +[[deps.MacroTools]] +deps = ["Markdown", "Random"] +git-tree-sha1 = "3d3e902b31198a27340d0bf00d6ac452866021cf" +uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" +version = "0.5.9" + +[[deps.Markdown]] +deps = ["Base64"] +uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" + +[[deps.MbedTLS]] +deps = ["Dates", "MbedTLS_jll", "Random", "Sockets"] +git-tree-sha1 = "1c38e51c3d08ef2278062ebceade0e46cefc96fe" +uuid = "739be429-bea8-5141-9913-cc70e7f3736d" +version = "1.0.3" + +[[deps.MbedTLS_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" + +[[deps.Measures]] +git-tree-sha1 = "e498ddeee6f9fdb4551ce855a46f54dbd900245f" +uuid = "442fdcdd-2543-5da2-b0f3-8c86c306513e" +version = "0.3.1" + +[[deps.Missings]] +deps = ["DataAPI"] +git-tree-sha1 = "bf210ce90b6c9eed32d25dbcae1ebc565df2687f" +uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28" +version = "1.0.2" + +[[deps.Mmap]] +uuid = "a63ad114-7e13-5084-954f-fe012c677804" + +[[deps.MozillaCACerts_jll]] +uuid = "14a3606d-f60d-562e-9121-12d972cd8159" + +[[deps.NaNMath]] +git-tree-sha1 = "737a5957f387b17e74d4ad2f440eb330b39a62c5" +uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" +version = "1.0.0" + +[[deps.NetworkOptions]] +uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" + +[[deps.Ogg_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "887579a3eb005446d514ab7aeac5d1d027658b8f" +uuid = "e7412a2a-1a6e-54c0-be00-318e2571c051" +version = "1.3.5+1" + +[[deps.OpenBLAS_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] +uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" + +[[deps.OpenLibm_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "05823500-19ac-5b8b-9628-191a04bc5112" + +[[deps.OpenSSL_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "ab05aa4cc89736e95915b01e7279e61b1bfe33b8" +uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" +version = "1.1.14+0" + +[[deps.OpenSpecFun_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "13652491f6856acfd2db29360e1bbcd4565d04f1" +uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" +version = "0.5.5+0" + +[[deps.Opus_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "51a08fb14ec28da2ec7a927c4337e4332c2a4720" +uuid = "91d4177d-7536-5919-b921-800302f37372" +version = "1.3.2+0" + +[[deps.OrderedCollections]] +git-tree-sha1 = "85f8e6578bf1f9ee0d11e7bb1b1456435479d47c" +uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" +version = "1.4.1" + +[[deps.PCRE_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "b2a7af664e098055a7529ad1a900ded962bca488" +uuid = "2f80f16e-611a-54ab-bc61-aa92de5b98fc" +version = "8.44.0+0" + +[[deps.Parsers]] +deps = ["Dates"] +git-tree-sha1 = "1285416549ccfcdf0c50d4997a94331e88d68413" +uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" +version = "2.3.1" + +[[deps.Pixman_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "b4f5d02549a10e20780a24fce72bea96b6329e29" +uuid = "30392449-352a-5448-841d-b1acce4e97dc" +version = "0.40.1+0" + +[[deps.Pkg]] +deps = ["Artifacts", "Dates", "Downloads", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"] +uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" + +[[deps.PlotThemes]] +deps = ["PlotUtils", "Statistics"] +git-tree-sha1 = "8162b2f8547bc23876edd0c5181b27702ae58dce" +uuid = "ccf2f8ad-2431-5c83-bf29-c5338b663b6a" +version = "3.0.0" + +[[deps.PlotUtils]] +deps = ["ColorSchemes", "Colors", "Dates", "Printf", "Random", "Reexport", "Statistics"] +git-tree-sha1 = "bb16469fd5224100e422f0b027d26c5a25de1200" +uuid = "995b91a9-d308-5afd-9ec6-746e21dbc043" +version = "1.2.0" + +[[deps.Plots]] +deps = ["Base64", "Contour", "Dates", "Downloads", "FFMPEG", "FixedPointNumbers", "GR", "GeometryBasics", "JSON", "Latexify", "LinearAlgebra", "Measures", "NaNMath", "Pkg", "PlotThemes", "PlotUtils", "Printf", "REPL", "Random", "RecipesBase", "RecipesPipeline", "Reexport", "Requires", "Scratch", "Showoff", "SparseArrays", "Statistics", "StatsBase", "UUIDs", "UnicodeFun", "Unzip"] +git-tree-sha1 = "9e42de869561d6bdf8602c57ec557d43538a92f0" +uuid = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" +version = "1.29.1" + +[[deps.Preferences]] +deps = ["TOML"] +git-tree-sha1 = "47e5f437cc0e7ef2ce8406ce1e7e24d44915f88d" +uuid = "21216c6a-2e73-6563-6e65-726566657250" +version = "1.3.0" + [[deps.Printf]] deps = ["Unicode"] uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" +[[deps.Qt5Base_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Fontconfig_jll", "Glib_jll", "JLLWrappers", "Libdl", "Libglvnd_jll", "OpenSSL_jll", "Pkg", "Xorg_libXext_jll", "Xorg_libxcb_jll", "Xorg_xcb_util_image_jll", "Xorg_xcb_util_keysyms_jll", "Xorg_xcb_util_renderutil_jll", "Xorg_xcb_util_wm_jll", "Zlib_jll", "xkbcommon_jll"] +git-tree-sha1 = "c6c0f690d0cc7caddb74cef7aa847b824a16b256" +uuid = "ea2cea3b-5b76-57ae-a6ef-0a8af62496e1" +version = "5.15.3+1" + +[[deps.REPL]] +deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"] +uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" + +[[deps.Random]] +deps = ["SHA", "Serialization"] +uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" + +[[deps.RecipesBase]] +git-tree-sha1 = "6bf3f380ff52ce0832ddd3a2a7b9538ed1bcca7d" +uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" +version = "1.2.1" + +[[deps.RecipesPipeline]] +deps = ["Dates", "NaNMath", "PlotUtils", "RecipesBase"] +git-tree-sha1 = "dc1e451e15d90347a7decc4221842a022b011714" +uuid = "01d81517-befc-4cb6-b9ec-a95719d0359c" +version = "0.5.2" + +[[deps.Reexport]] +git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" +uuid = "189a3867-3050-52da-a836-e630ba90ab69" +version = "1.2.2" + +[[deps.RelocatableFolders]] +deps = ["SHA", "Scratch"] +git-tree-sha1 = "cdbd3b1338c72ce29d9584fdbe9e9b70eeb5adca" +uuid = "05181044-ff0b-4ac5-8273-598c1e38db00" +version = "0.1.3" + +[[deps.Requires]] +deps = ["UUIDs"] +git-tree-sha1 = "838a3a4188e2ded87a4f9f184b4b0d78a1e91cb7" +uuid = "ae029012-a4dd-5104-9daa-d747884805df" +version = "1.3.0" + +[[deps.SHA]] +uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" + +[[deps.Scratch]] +deps = ["Dates"] +git-tree-sha1 = "0b4b7f1393cff97c33891da2a0bf69c6ed241fda" +uuid = "6c6a2e73-6563-6170-7368-637461726353" +version = "1.1.0" + +[[deps.Serialization]] +uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" + +[[deps.Showoff]] +deps = ["Dates", "Grisu"] +git-tree-sha1 = "91eddf657aca81df9ae6ceb20b959ae5653ad1de" +uuid = "992d4aef-0814-514b-bc4d-f2e9a6c4116f" +version = "1.0.3" + +[[deps.Sockets]] +uuid = "6462fe0b-24de-5631-8697-dd941f90decc" + +[[deps.SortingAlgorithms]] +deps = ["DataStructures"] +git-tree-sha1 = "b3363d7460f7d098ca0912c69b082f75625d7508" +uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" +version = "1.0.1" + +[[deps.SparseArrays]] +deps = ["LinearAlgebra", "Random"] +uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + +[[deps.SpecialFunctions]] +deps = ["ChainRulesCore", "IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] +git-tree-sha1 = "a9e798cae4867e3a41cae2dd9eb60c047f1212db" +uuid = "276daf66-3868-5448-9aa4-cd146d93841b" +version = "2.1.6" + +[[deps.StaticArrays]] +deps = ["LinearAlgebra", "Random", "Statistics"] +git-tree-sha1 = "2bbd9f2e40afd197a1379aef05e0d85dba649951" +uuid = "90137ffa-7385-5640-81b9-e52037218182" +version = "1.4.7" + +[[deps.Statistics]] +deps = ["LinearAlgebra", "SparseArrays"] +uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" + +[[deps.StatsAPI]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "2c11d7290036fe7aac9038ff312d3b3a2a5bf89e" +uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0" +version = "1.4.0" + +[[deps.StatsBase]] +deps = ["DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] +git-tree-sha1 = "8977b17906b0a1cc74ab2e3a05faa16cf08a8291" +uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" +version = "0.33.16" + +[[deps.StructArrays]] +deps = ["Adapt", "DataAPI", "StaticArrays", "Tables"] +git-tree-sha1 = "9abba8f8fb8458e9adf07c8a2377a070674a24f1" +uuid = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" +version = "0.6.8" + +[[deps.TOML]] +deps = ["Dates"] +uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" + +[[deps.TableTraits]] +deps = ["IteratorInterfaceExtensions"] +git-tree-sha1 = "c06b2f539df1c6efa794486abfb6ed2022561a39" +uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c" +version = "1.0.1" + +[[deps.Tables]] +deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "LinearAlgebra", "OrderedCollections", "TableTraits", "Test"] +git-tree-sha1 = "5ce79ce186cc678bbb5c5681ca3379d1ddae11a1" +uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" +version = "1.7.0" + +[[deps.Tar]] +deps = ["ArgTools", "SHA"] +uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" + +[[deps.TensorCore]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "1feb45f88d133a655e001435632f019a9a1bcdb6" +uuid = "62fd8b95-f654-4bbd-a8a5-9c27f68ccd50" +version = "0.1.1" + +[[deps.Test]] +deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] +uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + [[deps.TimerOutputs]] deps = ["ExprTools", "Printf"] git-tree-sha1 = "7638550aaea1c9a1e86817a231ef0faa9aca79bd" uuid = "a759f4b9-e2f1-59dc-863e-4aeb61b1ea8f" version = "0.5.19" +[[deps.URIs]] +git-tree-sha1 = "97bbe755a53fe859669cd907f2d96aee8d2c1355" +uuid = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4" +version = "1.3.0" + +[[deps.UUIDs]] +deps = ["Random", "SHA"] +uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" + [[deps.Unicode]] uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" + +[[deps.UnicodeFun]] +deps = ["REPL"] +git-tree-sha1 = "53915e50200959667e78a92a418594b428dffddf" +uuid = "1cfade01-22cf-5700-b092-accc4b62d6e1" +version = "0.4.1" + +[[deps.Unzip]] +git-tree-sha1 = "34db80951901073501137bdbc3d5a8e7bbd06670" +uuid = "41fe7b60-77ed-43a1-b4f0-825fd5a5650d" +version = "0.1.2" + +[[deps.Wayland_jll]] +deps = ["Artifacts", "Expat_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg", "XML2_jll"] +git-tree-sha1 = "3e61f0b86f90dacb0bc0e73a0c5a83f6a8636e23" +uuid = "a2964d1f-97da-50d4-b82a-358c7fce9d89" +version = "1.19.0+0" + +[[deps.Wayland_protocols_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "4528479aa01ee1b3b4cd0e6faef0e04cf16466da" +uuid = "2381bf8a-dfd0-557d-9999-79630e7b1b91" +version = "1.25.0+0" + +[[deps.XML2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "Zlib_jll"] +git-tree-sha1 = "58443b63fb7e465a8a7210828c91c08b92132dff" +uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" +version = "2.9.14+0" + +[[deps.XSLT_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgcrypt_jll", "Libgpg_error_jll", "Libiconv_jll", "Pkg", "XML2_jll", "Zlib_jll"] +git-tree-sha1 = "91844873c4085240b95e795f692c4cec4d805f8a" +uuid = "aed1982a-8fda-507f-9586-7b0439959a61" +version = "1.1.34+0" + +[[deps.Xorg_libX11_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libxcb_jll", "Xorg_xtrans_jll"] +git-tree-sha1 = "5be649d550f3f4b95308bf0183b82e2582876527" +uuid = "4f6342f7-b3d2-589e-9d20-edeb45f2b2bc" +version = "1.6.9+4" + +[[deps.Xorg_libXau_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "4e490d5c960c314f33885790ed410ff3a94ce67e" +uuid = "0c0b7dd1-d40b-584c-a123-a41640f87eec" +version = "1.0.9+4" + +[[deps.Xorg_libXcursor_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXfixes_jll", "Xorg_libXrender_jll"] +git-tree-sha1 = "12e0eb3bc634fa2080c1c37fccf56f7c22989afd" +uuid = "935fb764-8cf2-53bf-bb30-45bb1f8bf724" +version = "1.2.0+4" + +[[deps.Xorg_libXdmcp_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "4fe47bd2247248125c428978740e18a681372dd4" +uuid = "a3789734-cfe1-5b06-b2d0-1dd0d9d62d05" +version = "1.1.3+4" + +[[deps.Xorg_libXext_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] +git-tree-sha1 = "b7c0aa8c376b31e4852b360222848637f481f8c3" +uuid = "1082639a-0dae-5f34-9b06-72781eeb8cb3" +version = "1.3.4+4" + +[[deps.Xorg_libXfixes_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] +git-tree-sha1 = "0e0dc7431e7a0587559f9294aeec269471c991a4" +uuid = "d091e8ba-531a-589c-9de9-94069b037ed8" +version = "5.0.3+4" + +[[deps.Xorg_libXi_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll", "Xorg_libXfixes_jll"] +git-tree-sha1 = "89b52bc2160aadc84d707093930ef0bffa641246" +uuid = "a51aa0fd-4e3c-5386-b890-e753decda492" +version = "1.7.10+4" + +[[deps.Xorg_libXinerama_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll"] +git-tree-sha1 = "26be8b1c342929259317d8b9f7b53bf2bb73b123" +uuid = "d1454406-59df-5ea1-beac-c340f2130bc3" +version = "1.1.4+4" + +[[deps.Xorg_libXrandr_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll", "Xorg_libXrender_jll"] +git-tree-sha1 = "34cea83cb726fb58f325887bf0612c6b3fb17631" +uuid = "ec84b674-ba8e-5d96-8ba1-2a689ba10484" +version = "1.5.2+4" + +[[deps.Xorg_libXrender_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] +git-tree-sha1 = "19560f30fd49f4d4efbe7002a1037f8c43d43b96" +uuid = "ea2f1a96-1ddc-540d-b46f-429655e07cfa" +version = "0.9.10+4" + +[[deps.Xorg_libpthread_stubs_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "6783737e45d3c59a4a4c4091f5f88cdcf0908cbb" +uuid = "14d82f49-176c-5ed1-bb49-ad3f5cbd8c74" +version = "0.1.0+3" + +[[deps.Xorg_libxcb_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "XSLT_jll", "Xorg_libXau_jll", "Xorg_libXdmcp_jll", "Xorg_libpthread_stubs_jll"] +git-tree-sha1 = "daf17f441228e7a3833846cd048892861cff16d6" +uuid = "c7cfdc94-dc32-55de-ac96-5a1b8d977c5b" +version = "1.13.0+3" + +[[deps.Xorg_libxkbfile_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] +git-tree-sha1 = "926af861744212db0eb001d9e40b5d16292080b2" +uuid = "cc61e674-0454-545c-8b26-ed2c68acab7a" +version = "1.1.0+4" + +[[deps.Xorg_xcb_util_image_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] +git-tree-sha1 = "0fab0a40349ba1cba2c1da699243396ff8e94b97" +uuid = "12413925-8142-5f55-bb0e-6d7ca50bb09b" +version = "0.4.0+1" + +[[deps.Xorg_xcb_util_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libxcb_jll"] +git-tree-sha1 = "e7fd7b2881fa2eaa72717420894d3938177862d1" +uuid = "2def613f-5ad1-5310-b15b-b15d46f528f5" +version = "0.4.0+1" + +[[deps.Xorg_xcb_util_keysyms_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] +git-tree-sha1 = "d1151e2c45a544f32441a567d1690e701ec89b00" +uuid = "975044d2-76e6-5fbe-bf08-97ce7c6574c7" +version = "0.4.0+1" + +[[deps.Xorg_xcb_util_renderutil_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] +git-tree-sha1 = "dfd7a8f38d4613b6a575253b3174dd991ca6183e" +uuid = "0d47668e-0667-5a69-a72c-f761630bfb7e" +version = "0.3.9+1" + +[[deps.Xorg_xcb_util_wm_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] +git-tree-sha1 = "e78d10aab01a4a154142c5006ed44fd9e8e31b67" +uuid = "c22f9ab0-d5fe-5066-847c-f4bb1cd4e361" +version = "0.4.1+1" + +[[deps.Xorg_xkbcomp_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libxkbfile_jll"] +git-tree-sha1 = "4bcbf660f6c2e714f87e960a171b119d06ee163b" +uuid = "35661453-b289-5fab-8a00-3d9160c6a3a4" +version = "1.4.2+4" + +[[deps.Xorg_xkeyboard_config_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xkbcomp_jll"] +git-tree-sha1 = "5c8424f8a67c3f2209646d4425f3d415fee5931d" +uuid = "33bec58e-1273-512f-9401-5d533626f822" +version = "2.27.0+4" + +[[deps.Xorg_xtrans_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "79c31e7844f6ecf779705fbc12146eb190b7d845" +uuid = "c5fb5394-a638-5e4d-96e5-b29de1b5cf10" +version = "1.4.0+3" + +[[deps.Zlib_jll]] +deps = ["Libdl"] +uuid = "83775a58-1f1d-513f-b197-d71354ab007a" + +[[deps.Zstd_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "e45044cd873ded54b6a5bac0eb5c971392cf1927" +uuid = "3161d3a3-bdf6-5164-811a-617609db77b4" +version = "1.5.2+0" + +[[deps.libass_jll]] +deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] +git-tree-sha1 = "5982a94fcba20f02f42ace44b9894ee2b140fe47" +uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0" +version = "0.15.1+0" + +[[deps.libblastrampoline_jll]] +deps = ["Artifacts", "Libdl", "OpenBLAS_jll"] +uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" + +[[deps.libfdk_aac_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "daacc84a041563f965be61859a36e17c4e4fcd55" +uuid = "f638f0a6-7fb0-5443-88ba-1cc74229b280" +version = "2.0.2+0" + +[[deps.libpng_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] +git-tree-sha1 = "94d180a6d2b5e55e447e2d27a29ed04fe79eb30c" +uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f" +version = "1.6.38+0" + +[[deps.libvorbis_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Ogg_jll", "Pkg"] +git-tree-sha1 = "b910cb81ef3fe6e78bf6acee440bda86fd6ae00c" +uuid = "f27f6e37-5d2b-51aa-960f-b287f2bc3b7a" +version = "1.3.7+1" + +[[deps.nghttp2_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" + +[[deps.p7zip_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" + +[[deps.x264_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "4fea590b89e6ec504593146bf8b988b2c00922b2" +uuid = "1270edf5-f2f9-52d2-97e9-ab00b5d0237a" +version = "2021.5.5+0" + +[[deps.x265_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "ee567a171cce03570d77ad3a43e90218e38937a9" +uuid = "dfaa095f-4041-5dcd-9319-2fabd8486b76" +version = "3.5.0+0" + +[[deps.xkbcommon_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Wayland_jll", "Wayland_protocols_jll", "Xorg_libxcb_jll", "Xorg_xkeyboard_config_jll"] +git-tree-sha1 = "ece2350174195bb31de1a63bea3a41ae1aa593b6" +uuid = "d8fb68d0-12a3-5cfd-a85a-d49703b185fd" +version = "0.9.1+5" diff --git a/Project.toml b/Project.toml index e67402d..dff7b15 100644 --- a/Project.toml +++ b/Project.toml @@ -1,2 +1,10 @@ +name = "OptimizedNeuralNetwork.jlactiva" +uuid = "c0288f0f-8577-469d-b024-d58cda6ff0ea" +authors = ["Blanca "] +version = "0.1.0" [deps] +LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" +Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" +Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" +TOML = "fa267f1f-6049-4f14-aa54-33bafae1ed76" TimerOutputs = "a759f4b9-e2f1-59dc-863e-4aeb61b1ea8f" From d6d94cb70af2fd1c304b3615ad0fdac583ccfcf3 Mon Sep 17 00:00:00 2001 From: Blanca Date: Mon, 13 Jun 2022 13:48:12 +0200 Subject: [PATCH 42/76] =?UTF-8?q?A=C3=B1ade=20Readme=20actualizado=20#119?= =?UTF-8?q?=20En=20=C3=A9l=20se=20explica=20el=20brevemente=20el=20funcion?= =?UTF-8?q?amiento=20de=20la=20biblioteca?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Readme.md | 124 ++++++++++++++++++++++++++++++++---------------------- 1 file changed, 74 insertions(+), 50 deletions(-) diff --git a/Readme.md b/Readme.md index 8068467..3368a19 100644 --- a/Readme.md +++ b/Readme.md @@ -1,85 +1,109 @@ -# Trabajo fin de grado sobre optimización de redes neuronales. +# Trabajo fin de grado sobre optimización de redes neuronales + +Granada primera mitad 2022 +Alumna: Blanca Cano Camarero +Tutores: -Granada primera mitad 2022. -Alumna: Blanca Cano Camarero -Tutores: - Juan Julián Merelo Guervós - Francisco Javier Merí de la Maza -## Motivación: Democratización de la inteligencia artificial. +## Biblioteca OptimizedNeuralNetwork.jl -Partiendo de las premisas de que la ciencia que no es replicable dudosamente es ciencias [1] y -cómo los avances tecnológicos se están construyendo actualmente fundamentalmente gracias al aumento de la potencia de cómputo [2][3]. +La biblioteca OptimizedNeuralNetwork.jl implementa el modelo de red neuronal descrito en la memoria del proyecto (puede descargar una versión pdf en *release*) +y que pretende ser una optimización de las redes neuronales convencionales, +así como otros algoritmo que tengan como objetivo también la mejora en algún aspecto. -Es necesaria una democratización de la situación, un acercamiento a los nuevos resultados y aplicaciones -para organizaciones y usuarios con capacidades de cómputo más modestas. -Se pretende por tanto, realizar un estudio de la posible optimización de redes neuronales a raíz de: (1) el análisis detallados de la construcción y resultados matemáticos de éstas (como puede ser el teorema de aproximación universal) (2) Un estudio empírico de la velocidad o precisión de los resultados. +Contiene las siguientes funciones que mostramos con algunos ejemplos -Tanto (1) como (2) se desarrollarán ligados y se retroalimentarán entre ellos. - -De esta manera se tratará de buscar algoritmos de redes neuronales que no requieran de una potencia masiva. +### Creación de redes neuronales -## Generación de la memoria +Red neuronal con pesos aleatorio y $n$ neuronas -**Puede descargar un PDF de la memoria en la sección de releases**. -O descargar el repositorio y escribir `make`. +``` julia +entry_dimesion = 2 +number_of_hidden_units = 3 +output_dimension = 2 -## Objetivos +RandomWeightsNN( + entry_dimesion, + number_of_hidden_units, + output_dimension +) +``` -1. Posibilidad de limitar la precisión de los cálculos con los que se trabaja en redes neuronales. -2. Posibilidad de hallar límites superiores al tamaño de las redes neuronales que se usan en machine learning, tanto en capas como en unidades para cada capa. -3. Implementación "open source" de los límites hallados anteriormente usando un lenguaje de altas prestaciones, que permita trabajar en cualquier tipo de hardware. +Creación a partir de matrices -## Estructura +```julia +S = [1,2,3] +A = [3 4 1; 4 6 3; 1 1 1] +B = [1 2 3; 3 2 3] +FromMatrixNN(S, A, B) +``` -### 1 Teoría de la aproximación. +Inicialización de la matriz a partir de datos de entrenamiento +`nn_from_data(X_train, Y_train, n, M)` +Donde $n$ es el número de neuronas y $M$ es una cte que depende de la función de activación +(ver memoria) -Donde destacan el teorema de aproximación de Weierstrass y Stone-Weierstrass. +### Funciones de activación usuales -Es de interés profundizar en este campo porque +``` julia + @ThresholdFunction(id,0)(-1) + CosineSquasher(10) 1 + @IndicatorFunction(0)(-0.1) + RampFunction(1) + ReLU(-1) + Sigmoid(9999999) + HardTanh(9999999) + @LReLU(0.01)(10) + @LReLU(-0.01)(-1) +``` -(i) Da explicación del uso base de estructuras "simples" como son los polinomios a la hora de la construcción otras más "complejas". -(ii) Clarifica qué tipo de funciones se pueden aproximar con polinomios. +### Algoritmo de *forward propagation* +``` julia +forward_propagation(h,RampFunction,x) +``` -### 2 Construcción de las redes -#### 2.1 Formulación del marco teórico -Se conecta con teoría de aproximación y teorema de convergencia universal. +### Algoritmo de *back propagation* -#### 2.2 Descripción -(Teoría) -- Construcción desde perceptrón. -- Explicación de la actualización de los pesos. +``` julia +TODO :) +``` -(Práctica) -- Implementación estricta de una red neuronal. -- Análisis de los resultados en parámetros como (i) bondad ajuste (ii) eficiencia de cómputo. +## Reglas -### 3 Teorema de aproximación universal +- Generación de la memoria `make`. +- Pasar test a la implementación `make test`. +- Para ejecutar los experimentos `make experimentos` (los experimentos generan datos cuya localización pude configurar en `Experimentos/.config.toml`). -Con el fin de validar los resultado obtenidos se desarrollará el paper de Hornik, Stinchcombe y White *Multilayer Feedforward Networks are Universal approximators*. - -### 4 Fase de experimentación-especulación-refinamiento de la red neuronal. +## Motivación del proyecto: Democratización de la inteligencia artificial +Partiendo de las premisas de que la ciencia que no es replicable dudosamente es ciencias [1] y +cómo los avances tecnológicos se están construyendo actualmente fundamentalmente gracias al aumento de la potencia de cómputo [2][3]. +Es necesaria una democratización de la situación, un acercamiento a los nuevos resultados y aplicaciones +para organizaciones y usuarios con capacidades de cómputo más modestas. +Se pretende por tanto, realizar un estudio de la posible optimización de redes neuronales a raíz de: (1) el análisis detallados de la construcción y resultados matemáticos de éstas (como puede ser el teorema de aproximación universal) (2) Un estudio empírico de la velocidad o precisión de los resultados. -Con el fin de cuantificar el trabajo llevaré un registro [aquí](https://docs.google.com/spreadsheets/d/1TCcKQIKjKW9sMSU2f6obN9gHgv3c8UEdjmONkBlv42M/edit?usp=sharing). +Tanto (1) como (2) se desarrollarán ligados y se retroalimentarán entre ellos. +De esta manera se tratará de buscar algoritmos de redes neuronales que no requieran de una potencia masiva. -Bibliografía: -[1] Título: *Agile (data) science: a (draft) manifesto*. Autores: Juan Julián Merelo Guervós y Mario García Valdez. -Última fecha consulta: 13-02-21. URL: https://arxiv.org/abs/2104.12545 . Abstract: Science has a data management as well as a project management problem. While industrial grade data science teams have embraced the *agile* mindset, and adopted or created all kind of tools to manage reproducible workflows, academia-based science is still (mostly) mired in a mindset that's focused on a single final product (a paper), without focusing on incremental improvement and, over all, reproducibility. In this report we argue towards the adoption of the agile mindset and agile data science tools in academia, to make a more responsible, sustainable, and above all, reproducible science. +Bibliografía: +[1] Título: *Agile (data) science: a (draft) manifesto*. Autores: Juan Julián Merelo Guervós y Mario García Valdez. +Última fecha consulta: 13-02-21. URL: . Abstract: Science has a data management as well as a project management problem. While industrial grade data science teams have embraced the *agile* mindset, and adopted or created all kind of tools to manage reproducible workflows, academia-based science is still (mostly) mired in a mindset that's focused on a single final product (a paper), without focusing on incremental improvement and, over all, reproducibility. In this report we argue towards the adoption of the agile mindset and agile data science tools in academia, to make a more responsible, sustainable, and above all, reproducible science. -[2] Título: *The bitter Lesson*. Autor: Rich Sutton. URL: http://www.incompleteideas.net/IncIdeas/BitterLesson.html +[2] Título: *The bitter Lesson*. Autor: Rich Sutton. URL: Última fecha consulta: 13-02-21. Abstract: Aporta una visión negativa de la evolución del *machine learning* basada en enfoques antropocéntricos -y alaba el uso de métodos de propósitos generales y cómo ello conlleva que al aumentar la potencia cómputo los resultados mejoren. +y alaba el uso de métodos de propósitos generales y cómo ello conlleva que al aumentar la potencia cómputo los resultados mejoren. [3] Título: *A Universal Law of Robustness via Isoperimetry* autres: Sebastien Bubeck and Mark Sellke, libro: *Advances in Neural Information Processing Systems*, editor=A. Beygelzimer and Y. Dauphin and P. Liang and J. Wortman Vaughan, año: 2021, -URL: https://openreview.net/forum?id=z71OSKqTFh7 -abstract: Classically, data interpolation with a parametrized model class is possible as long as the number of parameters is larger than the number of equations to be satisfied. A puzzling phenomenon in the current practice of deep learning is that models are trained with many more parameters than what this classical theory would suggest. We propose a theoretical explanation for this phenomenon. We prove that for a broad class of data distributions and model classes, overparametrization is {\em necessary} if one wants to interpolate the data {\em smoothly}. Namely we show that {\em smooth} interpolation requires - times more parameters than mere interpolation, where - is the ambient data dimension. We prove this universal law of robustness for any smoothly parametrized function class with polynomial size weights, and any covariate distribution verifying isoperimetry. In the case of two-layers neural networks and Gaussian covariates, this law was conjectured in prior work by Bubeck, Li and Nagaraj. We also give an interpretation of our result as an improved generalization bound for model classes consisting of smooth functions. \ No newline at end of file +URL: +abstract: Classically, data interpolation with a parametrized model class is possible as long as the number of parameters is larger than the number of equations to be satisfied. A puzzling phenomenon in the current practice of deep learning is that models are trained with many more parameters than what this classical theory would suggest. We propose a theoretical explanation for this phenomenon. We prove that for a broad class of data distributions and model classes, overparametrization is {\em necessary} if one wants to interpolate the data {\em smoothly}. Namely we show that {\em smooth} interpolation requires + times more parameters than mere interpolation, where + is the ambient data dimension. We prove this universal law of robustness for any smoothly parametrized function class with polynomial size weights, and any covariate distribution verifying isoperimetry. In the case of two-layers neural networks and Gaussian covariates, this law was conjectured in prior work by Bubeck, Li and Nagaraj. We also give an interpretation of our result as an improved generalization bound for model classes consisting of smooth functions. From 01f38d315c4bc9d1fb5deb74c039d1814489484e Mon Sep 17 00:00:00 2001 From: Blanca Date: Mon, 13 Jun 2022 13:54:58 +0200 Subject: [PATCH 43/76] =?UTF-8?q?A=C3=B1ade=20excepciones=20ortogr=C3=A1fi?= =?UTF-8?q?cas=20#119?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/personal-dictionary.txt | 14 ++++++++++++-- Readme.md | 14 +++++++------- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/.github/workflows/personal-dictionary.txt b/.github/workflows/personal-dictionary.txt index db2eb9c..a99bac5 100644 --- a/.github/workflows/personal-dictionary.txt +++ b/.github/workflows/personal-dictionary.txt @@ -19,7 +19,7 @@ FSum Factorizando Feedforward Fn -forward_propagation +ForwardPropagation FromMatrixNN Funtores GN @@ -30,8 +30,9 @@ HU HUxx Halber HardTanh +Hardtanh Hornik -nn_from_data +IndicatorFunction IntervaloCentral Isoperimetry Iésima @@ -53,9 +54,11 @@ Merí Mesejo Multilayer NN +Nagaraj Nótese Ockham OneLayerNeuralNetwork +OptimizedNeuralNetwork Palett Perceptrón Pérez @@ -73,6 +76,7 @@ Sigmoidea Stinchcombe TFG TeoremaStoneWeiertrass +ThresholdFunction Tietze UMVUE Wilcoxon @@ -92,6 +96,8 @@ cienciadedatos codominio codominios contutor +covariate +covariates csv cte darkRed @@ -125,8 +131,10 @@ initializer insesgado insesgados ipynb +isoperimetry jejejeje jk +jl lcc linenos lineos @@ -137,6 +145,7 @@ modus muestral multicapa multicapas +nn nx nótese operandi @@ -146,6 +155,7 @@ pag parametrized paramétrico paramétricos +pdf perceptrones perceptrón png diff --git a/Readme.md b/Readme.md index 3368a19..20e626a 100644 --- a/Readme.md +++ b/Readme.md @@ -19,13 +19,13 @@ Contiene las siguientes funciones que mostramos con algunos ejemplos Red neuronal con pesos aleatorio y $n$ neuronas -``` julia -entry_dimesion = 2 +``` Julia +entry_dimension = 2 number_of_hidden_units = 3 output_dimension = 2 RandomWeightsNN( - entry_dimesion, + entry_dimension, number_of_hidden_units, output_dimension ) @@ -33,7 +33,7 @@ RandomWeightsNN( Creación a partir de matrices -```julia +```Julia S = [1,2,3] A = [3 4 1; 4 6 3; 1 1 1] B = [1 2 3; 3 2 3] @@ -47,7 +47,7 @@ Donde $n$ es el número de neuronas y $M$ es una cte que depende de la función ### Funciones de activación usuales -``` julia +``` Julia @ThresholdFunction(id,0)(-1) CosineSquasher(10) 1 @IndicatorFunction(0)(-0.1) @@ -61,13 +61,13 @@ Donde $n$ es el número de neuronas y $M$ es una cte que depende de la función ### Algoritmo de *forward propagation* -``` julia +``` Julia forward_propagation(h,RampFunction,x) ``` ### Algoritmo de *back propagation* -``` julia +``` Julia TODO :) ``` From 6c27e7e8a03170263e901bfd4d43de35889e9980 Mon Sep 17 00:00:00 2001 From: Blanca Date: Mon, 13 Jun 2022 14:00:50 +0200 Subject: [PATCH 44/76] =?UTF-8?q?Corrige=20la=20referencia=20a=20=C3=A1rbo?= =?UTF-8?q?les=20equilibrados=20#119?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../5-Estudio_experimental/3_detalles_implementacion.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Memoria/capitulos/5-Estudio_experimental/3_detalles_implementacion.tex b/Memoria/capitulos/5-Estudio_experimental/3_detalles_implementacion.tex index b476364..7b5054a 100644 --- a/Memoria/capitulos/5-Estudio_experimental/3_detalles_implementacion.tex +++ b/Memoria/capitulos/5-Estudio_experimental/3_detalles_implementacion.tex @@ -253,7 +253,7 @@ \subsubsection{Selección de la estructuras de datos adecuada} } } Se trata de un árbol binario de búsqueda - autobalanceado, esto es un grafo no cíclico que partiendo de uno concreto denominado raíz la \textit{altura} (número máximo de nodos hasta llegar a un extremo partiendo de la raíz) es mínima. + equilibrado, esto es un grafo no cíclico que partiendo de uno concreto denominado raíz la \textit{altura} (número máximo de nodos hasta llegar a un extremo partiendo de la raíz) es mínima. Esta estructura es muy interesante ya que no solo guarda los datos ordenados si no que su coste de búsqueda es $\mathcal{O}(n \log(n))$, pero su inserción y consulta de media términos de análisis de amortización tiene complejidad constante. En el peor de los casos sería $\mathcal{O}(n \log(n))$. From 19eef9bb0eda9a59cd275fe5fee39bd877706b5d Mon Sep 17 00:00:00 2001 From: Blanca Date: Wed, 15 Jun 2022 09:08:01 +0200 Subject: [PATCH 45/76] Aplica comentarios sobre asignaturas de JJ #118 --- Memoria/capitulos/0-Metodologia/asignaturas.tex | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/Memoria/capitulos/0-Metodologia/asignaturas.tex b/Memoria/capitulos/0-Metodologia/asignaturas.tex index 7599e05..5fab70b 100644 --- a/Memoria/capitulos/0-Metodologia/asignaturas.tex +++ b/Memoria/capitulos/0-Metodologia/asignaturas.tex @@ -4,8 +4,6 @@ \section{Asignaturas de grado relacionadas con el trabajo } -\epigraph{El todo es más que la suma de sus partes. -}{\textit{Aristóteles}} Si bien, es casi imposible enumerar de manera exhaustiva todas las asignaturas involucradas en este trabajo, ya que todas han influido en menor o mayor medida en la comprensión @@ -15,13 +13,11 @@ \section{Asignaturas de grado relacionadas con el trabajo } \item \textbf{Análisis Matemático}: todas las asignaturas del departamento de análisis matemático han tenido relevancia, ya sea en el modelado de espacios de funciones, para probar que las redes neuronales son aproximadores universales - y para la elaboración de nuestro propios resultados. + y para la elaboración de nuestros propios resultados. \item El \textbf{Aprendizaje Automático} y \textbf{Visión por Computador} sientan las bases de lo que son problemas de aprendizaje, tratamiento de los datos y evaluación del error, así como el uso práctico de las redes neuronales. \item \textbf{Estructura de Datos}: diseño e implementación de la modelización de las redes neuronales y sus algoritmos concernientes. - \item \textbf{Infraestructura virtual}:la metodología y buenas práctica seguidas han - bebido en gran parte de las recursos provenientes de tal asignatura. \end{itemize} En menor medida han tenido también relevancia: @@ -30,9 +26,10 @@ \section{Asignaturas de grado relacionadas con el trabajo } la ciencia de datos, también ha sido utilizada para los test de hipótesis. \item Otras asignaturas que han intervenido \textbf{Programación Orientada a Objeto} \textbf{Diseño y Desarrollo de Sistemas Informáticos} \item Nociones de \textbf{Topología} se han requerido para probar ciertos resultados analíticos. - \item \textbf{Álgebra, Métodos Numéricos I, Modelos I y Geometría III} esta agrupación de asignaturas + \item \textbf{Álgebra, Métodos Numéricos I, Modelos I, Geometría III y Metaheurística} esta agrupación de asignaturas han ayudado a la comprensión y servido como germen de ideas y relaciones a lo largo de todo el desarrollo de la memoria, por poner algunos ejemplos: la relación entre grafo y una matriz proviene de la asignatura de Modelos, la existencia de funciones cuyo error tiende a infinito de Métodos Numéricos, - resultados constructivos que después han podido ser implementados (Álgebra y Métodos Numéricos), algunos resultados propios sobres las funciones de activación (Geometría). + resultados constructivos que después han podido ser implementados (Álgebra y Métodos Numéricos), algunos resultados propios sobres las funciones de activación (Geometría), + conocimiento sobre algoritmos de optimización como los genéticos y \textit{KNN} (Metaheurística). \end{itemize} \ No newline at end of file From 7a0d4078f2c1a20de9f81920209b00df0a14092d Mon Sep 17 00:00:00 2001 From: Blanca Date: Wed, 15 Jun 2022 10:19:32 +0200 Subject: [PATCH 46/76] =?UTF-8?q?Refina=20la=20descripci=C3=B3n=20del=20ex?= =?UTF-8?q?perimento=20#109=20sobre=20bondad=20del=20algoritmo=20de=20inic?= =?UTF-8?q?ializaci=C3=B3n=20de=20pesos,=20incluye=20adem=C3=A1s=20detalle?= =?UTF-8?q?s=20sobre=20la=20base=20de=20datos=20elegida?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/personal-dictionary.txt | 4 +- .../aprendizaje.tex | 1 + .../2_descripcion_inicializacion-pesos.tex | 2 +- .../3_algoritmo-inicializacion-pesos.tex | 94 +++++++------------ 4 files changed, 40 insertions(+), 61 deletions(-) diff --git a/.github/workflows/personal-dictionary.txt b/.github/workflows/personal-dictionary.txt index a99bac5..50b06fd 100644 --- a/.github/workflows/personal-dictionary.txt +++ b/.github/workflows/personal-dictionary.txt @@ -198,4 +198,6 @@ tratabilidad usefulInformation ésima ésimas -ésimo \ No newline at end of file +ésimo +KNN +UCI \ No newline at end of file diff --git a/Memoria/capitulos/4-Actualizacion_redes_neuronales/aprendizaje.tex b/Memoria/capitulos/4-Actualizacion_redes_neuronales/aprendizaje.tex index 166c51e..66de940 100644 --- a/Memoria/capitulos/4-Actualizacion_redes_neuronales/aprendizaje.tex +++ b/Memoria/capitulos/4-Actualizacion_redes_neuronales/aprendizaje.tex @@ -560,6 +560,7 @@ \subsection{Algoritmos de actualización de pesos de una neurona} De esta manera $h$ modificará el valor de sus pesos de acorde al algoritmo de gradiente descendente \ref{eq:descenso-gradiente} que viene dado por \begin{algorithm}[H] + \label{algoritmo:gradiente-descendente} \caption{Algoritmo gradiente descendente conocidas las derivadas parciales.} \hspace*{\algorithmicindent} \textbf{Input}:$h$ red neuronal y conjunto de entrenamiento \\ \hspace*{\algorithmicindent} \textbf{Output:} $h$ actualizada de acorde al algoritmo de gradiente descendente. diff --git a/Memoria/capitulos/5-Estudio_experimental/2_descripcion_inicializacion-pesos.tex b/Memoria/capitulos/5-Estudio_experimental/2_descripcion_inicializacion-pesos.tex index fc101a2..11a6a85 100644 --- a/Memoria/capitulos/5-Estudio_experimental/2_descripcion_inicializacion-pesos.tex +++ b/Memoria/capitulos/5-Estudio_experimental/2_descripcion_inicializacion-pesos.tex @@ -64,7 +64,7 @@ \section{Descripción del método propuesto} La idea proviene de la demostración casi constructiva del teorema \ref{teorema:2_5_entrenamiento_redes_neuronales}. -Se desea inicializar los pesos de $h \in \rrnnsmn$, para la cual, una vez fijado el número $n$ de neuronas de nuestra red neuronal, será necesario determinar un subconjunto $\Lambda \mathcal{D}$ de datos de entrenamiento. +Se desea inicializar los pesos de $h \in \rrnnsmn$, para la cual, una vez fijado el número $n$ de neuronas de nuestra red neuronal, será necesario determinar un subconjunto $\Lambda \subset\mathcal{D}$ de datos de entrenamiento. La bondad del resultado depende en gran medida de $\Lambda$, puesto que a priori se carece de hipótesis, se seleccionará diff --git a/Memoria/capitulos/5-Estudio_experimental/3_algoritmo-inicializacion-pesos.tex b/Memoria/capitulos/5-Estudio_experimental/3_algoritmo-inicializacion-pesos.tex index eed9eb7..0fabfda 100644 --- a/Memoria/capitulos/5-Estudio_experimental/3_algoritmo-inicializacion-pesos.tex +++ b/Memoria/capitulos/5-Estudio_experimental/3_algoritmo-inicializacion-pesos.tex @@ -2,8 +2,6 @@ % Experimentación con ALGORITMO INICIALIZACIÓN DE PESOS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\textcolor{red}{ATENCIÓN ESTÁ DESDE AQUÍ HASTA FIN SECCIONES EN BORRADOR} - En la siguiente sección trataremos sobre la bondad del algoritmo expuesto \section{Contraste de hipótesis con inicialización aleatoria} @@ -18,12 +16,8 @@ \section{Contraste de hipótesis con inicialización aleatoria} la dimensión de entrada $d$, el número de neuronas en la capa oculta $n$, la dimensión de salida $s$ y la funciones de activación de cada neurona. -Por simplicidad fijaremos una función de activación -Así que deberemos de formular el test -para diferentes tamaños $n$, $d$, $s$. +Por simplicidad fijaremos una función de activación. -\textcolor{red}{Ahora mismo no tengo muy claro -los tamaños porque tampoco quiero que dure mucho tiempo la realización del experimento, los concretaré tras unas primeras pruebas}. \subsection{Descripción experimento} @@ -31,7 +25,7 @@ \subsection{Descripción experimento} \begin{enumerate} % Paso 0: Selección de data sets -\item Dado un conjunto de datos de entrenamiento $\D$ se separará el conjunto en +\item Dado un conjunto de datos de entrenamiento $\D$ se separará el conjunto en: \begin{itemize} \item $\D_i$ \textbf{Conjunto de datos de inicialización.} Debe de ser mayor que @@ -39,7 +33,17 @@ \subsection{Descripción experimento} \item $\D_t$ \textbf{Conjunto de datos de test.} Se utilizarán para el cálculo del error. -\end{itemize} +\end{itemize} + +En particular hemos utilizado el conjunto de datos \href{https://archive.ics.uci.edu/ml/datasets/Airfoil+Self-Noise + }{ + Airfoil Self-Noise} obtenido del repositorio de datos libres para aprendizaje automático \href{https://archive.ics.uci.edu/ml/datasets.php}{UCI}. +El conjunto elegido se corresponde a un problema de regresión con $1503$ instancias y $6$ atributos. +Para la implementación realizada podría utilizarse cualquier otra que provenga de un problema de regresión. + +Notemos que $d$ viene determinado por el número de atributos, +$s$ será uno ya que estamos frente a un problema +de regresión de variable real y $n$ vendrá dado como $n = \lfloor \alpha |\mathcal{D}_i| \rfloor$ con $\alpha \in (0,1)$; concretamente, en virtud de la observaciones mostrada en la sección \ref{section:inicializar_pesos} de que la probabilidad de que un dato no pueda ser utilizado para el algoritmo es nula; suponer que el $90\%$ de los datos sí serán válidos es una estimación lo suficientemente precavida como para que el algoritmo no \textit{falle}, es decir haremos $\alpha = 0.9$. % Paso 1: Construcción \item Fijados $n, d$ y $s$ se generarán dos redes neuronales: @@ -47,11 +51,13 @@ \subsection{Descripción experimento} \begin{itemize} \item Una inicializada de manera aleatoria con valores dentro de un rango de valores. - \item Otra inicializada con nuestro algoritmo. + \item Otra inicializada con nuestro algoritmo, se medirá el $t_i$ tiempo y el error $\varepsilon_i$ en $\D_t$. \end{itemize} % Paso 2: Evaluación del error -\item Utilizando $\D_t$ deberá de tomarse un registro del error dentro de tal muestra. +\item Con los datos de entrenamiento $D_i$ y el algoritmo de aprendizaje de \textit{Backpropagation}se entrenará la neuronal inicializada aleatoriamente hasta que iguale o supere el error $\varepsilon_i$. Se medirá el tiempo que necesita para ello $t_b$. + +Los tiempos $t_i$ y $t_b$ serán los que compararemos. \end{enumerate} Los pasos 2 y 3 se repetirán tantas veces como @@ -59,7 +65,7 @@ \subsection{Descripción experimento} \subsection{Contraste de hipótesis} -Se desea comparar si los errores observados efectivamente son notables: +Se desea comparar si las diferencias en los tiempos observados efectivamente son notables: Para ello se realizará un test de Wilcoxon, con las siguientes hipótesis @@ -78,6 +84,16 @@ \subsection{Requisitos técnicos} A la vista de todo el proceso es descrito surgen las siguientes necesidades técnicas que deberemos de implementar: +\subsubsection{Lectura y tratamiento de los datos} + +Se necesita ser capaces de leer los datos desde los ficheros descargados, es decir, ser capaces de transformar el formato \textit{.dat} en un \textit{.csv}. +Además, es necesario un tratamiento previo de los datos: +\begin{itemize} + \item Comprobación de que no hay valores nulos o perdidos. + \item Normalización de los datos. +\end{itemize} + + \subsubsection{Capacidad de crear una red neuronal aleatoria} Deberá de crearse una red neuronal con entradas dentro de un rango $[a,b]$ con $a < b$ reales, @@ -92,60 +108,20 @@ \subsubsection{Implementación del algoritmo de inicialización} \subsubsection{Función para medir el error} Deberá implementarse una función para medir el - error, no es lo mismo problemas de clasificación -que de regresión, así que deberemos de ir con -cuidado. - -Además deberá de realizarse una busca de los datos + error, puesto que nos hayamos frente a un problema de regresión utilizaremos el error cuadrático medio. -\subsubsection{ Forma de evaluar las redes neuronales} +\subsubsection{Forma de evaluar las redes neuronales} Dado una red neuronal, una función de evaluación y un datos ser capaz de aplicar el algoritmo de \textit{forward propagation} descrito en \ref{algoritmo:evaluar red neuronal}. +\subsubsection{Implementación del aprendizaje de una red neuronal} + +Se implementará el algoritmo propio de aprendizaje basado en \textit{Backpropagation} y ya optimizado +que describimos en los algoritmos \ref{algoritmo:gradiente-descendente} y \ref{algoritmo:calculo-gradiente}. -\subsubsection{Bases de datos de prueba} -\textcolor{red}{Nota: -Comenzaremos probando con bases de datos de juguete -y en función de tiempo y prestaciones ya veremos si merece la pena plantearse el uso de datos reales -} \subsubsection{Implementación del experimento} Deberá de implementarse una función que realice el experimento tal cual hemos descrito en \ref{ch07:experimento-1}. -Podrían utilizarse alguno de estos: - -\begin{itemize} - \item \href{https://github.com/JuliaStats/RDatasets.jl}{Julia contiene las base de datos estándar de R}. - \item \href{https://juliaml.github.io/MLDatasets.jl/stable/}{Otros paquetes básicos provistos también por la comunidad.} -\end{itemize} - -\subsection*{Estructura de datos} -Para mantener eficientemente ordenados los puntos -lo normal sería utilizar un \textit{conjunto ordenado} donde ir añadiendo los datos, que la propia estructura los ordene y tras esto sacar -los datos ya ordenados. -El problema es que el tipo de dato \text{set} en Julia está basado en diccionarios -\footnotetext{Véase \url{https://discourse.julialang.org/t/can-you-sort-a-set/47948/2} -link accedido por última vez el 3 de junio de 2022.} - -Por lo tanto hemos recurrido a una biblioteca externa -utilizado las estructuras de datos propias de Julia -\href{https://juliacollections.github.io/DataStructures.jl/v0.9/sorted_containers.html}{estructuras}. -La documentación del lenguaje está bastante regular. -No hemos encontrado en ese parque un conjunto ordenado. - - -\section{Base de datos real} - -\section{Base de datos } - -https://archive.ics.uci.edu/ml/datasets/Airfoil+Self-Noise - -base de datos con la que se va a probar - -\subsection{Lectura de los datos} - -1. El formato es un .dat que debe de transformarse a un .csv - - -\textcolor{red}{FIN DE LA SECCIÓN EN BORRADOR} \ No newline at end of file +% Se ha eliminado el contenido de aquí anterior porque eran notas en sucio \ No newline at end of file From 88834d7fe04d8a0815d30fc0f8e996d6ba007688 Mon Sep 17 00:00:00 2001 From: Blanca Date: Wed, 15 Jun 2022 10:33:48 +0200 Subject: [PATCH 47/76] =?UTF-8?q?Arregla=20ejemplo=20de=20uso=20de=20la=20?= =?UTF-8?q?biblioteca=20#118=20Se=20estaba=20llamando=20mal=20al=20m=C3=B3?= =?UTF-8?q?dulo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../capitulos/Ejemplo-uso-biblioteca.ipynb | 497 +++++++++++------- 1 file changed, 310 insertions(+), 187 deletions(-) diff --git a/Memoria/capitulos/Ejemplo-uso-biblioteca.ipynb b/Memoria/capitulos/Ejemplo-uso-biblioteca.ipynb index 4e902af..75e93c0 100644 --- a/Memoria/capitulos/Ejemplo-uso-biblioteca.ipynb +++ b/Memoria/capitulos/Ejemplo-uso-biblioteca.ipynb @@ -11,49 +11,12 @@ "cell_type": "code", "execution_count": 1, "metadata": {}, - "outputs": [ - { - "ename": "UndefVarError", - "evalue": "UndefVarError: OptimimizedNeuralNetwork not defined", - "output_type": "error", - "traceback": [ - "UndefVarError: OptimimizedNeuralNetwork not defined\n", - "\n", - "Stacktrace:\n", - " [1] eval\n", - " @ ./boot.jl:373 [inlined]\n", - " [2] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)\n", - " @ Base ./loading.jl:1196\n", - " [3] #invokelatest#2\n", - " @ ./essentials.jl:716 [inlined]\n", - " [4] invokelatest\n", - " @ ./essentials.jl:714 [inlined]\n", - " [5] (::VSCodeServer.var\"#164#165\"{VSCodeServer.NotebookRunCellArguments, String})()\n", - " @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/packages/VSCodeServer/src/serve_notebook.jl:19\n", - " [6] withpath(f::VSCodeServer.var\"#164#165\"{VSCodeServer.NotebookRunCellArguments, String}, path::String)\n", - " @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/packages/VSCodeServer/src/repl.jl:184\n", - " [7] notebook_runcell_request(conn::VSCodeServer.JSONRPC.JSONRPCEndpoint{Base.PipeEndpoint, Base.PipeEndpoint}, params::VSCodeServer.NotebookRunCellArguments)\n", - " @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/packages/VSCodeServer/src/serve_notebook.jl:13\n", - " [8] dispatch_msg(x::VSCodeServer.JSONRPC.JSONRPCEndpoint{Base.PipeEndpoint, Base.PipeEndpoint}, dispatcher::VSCodeServer.JSONRPC.MsgDispatcher, msg::Dict{String, Any})\n", - " @ VSCodeServer.JSONRPC ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/packages/JSONRPC/src/typed.jl:67\n", - " [9] serve_notebook(pipename::String, outputchannel_logger::Base.CoreLogging.SimpleLogger; crashreporting_pipename::String)\n", - " @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/packages/VSCodeServer/src/serve_notebook.jl:136\n", - " [10] top-level scope\n", - " @ ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/notebook/notebook.jl:32\n", - " [11] include(mod::Module, _path::String)\n", - " @ Base ./Base.jl:418\n", - " [12] exec_options(opts::Base.JLOptions)\n", - " @ Base ./client.jl:292\n", - " [13] _start()\n", - " @ Base ./client.jl:495" - ] - } - ], + "outputs": [], "source": [ "using Random\n", "using Plots\n", "include(\"../../OptimimizedNeuralNetwork.jl/src/OptimizedNeuronalNetwork.jl\")\n", - "using .OptimimizedNeuralNetwork" + "using Main.OptimizedNeuronalNetwork" ] }, { @@ -62,42 +25,53 @@ "metadata": {}, "outputs": [ { - "ename": "ErrorException", - "evalue": "syntax: invalid identifier name \".\"", - "output_type": "error", - "traceback": [ - "syntax: invalid identifier name \".\"\n", - "\n", - "Stacktrace:\n", - " [1] top-level scope\n", - " @ ~/repositorios/TFG-Estudio-de-las-redes-neuronales/Memoria/capitulos/Ejemplo-uso-biblioteca.ipynb:5\n", - " [2] eval\n", - " @ ./boot.jl:373 [inlined]\n", - " [3] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)\n", - " @ Base ./loading.jl:1196\n", - " [4] #invokelatest#2\n", - " @ ./essentials.jl:716 [inlined]\n", - " [5] invokelatest\n", - " @ ./essentials.jl:714 [inlined]\n", - " [6] (::VSCodeServer.var\"#164#165\"{VSCodeServer.NotebookRunCellArguments, String})()\n", - " @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/packages/VSCodeServer/src/serve_notebook.jl:19\n", - " [7] withpath(f::VSCodeServer.var\"#164#165\"{VSCodeServer.NotebookRunCellArguments, String}, path::String)\n", - " @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/packages/VSCodeServer/src/repl.jl:184\n", - " [8] notebook_runcell_request(conn::VSCodeServer.JSONRPC.JSONRPCEndpoint{Base.PipeEndpoint, Base.PipeEndpoint}, params::VSCodeServer.NotebookRunCellArguments)\n", - " @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/packages/VSCodeServer/src/serve_notebook.jl:13\n", - " [9] dispatch_msg(x::VSCodeServer.JSONRPC.JSONRPCEndpoint{Base.PipeEndpoint, Base.PipeEndpoint}, dispatcher::VSCodeServer.JSONRPC.MsgDispatcher, msg::Dict{String, Any})\n", - " @ VSCodeServer.JSONRPC ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/packages/JSONRPC/src/typed.jl:67\n", - " [10] serve_notebook(pipename::String, outputchannel_logger::Base.CoreLogging.SimpleLogger; crashreporting_pipename::String)\n", - " @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/packages/VSCodeServer/src/serve_notebook.jl:136\n", - " [11] top-level scope\n", - " @ ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/notebook/notebook.jl:32\n", - " [12] include(mod::Module, _path::String)\n", - " @ Base ./Base.jl:418\n", - " [13] exec_options(opts::Base.JLOptions)\n", - " @ Base ./client.jl:292\n", - " [14] _start()\n", - " @ Base ./client.jl:495" - ] + "data": { + "text/plain": [ + "La matrix de pesos de las neuronas, W1, es:\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "3×3 Matrix{Float64}:\n", + " 0.916229 0.764541 0.339163\n", + " 0.137939 0.103458 0.461902\n", + " 0.903919 0.126394 0.196443" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "\n", + "La matrix de pesos de la salida, W2, es:\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "2×3 Matrix{Float64}:\n", + " 0.700526 0.931524 0.826037\n", + " 0.97602 0.56216 0.820643" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ @@ -105,7 +79,7 @@ "number_of_hidden_units = 3\n", "output_dimension = 2\n", "\n", - ".RandomWeightsNN(\n", + "RandomWeightsNN(\n", " entry_dimesion,\n", " number_of_hidden_units,\n", " output_dimension\n", @@ -118,49 +92,60 @@ "metadata": {}, "outputs": [ { - "ename": "ErrorException", - "evalue": "syntax: invalid identifier name \".\"", - "output_type": "error", - "traceback": [ - "syntax: invalid identifier name \".\"\n", - "\n", - "Stacktrace:\n", - " [1] top-level scope\n", - " @ ~/repositorios/TFG-Estudio-de-las-redes-neuronales/Memoria/capitulos/Ejemplo-uso-biblioteca.ipynb:4\n", - " [2] eval\n", - " @ ./boot.jl:373 [inlined]\n", - " [3] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)\n", - " @ Base ./loading.jl:1196\n", - " [4] #invokelatest#2\n", - " @ ./essentials.jl:716 [inlined]\n", - " [5] invokelatest\n", - " @ ./essentials.jl:714 [inlined]\n", - " [6] (::VSCodeServer.var\"#164#165\"{VSCodeServer.NotebookRunCellArguments, String})()\n", - " @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/packages/VSCodeServer/src/serve_notebook.jl:19\n", - " [7] withpath(f::VSCodeServer.var\"#164#165\"{VSCodeServer.NotebookRunCellArguments, String}, path::String)\n", - " @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/packages/VSCodeServer/src/repl.jl:184\n", - " [8] notebook_runcell_request(conn::VSCodeServer.JSONRPC.JSONRPCEndpoint{Base.PipeEndpoint, Base.PipeEndpoint}, params::VSCodeServer.NotebookRunCellArguments)\n", - " @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/packages/VSCodeServer/src/serve_notebook.jl:13\n", - " [9] dispatch_msg(x::VSCodeServer.JSONRPC.JSONRPCEndpoint{Base.PipeEndpoint, Base.PipeEndpoint}, dispatcher::VSCodeServer.JSONRPC.MsgDispatcher, msg::Dict{String, Any})\n", - " @ VSCodeServer.JSONRPC ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/packages/JSONRPC/src/typed.jl:67\n", - " [10] serve_notebook(pipename::String, outputchannel_logger::Base.CoreLogging.SimpleLogger; crashreporting_pipename::String)\n", - " @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/packages/VSCodeServer/src/serve_notebook.jl:136\n", - " [11] top-level scope\n", - " @ ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/notebook/notebook.jl:32\n", - " [12] include(mod::Module, _path::String)\n", - " @ Base ./Base.jl:418\n", - " [13] exec_options(opts::Base.JLOptions)\n", - " @ Base ./client.jl:292\n", - " [14] _start()\n", - " @ Base ./client.jl:495" - ] + "data": { + "text/plain": [ + "La matrix de pesos de las neuronas, W1, es:\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "3×4 Matrix{Int64}:\n", + " 3 4 1 1\n", + " 4 6 3 2\n", + " 1 1 1 3" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "\n", + "La matrix de pesos de la salida, W2, es:\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "2×3 Matrix{Int64}:\n", + " 1 2 3\n", + " 3 2 3" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ "S = [1,2,3] \n", "A = [3 4 1; 4 6 3; 1 1 1]\n", "B = [1 2 3; 3 2 3]\n", - ".FromMatrixNN(S, A, B)" + "FromMatrixNN(S, A, B)" ] }, { @@ -169,42 +154,15 @@ "metadata": {}, "outputs": [ { - "ename": "ErrorException", - "evalue": "syntax: invalid identifier name \".\"", - "output_type": "error", - "traceback": [ - "syntax: invalid identifier name \".\"\n", - "\n", - "Stacktrace:\n", - " [1] top-level scope\n", - " @ ~/repositorios/TFG-Estudio-de-las-redes-neuronales/Memoria/capitulos/Ejemplo-uso-biblioteca.ipynb:6\n", - " [2] eval\n", - " @ ./boot.jl:373 [inlined]\n", - " [3] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)\n", - " @ Base ./loading.jl:1196\n", - " [4] #invokelatest#2\n", - " @ ./essentials.jl:716 [inlined]\n", - " [5] invokelatest\n", - " @ ./essentials.jl:714 [inlined]\n", - " [6] (::VSCodeServer.var\"#164#165\"{VSCodeServer.NotebookRunCellArguments, String})()\n", - " @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/packages/VSCodeServer/src/serve_notebook.jl:19\n", - " [7] withpath(f::VSCodeServer.var\"#164#165\"{VSCodeServer.NotebookRunCellArguments, String}, path::String)\n", - " @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/packages/VSCodeServer/src/repl.jl:184\n", - " [8] notebook_runcell_request(conn::VSCodeServer.JSONRPC.JSONRPCEndpoint{Base.PipeEndpoint, Base.PipeEndpoint}, params::VSCodeServer.NotebookRunCellArguments)\n", - " @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/packages/VSCodeServer/src/serve_notebook.jl:13\n", - " [9] dispatch_msg(x::VSCodeServer.JSONRPC.JSONRPCEndpoint{Base.PipeEndpoint, Base.PipeEndpoint}, dispatcher::VSCodeServer.JSONRPC.MsgDispatcher, msg::Dict{String, Any})\n", - " @ VSCodeServer.JSONRPC ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/packages/JSONRPC/src/typed.jl:67\n", - " [10] serve_notebook(pipename::String, outputchannel_logger::Base.CoreLogging.SimpleLogger; crashreporting_pipename::String)\n", - " @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/packages/VSCodeServer/src/serve_notebook.jl:136\n", - " [11] top-level scope\n", - " @ ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/notebook/notebook.jl:32\n", - " [12] include(mod::Module, _path::String)\n", - " @ Base ./Base.jl:418\n", - " [13] exec_options(opts::Base.JLOptions)\n", - " @ Base ./client.jl:292\n", - " [14] _start()\n", - " @ Base ./client.jl:495" - ] + "data": { + "text/plain": [ + "2-element Vector{Int64}:\n", + " 86\n", + " 114" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ @@ -213,10 +171,10 @@ "A = [3 4 1; 4 6 3; 1 1 1]\n", "B = [1 2 3; 3 2 3]\n", "v = [1,2,2]\n", - "h = .FromMatrixNN(S, A, B)\n", + "h = FromMatrixNN(S, A, B)\n", "# Ejemplo de evaluación h(v) \n", "# con función de activación ReLU y forward_propagation \n", - ".forward_propagation(h, ReLU,v )" + "forward_propagation(h, ReLU,v )" ] }, { @@ -225,42 +183,207 @@ "metadata": {}, "outputs": [ { - "ename": "UndefVarError", - "evalue": "UndefVarError: nn_from_data not defined", - "output_type": "error", - "traceback": [ - "UndefVarError: nn_from_data not defined\n", - "\n", - "Stacktrace:\n", - " [1] top-level scope\n", - " @ ~/repositorios/TFG-Estudio-de-las-redes-neuronales/Memoria/capitulos/Ejemplo-uso-biblioteca.ipynb:14\n", - " [2] eval\n", - " @ ./boot.jl:373 [inlined]\n", - " [3] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)\n", - " @ Base ./loading.jl:1196\n", - " [4] #invokelatest#2\n", - " @ ./essentials.jl:716 [inlined]\n", - " [5] invokelatest\n", - " @ ./essentials.jl:714 [inlined]\n", - " [6] (::VSCodeServer.var\"#164#165\"{VSCodeServer.NotebookRunCellArguments, String})()\n", - " @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/packages/VSCodeServer/src/serve_notebook.jl:19\n", - " [7] withpath(f::VSCodeServer.var\"#164#165\"{VSCodeServer.NotebookRunCellArguments, String}, path::String)\n", - " @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/packages/VSCodeServer/src/repl.jl:184\n", - " [8] notebook_runcell_request(conn::VSCodeServer.JSONRPC.JSONRPCEndpoint{Base.PipeEndpoint, Base.PipeEndpoint}, params::VSCodeServer.NotebookRunCellArguments)\n", - " @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/packages/VSCodeServer/src/serve_notebook.jl:13\n", - " [9] dispatch_msg(x::VSCodeServer.JSONRPC.JSONRPCEndpoint{Base.PipeEndpoint, Base.PipeEndpoint}, dispatcher::VSCodeServer.JSONRPC.MsgDispatcher, msg::Dict{String, Any})\n", - " @ VSCodeServer.JSONRPC ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/packages/JSONRPC/src/typed.jl:67\n", - " [10] serve_notebook(pipename::String, outputchannel_logger::Base.CoreLogging.SimpleLogger; crashreporting_pipename::String)\n", - " @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/packages/VSCodeServer/src/serve_notebook.jl:136\n", - " [11] top-level scope\n", - " @ ~/.vscode/extensions/julialang.language-julia-1.6.17/scripts/notebook/notebook.jl:32\n", - " [12] include(mod::Module, _path::String)\n", - " @ Base ./Base.jl:418\n", - " [13] exec_options(opts::Base.JLOptions)\n", - " @ Base ./client.jl:292\n", - " [14] _start()\n", - " @ Base ./client.jl:495" + "data": { + "text/plain": [ + "La red neuronal obtenida es :" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "La matrix de pesos de las neuronas, W1, es:\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "5×2 Matrix{Float64}:\n", + " 0.0 1.0\n", + " 1.33333 3.0\n", + " 1.33333 1.0\n", + " 1.33333 -1.0\n", + " 1.33333 -3.0" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "\n", + "La matrix de pesos de la salida, W2, es:\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "1×5 Matrix{Float64}:\n", + " 16.0855 -15.6038 -3.48169 3.40547 0.693147" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAIAAAD9V4nPAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzdd1wT9/8H8M9dQkJCAoSdqAiCKEtUUFyMIM6WOttabdWqdbTfWrV2aK3fWrW/Vm21ttY6Wm2/jqpVa611iwhORBmCCIKI7BUgZJB1vz+uTdOwAgQu4/18+IccN95cknvlPp/73GEEQSAAAADAWuFUFwCAGUhOTv7iiy/i4+OpLgQAYHzWEoRqtTo3N/fGjRt3796trq6muhwTVVRUNH/+/O+++647NyqTyX7++edVq1YtWrTogw8+6M5Na3300Ufz589vqXWkoqJi8uTJ+/fvDwkJMdYWd+3aNX/+/KdPn7Y+25UrVxYtWnTlyhVjbVfXw4cP58+f//PPP3fFyrvIV199tWjRopqaGqoLMWkbN26cP39+Q0MD1YWYD8LSPX369I033nByctL9q0NCQr799luFQkF1ddR4/Pjxrl27bt++rTc9NTUVITRlypRuq0Qmk4WGhiKEaDQaj8cLCAjotk3r6tu3L0JIpVI1/ZVarR47dqyLi0tubq4Rt/jSSy8hhJKTk1ufbdu2bQihr7/+2oib1rp06RJC6I033uiKlXcRoVCIEHr69CnVhZi0oUOHIoQqKyupKuD1119vNm6+++47qkpqHb1LU5Zyly9fnjZtWl1dXa9evV588UUvLy+lUpmdnX327Nn//Oc/OTk5X3/9NdU1UuDOnTuLFi1atWoV+YHR4nA40dHRwcHB3VbJmTNnUlJSpk6deujQISaT2W3b1TNs2LAePXpgGNb0V//3f/+XmJh4+fJlX19fI24xMDAwOjra3t7eiOsEwKSEhobyeDzdKT179qSqmNZZchBmZ2dPnjy5oaFh1apVn3zyCYPB0P6qoaHh888/hwYWPT4+Pt3cDZaTk4MQmjx5MoUpiBBqqXlQo9EEBAQkJiaSp61GtHbt2rVr1xp3nQCYlM2bN5Nn8KbPkoNw+fLlDQ0N8+fP/+yzz/R+xeFwNmzYoNdZqFKprl27lpmZqdFofH19Y2JiWCyW7gyPHz+uq6sLCAhgMBhXrlzJyspycHCYOHGim5sbOUNOTk5CQoJEIgkPDx8+fLjusiUlJaWlpV5eXs7Ozrdu3bp79y5BEBEREQMHDmxaeVZWVkZGRklJCYPBGDBgwMiRI3H8X725BQUF1dXVfn5+HA7n5s2b9+7dU6vVS5cuJc9pSkpKkpOTCwsL1Wq1j49PTEyMnZ2d7l/x5MkThFBpaWlKSgo5kSxMJpNlZWXxeLw+ffoghHJzc+vr6/38/Lhcrl6F5K/69evH4XDIKfn5+ffv3y8qKsIwrH///tHR0brfPJoSiUT5+fkPHz4kCyYr6d27t4uLS05OjlgsDg4O1l2DUqlMT0/ncDj9+vUjp5SVlRUXF3t6erq6uj548CAxMVGhUAwcODAyMrLZc7u8vLykpKSKigo3N7d+/foNHTpUu1czMzPlcnnTtEtPT6+oqMjPz8/NzY2NjXVxcdH9bXsL0PXkyZOamhp/f382m607/fbt27dv36bT6cOHDx80aFBLi8vl8vj4eLK1NjAwMCoqysbGRm+e8vLy27dvFxYWqlQqLy+vmJiY9p6ASiSS7Oxs3X2u9ysul+vn59fssgqFIiMjg1y2pqbm3LlzJSUlkZGR2kaI6urqy5cvFxUVsVis8PDwwYMHN11JY2PjuXPnHj9+7OrqOnbsWA8PD0PKJj9r3t7eTk5Oqamp169fV6lUQ4YMGTFiRLPzP3z48MaNG9XV1QKBYPTo0Xw+X/e3HXs3Xr9+XSKRvP766+Qpkd6xZfTo0ba2trpbIY8tgYGBDAYjISEhPT2dwWBER0f7+/vrVatWq5OTk3Nzc8vKyng83rBhw4KCggzZLc3uJfKDn56enpiYqFKpQkNDR40a1YG1mT2q22a7Sn5+PoZhdDq9qKjIkPlTU1P1Pu09evS4ePGi7jzPP/88QujixYu6R0w7O7tz586p1ep33nlH9/C3cOFC3WX/+9//IoS+++675557Tncrs2fP1u2qLCkp8fb21nuNAgMDs7Ozddc2d+5chNDx48ejoqK0s5FdXDExMXpHYRcXl9OnT2uXnTBhQtO3wc8//0w06SP85JNPEEKfffaZ3r5qbGx0cXFhsVi1tbUEQSgUiqYfV09Pz5s3b7ayw3/99demZezatYsgiNGjRyOEnjx5ojt/cXExQigiIkI75f/+7/8QQjt27FiwYIHuSiZMmCCXy3WXra6unjp1qt5uCQoK0s7QtI+wqqpq7NixuvOz2ext27bprtbwAppq2kcolUonT56su54ZM2Zs2bIFNekjPHnypN7B2s/PLz09XXeeSZMm6X15cnR0PHLkiO48bfYRyuVyV1dXOzu7uro6vV998cUXCKGPP/64pWWfPXtGvl4HDx7Ufg9btWoVQRAajWb9+vV63zLHjRtXU1Oju4aMjAwfHx/tDEwmc+/evYb0EX700UcIof3798+cOVN3E9OmTVMqlbpzVlRU6H0emUzmxo0bdedp17vxm2++0d3ogwcPCIK4d+9e02PLpUuXdFc4ceJEhFB8fLxuWuM4rreHz58/r3e5A0IoLi6O/CRqGdJHSB6R9uzZM2fOHN21TZo0qfMXT5B9hFeuXOnkerqNxQbhjz/+iBAaOnSoITMXFxeTX/bffvvttLS0rKysdevW0el0JpN5//597WxkEPbu3VsoFP7xxx/Jyclr1qzBcdzNze3jjz92d3ffu3fv3bt3f/nlF/Kr6++//65dlnzbCQSCvn37/vnnn4WFhZcvXyavQly2bJl2ttzc3PDw8O+++y4xMfHx48fXrl2bN28eeaTTfXeSQejp6Tlw4MB9+/bduHHjf//7n1qtJghi+PDh69evv3TpUnZ2dnJy8vr169lsNovF0l7rce/evdWrVyOEZsyYcfFvJSUlRJMgLCgowHHcz89Po9Ho7q5jx44hhF599VXyR7lcHhgY+OWXX169ejUnJ+fmzZvvvvsunU53dXXVO7TpKi8vv3jx4osvvkgeT8kyyG8t7Tr0eHt79+rVa9++fSkpKcePHycPnbrhLZPJyLON6OjoM2fO5OXl3bp169tvvx03bpx2Hr0gVCqV5An9uHHjkpKScnNz9+3bR75Ddu/e3d4CmtU0CGfPno0QGjFiRFJSUmFh4YkTJ3r16iUQCNC/g/CPP/7AcdzJyWnbtm337t1LSUn5+OOP6XS6h4dHRUWFdraYmJi1a9deuHDh4cOHKSkpX3zxhb29vY2NTVpamnYeQy6WWblyJUJo586duhM1Go2fnx+O4wUFBS0tSAahh4cHi8V69913//zzz4SEhMTERIIgyLdf//79Dx8+nJWVlZiY+PLLLyOEhEKh9p1G9usjhJYuXZqVlZWXl7dx40Ymk+nu7m5gEHp7e/v4+Bw4cCAlJeXIkSOenp5kUGlnk0qlAwYMQAi99NJLly9fzs7OPnHiBHmCq3tNR7vejZ6enr179/7222+TkpKOHz9eXl5eVFTk7OxM/iHkseWTTz6h0WhMJjM1NVW7OBmE3t7eI0eO/O2331JSUnbs2EG2xJA7jXTgwIEXXnjh0KFDd+7cyc7OPnPmTHR0NEJo1qxZuuUZHoTe3t5eXl4///xzSkrKsWPHvLy8EEJfffWVdja1Wn3eAHqZRwZhbGzs4MGDBwwY8Pzzz+/cuVMqlbZSD7UsNgjJD8OcOXMMmfnNN99ECM2bN0934qeffkoeCrVTyCAcMmSI7qlDXFwcQsjGxubhw4faiQcOHEAIzZ49WzuFfNvR6fTHjx9rJ5aXl9vZ2bV52krG3qlTp/SmuLu7N/2q3tTevXsRQu+99552yqFDh9DfX891Nb1qlPyY6Z3bac+MW9noxx9/jBD69ttvW6/tvffeQwgdPXpUd2K7Dj1cLre4uFg7MTk5GSE0ePBg7ZTNmzeTn0m9swFdekFI7p/AwEDdLx/kGAYXFxft59nAApqlF4QPHjxACLm5uYnFYu08KSkp5FmsNggVCkWvXr1sbGzIpnW9XfHRRx+1ssWjR48ihBYtWqSdYkgQPn78GMfxkJAQ3Ynkgs8991wrC5JB2PQ7waNHj3Ac9/T0FIlEutPJM7OzZ8+SP27cuBEh9Morr+jOQ36IDAxCZ2fnqqoq7UTy5YuOjtZOITexYMEC3WVLSkrs7e1dXV215/TtejcyGAzdDzhBEIsXL266lXXr1iGEJkyYoJ1CBmFoaKjuseXLL7/U+6LclFwuDwoKotFo5eXl2omGB6Gjo6PugomJieS3Me0UiUSCDGBvb6+7cjIIaTQan8/XNikHBAQUFha2UhKFLHYcYV1dHUKoaedWs06ePIkQ+vDDD3UnLl26lM1mX7p0SSwW605/5513aDSa9keycXLChAn9+/fXm0h2xemaPHmybmuPm5vba6+9plKpTp061Up5L7zwAkLozp07etOXLFliSK/PpEmTml3cEGSzyU8//aSdUlFRcf78+Z49e7beDd5SzUY3a9Ys8rSJFBYW5uTkpLvnyVT79NNP6XRDe8RPnDiBEFq5cqVux5tQKAwPD6+qqrp27Vq7CjDEb7/9hhBatGiRts8VITR48GC9nZyQkPDs2bOJEyfqdWcuWbIEw7CzZ8+2sonnn3+eRqO19xXx8fGJjY1NS0sjA560Z88ehNDChQvbXJzFYi1dulR3ysGDBzUazdtvv+3o6Kg7nfwy+ueff5I/kjvk3Xff1Z1n6dKlrXc865o3bx55KkaKiopiMBi6rwv5bXXNmjW6S/H5/ClTplRWVur+vYabPn267gcc/X1s0RsgSx5bLly4oHdsWb58ue6xhWycb/29xGQyx48fr1artf397TJnzhztJQ4IoVGjRrHZbN0tMhiM7QYgv25qxcXFJSYmNjY2lpSUSKXSK1euBAUFZWVlvfjii4RJ3svMYi+WIQ8oUqm0zTlrampKS0u5XC55WqDl4ODQt2/ftLS07OzsIUOGaKfrXR3g6uqKENJblpxYXl6ut62mI7LJi2WysrK0UzIyMjZt2pSSkvLs2TPdIbFVVVV6ywYGBjb9cyoqKjZt2nTp0qXi4mLdRZoubogXX3xx6dKlhw8f/uqrr8hOnQMHDiiVyrlz5+p+YgsKCj7//POkpKTi4uLa2tpObrRdml6s4e7u/vDhw8bGRiaTSRBERkYGhmHNXpTUEvLlaHqtSlhY2O3bt7OyssaNG2dgAe3aYtO3x6BBg3RH09+/fx8hVFlZqfelDSHEZDILCgq0P4pEos2bN587d664uLiiokI7vQN3k1iyZMmFCxf27NlDfgqqqqp+++23nj17kicxrevdu7fuhVraPyE5OVnvTyDfKto/ISsrC8dxvZE8Tk5Onp6ejx8/NqRsvdcFx3FXV9eysjLyR6lUmp2dzWQyd+7cqbcguf6CgoIOXDYSEBCg+2N1dXV5ebm9vb3e2BtHR0cfH5+MjIxHjx6FhYVpp+t1JZLtwNqaSWfOnNm5c+fDhw9LSkrkcrl2esc+a82+e3XfSHQ6/e23327vaqdMmaL9P41GEwqF8fHx/fr1u337dmJiYmRkZAdK7VIWG4TkgJX8/Pw25yTDRvdrkRb5RtT71qZ3mR/ZeKU3kbxOoel3HzIgdZHb1W4iMTFx7NixarVaKBTGxcWRHeN5eXl79uxRq9V6y+pdxIgQqqioGDJkSGFhYVhY2OzZs52cnOh0ulqt/uijj5oubgg7O7tp06bt37//9OnTZGseOdLg1Vdf1c6TnZ09YsSIurq6UaNGTZw4kcfj4TheVVW1ZcuWjm20XfT2PPr3zpdKpSqVytHRUe/SjNaRbwny1ddlyPsBtfzqt7nFlt4eWiKRCCGUmppKXm2ri8Viac+W6urqwsPDc3NzQ0JCZs6c6ezsTJ7arlmzRqVSGV4VKS4urnfv3ocPH96yZYu9vf2PP/7Y2Ng4f/58Q86wm75Fye9J586d0/0iReLxeOREjUYjkUh4PF7T8z83NzcDg7DZ10X7opB9CiqVavfu3U2X5fF4HXvr6v29rR9bMjIyWn8vNX0jff3118uWLbO3t584caKPjw/Z4nXlypULFy504JVtukX0771Ebj0vL6/N9dBotKZX+elycXEZPXr0sWPH7ty5A0HYfchvc3fu3Kmrq3NwcGhlTvLNpPutWYv8LmbEUc9Nt0KeNWo3sWbNGrlcfvr0abIfjnT48GGyMapN27dvLyws/OCDDz7//HPtxGfPnpG9Jh0zZ86c/fv3//TTTy+99FJqampaWtqoUaN0v7pu2LBBJBJ99913S5Ys0U5MSkoir3jsAPK7hUaj0Z1oYF+FHjabbWNjU1dXJ5VKm37mW0K+JcrLy/Wu1y8tLUVGfT/obbGlt4febMuWLSP7t1qya9eu3NzcJUuW6N4tr66urul5pCFoNNr8+fPXrl17+PDhhQsX/vDDDzQaraVbh+hpOoyE/BOOHDkyfvz4lpbCcdzOzq62trbpWXXTVpaOIcvgcDhVVVV6l9fq6cy70bjHFplMtmbNGkdHx3v37ummTlFR0YULFwxfT7vIZDK95q5m2dvbk71RrSC/R3bsg9zVLDYIQ0JCBg8efO/eve3bt5MXbjSlUqnodDqPx+vRo0dxcfGjR490j+8ikSg3N5dOp+t2/nUS2S6k6969ewgh7UigtLQ0e3t7vUu6DW/9T0tLQwjNmDGj6SZ0kecHBn6FjIqK8vHxuXDhQmlpKdlZqHe9tYEbNRw5NqC8vJwczkjSbT02HNkompycfO/ePcNbuoKCgjIzM+/evavXVkn2G3Vs2FbryFbu+/fvT58+XXe63ktPttbeuHGj9bUZ/RV544031q9fv3Pnzr59++bk5JDniB1b1aBBg/7888/r16+3EoQIoaCgoNu3b6empoaHh2snVlZWFhYWdmy7ejgcTt++fXNzczMzM1u/lVJn3o1OTk4CgaCkpCQnJ0e3EbKmpiYvL6+9x5a8vLyGhobx48frnXt15pVtk42NzVtvvdXmbIa0uJBvS9O8uYzFXiyDENq8eTOO4xs2bCAv99dz7Ngx7XkSefTRPYtCCG3btk0mk40fP173+oVO+v3338l7qZBKS0sPHjxoY2NDXlqCEHJxcZFIJLodOSUlJbt27TJw/WTLjO7BQqVSrV+/Xm+2Hj16IIS01/W1DsOwV199VaVS/fTTT4cPH2axWHoHa7JBT3ejDQ0Nep3n7UJ+zrXXTSCE1Gr1pk2bOra21157DSH08ccfKxQKAxch/8CvvvpKd5GLFy/evXvX3d09IiKiY5W0YsqUKRiG7d69u76+XjsxOTk5ISFBd7aYmBhPT8+EhIRz5841XYm2R7np20Cj0ZBXKnaMh4fH5MmT09LSli9fjgy7TKYls2fPptFoO3fubHrDcY1Go+3Unzp1KkKIvGxSa/v27UqlssOb1kOe1Dbba6DbN9/Jd+O0adNQC8eWiRMn6nWgtk77QdM9PT137lybX4w6w8bG5lsD6H7e6+vrZTKZ3nqOHz+elJTEYDD0hueaCEsOwpiYmO3bt6vV6pdeemn8+PG7du06d+7c6dOnN2/ePHTo0Jdeekl7Lr969Wp3d/f9+/cvXrz49u3b9+/fX7Vq1YYNG1gslt47uJN69Ogxfvz4X3/9NTc39/Tp07GxsVKpdMWKFdrx0UKhUK1WT548+dKlSzk5Ob/88ktkZGSzfQzNIi8y/M9//nP06NGcnJyLFy+OHTuW7FjSFRAQwGazT548uWLFih07duzevTs3N7eV1c6ZMwfDsPXr15eXl0+dOlXvej9yo7NmzTpz5kxOTs7vv/8eGRlp+NV9Tb344os0Gm3z5s2fffbZ9evXjx49GhkZWVlZ2bG1LV68ePjw4VevXo2Kijpx4kRmZmZCQsLWrVtbuep16tSpkZGRWVlZ48ePv3jxYmZm5s6dO8mxbps2beqKu8H1799//vz5VVVVo0ePPn/+fE5OzoEDByZNmkSOftNiMBg//PADnU6fNGnSe++9d/bs2YyMjAsXLmzfvj08PHzDhg3kbOSftnLlygMHDjx69Cg+Pj4uLi4/P7/p3WcMR7Z7p6en9+rVq9l7MhjIz89v3bp11dXV4eHhW7ZsuXr1anp6+unTpz/55BMfHx/tlUFvvvmmt7f3sWPHFi5cmJKSkpGR8fHHH2/evFnvTgKdsXz58qFDh54+fToqKoocbnjr1q3Dhw/PmzdP9+Sv2Xej4VemfPTRR25ubvv27dMeWz788MONGzeyWCxyxIXh3N3d/f39s7Ky5s2bl5ycnJWVtW3btpdfflm3WlNw9+7dHj16LF68+Jtvvjl58uSuXbumT59OXi+6atUqcnioyaFo2Eb3uXLlit6tpRFCHA5nyZIlZWVl2tmysrL0Lizs06eP7lBW4u/xc+TdIrTIi0f0bgBBnkn07dtXO4UctfP999+TX3VJGIYtXrxYd+RQdXW13r3Z4uLiyMEVukORyHGE8fHxen+sWq3Wu8tJQEAAOUatf//+unMeP36cHDxLavbOMrrIAYWoueGDMplMt0cTITRy5MikpCT071GYzWp2HCFBEDt27NCN0mHDhpGNhE1Hbn3//fd6y5LNjDKZTDulrq5u1qxZel1B4eHh2hma3lmmtrZW98o3hJCDg4PuaPp2FdBU0wH1crlc704oc+fOJU+J9O4sc/XqVb2rExFCPXv2PHTokHaeZcuW6fbP+fr6pqens1gsgUCgnaddT5/QaDRkO966desMmV97Z5lmf7t79+6mX+9CQkJ0x5g/evRI989ksVgHDhww/M4yBw8e1Jveq1cvBoOhO6W+vn7evHl6V/0wmcxJkybpztaZdyNBEA8ePNBrY296bCEvwc3MzNSdSMat7l1B7t+/r9u0iOP46tWrySafH3/8UTub4eMI9+3bpzedHP7RyoJtun37dtNWNGdn561bt+rdmsN0YIRJjuowuqdPn969e7eyspLBYPTp02fIkCFNGyU0Gg35PUulUvn5+Y0YMULvG3RZWZlUKu3Zs6fe/bsrKip4PJ7ufdYJgnjy5ImNjY32688nn3yybt26ffv2zZ07NzU1lewsHDFiRNO7OBIEcefOnaysLBqNNnjw4KCgIJlMRg7w0F5VWFlZKRaL+Xx+s03z2dnZ9+/fl0qlffv2Je9TqleMlkwmI78NuLm5cTgchULx9OlTDofT9Ht3TU0Neb2fl5dXsxcXpKampqenk3epJu858OzZMxaL1fpXeHK17u7uTV+OZ8+eXb16VS6X9+/ff9SoURqN5unTp7a2ttpBe7W1tTU1NS4uLnpXHBQVFSkUCm9vb70rNYqKiq5fv15bW0s+70m3q+/p06cKhaLpRQG5ubm3bt2SSCQ9e/aMiorSG5ba3gJ0lZWVicViT09PvfPLjIyMO3fu0On0IUOGBAQE1NXVVVdXOzs7613wpdFo0tLSMjIypFKph4eHt7f3gAED9Db3+PHjlJQUsVjs4+MTERFBp9OfPHmC47i2e08mkxUVFTk4OBjS5EDeTebp06cFBQVk03rrVCpVYWGh7uulRy6X37p1Kz8/X6PR8Pn8wMBA3W9mJKVSmZCQkJeX5+joGBsb6+zsXFpaKpPJPD09W7lmlXxTkW9p3enk3XebXtxYUVFx48aNsrIyOzu7nj17hoaGNr2GpcPvRhJ5bMnMzFSr1YYfW9Rq9dOnT5lMpu4Ol8lk169ff/LkCYfDiYyM7NGjB7lpV1dX7fvz2bNncrncx8enleuARCKRSCTSXUq7rFKp7ORZpkqlSk1NzcvLE4lEDAbD19d36NCherdXNSnWEoSU0w1CqmsBoN1Onz79wgsvvPjii+QdagCwJBZ71SgAoPPkcnlJSUlZWdny5csxDNO7QwoAlgGCEADQovv372ufh7B69WqjP5cRAFMAQdhNYmNjWSwWHEeAeendu/fnn39uZ2c3ZMgQ3SF9AFgS6CMEAABg1Sx5HCEAAADQJghCAAAAVg2CEAAAgFWDIAQAAGDVIAgBAABYNQhCAAAAVq2bgrCkpEQulxs+v95jMK0T7AQEOwEhBDsBIQQ7ASEEOwEh1DU7oZuCcMaMGeRDTQ1kmk8x7mawExDsBIQQ7ASEEOwEhBDsBIRQ1+wEaBoFAABg1SAIAQAAWDUIQgAAAFYNghAAAIBVgyAEAABg1SAIAQAAWDUIQgAAAFYNghAAAIBVM8kn1GvUJw+enEubQWAY1aV0HJuOMqfRvbhm/CcAAIA1MMkgxGmxlfGN80bZ9OhDdSkdtyhJ/dtTYlkQBCEAXUUmk12/fp3qKrqPVCpls9lUV0ENDMMiIyNtbGy6YuUmGYQI2fgOkOfcN+sgHC3ADjwmlgVRXQcAluvPP/986623goODqS6kmxAEgZlzO1ln3L179/Tp06NGjeqKlZtoENL6DGi8f4UrnEZ1IR0XzccXJSnVBI1mpe9bALqcRqOJjIw8evQo1YWALhcVFdV19xw30Ytl6H0CFQUPCZWS6kI6zo2Fetph96oIqgsBAADQGhMNQszWju7hqXiSRXUhnRIjwOJLIQgBAMCkmWgQIoRs+w2WP7pHdRWdIhRgV0rg+WEAAGDSTDcImf0GNz66T3UVnRLNx2+UEwqIQgAAMGEmHIRe/qqqEk1DHdWFdJwjA/k5YMmV0DoKAACmy3SDEOE0pm+wPDeV6jo6JUaAXSmBIAQAANNlwkGIELNfaGO2mXcT8nHoJgQAtCIlJeWPP/6guoq23bx589SpU0ZZVXFxcf7fiouLjbLOzjDpILTtP1iefZfqKjolwgO7W0XIVFTXAQAwVTdu3Dhy5AjVVbTtxo0bxgrCadOmjRw5csyYMWPGjFmyZIlR1tkZJh2EdBcBRmcoy55SXUjHcWxQMA+7WQGtowBYF7VaXVRUpFaryR+rqqqUSv2B0WVlZSpVG1+TS0tLmy5YXV3d2NhoYCV1dXXV1dXk/yUSSRzd0IwAACAASURBVH19fdN5KisrZTKZ7hSFQlFSUtJmea3X2Yoff/wxLy8vLy/v999/N3ypLtKOIFQqlfn5+XK5XDultrY2X4f2JTci2/6h8uwUo6+2O8XAIAoArMns2bPnzZsXHBwcHR2dm5ubkJDQr1+/0aNHe3l5ffbZZ+Q8WVlZfn5+sbGxAwcOTElp5hC3devWuLi46Ojo2NhYd3f3M2fOkNPv378/YMCA6OhoX1/fFStWEASBEHr++ecPHDhAzvDLL7+MHz8eIVRQUODg4LB06dLQ0NAPP/ywrq5u8uTJ/v7+AwYMGDt2bGVlJULo8uXLwcHBM2fOjI6O9vDw2LZtG7mSdevW+fn5xcXF8fn8L7/8spU/dvv27ZMmTZo4cSJZ5+nTpw3cS5WVlQ8ePNANFAoZdIs1giCGDh2anp6uVCoTExNHjhxJTv/22283b97s4uJC/njz5k03Nzfj1sfsHypJOs2Nnmrc1XYnoQD/b4rxvyIAAJp1o5wolnZfG8xoAe7E1J+YlJR048YNFxeXmpqamJiYkydPhoeH19XVhYeHR0ZGjho16o033li4cOHKlStramrCwsK0B1Vd165dS0lJ8fX1PXTo0OrVq5977jm5XD59+vRvvvlm4sSJMpksJibmxIkT06a1eCvK+vp6b2/vx48fI4RWrlypUqny8/NxHH/11Vc//PDDH374ASGUmZm5devW2NjYjIyMYcOGLV682NbWdt68eWvXrsUwrKKiYuDAgZMnT/bx8WlpK/Hx8Xfv3vXz8zty5MiqVavi4uIQQrNmzWp6P/Tx48d///33CCEMwz777DMajfbs2bMvvviC8tZRg4KQLDo0NNTPz0/vV6+++uqOHTu6oLC/2PYbVHNgE9Eow5isrttKlxrpjqXXEGIl4nbJbdMBAP9yo4K4042dEQOdCCem/g2FX3nlFfIM4erVqxwOp7CwsLCwECHk6+t79erVkJCQmzdvXrhwASHk5OQ0Y8aMZ8+eNV1zbGysr68vQig6OnrBggUIoZSUFLFYLJFIjh07hhDq06dPfHx8K0GI4/ibb75J/v/s2bNbtmyh0+kIoaVLl06ZMoWc7uPjExsbixAKDg5ms9lFRUW+vr48Hm/v3r0PHz6USCQ4jmdkZLQShDExMWQ0REdHz549m5z4zTffNG28ZbFY2mIcHR0RQteuXRs3blxkZGRgYGBL6+8Ght50e8yYMc1Ob2xsfPTokUAg4HK5xqvqHxjDluHp15iXYRswtCvW3w1saSjUBUsqIyb0gttvA9DlVgZTf+mDk5MT+Z+qqiq1Wq1t/AwKCgoJCamtrbWxsdE+UMnR0bHZINQeVBkMhkKhQAhVV1fjOK5dW69evUJCQvSWIhtLSRwOh8n863S1traWzB6EEI/Hq62t1duK7obGjh0bHBwcFxdna2t79+7dhoaGVv7YpnUihE6dOpWXl6c3Z2Bg4CuvvEL+yeSUyMjIkJCQW7dumUcQtuTUqVO3bt3Kz89/+eWXd+/e3dLDolQqVXJysrY52MfHx8vLq5XVajQa7Y3Gmf1CZVnJjP5hnSyVQkI+drlYPa5H+z6fujvBasFOQLATEEIt7ATdg75pCggIaGxs/OSTT2xtbbUT1Wq1jY3Nw4cPAwICEEJpaWk4btDBwd/fXyKRfPDBBzweT3c6j8erqqoi///w4cNml+3bt+/9+/eHDx+OELp3717T5j2tmpqaO3fuJCYm0mg0hUJRVlZmSG16WCwWh8PRm6i7E0iNjY1FRUWurq6GrFOjw/BKDNm3nQrCN998c/Xq1TiOl5aWRkdHf/PNNytWrGh2TplMduDAAe23gDlz5rTemyiTyWg0Gvl/witQdvALm/FzOlMqtYbz8A/u06XS9nUL6+4EqwU7AcFOQAi1sBMaGxtNPAtHjRoVFhY2derUxYsX4zh++/btsWPHRkRELF++/PXXX//vf/+bmZkZHx8/evRoQ9bWt2/fWbNmxcXFrVixwtbWlrxwJi4uLjY29tNPP+3du3dRUdGRI0e8vb2bLvvBBx+8/vrrdnZ2DAbj/fff37RpU0tbcXR0FAgEGzZsGDFixN69ew2/cFTXjBkzWvpVQUHBp59+GhERgeP4Tz/95OTkNG7cuDZXSBBEY2OjVCpt78eBzWa3mYWdCkLt6T+fz3/ttdcSExNbCkIul7tx48aIiAgD10wQxD/fJnwDpQRhK6+nuwg6Uy2Fotko75pSacPhNelUb8W/doK1gp2AYCcghFrYCba2tib4oNrnnnuuZ8+e2h9PnDjx008//fHHHyqVatCgQWQb4KefftqrV6/Dhw8PGDDg8OHDTc+6hgwZ0qNHD/L/LBbr/fffJ/+/c+fOY8eOXbx4USaTBQUFhYWFIYRmz56tVCpPnDgRFBT0v//978GDBwghBweHZcuWaVc4YcKEX3/99ciRIyqVat++fWS/YO/evefOnaud56233nJxccFx/OLFi9u3bz948ODcuXMnTJhA1jx8+PCmPYVhYWHu7u7k/21tbT/44IM294+zs7O/v/+1a9cQQpMmTVqwYIG2/bYVGIaRZ5ld8XHA2vV9ysXF5dSpU81e4DR//nwajbZ79+5mF4yMjGxXEIrFYt2Wa9HhrTY9fTgRLxheqqkZf0612B+f3LsdraN6O8E6wU5AsBMQQi3shGPHjh07dgwezGsNoqKi1q9fHxkZ2RUfB0PPCH/44YeqqiqZTHbw4MGkpKSFCxfyeLz//Oc/ISEhzs7OSUlJhw8fbnqxrLHY+odJ7lw06yAU8vH4EmJyb6rrAAAA8G+GnqDU1dWJRKK3337b3t5eJBKRfZXh4eG3bt06evQojUZLTU0dNGhQF1XJ7DdIkf+AUCq6aP3dAB7SCwAApsnQM8JmO/9ee+211157zaj1NA9nceh878b8B7b9BnfD5rrCYBesSEKUy5C7uY6HBAAYSqPRHDly5MGDBzExMboXwmzevHnGjBm9evXSnTk7Ozs+Pr69g8qvXLlSX18/efJk41Rs3agfcGMgW/+wxodmfANuGoYiPPCEUmu/CB4Aa7B3795t27YFBgby+Xzd6devX6+r03/Gal5envYGaYbTDskHnWdGQRhq7k+iEPKhdRQAq5CSkjJt2rSZM2eSIwW1jh8/HhQUpP2xsLBQLBbrLavRaAoLC/Vugd3Q0JCXl2cid+a0PGYThIyefTUSsbqmgupCOk4ID+kFwAqsXbv2xIkT33zzTVhYWFZWlu6v/P39b9++jRB69uzZgAEDXnjhheHDh584cUI7w6lTp7y8vF555RVfX9/PP/+cnLhy5crQ0NDXX3+9d+/emzdv7s6/xUp09s4y3QfDmP1DZQ/vcEY+T3UpHTTACRM1EkUSoqedyY18AsBiKJ5kqeuqu21zTL+BOPtfV/N/+umnxcXF/v7+K1eubGmp9957b/To0Vu3blUoFNobWBYVFS1atIh8WkVdXd3gwYPHjBkTGhr6/vvvb9myBSFUWVkZHBz80ksv9e4NF6Abk/kEIUKsgKGS5EvmG4QYQlF8PL6UeM0XghCArtL4JEtR+KjbNmfTo49eEBri0qVL5IhyBoMxZ84c8kEQFy9e9PDwSE9PT09PRwh5e3snJiaGhobS6fQvv/wyPz9fpVLhOJ6VlQVBaFzmFIRM/zDRkW2EohFjtOcGLaZEyMfiS4jXfKmuAwDLxY2ZTnUJbSAIoqGhQTsq3N7envxPTU2NRqPJz88nfxwzZkxYWBhBEFFRURMmTJg+fbq9vf2dO3ckEgk1dVsucwpC3JZt06tvY+5928BhVNfSQTEC7It0uHAUAKuGYZifn9+9e/fIcRTap0kEBwdLJJLly5czGAztzCUlJXl5eeStQSUSSbPPqQCdZE5BiBCyDRgqy7xjvkHY3xFTEyhfTPThQusoANbrgw8+eOeddyQSSWVl5bFjx8jbdY4ZMyYgIGDSpEmvv/46QRA3btyYOXNmaGios7PzmjVrhgwZsmfPnpae8AM6w8yCkBUYXrnjA0QQyPTutGugaD4WX0L06Weu9QMA2jR9+nRnZ+em09977z1PT0+E0KxZs3g83tmzZwUCwcmTJ9PS0hBCGIadOnXql19+uXHjBkEQ5B266XR6fHz8rl27Ll269OGHHxYVFQUHByOEYmJiWn9MIDCcmQUh3a0nxrBVluTb9GjxcckmjhxNOL8f1XUAALrMhAkTmp3+xhtvaP8/ceLEiRMnkv8nsw0hhOP4zJkzZ86cqbuUr69v01ET5JMFgVGYzThCLduAobKsO1RX0XExAuxKiQaGEwIAgIkwvyBkBQ6VZ5pxEHpzMSYNy66FKAQAAJNgfkHI8AlWVTxTi0VUF9JxMXwsHm4xAwAApsH8ghCj0Zl9B5r1DbiF8EgmAAAwGeYXhMj8uwlHC/D4Eg30EwIAgCkwyyBkBQ5tzLlPqFVUF9JBfDZyscUyRJCEAABAPTMbPkHCOY50156KvAdMv4FU19JBMQLsSgkR4gSjCQHolPz8/N27d1NdBehypaWlXbdyswxChBAreLjswU3zDUKhAPtfLrE8qO05AQAtmThxYmpqqvYWZRZPqVRa7Z1lYmJi+vXrqvHX5hqEtkHDq3atcZyy2ExvMRMjwN9IVKo0NLpZNk4DYBLs7Ow2btxIdRXdRywWa2/VDYzIXA/DNh6eGN1GWZJPdSEd5MxEvTnYvWroJgQAAIqZaxAisnU04ybVVXRcDDywHgAATIAZB6Ft0HDZAzMOQiEfiy+BRzIBAADFzDgImd4BmroaVXUZ1YV0UBQfv1lBNKqprgMAAKybGQchwjDbgCHyzNtU19FBDgzU3xG7UwmtowAAQCVzDkKLaB2FbkIAAKCWmQdh/1BlYa5Gaq5PpxQK8PhS6CYEAAAqmXcQYjYMZt8B8ofJVBfSQZEeWEoVITXXW8UBAIAlMO8gRGbeOsqmo4HO2I1yaB0FAADKmH0QsgLDG7PvESol1YV0kJCPQesoAABQyOyDEOc42PTwbsy5T3UhHSQU4HC9DAAAUMjsgxAhxAoeKUtLorqKDhrhhmWKiHpzPaEFAACzZxFBGDJK9uAW0pjl0HQmDQ1xxRLL4KQQAACoYQlBSHN0oTvzGx9nUF1IBwn5ONxrDQAAqGIJQYjIk0KzbR2NEWDxpXBGCAAA1LCUIBwYIcu4jjRmeV411BXLqyeq5FTXAQAAVslCgpDu7IFzeY0FD6kupCPoOBrhjiWWmWWKAwCAubOQIEQIsQaY8bWjQj4OraMAAEAJCwrCkFGytEREmGWcCOEhvQAAQBHLCUIbj94Yk6V4lkt1IR0xyBkrlRJlMqrrAAAA62M5QYjI1tH061RX0RE0DEV44FdhEAUAAHQ7iwpCtjkPohDyYRAFAABQwKKC0KanL9JolMX5VBfSETCaEAAAKGFRQYgQYg2KlKZeo7qKjghywuoVxNMGyEIAAOhWlhaE7IGRsnsJ5njtKIZQFB9PgJNCAADoXpYWhDY9fRCdrih6THUhHREDgygAAKDbWVoQIvKSmfsJVFfREUI+BCEAAHQ3CwxC1qAoqXm2jvo5YARCefXmVzkAAJgvCwxCG74XbstSFD6iupCOgJNCAADoZhYYhAgh1sBI6X2zvHZUCIMoAACge1lmELIHR8tSr5lj6+hoAXa5RGN+dQMAgNmyzCCku/XEWRxFQRbVhbSbJwfj0LGHtRCFAADQTSwzCBFCrMFR5ts6Ct2EAADQbSw2CNkDI2Wpieb4zHohH4uHIAQAgO5isUFId+1Bc3BufJxOdSHtFiPAE0o10E8IAADdw2KDECHEChVKU65QXUW78dnIlYWl1UASAgBAd7DkIGQPjpZl3CCUCqoLabcYAbSOAgBAN7HkIKTZO9n09JVn3aG6kHYT8rH4UvPr3QQAAHNkyUGIEGKHCqUp8VRX0W5CAZ5YRighCgEAoOtZeBCyQiIac1I1UjHVhbSPMxN5cbA0kYW/OgAAYAos/FCL27KZfgNl6TeoLqTdYgRYQoWFvzoAAGAKLP9Qyw6LMc/WUexaOUZ1FQAAYPksPwhtA4Yqi/PUtVVUF9I+kR54cjXeqKa6DgAAsHSWH4QY3YYVPEJqbo/qdWCgfvbE7UoYRAEAAF3L8oMQIcQOM8trRyPdNVdK4MpRAADoWlYRhEzfEE1DnbK0gOpC2ifSjYBh9QAA0NWsIggRhrHDYqTJl6iuo31GuGruVRMSFdV1AACARbOOIETILnysNCXevB5GwaIRA52xG+VwUggAAF3IWoKQ7tqD5ugqf3SP6kLaJ4aPxUM3IQAAdCVrCUKEEHtorNm1jgoF+JVSOCMEAIAuZE1BOCha/vCuRtZAdSHtMNwNyxIR9Uqq6wAAAMtlRUGIszlMv0GytCSqC2kHJg0NdcWuwUkhAAB0GYOCUCwW//rrr6tWrVqyZInudLVavW3btokTJ86ZMycrK6trKjQmu6GjpXcuUl1F+wgFODySCQAAuo5BQZiZmfn999+XlJTs3btXd/qmTZt+/PHHFStW9OvXLzo6ur6+vmuKNBpb/yGqqhJVZTHVhbQDPKQXAAC6lEFBOGzYsEuXLq1cuVJ3olqt/vbbb7du3RobG7t69Wp/f/+DBw92TZHGg9NYg6Kld69QXUc7DHHB8sVElZzqOgAAwEJ1vI+wtLS0pKRk5MiR5I8jR45MSUkxUlVdyG7oGGnyJUSYzTkWHUcj3bFrZdA6CgAAXYLe4SXLy8tZLJatrS35o7Ozc3p6ekszi8Xi+fPn29nZkT8uXrx45syZray8oaHLru20d9Uw2aK0G3SfAV21CSPR7oQRzvTzBWiMszXeY6YL3wnmA3YCgp2AEIKdgBBq/05gs9k0Gq31eToehBwOR6FQaDQaHMcRQlKplMvltlLKW2+9NWjQIPLHHj16tDIzqc0ZOgwb+Zwi/Rp34MguWr8RkTthvBcx+6qay2VRXQ41uu6dYEZgJyDYCQgh2AkIoS7YCR0PQoFAgBAqLCz08vJCCD158qRXr14tzUyj0fr16xcaGtrhzRkRO0xYf2a/RlKP29lTXYtBBjljFXKiTIY8rDQKAQCgC3W8j5DL5U6YMGHPnj0IobKystOnT7/88svGK6wL4bZ2toFDzejBTDiGRrnjcK81AADoCgYFYVVVlZOT06hRo1QqlZOTU2BgIDl906ZNhw4dCgsLCwkJmTt3romc8BnCbth4yc2zVFfRDkIBFg/D6gEAoAsY1DTq7Oycl5en/ZHsFEQI+fv75+TkZGdnu7q6enh4dEmBXYPpE0yolIpnOYxeflTXYpAYAbY9E84IAQDA+AwKQgzDeDxes7+ysbEJDg42akndAsPswsdKbp03lyAM5GENSuJpA9Gbg1FdCwAAWBQruteoHvbQsbLURELRSHUhBsEQiubjcIsZAAAwOusNQpo9j+HlL0tLpLoQQ0E3IQAAdAXrDUJkbpfMxPDhpqMAAGB8Vh2ErMChqppyZWkB1YUYpK8DhmEotw6yEAAAjMmqgxDhNLth4yU3/qS6DkNF86F1FAAAjMy6gxAhu2HjpSlXiEYZ1YUYRAhBCAAAxmbtQUhzdGH6BEvvJ1BdiEFiBNiVEg0kIQAAGJG1ByFCyG7Ecw2Jp6muwiCeHIxrg2WJIAoBAMBoIAiRbf9QolGmKMyhuhCDCPnYFbh2FAAAjAeCECEMsxs2TnL9DNV1GARGEwIAgHFBECKEkN3wCbKM6xqpGTz0crQAv1qqUUMUAgCAkUAQIoQQbmdv2z9Mevcy1YW0zZ2FPFhYWjUkIQAAGAcE4V/sRjzXcP0MIswgYGIE2BVoHQUAACOBIPwL0zcYw1Bj3gOqC2mbkI/BQ3oBAMBYIAj/YTfy+Yak36muom1CAX69nFBCFAIAgDFAEP7DbuiYxtw0dW0l1YW0wYmJvLnY3SpoHQUAACOAIPwHxmSxw2Iakv6gupC2xQjgSRQAAGAcEIT/wol4QXLzrOk/rVfIx+NLoW0UAACMAILwX+guAoaXv/TeVaoLaUMUH7tdQcjVVNcBAADmD4JQHyfihYaEkyY+joJrgwJ42O0Kky4SAADMAgShPtt+gwmNpjEvg+pC2iDkY9A6CgAAnQdB2ASGcSJeaLh2iuo62iAU4HD3bQAA6DwIwmbYDR3TmJehqi6jupDWjHLH7lcTEhXVdQAAgJmDIGwGxmDaDYmV3DDp51Gw6WiQM3a9HE4KAQCgUyAIm2cXESe5dd7Ex1HECOBeawAA0FkQhM2jO/OZfYIkyRepLqQ1Qj50EwIAQGdBELaII5zWcOU40pjuKddwd+xhLVGroLoOAAAwZxCELWL2CcS5jrIHN6kupEUMHIW7YYllphvVAABg+iAIW8MVThNfOkJ1Fa0R8nG46SgAAHQGBGFrWANGaqQNiieZVBfSohgBFg8P6QUAgE6AIGwVhnGip4jjj1NdR4vCXLAnYqJKTnUdAABgtiAI22A3dGxjfpayvJDqQppHx9EodywB7rUGAAAdBUHYBozB5IycaMp3XBMKcGgdBQCADoMgbBsn4gXZvQS1WER1Ic0T8jEYTQgAAB0GQdg2nOPIGhQpuW6id1wb6IxVyokSKWQhAAB0BAShQbjRUyXXz5jmHddwDEV44FehdRQAADoEgtAgdLeejD5BkptnqS6keUI+BqMJAQCgYyAIDWU/9hVx/K+E2hSfexQjgG5CAADoIAhCQ9n06GMj8JYmX6K6kGYE8DCpiigQQxYCAEC7QRC2g/3YWeKLR5BGTXUh+jCEomEQBQAAdAgEYTswvPrTeC7S+9eoLqQZ0E0IAAAdA0HYPtwxr9RfOIwIk4scuOkoAAB0DARh+9j2G4yz7GQPblFdiD5fe4yGoZw6yEIAAGgfCMJ2445+sf78QRM8KYzmw0khAAC0GwRhu7GChiO1Sp5zn+pC9AkF0E0IAADtBkHYfhjGHTNDfP4g1XXoixFg8aUaSEIAAGgXCMKOYA+MVEvEjTmpVBfyL73sMHsbLFMEUQgAAO0AQdghOG4/bmbd2Z+prkMf3GIGAADaC4Kwg9iDogi5VP7oHtWF/AuMJgQAgPaCIOwoDOOOfaX+7P+oruNfYgR4QplGDVEIAAAGgyDsOPbASEIhl2enUF3IP9xYSMDGUqshCQEAwFAQhJ2AYfZjZ9af+cmkxhTCA+sBAKBdIAg7hRUyitCo5Nl3qS7kH0IBFl+qoboKAAAwGxCEnYNh9uNm1f/5s+mcFEbz8RvlhBKiEAAADANB2FmsASMRjSZLS6K6kL84MVEfLpZcaSrBDAAAJg6C0AgcJs6pO7PfdJ5TCE+iAAAAw0EQGgHTbxCN5yq5YyoPrxcK8PgSaBsFAACDQBAah8Pz8+rP/kwoFVQXghBCkR7Y7UpCpqK6DgAAMAcQhMbB8PRjePaTXP+D6kIQQohrg4J42C3oJgQAAANAEBqNQ9w88ZVjGrmU6kIQIrsJoXUUAAAMAEFoNHS3nsx+oQ1XT1BdCEIICfk4XC8DAACGgCA0JocJsxsSf1fX11BdCBrlgaVVEw1KqusAAACTB0FoTDQnN7vwsfXnDlBdCLKlocEu2PVyOCkEAIA2QBAaGXfMDHnGTWVpAdWFkK2j0E0IAABtgCA0MpzF4ca+XHf6R6oLgYf0AgCAQSAIjc9u1POqyuLGnPvUlhHuhj2qJWpNYmQjAACYLghC48NodIfn59ae2kPtnbgZOBrmhl2D1lEAAGgVBGGXYA0YhdkwpXevUFuGUACDKAAAoA0QhF0DwxwnL6w7s59QyCmsAh7SCwAAbYIg7CoML3+mT7D48lEKawhzxZ5JiAoZhSUAAICp61QQyuVykQ6NBrqj/sXhhfkNSX+oqsuoKoCGoZHuWEIZvC4AANCiTgXhli1b+Hy+z98qKiqMVZZloDk4c6Km1P3+A4U1CPl4PLSOAgBAyzrbNDp//vyav3l4eBilJkvCFU5TFuU2Pk6nqgB4SC8AALSus0GoUqmePn2qUMBoteZhNgyHF+bX/rqDqufXhzhjVXKiWAJZCAAAzetsEB4+fDgqKsrR0fHNN99UqVp8FKxKpbp79+6lvxUUFHRyu2aEFRKBcxwkN89RsnUMoSg+fhVOCgEAoAUY0YlB3+Xl5S4uLjQarbCwUCgUvvPOO0uXLm12zkGDBmEY5ujoSP44Z86cadOmtbLmhoYGDofT4cJMjbq8ULLvU+7SrRiba/hSxtoJu3NpaSJsx1CzfGK9hb0TOgZ2AoKdgBCCnYAQav9OYLPZON7GKR+9MwW5u7uT//H09Jw7d25CQkJLQcjlcjdu3BgREWHgmgmCsKjXmxNAhMWorhzhzVhm+ELG2gkTvIntj9Qcjm3nV9X9LO2d0CGwExDsBIQQ7ASEUNfsBKONIywqKuLxeMZam+VxmPCaPPuuouBh92/a3xFTatATMbSOAgBAMzp1Rrhy5coBAwa4uromJSX9/PPP165dM1ZZlgdjshxeWCA68rX7ezsQTuvmrUfzsfhSwpuLdfN2AQDA9HXqjLB///7nz5/fsWOHWCxOTk4eMmSIscqySOzB0TRHl4akP7p/00IBBqMJAQCgWZ06I1ywYMGCBQuMVYo1cJy6pOLrFayQUTQH5+7crpCPrU1RI9TdZ6IAAGD64F6j3Yru2sNu+ITuv9eMjz3GpGGP6uCkEAAA9EEQdjf7Ma8oCrLk2SndvF14EgUAADQLgrC7YQwmb8ay2qPbicZufSoEdBMCAECzIAgpwOw7kNEnsP7cge7c6GgBdqVEo4EoBACAf4MgpIbjlMXSlHjFs5xu26KAjTnbYg9EkIQAAPAvEITUwO3sHeLmiw5vJdTdd+cz6CYEAICmIAgpwx4ymsZza7h6stu2KIRHMgEAQBMQhFRynPam+MoxVVVJ92xOyMevlWrUEIUAAKADgpBKdCd3+3GzRIe+Qp14Bojh3Fiopx12rwqSEAAA/gFBifczTAAAIABJREFUSDFOxAsIxxqu/dY9m4MH1gMAgB4IQqphGO+Vd+svHlFVFnfD1oQCLL5E0w0bAgAAcwFBSD26s4f9uJk1B7cgTZdHVDQfv15OKCAKAQDgbxCEJoEzKg5nssRd30DqyEB+DlhyJbSOAgDAXyAITQOGOb78jvjiL8qywq7eVIwARhMCAMA/IAhNBd3J3X7ibNGhL5FG3aUbEvJx6CYEAAAtCEITwhnxHM5xqD9/qEu3EuGBJVcRsu67oQ0AAJg0CEJTgmFOM1dIbp5tfJzRdRvh2KABTtjNCmgdBQAAhCAITQ3OcXR88W3R4a80cmnXbUXIx+JLoXUUAAAQgiA0Qazg4Uy/gXUnv++6TQgFOFwvAwAAJAhCU+Q4ZVHjkyxFxvUuWv9IdyyjhhAru2j1AABgTiAITRHGsHV69b3GP/erayu7Yv22NBTmgiWVwUkhAABAEJoqhmc/xojnqvdv7KIHFgoFOHQTAgAAgiA0ZcxRk3A7R/G5g12xcnhILwAAkCAITRiGOb2yXJJ8Uf7ontHXHe6G5dYRokajrxgAAMwMBKFJwzkOTq9+IDq4RV1fY9w12+BouDuWUAatowAAawdBaOqYvsF2wyeIDm4x+sN7hXw8HlpHAQBWD4LQDNiPm0Vo1PXnjdxZCA/pBQAABEFoHnDcec4qya3z8ofJRlzrYBesSEJUyIy4SgAAMD8QhOYB5zg6z/1IdOgrVXWZsdZJw1CEB34VBlEAAKwbBKHZYHj158a+XP3jekKpMNY6hXxoHQUAWDsIQnPCiZps49az1ni3IYWH9AIAAAShmeHNWKbIfyC58adR1hbshNUpiCIJZCEAwHpBEJoZjMlyfuPT+nMHjPLMQgyhSA8cWkcBANYMgtD80J09eLNW1vzvc6PcklsowGA0IQDAmkEQmiXbfoM5UVOq9n5CKDp7k7QYAXYZghAAYMUgCM0VN2a6jXtv0dGvO3nHmX4OmJpA+WLIQgCAlYIgNGO8GctUFUX1l37p5HrgSRQAAGsGQWjGMBuG84J1kptnpSnxnVkPdBMCAKwZBKF5o9nzXBaur/ttt6Igu8MrGS3ALpdoIAkBANYJgtDs2Xj05s1cUb1vvbqmomNr6M3B2HQsuxaiEABgjSAILYGt/xBuzPSqPWs1soaOrQG6CQEAVguC0EJwoqYw/QZW713XsTuRCuGRTAAAawVBaDkcJy+iO3tU7/8MadTtXXa0AL9aooF+QgCAFYIgtCAY5vjyO0ijrjn8VXsHF/LZyJWFpddAEgIArA4EoUXBaHTn19eoqsrqzuxv77LQTQgAsE4QhJYGYzBdFvxXlnFTfPVEuxYUCrB4eEgvAMD6QBBaINzO3vXN/5NcOyW5c9HwpYR8PKmMUEEUAgCsDAShZaI5OLss+az+zH75w2QDF3GxRb05WEoVtI4CAKwLBKHForv2cJ6/tubgFsWTTAMXgUEUAAArBEFoyRie/Zxmrazet0FZVmjI/EI+Fl8CbaMAAOsCQWjhbP2HOExaWLVzlbK87SyM4uM3K4jGdo9CBAAAMwZBaPnYoUKHyQurvlulLC1ofU4HBurviN2phNZRAIAVgSC0CuxBUY6TF1V9/1GbWSjkQzchAMC6QBBaC9agSEOyUCjAoZsQAGBVIAitCGtQpOOUxVU7V7eShZEe2N0qQqrqvqoAAIBaEITWhTUwwnHakqqdq5UlT5qdgU1HIU7YzQpoHQUAWAsIQqvDColwnLak8rtVime5zc4QI8CuQOsoAMBq0KkuAFCAFRKBEKre81+XRRtsevTR+61QgK9OhiEUAADKaKQNGplYIxVrpA2ETKKWiqtEDVW1DfX1EsLLf/SEWONuDoLQSrFCIhDCqnZ95LxgHcPTT/dXw92wTBEhViKuDVXVAQAsjUYuJXTiTSNr0EgbNFKxRirWyBoIaYNu+CFbjtKW00DjiGh2ZYhbrLZTMe3YHI6jg0tvJzej1wZBaL1YIaMwuk3V7rXOsz9g+g3STreloSGu2LUy4rleGIXlAQBMHUFopGKNpF4jqddI6zUSsVoqJqTNRx1mw8TZXJzNwVmcv/7D5uIsDo3nKmdwC1V2uUpOptwuVWp3s56DcCyYhwXysGAnLIiHjXfC7P/+Xi4Wi43+d0AQWjXbwHDneR/X7NvgOO1N1sAI7fQYAR5fonmuF43C2gAAVCGUir8CjAy5hjq1tJ6QiNXaKZJ6cgaczcXZXNyOi7PtcTt73M4eZ3Ho7p5/Zx4ZeByczUX4X8eTRjXKqiUeiIgHNcQDEfHgGappJAIcsQFOWKAAW8rDdjthHqxu/XshCK0ds0+gy5LPqnat0UjFdiMmkhOFfOw/N+B6GQAsENEoU4trNQ11GkmdWlKvaajTiEV//UdSr2moVTfUIbUKZ3NxO/t/JZyDM13gTSOn/PVbe4S10W6kJtDjeiLjKfFApHkgIjJqiEIJ0df+r7O9Rf2xICfMm9vWWroYBCFANgJv16VbqnauVjfU2Y99BSE01BXLFxPVjciZSXVxAACDEWqVRlyrFos0YpG6oU5TX/NP5olFZNQhGp1mZ49zebidPc5xoNnZ4xxHukdvGscet3PAOQ40Lg9jdvyMTNSIMkVEShWRVUtkiojUasKegQJ5WIAjFueJfRiCB/IwWxNrbIIgBAghRHfmuy79qmrXGnVtJW/6W3ScNsIdSyjVTPWCATYAmApCqVBVl/0VcmKRul6kkdSp62s04lp1Q61GLCIUjWSS4VwejeOA2zvRndzwXn1xO3sal4dz7HE7B8yGYcSSahpRRg2RKSIyRH+1drLoKIiHBTth4W7Ygn54AA+zM/mcMfkCQXeh2fPclm6p3v9Z1Z5PnOeujhEw40uIqV5UlwWANSEaZeraKnVDrbq2SiMWqeuq1WKRuq5aIxap62oIlUJq7/RXyHF5NHse3UXA7BOEcx1pHEecy8PZnC4tT6JCWSIiQ0RkioiMGuKBiJCpUCAPI5Pv5T54sBNmjs1IEITgHxiT5fLGJ6Jfd1RsXzl6+rrXchyprggAS0MoFeraSnVdtVpUqa6vVtfXaOq1gVeFMJzm6ELjONIcXXAuj2bvZNPDh+bghHOdaA5OEhXB5XK7rVSlBuXUEWTHXqYIZYiIUinR3xEL4mFBPGxMMB7IQ73sLOHacghC8G84jffSUvHlox4/r+Dw15bLfN279/ItACwAoZCrRBWaump1bZWKDLzaKrWoQl1XTSjkNAcXmqMzzdGV5uBMd/LAvfxpDs40Lo/m4IwxbFtbbxeMHPinZoQKxMQDEfFA9FdrZ2494Wn31wCGV31RsBPuY4/RLCH49EEQgmZwR79Ec3Lfd3jN1uPviLyGUliJUmljY9Px29zgGJrcGx/X0xI/u4ByGrWqtkpdU66qKVfXlKtrq9R11eraSnVtFaFW0nhuNHtnmqML3dHVRuDNChhKc3ShObjgHAeq60YIIYUGVciI7Fr0QPRXD1+miHBiYoE8FMzDJvTC3huA+zua3FUtXQSCEDSPPSjKke2+4Of1BfRJ+QOnU1WGXK6xte14jMlUaNkt9TA3bPcomg1c9wM6RqNW11ZXlpaXFJeqasrp9eW29eXM+gqGpEbB5jXauzfauzXauys4fgp3l0aui8LORWXbXF+dAqFKhCo7PjBJJsNZrHYvLlGiEimqkBMVMlQiJSplqFxGiJXIlYX1tUdBPCzMFZvrhwfxMAdjXkZjTiAIQYv4/fqr399uv3fdYGUBb8Yy415sZiCxWM3ldirB3uiPz4xXTzyv+nU03Wo/58AgGo26tkpVU64Wlauqy/451auvUbIcMwg3CdddzPGoYweJesXUsN1Etq4a/N+HUA1CdQjVIYS65PktKhWdTm/3mh0YyNUWeXOwoa5IwMbdWMidZZaXtHQdCELQGpqDs+vSLaJftlZ+857z/LU0B2eqK2o3Nh0dj6Utv6UedVp1ZhzNkwPNpAARapW6plxVVaKqLFFVkf9K1TXlOMeR7uRGc/agO7kzfILYQ0bTnNwPVDqvSsF+iaHH8Sl+84jFUi4XEsz4OhWEBEHs3r37/Pnzbm5u7777bt++fY1VFjAdmA3D6dX3xZePVmx9x3nOKoZ3INUVtRsNQ9uH07Y+0Iw8rf59LG2QM2ShdVHXVqoqipWVRaoK8l+xuq6K5uhCdxHQXfg0FwHTbxDdRUB39tBr9tAQaPVd9YkCIuF5mp8DvG0sVqeC8Msvv/zxxx83bdp0586dyMjI3NxcDqdrR7EAamAYN/Zlmx4+1fs2cEe/zImaTHVBHbE8CPfmonFnVT9G0p/3hIOaZSJUSlVlsaqsUFnxTFVWqKwoUlUW47ZsultPultPumsPW7+BdLdeNCd3jNbG0U+uRvOuqZ82ENfj6K7/396dhkVx5WsAP1V1qhd6A5qGBtmFjoogKFEk4kYEF8BoQpwkTuJormY3yc06450kk8SZjEmMyXU0JiaPmnG8XuMk4r4nLjiKO5qooGzS7DQ0TQNdp+p+IHG8Pm5Ad5+G/v8+5JFO27wW3fVSVeecuu1YTtDbdb8ICSFLlixZuXJlRkZGVlbW3r17165dO3fuXCeGAx5FMTA58MUl9V+/115y3v83L/VkESZaHohgQ3yYabvI7xPZZwfB4JleTyKCUFXmqC4TzKWO6lKHuZRYarHeiIMi+MBQxeAUdWA/bAhlFT5dfWVzK5q6S4jWMHsmYy8ZOenNul+EVVVVFRUVaWm/3LIgLS3t2LFjUIR9G+cfaJj/kWXjsuqP5+tnL+CDwmkn6rLhBuZgNjd5B7nYJC1O4Vg4MuxVSEONw3zZUVnSUXnZUVlCGqqwPhgHR/DGCJ9h43hjJDaEXLvLQbedbZBydpEnYpm3hvbJWXPgRj0qQqVSqVT+clig1+vPnj17qydbrdb58+f7+v6yUskTTzzx4IMP3ubFbTYbQ3k5cvo8diPwk2dLJ/bVfPqqMvMx2dDxLv1ertgIBgbtGM88cgDn7hI+H+Hw/N/3Pfad4E7W1Qubyy8yMjlnjGCDIriYJOV9U1lDv2tnOAlCBCHUau/hN9ph5p46wn00TJgeLtpaehrbueCdgLq+EXx8fFj2Dqd/ul+EKpWqo6NDFMXO72G3229zgVCpVObm5sbHx3d+GRMTc/uriZIkweVGj94Io7MdpiENa/4iFZ/1mzHfdSscumgjqBHam4XmHCDZP3CbMjz9CpBHvxPcxVJ8OuRPa1m1a5f9W/Gz+NZxsnECTjN64lQbeCcg12yE7l8mCQkJkSSpoqKi88vS0tLQ0NBbPRljnJycfP+vIiMju/19gYfgjeGBL3/KB0dUf/hMe9EZ2nG6TM6hNWO5scHMfXlCUbNLZn0BZ5IkVuXCNVkEET13mHx2TszPwWlGbz/q8jbdL0KtVpuZmfn1118jhOrq6vLy8nJzc50XDPQCDIe1E2f6/+blhm/+atm4TCIC7URdwyD053u5V+LZtDwhvwa60LNJ0h3vAdttzQ6UvVMoapYO5eBIDbSg1+nRwLkPPvjgiy++SEtLGzJkSG5u7ogRI5wVC/QiclNi0CtLSUN17ScvC7VXacfpsrkD2NVj8QO7hHXF3V/7CvReV23S2M1CmJrJy8BannYaQEOP5hHGx8cXFRWdPn06KCgIznZ6M1at0z/5duux3TWfvKTNeLTXTTSc0I/ZPQln7SQ/N0lvD/X4wTPAeY7WStN2kRfi2NeHwHQa79XTJdYUCgUcCIJOPvfez4fFNqz+S/uVc34PPevqcQ3OFe/P5OdwWTvIVRtZdh+HYa/oUVxzXvTbK+LTh8iXaVxOBPy8vRr8+IEz8caIwJeWYH1w9QdPtx7bQztO14T4MD9m4cpWKWunYHXQTgNcbEmh+OIRcdtEDC0I4B0AnIzhZbrs2QFPL2z58fu6zxeQhhraibpAzaPvJ+AoDTMqT6iwwfCZvqlDRL/7kXx9UTycww0LgKExAIoQuAYfEhX40mLFgOTqj5+37lmPxF4zDgWzaNl9XG4Um7aZnLdAF3oG550abWhHmduEpg50OAeHqaAFAUJQhMCFWE495oHAFz9p+/l4zWevOKrLaAfqggVJ7F+Hs2M3C9sroAv7juJm6b48IcGf2ZDO+cA96MCvoAiBa+GAYMMzf1Hde3/tp6805X3Vi+Ya5kax303Ac34kqy/1msPZvktCqKdHb4erpbTNwgtx7JKRsMYs+H+gCIHrMYwqdXLQq0sd5is1Hz7Xfuk07UB3KzWI+SGLe++U+PYJAgeGvdq6YvGhPcI3Y/HTA2GnB24EZweAm3C+hoC577adO9K47hNsDPd98BnsH0Q71J3FaJnD2XjqLqHESr5I43jYi9IgSVK3F5uWEHrnBFlzSdozGQ/0hSNBcBPwsQZupYhLCfr9FwpTUs3H85u3fyM5OmgnurMABdo5CVs60KTtgqUX5AX/1k7Qb/eTnRVSfg60ILglKELgbgyH1WMeCHp1qVBvrnp/Tuux3bQT3ZkKo2/v5wb5MaPyhNIWOEvaO9S1oQnbBIeI9kzGgb3vNtLAfaAIAR2cTu//2Kv+j/2nde+GuuV/cJhLaCe6A45Bn47kZpvYUXnkZD10oXt1ffpEYaN07/fC/f3YdeM5JVwCArcFRQhokscmBr26VDFoeN3f3mxc+xFp9PTZ9y/Hs5+OZDO3CZvLoAs9166rUvpW4d1h7B+TYHwouDMoQkAby6lHTzUu+AoHhVV/+Fzj+k/FFgvtTLczLZLdlIHnHhQ+/xmmVbhLV44Il54Xn/hB+Of9eGYM7N/AXYE3CvAIjFypSX/Y+PsvWaW66s9zm/K+ktrttEPdUkogcyALf3xWfOMYTKvwIERC8/PJ0vPiwWycGgSHguBuQRECD8KqtLrs2YEvLhbqzVULn7Tlb/PYCfj9tUx+Ds6vlnL3ELuHZvQuLQ40fTc5b5EO5+BouLku6AooQuBxsKGfftYf9HPesp860LJkvu3wVs+sQ3852jkJy1k0fqtQ20Y7Td8mSbc/8q5slcZsEQwKtDUT+8rcFAr0GVCEwEPJwk0BTy/0yZ1vP/evqvdmt/zwnQdOOpRz6JtxXGYoM3KTcLEJzpK6zu2WWDvdII3cRLLDmS9hxQPQLTCsGHg0Lszk+x/vOK5ebt71D+vu/1GPnaZOm8rI5LRz/RuD0NtDuWAfcewWYeP9OCUQTsq51cYS8amD5Is0bircVhB0F7x1QC/A94vWz/pDwFPvdZRdrHpvlnXvBk8bSjNvAPtlGp66S9hYAkNJXeAWo0YXnRFfzBe3T8TQgqAn4IgQ9Bp8v/763y1wmEusu/5h/tMTqpSJ6rQczjeAdq5fTA5jdk/CWTvJmQbp7aEc7Th9nCCi+UfIwSrpYDYXroajcNAjUISgl+GDI/0ff1NoqLYd2lK96BlZ5EDthEdkkQNo50IIoXh/Jj+Hm7KDVLaSv6VyGI5SXMPqQDP2CgihA9lYy9NOA3o/+KSCXgn7B+myZwf/cZXClFS/emHNR8+3HtuNRPqnJUN8mANZuMImZe0UrA7aafqK6+8+cdkqjfheiNUymzOgBYFzQBGCXoyRK9VjHghe8LVmfG7Lwc1VC59sObBJbLPRTaXm0aYJOFLNpOUJV20wlNSZ8muktDzy7CC4uS5wJjg1Cno/llMmjVYmje64ct7643fN21YrE0apUifLwk20EmEWLR/FLSkU0zaTLZkc3ACoxySEmPWXxefzyVej8ZQw2J7AmaAIQd8hixqkjxpErI2tR3c1rPozw/OqkZNVKZmMnM49eOYPZoN90PgtwtrxeFww7Lu7T5Kkdol585i4bwoeBL9VAGeDIgR9Dafx06Q/rBmf237pVMvhrc07/q5MTFOnTuFD+7s/zMPRrEHJPLJX+HAEB2tAd08bQc8eIK+JTH4O3FYQuAQUIeijGEZuSpKbkkhTve3IjrqV73BqX597032GjmXVOncGGRfM7J2Cp+wgJVa0IAm6sGtq7GjabsHEIzUvQQsCF4GPJejjOJ1em/lo8B9X6abNc1SVVr0/p/Zvb7Ye2y11tLstwyBfJj8Hf18q/u5H4qA/srXXuNQkjdosJAcwX6Sxt1liDYAegiIE3oFh5NFxfg+/EPynterUya2nDpjf+W3D3xe1XzyJ7rCes3MYlWh/Fq5vQ1N2CM0wreIu7Loqjdos/FcSDBAFLgenRoF3YXiZMjFNmZhGmupbC/ZaNi6XHO3KxNHKxFGyMNeOMlVh9M8J3Px8kpYnbM7kwlSwd7+lFT+Lbx0nG9JxmpFBqGs35gWgq6AIgZfidHpNeq4mPddxtbj11IGG1R8gInR2pCzM5KLdLseg/07llhSKIzeR7ydwwwJg534jCaF3TpC/F0n7s/A9Otg+wB2gCIG34/v11/Xrr5syy1FVaj91oHHtR2KbXZmQqkwcLY8a5IpGnD+YDVejSduFr0bjrHDY1/+bTUAz95G6dik/BwcoaKcBXgOKEIBf8MYIfmKEduJMh7nEfvqgZf0Ssc2uHJyiiBshj0lgeGfe73VaJGv0YabvEt4Zxs0dAJfqEUKoslXK3kmS9Mz6dHzjbQXh1ChwJShCAG7EB0fywZHaiTMd1WVthUesu9Y1rFooj01UxA1XDLyX0+md8l1GBjKHcvCUHeRco7Q4xdvHg5xpkHJ2klkmBm7cAdwPihCAW+KDwvmgcE36w2Krtf3iqbaLJ5u3rGJVGkVciiJuRM9PnEZrmEPZeNou4eG9ZM0YTumtH8ftFdITPwhLUrjf9L/VwfHt7lAPQA956ycPgK5gfTSd42jQQ8+2Xz7fdv5flvVLSEuz4p4kuSlJcU8S52vo3iv7y9HOSXj2jyR9q/B9BjZ434WxJYXiorPi5gx8rwGqDtABRQhAV7CcPCZeHhOvy3mSNDd2XC5su3iyeesqBsvk9yQpTElyUxLro+7SS8o59M047o2jJC1P2JLJ9dd6Sx8IInruMDlSI+Xn3GEyyfW3YQLA6aAIAegmTuv3y2GiJDmuXm67eNJ2ZHvDPz7mgyMVpkRZ9GB51KC7XO+bQeiD4ZxJJ96XJ2xIx6OMfX+nb3WgR/YKDhH9kIV1dxyHBGdGgStBEQLQYwzDh/bnQ/trxj8kOTo6Ss63F52x7l5XX17EB4XLo+NkMQnyqEGsSnv7l5lzDxvsw0zfLSwfxU2P7MtDSa9YpawdJL0fsziF46DhAG1QhAA4E8PL5LGJ8thEhJAkODrKLnYUn7Ud2tL4zSLOzyDvP1gWNUgWfg8OCLnpQJvJYcyOSThnJyltQS8N7ptdmF8jPbhb+EMi9+ygu/8HwiEhcCEoQgBchcG8PDpOHh2nQQiJYsfV4o7LhfbCI81bV4s2Kx8WKws3ycJNsjAT5x947W8l6ZlD2dyUHaTEKn3c5w6Y1hWL84+QVWPwxNCu/MNgHiFwJShCANyCZWVhsbKwWPWYaQghsc3mqCxxlF+yF+Y3bVoptlqxMUIeHSePHsSH3ROu9TuYjR/aIzy4m6wd10fm1UkIvXtS/PqiuGcyHuwHrQY8CBQhABSwClXnwWLnl6Sp3lFxqaO8qOXwto7STxiW5cNi/zc0dnlDdM53A5aNlmk0dPP2VDtBcw6QS01Sfg42wm0FgYeBIgSAPk6n53R6RVxK55dCvbmj7KKj/NKc2n/OKC02F/gWaGNL1JHlqvBSVUStIkjsVRfMqu2oxi49GMXun4K9dtEA4MngXQmAx8H6YKwPRkljEEIGSbIVXhhSWzG0rhTXbOfLypjWJhIQLhgiHIZwEhgh6COIb+AdX5MWBqFAJQpSMjcuH9olcI0QuBIUIQCejWEiIvtp4gdce0ASHEJdpaP8kqOqzHFmi1BVJtqasSEEG8N5YwRvDMfGCOxv7FvNAaNGgQtBEQLQyzCY540RvDHi2iOivUWoKnWYSx1VpW0XTgjmUsnRgQ0hXEAw1gdjQwjWh+CAYE6n71vtCIBzQBEC0OuxSrUsKk4WFXftEbG1Rag3k/oqod7cUXqh9fh+Ul9Fmus5rZ7TG3FAMNYbsT6Y0xt5Y4Rz7zDlEpIk0Y4A+jAoQgD6INZHLfOJRWGx1z8odbQJdWahrrLzv20XTpA6M2lu4HwNOCAYBwTjgBAuIAT7GThdAKvW0QoPgJtBEQLgLRiZgg+J4kOirn9QIgKpr/q1ICvbLp0mllpiqZM62jhfA+cbwPkaOquR8zNwfoGcTs/6uH0yB1wiBK4ERQiAV2M4jANDcWDoDY9Ljg7SWEMsdcRSKzTWdlwtJuf+1fmIRBycXxD2DeB0es4/iPMN4LT+nFbPav04tS9inb8ynIQkBpoQuAwUIQDgJhhedtOCRAhJ7XahsZZYaklTHWms7Sj5iTQ3kqZ60doo2ppZlZbV+nFaPafx5bR6Vq1j1TpO68+qdZzGl1XpYMAO8DRQhACArmHkSt4YzhvDb/L/RJG0WMTmRtJcT6yNpKlBqDeLpT+R5gaxpYm0NImtVk6tY1U6Vu3LaXxZtY5VaVmVjlNpWY0vq9KyPhrWR3Pj+B2YRwhcCYoQAOA8LMtp/TmtP4/63/wJIiEtTWJLE7E2ii1NYkuTaGsSzCXtLRbR1iTarKKtWbQ1Iw7/UooqDavSMgwLFwmB60ARAgDciOV+bcqo2zxLareLNqvY2kxszWKrVWy1Sv2HuC0j8DZQhAAAj8PIlZxcyfkH8r8+IlmtNAOBPq1v3vkTAAAAuEtQhAAAALyaJxYhIaS8vJx2CspgIyCERFEsKyujnYIySZJKS0tpp6AMNkKnkpIS2hHoKy0tdfqKe55YhDU1Nenp6bRTUNbY2Dh69GjaKShraWkZOXIk7RSUtbW1DR8+nHYKygghSUlJtFPQN2TIEFh1ddiwYQ6Hw7mv6YlFCAAAALgNFCEAAACvBkUIAADAq7lpHmFCQsJjjz3G8/ydn4qQKIp2u71//1usTOEdRFEUBMFv2HnVAAAFgElEQVTLN4IkSQzDwEbged7LNwJCSKlUwkZQq9UxMTG0U1CmUCgGDBjA3PWSe5s3bx44cODtn8O459Kr3W43m81u+EYAAADANaGhoTLZHW497aYiBAAAADwTXCMEAADg1aAIAQAAeDUoQgAAAF4NihAAAIBX8+jbMJnN5u+++66oqMjHx2f8+PHjxo2jnYgCm822devWkydPYownTpyYmppKOxEFkiQVFxcfP368qalp5syZPj4+tBO5icPhWLly5cWLFxMSEh5//HGW9cbfXK9cuVJQUNDY2DhjxgydTkc7DgWiKObn5+/bt6+pqSkxMXHGjBkYe/Su2xUIIRs2bCgsLLTZbPHx8Y8++qhcLnfWi3v056qgoODMmTPh4eEY4xkzZnz22We0E1GwePHiFStWaDQajuOmTJmyYsUK2okoKC4uTklJWb58+bx585qbm2nHcZ+ZM2euXbs2NjZ26dKlL7zwAu04FNTU1AwdOrTzR19dXU07Dh2FhYWzZs2y2Wz9+vVbtGjR1KlTaSeiwG63r1+/XqVSRURErFixIiMjw4lTHnrN9Inly5evWrUqPz+fdhB3a2trUygUnX9esWLFsmXLTp48STeS+4miyLKsxWLx8/Mzm81Go5F2Ine4dOlSQkJCZWWln59feXm5yWQqLS0NDAykncutOhdVIIRgjC9cuGAymWgnoqCjowNj3Hk+oKqqKiQk5PLly5GRkbRzUVNfXx8QEFBWVhYWFuaUF/ToI8JrHA7H0aNH4+PjaQeh4FoLIoTa2trUajXFMLR45ynBAwcOJCcn+/n5IYTCwsKio6OPHDlCO5S73f0CIn2YTCa79hFob29HCHnnfuCagwcPGo1Gg8HgrBf09BPNxcXFGRkZVVVV8fHxu3fvph2HJrPZvHDhwi+//JJ2EOAmZrP5+o96YGBgZWUlxTyAOkmSnn/++Tlz5gQEBNDOQsfkyZMLCgoEQcjLy7v+IKGHKP+iffjwYXwzp0+f7nxCZGRkQUHBkSNH9Hr9U089RTeti9TU1Nx0I2zcuPHacywWS3Z29rx587KysihGdZ3y8vKbboQtW7bQjkYNxpgQcu1Lh8Nxx5WiQN/22muv1dbWLl68mHYQatatW3f8+PE33ngjNze3oaHBaa8r9RKnTp3ieZ4QQjsIBRaLJTk5+ZVXXqEdhLLGxkaEkNlsph3ETdasWTNs2LBrX0ZGRm7bto1iHooEQUAIXbhwgXYQml599dXk5GSLxUI7iEcwmUzffvuts17Noy+9tLa2XvtzQUFBaGioF14rstls2dnZqampixYtop0FuFVmZub58+eLiooQQgUFBRaLZfTo0bRDAToWLFiwc+fO7du3e+cEEoSQ3W6Xfh3aWVlZWVlZGR4e7qwX9+hrhPPmzSspKYmKiqqsrDx58uSaNWtoJ6Jg4cKFhw4dstlsycnJCCGNRrNv3z7aoShITU212+0IoczMTJ7njx071ueHURgMhtdff338+PETJkzYtm3bu+++6z0TKK83YcKEzpNg06dPVygU+/fv97ahIkePHn3//fdjYmIyMzM7H/n888+HDRtGN5Wbbd++/fXXXx86dCghZO/evbNnz+7cJTqFR0+faGtrO3bsWEVFhV6vHzFihHf+KlRRUXH99CmO4xITEynmoeXEiRPXv1e9Zy9w4sSJCxcuJCQkxMXF0c5Cx+nTpztPjXZKTEzkOI5iHvdraWm5cOHC9Y+YTCaNRkMrDy3nzp376aefMMbx8fHOvTmlRxchAAAA4Gped8kNAAAAuB4UIQAAAK8GRQgAAMCrQRECAADwalCEAAAAvBoUIQAAAK8GRQgAAMCrQRECAADwalCEAAAAvBoUIQAAAK8GRQgAAMCr/R9iywFEzWj0YAAAAABJRU5ErkJggg==", + "image/svg+xml": "\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ @@ -286,7 +409,7 @@ "# Vamos a ver cómo aproxima los resultados \n", "# Función que dado un punto lo evalúa con forward_propagation\n", "# y la función de activación Rampa\n", - "evaluate(x)=.forward_propagation(h,\n", + "evaluate(x)=forward_propagation(h,\n", " RampFunction,x)\n", "\n", "plot(x->evaluate([x])[1],\n", From de5c11693b99a6705fb2f4c5bb6a67aec0c0a6d9 Mon Sep 17 00:00:00 2001 From: Blanca Date: Wed, 15 Jun 2022 11:22:03 +0200 Subject: [PATCH 48/76] Renombro a OptimizedNeuralNetwork como bien comenta JJ en #118 Le estaba llamando mal con: Optimimized y Neuronal --- .../velocidad_funciones_activacion.jl | 2 +- .../visualizacion-funciones-activacion.jl | 2 +- .../0_experimento_sintetico.jl | 2 +- .../1_experimento_sintetico_heterogeneo.jl | 2 +- .../2_air_self_noise.jl | 2 +- Makefile | 2 +- .../1_funciones_activacion.tex | 2 +- .../3_detalles_implementacion.tex | 6 +- .../capitulos/Ejemplo-uso-biblioteca.ipynb | 86 +++++++++---------- .../src/OptimizedNeuralNetwork.jl | 0 .../src/activation_functions.jl | 0 .../src/forward_propagation.jl | 0 .../src/metric_estimation.jl | 0 .../src/one_layer_neuronal_network.jl | 0 .../multiple-input-multiple-output.jl | 0 .../multiple-input-single-ouput.jl | 0 .../single-input-single-output.jl | 0 .../src/weight-initializer-algorithm/utils.jl | 0 .../weight-initializer-algorithm.jl | 0 .../test/RUN_ALL_TEST.jl | 2 +- .../test/activation_functions.test.jl | 0 .../test/forward_propagation.test.jl | 0 .../test/metric_estimation.test.jl | 2 +- .../test/one_layer_neural_network.test.jl | 0 .../weight-inizializer-algorithm/main.test.jl | 0 .../multiple-input-multiple-output.test.jl | 0 .../multiple-input-single-output.test.jl | 0 .../single-input-single-output.test.jl | 0 Readme.md | 4 +- 29 files changed, 57 insertions(+), 57 deletions(-) rename OptimimizedNeuralNetwork.jl/src/OptimizedNeuronalNetwork.jl => OptimizedNeuralNetwork.jl/src/OptimizedNeuralNetwork.jl (100%) rename {OptimimizedNeuralNetwork.jl => OptimizedNeuralNetwork.jl}/src/activation_functions.jl (100%) rename {OptimimizedNeuralNetwork.jl => OptimizedNeuralNetwork.jl}/src/forward_propagation.jl (100%) rename {OptimimizedNeuralNetwork.jl => OptimizedNeuralNetwork.jl}/src/metric_estimation.jl (100%) rename {OptimimizedNeuralNetwork.jl => OptimizedNeuralNetwork.jl}/src/one_layer_neuronal_network.jl (100%) rename {OptimimizedNeuralNetwork.jl => OptimizedNeuralNetwork.jl}/src/weight-initializer-algorithm/multiple-input-multiple-output.jl (100%) rename {OptimimizedNeuralNetwork.jl => OptimizedNeuralNetwork.jl}/src/weight-initializer-algorithm/multiple-input-single-ouput.jl (100%) rename {OptimimizedNeuralNetwork.jl => OptimizedNeuralNetwork.jl}/src/weight-initializer-algorithm/single-input-single-output.jl (100%) rename {OptimimizedNeuralNetwork.jl => OptimizedNeuralNetwork.jl}/src/weight-initializer-algorithm/utils.jl (100%) rename {OptimimizedNeuralNetwork.jl => OptimizedNeuralNetwork.jl}/src/weight-initializer-algorithm/weight-initializer-algorithm.jl (100%) rename {OptimimizedNeuralNetwork.jl => OptimizedNeuralNetwork.jl}/test/RUN_ALL_TEST.jl (95%) rename {OptimimizedNeuralNetwork.jl => OptimizedNeuralNetwork.jl}/test/activation_functions.test.jl (100%) rename {OptimimizedNeuralNetwork.jl => OptimizedNeuralNetwork.jl}/test/forward_propagation.test.jl (100%) rename {OptimimizedNeuralNetwork.jl => OptimizedNeuralNetwork.jl}/test/metric_estimation.test.jl (91%) rename {OptimimizedNeuralNetwork.jl => OptimizedNeuralNetwork.jl}/test/one_layer_neural_network.test.jl (100%) rename {OptimimizedNeuralNetwork.jl => OptimizedNeuralNetwork.jl}/test/weight-inizializer-algorithm/main.test.jl (100%) rename {OptimimizedNeuralNetwork.jl => OptimizedNeuralNetwork.jl}/test/weight-inizializer-algorithm/multiple-input-multiple-output.test.jl (100%) rename {OptimimizedNeuralNetwork.jl => OptimizedNeuralNetwork.jl}/test/weight-inizializer-algorithm/multiple-input-single-output.test.jl (100%) rename {OptimimizedNeuralNetwork.jl => OptimizedNeuralNetwork.jl}/test/weight-inizializer-algorithm/single-input-single-output.test.jl (100%) diff --git a/Experimentos/comparativas-funciones-activacion/velocidad_funciones_activacion.jl b/Experimentos/comparativas-funciones-activacion/velocidad_funciones_activacion.jl index 6209a58..14e024a 100644 --- a/Experimentos/comparativas-funciones-activacion/velocidad_funciones_activacion.jl +++ b/Experimentos/comparativas-funciones-activacion/velocidad_funciones_activacion.jl @@ -10,7 +10,7 @@ # El directorio donde se guarda los ficheros es: DIRECTORIO_RESULTADOS ################################################################################### -include("../../OptimimizedNeuralNetwork.jl/src/activation_functions.jl") +include("../../OptimizedNeuralNetwork.jl/src/activation_functions.jl") using .ActivationFunctions # Bibliotecas para tiempos y estadísticas using TimerOutputs diff --git a/Experimentos/comparativas-funciones-activacion/visualizacion-funciones-activacion.jl b/Experimentos/comparativas-funciones-activacion/visualizacion-funciones-activacion.jl index 2db3de8..fe2ba14 100644 --- a/Experimentos/comparativas-funciones-activacion/visualizacion-funciones-activacion.jl +++ b/Experimentos/comparativas-funciones-activacion/visualizacion-funciones-activacion.jl @@ -4,7 +4,7 @@ # Paquetes using Plots using TOML -include("../../OptimimizedNeuralNetwork.jl/src/activation_functions.jl") +include("../../OptimizedNeuralNetwork.jl/src/activation_functions.jl") using .ActivationFunctions FICHERO_CONFIGURACION = "Experimentos/.config.toml" diff --git a/Experimentos/inicializacion-pesos-red-neuronal/0_experimento_sintetico.jl b/Experimentos/inicializacion-pesos-red-neuronal/0_experimento_sintetico.jl index 8b65ce2..fc8223d 100644 --- a/Experimentos/inicializacion-pesos-red-neuronal/0_experimento_sintetico.jl +++ b/Experimentos/inicializacion-pesos-red-neuronal/0_experimento_sintetico.jl @@ -10,7 +10,7 @@ config = TOML.parsefile(FICHERO_CONFIGURACION)["visualizacion-inicializacion-pes img_path = config["DIRECTORIO_IMAGENES"] Random.seed!(1) -include("../../OptimimizedNeuralNetwork.jl/src/OptimizedNeuronalNetwork.jl") +include("../../OptimizedNeuralNetwork.jl/src/OptimizedNeuralNetwork.jl") using .OptimimizedNeuralNetwork M = 1 diff --git a/Experimentos/inicializacion-pesos-red-neuronal/1_experimento_sintetico_heterogeneo.jl b/Experimentos/inicializacion-pesos-red-neuronal/1_experimento_sintetico_heterogeneo.jl index 111dd5a..f5061ea 100644 --- a/Experimentos/inicializacion-pesos-red-neuronal/1_experimento_sintetico_heterogeneo.jl +++ b/Experimentos/inicializacion-pesos-red-neuronal/1_experimento_sintetico_heterogeneo.jl @@ -11,7 +11,7 @@ img_path = config["DIRECTORIO_IMAGENES"] NOMBRE_FICHERO_RESULTADOS = config["NOMBRE_FICHERO_RESULTADOS"] # número de particiones numero_particiones = config["NUMERO_PARTICIONES"] -include("../../OptimimizedNeuralNetwork.jl/src/OptimizedNeuronalNetwork.jl") +include("../../OptimizedNeuralNetwork.jl/src/OptimizedNeuralNetwork.jl") using .OptimimizedNeuralNetwork Random.seed!(1) diff --git a/Experimentos/inicializacion-pesos-red-neuronal/2_air_self_noise.jl b/Experimentos/inicializacion-pesos-red-neuronal/2_air_self_noise.jl index 47d5d2b..e544363 100644 --- a/Experimentos/inicializacion-pesos-red-neuronal/2_air_self_noise.jl +++ b/Experimentos/inicializacion-pesos-red-neuronal/2_air_self_noise.jl @@ -13,7 +13,7 @@ config = TOML.parsefile(FICHERO_CONFIGURACION)["air-self-noise"] FILE = config["FICHERO_DATOS"] Random.seed!(1) -include("../../OptimimizedNeuralNetwork.jl/src/OptimizedNeuronalNetwork.jl") +include("../../OptimizedNeuralNetwork.jl/src/OptimizedNeuralNetwork.jl") using .OptimimizedNeuralNetwork #------------------------------------------------------ diff --git a/Makefile b/Makefile index 2cb105f..8fcad71 100644 --- a/Makefile +++ b/Makefile @@ -29,7 +29,7 @@ workflow-spell: install-spell spell ########## Test biblioteca redes neurales ########### test: - julia --project=. OptimimizedNeuralNetwork.jl/test/RUN_ALL_TEST.jl + julia --project=. OptimizedNeuralNetwork.jl/test/RUN_ALL_TEST.jl ############################### Generar experimentos ############ experimentos: diff --git a/Memoria/capitulos/5-Estudio_experimental/1_funciones_activacion.tex b/Memoria/capitulos/5-Estudio_experimental/1_funciones_activacion.tex index 72d0b98..26c0ae3 100644 --- a/Memoria/capitulos/5-Estudio_experimental/1_funciones_activacion.tex +++ b/Memoria/capitulos/5-Estudio_experimental/1_funciones_activacion.tex @@ -588,7 +588,7 @@ \subsection{ Implementación de las funciones de activación en la biblioteca de Puede encontrar la implementación de esto en la biblioteca de redes neuronales implementada en nuestro repositorio \footnote{ - Esto es en \url{https://github.com/BlancaCC/TFG-Estudio-de-las-redes-neuronales/tree/main/OptimimizedNeuralNetwork.jl/src/activation_functions.jl} + Esto es en \url{https://github.com/BlancaCC/TFG-Estudio-de-las-redes-neuronales/tree/main/OptimizedNeuralNetwork.jl/src/activation_functions.jl} }. % Funtores diff --git a/Memoria/capitulos/5-Estudio_experimental/3_detalles_implementacion.tex b/Memoria/capitulos/5-Estudio_experimental/3_detalles_implementacion.tex index 7b5054a..d2c6e43 100644 --- a/Memoria/capitulos/5-Estudio_experimental/3_detalles_implementacion.tex +++ b/Memoria/capitulos/5-Estudio_experimental/3_detalles_implementacion.tex @@ -20,7 +20,7 @@ \subsection{Implementación de redes neuronal} entrenamiento más eficiente las matrices $A, S$ se han escrito en una sola permitiendo así una evaluación más compacta. Puede encontrar la implementación -en \href{https://github.com/BlancaCC/TFG-Estudio-de-las-redes-neuronales/tree/main/OptimimizedNeuralNetwork.jl/src}{nuestro repositorio}. +en \href{https://github.com/BlancaCC/TFG-Estudio-de-las-redes-neuronales/tree/main/OptimizedNeuralNetwork.jl/src}{nuestro repositorio}. \subsubsection{Diseño de test} Para las redes neuronales generadas de manera aleatoria se debe de satisfacer que: \begin{itemize} @@ -135,7 +135,7 @@ \subsubsection{Ejemplo de uso} \subsection{Implementación del algoritmo de \textit{Forward propagation}} La evaluación de una red neuronal se realizará por medio de una función que recibe como parámetros un -tipo de dato \textit{red neuronal}. Puede encontrar la implementación en \href{https://github.com/BlancaCC/TFG-Estudio-de-las-redes-neuronales/tree/main/OptimimizedNeuralNetwork.jl/src}{nuestro repositorio}. +tipo de dato \textit{red neuronal}. Puede encontrar la implementación en \href{https://github.com/BlancaCC/TFG-Estudio-de-las-redes-neuronales/tree/main/OptimizedNeuralNetwork.jl/src}{nuestro repositorio}. \subsubsection{Diseño de los tests} De acorde al modelo \ref{definition:redes_neuronales_una_capa_oculta} @@ -221,7 +221,7 @@ \subsubsection{ Uso de los tipos de datos y \textit{ dispatch methods}} en Julia, tendremos una sola función que recoja a nuestro algoritmo de inicialización de pesos y diversas implementaciones adaptadas a la dimensión de entrada y salida. - Puede consultar la implementación en \href{https://github.com/BlancaCC/TFG-Estudio-de-las-redes-neuronales/tree/main/OptimimizedNeuralNetwork.jl/src}{la carpeta \textit{weight-initializer-algorithm}} de nuestra biblioteca. + Puede consultar la implementación en \href{https://github.com/BlancaCC/TFG-Estudio-de-las-redes-neuronales/tree/main/OptimizedNeuralNetwork.jl/src}{la carpeta \textit{weight-initializer-algorithm}} de nuestra biblioteca. Cabe mencionar que el caso de entrada y salida de dimensión uno ha sido el que más reducción de costo ha permitido, ya que en vez de realizar el diseño directo recogido en \ref{algo:algoritmo-iniciar-pesos} puede uno consultar diff --git a/Memoria/capitulos/Ejemplo-uso-biblioteca.ipynb b/Memoria/capitulos/Ejemplo-uso-biblioteca.ipynb index 75e93c0..c7a2f34 100644 --- a/Memoria/capitulos/Ejemplo-uso-biblioteca.ipynb +++ b/Memoria/capitulos/Ejemplo-uso-biblioteca.ipynb @@ -15,7 +15,7 @@ "source": [ "using Random\n", "using Plots\n", - "include(\"../../OptimimizedNeuralNetwork.jl/src/OptimizedNeuronalNetwork.jl\")\n", + "include(\"../../OptimizedNeuralNetwork.jl/src/OptimizedNeuralNetwork.jl\")\n", "using Main.OptimizedNeuronalNetwork" ] }, @@ -37,9 +37,9 @@ "data": { "text/plain": [ "3×3 Matrix{Float64}:\n", - " 0.916229 0.764541 0.339163\n", - " 0.137939 0.103458 0.461902\n", - " 0.903919 0.126394 0.196443" + " 0.616306 0.681879 0.892003\n", + " 0.944109 0.68691 0.013577\n", + " 0.0360461 0.935662 0.267793" ] }, "metadata": {}, @@ -59,8 +59,8 @@ "data": { "text/plain": [ "2×3 Matrix{Float64}:\n", - " 0.700526 0.931524 0.826037\n", - " 0.97602 0.56216 0.820643" + " 0.804971 0.0725089 0.633935\n", + " 0.714503 0.301529 0.818379" ] }, "metadata": {}, @@ -244,104 +244,104 @@ { "data": { "image/png": "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", - "image/svg+xml": "\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", + "image/svg+xml": "\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", "text/html": [ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" + "\n" ] }, "metadata": {}, diff --git a/OptimimizedNeuralNetwork.jl/src/OptimizedNeuronalNetwork.jl b/OptimizedNeuralNetwork.jl/src/OptimizedNeuralNetwork.jl similarity index 100% rename from OptimimizedNeuralNetwork.jl/src/OptimizedNeuronalNetwork.jl rename to OptimizedNeuralNetwork.jl/src/OptimizedNeuralNetwork.jl diff --git a/OptimimizedNeuralNetwork.jl/src/activation_functions.jl b/OptimizedNeuralNetwork.jl/src/activation_functions.jl similarity index 100% rename from OptimimizedNeuralNetwork.jl/src/activation_functions.jl rename to OptimizedNeuralNetwork.jl/src/activation_functions.jl diff --git a/OptimimizedNeuralNetwork.jl/src/forward_propagation.jl b/OptimizedNeuralNetwork.jl/src/forward_propagation.jl similarity index 100% rename from OptimimizedNeuralNetwork.jl/src/forward_propagation.jl rename to OptimizedNeuralNetwork.jl/src/forward_propagation.jl diff --git a/OptimimizedNeuralNetwork.jl/src/metric_estimation.jl b/OptimizedNeuralNetwork.jl/src/metric_estimation.jl similarity index 100% rename from OptimimizedNeuralNetwork.jl/src/metric_estimation.jl rename to OptimizedNeuralNetwork.jl/src/metric_estimation.jl diff --git a/OptimimizedNeuralNetwork.jl/src/one_layer_neuronal_network.jl b/OptimizedNeuralNetwork.jl/src/one_layer_neuronal_network.jl similarity index 100% rename from OptimimizedNeuralNetwork.jl/src/one_layer_neuronal_network.jl rename to OptimizedNeuralNetwork.jl/src/one_layer_neuronal_network.jl diff --git a/OptimimizedNeuralNetwork.jl/src/weight-initializer-algorithm/multiple-input-multiple-output.jl b/OptimizedNeuralNetwork.jl/src/weight-initializer-algorithm/multiple-input-multiple-output.jl similarity index 100% rename from OptimimizedNeuralNetwork.jl/src/weight-initializer-algorithm/multiple-input-multiple-output.jl rename to OptimizedNeuralNetwork.jl/src/weight-initializer-algorithm/multiple-input-multiple-output.jl diff --git a/OptimimizedNeuralNetwork.jl/src/weight-initializer-algorithm/multiple-input-single-ouput.jl b/OptimizedNeuralNetwork.jl/src/weight-initializer-algorithm/multiple-input-single-ouput.jl similarity index 100% rename from OptimimizedNeuralNetwork.jl/src/weight-initializer-algorithm/multiple-input-single-ouput.jl rename to OptimizedNeuralNetwork.jl/src/weight-initializer-algorithm/multiple-input-single-ouput.jl diff --git a/OptimimizedNeuralNetwork.jl/src/weight-initializer-algorithm/single-input-single-output.jl b/OptimizedNeuralNetwork.jl/src/weight-initializer-algorithm/single-input-single-output.jl similarity index 100% rename from OptimimizedNeuralNetwork.jl/src/weight-initializer-algorithm/single-input-single-output.jl rename to OptimizedNeuralNetwork.jl/src/weight-initializer-algorithm/single-input-single-output.jl diff --git a/OptimimizedNeuralNetwork.jl/src/weight-initializer-algorithm/utils.jl b/OptimizedNeuralNetwork.jl/src/weight-initializer-algorithm/utils.jl similarity index 100% rename from OptimimizedNeuralNetwork.jl/src/weight-initializer-algorithm/utils.jl rename to OptimizedNeuralNetwork.jl/src/weight-initializer-algorithm/utils.jl diff --git a/OptimimizedNeuralNetwork.jl/src/weight-initializer-algorithm/weight-initializer-algorithm.jl b/OptimizedNeuralNetwork.jl/src/weight-initializer-algorithm/weight-initializer-algorithm.jl similarity index 100% rename from OptimimizedNeuralNetwork.jl/src/weight-initializer-algorithm/weight-initializer-algorithm.jl rename to OptimizedNeuralNetwork.jl/src/weight-initializer-algorithm/weight-initializer-algorithm.jl diff --git a/OptimimizedNeuralNetwork.jl/test/RUN_ALL_TEST.jl b/OptimizedNeuralNetwork.jl/test/RUN_ALL_TEST.jl similarity index 95% rename from OptimimizedNeuralNetwork.jl/test/RUN_ALL_TEST.jl rename to OptimizedNeuralNetwork.jl/test/RUN_ALL_TEST.jl index 07dbd75..a5b0d9d 100644 --- a/OptimimizedNeuralNetwork.jl/test/RUN_ALL_TEST.jl +++ b/OptimizedNeuralNetwork.jl/test/RUN_ALL_TEST.jl @@ -6,7 +6,7 @@ # - Forward Propagation # - Our initialization algorithm #################################################### -include("../src/OptimizedNeuronalNetwork.jl") +include("../src/OptimizedNeuralNetwork.jl") using .OptimizedNeuronalNetwork println("Testing Activation functions...") diff --git a/OptimimizedNeuralNetwork.jl/test/activation_functions.test.jl b/OptimizedNeuralNetwork.jl/test/activation_functions.test.jl similarity index 100% rename from OptimimizedNeuralNetwork.jl/test/activation_functions.test.jl rename to OptimizedNeuralNetwork.jl/test/activation_functions.test.jl diff --git a/OptimimizedNeuralNetwork.jl/test/forward_propagation.test.jl b/OptimizedNeuralNetwork.jl/test/forward_propagation.test.jl similarity index 100% rename from OptimimizedNeuralNetwork.jl/test/forward_propagation.test.jl rename to OptimizedNeuralNetwork.jl/test/forward_propagation.test.jl diff --git a/OptimimizedNeuralNetwork.jl/test/metric_estimation.test.jl b/OptimizedNeuralNetwork.jl/test/metric_estimation.test.jl similarity index 91% rename from OptimimizedNeuralNetwork.jl/test/metric_estimation.test.jl rename to OptimizedNeuralNetwork.jl/test/metric_estimation.test.jl index 382fa5a..c5c4054 100644 --- a/OptimimizedNeuralNetwork.jl/test/metric_estimation.test.jl +++ b/OptimizedNeuralNetwork.jl/test/metric_estimation.test.jl @@ -2,7 +2,7 @@ # TEST Metric estimations ################################################################### using Test -#include("../src/OptimizedNeuronalNetwork.jl") +#include("../src/OptimizedNeuralNetwork.jl") include("../src/metric_estimation.jl") @testset "Regression metrics" begin diff --git a/OptimimizedNeuralNetwork.jl/test/one_layer_neural_network.test.jl b/OptimizedNeuralNetwork.jl/test/one_layer_neural_network.test.jl similarity index 100% rename from OptimimizedNeuralNetwork.jl/test/one_layer_neural_network.test.jl rename to OptimizedNeuralNetwork.jl/test/one_layer_neural_network.test.jl diff --git a/OptimimizedNeuralNetwork.jl/test/weight-inizializer-algorithm/main.test.jl b/OptimizedNeuralNetwork.jl/test/weight-inizializer-algorithm/main.test.jl similarity index 100% rename from OptimimizedNeuralNetwork.jl/test/weight-inizializer-algorithm/main.test.jl rename to OptimizedNeuralNetwork.jl/test/weight-inizializer-algorithm/main.test.jl diff --git a/OptimimizedNeuralNetwork.jl/test/weight-inizializer-algorithm/multiple-input-multiple-output.test.jl b/OptimizedNeuralNetwork.jl/test/weight-inizializer-algorithm/multiple-input-multiple-output.test.jl similarity index 100% rename from OptimimizedNeuralNetwork.jl/test/weight-inizializer-algorithm/multiple-input-multiple-output.test.jl rename to OptimizedNeuralNetwork.jl/test/weight-inizializer-algorithm/multiple-input-multiple-output.test.jl diff --git a/OptimimizedNeuralNetwork.jl/test/weight-inizializer-algorithm/multiple-input-single-output.test.jl b/OptimizedNeuralNetwork.jl/test/weight-inizializer-algorithm/multiple-input-single-output.test.jl similarity index 100% rename from OptimimizedNeuralNetwork.jl/test/weight-inizializer-algorithm/multiple-input-single-output.test.jl rename to OptimizedNeuralNetwork.jl/test/weight-inizializer-algorithm/multiple-input-single-output.test.jl diff --git a/OptimimizedNeuralNetwork.jl/test/weight-inizializer-algorithm/single-input-single-output.test.jl b/OptimizedNeuralNetwork.jl/test/weight-inizializer-algorithm/single-input-single-output.test.jl similarity index 100% rename from OptimimizedNeuralNetwork.jl/test/weight-inizializer-algorithm/single-input-single-output.test.jl rename to OptimizedNeuralNetwork.jl/test/weight-inizializer-algorithm/single-input-single-output.test.jl diff --git a/Readme.md b/Readme.md index 20e626a..1109f3c 100644 --- a/Readme.md +++ b/Readme.md @@ -7,9 +7,9 @@ Tutores: - Juan Julián Merelo Guervós - Francisco Javier Merí de la Maza -## Biblioteca OptimizedNeuralNetwork.jl +## Biblioteca OptimizedNeuralNetwork.jl -La biblioteca OptimizedNeuralNetwork.jl implementa el modelo de red neuronal descrito en la memoria del proyecto (puede descargar una versión pdf en *release*) +La biblioteca OptimizedNeuralNetwork.jlimplementa el modelo de red neuronal descrito en la memoria del proyecto (puede descargar una versión pdf en *release*) y que pretende ser una optimización de las redes neuronales convencionales, así como otros algoritmo que tengan como objetivo también la mejora en algún aspecto. From da5c97795516b5226e559c006b4e7fc4473dffc5 Mon Sep 17 00:00:00 2001 From: Blanca Date: Wed, 15 Jun 2022 11:30:09 +0200 Subject: [PATCH 49/76] =?UTF-8?q?Corrige=20fallo=20ortogr=C3=A1fico?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Readme.md b/Readme.md index 1109f3c..e119f1a 100644 --- a/Readme.md +++ b/Readme.md @@ -9,7 +9,7 @@ Tutores: ## Biblioteca OptimizedNeuralNetwork.jl -La biblioteca OptimizedNeuralNetwork.jlimplementa el modelo de red neuronal descrito en la memoria del proyecto (puede descargar una versión pdf en *release*) +La biblioteca \textit{OptimizedNeuralNetwork.jl} implementa el modelo de red neuronal descrito en la memoria del proyecto (puede descargar una versión pdf en *release*) y que pretende ser una optimización de las redes neuronales convencionales, así como otros algoritmo que tengan como objetivo también la mejora en algún aspecto. From 656030d75fb4ed0bcfbdd4f62323f940210afb78 Mon Sep 17 00:00:00 2001 From: Blanca Date: Wed, 15 Jun 2022 11:35:49 +0200 Subject: [PATCH 50/76] pongo en cursiva el nombre de la biblioteca --- Readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Readme.md b/Readme.md index e119f1a..66ce07b 100644 --- a/Readme.md +++ b/Readme.md @@ -9,7 +9,7 @@ Tutores: ## Biblioteca OptimizedNeuralNetwork.jl -La biblioteca \textit{OptimizedNeuralNetwork.jl} implementa el modelo de red neuronal descrito en la memoria del proyecto (puede descargar una versión pdf en *release*) +La biblioteca *OptimizedNeuralNetwork.jl* implementa el modelo de red neuronal descrito en la memoria del proyecto (puede descargar una versión pdf en *release*) y que pretende ser una optimización de las redes neuronales convencionales, así como otros algoritmo que tengan como objetivo también la mejora en algún aspecto. From a8e04847b744cae422f884b54387644864e2ece9 Mon Sep 17 00:00:00 2001 From: Blanca Date: Wed, 15 Jun 2022 14:01:22 +0200 Subject: [PATCH 51/76] Aplica cambio de JJ de #120 --- .../capitulos/Ejemplo-uso-biblioteca.ipynb | 220 ++++++++++++++---- Project.toml | 2 +- Readme.md | 53 +++-- 3 files changed, 209 insertions(+), 66 deletions(-) diff --git a/Memoria/capitulos/Ejemplo-uso-biblioteca.ipynb b/Memoria/capitulos/Ejemplo-uso-biblioteca.ipynb index c7a2f34..ac744aa 100644 --- a/Memoria/capitulos/Ejemplo-uso-biblioteca.ipynb +++ b/Memoria/capitulos/Ejemplo-uso-biblioteca.ipynb @@ -19,6 +19,15 @@ "using Main.OptimizedNeuronalNetwork" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Inicialización con pesos aleatorios \n", + "\n", + "Creamos una red neuronal con pesos inicializados de manera aleatoria. " + ] + }, { "cell_type": "code", "execution_count": 2, @@ -37,9 +46,9 @@ "data": { "text/plain": [ "3×3 Matrix{Float64}:\n", - " 0.616306 0.681879 0.892003\n", - " 0.944109 0.68691 0.013577\n", - " 0.0360461 0.935662 0.267793" + " 0.284694 0.0768469 0.385379\n", + " 0.166919 0.129388 0.794948\n", + " 0.377328 0.987315 0.707498" ] }, "metadata": {}, @@ -59,8 +68,8 @@ "data": { "text/plain": [ "2×3 Matrix{Float64}:\n", - " 0.804971 0.0725089 0.633935\n", - " 0.714503 0.301529 0.818379" + " 0.0882701 0.328332 0.0012991\n", + " 0.112579 0.43775 0.397306" ] }, "metadata": {}, @@ -86,6 +95,22 @@ ")" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "La matriz $W1$ se corresponde a los pesos que se sitúan entre la capa de entrada y la capa oculta. \n", + "\n", + "La matriz $W2$ son los pesos entre la capa oculta y la salida. \n", + "\n", + "## Inicialización de una red neuronal partir de matrices \n", + "Como se comenta detalladamente en la memoria sección 5.2; $(A,S,B)$ son matrices que modelizan una red neuronal.\n", + "\n", + "- $A$ representa los coeficientes que se le aplican a los vectores de entrada. \n", + "- $S$ representa los sesgos que se suma a los respectivos parámetros de entrada. \n", + "- $B$ representan los coeficientes que se aplican a la capa oculta para la salida. " + ] + }, { "cell_type": "code", "execution_count": 3, @@ -142,10 +167,18 @@ } ], "source": [ - "S = [1,2,3] \n", - "A = [3 4 1; 4 6 3; 1 1 1]\n", - "B = [1 2 3; 3 2 3]\n", - "FromMatrixNN(S, A, B)" + "S = [1,2,3] # Sesgos que se añaden a los parámetros entrada\n", + "A = [3 4 1; 4 6 3; 1 1 1] # Coeficientes entrada\n", + "B = [1 2 3; 3 2 3] # Coeficientes de salida\n", + "h = FromMatrixNN(S, A, B)\n", + "display(h)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ejemplo de evaluación con Forward propagation" ] }, { @@ -166,17 +199,22 @@ } ], "source": [ - "# Variables auxiliares \n", - "S = [1,2,3] \n", - "A = [3 4 1; 4 6 3; 1 1 1]\n", - "B = [1 2 3; 3 2 3]\n", "v = [1,2,2]\n", - "h = FromMatrixNN(S, A, B)\n", "# Ejemplo de evaluación h(v) \n", "# con función de activación ReLU y forward_propagation \n", "forward_propagation(h, ReLU,v )" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ejemplo de uso del algoritmo de inicialización de pesos \n", + "\n", + "Para ello se utilizará la función\n", + "`nn_from_data(X_train, Y_train, n, M)`" + ] + }, { "cell_type": "code", "execution_count": 5, @@ -244,104 +282,104 @@ { "data": { "image/png": "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", - "image/svg+xml": "\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", + "image/svg+xml": "\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", "text/html": [ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" + "\n" ] }, "metadata": {}, @@ -419,6 +457,86 @@ " label=\"f ideal\",\n", " title=\"Comparativa función ideal y red neuronal n=$n\")" ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Funciones de activación \n", + "\n", + "### Funciones de activación no dependientes de parámetros\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CosineSquasher(0.0809642765524543) = 0.5404379245897707\n", + "RampFunction(0.1575655848130193) = 0.1575655848130193\n", + "ReLU(0.7990924914551383) = 0.7990924914551383\n", + "Sigmoid(0.6730365028601888) = 0.6621827491963587\n", + "HardTanh(0.9342280797529621) = 0.9342280797529621\n" + ] + } + ], + "source": [ + "funciones_activacion = [\n", + " CosineSquasher,\n", + " RampFunction,\n", + " ReLU, \n", + " Sigmoid, \n", + " HardTanh\n", + "]\n", + "\n", + "for σ in funciones_activacion\n", + " x = rand()\n", + " println(\"$(σ)($x) = $(σ(x))\")\n", + "end" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Funciones de activación dependientes de parámetros\n", + "\n", + "Existen funciones de activación que depende de parámetros, podemos definirlas eficientemente a partir de macros: \n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "f(-2.733154105970187) = -0.027331541059701873\n", + "f(-1.8583588278359087) = -0.018583588278359087\n", + "f(4.017764270348949) = 4.017764270348949\n" + ] + } + ], + "source": [ + "# Concretamos los parámetros de los que dependen\n", + "# de macros\n", + "umbral = @ThresholdFunction(x->x,0) \n", + "indicadora = @IndicatorFunction(0)\n", + "lRelu = @LReLU(0.01)\n", + "\n", + "# Evaluamos en puntos concretos\n", + "dependientes_parametro = [umbral, indicadora, lRelu]\n", + "for σ in dependientes_parametro\n", + " x = (rand()-0.5)*10\n", + " println(\"$(σ)($x) = $(σ(x))\")\n", + "end" + ] } ], "metadata": { diff --git a/Project.toml b/Project.toml index dff7b15..79b5f49 100644 --- a/Project.toml +++ b/Project.toml @@ -1,4 +1,4 @@ -name = "OptimizedNeuralNetwork.jlactiva" +name = "OptimizedNeuralNetwork.jl" uuid = "c0288f0f-8577-469d-b024-d58cda6ff0ea" authors = ["Blanca "] version = "0.1.0" diff --git a/Readme.md b/Readme.md index 66ce07b..a3c3273 100644 --- a/Readme.md +++ b/Readme.md @@ -7,17 +7,27 @@ Tutores: - Juan Julián Merelo Guervós - Francisco Javier Merí de la Maza -## Biblioteca OptimizedNeuralNetwork.jl +## Biblioteca OptimizedNeuralNetwork.jl La biblioteca *OptimizedNeuralNetwork.jl* implementa el modelo de red neuronal descrito en la memoria del proyecto (puede descargar una versión pdf en *release*) y que pretende ser una optimización de las redes neuronales convencionales, así como otros algoritmo que tengan como objetivo también la mejora en algún aspecto. Contiene las siguientes funciones que mostramos con algunos ejemplos +puede ver un ejemplo completo de uso en [el siguiente notebook](https://github.com/BlancaCC/TFG-Estudio-de-las-redes-neuronales/tree/main/Memoria/capitulos) + +### Importamos la biblioteca y módulo + +```Julia +include("OptimizedNeuralNetwork.jl/src/OptimizedNeuralNetwork.jl") +using Main.OptimizedNeuronalNetwork +``` ### Creación de redes neuronales -Red neuronal con pesos aleatorio y $n$ neuronas +#### Creación de una red neuronal de pesos aleatorios + +Red neuronal con pesos aleatorios: ``` Julia entry_dimension = 2 @@ -31,12 +41,12 @@ RandomWeightsNN( ) ``` -Creación a partir de matrices +#### Creación de una red neuronal a partir de matrices ```Julia -S = [1,2,3] -A = [3 4 1; 4 6 3; 1 1 1] -B = [1 2 3; 3 2 3] +S = [1,2,3] # sesgos entrada +A = [3 4 1; 4 6 3; 1 1 1] # coeficientes entrada +B = [1 2 3; 3 2 3] # coeficientes salida FromMatrixNN(S, A, B) ``` @@ -45,18 +55,33 @@ Inicialización de la matriz a partir de datos de entrenamiento Donde $n$ es el número de neuronas y $M$ es una cte que depende de la función de activación (ver memoria) -### Funciones de activación usuales +### Funciones de activación + +### Evaluadad en un punto y no dependientes de ningún parámetro ``` Julia - @ThresholdFunction(id,0)(-1) - CosineSquasher(10) 1 - @IndicatorFunction(0)(-0.1) + CosineSquasher(10) RampFunction(1) ReLU(-1) Sigmoid(9999999) HardTanh(9999999) - @LReLU(0.01)(10) - @LReLU(-0.01)(-1) +``` + +### Funciones de activación dependientes de parámetros + +Existen funciones de activación que depende de parámetros, podemos definirlas eficientemente a partir de macros: + +```Julia +# Concretamos los parámetros de los que dependen +# de macros + umbral = @ThresholdFunction(x->x,0) + indicadora = @IndicatorFunction(0) + lRelu = @LReLU(0.01) + +# Evaluamos en puntos concretos +umbral(-2.9) +indicadora(3.9) +lRelu(0.2) ``` ### Algoritmo de *forward propagation* @@ -71,11 +96,11 @@ forward_propagation(h,RampFunction,x) TODO :) ``` -## Reglas +## Reglas - Generación de la memoria `make`. - Pasar test a la implementación `make test`. -- Para ejecutar los experimentos `make experimentos` (los experimentos generan datos cuya localización pude configurar en `Experimentos/.config.toml`). +- Para ejecutar los experimentos `make experimentos` (los experimentos generan datos cuya localización pude configurar en `Experimentos/.config.toml`). ## Motivación del proyecto: Democratización de la inteligencia artificial From b469b04789bde37af1716eb5cd4167b4f63c149a Mon Sep 17 00:00:00 2001 From: Blanca Date: Thu, 16 Jun 2022 09:37:39 +0200 Subject: [PATCH 52/76] =?UTF-8?q?Comienza=20implementaci=C3=B3n=20#121?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../aprendizaje.tex | 2 +- .../src/backpropagation.jl | 67 +++++++++++++++++++ 2 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 OptimizedNeuralNetwork.jl/src/backpropagation.jl diff --git a/Memoria/capitulos/4-Actualizacion_redes_neuronales/aprendizaje.tex b/Memoria/capitulos/4-Actualizacion_redes_neuronales/aprendizaje.tex index 66de940..b5151d8 100644 --- a/Memoria/capitulos/4-Actualizacion_redes_neuronales/aprendizaje.tex +++ b/Memoria/capitulos/4-Actualizacion_redes_neuronales/aprendizaje.tex @@ -706,7 +706,7 @@ \subsection{Algoritmos de actualización de pesos de una neurona} \gets \text{parcial} \beta _{u v} + - \text{diferencia}_v s_i$. + \text{diferencia}_v s_u$. } } diff --git a/OptimizedNeuralNetwork.jl/src/backpropagation.jl b/OptimizedNeuralNetwork.jl/src/backpropagation.jl new file mode 100644 index 0000000..e24bd5b --- /dev/null +++ b/OptimizedNeuralNetwork.jl/src/backpropagation.jl @@ -0,0 +1,67 @@ +########################################################## +# Implementación de Backpropagation +# Basado en el algoritmo 4 y 5, sección 5.3 de la memoria +########################################################## +VectorOrMatrix = Union{Matrix,Vector} +function calculo_gradiente( + neural_network::AbstractOneLayerNeuralNetwork, + X_train :: VectorOrMatrix, + Y_train :: VectorOrMatrix, + batch_size :: Int = 32, + activation_function, + derivative_activation_funcion + ) + _,len = size(X_train) + if len < batch_size + error("batch_size should be equal or smaller than the size of train dataset, + but $batch_size > $len") + end + # Falta comprobar que la longitud de X e Y es correcta + + # Derivadas parciales a calcular + _,d = size(neural_network.W1) + s,n = size(neural_network.W2) + + partial_W1 = zeros(float, (n+1,d)) + partial_W2 = zeros(float, (s,n)) + + # Variables auxiliares para reducir número de operaciones + sensibilities_img = zeros(Float64, n) + + + + index = first(randperm(len),batch_size) + # Para cada muestra del entrenamiento + for indice_entrenamiento in index + # 1. Forward propagation almacenando resultado relevantes + 𝛅 = neural_network.W1 * push!(copy(X_train[i,:]),1) + sensibilities_img = map(activation_function, 𝛅) + derivative_sensibilities_img= map(derivative_activation_funcion, 𝛅) + # En la fóruma de Back propagation hay algo mal + derivative_B = [ + neural_network.W2[k,i]*ds[i] + for (i,k) in Iterators.product(1:n, 1:s) + ] + forward_propgation_x = h.W2 * s + error = forward_propgation_x .- y + + # 2. Parcial de B (W_2) + for v in 1:n + for w in 1:s + partial_W2[w,v] = partial_W2[w,v] + error[w]*sensibilities_img[v] + end + end + # 3. Parcial S + for v in 1:n + for u in 1:s + parcial_W2[u, v] += error[u]*derivative_sensibilities_img[v] + end + end + + # 4. Parcial + + + + + end +end \ No newline at end of file From df5fa542c962368c98d91f3c45ee5d876e16f739 Mon Sep 17 00:00:00 2001 From: Blanca Date: Thu, 16 Jun 2022 10:50:13 +0200 Subject: [PATCH 53/76] =?UTF-8?q?Introducci=C3=B3n=20al=20cap=C3=ADtulo=20?= =?UTF-8?q?4=20#117?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/personal-dictionary.txt | 8 +++-- .../feedforward-network-una-capa.tex | 36 +++++++++++++++++-- .../articulo_5_colorarios_lp.tex | 2 +- .../articulo_6_multi_output.tex | 4 +-- .../diferencia_entre_los_reales_y_enteros.tex | 1 + Readme.md | 2 +- 6 files changed, 44 insertions(+), 9 deletions(-) diff --git a/.github/workflows/personal-dictionary.txt b/.github/workflows/personal-dictionary.txt index 50b06fd..2ea949e 100644 --- a/.github/workflows/personal-dictionary.txt +++ b/.github/workflows/personal-dictionary.txt @@ -39,6 +39,7 @@ Iésima JJ Julián Jupyter +KNN LReLU LaTeX Liang @@ -59,6 +60,7 @@ Nótese Ockham OneLayerNeuralNetwork OptimizedNeuralNetwork +OptimizedNeuronalNetwork Palett Perceptrón Pérez @@ -78,6 +80,7 @@ TFG TeoremaStoneWeiertrass ThresholdFunction Tietze +UCI UMVUE Wilcoxon Wortman @@ -135,6 +138,7 @@ isoperimetry jejejeje jk jl +lRelu lcc linenos lineos @@ -198,6 +202,4 @@ tratabilidad usefulInformation ésima ésimas -ésimo -KNN -UCI \ No newline at end of file +ésimo \ No newline at end of file diff --git a/Memoria/capitulos/1-Introduccion_redes_neuronales/feedforward-network-una-capa.tex b/Memoria/capitulos/1-Introduccion_redes_neuronales/feedforward-network-una-capa.tex index 75fc6df..1373e8a 100644 --- a/Memoria/capitulos/1-Introduccion_redes_neuronales/feedforward-network-una-capa.tex +++ b/Memoria/capitulos/1-Introduccion_redes_neuronales/feedforward-network-una-capa.tex @@ -5,8 +5,40 @@ %******************************************************* % Introducción al capítulo -A lo largo de este capítulo daremos una modelización propia de red neuronal y la compararemos con otros modelos ofrecidos. -Probaremos además que el modelo propuesto es un aproximador universal, es decir es capaz de aproximar cualquier función medible. + El objetivo principal de este capítulo es dar una modelización propia de red neuronal y demostrar que es un + aproximador universal a cualquier función medible. + + El capítulo se organiza de la siguiente manera: + + \begin{enumerate} + \item \textbf{Introducción de nuestro modelo} de red neuronal $\rrnnmc$ y comparación con los usuales en la sección \ref{sec:redes-neuronales-intro-una-capa}. + \item Demostración de que \textbf{las redes neuronales modelizadas son aproximadores universales}. + \begin{itemize} + \item Para ello serán necesaria una serie de \textbf{definiciones previas} que se encuentran en la sección \ref{ch:articulo:sec:defincionesPrimeras}, + las más relevantes son la de función de activación y los espacios $\pmcg$. + + \item El resultado de convergencia universal es producto de una sucesión de \textbf{conseguir aproximar espacios a partir de otros}, concretamente las relaciones \textit{es denso en} y dónde se demuestran son: + \begin{align*} + \rrnn + \xRightarrow[]{\ref{teo:2_4_rrnn_densas_M}} + \rrnng + \xRightarrow[]{\ref{teorema:2_3_uniformemente_denso_compactos}} + \pmcg + \xRightarrow[]{\ref{teo:TeoremaConvergenciaRealEnCompactosDefinicionesEsenciales}} + \fC + \xRightarrow[]{\ref{teo:2_2_denso_función_continua}} + \fM. + \end{align*} + Además se verá + en la sección \ref{ch04:espacios-Lp} que $\rrnn$ es denso en $L_p(\R^d, \mu)$ lo que nos permitirá establecer propiedades y entender cómo funciona nuestro modelo + para problemas concretos de regresión y clasificación. + + \item En la sección \ref{ch04:salida-varias-dimensiones} se demostrará la convergencia universal para el espacio + $\rrnnmc$. + \end{itemize} + \item Consideración en la sección \ref{ch04:capacidad-calculo} si \textbf{en la práctica} se tiene la \textbf{capacidad computacional de actuar como aproximador universal}. + + \end{enumerate} % Comienzo de la sección diff --git a/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_5_colorarios_lp.tex b/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_5_colorarios_lp.tex index 60e3ff8..c8a51b4 100644 --- a/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_5_colorarios_lp.tex +++ b/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_5_colorarios_lp.tex @@ -5,7 +5,7 @@ % Contenido del artículo 5: Colorarios LP %*************************************************************** \section{Generalización a espacios $L_p$} - +\label{ch04:espacios-Lp} Hasta ahora habíamos considerado el espacio de funciones continuas $\fC$ como subespacio dentro del espacio de funciones medibles $\fM$. diff --git a/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_6_multi_output.tex b/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_6_multi_output.tex index 18179fb..80eca1d 100644 --- a/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_6_multi_output.tex +++ b/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_6_multi_output.tex @@ -4,8 +4,8 @@ %*************************************************************** % Contenido del artículo 5: Generalización a multi-output %*************************************************************** -\section{Generalización para \textit{multi-output neuronal networks}} - +\section{Generalización para \textit{multi-output neural networks}} +\label{ch04:salida-varias-dimensiones} En las secciones anteriores se han provisto resultados para redes neuronales de salida real. Vamos a generalizar los resultados vistos para ser capaces de aproximar funciones continuas o medibles diff --git a/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/diferencia_entre_los_reales_y_enteros.tex b/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/diferencia_entre_los_reales_y_enteros.tex index ba1a2a5..b0027b3 100644 --- a/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/diferencia_entre_los_reales_y_enteros.tex +++ b/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/diferencia_entre_los_reales_y_enteros.tex @@ -5,6 +5,7 @@ % y que refleja una posible fuente de mejora de las redes neuronales % ISSUE #88 \section{Consideración sobre la capacidad de cálculo} +\label{ch04:capacidad-calculo} Suele pasar peligrosamente desapercibido que el teorema \ref{corolario:2_6} recién probado asegura que se podrá encontrar una red neuronal en $\rrnnmc$ diff --git a/Readme.md b/Readme.md index a3c3273..2b1e2aa 100644 --- a/Readme.md +++ b/Readme.md @@ -57,7 +57,7 @@ Donde $n$ es el número de neuronas y $M$ es una cte que depende de la función ### Funciones de activación -### Evaluadad en un punto y no dependientes de ningún parámetro +### Evaluada en un punto y no dependientes de ningún parámetro ``` Julia CosineSquasher(10) From b97fc88abfaafc4278cf437e84ad084fff8883fd Mon Sep 17 00:00:00 2001 From: Blanca Date: Thu, 16 Jun 2022 17:00:24 +0200 Subject: [PATCH 54/76] =?UTF-8?q?Revisa=20y=20a=C3=B1ade=20introducci?= =?UTF-8?q?=C3=B3n=20al=20cap=C3=ADtulo=203=20=20de=20teor=C3=ADa=20de=20l?= =?UTF-8?q?a=20aproximaci=C3=B3n=20#117?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../3-Teoria_aproximacion/0_objetivos.tex | 9 ++--- .../3-Teoria_aproximacion/4_Conclusiones.tex | 25 ++++++++----- .../1_funciones_activacion.tex | 6 +-- Memoria/preliminares/resumen.tex | 37 ++++++++++++++----- Memoria/tfg.tex | 2 +- 5 files changed, 49 insertions(+), 30 deletions(-) diff --git a/Memoria/capitulos/3-Teoria_aproximacion/0_objetivos.tex b/Memoria/capitulos/3-Teoria_aproximacion/0_objetivos.tex index fbfee09..dec693d 100644 --- a/Memoria/capitulos/3-Teoria_aproximacion/0_objetivos.tex +++ b/Memoria/capitulos/3-Teoria_aproximacion/0_objetivos.tex @@ -1,18 +1,15 @@ % !TeX root = ../../tfg.tex % !TeX encoding = utf8 %%%% -% OBJETIVOS SOBRE EL CAPÍTULO DE TEORÍA DE LA PROXIMACIÓN +% OBJETIVOS SOBRE EL CAPÍTULO DE TEORÍA DE LA APROXIMACIÓN %%%%%%%% \chapter{Teoría de la aproximación} \label{ch03:teoria-aproximar} Puesto que queremos fundamentar desde el origen las redes neuronales, - supongamos que desconociéramos la existencia de éstas - y nos halláramos frente a un problema de aprendizaje \ref{sec:Aprendizaje}; - el enfoque más natural consistiría en abordar el problema - haciendo uso de teoría de la aproximación. - ¿Somos capaces de aproximar una función a partir de sus puntos? +vamos a tratar de abordar el problema de aprendizaje \ref{sec:Aprendizaje} desde resultados clásicos de teoría de la aproximación con el fin de analizar su carencias y virtudes (ver conclusiones \ref{ch03:conclusiones-teoria-aproximacion}). Para ello nuestro objetivo en esta sección será desarrollar la teoría necesaria para demostrar y analizar el teorema de Stone Weierstrass. + diff --git a/Memoria/capitulos/3-Teoria_aproximacion/4_Conclusiones.tex b/Memoria/capitulos/3-Teoria_aproximacion/4_Conclusiones.tex index 067928c..b10832a 100644 --- a/Memoria/capitulos/3-Teoria_aproximacion/4_Conclusiones.tex +++ b/Memoria/capitulos/3-Teoria_aproximacion/4_Conclusiones.tex @@ -27,10 +27,25 @@ \section{Conclusiones teoría de la aproximación} \url{https://github.com/BlancaCC/TFG-Estudio-de-las-redes-neuronales}, en el fichero \texttt{Lagrange.ipynb} que se encuentra en el directorio de teoría de la aproximación de la memoria. } + El problema que evidencia este caso patológico es el tratar de abarcar todo el dominio +con un mismo polinomio ¿y si en lugar de eso se hicieran aproximaciones +en una partición concreta del dominio? El resultado sería una función definida a trozos. +La cuestión es que esta aproximación sería difícil de implementar de manera eficiente; +sin embargo, es el germen y el enfoque de las \textit{funciones de activación}. + \item Y otra cuestión, de corte físico o filosófico ¿son todos los fenómenos observables continuos? Sería extraño que así fueran, lo que evidencia la necesidad de formular una teoría más general. \end{enumerate} + +De todas formas no abandonaremos del todo esta teoría; porque como ya veremos, el +teorema de Stone Weierstrass \ref{ch:TeoremaStoneWeiertrass} jugará +un papel fundamental en el diseño y demostración de + las redes neuronales como aproximadores universales, + ya que nos brinda los requisitos mínimo que debe de tener un conjunto para ser capaz de aproximar cualquier función continua. + +%\newpage + \begin{figure}[H] \centering \begin{subfigure}[b]{0.475\textwidth} @@ -64,13 +79,3 @@ \section{Conclusiones teoría de la aproximación} \label{fig:aproximacion-lagrage} \end{figure} -El problema que evidencia este caso patológico es el tratar de abarcar todo el dominio -con un mismo polinomio ¿y si en lugar de eso se hicieran aproximaciones -en una partición concreta del dominio? El resultado sería una función definida a trozos. -La cuestión es que esta aproximación sería difícil de implementar de manera eficiente; -sin embargo, es el germen y el enfoque de las \textit{funciones de activación}. - -De todas formas no abandonemos del todo esta teoría, porque como ya veremos el -teorema de Stone Weierstrass \ref{ch:TeoremaStoneWeiertrass} jugará -un papel fundamental en la demostración -de que las redes neuronales son aproximadores universales. diff --git a/Memoria/capitulos/5-Estudio_experimental/1_funciones_activacion.tex b/Memoria/capitulos/5-Estudio_experimental/1_funciones_activacion.tex index 26c0ae3..50ca1b7 100644 --- a/Memoria/capitulos/5-Estudio_experimental/1_funciones_activacion.tex +++ b/Memoria/capitulos/5-Estudio_experimental/1_funciones_activacion.tex @@ -22,7 +22,7 @@ \chapter{Democratización de las funciones de activación} El teorema \ref{teo:eficacia-funciones-activation} y el corolario \ref{corolario:afine-activation-function} tienen su importancia ya que si sabemos que dos funciones de activación producen -los mismos resultados (\textit{o muy similares}), +los mismos resultados, conociendo su coste computacional podremos seleccionar el que sea menor y de esta manera optimizar el tiempo de cálculo y disminuir el número de operaciones sin @@ -303,8 +303,8 @@ \section{Caracterización de las funciones de activación} \phi(Grafo(\sigma)) = Grafo(\gamma), \end{equation*} entonces - el espacio de redes neuronales de $n$ neuronas creado con la función de activación $\sigma$ es - igual al espacio de redes neuronales creado con la función de activación $\gamma$. + el espacio de redes neuronales de $n$ neuronas creado a partir de la función de activación $\sigma$ es + igual al espacio de redes neuronales creado a partir la función de activación $\gamma$. \end{teorema} \begin{proof} % Primero lo demostramos con sesgo diff --git a/Memoria/preliminares/resumen.tex b/Memoria/preliminares/resumen.tex index 573e37c..39a3657 100644 --- a/Memoria/preliminares/resumen.tex +++ b/Memoria/preliminares/resumen.tex @@ -10,27 +10,44 @@ \chapter*{Resumen}\label{ch:resumen} %\addcontentsline{toc}{chapter}{Resumen} -Con este trabajo se ha pretendido construir una teoría sólida que de cabida a optimizar el modelado actual de las redes neuronales. + +Existe en la actualidad un desequilibrio entre resultados empíricos +y teóricos de redes neuronales llegando incluso a contradicción + (como se comenta en la introducción del capítulo + \ref{chapter:Introduction-neuronal-networks}), será por tanto +nuestro primer objetivo construir una teoría sólida +que de cabida a + optimizaciones de fundamento teórico; +una revisión y + purga de cualquier artificio existente sobre + redes neuronales carente de fundamento matemático. Como resultado de ello se ha creado e implementado un nuevo modelo de red neuronal así como sus métodos de aprendizaje y evaluación. Además se ha propuesto un criterio de selección de funciones de activación y un algoritmo de -inicialización de pesos que mejora los ya existentes. +inicialización de pesos que mejora los ya existentes. Todos los resultados han conducido a la creación de +la biblioteca \textit{OptimizedNeuralNetwork.jl}, que contiene la implementación de nuestros modelos y métodos optimizados. + La estructura de la memoria es la siguiente: \begin{itemize} - \item \textbf{Capítulo \ref{ch00:methodology}: Descripción de la metodología seguida.} - \item \textbf{Capítulo \ref{chapter:Introduction-neuronal-networks}: Descripción del problema de aprendizaje.} Caracterización de los problemas de aprendizaje. - \item \textbf{Capítulo \ref{ch03:teoria-aproximar}: Teoría de la aproximación.} Ejemplificación de los problemas que presenta un enfoque clásico frente a problemas de problema de aprendizaje. Demostración del teorema de \textit{Stone-Weierstrass}. - \item \textbf{Capítulo \ref{chapter4:redes-neuronales-aproximador-universal}: Introducción de las redes neuronales como aproximadores universales.} Se presenta nuestro modelo de red neuronal. Se demuestra que es un aproximador universal basado en el artículo - \textit{Multilayer Feedforward Networks are Universal Approximators} (\cite{HORNIK1989359}) . Se plantea si en la práctica las redes neuronales + \item \textbf{Capítulo \ref{ch00:methodology}: Descripción de la metodología seguida.} Se ha organizado el proyecto de acorde a una metodología ágil, basada en personas, historias de usuario, hitos y test. Tal método ha conducido e hilado desde el comienzo tanto el desarrollo teórico como el técnico a la par que salvaguardaba la corrección de cada paso. + \item \textbf{Capítulo \ref{chapter:Introduction-neuronal-networks}: Descripción del problema de aprendizaje.} Se introduce las características y tipo de problemas del aprendizaje automático. Además se clarifica cuáles tratan de resolver las redes neuronales. + \item \textbf{Capítulo \ref{ch03:teoria-aproximar}: Teoría de la aproximación.} Se muestran los problemas y virtudes que presenta un enfoque clásico de teoría de la aproximación frente a problemas de aprendizaje. En pos de solventar tales impedimentos, + se sitúa esta teoría como el germen de + las redes neuronales. + Concretamente se desarrolla la teoría necesaria hasta demostrar el teorema de \textit{Stone-Weierstrass} y se explicarán las trabas que presentan este tipo de aproximaciones. + \item \textbf{Capítulo \ref{chapter4:redes-neuronales-aproximador-universal}: Introducción de las redes neuronales como aproximadores universales.} Se presenta nuestra propuesta de modelo de red neuronal y se compara con los modelos actuales. Se demuestra que nuestra definición actúa como un aproximador universal a cualquier función medible basándonos en el artículo + \textit{Multilayer Feedforward Networks are Universal Approximators} (\cite{HORNIK1989359}). Además se demuestran unas serie de resultados sobre cómo es la convergencia en problema de regresión y clasificación. Finalemnte se plantea si en la práctica las redes neuronales verdaderamente son aproximadores universales. - \item \textbf{Capítulo \ref{chapter:construir-redes-neuronales}: Construcción de las redes neuronales.} Descripción de la implementación de las redes neuronales. - Comparación de nuestro modelo con los usuales bajo la introducción de resultados originales sobre el sesgo y dominio de la imagen. Motivación, desarrollo e implementación de los algoritmos de aprendizaje y evaluación propuestos. - \item \textbf{Capítulo \ref{funciones-activacion-democraticas-mas-demoscraticas}: Democratización de las funciones de activación.} Se presenta un resultado propio que establece una equivalencia entre distintas funciones de activación. A partir de él se da un criterio de selección de funciones de activación y se estudia experimentalmente los beneficios obtenidos. + \item \textbf{Capítulo \ref{chapter:construir-redes-neuronales}: Diseño y construcción de las redes neuronales.} Se describe la implementación de las redes neuronales; esto nos permitirá una comparación + más profunda de nuestro modelo frente a los usuales. Producto de ello son dos resultados originales sobre el sesgo y dominio de la imagen. + Una vez determinado el modelo concreto se + han diseñado un algoritmo de aprendizaje, basado en \textit{Backpropagation} y otro de evaluación de redes neuronales. Además se han comparado los resultados de nuestro modelado con los utilizado usualmente. + \item \textbf{Capítulo \ref{funciones-activacion-democraticas-mas-demoscraticas}: Democratización de las funciones de activación.} Se presenta un resultado propio que establece una equivalencia entre distintas funciones de activación. A partir de él se da un criterio de selección de funciones de activación y se estudian experimentalmente los beneficios obtenidos. \item \textbf{Capítulo \ref{section:inicializar_pesos}: Algoritmo de inicialización de pesos.} Se propone un algoritmo de inicialización de pesos de una red neuronal. \item \textbf{Capítulo \ref{ch08:genetic-selection}: Selección genética de las funciones de activación.} Se propone un algoritmo de selección de la función de activación basado en algoritmos genéticos. \end{itemize} diff --git a/Memoria/tfg.tex b/Memoria/tfg.tex index 3bb29e1..0bcb3e3 100644 --- a/Memoria/tfg.tex +++ b/Memoria/tfg.tex @@ -226,7 +226,7 @@ \input{capitulos/0-Metodologia/asignaturas} % Filosofía a seguir -\input{capitulos/Introduccion} +%\input{capitulos/Introduccion} % Redes neuronales Definición de la clase de redes neuronales \input{capitulos/1-Introduccion_redes_neuronales/Objetivos} From 69cf06e14c3153898ecc014a70bfa79eb7a35efd Mon Sep 17 00:00:00 2001 From: Blanca Date: Thu, 16 Jun 2022 17:39:05 +0200 Subject: [PATCH 55/76] =?UTF-8?q?Ajusta=20m=C3=A1rgenes=20cap=C3=ADtulo=20?= =?UTF-8?q?4=20#113?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../feedforward-network-una-capa.tex | 2 +- .../articulo_1_primeras_definiciones.tex | 49 +++++--------- .../articulo_2_teorema_1_hasta_lema_2_2.tex | 2 +- .../articulo_3_teorema_2_2.tex | 3 +- .../articulo_4_colorario_2_1.tex | 15 ++++- .../articulo_5_colorarios_lp.tex | 9 ++- .../introduccion.tex | 21 +++++- .../preliminares/pensamientos_iniciales.tex | 65 ------------------- Memoria/tfg.tex | 2 +- 9 files changed, 58 insertions(+), 110 deletions(-) delete mode 100644 Memoria/preliminares/pensamientos_iniciales.tex diff --git a/Memoria/capitulos/1-Introduccion_redes_neuronales/feedforward-network-una-capa.tex b/Memoria/capitulos/1-Introduccion_redes_neuronales/feedforward-network-una-capa.tex index 1373e8a..502145b 100644 --- a/Memoria/capitulos/1-Introduccion_redes_neuronales/feedforward-network-una-capa.tex +++ b/Memoria/capitulos/1-Introduccion_redes_neuronales/feedforward-network-una-capa.tex @@ -56,7 +56,7 @@ \section{Definición de las redes neuronales \textit{Feedforward Networks} hemos considerado más conveniente; esta decisión es argumentada en el capítulo \ref{chapter:construir-redes-neuronales}. % Imagen grafo red neuronal una capa oculta muy simple y en blanco y negro -\begin{figure}[h!] +\begin{figure}[H] \centering \includegraphics[width=0.85\textwidth]{1-Introduccion_redes_neuronales/Red-Neuronal-una-capa-simple.png} \caption{\textit{Grafo} de una red neuronal de una capa oculta} diff --git a/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_1_primeras_definiciones.tex b/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_1_primeras_definiciones.tex index 689ec4e..c7572da 100644 --- a/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_1_primeras_definiciones.tex +++ b/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_1_primeras_definiciones.tex @@ -104,38 +104,24 @@ \section{Definiciones primeras}\label{ch:articulo:sec:defincionesPrimeras} se demuestra en \cite{DBLP:journals/corr/SonodaM15} y en \cite{non-polynomial-activation-functions}, funciones de activación no polinómicas y no acotadas. \end{definicion} -\subsection*{Las funciones de activación $\Gamma$ son la clave del aprendizaje} - -\label{ch03:funcionamiento-intuitivo-funcion-activacion} - -Las \textit{funciones de activación} serán definidas con precisión en la sección -\ref{def:funcion_activacion_articulo}, pero para continuar con nuestro razonamiento -pensemos en ellas como una función cualquiera que no sea un polinomio. - -Una vez liberados de tratar de buscar un polinomio que aproxime la función en todo -el dominio, podemos pensar en aproximar la imagen de acorde a intervalos. - -% Issue #114 TODO : Añadir gráficos cuando esté implementada una red neuronal - -% Ejemplo de cómo se aproxima gracias a la forma de la función de activación -\begin{figure}[H] - \includegraphics[width=\textwidth]{1-Introduccion_redes_neuronales/idea-como-aproxima-redes-neuronales.jpeg} - \caption{Cómo actúa en la aproximación una función de activación} - \label{img:idea-como-aproxima-redes-neuronales} - \end{figure} - -La idea intuitiva es que para una capa oculta con una neurona, -lo que se hace es \textit{colocar} por escalado y simetrías la imagen de la función de activación. - -% Ejemplo trivial de como la forma de la función de activación influye en aproximar mejor -\begin{figure}[h!] - \includegraphics[width=0.8\textwidth]{1-Introduccion_redes_neuronales/Idea-forma-función-Activación.jpg} - \caption{Cómo afecta la forma de la función de activación} - \label{img:como afecta la forma de la función de aproximación} -\end{figure} - +% Nota sobre que la funciones de activación +% son clave en el aprendizaje +\marginpar{\maginLetterSize + \iconoClave \textcolor{darkRed}{ + \textbf{ + Las funciones de activación $\Gamma$ son la clave del aprendizaje + } + } + \label{ch03:funcionamiento-intuitivo-funcion-activacion} +La idea intuitiva es que cada neurona +lo que se hace es \textit{colocar} por transformaciones afines la imagen de la función de activación en el espacio con el fin +de aproximar una región de la imagen de la función ideal. +Por lo tanto, la forma que ésta tenga será determinante en el número de neuronas necesarias para la convergencia. + +} % Fin del tratamiento de funciones de activación + Para cualquier natural $d$ mayor que cero denotaremos por $\afines$ al conjunto de todas las \textbf{funciones afines} de $\R^d$ a $\R$. Es decir el conjunto de funciones de la forma $A(x) = w \cdot x + b$ donde $x$ y $w$ son vectores de $\R^d$, $b \in \R$ es un escalar @@ -212,6 +198,7 @@ \subsection*{Las funciones de activación $\Gamma$ son la clave del aprendizaje} \reversemarginpar %%% Nota margen sobre función medible + \setlength{\marginparwidth}{\smallMarginSize} \marginpar{\maginLetterSize \iconoAclaraciones \textcolor{dark_green}{ \textbf{ @@ -227,6 +214,7 @@ \subsection*{Las funciones de activación $\Gamma$ son la clave del aprendizaje} que pueden ser observables y cuantificables en la mayoría de los casos, estos comportamientos son formalizados matemáticamente con \textbf{funciones medibles}. } +\setlength{\marginparwidth}{\bigMarginSize} \normalmarginpar Introducimos a continuación la notación de los conjuntos de funciones que seremos capaces de aproximar. @@ -261,7 +249,6 @@ \subsection{ Reflexión sobre el tipo de funciones que se pueden aproximar} \begin{definicion} [Subconjunto denso] % Nota margen de denso \reversemarginpar - \setlength{\marginparwidth}{\smallMarginSize} \marginpar{\maginLetterSize \iconoAclaraciones \textcolor{dark_green}{ \textbf{Idea intuitiva conjunto denso.} diff --git a/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_2_teorema_1_hasta_lema_2_2.tex b/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_2_teorema_1_hasta_lema_2_2.tex index 83f2e02..e0be2cf 100644 --- a/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_2_teorema_1_hasta_lema_2_2.tex +++ b/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_2_teorema_1_hasta_lema_2_2.tex @@ -171,7 +171,7 @@ \subsection{Observaciones y reflexiones sobre el teorema de convergencia real en Es más, a priori se estaría aumentando el espacio de búsqueda, lo que significaría que \textit{dificultaría el encontrar la solución}, es decir un aumento en coste y aumento del error de aproximación. -Sin embargo, como ya mostrábamos en +Sin embargo, como ya indicábamos en \ref{ch03:funcionamiento-intuitivo-funcion-activacion} utilizar una función de activación frente a otra varía el número de neuronas necesarias para diff --git a/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_3_teorema_2_2.tex b/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_3_teorema_2_2.tex index 35d5e1f..fe187fe 100644 --- a/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_3_teorema_2_2.tex +++ b/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_3_teorema_2_2.tex @@ -13,7 +13,6 @@ \end{teorema} % Nota idea intuitiva teorema 2.2 - \setlength{\marginparwidth}{\smallMarginSize} \marginpar{\maginLetterSize\raggedright \iconoAclaraciones \textcolor{dark_green}{ \textbf{ @@ -28,8 +27,8 @@ La idea de la demostración es sencilla, sabemos aproximar una función medible con una continua y a su vez una continua con una red neuronal generalizada, luego sabemos aproximar una función medible con una red neuronal generalizada. } - \setlength{\marginparwidth}{\bigMarginSize} % Fin de la nota + \begin{proof} Debemos probar que para cualquier función $f \in \fM$ existe una sucesión de funciones $\{h_n\}_{n\in \N}$ contenida en $\pmcg$ y diff --git a/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_4_colorario_2_1.tex b/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_4_colorario_2_1.tex index 4e03d8b..6ddd75e 100644 --- a/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_4_colorario_2_1.tex +++ b/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_4_colorario_2_1.tex @@ -55,17 +55,26 @@ % Nota idea intuitiva corolario 2.1 \reversemarginpar + \setlength{\marginparwidth}{\smallMarginSize} + \marginpar{\maginLetterSize \iconoAclaraciones \textcolor{dark_green}{ - \textbf{Idea intuitiva corolario \ref{cor:2_1}} + \textbf{Idea intuitiva + corolario \ref{cor:2_1}} } } \marginpar{\maginLetterSize Este teorema corrige la carencia sobre la precisión del error que describíamos - en la idea intuitiva del teorema \ref{teo:2_4_rrnn_densas_M}. Podemos encontrar una red neuronal que aproxime cualquier función medible que queramos en todos los puntos del espacio que queramos. + en la idea intuitiva del + teorema \ref{teo:2_4_rrnn_densas_M}. + Podemos encontrar una red neuronal que + aproxime cualquier función medible que + queramos en todos los puntos del espacio + que deseados. } + \setlength{\marginparwidth}{\bigMarginSize} \normalmarginpar - + % Fin de la nota intuitiva \begin{proof} Sea $\varepsilon > 0$ fijo pero arbitrario. Gracias al teorema de Lusin \ref{teo:Lusin} diff --git a/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_5_colorarios_lp.tex b/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_5_colorarios_lp.tex index c8a51b4..c825f29 100644 --- a/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_5_colorarios_lp.tex +++ b/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_5_colorarios_lp.tex @@ -437,6 +437,7 @@ \section{Generalización a espacios $L_p$} \end{proof} % Nota intuitiva sobre la demostración del Teorema 2.5 +\setlength{\marginparwidth}{\smallMarginSize} \marginpar{\maginLetterSize\raggedright \iconoAclaraciones \textcolor{dark_green}{ \textbf{Idea de la demostración del teorema @@ -451,6 +452,10 @@ \section{Generalización a espacios $L_p$} también se activará por ser menor menor, el término $g(x_{i-1})$ se suma a la salida de la red y así como una serie telescópica al final solo resultará el valor $g(x_i)$. } } +\setlength{\marginparwidth}{\bigMarginSize} +% fin de la nota + + % Teorema 2.5 \begin{teorema}[Sobre el entrenamiento práctico de redes neuronales] \label{teorema:2_5_entrenamiento_redes_neuronales} @@ -484,8 +489,7 @@ \section{Generalización a espacios $L_p$} Definiremos de manera recursiva la red neuronal buscada $f_n$. % Nota nueva hipótesis de optimización del Teorema 2.5 -\setlength{\marginparwidth}{\smallMarginSize} -\reversemarginpar + \marginpar{\maginLetterSize\raggedright \iconoProfundizar \textcolor{blue}{ \textbf{Nueva hipótesis de optimización} @@ -502,7 +506,6 @@ \section{Generalización a espacios $L_p$} \setlength{\marginparwidth}{\bigMarginSize} } -\normalmarginpar \begin{itemize} \item Red neuronal $f_1$. diff --git a/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/introduccion.tex b/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/introduccion.tex index fa0fc65..14a60ef 100644 --- a/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/introduccion.tex +++ b/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/introduccion.tex @@ -37,6 +37,18 @@ \section{Las redes neuronales son aproximadores universales} El esquema general será: +\begin{align*} + \rrnn + \xRightarrow[]{\ref{teo:2_4_rrnn_densas_M}} + \rrnng + \xRightarrow[]{\ref{teorema:2_3_uniformemente_denso_compactos}} + \pmcg + \xRightarrow[]{\ref{teo:TeoremaConvergenciaRealEnCompactosDefinicionesEsenciales}} + \fC + \xRightarrow[]{\ref{teo:2_2_denso_función_continua}} + \fM. +\end{align*} + % Nota margen de denso \setlength{\marginparwidth}{\bigMarginSize} \marginpar{\maginLetterSize @@ -50,11 +62,14 @@ \section{Las redes neuronales son aproximadores universales} \begin{itemize} - \item Las redes neuronales que nosotros hemos modelizado son densas en un espacio más general que hemos denominado \textit{Anillo de aproximación de redes neuronales}. + \item Las redes neuronales que nosotros hemos modelizado son densas en un espacio más general que hemos denominado \textit{Anillo de aproximación de redes neuronales} + generado a partir de una función de activación $\psi$. + \item Que a su vez es denso en el \textit{Anillo de aproximación de redes neuronales} + generado a partir de una función medible $G$. \item El espacio \textit{Anillo de aproximación de redes neuronales} es denso en la funciones continuas. - \item Las funciones continuas son densas en los reales. + \item Las funciones continuas son densas en el espacio de funciones medibles. \end{itemize} -Si quisiéramos situar en este esquema a otras definiciones de redes neuronales las situaríamos entre nuestro modelo y el espacio \textit{Anillo de aproximación de redes neuronales}; en el capítulo \ref{chapter:construir-redes-neuronales} se probará la equivalencia de nuestro modelo con estas definiciones y sus beneficios. +Si quisiéramos situar en este esquema a otras definiciones de redes neuronales las situaríamos entre nuestro modelo y el espacio \textit{Anillo de aproximación de redes neuronales}; en el capítulo \ref{chapter:construir-redes-neuronales} se probará tal resultado y analizarán los beneficios de basarnos en un modelo más simple. diff --git a/Memoria/preliminares/pensamientos_iniciales.tex b/Memoria/preliminares/pensamientos_iniciales.tex deleted file mode 100644 index 1e59399..0000000 --- a/Memoria/preliminares/pensamientos_iniciales.tex +++ /dev/null @@ -1,65 +0,0 @@ -% \manualmark -% \markboth{\textsc{Introducción}}{\textsc{Introducción}} - -\chapter{Introducción}\label{ch:introduccion} - -Estimado lector, podría comenzar una amigable y espectacular introducción mostrando algunos de los incontables ejemplos -de problemas para los que -el aprendizaje automático o las redes neuronales aportan soluciones exitosas e incluso sorprendentes. (Esto se tratará en -[insertar referencia, habrá que hacerlo para que no me digan nada) -Pero en este trabajo me gustaría principalmente aportar una visión a más bajo nivel, partiendo de los pilares matemáticos -que sostienen -las redes neuroles y explicar qué son exactamente, por qué funcionan y cómo se pueden optimizar. - -\section{Filosofía} -Las matemáticas a mi parecer se rigen sobre un equilibrismo férreo, entrañable y absorvente que son los axiomas; -con solo aceptar la verosimilitud de un axioma una vez, uno ya puede dejarse llevar por los derroteros -lógicos y confiar en que todo lo probado es completamente cierto (centro de dicho fonambulismo). - -Es por ello que me gustaría empezar con las siguiente pregunta que pulula en mi interior más crítico: - -¿Todo fenómeno observable guarda una ley que lo explique? - ---- -Relacionar la realidad con lógica -> Gödel nos diría que no. -¿Es la realidad lógica? -[TODO buscar más información] ---- -Si -Desconozco la respuesta, pero de tal manera imitando en cierta manera al razonamiento sobre la existencia -de Dios de Pascal: -Si la respuesta fuera negativa: ¿Debería ser esto un motivo para frenar nuestra busca? -¿Se podría separar la realidad en explicable o no? ¿Cómo se podría crear un método? -Si fuera positiva bastaría seguir cómo vamos. - -Mientras alguien encuentra respuestra, ya que la curiosidad humana es indómita - entretengámonos pues pensando que sí y escarbemos en la inmensidad del conocimiento -aún por descubrir. - -\section{Motivación del aprendizaje automático} - - -Al igual que un niño pequeño es capaz de distinguir entre un árbol y su progenitor sin ser -capaz de dar una descripción matemática de su deducción o una mera explicación. - -De entre todo el desconocimiento existente podría presentarse la siguiente situación: -Qué ocurriría si no hubiéramos encontrado una manera analítica viable de resolver un problema, -pero sin embargo -contáramos con "los datos, ejemplos o muestras suficientes" como para dar una solución empírica. - - -En resonancia con las ideas platónicas, los problemas de aprendizaje tratan de encontrar soluciones empíricas donde todavía -no se conocen métodos analíticos. - -Estos no darán una explicación de porqué funcionan, pero como ya se ha comprobado [] pueden llegar a -soluciones exitosas. - -Y si bien, así expuesto puede en un principio parecer de poco interés para el lector más matemático, -la teoría que subyace bajo éste instrumento de la Ingeniería que se encuentra en plena esfervesciencia y creación -es realmente bello y apasionanto, espero a lo largo de este libro poder transmitirlo. - -Pregunta para mí ¿podría esta estructura guardar alguna relación o expliación con el ser humano? - -\subsection{Componentes del aprendizaje} - -\endinput \ No newline at end of file diff --git a/Memoria/tfg.tex b/Memoria/tfg.tex index 0bcb3e3..20c5d7f 100644 --- a/Memoria/tfg.tex +++ b/Memoria/tfg.tex @@ -245,7 +245,7 @@ \chapter{Las redes neuronales son aproximadores universales} \label{chapter4:redes-neuronales-aproximador-universal} \input{capitulos/1-Introduccion_redes_neuronales/feedforward-network-una-capa} \input{capitulos/2-Articulo_rrnn_aproximadores_universales/introduccion} -\include{capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_1_primeras_definiciones} +\input{capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_1_primeras_definiciones} \input{capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_2_teorema_1_hasta_lema_2_2} \input{capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_3_teorema_2_2} \input{capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_4_colorario_2_1} From 68747b1ea0d522c028e733217e2d3972651c2a51 Mon Sep 17 00:00:00 2001 From: Blanca Date: Thu, 16 Jun 2022 22:46:20 +0200 Subject: [PATCH 56/76] =?UTF-8?q?Escribe=20introducci=C3=B3n=20del=20cap?= =?UTF-8?q?=C3=ADtulo=205=20#117=20Ha=20sido=20revisado=20y=20ha=20sido=20?= =?UTF-8?q?ligeramente=20reorganizado?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/personal-dictionary.txt | 1 + .../0-Metodologia/Comentarios_previos.tex | 9 +- .../feedforward-network-una-capa.tex | 8 +- .../aprendizaje.tex | 10 +- .../construccion-evaluacion-red-neuronal.tex | 169 ++++++++++++------ .../otras-alternativas.tex | 2 +- Memoria/paquetes/comandos-entornos.tex | 6 +- Memoria/preliminares/resumen.tex | 2 +- 8 files changed, 136 insertions(+), 71 deletions(-) diff --git a/.github/workflows/personal-dictionary.txt b/.github/workflows/personal-dictionary.txt index 2ea949e..28faa0c 100644 --- a/.github/workflows/personal-dictionary.txt +++ b/.github/workflows/personal-dictionary.txt @@ -192,6 +192,7 @@ struct subespacio subespacios subrecubrimiento +subsección sumatoria sumatorias sutilBackground diff --git a/Memoria/capitulos/0-Metodologia/Comentarios_previos.tex b/Memoria/capitulos/0-Metodologia/Comentarios_previos.tex index d81cea1..9a693b7 100644 --- a/Memoria/capitulos/0-Metodologia/Comentarios_previos.tex +++ b/Memoria/capitulos/0-Metodologia/Comentarios_previos.tex @@ -12,15 +12,16 @@ \section*{Comentario previo} Para ello se ha seleccionado una paleta de la web Palett.es, visitada por última vez el 13 de mayo del 2022 y con dirección \url{https://palett.es/6a94a8-013e3b-7eb645-31d331-26f27d}. - }: +y con la herramienta de contraste de la web \url{https://color.adobe.com/es/create/color-contrast-analyzer} +consultada por última vez el 16 de Junio de 2022}: \begin{itemize} - \item \iconoAclaraciones \textcolor{dark_green}{ Color 1}: Comentarios para + \item \iconoAclaraciones \textcolor{dark_green}{ \textbf{Color 1}}: Comentarios para aclarar conceptos matemáticos o informáticos y ofrecer la idea intuitiva que se esconde, donde no se presuponen conocimientos avanzados en la materia. - \item \iconoProfundizar \textcolor{blue}{ Color 2}: Comentarios para una reflexión más profunda o que indique nuevas áreas que explorar. - \item \iconoClave \textcolor{darkRed}{ Color 3}: Concepto clave y destacable que tendrá un papel fundamental a posteriori. + \item \iconoProfundizar \textcolor{blue}{\textbf{Color 2}}: Comentarios para una reflexión más profunda o que indique nuevas áreas que explorar. + \item \iconoClave \textcolor{darkRed}{ \textbf{Color 3}}: Concepto clave y destacable que tendrá un papel fundamental a posteriori. \end{itemize} Además a lo largo del trabajo se han realizado aportaciones propias y resultados novedosos, estos aparecerán destacados de la siguiente forma: diff --git a/Memoria/capitulos/1-Introduccion_redes_neuronales/feedforward-network-una-capa.tex b/Memoria/capitulos/1-Introduccion_redes_neuronales/feedforward-network-una-capa.tex index 502145b..e7807b7 100644 --- a/Memoria/capitulos/1-Introduccion_redes_neuronales/feedforward-network-una-capa.tex +++ b/Memoria/capitulos/1-Introduccion_redes_neuronales/feedforward-network-una-capa.tex @@ -174,7 +174,9 @@ \subsection*{Diferencia con otras definiciones} \label{subsection:diferencia-ot Las diferencias con nuestra definición son las siguientes \begin{itemize} - \item \textbf{Desaparece la función de clasificación $\theta$}. El motivo es que es un artificio teóricamente innecesario de acorde al teorema de convergencia universal \ref{teo:MFNAUA}. - \item \textbf{Se elimina un parámetro} de la transformación afín de la última capa; puesto que no es necesario para la convergencia de nuevo por \ref{teo:MFNAUA} lo hemos eliminado. - \item Nuestras funciones de activación son funciones medibles en vez de diferenciables ya que a priori no existe ninguna hipótesis teórica que fuerce a tal restricción, como hemos visto en \ref{teo:MFNAUA}. + \item \textbf{Desaparece la función de clasificación $\theta$} + \item \textbf{Se elimina un parámetro} por cada neurona. + \item No se le exige condición de diferenciabilidad a priori, ya que a priori no existe ninguna hipótesis teórica que fuerce a tal restricción, como hemos visto en \ref{teo:MFNAUA}. \end{itemize} +Se justificarán y se matizarán tales decisiones en +la sección \ref{ch05:justifica-modelo}. diff --git a/Memoria/capitulos/4-Actualizacion_redes_neuronales/aprendizaje.tex b/Memoria/capitulos/4-Actualizacion_redes_neuronales/aprendizaje.tex index b5151d8..fab5a65 100644 --- a/Memoria/capitulos/4-Actualizacion_redes_neuronales/aprendizaje.tex +++ b/Memoria/capitulos/4-Actualizacion_redes_neuronales/aprendizaje.tex @@ -1,7 +1,13 @@ \section{Aprendizaje} +\label{ch05:aprendizaje} Se entiende por aprendizaje de una red neuronal como el proceso -por el cual se determina el valor sus pesos, es decir, lo que en el ejemplo \ref{img:Ejemplo-evaluación-red-neruonal-una-capa} consistía en las matrices $A,S$ y $B$. +por el cual se determina o actualiza el valor sus parámetros, es decir, lo que en el ejemplo +\ref{img:Ejemplo-evaluación-red-neruonal-una-capa} consistía en las matrices $A,S$ y $B$. + +A lo largo de esta sección se deducirá un algoritmo de aprendizaje para nuestro modelo de red neuronal; concretamente éste método se basa en el algoritmo de \textit{backpropagation}, esto es, se implementa una basada en descenso de gradiente y programación dinámica. + +También se discute en la subsección \ref{ch05:alternativas-gradiente-descendente} porqué no se han utilizado otras alternativas al gradiente descendente. %%%%%%%%%%%%%%%%%%% algoritmo de gradiente descendente @@ -9,7 +15,7 @@ \subsection{Método de gradiente descendente y \textit{backpropagation}} \label{ De acorde a los capítulos uno y dos del libro \cite{learning-from-data-1-2}, una vez concretado el problema y sus elementos -(\ref{sub:componentes_aprendizaje}) es necesario definir un método con +(véase la sección \ref{sub:componentes_aprendizaje}) es necesario definir un método con el que aproximar la función ideal $f,$ para ello introduciremos el algoritmo de gradiente descendente. Se trata de un método iterativo de minimización de funciones diferenciables. % Nota sobre el algoritmo de gradiente descendente diff --git a/Memoria/capitulos/4-Actualizacion_redes_neuronales/construccion-evaluacion-red-neuronal.tex b/Memoria/capitulos/4-Actualizacion_redes_neuronales/construccion-evaluacion-red-neuronal.tex index e0e5af9..d8c5bb4 100644 --- a/Memoria/capitulos/4-Actualizacion_redes_neuronales/construccion-evaluacion-red-neuronal.tex +++ b/Memoria/capitulos/4-Actualizacion_redes_neuronales/construccion-evaluacion-red-neuronal.tex @@ -9,16 +9,16 @@ \chapter{Construcción técnica de las redes neuronales de una sola capa} \label{chapter:construir-redes-neuronales} Vista la formulación teórica de una red neuronal de una sola capa introducida en \ref{definition:redes_neuronales_una_capa_oculta} +estaremos en condiciones se comparará y estudiará la relación teórica -entre nuestra propuesta de modelo y los modelos usuales de redes neuronales. +entre nuestra propuesta de modelo y los modelos usuales de redes neuronales. Además se justificará, +la selección de nuestro modelo en las sección \ref{ch05:justifica-modelo}. Explicaremos también una construcción técnica junto con un -análisis del costo necesario y beneficio obtenido. -Así como los algoritmos necesarios para su evaluación y aprendizaje. - - Los algoritmos presentados son - la adaptación natural de técnicas como -\textit{forward propagation} y \textit{backpropagation } explicadas en \cite{BishopPaterRecognition} a nuestro enfoque teórico. +análisis del costo necesario y beneficio obtenido del modelo (ver sección \ref{ch05:construction-evaluation-nnnn}); +así como los algoritmos necesarios para su evaluación (ver \ref{section:rrnn_implementation}) y aprendizaje (ver \ref{ch05:aprendizaje}). Los algoritmos presentados son + las adaptaciones naturales a nuestro enfoque teórico de técnicas como +\textit{forward propagation} y \textit{backpropagation } explicadas en \cite{BishopPaterRecognition}. Además, puesto que nuestro objetivo es optimizar seremos muy meticulosos en cuanto a analizar el coste computacional tanto de cómputo como de @@ -50,12 +50,13 @@ \section{Componentes de una red neuronal de una capa oculta} \label{img:grafo-red-neuronal-una-capa-oculta_repeticion} \end{figure} -Ante esta definición el número de parámetros a ajustar es: +Ante esta definición el número de parámetros a ajustar son: \begin{itemize} \item De la forma $\beta_{i k}$: $n s$. \item De la forma $w_{i j}$: $n(d+1)$. \end{itemize} -Lo que hace un total de $n(s+d+1)$ parámetros, done $n$ es el número de neuronas, $s$ la dimensión de salida y $d$ la dimensión de entrada. Por lo general $d$ y $s$ son fijos ya que se suponen requisitos del problema, luego si se desea reducir el coste en memoria deberá de hacerse disminuyendo el número de neuronas. +Lo que hace un total de $n(s+d+1)$ parámetros, done $n$ es el número de neuronas, $s$ la dimensión de salida y $d$ la dimensión de entrada. +\textbf{Por lo general $d$ y $s$ son fijos ya que se suponen requisitos del problema, luego si se desea reducir el coste en memoria deberá de hacerse disminuyendo el número de neuronas.} Analizaremos más a fondo su componentes. @@ -99,7 +100,79 @@ \subsection*{Unidades ocultas} y hay un total de $s$ unidades de activación, tanto $M$ como $s$ son valores fijados por el diseñador de la red ya que a priori no tenemos otra información. - % Vamos a probar que tampoco mejora el error + +\subsection{Criterio de selección de funciones de activación} + +Los aspectos a tener en cuenta a la hora de seleccionar una función +de activación frente a otra de una red neuronal serían los siguientes: +\begin{enumerate} + \item Espacio de memoria. + \item Coste computacional. + \item Efectividad en cuanto a reducir el error de aproximación. +\end{enumerate} + +Sobre la primera consideración está claro que el uso de una única función ahorraría el tener que almacenar el tipo de función que se va emplear en cada neurona. + +Respecto al coste computacional puede uno basarse en una análisis teórico del número de +operaciones y su complejidad o realizar un estudio empírico se ha realizado +en al sección \ref{ch06:coste-computacional-funciones-activacion}. + +% Nota margen sobre idea +\marginpar{\maginLetterSize + \iconoClave \textcolor{darkRed}{ + \textbf{ + Estrategia de selección de funciones de activación. + } + } + + Esta idea abre la puerta a determinar mediante algoritmos + de optimización qué funciones de activación podrían resultar más + beneficiosas. + Ideas similares usando algoritmos genéticos + se encuentra en artículos como + \cite{FunctionOptimizationwithGeneticAlgorithms} + y + \cite{Genetic-deep-neural-networks} + sin embargo expondremos nuestra versión en el capítulo + \ref{ch08:genetic-selection}. + +} +Fijado cierto número de neuronas, en lo que respecta a la precisión que nos puedan aportar las funciones de activación; por la idea intuitiva +del funcionamiento de las funciones de activación mostrado en mostrada en \ref{ch03:funcionamiento-intuitivo-funcion-activacion} es un factor que repercute en los resultados +pero desconocido a priori. + + + +\section{Justificación del modelo seleccionado} +\label{ch05:justifica-modelo} +A continuación presentaremos una serie de resultados +propios que justificarán nuestro modelo frente a los +usuales, a la par que probarán la relación que hay entre uno y otro. + +Con el fin de motivarlos tengamos presente la definición de los modelos usuales presentada en +\ref{subsection:diferencia-otras-definiciones-RRNN} +y la demostración de que el modelo planteado +es un aproximados universal del teorema \ref{teo:MFNAUA}. + +Si bien el teorema de convergencia universal +nos asegura que los elementos adicionales de los +modelos usuales no son necesarios, +hay que tener presente que esto es un resultado +de convergencia, es decir, se construye bajo hipótesis +de que se disponen de todas las neuronas que sean necesarias para hallar una red neuronal los suficientemente próxima a la función a aproximar. + +Podría entonces uno plantearse si a niveles prácticos +verdaderamente esas adiciones contribuyen en +alguna mejora de precisión o tiempo o verdaderamente +son un lastre. Como justificaremos en esta sección los cambios realizados han sido los siguientes: + +\begin{itemize} + \item \textbf{Desaparece la función de clasificación $\theta$}. El motivo es que es un artificio innecesario como mostramos en \ref{ch05:dominio-discreto} y como indica el teorema \ref{teo:MFNAUA}. + \item \textbf{Se elimina un parámetro} de la transformación afín de la última capa; puesto que no es necesario para la convergencia de nuevo por el teorema \ref{teo:MFNAUA} y como veremos en \ref{consideration-irrelevancia-sesgo} tampoco aporta beneficios de precisión. +\end{itemize} + + + \subsection{Consideraciones sobre la irrelevancia del sesgo} \label{consideration-irrelevancia-sesgo} \begin{aportacionOriginal} @@ -189,7 +262,7 @@ \subsection{Consideraciones sobre la irrelevancia del sesgo} Es decir, dada cualquier $h^+ \in \mathcal{H}^+_n(X,Y)$ con un error de $E_D(h^+)$ existe $h \in \mathcal{H}_n(X,Y)$ tal que $E_D(h) \leq E_D(h^+).$ Esto no es posible y para darse cuenta basta con considerar el caso de una neurona, con $G(x)$ su función de activación y $k \in \R^+$ definimos la función ideal como $f(x) = G(x) +k$. -Tomando tan solo dos puntos convenientemente seleccionados (por ejemplo $M$ y $-M$ tal que $G(-M) = 0 y G(M) = 1$) aprecia que $H_1(\R, \R)$ no puede aproximar $f$ y sin embargo $f \in H^+_1(\R, \R)$. +Tomando tan solo dos puntos convenientemente seleccionados (por ejemplo $M$ y $-M$ tal que $G(-M) = 0$ y $G(M) = 1$) aprecia que $H_1(\R, \R)$ no puede aproximar $f$ y sin embargo $f \in H^+_1(\R, \R)$. % Fin de la demostración @@ -306,60 +379,20 @@ \subsubsection*{Construcción de $k-$NN} %%%%%%%%%%% Fin de lo observado -\subsection{Qué función de activación seleccionar} - -Los aspectos a tener en cuenta a la hora de seleccionar una función -de activación frente a otra de una red neuronal serían los siguientes: -\begin{enumerate} - \item Espacio de memoria. - \item Coste computacional. - \item Efectividad en cuanto a reducir el error de aproximación. -\end{enumerate} - -Sobre la primera consideración está claro que el uso de una única función ahorraría el tener que almacenar el tipo de función que se va emplear en cada neurona. - -Respecto al coste computacional puede uno basarse en una análisis teórico del número de -operaciones y su complejidad o realizar un estudio empírico se ha realizado -en al sección \ref{ch06:coste-computacional-funciones-activacion}. - -% Nota margen sobre idea -\marginpar{\maginLetterSize - \iconoClave \textcolor{darkRed}{ - \textbf{ - Estrategia de selección de funciones de activación. - } - } - - Esta idea abre la puerta a determinar mediante algoritmos - de optimización qué funciones de activación podrían resultar más - beneficiosas. - Ideas similares usando algoritmos genéticos - se encuentra en artículos como - \cite{FunctionOptimizationwithGeneticAlgorithms} - y - \cite{Genetic-deep-neural-networks} - sin embargo expondremos nuestra versión en el capítulo - \ref{ch08:genetic-selection}. - -} -Fijado cierto número de neuronas, en lo que respecta a la precisión que nos puedan aportar las funciones de activación; por la idea intuitiva -del funcionamiento de las funciones de activación mostrado en mostrada en \ref{ch03:funcionamiento-intuitivo-funcion-activacion} es un factor que repercute en los resultados -pero desconocido a priori. - - %% Formulación técnica \section{Construcción explícita y evaluación de una red neuronal} \label{ch05:construction-evaluation-nnnn} -Ante todas las consideraciones expuestas y puesto que -no existe ningún resultado o hipótesis a favor de combinar funciones de activación, en pos de simplificar el estudio, vamos a suponer a priori que todos los nodos están compuestos con la misma. Entonces, una red neuronal para nosotros -vendrá determinada dos matrices de pesos y una función de evaluación. + +A pesar de que cada neurona puede estar constituida +por una función de activación diferente, con el fin de +simplificar notación, para nosotros una red neuronal +vendrá determinada por dos matrices de pesos y una función de evaluación. Es decir siguiendo la idea constructiva expuesta en manuales tales como \cite{learning-from-data-1-2} cualquier $h \in \rrnnsmn$ de $n$ neuronas en la capa oculta se implementa como $(\gamma, M_{n \times (1+r)}, M_{(n+1) \times s})$ con $M_{f \times c}$ matrices de dimensiones $f$ filas y $c$ columnas. - -$\gamma$ representa a función de activación en cada nodo. +Donde $\gamma$ representa la función de activación en cada nodo. $M_{n \times (1+r)}$ son los pesos de la primera capa y $M_{(n+1) \times s}$ son los pesos de la salida. @@ -576,9 +609,29 @@ \subsubsection*{Ejemplo de evaluación de una red neuronal} \subsection{Implementación de una red neuronal y evaluación} \label{section:rrnn_implementation} -Como conclusión a todo lo explicado una red neuronal no +A la hora de abstraer una red neuronal +y como conclusión a todo lo explicado una red neuronal no sería más que una estructura que almacenara $(A, S, B)$, esto es +% Comentario sobre la implementación +\marginpar{\maginLetterSize + \iconoProfundizar \textcolor{blue}{ + \textbf{ + Aclaración de la estructura. + } + } + Notemos que no se ha introducido la función de + activación en la estructura, esto se ha hecho con + vista a la implementación. Tal estructura definirá + un tipo de dato y serán las funciones que las + utilicen o modifiquen las que a conveniencia + determinen un tipo de función de activación u + otro, de esta manera se tendrá una mayor flexibilidad en la arquitectura y un ahorre en memoria. + + Supondría además un nuevo paradigma de trabajo y definición de redes neuronales. + +} + % Pseudo código que refleja la estructura de una red neuronal \begin{algorithm}[H] diff --git a/Memoria/capitulos/4-Actualizacion_redes_neuronales/otras-alternativas.tex b/Memoria/capitulos/4-Actualizacion_redes_neuronales/otras-alternativas.tex index 7d0b368..5175194 100644 --- a/Memoria/capitulos/4-Actualizacion_redes_neuronales/otras-alternativas.tex +++ b/Memoria/capitulos/4-Actualizacion_redes_neuronales/otras-alternativas.tex @@ -3,7 +3,7 @@ %%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Otras alternativas al algoritmo de gradiente descendente} - +\label{ch05:alternativas-gradiente-descendente} Recordemos que nuestro enfoque partía de fundamentar toda decisión de diseño de manera rigurosa. Destaquemos por tanto que en el algoritmo de gradiente descendente se introduce la restricción de que las funciones de activación deben de ser diferenciables. diff --git a/Memoria/paquetes/comandos-entornos.tex b/Memoria/paquetes/comandos-entornos.tex index d28fdc6..a6fcadc 100644 --- a/Memoria/paquetes/comandos-entornos.tex +++ b/Memoria/paquetes/comandos-entornos.tex @@ -105,9 +105,11 @@ % Para las notas del margen %Nota los colores seleccionados han sido creados con una paleta inclusiva % https://palett.es/6a94a8-013e3b-7eb645-31d331-26f27d -\definecolor{darkRed}{rgb}{0.2,1,0.7}%{ 0.149, 0.99, 0.49}%{1,0.1,0.1} +\definecolor{darkRed}{HTML}{9E6D0B}%{rgb}{0.2,1,0.7}%{ 0.149, 0.99, 0.49}%{1,0.1,0.1} + \definecolor{dark_green}{rgb}{0, 0.24, 0.23} %{0.2, 0.7, 0.2} -\definecolor{blue}{rgb}{0.61, 0.98, 0.759} % sobreeescribimos el azul +\definecolor{blue}{HTML}{2700FD} +%\definecolor{blue}{rgb}{0.61, 0.98, 0.759} % sobreeescribimos el azul \newcommand{\smallMarginSize}{1.8cm} \newcommand{\bigMarginSize}{3cm} \newcommand{\maginLetterSize}{\scriptsize}%{\footnotesize} %{\scriptsize}% diff --git a/Memoria/preliminares/resumen.tex b/Memoria/preliminares/resumen.tex index 39a3657..e0defac 100644 --- a/Memoria/preliminares/resumen.tex +++ b/Memoria/preliminares/resumen.tex @@ -44,7 +44,7 @@ \chapter*{Resumen}\label{ch:resumen} \textit{Multilayer Feedforward Networks are Universal Approximators} (\cite{HORNIK1989359}). Además se demuestran unas serie de resultados sobre cómo es la convergencia en problema de regresión y clasificación. Finalemnte se plantea si en la práctica las redes neuronales verdaderamente son aproximadores universales. \item \textbf{Capítulo \ref{chapter:construir-redes-neuronales}: Diseño y construcción de las redes neuronales.} Se describe la implementación de las redes neuronales; esto nos permitirá una comparación - más profunda de nuestro modelo frente a los usuales. Producto de ello son dos resultados originales sobre el sesgo y dominio de la imagen. + más profunda de nuestro modelo frente a los usuales y que nos servirá como justificación del modelo obtenido. Producto de ello son dos resultados originales sobre el sesgo y dominio de la imagen. Una vez determinado el modelo concreto se han diseñado un algoritmo de aprendizaje, basado en \textit{Backpropagation} y otro de evaluación de redes neuronales. Además se han comparado los resultados de nuestro modelado con los utilizado usualmente. \item \textbf{Capítulo \ref{funciones-activacion-democraticas-mas-demoscraticas}: Democratización de las funciones de activación.} Se presenta un resultado propio que establece una equivalencia entre distintas funciones de activación. A partir de él se da un criterio de selección de funciones de activación y se estudian experimentalmente los beneficios obtenidos. From d2736131db7daf673fc424803e78c8211f44b701 Mon Sep 17 00:00:00 2001 From: Blanca Date: Thu, 16 Jun 2022 23:12:11 +0200 Subject: [PATCH 57/76] =?UTF-8?q?Implementa=20alguna=20de=20las=20derivada?= =?UTF-8?q?s=20de=20las=20funciones=20de=20activaci=C3=B3n=20son=20necesar?= =?UTF-8?q?ias=20para=20backpropagation=20#114=20He=20implementado=20concr?= =?UTF-8?q?etamente=20la=20derivada=20d=C3=A9bil=20de=20la=20funci=C3=B3n?= =?UTF-8?q?=20rampa=20y=20de=20la=20ReLu=20(hay=20algunas=20derivadas=20qu?= =?UTF-8?q?e=20creo=20que=20tienen=20poco=20sentido=20como=20la=20de=20la?= =?UTF-8?q?=20funci=C3=B3n=20umbral=20y=20la=20indicadora...=20Dir=C3=ADa?= =?UTF-8?q?=20que=20backpropation=20no=20es=20v=C3=A1lido=20para=20ellas.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/activation_functions.jl | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/OptimizedNeuralNetwork.jl/src/activation_functions.jl b/OptimizedNeuralNetwork.jl/src/activation_functions.jl index 060851e..1140e14 100644 --- a/OptimizedNeuralNetwork.jl/src/activation_functions.jl +++ b/OptimizedNeuralNetwork.jl/src/activation_functions.jl @@ -1,3 +1,6 @@ +#################################################################################### +# Constains activation functions and its derivatives +#################################################################################### export CosineSquasher export HardTanh export @IndicatorFunction @@ -6,6 +9,9 @@ export RampFunction export ReLU export Sigmoid export @ThresholdFunction +# derivatives +export derivativeRampFunction +export derivativeReLU """ Threshold(polynomial, t) Return a Threshold Function defined by `polynomial`and `t`. @@ -48,6 +54,13 @@ Return Ramp function a bounded ReLU function function RampFunction(x::Real) return min(1,max(0,x)) end +""" + derivateveRampFunction(x::Real) +Return the derivate of the Ramp function +""" +function derivativeRampFunction(x::Real) + return (0<=x<=1) ? 1 : 0 +end """ ReLU(x::Real) @@ -56,6 +69,13 @@ ReLU function function ReLU(x::Real) return max(0,x) end +""" + derivativeReLU(x::Real) +ReLU function +""" +function derivativeReLU(x::Real) + return (x<0) ? 0 : 1 +end """ Sigmoid(x::Real) From 05836a47e55da60845a292d6eb1118973fcae7a9 Mon Sep 17 00:00:00 2001 From: Blanca Date: Fri, 17 Jun 2022 08:59:25 +0200 Subject: [PATCH 58/76] =?UTF-8?q?Escribe=20cap=C3=ADtulo=208=20#90=20#117?= =?UTF-8?q?=20y=20lo=20a=C3=B1ade=20al=20resumen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../articulo_2_teorema_1_hasta_lema_2_2.tex | 3 +- .../3_algoritmo-inicializacion-pesos.tex | 13 +++++-- .../combinacion_funciones_activacion.tex | 34 +++++++++++-------- Memoria/preliminares/resumen.tex | 24 +++++++++++-- 4 files changed, 54 insertions(+), 20 deletions(-) diff --git a/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_2_teorema_1_hasta_lema_2_2.tex b/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_2_teorema_1_hasta_lema_2_2.tex index e0be2cf..2b16506 100644 --- a/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_2_teorema_1_hasta_lema_2_2.tex +++ b/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_2_teorema_1_hasta_lema_2_2.tex @@ -141,7 +141,8 @@ \subsection{Observaciones y reflexiones sobre el teorema de convergencia real en \begin{aportacionOriginal} -\begin{corolario}[Pueden combinarse distintas funciones de activación en una misma red neuronal] \label{cor:se-generaliza-G-a-una-familia} +\begin{corolario}[Pueden combinarse distintas funciones de activación en una misma red neuronal] + \label{cor:se-generaliza-G-a-una-familia} Una misma red neuronal puede estar constituida por una familia de funciones continuas no constantes $\Gamma$, bastará con generalizar $\pmcg$ a $\sum \prod ^d (\Gamma)$ donde diff --git a/Memoria/capitulos/5-Estudio_experimental/3_algoritmo-inicializacion-pesos.tex b/Memoria/capitulos/5-Estudio_experimental/3_algoritmo-inicializacion-pesos.tex index 0fabfda..3b632f9 100644 --- a/Memoria/capitulos/5-Estudio_experimental/3_algoritmo-inicializacion-pesos.tex +++ b/Memoria/capitulos/5-Estudio_experimental/3_algoritmo-inicializacion-pesos.tex @@ -115,10 +115,19 @@ \subsubsection{Forma de evaluar las redes neuronales} Dado una red neuronal, una función de evaluación y un datos ser capaz de aplicar el algoritmo de \textit{forward propagation} descrito en \ref{algoritmo:evaluar red neuronal}. \subsubsection{Implementación del aprendizaje de una red neuronal} - +% Nota en el margen sobre la derivada +\marginpar{\maginLetterSize + \iconoAclaraciones \textcolor{dark_green}{ + \textbf{ + Qué es una derivada débil. + } + } + Es una generalización de las derivadas para funciones del espacio $L_p$, esto nos permite + definir derivadas aunque no lo sea en algunos puntos (recodemos que demostremos el teorema de aproximación universal para estos espacios en la sección \ref{ch04:espacios-Lp}). +} Se implementará el algoritmo propio de aprendizaje basado en \textit{Backpropagation} y ya optimizado que describimos en los algoritmos \ref{algoritmo:gradiente-descendente} y \ref{algoritmo:calculo-gradiente}. - +Cabe destacar que para este algoritmo es necesario la derivada de las funciones de las funciones de activación. Se ha implementado la derivada débil de ellas. \subsubsection{Implementación del experimento} Deberá de implementarse una función que realice el diff --git a/Memoria/capitulos/5-Estudio_experimental/combinacion_funciones_activacion.tex b/Memoria/capitulos/5-Estudio_experimental/combinacion_funciones_activacion.tex index 505c37e..b3d20e3 100644 --- a/Memoria/capitulos/5-Estudio_experimental/combinacion_funciones_activacion.tex +++ b/Memoria/capitulos/5-Estudio_experimental/combinacion_funciones_activacion.tex @@ -3,19 +3,25 @@ % de activación %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newpage -\chapter{Selección genética de las funciones de activación } +\chapter{Futuros trabajos: Selección genética de las funciones de activación } \label{ch08:genetic-selection} -%TODO: issue 90 -A modo de borrador de lo que tendrá este capítulo: -\begin{itemize} - \item Referencia a la idea intuitiva. - \item Comentario sobre complejidad. - - Más funciones de activación -> aumento espacio de búsqueda. - Si se usan bien -> disminuye número de neuronas - -> se converge más rápido con métodos. - \item Cómo introducir los algoritmos genéticos para desarrollar esta idea. - - El algoritmo genético selecciona qué funciones de activación se usan. Tras esto se entrena el algoritmo de de manera usual. -\end{itemize} \ No newline at end of file +Como se indicó en \ref{ch03:funcionamiento-intuitivo-funcion-activacion} +aunque la convergencia universal no +dependa de la función de activación seleccionada, +fijado cierto número de neuronas esta sí que pueden +determinar mínimo que podamos alcanzar. + +Gracias al resultado \ref{cor:se-generaliza-G-a-una-familia} es posible combinar en una red neuronal distintas funciones de activación y que el teorema de convergencia universal \ref{teo:MFNAUA} se mantenga cierto, esto abre la puerta a explorar también durante el entrenamiento diferentes funciones de activación. De hecho ya existen artículos como \cite{FunctionOptimizationwithGeneticAlgorithms} y \cite{Genetic-deep-neural-networks} donde se desarrolla esta idea. + +El problema que se tiene es que al aumentar +el número de funciones de activación candidatas, se está aumentando también el espacio de búsqueda; lo que significa que la complejidad del espacio aumenta y por ende el coste para encontrar una solución. + +Se ha intentado paliar la situación con algoritmos genéticos (véanse los artículos recién citados). Sin embargo, existe un detalle clave y novedoso, los modelos que +están utilizando son modelos de \textit{deep learning} sensibles a la posiciones de las función de activación. Es decir, que para $n$ neuronas y $t$ funciones de activación diferentes el tamaño del espacio de búsqueda es $t^n$. + + +Sin embargo, una de las ventajas que presenta nuestro modelo es que es invariante ante cambios de posición de funciones de activación; es decir una vez fijado el número de cada tipo de funciones de activación da igual la neurona dónde se posicionen (esto es fácil de comprobar observando el modelo \ref{chapter:construir-redes-neuronales} y por la propiedad conmutativa de la suma). + +Es decir, con nuestro modelo se estaría reduciendo el espacio de búsqueda y por tanto merecería la pena plantearse de nuevo este tipo de experimentos. + diff --git a/Memoria/preliminares/resumen.tex b/Memoria/preliminares/resumen.tex index e0defac..e0a803d 100644 --- a/Memoria/preliminares/resumen.tex +++ b/Memoria/preliminares/resumen.tex @@ -47,9 +47,27 @@ \chapter*{Resumen}\label{ch:resumen} más profunda de nuestro modelo frente a los usuales y que nos servirá como justificación del modelo obtenido. Producto de ello son dos resultados originales sobre el sesgo y dominio de la imagen. Una vez determinado el modelo concreto se han diseñado un algoritmo de aprendizaje, basado en \textit{Backpropagation} y otro de evaluación de redes neuronales. Además se han comparado los resultados de nuestro modelado con los utilizado usualmente. - \item \textbf{Capítulo \ref{funciones-activacion-democraticas-mas-demoscraticas}: Democratización de las funciones de activación.} Se presenta un resultado propio que establece una equivalencia entre distintas funciones de activación. A partir de él se da un criterio de selección de funciones de activación y se estudian experimentalmente los beneficios obtenidos. - \item \textbf{Capítulo \ref{section:inicializar_pesos}: Algoritmo de inicialización de pesos.} Se propone un algoritmo de inicialización de pesos de una red neuronal. - \item \textbf{Capítulo \ref{ch08:genetic-selection}: Selección genética de las funciones de activación.} Se propone un algoritmo de selección de la función de activación basado en algoritmos genéticos. + \item \textbf{Capítulo \ref{funciones-activacion-democraticas-mas-demoscraticas}: Democratización de las funciones de activación.} Se pretende en este capítulo determinar qué funciones de activación son más convenientes que otras, es decir, con cuál se podría tener un menor coste computacional. + Para esto, no se ha tenido sólo en cuenta el coste computacional de evaluar cada función; puesto que la imagen de una función de activación repercute + en el número de neuronas necesarias para estar por debajo de cierto error, se ha establecido una serie de teoremas propio que determina qué funciones de activación tendrán los mismos resultados. Gracias a tales resultados se han + podido agrupar a las funciones de activación y + para cada clase se ha tratado de determinar por medio del test de hipótesis de Wilcoxon cuál es la más rápida, resultando con esto que sin perder precisión se ha reducido el costo y tiempo en evaluación y entrenamiento de las redes neuronal. + + \item \textbf{Capítulo \ref{section:inicializar_pesos}: Algoritmo de inicialización de pesos.} Se propone un algoritmo original de inicialización de los pesos de una red neuronal a + partir de un subconjunto de datos de la muestra. Al ser la solución de partida mejor, con este método se pretende reducir el tiempo y coste de aprendizaje de técnicas iterativas, tales como \textit{Backpropagation}. + + En este capítulo se muestran además los + requisitos técnicos de la implementación de la biblioteca \textit{OptimizedNeuralNetwork.jl}, + ya que para medir la bondad del algoritmo es + necesario implementar todas las funcionalidades al completo. Además se han añadido en estas + secciones ejemplo de uso de la biblioteca. + \item \textbf{Capítulo \ref{ch08:genetic-selection}: Selección genética de las funciones de activación.} El uso de distintas funciones de activación presenta un + potencial en cuanto a reducir el error fijado un cierto número de neuronas, sin embargo esto + aumenta el espacio de búsqueda y por tanto la complejidad. Es aquí donde nuestro modelo + propuesto de red neuronal palía la situación, + ya que frente a los modelos convencionales, el nuestro es invariante a la posición de las + funciones de activación de las neuronas, lo cual + reduce el espacio de búsqueda. \end{itemize} \paragraph{PALABRAS CLAVE:} From 66c762dd2e827bc5e91859195bb23496ec21dbbc Mon Sep 17 00:00:00 2001 From: Blanca Date: Fri, 17 Jun 2022 11:55:06 +0200 Subject: [PATCH 59/76] =?UTF-8?q?Corrige=20en=20el=20resumen=20que=20?= =?UTF-8?q?=C3=A1gil=20no=20es=20una=20metodolog=C3=ADa=20#117?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Memoria/preliminares/summary.tex | 26 ++++++++++++++++++-------- Memoria/tfg.tex | 4 ++-- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/Memoria/preliminares/summary.tex b/Memoria/preliminares/summary.tex index e08fc47..b8b77db 100644 --- a/Memoria/preliminares/summary.tex +++ b/Memoria/preliminares/summary.tex @@ -8,18 +8,28 @@ \selectlanguage{english} \chapter*{Summary}\label{ch:summary} %\addcontentsline{toc}{chapter}{Summar} +Nowadays experimental research in Neural Networks are more advanced than theoretical +results. From this we want to establish a solid mathematical theory from which to optimize the current neural network models. + +As a result of our study we have proposed a new neural network model and adapted and optimized already used evaluation and learning methods to it. Moreover, we have discovered some theorems that prove the equivalence among some activation functions and propose a new algorithm to initialize weights of neural networks. By the first result, we obtain a criteria to choose the most suitable activation function to maintain accuracy and reduce computational cost. By the second one, we might accelerate learning convergence methods. + +In addition the models, methods and algorithms have been implemented in a Julia library: +OptimizedNeuralNetwork.jl + +All the theory development, designs, decisions and result are written in this memory which have the following structure: + +Chapter one: Description of the methodology followed. We have organized our project according to an agile philosophy based on personas methodology, users stories, milestones and tests. The method has conducted and linked mathematical and technical results and implementations, giving them coherence and validation methods. + +Chapter 2: Description of the learning problem. We defined the characteristic and type of machine learning problems. We would focus on supervised learning ones. + +Chapter 3: Approximation theory. In order to establish a solid theory we would start our work trying to solve machine learning problems by traditional approximation methods. The main result we obtained is the Stone Weierstrass’s theorem. As a conclusion of this chapter we would know the virtues and faults of traditional methods and understand the necessity of new methods and structures such as neural networks. + + Chapter 4: Neuronal networks are universal approximators. \paragraph{KEYWORDS:} \begin{itemize*}[label=,itemsep=1em,itemjoin=\hspace{1em}] \item neural networks - \item LSTM - \item time series - \item model selection - \item validation - \item hyper-parameters selection - \item anomaly detection - \item detector - \item perturbation + \end{itemize*} % Al finalizar el resumen en inglés, volvemos a seleccionar el idioma español para el documento diff --git a/Memoria/tfg.tex b/Memoria/tfg.tex index 20c5d7f..ea14057 100644 --- a/Memoria/tfg.tex +++ b/Memoria/tfg.tex @@ -200,8 +200,9 @@ \include{preliminares/titulo} \include{preliminares/declaracion-originalidad} \include{preliminares/resumen} -%\include{preliminares/summary} +\include{preliminares/summary} %\include{preliminares/dedicatoria} % Opcional +\include{preliminares/agradecimientos} \include{preliminares/tablacontenidos} % Opcional @@ -317,5 +318,4 @@ \chapter{Las redes neuronales son aproximadores universales} \begin{footnotesize} % Normalmente el índice se imprime en un tamaño de letra más pequeño. \printindex \end{footnotesize} -\include{preliminares/agradecimientos} \end{document} From f28ae8150d25c330f7d3d042fb96aa5836e20c6f Mon Sep 17 00:00:00 2001 From: Blanca Date: Fri, 17 Jun 2022 19:57:30 +0200 Subject: [PATCH 60/76] =?UTF-8?q?A=C3=B1ade=20implementaci=C3=B3n=20de=20b?= =?UTF-8?q?ackpropagation=20y=20test=20#117=20#121=20Con=20su=20respectivo?= =?UTF-8?q?=20test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Memoria/preliminares/resumen.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Memoria/preliminares/resumen.tex b/Memoria/preliminares/resumen.tex index e0a803d..70da254 100644 --- a/Memoria/preliminares/resumen.tex +++ b/Memoria/preliminares/resumen.tex @@ -34,7 +34,7 @@ \chapter*{Resumen}\label{ch:resumen} La estructura de la memoria es la siguiente: \begin{itemize} - \item \textbf{Capítulo \ref{ch00:methodology}: Descripción de la metodología seguida.} Se ha organizado el proyecto de acorde a una metodología ágil, basada en personas, historias de usuario, hitos y test. Tal método ha conducido e hilado desde el comienzo tanto el desarrollo teórico como el técnico a la par que salvaguardaba la corrección de cada paso. + \item \textbf{Capítulo \ref{ch00:methodology}: Descripción de la metodología seguida.} Se ha organizado el proyecto de acorde a una filosofía de desarrollo ágil, basada en la metodología de personas, historias de usuario, hitos y test. Tal método ha conducido e hilado desde el comienzo tanto el desarrollo teórico como el técnico a la par que salvaguardaba la corrección de cada paso. \item \textbf{Capítulo \ref{chapter:Introduction-neuronal-networks}: Descripción del problema de aprendizaje.} Se introduce las características y tipo de problemas del aprendizaje automático. Además se clarifica cuáles tratan de resolver las redes neuronales. \item \textbf{Capítulo \ref{ch03:teoria-aproximar}: Teoría de la aproximación.} Se muestran los problemas y virtudes que presenta un enfoque clásico de teoría de la aproximación frente a problemas de aprendizaje. En pos de solventar tales impedimentos, se sitúa esta teoría como el germen de From 08a71fd80ff4a6083001880899dc3e2a365fe7a9 Mon Sep 17 00:00:00 2001 From: Blanca Date: Fri, 17 Jun 2022 20:03:40 +0200 Subject: [PATCH 61/76] =?UTF-8?q?A=C3=B1ade=20implementaci=C3=B3n=20de=20b?= =?UTF-8?q?ackpropagation=20y=20test=20#117=20#121=20Con=20su=20respectivo?= =?UTF-8?q?=20test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/OptimizedNeuralNetwork.jl | 1 + .../src/backpropagation.jl | 94 +++++++++++++------ .../src/metric_estimation.jl | 13 ++- .../test/RUN_ALL_TEST.jl | 4 + .../test/backpropagation.test.jl | 38 ++++++++ 5 files changed, 119 insertions(+), 31 deletions(-) create mode 100644 OptimizedNeuralNetwork.jl/test/backpropagation.test.jl diff --git a/OptimizedNeuralNetwork.jl/src/OptimizedNeuralNetwork.jl b/OptimizedNeuralNetwork.jl/src/OptimizedNeuralNetwork.jl index d73d70f..65f6f5d 100644 --- a/OptimizedNeuralNetwork.jl/src/OptimizedNeuralNetwork.jl +++ b/OptimizedNeuralNetwork.jl/src/OptimizedNeuralNetwork.jl @@ -7,4 +7,5 @@ include("one_layer_neuronal_network.jl") include("forward_propagation.jl") include("metric_estimation.jl") include("weight-initializer-algorithm/weight-initializer-algorithm.jl") +include("backpropagation.jl") end \ No newline at end of file diff --git a/OptimizedNeuralNetwork.jl/src/backpropagation.jl b/OptimizedNeuralNetwork.jl/src/backpropagation.jl index e24bd5b..a35ee28 100644 --- a/OptimizedNeuralNetwork.jl/src/backpropagation.jl +++ b/OptimizedNeuralNetwork.jl/src/backpropagation.jl @@ -2,48 +2,45 @@ # Implementación de Backpropagation # Basado en el algoritmo 4 y 5, sección 5.3 de la memoria ########################################################## +export backpropagation! + +using Random + VectorOrMatrix = Union{Matrix,Vector} -function calculo_gradiente( +function descent_gradient( neural_network::AbstractOneLayerNeuralNetwork, X_train :: VectorOrMatrix, Y_train :: VectorOrMatrix, - batch_size :: Int = 32, activation_function, - derivative_activation_funcion + derivative_activation_funcion, + batch_size :: Int = 32, ) - _,len = size(X_train) + len, _ = size(X_train) if len < batch_size error("batch_size should be equal or smaller than the size of train dataset, but $batch_size > $len") end - # Falta comprobar que la longitud de X e Y es correcta # Derivadas parciales a calcular - _,d = size(neural_network.W1) + n_1,d = size(neural_network.W1) s,n = size(neural_network.W2) - partial_W1 = zeros(float, (n+1,d)) - partial_W2 = zeros(float, (s,n)) - + partial_W1 = zeros(Float64, (n_1,d)) + partial_W2 = zeros(Float64, (s,n)) + derivative_B = zeros(Float64, (s,n)) # Variables auxiliares para reducir número de operaciones sensibilities_img = zeros(Float64, n) - - index = first(randperm(len),batch_size) # Para cada muestra del entrenamiento - for indice_entrenamiento in index + for train_index in index # 1. Forward propagation almacenando resultado relevantes - 𝛅 = neural_network.W1 * push!(copy(X_train[i,:]),1) + 𝛅 = neural_network.W1 * push!(copy(X_train[train_index,:]),1) sensibilities_img = map(activation_function, 𝛅) derivative_sensibilities_img= map(derivative_activation_funcion, 𝛅) - # En la fóruma de Back propagation hay algo mal - derivative_B = [ - neural_network.W2[k,i]*ds[i] - for (i,k) in Iterators.product(1:n, 1:s) - ] - forward_propgation_x = h.W2 * s - error = forward_propgation_x .- y + + forward_propagation_x = neural_network.W2 * sensibilities_img + error = forward_propagation_x .- Y_train[train_index,:] # 2. Parcial de B (W_2) for v in 1:n @@ -51,17 +48,58 @@ function calculo_gradiente( partial_W2[w,v] = partial_W2[w,v] + error[w]*sensibilities_img[v] end end - # 3. Parcial S - for v in 1:n - for u in 1:s - parcial_W2[u, v] += error[u]*derivative_sensibilities_img[v] - end - end - # 4. Parcial + # 3. Parcial W_1 + for i in 1:n + for k in 1:s + derivative_B[k,i] = + neural_network.W2[k,i]*derivative_sensibilities_img[i] + end + end + for v in 1:n + for k in 1:s + difference_times_derivative = error[k]*derivative_B[k,s] + partial_W2[k, v] += error[k]*derivative_sensibilities_img[v] + partial_W1[v,d] += difference_times_derivative + for u in 1:(d-1) + partial_W1[v,u] += difference_times_derivative * X_train[train_index, u] + end + end + end + + end + return partial_W1, partial_W2 +end +""" + function backpropagation!( + neural_network::AbstractOneLayerNeuralNetwork, + X_train :: Matrix, + Y_train :: Vector, + activation_function, + derivative_activation_funcion, + batch_size :: Int = 32, + η :: Float64 = 0.1 + ) - end +Compute backpropagation +""" +function backpropagation!( + neural_network::AbstractOneLayerNeuralNetwork, + X_train :: Matrix, + Y_train :: Vector, + activation_function, + derivative_activation_funcion, + batch_size :: Int = 32, + η :: Float64 = 0.1 +) + ∂w1, ∂w2 = descent_gradient(neural_network, + X_train, Y_train, + activation_function, derivative_activation_funcion, + batch_size) + neural_network.W1 -= η*∂w1 + neural_network.W2 -= η*∂w2 + return neural_network end \ No newline at end of file diff --git a/OptimizedNeuralNetwork.jl/src/metric_estimation.jl b/OptimizedNeuralNetwork.jl/src/metric_estimation.jl index fdd3a20..0cac640 100644 --- a/OptimizedNeuralNetwork.jl/src/metric_estimation.jl +++ b/OptimizedNeuralNetwork.jl/src/metric_estimation.jl @@ -1,10 +1,11 @@ #################################################### # Función para tomar métricas #################################################### -using Statistics -using LinearAlgebra export regression +export error_in_train +using Statistics +using LinearAlgebra """ Regression(X::Vector,Y,f) Para los puntos (X,Y) devuelve tupla con @@ -23,4 +24,10 @@ function regression(X::Matrix,Y,f) f_x = map(x->f(x)[1], eachrow(X)) diferences = map(norm,eachrow(Y .- f_x)) return mean(diferences), median(diferences), std(diferences), cor(Y, f_x) -end \ No newline at end of file +end + +function error_in_train(x_train::Matrix,y_train, eval_neural_network)::Float64 + estimations = map(x->eval_neural_network(x)[1], eachrow(x_train)) + diferences = map(norm,eachrow(y_train .- estimations)) + return mean(diferences) +end \ No newline at end of file diff --git a/OptimizedNeuralNetwork.jl/test/RUN_ALL_TEST.jl b/OptimizedNeuralNetwork.jl/test/RUN_ALL_TEST.jl index a5b0d9d..0afc25d 100644 --- a/OptimizedNeuralNetwork.jl/test/RUN_ALL_TEST.jl +++ b/OptimizedNeuralNetwork.jl/test/RUN_ALL_TEST.jl @@ -27,4 +27,8 @@ println("done (took $t seconds).") println("Testing metric estimation") t = @elapsed include("metric_estimation.test.jl") +println("done (took $t seconds).") + +println("Testing backpropagation") +t = @elapsed include("backpropagation.test.jl") println("done (took $t seconds).") \ No newline at end of file diff --git a/OptimizedNeuralNetwork.jl/test/backpropagation.test.jl b/OptimizedNeuralNetwork.jl/test/backpropagation.test.jl new file mode 100644 index 0000000..317f7cf --- /dev/null +++ b/OptimizedNeuralNetwork.jl/test/backpropagation.test.jl @@ -0,0 +1,38 @@ +################################### +# Backpropagation test +# El erro debe de ir decreciendo conforme avanzan las +# evaluaciones +################################### +using Test +@testset "Backpropagation" begin + n = 3 # número de neuronas + η = 0.005 # queremos que reduzca sin pasarse, de ahí que sea ""pequeño"" el learning rate + tol = 0.5 # rango de error que permitimos ya que puede existir casos en los que el η sea demasiado grande + data_set_size = n + cosin(x,y)=cos(x)+sin(y) # funcion ideal + h = RandomWeightsNN(2,n, 1) # 2 dimensión entrada 1 dimensión de salida + X_train = (rand(Float64, (data_set_size, 2)))*3 + Y_train = map(v->cosin(v...),eachrow(X_train)) + disminuye_error = 0.0 + error_0 = error_in_train( + X_train, + Y_train, + x->forward_propagation(h,RampFunction,x) + ) + for i in 1:n + backpropagation!(h, X_train, Y_train, RampFunction, derivativeRampFunction, n) + + error_1 = error_in_train( + X_train, + Y_train, + x->forward_propagation(h,RampFunction,x) + ) + disminuye_error += (error_1 < tol + error_0) ? 1 : 0 # tolerancia + error_0 = error_1 + end + # Debe tenerse en cuenta de que a pesar de estar la + # tolerancia, el η introduce cierta probabilidad de aumentar el error, + # es por ello que introducimos esta heurísticas + @test disminuye_error >= ceil(0.9*(n-1)) # más de noveinta porciento de los casos disminuye el error + +end \ No newline at end of file From 92e7fe05491c2f040a0ea981a8c4ba844ab81e32 Mon Sep 17 00:00:00 2001 From: Blanca Date: Sat, 18 Jun 2022 07:37:10 +0200 Subject: [PATCH 62/76] =?UTF-8?q?Corrige=20erratillas=20ortogr=C3=A1ficas?= =?UTF-8?q?=20menores=20#117?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../feedforward-network-una-capa.tex | 2 +- .../diferencia_entre_los_reales_y_enteros.tex | 4 ++-- .../construccion-evaluacion-red-neuronal.tex | 3 ++- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Memoria/capitulos/1-Introduccion_redes_neuronales/feedforward-network-una-capa.tex b/Memoria/capitulos/1-Introduccion_redes_neuronales/feedforward-network-una-capa.tex index e7807b7..f7dc8fd 100644 --- a/Memoria/capitulos/1-Introduccion_redes_neuronales/feedforward-network-una-capa.tex +++ b/Memoria/capitulos/1-Introduccion_redes_neuronales/feedforward-network-una-capa.tex @@ -14,7 +14,7 @@ \item \textbf{Introducción de nuestro modelo} de red neuronal $\rrnnmc$ y comparación con los usuales en la sección \ref{sec:redes-neuronales-intro-una-capa}. \item Demostración de que \textbf{las redes neuronales modelizadas son aproximadores universales}. \begin{itemize} - \item Para ello serán necesaria una serie de \textbf{definiciones previas} que se encuentran en la sección \ref{ch:articulo:sec:defincionesPrimeras}, + \item Para ello serán necesarias una serie de \textbf{definiciones previas} que se encuentran en la sección \ref{ch:articulo:sec:defincionesPrimeras}, las más relevantes son la de función de activación y los espacios $\pmcg$. \item El resultado de convergencia universal es producto de una sucesión de \textbf{conseguir aproximar espacios a partir de otros}, concretamente las relaciones \textit{es denso en} y dónde se demuestran son: diff --git a/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/diferencia_entre_los_reales_y_enteros.tex b/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/diferencia_entre_los_reales_y_enteros.tex index b0027b3..110cf78 100644 --- a/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/diferencia_entre_los_reales_y_enteros.tex +++ b/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/diferencia_entre_los_reales_y_enteros.tex @@ -47,7 +47,7 @@ \section{Consideración sobre la capacidad de cálculo} La red neuronal $h^r$ está determinada por un conjunto finito de parámetros supongamos que hay $q$ y que están determinados por un índice del conjunto $\Lambda$. - Sea $\alpha^0_i \in R$, el primer índice $h^r$ definimos la red neuronal $h^1$ con coeficientes $\alpha^1_i$ con $i\in \Lambda$ + Sea $\alpha^0_i \in \R$, el primer índice $h^r$ definimos la red neuronal $h^1$ con coeficientes $\alpha^1_i$ con $i\in \Lambda$ de tal forma que los parámetros que la determinan vienen dados por \begin{equation*} \alpha^1_i = \alpha^0_i @@ -94,6 +94,6 @@ \section{Consideración sobre la capacidad de cálculo} de las redes neuronales con entradas en los enteros. Todas estas pesquisas tienen su interés ya que por las arquitecturas -actuales, los números flotantes (racionales con un límite de decimales) se calculan en las GPUs, mientras que los enteros en las CPUs, siendo más rápidas la segundas\footnote{En el blog del investigador Long Zhou, se comenta se da una visión favorable sobre las CPUs y cómo en la actualidad se comenten errores a la hora de comparar las GPUs y CPUs, dejo link a la publicación. Consultada por última vez el 23 de mayo +actuales, los números flotantes (racionales con un límite de decimales y parte en entera) se calculan en las GPUs, mientras que los enteros en las CPUs, siendo más rápidas la segundas\footnote{En el blog del investigador Long Zhou, se da una visión favorable sobre las CPUs y cómo en la actualidad se comenten errores a la hora de comparar las GPUs y CPUs, dejo link a la publicación. Consultada por última vez el 23 de mayo del 2022, URL: \url{https://long-zhou.github.io/2013/02/12/CPU-GPU-comparison.html}} \cite{CPU-vs-GPUS}. diff --git a/Memoria/capitulos/4-Actualizacion_redes_neuronales/construccion-evaluacion-red-neuronal.tex b/Memoria/capitulos/4-Actualizacion_redes_neuronales/construccion-evaluacion-red-neuronal.tex index d8c5bb4..29dffb0 100644 --- a/Memoria/capitulos/4-Actualizacion_redes_neuronales/construccion-evaluacion-red-neuronal.tex +++ b/Memoria/capitulos/4-Actualizacion_redes_neuronales/construccion-evaluacion-red-neuronal.tex @@ -626,7 +626,8 @@ \subsection{Implementación de una red neuronal y evaluación} un tipo de dato y serán las funciones que las utilicen o modifiquen las que a conveniencia determinen un tipo de función de activación u - otro, de esta manera se tendrá una mayor flexibilidad en la arquitectura y un ahorre en memoria. + otro, de esta manera se tendrá una mayor flexibilidad en + la arquitectura y un ahorro en memoria. Supondría además un nuevo paradigma de trabajo y definición de redes neuronales. From 22fc29d6d6617155f7d59b7d3338f815ad86ae01 Mon Sep 17 00:00:00 2001 From: Blanca Date: Sat, 18 Jun 2022 09:42:37 +0200 Subject: [PATCH 63/76] =?UTF-8?q?Retoca=20cap=C3=ADtulo=208=20#117=20A?= =?UTF-8?q?=C3=B1ade=20otra=20observaci=C3=B3n=20sobre=20aportaci=C3=B3n?= =?UTF-8?q?=20del=20cap=C3=ADtulo=206?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../combinacion_funciones_activacion.tex | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/Memoria/capitulos/5-Estudio_experimental/combinacion_funciones_activacion.tex b/Memoria/capitulos/5-Estudio_experimental/combinacion_funciones_activacion.tex index b3d20e3..fd4c5b1 100644 --- a/Memoria/capitulos/5-Estudio_experimental/combinacion_funciones_activacion.tex +++ b/Memoria/capitulos/5-Estudio_experimental/combinacion_funciones_activacion.tex @@ -9,19 +9,24 @@ \chapter{Futuros trabajos: Selección genética de las funciones de activación Como se indicó en \ref{ch03:funcionamiento-intuitivo-funcion-activacion} aunque la convergencia universal no dependa de la función de activación seleccionada, -fijado cierto número de neuronas esta sí que pueden -determinar mínimo que podamos alcanzar. +fijado cierto número de neuronas, éstas sí que pueden +determinar el error mínimo que podamos alcanzar. -Gracias al resultado \ref{cor:se-generaliza-G-a-una-familia} es posible combinar en una red neuronal distintas funciones de activación y que el teorema de convergencia universal \ref{teo:MFNAUA} se mantenga cierto, esto abre la puerta a explorar también durante el entrenamiento diferentes funciones de activación. De hecho ya existen artículos como \cite{FunctionOptimizationwithGeneticAlgorithms} y \cite{Genetic-deep-neural-networks} donde se desarrolla esta idea. +Gracias al resultado \ref{cor:se-generaliza-G-a-una-familia} es posible combinar en una red neuronal distintas funciones de activación y que el teorema de convergencia universal \ref{teo:MFNAUA} se mantenga cierto, esto abre la puerta a explorar también durante el entrenamiento diferentes funciones de activación. De hecho ya existen artículos como \cite{FunctionOptimizationwithGeneticAlgorithms} y \cite{Genetic-deep-neural-networks} donde se desarrolla de manera experimental esta idea. El problema que se tiene es que al aumentar el número de funciones de activación candidatas, se está aumentando también el espacio de búsqueda; lo que significa que la complejidad del espacio aumenta y por ende el coste para encontrar una solución. -Se ha intentado paliar la situación con algoritmos genéticos (véanse los artículos recién citados). Sin embargo, existe un detalle clave y novedoso, los modelos que -están utilizando son modelos de \textit{deep learning} sensibles a la posiciones de las función de activación. Es decir, que para $n$ neuronas y $t$ funciones de activación diferentes el tamaño del espacio de búsqueda es $t^n$. +Se ha intentado paliar la situación con algoritmos genéticos (véanse los artículos recién citados). Sin embargo, existen dos detalles claves y novedosos que podemos aportar: el primero es que \textbf{con nuestro teorema \ref{teo:eficacia-funciones-activation}} se ha obtenido un +criterio de selección de las funciones de activación que +tendrán el mismo potencial de aproximación y menor coste; +esto \textbf{nos ahorraría tener que explorar combinaciones de +funciones de activación que no vaya a aportar en precisión y +además aumenten el costo.} -Sin embargo, una de las ventajas que presenta nuestro modelo es que es invariante ante cambios de posición de funciones de activación; es decir una vez fijado el número de cada tipo de funciones de activación da igual la neurona dónde se posicionen (esto es fácil de comprobar observando el modelo \ref{chapter:construir-redes-neuronales} y por la propiedad conmutativa de la suma). +El segundo reside en que en los artículos que versan sobre el tema, +utilizan modelos de \textit{deep learning} sensibles a la posiciones de las función de activación. Es decir, que para $n$ neuronas y $t$ funciones de activación diferentes el tamaño del espacio de búsqueda es $t^n$. Sin embargo, una de las ventajas que presenta \textbf{nuestro modelo} es que \textbf{es invariante ante cambios de posición de funciones de activación;} por lo que una vez fijado el número de cada tipo de funciones de activación da igual la neurona dónde se posicionen (esto es fácil de comprobar observando el modelo \ref{chapter:construir-redes-neuronales} y por la propiedad conmutativa de la suma). -Es decir, con nuestro modelo se estaría reduciendo el espacio de búsqueda y por tanto merecería la pena plantearse de nuevo este tipo de experimentos. +Es decir, \textbf{con nuestro modelo y resultados se estaría reduciendo el espacio de búsqueda y por tanto merecería la pena plantearse de nuevo este tipo de experimentos}. From db14b39e8e7fae2bfaff78c24daf290106fc863d Mon Sep 17 00:00:00 2001 From: Blanca Date: Sat, 18 Jun 2022 18:04:55 +0200 Subject: [PATCH 64/76] =?UTF-8?q?Escribe=20=20experimento=20y=20saca=20los?= =?UTF-8?q?=20datos=20del=20mismo,=20as=C3=AD=20como=20dibujar=20un=20gr?= =?UTF-8?q?=C3=A1fico=20caja=20bigote=20con=20los=20resultados=20que=20no?= =?UTF-8?q?=20sea=20outliers=20#115?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Experimentos/.config.toml | 11 +- .../0_experimento_sintetico.jl | 2 +- .../1_experimento_sintetico_heterogeneo.jl | 2 +- .../2_air_self_noise.jl | 240 +++++++++++------- .../resultados/2_air_self_noise/TEST_WILCOXON | 21 ++ .../resultados/2_air_self_noise/boxplot.jl | 51 ++++ .../2_air_self_noise/error_entrenamiento.csv | 3 + .../2_air_self_noise/error_test.csv | 3 + .../resultados/2_air_self_noise/tiempos.csv | 3 + .../aprendizaje.tex | 2 +- .../3_algoritmo-inicializacion-pesos.tex | 4 +- .../grafico-bigotes-error_entrenamiento.png | Bin 0 -> 28647 bytes .../grafico-bigotes-error_test.png | Bin 0 -> 31774 bytes .../experimento/grafico-bigotes-tiempo.png | Bin 0 -> 26713 bytes .../src/OptimizedNeuralNetwork.jl | 2 +- .../src/metric_estimation.jl | 12 +- .../test/RUN_ALL_TEST.jl | 2 +- .../test/backpropagation.test.jl | 4 +- 18 files changed, 249 insertions(+), 113 deletions(-) create mode 100644 Experimentos/inicializacion-pesos-red-neuronal/resultados/2_air_self_noise/TEST_WILCOXON create mode 100644 Experimentos/inicializacion-pesos-red-neuronal/resultados/2_air_self_noise/boxplot.jl create mode 100644 Experimentos/inicializacion-pesos-red-neuronal/resultados/2_air_self_noise/error_entrenamiento.csv create mode 100644 Experimentos/inicializacion-pesos-red-neuronal/resultados/2_air_self_noise/error_test.csv create mode 100644 Experimentos/inicializacion-pesos-red-neuronal/resultados/2_air_self_noise/tiempos.csv create mode 100644 Memoria/img/7-algoritmo-inicializar-pesos/experimento/grafico-bigotes-error_entrenamiento.png create mode 100644 Memoria/img/7-algoritmo-inicializar-pesos/experimento/grafico-bigotes-error_test.png create mode 100644 Memoria/img/7-algoritmo-inicializar-pesos/experimento/grafico-bigotes-tiempo.png diff --git a/Experimentos/.config.toml b/Experimentos/.config.toml index 79fc1f4..50520c2 100644 --- a/Experimentos/.config.toml +++ b/Experimentos/.config.toml @@ -46,14 +46,7 @@ FACTOR = +4 # Por cada neurona cuantos datos hay # Configuración de [air-self-noise] -# Descomentar: Para mostrar en la carpeta del experimento -DIRECTORIO_IMAGENES = "./Experimentos/inicializacion-pesos-red-neuronal/img/0_1_aleatorio/" #carpeta que contendrá las imágenes # Descomentar: Para mostrar en la carpeta de la memoria -#DIRECTORIO_IMAGENES = "./Memoria/img/7-algoritmo-inicializar-pesos/" FICHERO_DATOS = "Experimentos/inicializacion-pesos-red-neuronal/data/airfoil_self_noise.csv" -DIRECTORIO_RESULTADOS = "Experimentos/inicializacion-pesos-red-neuronal/resultados/1_sinteticos_heterogeneo/" -NOMBRE_FICHERO_RESULTADOS = "resultados.csv" -NUMERO_PARTICIONES = +15 # Veces que se tomarán medidas -LIMITE_INFERIOR = -10 # Cota inferior de los valores posibles -LIMITE_SUPERIOR = +10 # Cota superior de los valores posibles -FACTOR = +4 # Por cada neurona cuantos datos hay +DIRECTORIO_RESULTADOS = "Experimentos/inicializacion-pesos-red-neuronal/resultados/2_air_self_noise/" +NUMERO_EJECUCIONES = +15 # Veces que se tomarán medidas diff --git a/Experimentos/inicializacion-pesos-red-neuronal/0_experimento_sintetico.jl b/Experimentos/inicializacion-pesos-red-neuronal/0_experimento_sintetico.jl index fc8223d..748755c 100644 --- a/Experimentos/inicializacion-pesos-red-neuronal/0_experimento_sintetico.jl +++ b/Experimentos/inicializacion-pesos-red-neuronal/0_experimento_sintetico.jl @@ -11,7 +11,7 @@ img_path = config["DIRECTORIO_IMAGENES"] Random.seed!(1) include("../../OptimizedNeuralNetwork.jl/src/OptimizedNeuralNetwork.jl") -using .OptimimizedNeuralNetwork +using .OptimizedNeuralNetwork M = 1 K_range = 3 diff --git a/Experimentos/inicializacion-pesos-red-neuronal/1_experimento_sintetico_heterogeneo.jl b/Experimentos/inicializacion-pesos-red-neuronal/1_experimento_sintetico_heterogeneo.jl index f5061ea..52cc547 100644 --- a/Experimentos/inicializacion-pesos-red-neuronal/1_experimento_sintetico_heterogeneo.jl +++ b/Experimentos/inicializacion-pesos-red-neuronal/1_experimento_sintetico_heterogeneo.jl @@ -12,7 +12,7 @@ NOMBRE_FICHERO_RESULTADOS = config["NOMBRE_FICHERO_RESULTADOS"] # número de particiones numero_particiones = config["NUMERO_PARTICIONES"] include("../../OptimizedNeuralNetwork.jl/src/OptimizedNeuralNetwork.jl") -using .OptimimizedNeuralNetwork +using .OptimizedNeuralNetwork Random.seed!(1) diff --git a/Experimentos/inicializacion-pesos-red-neuronal/2_air_self_noise.jl b/Experimentos/inicializacion-pesos-red-neuronal/2_air_self_noise.jl index e544363..2fb21b6 100644 --- a/Experimentos/inicializacion-pesos-red-neuronal/2_air_self_noise.jl +++ b/Experimentos/inicializacion-pesos-red-neuronal/2_air_self_noise.jl @@ -1,5 +1,5 @@ ######################################################## -# EXPERIMENTO SINTÉTICO DE NUESTRO algoritmo +# Experimento del algoritmo inicialización con base de datos de air self noise ######################################################## using Random using Plots @@ -7,14 +7,18 @@ using TOML using CSV using DataFrames using StatsBase +using HypothesisTests +using TimerOutputs FICHERO_CONFIGURACION = "Experimentos/.config.toml" config = TOML.parsefile(FICHERO_CONFIGURACION)["air-self-noise"] FILE = config["FICHERO_DATOS"] +DIRECTORIO_RESULTADOS = config["DIRECTORIO_RESULTADOS"] +NUMERO_EJECUCIONES = config["NUMERO_EJECUCIONES"] -Random.seed!(1) include("../../OptimizedNeuralNetwork.jl/src/OptimizedNeuralNetwork.jl") -using .OptimimizedNeuralNetwork + +using .OptimizedNeuralNetwork #------------------------------------------------------ # Data preprocesing @@ -26,106 +30,158 @@ label = 6 df = DataFrame(CSV.File(FILE, header=false)) # Miramos si hay valores perdidos display(describe(df)) # No hay -for i in 1:4 # Transformamos en matrices y vectores X = Matrix(df[:, atributes]) Y = Vector(df[:,label]) len = length(Y) -# suffle -sort = randperm(len) -Xs = X[sort, :] -Ys = Y[sort] -# separate train from test -index = Integer(2*len/3) -X_train = Xs[1:index,:] -Y_train = Ys[1:index] -X_test = Xs[index+1:len, :] -Y_test = Ys[index+1:len] - -# Data normalization -#dt = fit(ZScoreTransform, X_train, dims=1) -dt = fit(UnitRangeTransform, X_train, dims=1) -X_test_normalized = StatsBase.transform(dt, X_test) -X_train_normalized = StatsBase.transform(dt, X_train) - -dt_y = fit(UnitRangeTransform, Y_train, dims=1) -Y_test_normalized = StatsBase.transform(dt_y, Y_test) -Y_train_normalized = StatsBase.transform(dt_y, Y_train) - +index = Integer(2*len/3) #separador de conjunto de entrenamiento y test +α = 0.9 # heurística ortogonalidad comentada en memoria +n = ceil(Integer, index*α) # numbers of nodes +valor_estancamiento = 5 +tol = 0.001 +η = 0.005 # valor heurístico tras varias pruebas (0.1 era demasiado grande) -#------------------------------------------------------ -# Get neuronal network -#------------------------------------------------------ -n = ceil(Integer, index*0.9) # numbers of nodes -println("\nEjecución $i") println("Se va a entrenar con $n neuronas") println("El tamaño de test es de $(len-index)") println("El conjunto de entrenamiento $(index)") -# Ajuste con comienzo de datos inicial -println("Resultados con h aleatoria") -h_random = RandomWeightsNN(input_dimension, n, output_dimension) -evaluate_random(x) = forward_propagation(h_random, - RampFunction,x - ) -println(regression(X_test_normalized, Y_test_normalized, evaluate_random)) - -# Experimentamos con nuestro algoritmo -M = 1 -h_initialized = nn_from_data(X_train_normalized, Y_train_normalized, n, M) -# Función de evaluación por forward propagation -evaluate_initialized(x) = forward_propagation(h_initialized, - RampFunction,x +### Valores donde almacenar los datos +# índeces del array donde se almacenan los datos +indice_algoritmo_inicializcion = 1 +indice_aleatorio_y_backpropagation = 2 + +dfTiempo = [ + Array{Float64}(undef, 2 ) + for _ in 1:NUMERO_EJECUCIONES + ] +dfNombre = ["Algoritmo inicialización", "Aleatorio y Backpropagation"] +dfErrorEntrenamiento = [ + Array{Float64}(undef, 2 ) + for _ in 1:NUMERO_EJECUCIONES + ] +dfErrorTest = [ + Array{Float64}(undef, 2 ) + for _ in 1:NUMERO_EJECUCIONES +] +for i in 1:NUMERO_EJECUCIONES + # suffle + sort = randperm(len) + Xs = X[sort, :] + Ys = Y[sort] + # separate train from test + X_train = Xs[1:index,:] + Y_train = Ys[1:index] + X_test = Xs[index+1:len, :] + Y_test = Ys[index+1:len] + + # Data normalization + #dt = fit(ZScoreTransform, X_train, dims=1) + dt = fit(UnitRangeTransform, X_train, dims=1) + X_test_normalized = StatsBase.transform(dt, X_test) + X_train_normalized = StatsBase.transform(dt, X_train) + + dt_y = fit(UnitRangeTransform, Y_train, dims=1) + Y_test_normalized = StatsBase.transform(dt_y, Y_test) + Y_train_normalized = StatsBase.transform(dt_y, Y_train) + + #------------------------------------------------------ + # Get neuronal network + #------------------------------------------------------ + println("\nEjecución $i") + # Experimentamos con nuestro algoritmo + M = 1 + dfTiempo[i][indice_algoritmo_inicializcion]= @elapsed h_initialized = nn_from_data(X_train_normalized, Y_train_normalized, n, M) + # Función de evaluación por forward propagation + evaluate_initialized(x) = forward_propagation(h_initialized, + RampFunction,x + ) + + println("Resultados con h ajustada") + error_in_train_initialize = error_in_data_set(X_train_normalized, Y_train_normalized, evaluate_initialized) + println("Ha tardado un tiempo de $(dfTiempo[i][indice_algoritmo_inicializcion])") + println("El error en el conjunto de entrenamiento es de $error_in_train_initialize") + + # Almacenamos datos en el csv + dfErrorEntrenamiento[i][indice_algoritmo_inicializcion] = error_in_train_initialize + dfErrorTest[i][indice_algoritmo_inicializcion] = error_in_data_set(X_test_normalized, Y_test_normalized, evaluate_initialized) + + ####### Test con backpropagation + # Entrenaremos hasta que el error sea igual o menor + # Ajuste con comienzo de datos inicial + println("\n--- Resultados con h aleatoria ---") + time_backpropagation = @elapsed h_random = RandomWeightsNN(input_dimension, n, output_dimension) + evaluate_random(x) = forward_propagation(h_random,RampFunction,x) + error_in_train_backpropagation = error_in_data_set(X_train_normalized, Y_train_normalized, evaluate_random) + iterations = 0 + last_error = error_in_train_backpropagation + stoped_iterations = 0 + println("El error inicial en backpropagation es de $error_in_train_backpropagation") + while( error_in_train_initialize < error_in_train_backpropagation + && + stoped_iterations < valor_estancamiento ) - -println("Resultados con h ajustada") -println(regression(X_test_normalized, Y_test_normalized, evaluate_initialized)) + println("El error en la iteración $iterations: $error_in_train_backpropagation") + time_backpropagation += @elapsed backpropagation!(h_random, + X_train_normalized, Y_train_normalized, + RampFunction, derivativeRampFunction, + n, + η) + iterations += 1 + evaluate_random(x) = forward_propagation(h_random, + RampFunction,x + ) + error_in_train_backpropagation = error_in_data_set(X_train_normalized, Y_train_normalized, evaluate_random) + if(abs(error_in_train_backpropagation - last_error) < tol || error_in_train_backpropagation > tol + last_error) + stoped_iterations += 1 + else + stoped_iterations = 0 + end + last_error = error_in_train_backpropagation + end + evaluate_random(x) = forward_propagation(h_random,RampFunction,x) + dfTiempo[i][indice_aleatorio_y_backpropagation] = time_backpropagation + dfErrorEntrenamiento[i][indice_aleatorio_y_backpropagation] = error_in_train_backpropagation + dfErrorTest[i][indice_aleatorio_y_backpropagation] = error_in_data_set(X_test_normalized, Y_test_normalized, evaluate_random) + println(regression(X_test_normalized, Y_test_normalized, evaluate_random)) + println("Durante $time_backpropagation") end -""" -6×7 DataFrame - Row │ variable mean min median max nmissing eltype - │ Symbol Float64 Real Float64 Real Int64 DataType -─────┼───────────────────────────────────────────────────────────────────────────────────────── - 1 │ Column1 2886.38 200 1600.0 20000 0 Int64 - 2 │ Column2 6.7823 0.0 5.4 22.2 0 Float64 - 3 │ Column3 0.136548 0.0254 0.1016 0.3048 0 Float64 - 4 │ Column4 50.8607 31.7 39.6 71.3 0 Float64 - 5 │ Column5 0.0111399 0.000400682 0.00495741 0.0584113 0 Float64 - 6 │ Column6 124.836 103.38 125.721 140.987 0 Float64 - Ejecución 1 -Se va a entrenar con 902 neuronas -El tamaño de test es de 501 -El conjunto de entrenamiento 1002 -Resultados con h aleatoria -(404.8662093260707, 419.1115903577392, 41.635752117489275, -0.2961736723908062) -Resultados con h ajustada -(0.1759656798601324, 0.1439178380239382, 0.1418858978301221, 0.1617093840740258) -Ejecución 2 -Se va a entrenar con 902 neuronas -El tamaño de test es de 501 -El conjunto de entrenamiento 1002 -Resultados con h aleatoria -(412.6085843252029, 425.4178063252722, 38.83676957614223, -0.36658463933867147) -Resultados con h ajustada -(0.1887864329420057, 0.1594975256947092, 0.141530618515747, 0.1669516152633034) -Ejecución 3 -Se va a entrenar con 902 neuronas -El tamaño de test es de 501 -El conjunto de entrenamiento 1002 -Resultados con h aleatoria -(407.72244602689705, 420.2626874975474, 36.8556315202347, -0.2874190506953035) -Resultados con h ajustada -(0.19299620315055435, 0.16363726585828242, 0.15253785656821325, 0.1077840541213413) -Ejecución 4 -Se va a entrenar con 902 neuronas -El tamaño de test es de 501 -El conjunto de entrenamiento 1002 -Resultados con h aleatoria -(413.7672171338432, 427.98530944897396, 38.578762699498924, -0.405215165344763) -Resultados con h ajustada -(0.19361423644056652, 0.16653552920747788, 0.1502466320311231, 0.1600790908855873) - -""" + +# Mostramos resultados y los guardamos en le fichero de resultados +#Mostramos en pantalla resultados +DF_NOMBRES = DataFrame( + Método = dfNombre, +) +# Añadimos los tiempos +DF_TIEMPOS = hcat( + DF_NOMBRES, + DataFrame(dfTiempo, ["Tiempo $(i)" for i in 1:NUMERO_EJECUCIONES]) +) +# Añadimos error en entrenamiento +DF_ERROR_ENTRENAMIENTO = hcat( + DF_NOMBRES, + DataFrame(dfErrorEntrenamiento, ["Error entrenamiento $(i)" for i in 1:NUMERO_EJECUCIONES]) +) + +DF_ERROR_TEST = hcat( + DF_NOMBRES, + DataFrame(dfErrorTest, ["Error test $(i)" for i in 1:NUMERO_EJECUCIONES]) +) + +# Guardamos los datos en el directorio respectivo +CSV.write(DIRECTORIO_RESULTADOS*"tiempos.csv", DF_TIEMPOS) +CSV.write(DIRECTORIO_RESULTADOS*"error_entrenamiento.csv", DF_ERROR_ENTRENAMIENTO) +CSV.write(DIRECTORIO_RESULTADOS*"error_test.csv", DF_ERROR_TEST) + +# Test de los signos de Wilcoxon + +resultados = "\n + $(SignedRankTest(map(x-> x[1]-x[2],dfTiempo))) + " +println(resultados) +write(DIRECTORIO_RESULTADOS*"TEST_WILCOXON", resultados) + + + diff --git a/Experimentos/inicializacion-pesos-red-neuronal/resultados/2_air_self_noise/TEST_WILCOXON b/Experimentos/inicializacion-pesos-red-neuronal/resultados/2_air_self_noise/TEST_WILCOXON new file mode 100644 index 0000000..5678b1e --- /dev/null +++ b/Experimentos/inicializacion-pesos-red-neuronal/resultados/2_air_self_noise/TEST_WILCOXON @@ -0,0 +1,21 @@ + + + Exact Wilcoxon signed rank test +------------------------------- +Population details: + parameter of interest: Location parameter (pseudomedian) + value under h_0: 0 + point estimate: -5.1562 + 95% confidence interval: (-5.179, -5.134) + +Test summary: + outcome with 95% confidence: reject h_0 + two-sided p-value: <1e-04 + +Details: + number of observations: 15 + Wilcoxon rank-sum statistic: 0.0 + rank sums: [0.0, 120.0] + adjustment for ties: 0.0 + + \ No newline at end of file diff --git a/Experimentos/inicializacion-pesos-red-neuronal/resultados/2_air_self_noise/boxplot.jl b/Experimentos/inicializacion-pesos-red-neuronal/resultados/2_air_self_noise/boxplot.jl new file mode 100644 index 0000000..76cec7c --- /dev/null +++ b/Experimentos/inicializacion-pesos-red-neuronal/resultados/2_air_self_noise/boxplot.jl @@ -0,0 +1,51 @@ +################################################################## +# Muestra en pantalla los diagramas de bigotes +################################################################## +using PlotlyJS +using CSV +using DataFrames +limit = 15 +# Imprimimos tabla bigotes tiempo +df = DataFrame(CSV.File("Experimentos/inicializacion-pesos-red-neuronal/resultados/2_air_self_noise/tiempos.csv")) +table_df = Tables.matrix(df) +traces = [ + box( + y = table_df[i, 2:16], + name = table_df[i, 1] + ) + for i in 1:2 +] +plot(traces, Layout(yaxis_title="Tiempos en segundos", boxmode="group")) + + + +# Error cuadrático medio +file_path = "Experimentos/inicializacion-pesos-red-neuronal/resultados/2_air_self_noise/error_entrenamiento.csv" +df = DataFrame(CSV.File(file_path)) +table_df = Tables.matrix(df) +traces = [ + box( + y = table_df[i, 2:limit], + name = table_df[i, 1] + ) + for i in 1:2 +] +ref = plot(traces, Layout(yaxis_title="Error cuadrático medio", boxmode="group")) +path = "Memoria/img/7-algoritmo-inicializar-pesos/experimento/" +savefig(ref, path*"grafico-bigotes-error_entrenamiento.png") + + +# Error cuadrático medio +file_path = "Experimentos/inicializacion-pesos-red-neuronal/resultados/2_air_self_noise/error_test.csv" +df = DataFrame(CSV.File(file_path)) +table_df = Tables.matrix(df) +traces = [ + box( + y = table_df[i, 2:limit], + name = table_df[i, 1] + ) + for i in 1:2 +] +ref = plot(traces, Layout(yaxis_title="Error cuadrático medio", boxmode="group")) +path = "Memoria/img/7-algoritmo-inicializar-pesos/experimento/" +savefig(ref, path*"grafico-bigotes-error_test.png") \ No newline at end of file diff --git a/Experimentos/inicializacion-pesos-red-neuronal/resultados/2_air_self_noise/error_entrenamiento.csv b/Experimentos/inicializacion-pesos-red-neuronal/resultados/2_air_self_noise/error_entrenamiento.csv new file mode 100644 index 0000000..cacc3d2 --- /dev/null +++ b/Experimentos/inicializacion-pesos-red-neuronal/resultados/2_air_self_noise/error_entrenamiento.csv @@ -0,0 +1,3 @@ +Método,Error entrenamiento 1,Error entrenamiento 2,Error entrenamiento 3,Error entrenamiento 4,Error entrenamiento 5,Error entrenamiento 6,Error entrenamiento 7,Error entrenamiento 8,Error entrenamiento 10,Error entrenamiento 11,Error entrenamiento 12,Error entrenamiento 13,Error entrenamiento 14,Error entrenamiento 15 +Algoritmo inicialización,0.015450959799898878,0.02036560128419838,0.01860506078631223,0.018352257751089094,0.015761799102139915,0.020236180371691323,0.015079277709071862,0.01637952035995003,0.017948717556427896,0.019945557002292474,0.01661533897841697,0.016410412323682545,0.020747917818904223,0.016152577266901332 +Aleatorio y Backpropagation,0.5736027612390292,0.5826000563977665,0.5600209742817601,0.5653315557343409,0.580078355443119,0.5825777614383504,0.5680350947531905,0.5602507170589771,0.5692227107462425,0.5742317756350493,0.5553409036888265,0.5704177573005663,0.5825300293968598,0.575503737651933 diff --git a/Experimentos/inicializacion-pesos-red-neuronal/resultados/2_air_self_noise/error_test.csv b/Experimentos/inicializacion-pesos-red-neuronal/resultados/2_air_self_noise/error_test.csv new file mode 100644 index 0000000..48f31e7 --- /dev/null +++ b/Experimentos/inicializacion-pesos-red-neuronal/resultados/2_air_self_noise/error_test.csv @@ -0,0 +1,3 @@ +Método,Error test 1,Error test 2,Error test 3,Error test 4,Error test 5,Error test 6,Error test 7,Error test 8,Error test 10,Error test 11,Error test 12,Error test 13,Error test 14,Error test 15 +Algoritmo inicialización,0.14361363458933019,0.1952868584354336,0.19220472899724,0.1683389995480742,0.17856461481713004,0.18612887734459227,0.16982422340560807,0.17355884392866447,0.18579240234309696,0.18141534372568374,0.18306141211376106,0.18552791255717482,0.1858214128182375,0.18086872040674148 +Aleatorio y Backpropagation,0.5643861584141527,0.5706002212630735,0.5627847152119381,0.5547920898577808,0.5900153578318377,0.5850165458413752,0.57552149138583,0.5649537672085084,0.5731462593997264,0.5873367827885083,0.5615564715664186,0.5707561662910786,0.5851120099243574,0.5605842055883449 diff --git a/Experimentos/inicializacion-pesos-red-neuronal/resultados/2_air_self_noise/tiempos.csv b/Experimentos/inicializacion-pesos-red-neuronal/resultados/2_air_self_noise/tiempos.csv new file mode 100644 index 0000000..506410b --- /dev/null +++ b/Experimentos/inicializacion-pesos-red-neuronal/resultados/2_air_self_noise/tiempos.csv @@ -0,0 +1,3 @@ +Método,Tiempo 1,Tiempo 2,Tiempo 3,Tiempo 4,Tiempo 5,Tiempo 6,Tiempo 7,Tiempo 8,Tiempo 9,Tiempo 10,Tiempo 11,Tiempo 12,Tiempo 13,Tiempo 14,Tiempo 15 +Algoritmo inicialización,0.280130667,0.031966917,0.029628,0.029863333,0.030343125,0.028553916,0.03003475,0.029669458,0.029901208,0.030641167,0.031136792,0.037132541,0.031221875,0.030699292,0.031155541 +Aleatorio y Backpropagation,5.366532833,5.172576834,5.177351333999999,5.186061585,5.173411708,5.177390875,5.1838067500000005,5.1901663749999996,4.33286925,5.211625875,5.234351875,5.2140365829999995,5.210080457,5.2404547909999994,5.231090040999999 diff --git a/Memoria/capitulos/4-Actualizacion_redes_neuronales/aprendizaje.tex b/Memoria/capitulos/4-Actualizacion_redes_neuronales/aprendizaje.tex index fab5a65..907d854 100644 --- a/Memoria/capitulos/4-Actualizacion_redes_neuronales/aprendizaje.tex +++ b/Memoria/capitulos/4-Actualizacion_redes_neuronales/aprendizaje.tex @@ -69,7 +69,7 @@ \subsection{Método de gradiente descendente y \textit{backpropagation}} \label{ Donde $h_n$ es una sucesión cuyos términos convergen a un mínimo local. \subsubsection*{Observaciones sobre el algoritmo } - +\label{ch05:gradiente-descentente} \begin{itemize} \item El algoritmo solo encuentra óptimos locales con una dependencia crucial del valor de inicio. \item La convergencia no es segura en un tiempo finito y requiere de criterios de parada. diff --git a/Memoria/capitulos/5-Estudio_experimental/3_algoritmo-inicializacion-pesos.tex b/Memoria/capitulos/5-Estudio_experimental/3_algoritmo-inicializacion-pesos.tex index 3b632f9..5388df6 100644 --- a/Memoria/capitulos/5-Estudio_experimental/3_algoritmo-inicializacion-pesos.tex +++ b/Memoria/capitulos/5-Estudio_experimental/3_algoritmo-inicializacion-pesos.tex @@ -55,7 +55,9 @@ \subsection{Descripción experimento} \end{itemize} % Paso 2: Evaluación del error -\item Con los datos de entrenamiento $D_i$ y el algoritmo de aprendizaje de \textit{Backpropagation}se entrenará la neuronal inicializada aleatoriamente hasta que iguale o supere el error $\varepsilon_i$. Se medirá el tiempo que necesita para ello $t_b$. +\item Con los datos de entrenamiento $D_i$ y el algoritmo de aprendizaje de \textit{Backpropagation}se entrenará la neuronal inicializada aleatoriamente hasta que iguale o supere el error $\varepsilon_i$. Además puesto que puede darse el caso de quedar estancados en un mínimo local o que oscile entorno a un mínimo (ver propiedades del gradiente descendente \ref{ch05:gradiente-descentente}) +superior al error encontrado con el algoritmo de inicialización de pesos, se ha añadido también como criterio de parada el que error se estanque o empeore durante 5 iteraciones consecutivas. +Se medirá el tiempo que necesita hasta su fin $t_b$ y el error en entrenamiento y test. Los tiempos $t_i$ y $t_b$ serán los que compararemos. \end{enumerate} diff --git a/Memoria/img/7-algoritmo-inicializar-pesos/experimento/grafico-bigotes-error_entrenamiento.png b/Memoria/img/7-algoritmo-inicializar-pesos/experimento/grafico-bigotes-error_entrenamiento.png new file mode 100644 index 0000000000000000000000000000000000000000..92403c44432346363c451080e530ad5dcd3cbd04 GIT binary patch literal 28647 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
  • 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

    hN1| z3>u}0$`G_emI^Feyy=Y&MK*V^x-J7Zc0%ky2aK9YpKAJq53&AnY)X^*ETG-Cu)gQi zoILyy*s~E~@q}>FpFm_5IuM_8F^Yv)p9Bk@L(CfHp(*z39}71u$k$R&G4s}YdUF4u zkruqNQ$|L3sN}yIcc7m%JNthe1T?+ISsTEN*402?GX@R$`eQS!oVX!30WGK>>Mzu0 zV`?~~%%C>(ZUT60V5!)xIZU9h0(0MguUQ8)3BBM1JgMebi0nXh8r=Og9eNtXI9d56 z+yDU70k%H{o{`%LXf3cCsf_spbqxjnQhmIB;kS$w!H(mtz_UcL;;>Tk`>b$tb93F2 z4s(V*JI+y0bC0ILKW`cCZYO@?HZA_>DD%mbaAMFu2%?kVClOD*>xNgJa=Pz1V%PyZ zx^7S-eKBb3^euuQE44(k!vG%m`F1TW0z8^noubYsvx+l0BV`ZgtJu3r16|eqAQ9Ag zvB(}7&hfBXDbPzDSA^5HjtNbWD9lnTd$`y$USSkV4qf1Xy8ytT%ThtQ>^dxAUMcj4 zSqfL0odCg8=MLz0NuN3Y)0nW#RG>8@bWpVu)O4Htw`W}vWqkSnS9|9b)kM4Qaiu6# zX@V5#2uO)kr9&uEr56DckX|D#geHgu1gRoL5s)H63;}5Zq4yG+6ltON4xzU_eEZvH zpNoBSF3#OvYgR6@Chugu^UPbG=l}oBIXUmli}e5Gjw&F-)G%rOrlFn1fJeYvsSrx zyx(6-=D$9;fxP5=iz0g)0iYq*PZW#;j8Keo0wS`PmjGh>(jZ2eb@Hq|Vz08mUlmYF zKA1B8n?chZ+v@{(byU?<__Pwc_`5sPZF@umE)8Ndn##uOz(2JM&E{T=QFfR!PTvH-^&A!n}i`IvC|ugEuND zK%yxG@{kIpL1cpAbZBsJaW;cIfCc9S3Hnt+WevA_@hzX&=D9;X$H{j!Kq z+5ifFolT)*!E@hB)+~M0s?46lrBg5I`$$IA-_RVL-P_ZFGYRDkdA8f&d;kY%xX>J& z_Qq>{0GM8;FSqp`pca7SvMYaTc}er^+LiA`xlqTvxXpO@EGfF*F=F$`=bTe&f*rde#vdgkJ%&uItg<( zHn*kQPfr)0e42hp4J6Di!_c}47)g9u8+(vCkpU8bo!nR$YCb_DyQd8lH(6!AD%m(l z*AE0b8&wUdfp>~_9*di-JVvv^>Gs~ccgDL|Ph$w`;$z4;leFz^4}4O;3BFE=R| z`@vSW(F=%B^A@M_A~t%pfqIx}F&w=FkZ1DEw>JyVj=wWVJnLt17^yG2Q!BH0XvfHF$A<#>+(Ez5gXK~57rSe_Nd+cA!C6Z8 z)9ksE%yd!9>cma?-+<^l8_2LpwZdQI7ws&x=WLwuE~AR%=olF}b`xNG$FMI_9|fL* zdt~9YE5ilL332zgUKF~bx@f|ZWJ-Gh?@KAX@!*|i_20ChOCXxzY9mWCsB0 z0*}w4{F3{8VY&a0)27RE?yAqs9RDRA;}SYlbGXuaScJ{^20Byg>aEmKcqmaCaQgDX zWfRj_%vW~*h45V~C4aEKo??OK2WM_|7$-YbgrbTjx1u_G$UsPfI(vfND{7_K$g7zo z1{8c>NkYkPz9#qQ&r}~|=YvP!PB38(Np|fAK_zPoD>4`LF2U7W@&2zFZMj z{m1D?N-JgW679TNohProDk6oo<-IRHmN{0{_I9`HaBKnRZdqu9fX7VO@75D@cY#6 zyfS6o6vHT2myR$%zfi4-io=YQ=|Q@N(bjj;6Zd-tI*+d^l5;B(j6_@^M!&)qE$%k< z^K+V%p|t6mCX^0cp8?jtuH1~cd`AFRX+$@%)^JC* zX`*`h4W0S+Rsr>ux4Lu1gpcOdhg&SU^h7vpeunlI=$HO*9Xm>ic-kaTwkc)4pN%zy zQ#IZEh=GzVbaH(z%S9#=+l130-H>h4fpf14?_kdc9$c}1k6XK=Th=UdZ z*Hiya9 zyPx)Ft@af6G18?L2Opn!oMl6v+kK&kpSiAy0&H-vU0-C?L1NE7iP3)Fni+=*Dyo*1DzaM;gJfl| z-(WNDVE~ic*PKTS2KgjB#-|aX_1RPu)&HoIuKv-kln>zPrVl;beFg1YE>>te<;mLt zJ9;@yW~Q}(l{2h%O6idyCyuT1q-^3(hH|;TJA(bbbw0nPL}dUUqQXWdR;Tk6HQ#`5 zBDEQDTFP^}8k+jkG4LXC2%^grJt=Icrn&@65h>p`` zAVk<7WR|?oEcM$`am24|T||??y-#j*Wro+I-t)++oo>Rfkin+ND9@6S`UvgsS%ip+ zAx%2gHRP?ckKC3gPun;d0sa2w|?tdW+B2Uqfn2V6%ZAEKnx;qVVUwL8d=}XgCcb(c6+9 z7(&!vSD@w3(WLwM^CmQUxKWa`Oq){4A-um1d?b#y-fQT@G0`EX-VD<=-y>QrUqwH= zHMY60(JilJ88h{z*zsc>mm3K##y6;7tUuk&JOg41+h12-XN3U2QA7<(n)l;0dv8Nm zOOxBe)Zp=wSZAnlj`3DQ*076uXv752J0_q(7g#}JbMYfGSyLR*W{$#ntb5;fC05=? zo6QUSdhw1mS)_-JNquA!HzFmf{myWmP4xYbuls@u zs4=UOLH9_}H9k5tS;|kvw7N24nz3fK?swQ^QaIEl17Z3Y{}vRcH@zRgr8L^TX9nNa z$nm`C=LW5s+8cZz#>_kzE(|EpOTdG0>8upj2sv)7nUl;1yNvIpYX{HyTv?Cws+ArCb zb4h5}xKP%U!?g8^ai2z_-Mp)&R9VK$zMN>sWE6e;bYB|W$Ph@1o11sKH#3zd()O}A`ZRhp2)^P| zjOl%w`6yZ?$r?GGLaI^*mKbB+?DP`<{BKs4elk+rV)f)8_Y3`E?w~VSCt68^w0t(( zyAB+Qw;>)RxONS#`Ns7C+j(Y>6f#KD0ys4|=#*LGF^f|gvF9Rf%VU7djT?6~T|F{_|=t=h>*kFQ&!GnLtI1adszh%)tC zX*W>)svqn?B0{bse*bj3CmKi!;jYEAq-NmQU8^~#d7u3$L4uhuq!8#nENM#BQb<;v zWL=SEyBklqvx~0HV;ClJs=IhYnfjgeAtF33`K_A;H1y!rOa@Z>0u zAzy8mgwn#%GPkm2v|;rvg@<+xRly$vwT7-&&5@3dKGXR=WW zx}RsVZGE({CWT%fs}9B(p-;mxy?GU<$E%w=NA+C(8{1LuDNp)*!r9U!?;4O@r=w~* z;KX0yMR~@xcxda}F`GmKTOu9@80#70)8NQQi;f1*EC`n+s+q+r3 zpxDzRPvn$pD9^DJjj)Ay0e`M&w`1mAn&J1^5`qaHlpPrUS6IY(9|-=@o-(c1)(Bxv zEf8h4(j|+jX_3SUrLFA3FVs@uj_S%fcnT5F)9YD zRW#GAX``-eGe6uoDDhj;;>&#$q_$$0lc;z&hig<5FH(cVx@lm#?JlN?qpmRL2)kSy zN=sg7e9>djJl}J1&hNX>mDkS4M|Bg?msKZ2Q53R8LZ=%#{GHk2D6TPgnJE0H*E$R1 zeQEuki{_LJJ~%L(2_uB2qxS74qs8ypSHAG(IIW-$?Sg9$gg;dic_#M&BVkN-eU4$Z z6xgkW+BA=%7Q9+wmiSc(cC@OtIyGFR&f}Cf?*Mg0YZ7MpQMVUM_2z6ULoG3IByXMz zo=68@OwUckG0U2A@$l*uVqQUZQp&HK;oHqkQLn**YI@JXbuJ&Sw=b+O+fN(@Bk&vv zefxY5QwZO=^HE_;h7PAl)<$~l;2AFV???q}BwZ)${C6q1)MjX+XSF7Mm+nDG2pJW` zM&{lWUgr*;fQt9JoHP*1`ga7%eI-n@Nj>z)vS}QB)C*~B?U6X4-LP5c460_ebKuT8 zmWBuxdm)$y^MubDMjbT-u$8eUY@vKhD%bD;Y}Om z(g3f?2Mo>Zu~zf731jxm#|eNqqAj-V@uyyUwn(+=nnS<*p5ZfQ2qg8IVYxj|P%z5; zA*2z5iIQqMvU$(dM3@Qa&4+w*$|c2U$WbB~D$MQ3A+N8+w(S2iygsmyX#M#4C7*=6 zYNQu$5ekwQ$mmr?YdS-&zZJqEb7n7Z5wMX9<<70G9rszp2KlX-tV2QmP1DmV#7(32 zi4?E>>#o+$_XKS2nXK+fBjR729+`?QcfAnlCa8J79UnoeOWbZ^_KU79Y4IE5WMbHn zLLSj0I7c=SbWSXKM$~=6;v`fIv$DkYmSNxIsSD>Fpm@37{T1f9FW_Gr<>HANlT9cpgCyOs~mp?;59-qKa(s=@>Y@Ch3|2o zqof-Xj-E7`sF3{Sq2X&$+g9%HUGM<+oFn%fc|@j18loWeypo&{B!C$Z1lr=BBDzWj z;pLlrO^LYXyM{wg-?&P=s|ko;@D!T#z!bKoe1${GLSX_a@^g6B!{@kr`z3Rr=P$jN znDS;kY9K5&Y?fE7si#Lb=0)RnK}e)sd<&-2{(`+5I)-@l%J`h4heUFUT!$8mg@<9dEiTa|&HjsD1yBMfSH z@8}*mLV-PU&KzF)*Y#P)XtB|pNa=|G_#L>x$^W^*|IESv>;qcv z{~vRp7NPUt5#L`Y?$uS)Q41@>Q#3Lx;LrQfY4q=4}-W6&8$9+=J zEj4gInfOQf!vdTnUctGnLh$v@3nKW@>{EaUhiaBp?^sMdv{(N%f>-Ac}o#ys`K?w z=~VA*x|xEG+cdnAwMcaN`lMU);rr*+JhhS^gmyXykNf8vAjr1E_p}z_8qQ_a4dd~s z8pHuz`>Ay0Qx{S`Of2X3KbRUP6}NF-<+8bM4_hoKefeJSl}N(AockyGFX$A!?*1() zbO0T;I<4sj2UvlXlu${^WpTBU%+g;)&WeCOf*C0W|(a(Pw9pVse(WC?t5>V92U zq)At0zxuK*4cF8^2G9L~bQ!)!b0C*H`F3WpVGPa8@G{-@>%e?u<;LQ2rR}!N^Ro%D z0V1Z+{S7(|g`$+wg{v(rr>}Yt9^*}#?DBGB=HBDR_p=k~8G2fIE#hQvX=FO7bulcp za~|xU-mA1}YCSoZm`M`d?`=W54-c&@}T|U3JNFd9hJL)wZ`oNnX({rZ(b} zhij4r(s-`2{SDZ33rn5ve0hB5dGkHo>JT~P;Av<0VTx1GJ=Pn3*@;D>U^;0hv*yMh zv6bKoiy9M8PRjzcxf zw5E5bznnI!)oyQ)biQM^=|ZEQZ;rI;cq8x)wYeLvA?>>IOnuy7U`lb^bZ}??W_F;T zyP(F*#P*G9VM>hgB&;b>R_2DcR^bx^UtG6J)2Jexv$m~neD@9BaXVKoX`@;_;Yx8< zo(TVJNX&ZL!*yf4n`*C#9#E?8`u$g|(r;9;rd&FD&%!DtN! z>$cbw&9#j-ArQO^1mAx8dcO7K5EN{f!{6JnSe}uyCjrrDNVu9*xm$q~d?lGzRcd8$ zZT6aR-iTBSzC_uSc;KRwzn?;5|7A#6Y#27SFrwc?lFyc;);7TLbM>bxJD?E=iQ@O$ zRh%{Z%ZZ!G@+k@9s+!3B(WbqE+sE9CzOBL0a)~U9&!VHya-GNzD&jNfH+~Ucf3ozA z6O-}P2Kp8yE6Ea@95eQBY$FumLg_e)Ub@?~^aYCU(w7Y|&*xS&J)by>5DH%O-kee^>e1jq7X+(ulE zgM_hFWk5l6mC;;mM?8x7YjU(=Sx1Yr7snRyd1EEn>~h8GaHb+TBt+ogX0{2A=Z4QC zuDJR=gX$YMtt9#wp(qnUp*_%RzAv!fBYoip)`gu#@Ku}139*AtvqImC8e-NHrj_<# z{tW54*U$@#?*o><7kVLJPF?DImBG0ziA9qBrarNPxz^;2UP+nYo)1ZprppBEMk{Sl z)pP*7$TOpT{Qf8Z$-tphmJ-tG9;*}|kKUZ)_X|#kSJ_TeGbCLn(q}M^8+OrqI!HR! zwEHg2tCB|<11il2{e!A(D=%S?8m0RwdCHyNYZnv7@e@`11OqB&_XFubO-dCUA=hfE z_{jOSF?q%d_sJ@<#i59rR-WxCOi1Ng-grL-aXjfum2p$`R$x})yc%{k2 z_Tvtf4#QTRtHDES5eqd7Max9(zHfT7>%_?{1HG7xTj*;+ZAE=T-HUN5Fy^b>PvFc0 zGL?bajQe@T5Z36yOH*u zwUP-J#^b4(KQ)e3caR_ZdtS(u^H6RItXd8GNZ_1!vY?|rvG+TYwL}&jb88s6XBMIs zBd>qaU;?(|H!Eyv6aFiu`yhtZH|rcRc%K{^op#H~>Qw?eUcbU0|0wR9_=-xCeh6vX zt7=K~!F$$ThfbLbrg=I^U+Vs}iwkvx)6ew0OUJY>Sa+7=e2#Y#x-T}E=|u@{A~uuY zo9N+?>ix$a6<+I2Ph3o-wI>I~c2;WI1K@*VE6LM4W#VV;eiY}#Yvz`|Oum&}BsgN+ zyS?`6w+Ad_(BBCG>)Ebgol6hPH3_j0HEg^kb)(!&W|Z9I5#VQs3t)cv<`jrddGt3g zu6WPMn#g#Q@XRs$_2g!%cOJ7M_Iqtvmiw%?X6P|=s5E4O4Z38E!&lyTD^5id`Hms7 z?ZeYy$GGcO49mj=dhBMbkR94U#Z0tATYUnCpwpa-K8dx4Z>1MvjE0$U8b);ZjFDzU zmK&o({S&$fQA5js6N#2Au$!6iRJ#ixW?#3fh9$zMGQ-ypk?vaQMfT`-b%@ERlh~}h zpkkH`m!92kL1>nlIoE}fTg;Z@wwsv_4>H-$g1>}YSNOZ^yPH>+Bz8D5&r9wG2?>pI z_+}kU@6IHgC+*fdb~LjyI7i=*@>?igoyD;%Z`DgOb`Gwc^P2p`JKdckP8jc`#d@cI zs=NT@)0ogv%H?_SS+Xn1o1mKLKK<4DVlw`VT1A50%vVYM-%G<5$B=9Lnka1T1Cf_) z4<`2>^_{F*lu{Qpq{6jZB)w5CW{x|396OUSlo7Bc>|`eX#bodX5qHsXr=-EYH&_9S z+FW@(MMqdJXqNH(aVw~5D?m6XzfJ69LqG4xqz~m>Z#Vh4*lrjaqNY0$Vztr5#OB3} z1BTyzXewmJTfK__W10sXt*03a?`W#5rc%Mos4(7L(+=}=culd;mt$PqTyIHMX%Kg> zMmiX1__V}_J16$7BiNbMr&mVjrh+LF6(7TzRSrL-#eRr zcA0G}7Yj4c9UH^eR`44&G5|H_75jwZ8ywu z5`+$GI9E}=OVc>dT0*!4&Yu6gFXMs7r=bYPXgl#d^`s7Lv(H{@6jg_~SsF~_H$&hW z%cAlp7oVk`t;mGprqs_PEe`t>Z+Jaa$n(7;Y?!W~R%4PlKk}5X(}BFI+TszEq@DH% zs2;kQ?>0TEHk9!qq4-(igqjQ&R}3e;8L`#@3gI#?705>~{F1nD`HpZnJrGkd-HECh zi}S1cEl!BE%gPJBT9KS0>2oqp5NR}HRWU~jGjrY_qxYT}(DA5pHqjuN6*}yV^Q|N& z)FOj_+Zn=1JSw&A(MY${>kiM!9&4*Z>Ej3GpDfppFG$iLD@@Bi9aP^)-1|s}4_V_7 z9j0s?_|Re!K3Wyf#8$bKml)uSi>L1MUJECHT54SCHLrxbJSRbFMJH~VRYWJ?yWZLVB z%0GP=v<*(8`(uNNKu9`ANjc7&u0o{7Vp)`6$2KD-)L=c1kvi70E|5zuW6p!m*J>M# z<}zr1aBRr=s7I+VL5{sV4QPr{DzS!*Y{QhmoV9zVA}pI>3P^OnYB;F6sM`|=k93n6 z^|Q57TB~?n+ao&2_;{`dBF|C+aIyy+G6kuF6~-dr{F`Ev!mA5#;u!v?T*lD$Ta%1} zHb>akbm5BO?lt5GUt?<_t96Y)HR0jWpyzQm`xLI*zm7Qsyci52Es5=TC@J;j4cx5S zTOqDdAsZ`aFtw@;wA@TbDCQFyGJYCl50|UhX>-O^*{7_HpEEmMUm~j?#WME!)uY{8 z+ZGR627MM`kOh!*F6Rqb_3K5j#_t`5Xr6Z^# zr)V#X!7m1cyn1Ws^j3)k?gU|-Ji3wq2SY}+9*=K+UmfAsRl_dGxV3I48-=^`dTH#B zd=q#aaB3yx2r8j@vF4lV7h3KKF;y#3SVY`N*OFR=C&>xWFVoeQR(P0~tPxXf>EC9}jYOKHek~%z7 z=a@)p&OE)GBY8IxM24(8s8Eu%Je_;Ae{@2dH73a8zp|`BP|H{FoMoDI3%H7W|ZkiI(qh zS`ueuf|Q$k0B{^X35LBqzkQ%}pTE5OU^9#I0a%45=#@K`sR4m?2M}1psCDZJEyJ0m z%U&}>A~NV5EQ@c`&ZOZY<*}Mke~mXoQ@E6C$hyoEti9g?VV%yz+O>0JvSj`GPm9f= z@;!my5?r&_%@RA#oK1eyCcA$En$O>A$|x|OTt_J|E~5>szT$G@m(O>tGrX@U|C!qVWXyfA6c6KO@I66%zI$^8vv-UnbD@h zj{h1!pG~6?01(@L>qnnG@<1SlddzHt^ZOcRy{D@?S1@SXQ-Cd-T{5$Br-o8c|2l@; zbKC{Vw<3Wy)WQpn@~@Refx-#^nx@`OhrFDdr8G(t4OzM#xbwfCE)}`f!*0!rJm^J* zsp@Z6e-iLs`+1YumkyhrsuK$$VelF5mF=_R0;rnq@2muQ*>l3NIt~PvzRdaM&+NWg znVC02=Fjvd-j2r`aESeCwg)Xsx~f&Es2PQw#>9+dAKae8x*4_%UR? z-E-|xti9n5rcln?B~{IW!X?iz-4I>Kh>%A#1gAjdIj*D4csfM_msrzoa!evb&GwHY zO9P>}x;IZ3(Wc?f5!a8c$?RblX8C!T-FMgDnOuL-jrYNYrfBAB-EDs5`Z7V z+nBK;KMkTWXRZk5Mxh;E-u9O&s4L~tqKBJVd+nv6PAo7BZ; zO3Dp(aW+|)2epNR7XBtqqD3FTwYGbm#ep?W_uK3vjX!2c*yPZ&e9ihbSe~yPr3zIO zc#nxQK{py}Zr|?ZyJ-zjO)tP~H8UN(u#~Gc-Xi#(J(hOgUkS<3b{eqEZNqys5-|DQuUHG$zmEdU)p!;?WPYr*K&f8Hw2moG@V=2l<47)` zPT-po4Eo$I+EK~dW%M)MIXx~u-%HGb4a11rLT2e4{w1wh?TMoL!t8`s#)_%1y1ac4 zLxG0K4BDV7;#ru3dCgJ7% z=#}E%)MEk5g6R6?t9Id?F>+fYg?ZX!)#3oHuM&G#9$b&vm-f^r1w;}4_{bm-oSLrU z4=a>9X4fY|+U@&ln|}j6H1|&5c9Oxk z)~hBG;dXnRYzo0;tl-q!bGCiGZqoigV$+>^G%z(z`Q^Nkf+1t6(g91E08TBMuLlKKhli?Gs-Fq@korP$+6s?c0GZJ_`c@FImzxxo@C0Q{tH8r1VsX z`k-L9Qa^kD%K{pfz3EVRe>!+^)|$n0aU;V5t*t8WyU;1MSK}R^#W4bp88PcJ$iL$R?(X6GXfcWW4fBdF^bDJ3Qep;|8*Iii2xbzU?K_F{8DH1G6%UMK zb3RfL=9<}A{a_zO#ZjA!PW8o2XObKMtBDBN5?lLNydCi45=5wq#$2I1N=2a%s&jnD zn<=&Q)A0LEThc(4q0X)CWqDG{ciU>A;sf8>4p;oxaHYGlRf^zVrPUuh) zQqX4Xh&@~^*?l9n_d$I-J?64m@k+X!2a=KKoJU4AIuIWc}$Ke6F$6qN;Vs5@1!zC@^$)yBl`nt1(HL-w(pE(jw&E zmd!Z58iI(?rfO5q!Iw|3rQLs7K1OX;KdPB~Z{mc;TU0oGdSHCIiPFD)?Z{g(2G3%IRp5TxNtrh~3}#3&8xnx`Xs`gSjX_ zWz5RPukT-nE}2(rVu#n@iy|z)(SY3Q56FFkbTE+_YfgF4G`G4SzvlaxBpG5Ss#xu? zxNWdzK|NN*Ufr>K%&xE8jetaWBsD$xd;;6|w5fzJ0sI`0)g04si+>v3(yg zSPiF~n*c0k?J9t6OiUENCds7h13}?FldB>y`-R&?d*@2z-{6hl9hQjlS*7VHj?=0z zt8y%OB)#74Cj6jr%%lMJu-x+Z?S)l)*(8gvoyc*H!3rakfAp7YJ6G|K>G z0cTpSO*tO;#eZ^fI4z(!Zu(L9YCRz66wI37@^AZYuq!OV^3ONHZNu!kS?uk(DMnNC(F;(p@}ZFwYLzxUjXPpCtQvMhwB+itSV6eKDG8%C}OzbZ$AG z+QTGtP~zc+Z?bID&Pk5ybV&$^6&Li4S{WGdcbV8X6rXMAU#rL?rn)}V*1jI#uJu83GU#{SLGV_W(TOFzy0Xi+B0zPnlk(oO#EXUr z{qzp5O0Uv&q-Y#mFyHO8LQ>txGf(WGLNc%7SZjI`q^{x6;|IuX4?`#x1hLAJErQDI zB35U*-s^rjju5$!jJ`BOMN61T7T zO0H1KXA$(?uTc^77k>L{+0>hU1nHpWCpB{&yFL}?Btym?sApVTB7WCA{}StuCwEWI zNO@ofraN8>oP=3pY;0|}jjZZYj`2;Th(8)`(wD?DfB9u28?c}0_32Jv!dAz}`HFMJ z=u3Q;`8~lgPWA}yPHiy1uoyQW-ZTAWHX(ME`J?5he|P~#s>ZRg@e)pK#10SZm?c9* zujl~1)tC6jKiVIzcc-xU^exYwTX9|raBsber)0@G0$?NY?b`Elu%luifb;`^ zV!j&wvF%D%_u*6dn<*B3NL#!PP`~)ry0=lDUuq&GVI&PLKWj{dF}^8FU(~ejv>gd8 zA+%~8@N`rJy5EuqBvCaVP~FV=Sflrm9ksc-YbUU9r*-=`S6N)7Y;vnFAfNn`8 zO^9By#yQWddv40%R$A>mbtVU}(JT6w)Ha7meAPDwoIcySTt7}_IRT5%OL2kM01bf+ zA9Q2IplpooD4k!`&|Q5P{(&3I|jP^qsbw)?d21?hUoCURMjX?1b)`PkcJ z_Ra-o{oJbs0+-A)cvq-@egA%)>IW@&iL@ri2J0?FP8`<>Z`g;R&sSK49w?Y1+V*FB z))}nBB|T=YFV+)|txf9!Wk>%tV%1n)0u+%<#FCBD+e+edW2-rEw5~F-(VRl0iS^KT z@{NUih0pNi&Z(6Q1qJG{0xtCTJhMP%hvSb2yHj}e5`l)ti6MMojf|DJjLyu=_5$h- zK%VQr`-2VUAWq8wbI`g?*qG$uKLnO#+AL7j66dww3qOcD0)y07+5uf|je({Eif;g) zqC}Wpp(J^Qu%ZPRWJ9jKh_~U}*}_8Qumv}j$+vN41)BkVy~g5dICB#|N{+ZJLr zLlqS0EIVSay&F=p0GqA>8ta@aRz^OhaDDz@k1N)mp}xqjq0o7AWo+cjITLc91;DU? zacrC4dy1~_uWP#=RO4SR_SAYJ2NtY!=+k*4+#LVZ^6hVcnVD(7HV6FfWq}uusml&Y z^hf?q?R8z+Rj!)5WdtD4JxIRpR#L5Wo;tbs)EAx2xPe`QdRzy%`Ky9oO#_Ux*5!5=di^0tCDTE^HJ-zgfRgrE7EAk>vGc+Kp2KOh3*U>FNnSJ6m8{y=)owy0e0iG?^`LW4-k>B&i?T8l+dNX6`vK$j}(DTyoTT(p0(^p;yg)w7qf#ss*tWfULU^ z;O{IC(Q(A!iukk88G`aCL#X0AI@-(kq5Ek4(4Ulmv}aTzc$pc<;{lC^B#y8XfNrAz zZgYg~MDk;WOVG=TG+hP{JwhSC#J!SxBubTOebKegKuG-{|<^twud*9{H5Ghua> z+nnntf_m&B^DK~gPuebgUy5JvnaU&oSxYNc090Gg&27Gw4R#4V_Omh1eJsJUB$fW< z!#M+9=iN&xk^;9IbO+}>{wu1!XF;_6u`qcdF4l5tI6TH^*!a*mxeGw*CwXZLo@(K+6T;m)eSO>N_&FR3MFA zGw*120N#m6d*Gwc?xkPGoyaKORc{ziDFNbhg@GRrX6){R7k>?d>Dk3s7lTZ0fuqbv zQGEhy&A6N%6k-pm%CjDi0(@OKBN-4r1zs@^x1GtBRwr=H@zg1r2FcH%UGnA#f{nuN zhV5|*y5j?4EBglm45tJQb3dqPndZki)O^skOO!g$OUnA%DR6RT+qTCf?%I7LD-D*u zB#&8q!@->#opYJDKC3k3Ma8?|)OyS&2r*Bzcd5U>`H-g%+W ztV&UR5}Ph|X~kdtjXQMcC%|c^?l$Vv+X3r1*y38QtoXihpna@tzDyyyN8UKSCPdtOEIg?XG!I(B`zzZKU4^}b9pCj{!9syfVN zH&wvaNPM5oqsToWv9dJOV8&pwSwYK*-8?ycqPq|`zLyOs*?C~;hCGcQ`!S91G390{f9tQSPZ_3&^(|Pd> zv`;8#v8e0xl}ABXElmKq8#$%y5Qb=Wnh5$ixM6RCNv=v}UxR1~xYKv7incp*fO@*{ zUUkCj^Yvaj=&5zbf7{8pE`_kZ$KHLRdRllXF~ocsK0*^)3$r)qf*PS8!QUSKTvFthQWbnVwY&o zNYtDlU%zsgtrVeD`&cnIGWyirb&fHO1Rk%sWs5ov)&dGY4*@`HMb8I%sse8|yRJ0A zMzp@BU@g2J2`V&OP?S+DS1l4*SpDD+S(PqSm|hgnr5ek=;>HNYe+5mD($|h2-J$(V zj|C7URw~+YnkEe5d(g-xoRf}(FniugaZ+M!ai-(QPcr7aNFo8%K5<>c|=I zA``A5yw>N39*{E%Vr_$F1}be3>%dqhRHRX~P1pmDB*TcYtf^b|LAWzTj8tQHjBBB# zR+xY^K|KmE;>&drL@ra&ou^#rK1C9;FiXWN+-CA6xz4)C;sdd_GA= zEaQ&zVChq#mEgunnFcA>7iYD%HapyU3;`lBK}gbK_s?4`Kq>kcs1B<(|MYB6oPNgQ z3l+b>^!fJkD}KWd#Eq?gLQ<08ra%Wk0Kf?3*m)xL+3Onw0d88Fhi>f z;-*w+sPM5z$Hq+SHy3{vR2Znr?fw)`t9MmHr}V$Tmw{X_05k)(O=p`No!PW=-#WLN zGJ=0=6${f^%e%yDK3o_^`*F-kMH202usX01U9)hTj$&ZU0&kUTRzwW3Xt4D8^OX)~ zwjGWv)`M)MMpj7)Qy&iZIMdx|g`vu>KYw)Hw>ukX2jI;l&M_05f8kPJOrhUi-Xk(8 zQcI@4WcG@asi>l{ScG5B_&3u@G@-Qq#o6|};TNNis%%Ka;W(HEp99M#2pLnAzyC83 zlh4}^5{>?=zX6p^|FiqGXhDrT7X|GfV{jX-+Rel0Pg0b zPhutr>fphE=7mOMSWuCN9!57YVYc%>;X0h%X-2$#QR0EHwT1IZYzse*SSclBS~CK# zegar~lJpNiSmNJjyFvl)H3)dBCxz17^A#S?g55W&TqH4u> zYnFf2&OO5km)+&>JIlL z3v#V*tApV1^-nG2gpOPU%H@?zJ?3y5+^_SuDKHjK-$X+Ll>;bi`(^SArn^-NnX@Y@ zDoFgtkZ8pFntS`V+~kH{Eu5uNI0|6id8%Y^HSK^VSjCE?S+$D7uWTn8+<4T_T|>SI z`x(1epKC!i_HO^eyEP~ay#O;W@M!8H)$S!wJ8*8#erWA}Pz*B*W_Qp~@)VL3W}i)T zVxU4cb;=4tMWQ1VrO7Kjf4G^!sjFYVfMGy{+ykQPm5}sQfP0*-Ci8Rc#q{Rs%+g+? z!0|&S)(0A~f1avF+i^gR$$$1dq!&Jbtu~c?=2<9_3T!n}{YIhM&e3gi$0vZjK9zU$ z*y@b#P^BG~aNX=INaQ&ZUJ&er(5AEn$GoyDv|=3tw;6?^USXE|A|cR9r?(vQy11Bk;tp$GPY zPHn*nls+_Q(BMD-hK2&IilKtS=97%fzNG8wm503>R{>@-kD@^c%_$-=FB|o(D-_ zh$i#XkLj>T>RexFKcT>=X-*27x)*~@JS_Jpmf$opSv`fVoEeZ(Z2PPF0fmef#pxPu zCTffj92ELNK=-H3)(5d%%MRro7%j};%>f&F z3HH<<5HuFeLhMz!A>v1kYV4;b>k_mnn687LXO8~Aryc%pisREIm&8^JwbP_rg3j}3 zCCAo8BoKDxVsAj>EKLJj$6HAyEX)YJ-`_4go1R;~%NN>N)8Q#iJ8Jwo8GS-g_JzO( zy%QxYD5%bCEsO`0XR*Z3&UCm1jkoSrIqzwwzGvT#-ymnP3}FMYVJ9OQ&{ftASQmPP0%G3!!)%g4ENFZ*VS`~T{qh&1!B0}`eEh;yiQ z%zS}+%{k(nU54$KA>4N0*b0?l`Z@H_J7id%u@m3Qw$)rd)Pv*t61;?{lA7vc1@IF8 zhnjou_Kkn)k|{ix``zacG+dLLIT`J-SJ_-rs!1bgz)$NRED86c52z?GW-8I@5YsUW zkYk#7{QBoDC>|Rt;?A5c{H9d*Mc1g>`t8{Ho5mg14Mjhc>HjEyr6O=l8lUMYdtS6J zBM2h`qsC$xO-GwuA4ClA3I*LL50RPfNK>jp+yQ7*%v~R132p+8ZZWkio4@NEh$82% znqeB1Y!*P|GYatacw!T0%xhX_okc&>fv#m9SI0*_DtI3RLOHVgDD*CO2-p>eoU}{ zSt2?Ql+abg+umI!)WKSjqr~y_{LZA7{yYuwrh>hH!*^_?=y5nV{uu6UF0%|~R~J0& zPy?W$iuAo_h5HP+EmR0cuH?m%2?=o*M#U0fFaa~xorYk=5cf3Lp0 zY7;i&^|zTsIB~=fkS=RQpFxY2^k4q$xI&R8U{54I%symy<3T7voMewW3FUH#_NMPR zUkEhTwoKzH=OV9Yl8r}1q51wuv^mee3&G1GMrhz-x}RV`CJ#_f$H~}y0DU#aS-HWE z@DG86clzkU+(JBOFz`%2y!Ya;90KGDJ5`wGxeGiX>;hMdDW*wQZN>_l1arfOd zL7yFTv?9nL)>r0fp`b4gf_`^?0WC`Z_+|gAgCJA%EsgK@11kl*@}AtN;ro~6mM1m5 zzM%90efdfytQyLK8&I)fk!s6Jp~BtM%zi?XYRvq+)%G)RB76OQG zP4+7TQfyn^0m7yY_vLrXyPZa70+AjZiOe9aGON6ngKpRerBy=85YyeLW-XKt=BZ|4 z(PYrD{a|v`5V>R7xr1}0hy^7HTfGHQNZjTQVASY{m{yu3K$l&X6Xvjdo4y3m-sxau z{cL?3YJkTBq^2lc6o5I@CJi%{y_f@VSi z+>??f?wXVV_eY)M3BsnD7#R9O(Hbx(8RX1L+X4DhP_I0n#~gs<^D5F1YyL+cysVzH zpb|Hn!i{2CB!F>l0q@}Nvio4vBs+8gAJ_>;Nu>}2?MPY5fPXxcw3P}48Dk^puqd(9 zmB6?IqAQ4kau&)Or=BtUa`{y^fDX7>gVsRb%;`v-A^>$bvH;`oFL(}c`R1P6T|KAQon?!cFSBMn`{7Az{vv3T9V1fS6Q~S9cV35A1Lz6_mu`ut4e?a=_X;xgP%v zm`Dnz-W3d4O4)c>s=L5buf{ z1wlnGAQ^Y@mEh4D5p+YpUnxLvXdnMd{iexfhrVhqe3p|^5MUI9jT`PG3^nh?cRu_- zaz(Y?Mf-miT^y`7p)9yGJyyb~>*=uf*yKk3()k=GM)1LazrG6~`!7pwa3}(P4hWb& ze|e~+#wB*sAJi?2uv|+tG_J5z|M%w{WN1>aPij@BjK@#*=mY>Ef}hQEL+8c~oSQZ^ z0j8rEsBB!0O38BZUaHo%aotv)@Y<&BlZR5k8iQ((a`T7>^ zhh9l&W@l8%pH95cSBas;=04 zj^gMAUzd?*y`cR#7DU|M@F$lS-1a~5f(B)6AhGDpXsV4nD}pL1{=Za73dPOCA)l{0 z?OGeYF>%p$S()*}f~E^3WCs4Ck$~R#o2xqGGTbQ}HPo1879u|fl=;i6>?Ae;&@o5= znek+UYMY<;PO<@tItBvkd&eg=U}>;i}u;3@UCcpFez>nII`iS zJWhj;fwfih!(8~fHdjanf*Ll0PHy2)dOtYI41UIAffU7nBK~j20;ESyGymDEM{5vl zY=HKR5F9Ijbm@iPyH<-Z>!CK28uKR*c4A?us2iTaof;~$egQRd~cun{0hFH{1gKECoiB6bnOjjlml4w<_gJdoAKiA6vjR)hCGq%jPBvFW}qp;J2W z=M$C}IL`5B(OSjj+NqK2Dw0>2LHt!{{zy?Uk226TL|S+(vue%~JNrcc4& ztMKt|i)pgkDKUdjcD+fKT8O%wmip>VdX8tfWL=5)?6tY)+ot$>4`zJfwreV1VEL*L zIoPGH(M$%n&=U7`QNWI``*32Z$`ov$e%4{6f5cfA4Xg-Iv0(`YvI@8BN8*~pq8?AP;z?fi(Hpl#f z<#OOr`v{d(9>)fHCq~M0Y`TCg!NXSsbWgm%BMMZ9pZbfY>#+gfeLm!m8OK)+8JSf>RO zxl#>M>+q-8n9y0O(+t>|uNdGP|6I@$c;XYs{50BOwDp3RNTISBV9f7>eq^JNTOJ#a zIScUyJqJ!iktRf*bRv9iuH(scF1gS+ghS4*F&Ae%zddMbr2$p1B|KfU*fBQc_Crqq zC`P@O271M3p(v;tou(Us%py;v@BQBJhuo7I=403rv!?eU(P{c)4+fcKDIiRi*PWg~ zH@CGmQ*PjDflR>MSpXzld$QD9(2Vh%EKY%uRDE3z#V#8l*``UAthXltAmajZ$Ko2M zv1+6FB&Ve6^15vSsAtgl-d#Tr`;q#zsVD07r%(Bkq}?mop=rnf(-5-J|5Cvn1XQF4 z!5J87bl=XV>xUO&Z0C0<;hDCI%1!q+aP80AQw1#C7mt74p~D`Px_W~i{5h>HfcpxJ zj8RJ55Vho>t!xWAKnf2ud4aLSWSQ)o)5cZEz2-)X#h|q$49k)tC4^_&a(7D z3v!(UR5HJww8loLi2`bgrIXwBjI&({{Hp)9KmzALRcFVDAcdurncvCSoc|)>QeW8_ zapmcz)8hGmo$wSg+ukS>OMMO$owk;2AmGKae2s+X`KCKsWO)`)34G^k4$;rE=8nsd zE~9o5yD_i3icp`>YGl=c4$8-Cpm5q?RX8AB21RvrO4(hR;BB0fnF`sZTY$lv&2H#W zFrK&%5}~S;z=@+6dawmRTSaflsGGcW8IYO*=jg$|aX+{89!8?eFuVeEG1)CBf|QiX z1GY_m-`-=sG$YB()Gby+I#8+f(e?2VjYy6X*b zfwIGy3Gv-tq_^_xp;D`PNQ~>YC!zc3HM}C*B=y9>J*gSyB zMXN2FSAcDypybv)dLZQfH>rzz5W$vuS7pNMM}99q6z1wdQLwzND@~CO0l0s{g=I+X zfISk}j8d8)Y_3_#?3$cK5iz^^(I6iT=mJKt<6%~hq99m~>X`F6?Dy}pNtWteO$I(L z!yRN+mEHVJAU6D>mH3yF0yZ(!&ZE6`0V=l5UI-C-7HQReia@^)80Zg zroc)!1Qq#^562;+EHek<+i)@rx<;+{w9fZS#rJ|hVWU~qr5}S4{sA26qPV@_ZEifpb54y7P;-MOEP1cVA66`& zQEC%@CF^QZi>|2~Hw)Ow**)(dH9S-nFs2*l`AwdOp1ONug_@EXC3#*YN$wCu0XXJQ zc-zYaY&9su(uv^BAyup*0H|H3n&cwBIFF&6(x&<7u1 z$@sDku4Y;Z0|AL~PXD zSB@=f5zQiE>_I>CX^}58KA=vN3%$Yh-){+QzWKmO=wu?H4ZenwSL(YgcNWN(d0nZ7 zfPjqS(@Lfi66fl@35>Cs&UXY{mN)#d*{;a&42no}O#ma&{2uD4yF`7QH# zq1U3kBJ^bu(2)g%(y9-KLMgW#B<&swr2;GIH@yrDOYR7|q;sgBJN;vGEU7t}=T_t; zX$iNg>1cHvY=5-N|JTP==iwSpoC!X|XDB^=Z0#~A>K_2qV!A(QO+J5J zjb*vfl+h5Y2TJ%p0!iKhd^p5^9kt4K;GB0yM`gv=;lS`6_)v;SA^F$$o5n)e9!Z_# z22HL&tP1cfmF@S9^NaWu6+oU}fO+nrD5P3AhQ#Z_L)XADMXu>4*2Es-f-P!jHI>S>N;7bIZg3_C;&<86js%>4>!_1z(J|rp;$4hfQ z5?WNJ!ZiQEh4#FwL)zctIs0u~Rc8T|bj6IiiFmV+2L~bQN>AG31WNAfowJ`F5-!nW zv+g?3hd#ie?RK3AQV4k^Xj;GS&cmd=uh!u=uil`{yYa_jB_FCSU7vxYcac&}^6_o( z9H&u>#FGaew+g>tgMJhO4cD$)l80|wmr?ffig**e4Sh#GU``7^ zrSYQW8Cm5G*AmdgYB)1mUiCzB;g^hHl6_&V%e~J2ilprFIOHJstOv3m^q+zI^opvtS(_co=#T`n7Q1qxQQ(xCkL z&LDN6x(r-AoU?p0t;zM9*XhSmJBhY^blB&o-5@0`v{?&8j9e<99e`YhGkD6I5sU^% zYamZjz)=7t8SZ)uG80mj0g~YvO-9MEHkg0Nm|rNl@E%ZIbFX)n%T3$f^qEt*xL5x5 z37-Ejf`Ut7Huw^g8vLQ1VwTu_Jm3vr{nWJDq44_{m@wHnrZh#;E`mUk%qY3*^(TKA zDFJv2VEmK0jcQ(e_Ar|nI(<6e^vO-!&XY1VKtr;tMCmgYoN%atA# zDDaj-ffvSENsW2}r6Gu;?X&6jP^Vm@0doREJJf)!d7SDO#4~n*{+JfNF5=Ae)L*)i zx}t{hq}EZk7^r+wgvzH?I)zOq=#fh@u13JsV;D(|C;w6MX`9zC_z})>`VGM#&5LOC z?-J;LNI|aJc6Z}s82{p{AAtC|b~JlS5xOzwP2W2<-KMUQ_jC2{w>f&5hfC(q+)9IL z^IMlddZOhC=bm5&7?Q|eMRS)ID2%MM$%pwJ*g+k#K4umuiZBVS>{lPWda9L-Q9Ok) z;ffomKX~_4$K>6nf0Zuy8qw8aaFlyN0D={FJG7sP?>QCvFS#C+5z6PUk7k56?pnsW z&z>NHQmHWa0`)?Xa#oy>szgyH8hmd@BaJ3f7F*!{cj`|8sUJ#c^8c&7uZ*hl+xi6r zX+b)a4r%F-?vN0qOQl2UZd3#b=|+$aX$fW10s_*F0-F-)ElAg0&-Q=bllQ#fppql`8*;>NZA3F zD~i5z;ZlQ)dtEtEUx4m+l>qsh71i1S0MgC3eJj%;w(3tegvvsJVjv}6YlRgllZTgq zS~`*@gEVGu2rw`pp^r7K0titwl3U)+P3Qzy$HCz#XI6;tgL*{I1coe+jW44-tWbbX zT%5kg((jK<2mIzcw}7)$J$?uOcZRne*RWFfA!M!yfozR1-ggREjl}Ry;;qHi2FTVa zO@{#@cu8`8VW9;g6DKYN4vNXZgQ^AqOY_T0o6pst1>#pwLOBsAs05Gt75iD;5Z0g4tpR-<2L>1stc;mY5ty16?Wz{tZ8hdgyt(v6p~^W92|g-CWHw5c;W|%NdPYO z0%z_|D^7s^Je*_@Cv{vRps|;Y_f6MA96R;a4^d`<`{SGlWoih{`%@zVJ<9|=(P^cUgm#M!o9!o)vD~&nXdvX*0%2ty|62%=RIB^yr>B^) zVMvHLR-)q+_?1#}F~(=FfD)1c<+2pIzdRb2>Y2#DK+%PrdE)yolfHbBAMN!SsuASd zDr~w?nPpwR_g0Ly_bbHufPW0pL~AUSCojGO@9`y+RzcnT%4^L=CkdF^)q1vipBhz` zev^Pf707@Qqhv2=_rdOKktDR;%F&e8 zA)CY~UiLp{X-o!eE#h~iX{Laq6!H+94IS(+%UH+AG>!Eu5H)6L_As)=*TX(HY)G&A z()-62hQ!0N^4zO$K(i_5_j79bDhhk<+foW@?K#Y5CRNZb{2kiUNvWg@$rL$ox^7S^ zf4WJ6h6)mQFAp|_e-BkB^kr}~IXK9vDy{A%DT6vAMuz-0+8_t1`ZYbG@L|##Bt_sr z(YU@lJ?3_XjqVOVAY~1i(jOgv4w&LE&ng`Pge;xZX3{_?Wd=ETP?H#LBI1!pzo0~+ z8k$5cm?*D0cEcD zh>WS(ASXGP+WQ*~a4!PfIHr2w4_`^MgMC7ue|Vpk1{(FR$SGu2iqqui6NuMQz+0$y zu>?>Wa?dCkl&|r>>{08kB@SlP3lK%S;p+M~a zU+SSs2I0Mbv_rF#f7}|TQf0vMeClpj0Sv6=SBfCt=f$6VpB%7@*Q}UqG0`HRM1UP& z5rr)6pg>0{sQ4i0JIiWR?O7|CEo@>p)@`~D1rg(re=XayavB3Fa;a5HyZsEp4iqL} z0|^ptFYY1dwgkLwd|XgO2iLXTs)+rAekV);4_hy_)BlXANG}fDJu2KBUg!}BkS9QM z$~F3f)P%s4nBoIT5>O_!3B=(36EmT9`j-ZXyj6FVUAcX1SW3HK;yNHk8rux7xOB!#xSg7z+MVDsiedrNZQB0ZWS?Y77EeJ7nb? zXP!|-OW(x-R85zF`5j)A0L8}8B6*r-9z-aEP!n+|4Py6=uN-jkM+#16juJ-cWJ^K< zrG)sAn%u^@Hx;Tm)ck+Q&M2R&niK14H)+1EIhLzSE#Ts;4`ScjRx@}sZxrBSyKGfk zrtlPvNGZYYWxXbi-g}0T2!RiJG0+X9F~h9s38DS@D^X*j;QnJuK_6v(-NxGdgEbJd zU{v-InWq8S;X!2}gUp>uP>unFzOGHTo%PV#2?ppHRcf4HI+^a%-P|Sv=aZJ{2tPGTMD`)g49KUF{!@%d;b)qAEB)iDzf6 za~!-}%Xe@ADxC;GwaxsId>##Qkg#+x4i^zbu=KF{3O3rt-H~;4g+tm)s2;$D4|1A4 zPXS!5j&)3a0GV%yh7=Z1XxJQJZs2N>D|$Sr9?lGMrxFf0ItRf1w6y}Hvqt+T{tB?o zNdR;h{#)KxNXk_jbkww=STIPwNAq}8!foxPZhp|C0l0^@Q4ttDmzD)XW}usyXO?W1nUfCg93%-G&>@1hv%I`X zbjiCHn3xDYKDCw%47}n@D zm6kP=%mAT`0qgj!XP!d47X+?r^Zc!D)<3fN*XEf~m56fS9!#b&>S%||((Mj++c($9 zL&QHupKMyM1$t+_D}>kWDtsML4n`*mL&0$Ba9(@QL`aTC0=rHOGgD!R9p&M!&^WfB z5&xY7SN9ekMkAs_y>~MQUPr8aLk>-Y?oXdDQk{=Uz9PhK@v_pP5;>!x;+U~Y{~%#{ z#QLWvPP;0d6*mgdmMEMR6=&WXZDo-OF8}9YiH<^!!H6?!SolRDj_A*V>lR^Cf%ip; zuw$h=z)0#MhnZ>UPt<}#Q$mI7d5PC9NnkFDJ=au%(M@7eFe-7yUb4hV3!vZeX7kSS zbkRbH;R~`d{I^++J_$#QX1cy#N3Z1$wn=A<1fh)Yd zh7EeTI zVKP{HxQ8WEwRn4+yQmO$Y%m8g*fXo$VIiXM`^Z(BO`&5r!4SV50RmnF4+X3CZGCeY zrQ0{VLxo2a_%&0}!3Jh3gOx;7iIQS}P5>*wa1xgbf0cj&$hgEL-JT(GF<2|af}D+o zB6m3pDiK`>ItzHvb_4#Ki4YfT1_`Vhi`UXCh^TohMGsIgE>xL z<{d;tBB!|Y+WRdR)Ogu}VH3|iKul=xV8R@@)vefI7p%tja0%xv@zbc(=fKs)kuK-gAlo@h>KGqz zC{B{?MGgLyhI&ql0{w0n_KqWnRUt(X`|A@$fmf zp8}!XoNb>lIvH=#)MAdyi8h}9XzI_#zt5OvAbE4%jN&7wjJ?&ewB4ZoXoOX9L+Wwg;DVS=- z685YN8ZR-JDm9E5U2STs?a-+^V=!kkXZ=f@AipoB&<7vA392K7DIwGc=#`e?n|d6t z@>K$~mgfA6_1@)|a36OEOd`5(v2V#h%**shgU-#!9E~28=q?s&3JDBX|5@kY1uJ6` zow9_}>y;LY$s*nN7`rd~^{Y5mn6!(2cODoY5yE_=(#I>KWacu;su>vYmblVYkiEhA z(8YgOMtf3b*kNHa>7jA6d2eSe*17MTZe#LVc09>kXi~QFF&vFG=*(VIhnl#sw#A1v z)-J~}!5yL3>!{}47PwwCcoB8UtCE7y6RM~9mDdN2RGu@B%dv9PRb5$T&I{7^#-C~- z&>CHc8_#Q5}+JiqeA&nVw;ANV%8Y7xh8Y<)kC zJW8RgKI8IX{-bC2ZxPwfE^$`l&hse226HnSZp|ND*U* zH=(m(JI5Lc8Cgt**AAnFSddP=P{rEmxx$^D?|#9FfxU~_VhZ_>A=F%^(ie|GSEl;~ zWQ97cWi5^RO|TlSnayH8ya4W@_uhpD5buZ{z>Q?fN?M~7z>rBqC_u}gcl&q%hPO1q zp}xE?%788M8amaLueoLl7UQ=@V@dABW;Y3lY=ka1f^FRafI1c6-^=e3ghYiM+EsBm z&Ek^3F(M9HL?j2Xu=xuLxAZKCi00V z7UK;h_eQ({;Ip(ZIyBw*2fC=6KV(8jj|kwp6I#dGI1`~7vPm@_r6(&A> z-ax|RvOEVD5(LS?u5HQ==CCmlUPC@HV}gzcU{E0Us4;EDU!W5KJOogS_L8Ou*~9{Z z=lUz#fF;mYtv#cW;jImFC7$4a2iDkIVd$CCNV$UjxSI_L2p0fpKV@tBDDEI-+*Ckb zhK(XL$_)V9o6?Q9($Tk&a$stZzH1R`LgxYyPyJTl55rHG$ax)wTfW7Buuvooz-U5< zn;20z^2xmS3jzXYVj-VF=fb~E-`YGAM=riQ(#YsOGzvGE&J;$bG_kTY5Y1*;In&Wd zpaSDSaFq&(7`-lRgglskR?n0J{)mm%^+W=eZLftrFf4FJK3#Sui>Z zkdI7w6(-Fg-;QW<+^f+%8w}+24GbvanLS#5;^5-;L=LAY?_>yc?~i^vI*HWs_VMlb zb}wRpmsZj@G_Qy|*SAX>U}xKy4G(-d0UbzzCm)#WZ|71s8K#UVCx~HK$L!F2qsLze z(*MGi=q*e;TA-4Yvz9AdK{T#RonU@(Mt0faLT;rBTP|gpovU~OvzfWD6rlshL^(_g1D&UgQR{BjV zL9m_fA1W?d`|}q4&Rk5u731tdS~z1yOK8vri4f-KH+^}_IJA$$m2MUp%NNJ{*|yV< zDF$~pP5F7NN5_h6T58eC_8-WzFD zPA2muUi6x0c{)Y!doT769eb45ewoF=T!fC=s`ne6*9qM1bfg9?enyvxXd)Iurk;J5 zsp}44#AoEGf+XG{r_*PjWB9;X_2ae2@6#oi1}z%*LOP!I!5-bGAhPwPtb^Hnthx9A z_PI?EV!kliL{iPSl1e4%AsdS+5^5}8DW}HRLXQsTFaauJyRLbw4Y0~u_Ku_8(dBII zTo(`A!wWKPdg zT)1LMJme*u)R^Dq{;M+rn#Z3Lt-hqrOPNsydXd9Y0xxj019(Z+T8wQ^?JazUUROGK zi-X-ggRW2Xv`!a06x~Bc5fSE|^54veot-=J#@5XG@pj)4OFdfJnmE3w+`MBZ!XqnZ z{^Wbk;g>Wn{uP~z7lvh3XKhEyX&vO*6Q#l6zQ88KHnZ#|bs6Th(2Jj@SBy36)6 zN8ROqsUkM`8d**GG%sjVf(WiP3F@p}dJZ-aYVFJU2VL4Qvp@UZQdyW>jd@@jGtPGL z=+i0z28)UAX21oM>?u4kIo#^H$@<--lXazu z?WOpB6RA(Br{p`uNKNl(AEXi8ycx2geo9}ZaNBX#1KoA!VxVT{N2q=ce2l!JvtFVn zmc>KW->iWF%|0;yoFyloF!XpLhD5Zf98TwSzG8=aJv7h@1C@rFW9A8if_qZ)!YT7w7-$$`d!PVL1wu){U zuz#?isCh-zuygsGlCh~IsDFx-tv1dr{^PxdiZ}M8s->;ic{6IlPmV%#yid18Rmlb_ zpEzB`)yDC`9E7$zV=h>EA3M`&WS(H3y?OiGe9v;Di>^FK)d~deDU7GOHup9!4oBb; zJ{BzvG6px)Sr#ed<(Zl*P=O-#u3ue^oKdx`6Qk44`=7+eqMuVnO!XN&yM!WW*>tI< zo6~$lMt2PPlDV>@&+M7wnSOQb2ASzsGaUt2JiT^ba+rKzO99-#+yO{)ue7&aCdBc0 z3AsC*v9bHlno4ZRBUJdwVL<>^XSqTVK69$Y`sKGO<{Beg7}p-ng)VNq8+KYTVQ!R9 zoDV|qbPt+D(3ty&6{6BwtfyxIP7-`g^0gd2*D`%)KIjp9%JD&;;JAZ?LDDsnuL-x) z_zHCi@)U0?<@CK`9?tQ^$h=zj`f5}oGr-KCPiESCZk+N)H}u=&d2%C{LQy!K&oE|v zaoL9NSxjamTc=nF<_DjJa0J%)Qwc1}v7!f|S~bPEdX8Pf=J>K}A!Azk($Cy&&8W$P zT0+gQ8Vel*fEP4O!z2{PDw17j@<+1f7RLUMHqF-alKZ4CVvoLx!?KpSzTRG-e)Cqm zE9~|wEtnP!^D%kl?2TWqs#1*lsMOCmLa4QB#V^kn)DK*FVVVv}f>V+Um2*^~*tL3j zPDP3!gN3V*=bX&RTD3_2jsIKnNo_rPhNGaV-8&E5-TOJ2N2AA?G}7IvB7o3+JoIji zaM8talT(LfA+xtiMJ=g#edb*Vs30Ke!zNZ=9677oued1}5m&PR+-2!2Gv4})?7O&> z)*Rk_3(~7S1qF_$H-n~ZX9;#!211hY%a&JW)Kcr*^VVl;Ru){^9x^j15!e=83hZuj z9q+)8N?WbQ(4C5sJ-}6rxncnp3Fo3`zn68j?O1yD`e0#kJJT?BP>NJGCaZJ&#DP@G zhmwl#F>g%fC%`IbplMY$#q7dai8>OF;M4}%s!Sj8VhD;zh0($=Vi%$sKpBToOk^et%zp`QHiP1l>Xt6S^Wc3IijPzJ;FJU zf~>I)m4GB?(l}0Y{0~GtKJC@3{J-L`<^U^|PHUu5M~!yj7W<)4L#icoEo5kEaoa@& z4BGkoQI@!{frR7KS86H+M4!!)F7;t5jZwS{mr+5Mm>vxivjh5*rPvsDMh^8CVV1u6 ziu&lg71xTYmde@@zki4G)gKZH@YoH@Pj_9YT^fHsFd4Wh?v&c+tXj5UeHYyP3u_+K z|CnO*266DelcFA+3X~*?2#^;S4VvlIwSH@*q%F7{F+ucEbR2$tY3_2iBgO8P$!_KP zm1>O9sNKO#N6hAg<^3E{s1tdNR+^GsyxrO2=0zVC41nk+(DU6ok?O#I-JY= z)7|*9(8 ztLx&!^zh5_rm74Lgd~)?t|zigoh|B+(>-~R9%cBemZor1aY@^3Y7wVV)q}y-o0>`{{apNFVmXL zz%`q(lOe-S!bXk-poxW?3^YMa{DbAo-_|+%?5jG(s1W*pK0U_g^RN9>(glpo$vJs zGO2Bp)9j5{c?-6eNhl9EXcnyGcnrBHr!jmy&F7q9W+T4Y&aq^Y{)61D=_^JhmO(GK zU5A1yzvLxMc#?;zL{*0q!)d_!Vx+($cpal#L3Xl`k|@Dy(_N;*F-^BON+3dxZGl3# zs`<2`Tb?hUs5btk@B*8>y>SuVCZ4h62NKvU!^i2*tvX$&R(z|G9nh%~djAC|; zPm!P4(?^al&A*5{B<=cs<0i~CK&?#w;+jsq;pI~{@71f7myaG^39)BzNZxIoU+U1L z-hHmEkXt7e9i*x||KwTgM|howX&00C>gt!|Ax@0lir9oyKBuRN3W6=8cI=uCBMy?IRhV5W>`dH1TAGr@DpZCdWoH>FWSny|*=$l-B&zHKlZkBFI z)3AH5LcXdFGe@w!$yQYgW)8~{o7YCDo=7jMmY3tqYqGaGxdr-RL!OM{(U;dYi^|gF z_N~EI-qUZ^w)(t+qKPD z^D1sraCr6pG|cgS;`Ci|SUf(DerZ*yX=33vQB}~K!1qtUbbwx&e6sbu^le1f#Ad@p ze+Vp}=}6t02&V01TJLG|K1=F;Qi6eyv7`ym@9TFZD&#Xhyt%CM@Ynab>kjo;q6)-enJIai2vw=&)wEP-h6JY98F!_E z77+s(<{C}NOuop?@%b@kj|uOH;2Ey$9ekQAOs^{oTF?`8&`#hWC=z-f_2oD_rwVdBP9N_WD;mo4w{Bqe&KR$Jk1p%J zZ@d)a5T?)fOqcpVH?nEvrL_Io3jLiYohFFaTt2Q=GL?t;r0UDr9ffeNL@8Dy z_uF}TLvL=Jc38Rs>rra0Bk)f$-LqBRt{L~TXU6Z*yn0dJ%zCH&L6g1c_r?HCF6sD} z4&dTwCOx?;5^mSo1dqnEihQpA?QLC7VQlEELBn$WCk zwaMla5;t_Jy*pDQBS@+_a-v0s?fFv}(iQO4RPiZI-k+{t6M5Z|VC*t#?_FS7v^HG%P{^n+ zQXcVa)`Mc7<@W<-627Up1oA4s1Is$PVQqvx+QQ@o;PX?C~MfbKUZ8P+fAO23BMLQTAgldt{TNIZapjIsAKU~uv8v! zUiM9TI_MN(O!i99_R5#XWQMJM50#VPyb6KE%)oV~YVAIJ{IbzwjaKk|B3F27tnOZo zy&2iKieX3a$o}|8WxWTUI)pbE49W+%diqc5wj_mAEyGiP?d@qVt0n8Fk4yI9c=aMw ziCb#?!X_!m(bC{ipq5Bpmhi-=1zg6+6$W@)9ld!l)}mJj+e2fHd|1cQ0}OY?=pO_e zLZ^OQEVn9DPIgE32F`?OdJe@#J)Ji(yh(F2#!^ypgIUS!*wIwqH7Ef+SfE7da(k$i zajw?!A0=NrkrW#0y;+)21dpnA7HmQ+V>4 zvwJ;?rfhg!mKT6^={qp*Rmudg<0@DxG+8Dw;WAN5_sUnt0ozwfTTNY4mFoq~mH}`3 zhy4gQuJAx12f?#n)m)OxD&@6XwVcM}s$_;QsuP{Q%wh;3?T7;4j-o{DIefgAb~JnN zO*x(^Vs=UO8_idlF&6`1H?zh1A}c(@XvjhA%&b+z5s?^a`z@wxs{S~Nbw+K zaVqc)7@&~zrT9`ZW>e*ZXYuK oBH8~Z$Ej?X{$ad*1ry3X@`zSr0Lb)IkTX{s{Naneyx zP%zxNeM6gq0*0iZpj@Y=0V9)!`;!zDd=z(XT-Wt5Tb%Ixq&aiYx>^}u{LXjs_??Qk zPqoa?)iWD@(LJ6~Vi}up`^Jq8Um?3!_l`4L3T0g2*FAkB=Dle9aLXBA=1bxqTc%R~{IKwQKv=U9E#G??N|@8au7@OK=K-qJv`8KYIZIjX02Kav#U&fa z&;lO%KuYIX+EbosX4J(!lCx*WbpUhMdLA_Y{FrFB87%GTl}N ze?ETw&!f~ZDh%uA)#Fqz&MILUj>|QYAHHS`KC`%g$=m4&lSkd4Q|?XZX~Ks9Mc4{F zPkjD+@w8Uaw~0q>NfKL#Uu?7mZUsQQ&jBWbTd*icR?#7BKGfz$3(U2W6Zy5cQ>@Z;svla)oEUGHwg1IXCZp!jZ4y1?_&M@(d;`a zwcF#{J8p{j49!Et3FQ5@WYN-^4Q@nivZroy=!xH358jB!c`Vv7JS9~N+=vnNO{*!h zeb%{kusg=@t|>#?Kx;!;NrmaR?pj#p6xB_?r@$r@Wp1$pr@f7pcaynWOXAV}kyu#i zF6ET7juc?@)q}^1&yeZ`d3KBrjrtajFhsmlN9=kQ?j_#cMRCOls2lrF7ARA%3ESb` zDIj+4x@_YK_cQKu&a_81&i;D!oB9Ycb(|X)3`HEK5}4x=Bz^s^*`ZrnXq1%ELUZ`a zTw?W^C=pftcKOv~D{X^`SDtmKFAdk3SH=pZuFZ;P`;)AMjj94VQWhpTQyM9AY(z_x?5^Wcj z;=vrh)f&#t!;`t6mML=jw2AEgFv3l7FEd0qN+*#WKfnFLv%u(=A_?{N4Cl3tGX)cy zd2T*a4Qwm-Dl58;$|rT#Wd`$B1Kh$eDwzwY)U=@%9sv4MA5 zu?y2V=k;dPZj?(UL=wy!BcVII;4=t;a!}UL_kU{5yNG<8PQfB1Kx(n91Sx z{d5d!>EVIk)Yrfej5_w8l+(o9|VIHM1Li`l72TTrNVl+!9<3Fyqqs zN*?pt?=XAM0u@dUnikYB=#2C=4)Y`-Ye_S<~kUJE{xtFXU{5-~SDFOg9DG{do>yozm8u=BzBentx?KjtEd ztPy(sxujl+!L6ArJw7K*2LBZcwvH6FGuvf@ICHqs5bnXNBh~)Piuv`8ljz*7w1W4` z!G{CU45sNcWX}*lU&T-0QFsnXoR{6`a71E;B$wZy>Mw7z6CSPVNm(2&4Sj7|sz&A# z*Yn03#SIaXQ^djr(JMu&YIdqaavg>93&e(}%juQ*sM<|@`S!B`JRSWG$?^Cb73-g8 z7>fDr+kgK!IKUN_4xKD*A(gma>r7jwN8~y0+2-oc7utn82@)`7nNyST-79|q{T?5ggf?DlJmO&dIGkL~$(j1s#N&ZXTV+4(ouXkhEo z?B7(ihb3LrDxF32w5|~K!|e_84|v=*kXQF=RQwmEKX)3#4JkKg*>qUFTdw6uOL|mC z+?~*UATO(6ZMu>dt(a>X@xh2V@^ong-b05h9>U?-cKt*230AV9#kK^XZ!rPQD^rI1A;Lwo1R_VR*8g*rN$hc@6WON zg+5Mo-NkjPlV7LYz4w|3!LQc66vH(jUAXdt0cnLUwU1`czvyT8bt-rumz-eed!Bij?n5EKdfn)eYp&g$BujFyeYD%Vre`N ze9Wk}+#pxh54-2MbV3p@cUz*Bs2i_+Fk};c>dJhNx#4B&0n?eghVaUZtvA%Ml2hYd zpVR{+Wry7I49W^^!msa=atzjgG${=AMl}Uiwv?I<*4(M9GJp7KpFs`l=5;t;5%^22 zY9JwOQpkSgSo3rnBD8Ws&~g`E`6fg*{EA#}S=R6AHXinTb@N%D{c^XLpDlmM9O)u- zB{V3PDi}L1%_XSra${a>J~b&zn&@PoupN()9?~N@bpuu_}B0{*$WbvmG(mlGQ^_OS3ieAKFNBGqVd1 zx-VHC<(QTh1p6g^%L3-HEs%ZJFD_0)o`DmrC2kPUn64Ne78` zPpodbaplF0Z*gDp_t)y1mqp?_9|*)XCkKWRFZ*jAxb{|VKi-!0^6&asHTDr`*6l$q z_u{VU1k;wA?L*%eU$!JqN!Av`OIY6P4(~R0I*;#hDa%#xh&8iWO)o(0D2Gtiqh#5;(b{>axdPy#o=@(L9Y1QrZro5FFTw?>nQd#keIZopxrtJ-5 zOmJSzu&LP^C4Ka=xb@P{u9S@m#|tJ(xG-y+diIe%+#`3d9k`v<9*19BzIZ;Paoois zo$=92PCdDki<3LO2~tj?rqyP3G+INwzXS^|ZasYU+^eQJ(RubRg4KhoeBOHRN8MKo zy+UcfpVWyS_G_7vF2O_Nhlk}(ARgoab23!rJg$gdeCN(fNIu51Pm=iDS^SEm>aLTx z+^Cni9yY|a&{6!-U?;rN_Q%QiuQiD;oG%7St`a*&EZ4krCS8^=^^4x^9sF`~<2Cgo zGm;T+Nm0EZNhshpTLW%c;=c9Z(h_NXMhc&gj+6L)X3{qAv6P8*(vff{hkD2GD`lRk zW-oRw%WiR{oMF&h=5bL4IneG|rV59&%SZPnJ==#LiAA5!E9IuyvC*|Q9ZHc!zM{*# zpQ(PwUzd$Ds-@QE+JJo{vAwlkxQxqgdP(q)?8yW)bu zo@-4y?ume{qUUmB;wP(+K9`Xxh78Ax?7#?WC}fd$;5{jUQuDnm3XSHxqMtl? zaAHShoa*k(_h$^2tXzE{8z9Pw)?9Y=RDe;kKMaw=P9J>@Qmtz$e5)LoxbNyRV-BaR zJq{Xt_i2&1v=;{ooRN#v&ky9M+8lnRy^i#qx*>kiKXNOvM!ecYO4KRab66SQfGUNw8xk$(bMS`wu zBa*4g1QZFme=2;w{|iMzzLusMi(4Dwcx<6aX572@J(*iY;>!^zZ@*?`Q<+_Z5;Zl_ zL$_BmqVE^ct1v3$X(cT2ZdML(876}7aUDXhmc~9T*7S98rWMu6M()*2BeCBiMcs1l z6;C5?T>20nxtH*S0sBjE=L{ivVbF-(e zy>>Z;5OdYxWkbmCc4C9kR+?jNbsX^8%dz;7pEp%xg@YnQ)6xY8+gxBsjv;<0H@vO3N3+48Qo z_?A7pYtYlgL9dss>$WK zhgzw!)*mU9Sv*)7syQe$*717t-fsdud63@Ou&j$`Uufx+xF=tFNCjJ-*5m>ej!djT z(W*37XOB7Y9a@=}uy%uooe|zI2INO#qGrXn zKthoYB75$``f*`D3;w!6;!RQW^6M(C-9zCMJ8s_b#}|52i|>v<_+F!baKB$~v&Kip z`FE6l!JZ)lPu>?%WB5Ym7j%wU*kM*~-#h<3O}{r%V&-@B32?M!zasV)`e$BMQA=1Y z$R)|b&A1Z=8|;~zX)w_#;qP{g!mMi-Mq2Y0;%oGt9Q9(1&pi|pZe;GCtt{>4G$g)5d%h9nc@D}Y@h-b4@9AMhuYyS`y(+xE{K51Y{W@H+3&}5Dt5n3_ z&Y9?4kV9u4YtXPVnzg()*`Mc-+`HovGuJcOO8lC=j9#}RJm;P8pDi%jUWyp4a6#DW z6?~SGk;{7bVLtNH0r0x{JgpluyIb@NlXdZLPl!DXQ`}0sDdVvj_uQ)cF)?Gt#jVVG zl3#voTQrYU8M6zQSLa?$xP>GY7bM4Xb{2YdhOG3zt5z#OHw=FcPR`$Z-(COX2vQ+! zS{cMPrH25e2qbFCB^bk;LJNcRN*+8a_g!_?^Fk)E>82FwY?Ywwlr@OKrt5b@1@%^w zON@{{1qz1iVKH5tU#{5n%{6M(4}e-h$Y3MiXm#%vL()a#JOwUMm+-Y{sn!Qm1&+kG zZJ&g+ZO)w5&AJ1Zba$96NkTL zV(n8{k`bEYnP!ww_wW^lLtZDz+|P*mH*SDHQqcdpTYcq=)>!+AW?Vt-x@)LZ`CKEV z{_F6GULL8>X?m(ZLyjQpLNrUi5t>8U%U5T)N6W1nGLQOq(v=(gjb$v!l5$;FPrsG% z)|5Z2sh>eNGf=!0Ia<2%Iag}YmU`SvQg|Uk@u06I#UGuRl+Z+tF;-(6TwB6az@}y8 zjn1Ez8_z{kZ4YTI2zys_aLRA#L<{+*ZP#yqbW_L9$JBwO;+VYIFG|br@68x7-eZz` zj-ak*lQZ|h-RB1NNFydG&C!9&Xdj)>uyr$2{}*~)H>u4le{^ru8|&n@ETQj$@$Jur z|3KqenVAdm^tj%Xontwj_%l~wtGJx^Wb7nmX0dF2ggyecq7Pr5G_ zyI<`ToBn<$fXn@z;X4EKzdr#(+h-&8=AI({}u+nGp9QaSLhPF^09% zxY&SA#?nSRSpJA)cl?=98j?Lo1*V2{)awAu;kXBT$YW)&TkvSb7(MbB=G~4lDt-3p zvgI!6sI#`803pHjVX2NikAPgV9Cyb4M1rZyzSXRE%Q%9yw$^v*+s$b2&5SDIBQxZ$ z2;XhXF-L9%FOx`Xu|72hyM^lQLD!5k4DQ}me)lg*IvOfScNP4!a2Tj6x4-onNs^7Xjoveg(gnay_<|{f=kaU z$J0-khCFyw`P;uOPYGkvhA~+zL2>P577bHa6&h6g9Tp)N`U_~WQgot! zg$S|)cZBDHOex~f;fT2gt-3E-0vpx#emJ}fdx35PGw;HfCqPj!t+@te%A?Ud1~PpQ z-BVJWCe7PtkM>6-`srk0EDE?g`kLvDRcSh$!<-M96^FaUwFWGAir1DMLE@YR7VO6z zT^1vcqwNX}Nw3fatH*d0ybMpOw~0Grlcb&E*)%)FPlm=6)GzFs^Ip8qE@t*F(f=pP zF5E26g276#;yZDx{MkIC?Yf7aq-TxS$3T*iyhN+O@xx{=@6z2Oy>bC~l(K8jPuPC> zA(Y%i@z6jq0HyFr7<ALgYo7Pf=xSjkA0c64QgL7I^9SEC(;-`ymz`pc zyNcHnd!qRWCq(jNQ~W!;3Z&1}*iM}2Oj?g2HdsV(9GxeYl$R#xVkI9D_G{a-bwac9 z(TVT(wX*{Cl{yl4evkPjy^+Z}j4$uEh!{uAyTmTkdZy*49dbXkGO4Qd0O9Zd1Wx3< zVi=)YFSyL$fxA#V!X_06@2QGd?<6VCm*(shp7iK6G-Bz3uk5MytCC(Ps{Hh_SYa)G z^rLp$p*1D;)z|dhu*SIHI^8H{XAAav^knVn>K?;C$j ze7n=od{@aiOW0H>0%@^Slu&!#r+)n~zI(1X5dQ7(T7i^We3AXPC8vg!Vp#5xDz;_h zAl(qIdtO9=$BLSe4ns)GJnUj*^e!#`J@X@{GFYP&bK|PFGNL{Fc+-&N!}X(fp9F0c zo+jngjh@*z<@}PC=C(epc-hHEq84ec&YO)hr7?Cw;{W%8PanHC)oOkrL`vq0enBn? zk4il=#I@DIg?>C)W);p6HyhX5^wsod*M-E-j6AHHpAVgREI1sK3jf6RqNtj9oTHKXqQMq^lj>wdl5y$|srQO_sk{+U5UZ6QD3R z;EPz!+bSUjH|8>8EQ$S#u8C}ADuCh50$TAZny;# z50rYXh~eM_8K)ATK59M?P1RvJSr{?a8CoE+5vB%UjDZ%>vGUzo24~XL-jgXQ2{WB-m2NssXO9h#oj|@$MT}1 zaeQ)!%EqOVdhKE$DZJ#|dY?o@i)hu=i4bEnfNn+Yb{(A>*rk%=TfbM1<_dD_ta} zh8IyS3Px873$BU}l)_eCD>%4LCRNUDzR~f@)Z@j6`K0Z*6}?D3^1iqb7o^a^H45;I z%wegCX2u}gDEhZVAbR}f*N$Gfj)`+M6@D#VK_=R35fd|#yua_y??2a%z-f6KOPvto zb5WduDq8dv_|I$b{TFUjGh10az0Gq^%a^Zq&<*2?mqU*%^jYT@B%9{kV(|zwCbpfj zxn1;NWNL<&pNs-3LHz-vl(HBhwU0A54vI}LS!-r&2MK;Wbsod=`0?X>srYy;xzIW` zgT>fRO~lAV`-i1A7b!%0!a1Gs#PSaAQyq4{XFF|P6;CT@ev&IFweB{CU%b8W2v%P` z6EotbxzzYl*5wMnKgPtlys076^H55Tr1y|IXkj>fY;0bB3Y4gb?Nq5%SKPE+2TLK2 z-8+4%H#yBH=TC_<@hr5_bpMMB5JQM8J7vy9&4+zV*-C|JlD}Aa z>yniAzRmm%yI2yo*x%{Hw?mL2Qv@o}PPebFv?70l|L-Ajde0xp0vc@hDjpLj^KD}Xlr z0kmS>rwaF*#?{2tGT(vDmdlGTBU2iyoY+@n*$4rOKqf_4EFaTZN>yr%9S5^VP}z%< zC%|$D*`OPl7M5kN3gpK0j$E$_%Gp$w+X1=Dy)M?1_4R{ip)&0nhqGAQ9;dKM18AYJ!3lRU}~ z^)(Mf26J~JCfbs} z=L23rWIh{vosR7N`q^p%d7uM*bcWh>_^Hk~8iJHJgd= zIL-harF|Iyrc9N9Vr424Qo@!WY3~2Cl-J@)SW9_6>?!aC7q8|&R-=3yh)B8fp)l=P ze(>ive`qc5Vc>goJswA3*TF{897%pe{@y2uiQ;|`S62yEgjtXpB=@T~!7K1*Zi@ve zQGj7eB`aF8VvvBmCeS*<&k;b%b#)n+$)k!uEB9WvXD}0r!Eozm6Edp>>=F>;dc5!i zn1q`uZw^^q_)w4(gCtJDav*(&MZ}W7=K+av0;5yC20qt?=a7KB3ll9Rm@@5^Kq0<| zIsqs z?m2aQ?|8d#HKu3h;4~E`KuncJg-;JmMR#@eF{H&wut)y;g-7>{%=E`!sdCLLceX5F zkcrm=t->QM{misqfc#%?9)%3=Wv|p;5k<;HUfpM>Ah2 z9fv+d3w?+J_Mc7&=JX!R0l6O~)ChRQniMhOtp>KKz)we%tnCrt6$&q=FVj*%Hc9a$ zm~36oQh*Zp%4eJ=0kxPIGZy}1`DtJ@qRNDmk{37^-=l3aWCcb7-5}md$?4+;Ux2TF z5GIepfX`sKc&(BDJsl93Fu_BJ{5?3ZF3ggAw5%4G1v2@P1$lK$K#zizSmI!?tKjcf zQ$0BUEM*n^EB`Rnr!zqNG!b#+S18c}1y;%CP^S(&OLdCFBSbT^jpk zU94%XbDo)>L!1}f@r!0%>v4~uqK7AsLjuH_1NxQ-CFLybH37mh#`~Vum8G0Vb;cs* z%RqI~y)bA-k_Rl#nSYJAsoXFIIsC#K7+J)l4uycJRH4)m8=3J$K(zEueOSFeL4@TjlE@ z4cA)?#sd#$E_{@{ekOB(X?sDum~dL;8)<}Vdf?bcY3p8c%t0}LEtPWp!1*7LG*G21 zFq-oG`6a4dVeEI5_c>;FkG&ers%y}uDV+vlQiB08f%wxeV)YghGLteeQzly)o$Gu@ zpg&XnQEFDmX$G{YG0}bmrg@uiG!%Lm3t}Robf+Te@1B>SgEs83_*Mt-Vu$Eh*Jg`tz&sjVXs_&PTSxQ!np`{dpJNab)sZ}>_HBi zh;FUW&=jl!Ms63bCNM$}#1-$abf6-=36=5l68CdQHYE#o9=|v(kxnm69VnH(do&!Z z$OBN1@YOLoMM2c|hcPs6dD)=1G_bS;C*n6I5@hE^p|ZC&R|?(XEU%ZT+xz)4h-huy zSRl=SSzw>ZcGA?c4^aA8UtiRXf=Q%Cx1ydY$mG792(!!Uq$fV<+E4)1g|D>BdpcY< zw=NCL>E0H{DIjCQCt$HIqFE0Q(+|@jK_fqXcC^kR=~rj0U`TmwqNticxxYme)a5q! zy>jExBbyg(z-omRgP?$w%mU<9IK#U55XcKX0N>xG=Dy~ti)QcOVt16EE@FS!Orl}Jo6&Zsu13x$`ZbCA&f{a4tZa@Ud>fuk1j3P zvEBOgs4Y>}`<@W6;u-5_&{AB$Qo74Oz2Lq8iH0%udx}(+z|qC1&jTw%j`vHug0A?g zGfud>6#wH!a?5)bwg6VkhDJ)yArdANw)K1-q69n{zW_0F>Jz2zj+9y+`^Sw0ysx=I zzZF~H)?=eb8;m6ebB*}tz()M7i;}8nDFBdf1przUgD_QTL|szl9xc+<5V^w!#lE5&Nj415sSMel$?i zSxykxu1UMl@K<2Fh-$`_i5ay#typ&D3SF4f_ln>*&|C^ZmS0m+z&fK1dET$>zOGtZ zeM1gEl!?Ho2fHqcL)()CY1&3~?zj-x9?g_mT^(!R)b7j;9Z-F%Xum*leRO!F4Y@=+ zkQ5X;h`y@62V5eztV8lGjf6Zv($Yyb847|`FE?D(jkUSL`9_37$S!rF>K^GQr?*k#MSscoa>66 zkNB%s8AtwJ!L->tDpyAH06DFYx*wz8`;GeVy?LN6HHLTS;0wEKy$aTi0DHJVUX2h? zn9Pna1AeBXkj6k=C-E`&)=qH&fm?!_$wO}e%Y!j3?oy`eMO^Yjb@#uuMruqdixs|A zW9)cT!a0{)@*a~8xjqL=kSYFSKt-_Fo+Zens&y~}5B4kq_;&fa^y4IuVopq22$R{n zgdi}=m~C>LQt=3I+`hq@{grlC&7J80UqBBum)7U}S9E?nM(@}p+%X4{B|Xf821-T( zRzUcyFP**%`u;%nOVUqE^b0ZRs(It=QYodgT{hd}8M!|Go;QC+qXX7z z^*Sl3D|Sm?oUcCuwcV?v>yT=8g9KcD%!>~GIiP^daohtmStA*{*L@jkTn3pVTk<~B zRVTVnW<$MY(Ded4iaq_Xjl82jKshZi`Obik=>oK)S?2C@@v%FACQPHZujM(@k*sGY zv111bsa$YKk|GhAH2l`!+CtfTp{&&vM z-g;u!jU>G{T=erlMj7XGMx)tI#N4XgI925Ck7!Sk)nmCkA1dAVUR&CXTtL4+4)W}~ z10D>pugt&l%5ajl$DxmxUVIG13Wa~1uXX%HJ zA@ihmbE`x3ZAq9Q+urO7V(~Y~J(-M@=Kkm(+!I^vMOrS%yBdvO+xk7-^SW|$Vd&${ zf`eOFqBs3Xu!o>pN~Q>moe2nVp|S_0hTw9+MAFA2@q$`6=fjSL>E+o{;}wulQ;(Nj z>t68s{H_sk_gr3-ys_29{fhJsO{XlW*14a}Pc=A4qfvMRPcbO7<9l`vq_cP^+XZSV zkBLub5!ABrSh;G8u`IHcH~9*ZjB&?KKt3%M@`Vy_m{GZB)`*FfVbCo+WhnXCdyOg({xx@mp=^>_)$ppV<+=< zcBF32gZ_P)*B&BQH}#X7I401-dZAc#Kdl~7&q@$(ZBR7l^+7gmM@g++bJ=)|nneYW zwGqSiJ&yldZL^Lv>=;WCn}>!*DGt$tx+GEHO=wZzDR_>ksdP%WH@r-ZTs&uv&p+il*1Y1pq&c1qp#%&!%oT6m zL?~%3LlGj<<0FSoOKg&2o&=YAACT7P*(Y0m!~g>AHry#wnfmvGgRmWf%zv+vpv=O1 z$#1PuK-8n50d!i31Rccp@zk$!9Z6iz6vfVC*3#2}lKuP<&+h96&IT z&|mY)!8zsj?ad67ICF~{RgB7LK6JckrHt^D7$ec&GM;@Jv;|y*PD(LkqbndL)uCO4 z-3x(>FfO=m4H3P0{MRWNPRgr<8sztujHrOz@zZiHM(#6cJa9?|qN_vS$3q#rCWy>3 z#daMdc~IQTb8O7llEe@E7LuP_cF@bchmmP1a_OcVwB1cOq3&&blb)S6m;WEK)N-!M zg{_UfUv2Lgs#IFK`v94HzSi?hw3z8LCzJ*VG{R4yKof8XgzsbaoH`r%V7hj$6(D2* zj>$Y|rRW0c$%)~R6rUWq>gU-DL2w%G_kWw&$`XRTk^sqQg=q}}CdNT|=4POn(=q|2 z5Tw`zvi9ympdZVH*qbOuFs%6b`5m%W|0}Mz{wvTxqk$B_%^rH)d5<<7oFz%Tt7JyD zZmb3b`t4{Ac0pn)b?W%jVEPV?m#!xRc^On5B1`xa{1M*$)D_Kw6X$DTx2S;&><*$hbfV^>BcetD=@wVf= zShgNWb^osZD;WA*x-4csx_xcxo-c5eJB+u0|Be1 zqMQ|{3@ik`SmwzoX;TOxiSvFi`2!XLJL*OK&6r=<6>2* zKS*agX7O@=crBJ_Rq;>}u&|dYenF~_f#86=NnN}>w9KJhHcshP3pdZ|K!wdsHTj** zMt!Vl>7%>^*Ez(DOEAQGy$+h&G|?$v$#EGNojm$EoqG|GrZH&9>lO4(fT&)P;Kq|~ z#Ar|iTLIKkz18BY3DSjGfTP9vk7apz3O=(n_dr!#&h*T6GHx^IS6>^`aVj1Ed-k7; z2?dp``7y~vNw+3DuU|=bhK@N!zlCSJq!f<=Xry4%qv~5@)uF&ihywD}S;~A60@ci!E!m~Bl6L#g_mFO} zn#tkXz4)~}$FR4;W@YzoGXb6a!k`X;#DsU?R}ux8_t}AN1?NSkp?oqW{GXGbu2gXr*z;;QbIJyZ40@M=E`4i>>fCW-KmSBbD z0K?2Y{yvtBJ^(BUh3~A_DVLzuKIPGUBS~kpjQK7XGtcqpwaoIrM;kzlzv8y>xK1j& zw8XkS|N1Y5zUlbT{NJs}iR+9QxN#3uK>jTZ1h`z$qIOmca~P8`_hr2ab~A%IPR6;W zA38D~b8&#;BQbaMA1b>_qo6LY;_D3ZhCBQk@kDUSBtEA+v;{vfe_nq5hPST-{N?kR z@0_~8DE}77(USDnVN~?UGV{XS2Q2;X+XLl*QrQ0{GD|O2U&Jni1ahCCe?oHLO-&J! z`+HknWo>oaKJ$zVgY%w)2*W!f`VP7v01Qw4V@a?cU+U#TVD&xt)$K*7f3A-Wqh&<1 zXm|_DU3e#f{5p5af?VxT=>a?fDi8S#p`cPycrsnkC7u5-c+W!@Y*KHFPQ@7r32AxrZFs9=GrTsf?0yq}0d}?q3rVn!{q~N2(EvugR?9!nF z#dHG^zzsF{=N*fH3(SYk*a3#uhOoEGr3|fDeQ-9Y2kXph=wxC{YNonrb({Skg&vKE z-|IZUWQBL8sNY){nk3Dw#$vD)PmY;UsB;62SK_k-S{YTnDopi)AIbx?^lO)JiTSk> zP5${KMS2=C>w*NDG?#a8pu~|$7o@|`<_122+!hot0lyVQ6L@tWbYjkLyiDU)mT%_X z;e(+P>Bgw5r{xR}?QH)zWkV=Gk0!(MRR9KyB?kVL(EhLm9Iqa@UFF&A3)UMKI5AlT zj^a9U{{)**V}?1U>_-X#QEx$gK$=ZBP8IMh_SoCM;?bGN7Z=I|)d)Yq?R3(O8eGrP8xZ_>@652w`}P6DvQ z-{M^QKKWtG!Uk>Ix&SkR3ZcDQKA#a*4EF<(UngeH5oCPMUG{~%$s^!RLL}eKdl`X5 z+c&3QiA~(-wyCk??EuTJHGR7t!!-fYpvKK0@8nn%e%?)e6~t{N6i8So1+A5+v?1Wg z4}i{Y-aGQXl6FNUmOogfh5>_g0F;5gvQFtl=f3zZ>Xe5W3l#4@Tyf*g@8h`0xHA*zIkl_@j?JwGpVvE$ zRRnRdQm^t++XvB5%)<7U1FOetZMdh+a{zq7RV54SF?A(T`o`EUE z0`9of*^?2qS2m+lLdoIlEFdu)B6m)}CV~U21HiSKtuokU4k#gQmH@gS3Gcld#zlDR zctM*_^O||`DX2E8c+zF)Lhc7Xdj;Ytn?pKn1f&JH+l`s#?%5M+THmQUnw*Skp<{+~ z>$7Pf_5cnn!BQno%N>v@T8<$UiPcwu1qUcS2F0x1U&SnNcRehUBJ}QXQ&ipJjlVL_1`hkA)Ia5Llw5 zhb{tMt#c)1=*s<{EqFGbWC8{mxN(|5WAteiN(!6++*3Ed=ZP5tXk}Cb`TJ^(ih^3^ZUPxEFt zBVNCLmJvo+G3EGZd^J$2`mr3;QBdNO1ipJgBom_n?q3W@;2R*MGIBwEi0)(fmDdyP;u6w3Yh|jza3;1>6cywbOXFg&r4OB?XVu zLe?-RZDk*F#6ZOYe`Id^T$E}T`f5VbI3ObHk=(-u^4ItVy{cZYc^t_2=;|%N2mUJm zcV+v}7Ha-Oi^hj=qkVQE+pqJk!BJ$2#!?nI2|)8tSgjLO$ZslUU9q`sfFE~UJht-s z4X@qq&RV(OkJ`H_Vh;D92H4+0=ld1Ev~T@4`N!+$eAgPa0RQ+1 zAfQY9Bc_cWc&dyT>4g&OztAJlLJhIRd_Qp_M&KXvrLjOMza&r++>I32$QL+zK=8J}b9>~tYwlTy3 zj?A(HsKU1Hv0n$VrHy!hi(5eFshBoFpFMUE!fU|$(N37cTMpX`c&%U&c$YoDIdh=Y zv~d#^r1u6ORGJQIzICn!E1qG$(DDW@-7B?yVD1DE zp|Q*zZt^H4s4Qus62CItj)q!3;D`-zhj+)->d`6AG7+-e?0xIk>%-%;_(?dU#oXe zT917I^xeX^wMqUwwhATd|3jF;7hVz5$#WM=#J%r65rj%~b@Ke0E0mG@Z8 zH}JZZL^fA`zW3s)!Ax<~I>6#&p`VV&bZFLk9)psF00h;wKCH-{!k~Zy>QgKpoqKR` zvv))6?dS)U=ZxiiKli=NcvH(O9*8~&eZ>rgc&dHSE3}k^5Kh4RoP;mwBneEgd>_g+ zy1rK{S-Q^!tUNS49?FItf%~XQ4IRL;L64?$Dq}V7zDAH2vI$-GqNY*!D!?B&oPFZV zpYD|y1X`69N6p*?8z3@v_dayleA> zHnejAN*BQ>`G~%@0O$tBb0NqVix5EUK>wl-_{|NWjJmaP7swB11J|pP!P0RkFdaTXU#uSNx^c({T#HCbx|pi-8` z`Wlrs;OuEo^N9bs!l)2@ueL7h`7H1wNoa{bu8au=Qevj3FdZdSCiuHRRAh3+Q|GvP zb8agQY444bdI-+6z6>$x94Z{d@p_2_ITkrxc?~fS>@V35$K7&Kq}RHq7kpGZq=KC- z{;OrPHsm{)ZUF3qX_bRB@Cm5fB9EL{&^mZxR&{kh3Rhxt)#g;e7pbO~+w1WVQyY5{ za;QelH<+0M(UzfLF(tv!OJ3%K&yk_+D!}o>m)vx2KEp7dacl`Vr4oG|@C211$i${; zF3Q1v0B<62s9i|Qbi*yqZ-O(Er8R@gu_`@;2bm7rO1kWggCLn}kfh!zTvDR~&}FO} zR8|6~KnLU~r1a|?E!7?Hy0ad^WQje4Fz1myi;aJQ$bX1yXP_P6t3C>&1Ye|~i03D} zy>a07+|0FdzSlum=0;2#d2|ab9L3isBU=>ig$L0EU3gwj7gDlldK9;(cM0H}ST zasJP#g#aZVs8vbkFNzV8<=k!oI3fCsaST-(bVG&eM7M-#*){b^#Ie#_Ka%Bd4d%6E zyXL6*@kF;ne)nGs1!y_&$j}7^#DZ0$jR_hx!~C9mjB-Rk@0Rr5r>j#esRcQwPP;)!?$aq4I7Lj| zN{xAC{&F4>WV2gxm60drOP7h?(ypgP6n~$%O78ZVSY1Bzcm85sdLSPRWCHF#_^CzQ z377#BI04}M#YPKYfw9oFFww;x&75wFlDCXwwDbY>>Qs57tn=L}_mx#GY~6yel;?n! zN`24fN5`tbGc3C=L67iX_j|cjfM~j6I%qssP$+Jcik9;m*$7#X!e@YUpCZOF>N1|V z7Zx(bIMw;@mkt(RFOP}u?b>~N!o|$5m(P?|X0xZ_+Rgo_Exu8axM|&D!UlHdcAZkp zJHPGJgzX$>YVgmq*w-j77M3()UfVC1oZvk{qzS9&B5>X@ch3jzOYD8f_B}SVrG+J~ z^1Kn()#kbHy(gnDB;P8}3&|t6`Hf<3LgfttHALY);#5NpL~L)Zg_QHA-_kPAH{*u#ja{o z!7f1ivm8Qy#ri9H$dvQ)txN;ZSvln$8%#lpoBE@~pqENKBpiDKr3IxjQ1bO<+}njJhk_*RbT)&&~WZ^$w7aN_5TIx zDbQYu%PQnjuL`0t*C%U#@CIIWc}X;y3`K3;2cxPcVqpOhU|4}><~i9-W1xa4ty_2g z7?`o__H8!uC?&{GXik2bV!92m8!0vqB$?NZss#dC*+_0nf;@*=cibhiE24!`j?YKb zDJc`7T2A{*-buDulhXYS-D-x=4_epfMZ5s0cSS2t?5Ty zeqPE-H!<1dS}k6v8qLtO24TeDFw;;YBPM>Dq{4?|d3|YjtM1h6EeVkSQi0%#pXG_; z9e{50N^8}!onPc{OA)jlfBhd9Vx@Hd92xS}t5^?P=*ta+?yCW3+2)gYL}9-fr?c<4 zl&_ERO2Ye$?+jVaR^PYo#&@YE*gTnZ2c(}ZJ2RKj#b%>o+cW@8=0fxzz?c|-uiX*? zN6znbos-t88ZCz|u}bkD%eW6TS%b5*8($F8fUXrEdj5P!$F>$a2n;Uzxv+e>`7P^! zh-h*jFyNSwYO#;Yh@=T&-HV74tFEWAgk%}+48Xn3oz_6_$jzBAje;xQvV1(B z3%g|ARz&3YAd&yIif9e2r0m|H@I(P{>yk5R;_E-YIYHD5A+ty`T4bfJmsw;;eJ(^0 zF~WAQ%nWSAq0a;aNB|@BTh{5m9$BE6$1W75rKX>+QH1C44?*vqk+U2+t&v>)eUzbo zrOViLd7K(}_(aJ@?pjjbN)f5ts}XUz_C|qub{071Y2#aPkUbA5+X_k7Jn!ZW?dQ`( z==H`F$QGm>2RPcpSEeki;HI|6+%9uN%ZAX+8s-Ot$dV^r+0^EK2!OBVf)l0%Nm21@ zF+u=1v7Jay&ecWA|5#;V@dNzYct!IDaKlB1Vi#f~@pA&>B)F9<)=10uuLd0cAmYGe ztpT7fnW-$er{F3$U2w~Yq}P{Ry`YieWz4c+UNB&m_fAKgFqE~%u^-WK0w~)9+1ypQ zN0?zHpmT1=@qoJ}yfi-Td%nmy(NO#zLXRPW)c<+K#djIUK)U6RQ#pdR`r4(|c1EdI`ycgU%BwNfYWjxgr+dn# z_~BP$JnraP=OoZI(MYO$fYVyfY-L!`FZR1G>-RItsQ&7Jku1(x?FZMoQDU&L;o`PP z;f%4`i9x`Pmi*P9A>%3BW>ktOcg(golrTikVGiW$MsXZ=6LIE6;NCg;uU<9!E5}J$ zfGJ;7Ym!q%v|D&O;ajz!yQ4Kuve-q(p~mXxS#nK@et1Q3vtoVd<}z>yqhhF~eCYS! zkXej62g@Rvs88hD4=i`FujlO`jWsfk=R_zNTY1L04VOLY%-he;hAwj3HpP3P6a2Lm z`#Z#zbIXnMQ{XsjqdWmOOWfmqPD$q$WpGAUb)?ive}a?E&7fM_r=fZ&gqp|)9l=8I ze(g-rxSI`&bv&%Zdldq=No?F7W9*-kxJdn=^> zunL}zK1RctNE@rr;wWSMP3_%wFuIbBl0#~$+-mF=Qc`U56a7*LUs^_@#n_;^K z&?`QD`kUUDVPZn%1+%EGfk4~VA zEsRNt{u4P_#v2vkr{mu5%edHR686?JS1|^c~V3=W; zaoetg5ymjgIIni+={)D}^XK{J{qOg#-&*hUtaq*N`u;xadcOjiU$6^+)Y1jL82Xy7 znU}G2!nH{(`Az(Pu_`FpPbML(nNfaEVpkZL;BzG*vp;)F5^T@gn!N)odp?W(s|JV2%DD+sW~Sd{bOai%Yb_K zlddV9y9+pGsz`;GKj4{Se{M88F9V&)+M7a6rmVayqt1Va4wgVh9yM~xfvSaqpTlXV z5WHQhM*2PulQweC5_c=RyK906#53qQ^jdGtUyD+$K zhQGsqu3D_+Ns2f(Nq&T0y;HOFE3+ zOl|1PjISSeG9liiiO2ceeQ~QI3<{8MOh}8KkZJp(gD!R_SwHmf0_d7&mR}LRtK&b1usMa0023V~@ zDc-JpUM+_{p4bVnN2mjnC zJ(ptBwwv%?;}<;J z)0EBqL3uN>Wo2QhFCo=2Di5cQF&wo!LV?=gqklmpY{oHF57I=)pmS|6a0n%Tc0ZhqYn)FgDO ze84~sSUx^48D#m_-xSK4jy+|Yt-RdhG|0M&slo3pk#0J*Oufk+;8>&_?0}SOB`Mge z^H0gt{n9*6y8YS$dNbgo5KLzJmmFD_8#+-rDdvW%7tm6d>y*A!x@aiw`Mi0WKd&jR z8LWPG@Sx?O;fw^l&F%eT#U!g=@g`O&BxKg{)YdTntu^i6uAoL6CG<(PGa;ElEFL4M zVPSRFpK+PfpX2s-`DRU+#x<57%=Z)~wk7?v(-cg52i4+y#xAy;z^Zw( z^%R!dZP*arMpKgv%14m3uxSBX+w7ihE8;x0^kFGn^ zCEJwUA)O(R!wJ*RMj}(0i_hJQx~wa`GvzmtxP8#ID<9M4F?zzp(6_*z_#$U!w50Nd z)v=b>@ki;zPzt?BkQMJ97D!S!HCFGx83h0Irh23!L9J5)6(fnQ()f9?X)NeQ1{@Zo z4D}6_K;grpJHt;sHh5y%p@x+m_p&UiM%w}Pg{D%=`~cc9c(X7_W=$pG&kqDNx*B%* z&Ch=n7|-_HX8Tj&Rf;u(+yDub#Ucx{_;!bJHRF+*zKmM%rL^II;MoRO*iES z!x}4i;o_)@_z5|WaQJw%4fyFJkA)R(pyTMOpnu1HConD1PDKWR^RMy zP^-`OxK^C4=HE1E5yZ?!+SqfGJf7c!CZa{nej+9?(6NNs`$u0-g)$38q+5Os5E4DO zyl#IBi377zaPudgO>@bX^>gw_T9Jt#7j$H~VU1>5ox?Lj@{;brm)oSP(ymB`>-`0a z(+Taf8A*t+^|t4@R>2HT_~Q#Bss5kx6|W8FYzmvSB|RcWRzqzsFKwC#6Ek+!N(o-w zBv|?IV6QSgMj@D%CnJ10;*zy^SHpR)M^;J+^1->P7s$~LAEAtWtoY2#lo%Y*Fx#L= z_#S53aXBy0TT9cK`zX*t#8J*)kk!{30gK&`VMJuA{&VF0qMj_B-0_4YNtrEgzre2% zTq+&1FR90{T%c^Sc;^eCW{x)MbP-Q8)l3d^4_Xi4eC*aMz178n8ndG4S(te=sWt5ki{8j1 zgEaW)URrS>`j+_UMsDWTW2~J%6bM)d_Q#g-dmD;(8aLwS zN<)`F7!Qe|l2ft7Yl{-OCd&2gTMpV>D>L6IaY*2%6#_mm9&o{Yku?vI#4Ws&l0x66 zm{cf;IS!!NO@$`4@6o7LwTDA76AieB7}Z!u?Wu!ITNj{x_&eCwK5n*t;(|>GEOkJ0 zKDr|tH6(-G1SeLKWLTfDb?)k3Nf~_s>2Y7C*;BX%PD!oUTmeYYfq9ZnAN;W6K8_(FY!ac+M?|E+bVJiVw2v0&O0SS4 zRcxi0M$T00c{Lg-lg-1HspqJ};{mN>T8aU)!uwE?^&#^|@R26sZ?|u%PF27Lw-JB1 zo(nh29;yv1Q@!6CUD|IV*|Rr0-0_RMDtl`xtFd~99HO&RPjYyLa+}VcaX2v6U{fa+ zyAkS&pv)w}^F~PX#pcL6?bYICzD2}lFL^=OEv-AD*f3tLW}y!+ExuBY5jgK;9Wp|0 ze=$PvBkZc+9>#M_5+Ig*f78KCp!vI2#t;A2K6eu^76a^D{rP9U z%b|cKJPS+`uYG?x_25UC9gt(bisv_>?pscmjswlRC)z6g2zw6Xs02FsH+NyT!-~MA q6O38R1F;`r{~x0N(GY#u5#aU8QOOcn?}00W1k5g5Un(`easOWurP}5I literal 0 HcmV?d00001 diff --git a/OptimizedNeuralNetwork.jl/src/OptimizedNeuralNetwork.jl b/OptimizedNeuralNetwork.jl/src/OptimizedNeuralNetwork.jl index 65f6f5d..e625bd0 100644 --- a/OptimizedNeuralNetwork.jl/src/OptimizedNeuralNetwork.jl +++ b/OptimizedNeuralNetwork.jl/src/OptimizedNeuralNetwork.jl @@ -1,7 +1,7 @@ #################################################### # Library OptimizedNeuronalNetwork #################################################### -module OptimizedNeuronalNetwork +module OptimizedNeuralNetwork include("activation_functions.jl") include("one_layer_neuronal_network.jl") include("forward_propagation.jl") diff --git a/OptimizedNeuralNetwork.jl/src/metric_estimation.jl b/OptimizedNeuralNetwork.jl/src/metric_estimation.jl index 0cac640..21c1aba 100644 --- a/OptimizedNeuralNetwork.jl/src/metric_estimation.jl +++ b/OptimizedNeuralNetwork.jl/src/metric_estimation.jl @@ -2,7 +2,7 @@ # Función para tomar métricas #################################################### export regression -export error_in_train +export error_in_data_set using Statistics using LinearAlgebra @@ -26,8 +26,12 @@ function regression(X::Matrix,Y,f) return mean(diferences), median(diferences), std(diferences), cor(Y, f_x) end -function error_in_train(x_train::Matrix,y_train, eval_neural_network)::Float64 - estimations = map(x->eval_neural_network(x)[1], eachrow(x_train)) - diferences = map(norm,eachrow(y_train .- estimations)) +""" + error_in_data_set(x_set::Matrix,y_set, eval_neural_network)::Float64 +Devuelve el error mínimo cuadrático. +""" +function error_in_data_set(x_set::Matrix,y_set, eval_neural_network)::Float64 + estimations = map(x->eval_neural_network(x)[1], eachrow(x_set)) + diferences = map(norm,eachrow(y_set .- estimations)) return mean(diferences) end \ No newline at end of file diff --git a/OptimizedNeuralNetwork.jl/test/RUN_ALL_TEST.jl b/OptimizedNeuralNetwork.jl/test/RUN_ALL_TEST.jl index 0afc25d..2b2868b 100644 --- a/OptimizedNeuralNetwork.jl/test/RUN_ALL_TEST.jl +++ b/OptimizedNeuralNetwork.jl/test/RUN_ALL_TEST.jl @@ -7,7 +7,7 @@ # - Our initialization algorithm #################################################### include("../src/OptimizedNeuralNetwork.jl") -using .OptimizedNeuronalNetwork +using .OptimizedNeuralNetwork println("Testing Activation functions...") t = @elapsed include("activation_functions.test.jl") diff --git a/OptimizedNeuralNetwork.jl/test/backpropagation.test.jl b/OptimizedNeuralNetwork.jl/test/backpropagation.test.jl index 317f7cf..fb229ee 100644 --- a/OptimizedNeuralNetwork.jl/test/backpropagation.test.jl +++ b/OptimizedNeuralNetwork.jl/test/backpropagation.test.jl @@ -14,7 +14,7 @@ using Test X_train = (rand(Float64, (data_set_size, 2)))*3 Y_train = map(v->cosin(v...),eachrow(X_train)) disminuye_error = 0.0 - error_0 = error_in_train( + error_0 = error_in_data_set( X_train, Y_train, x->forward_propagation(h,RampFunction,x) @@ -22,7 +22,7 @@ using Test for i in 1:n backpropagation!(h, X_train, Y_train, RampFunction, derivativeRampFunction, n) - error_1 = error_in_train( + error_1 = error_in_data_set( X_train, Y_train, x->forward_propagation(h,RampFunction,x) From 216517dccc493c2ad6b81bd6c3b213c4e40f4c94 Mon Sep 17 00:00:00 2001 From: Blanca Date: Sat, 18 Jun 2022 18:42:19 +0200 Subject: [PATCH 65/76] Datos de #115 que van para la memoria --- .../resultados/2_air_self_noise/TEST_WILCOXON | 4 ++-- .../resultados/2_air_self_noise/boxplot.jl | 8 +++++--- .../2_air_self_noise/error_entrenamiento.csv | 6 +++--- .../2_air_self_noise/error_test.csv | 6 +++--- .../resultados/2_air_self_noise/tiempos.csv | 4 ++-- .../2_descripcion_inicializacion-pesos.tex | 6 +++++- .../3_algoritmo-inicializacion-pesos.tex | 16 +++++++++++++--- .../grafico-bigotes-error_entrenamiento.png | Bin 28647 -> 28825 bytes .../grafico-bigotes-error_test.png | Bin 31774 -> 28908 bytes .../experimento/grafico-bigotes-tiempo.png | Bin 26713 -> 26993 bytes 10 files changed, 33 insertions(+), 17 deletions(-) diff --git a/Experimentos/inicializacion-pesos-red-neuronal/resultados/2_air_self_noise/TEST_WILCOXON b/Experimentos/inicializacion-pesos-red-neuronal/resultados/2_air_self_noise/TEST_WILCOXON index 5678b1e..134663a 100644 --- a/Experimentos/inicializacion-pesos-red-neuronal/resultados/2_air_self_noise/TEST_WILCOXON +++ b/Experimentos/inicializacion-pesos-red-neuronal/resultados/2_air_self_noise/TEST_WILCOXON @@ -5,8 +5,8 @@ Population details: parameter of interest: Location parameter (pseudomedian) value under h_0: 0 - point estimate: -5.1562 - 95% confidence interval: (-5.179, -5.134) + point estimate: -5.07785 + 95% confidence interval: (-5.504, -5.044) Test summary: outcome with 95% confidence: reject h_0 diff --git a/Experimentos/inicializacion-pesos-red-neuronal/resultados/2_air_self_noise/boxplot.jl b/Experimentos/inicializacion-pesos-red-neuronal/resultados/2_air_self_noise/boxplot.jl index 76cec7c..b802694 100644 --- a/Experimentos/inicializacion-pesos-red-neuronal/resultados/2_air_self_noise/boxplot.jl +++ b/Experimentos/inicializacion-pesos-red-neuronal/resultados/2_air_self_noise/boxplot.jl @@ -4,7 +4,9 @@ using PlotlyJS using CSV using DataFrames -limit = 15 +limit = 16 +path = "Memoria/img/7-algoritmo-inicializar-pesos/experimento/" + # Imprimimos tabla bigotes tiempo df = DataFrame(CSV.File("Experimentos/inicializacion-pesos-red-neuronal/resultados/2_air_self_noise/tiempos.csv")) table_df = Tables.matrix(df) @@ -15,7 +17,8 @@ traces = [ ) for i in 1:2 ] -plot(traces, Layout(yaxis_title="Tiempos en segundos", boxmode="group")) +ref = plot(traces, Layout(yaxis_title="Tiempos en segundos", boxmode="group")) +savefig(ref, path*"grafico-bigotes-tiempo.png") @@ -31,7 +34,6 @@ traces = [ for i in 1:2 ] ref = plot(traces, Layout(yaxis_title="Error cuadrático medio", boxmode="group")) -path = "Memoria/img/7-algoritmo-inicializar-pesos/experimento/" savefig(ref, path*"grafico-bigotes-error_entrenamiento.png") diff --git a/Experimentos/inicializacion-pesos-red-neuronal/resultados/2_air_self_noise/error_entrenamiento.csv b/Experimentos/inicializacion-pesos-red-neuronal/resultados/2_air_self_noise/error_entrenamiento.csv index cacc3d2..1b65090 100644 --- a/Experimentos/inicializacion-pesos-red-neuronal/resultados/2_air_self_noise/error_entrenamiento.csv +++ b/Experimentos/inicializacion-pesos-red-neuronal/resultados/2_air_self_noise/error_entrenamiento.csv @@ -1,3 +1,3 @@ -Método,Error entrenamiento 1,Error entrenamiento 2,Error entrenamiento 3,Error entrenamiento 4,Error entrenamiento 5,Error entrenamiento 6,Error entrenamiento 7,Error entrenamiento 8,Error entrenamiento 10,Error entrenamiento 11,Error entrenamiento 12,Error entrenamiento 13,Error entrenamiento 14,Error entrenamiento 15 -Algoritmo inicialización,0.015450959799898878,0.02036560128419838,0.01860506078631223,0.018352257751089094,0.015761799102139915,0.020236180371691323,0.015079277709071862,0.01637952035995003,0.017948717556427896,0.019945557002292474,0.01661533897841697,0.016410412323682545,0.020747917818904223,0.016152577266901332 -Aleatorio y Backpropagation,0.5736027612390292,0.5826000563977665,0.5600209742817601,0.5653315557343409,0.580078355443119,0.5825777614383504,0.5680350947531905,0.5602507170589771,0.5692227107462425,0.5742317756350493,0.5553409036888265,0.5704177573005663,0.5825300293968598,0.575503737651933 +Método,Error entrenamiento 1,Error entrenamiento 2,Error entrenamiento 3,Error entrenamiento 4,Error entrenamiento 5,Error entrenamiento 6,Error entrenamiento 7,Error entrenamiento 8,Error entrenamiento 9,Error entrenamiento 10,Error entrenamiento 11,Error entrenamiento 12,Error entrenamiento 13,Error entrenamiento 14,Error entrenamiento 15 +Algoritmo inicialización,0.016107598186897273,0.01647800254822801,0.01812791557178738,0.017257623459379933,0.009463949251387709,0.01624105112345739,0.021113342327476713,0.014894196938574605,0.01821770963547351,0.020107777634127626,0.01578579107969757,0.015557253101713107,0.01646829428915805,0.019227417163779854,0.018424196762073988 +Aleatorio y Backpropagation,0.5816459121282251,0.570427576256533,0.5695056028289635,0.5749822184014982,0.5642217837837237,0.5665202421492537,0.5644598152096382,0.5671765730113418,0.5722351133614391,0.569825249652263,0.5608383911870397,0.5606055165897957,0.5744724288227865,0.5693031996474518,0.5633344375632706 diff --git a/Experimentos/inicializacion-pesos-red-neuronal/resultados/2_air_self_noise/error_test.csv b/Experimentos/inicializacion-pesos-red-neuronal/resultados/2_air_self_noise/error_test.csv index 48f31e7..668a710 100644 --- a/Experimentos/inicializacion-pesos-red-neuronal/resultados/2_air_self_noise/error_test.csv +++ b/Experimentos/inicializacion-pesos-red-neuronal/resultados/2_air_self_noise/error_test.csv @@ -1,3 +1,3 @@ -Método,Error test 1,Error test 2,Error test 3,Error test 4,Error test 5,Error test 6,Error test 7,Error test 8,Error test 10,Error test 11,Error test 12,Error test 13,Error test 14,Error test 15 -Algoritmo inicialización,0.14361363458933019,0.1952868584354336,0.19220472899724,0.1683389995480742,0.17856461481713004,0.18612887734459227,0.16982422340560807,0.17355884392866447,0.18579240234309696,0.18141534372568374,0.18306141211376106,0.18552791255717482,0.1858214128182375,0.18086872040674148 -Aleatorio y Backpropagation,0.5643861584141527,0.5706002212630735,0.5627847152119381,0.5547920898577808,0.5900153578318377,0.5850165458413752,0.57552149138583,0.5649537672085084,0.5731462593997264,0.5873367827885083,0.5615564715664186,0.5707561662910786,0.5851120099243574,0.5605842055883449 +Método,Error test 1,Error test 2,Error test 3,Error test 4,Error test 5,Error test 6,Error test 7,Error test 8,Error test 9,Error test 10,Error test 11,Error test 12,Error test 13,Error test 14,Error test 15 +Algoritmo inicialización,0.17588948412370906,0.17875654823949128,0.18419165294584916,0.17503805769074474,0.09629487068340489,0.19059518504888087,0.19183625841162658,0.1722885027498988,0.1713092810998448,0.1827866390536342,0.16128499901538002,0.17872752239512982,0.16294055592022383,0.17542024363205286,0.1696798512522527 +Aleatorio y Backpropagation,0.5609455010263698,0.5707365283791447,0.5725804752342845,0.5616272440892142,0.583148113324764,0.5785511965937034,0.5565355709071861,0.5772385348695276,0.567121454169333,0.5719411815876849,0.5505614965699921,0.5642441681468707,0.5626468232466384,0.5729852815973077,0.5587863261999214 diff --git a/Experimentos/inicializacion-pesos-red-neuronal/resultados/2_air_self_noise/tiempos.csv b/Experimentos/inicializacion-pesos-red-neuronal/resultados/2_air_self_noise/tiempos.csv index 506410b..2b510ef 100644 --- a/Experimentos/inicializacion-pesos-red-neuronal/resultados/2_air_self_noise/tiempos.csv +++ b/Experimentos/inicializacion-pesos-red-neuronal/resultados/2_air_self_noise/tiempos.csv @@ -1,3 +1,3 @@ Método,Tiempo 1,Tiempo 2,Tiempo 3,Tiempo 4,Tiempo 5,Tiempo 6,Tiempo 7,Tiempo 8,Tiempo 9,Tiempo 10,Tiempo 11,Tiempo 12,Tiempo 13,Tiempo 14,Tiempo 15 -Algoritmo inicialización,0.280130667,0.031966917,0.029628,0.029863333,0.030343125,0.028553916,0.03003475,0.029669458,0.029901208,0.030641167,0.031136792,0.037132541,0.031221875,0.030699292,0.031155541 -Aleatorio y Backpropagation,5.366532833,5.172576834,5.177351333999999,5.186061585,5.173411708,5.177390875,5.1838067500000005,5.1901663749999996,4.33286925,5.211625875,5.234351875,5.2140365829999995,5.210080457,5.2404547909999994,5.231090040999999 +Algoritmo inicialización,0.274179917,0.029524292,0.028009,0.028225333,0.025599417,0.027982792,0.027176875,0.027351292,0.02704025,0.028919541,0.027076209,0.028476375,0.026853334,0.027311125,0.028777917 +Aleatorio y Backpropagation,6.203886915,5.063537042,5.082766249,6.014708251,5.128079959000001,5.120265001,5.071514540999999,5.10520071,5.961476874000001,5.022621415,5.022854251,5.073831126000001,5.064733208000001,5.147634583,5.179978751 diff --git a/Memoria/capitulos/5-Estudio_experimental/2_descripcion_inicializacion-pesos.tex b/Memoria/capitulos/5-Estudio_experimental/2_descripcion_inicializacion-pesos.tex index 11a6a85..b622081 100644 --- a/Memoria/capitulos/5-Estudio_experimental/2_descripcion_inicializacion-pesos.tex +++ b/Memoria/capitulos/5-Estudio_experimental/2_descripcion_inicializacion-pesos.tex @@ -72,7 +72,11 @@ \section{Descripción del método propuesto} independiente e idénticamente distribuida de los datos. Como apunta la demostración, debe encontrarse un -$p \in \R^d$ satisfaciendo que $p \cdot (x_i-x_j) \neq 0$ para cualesquiera +$p \in \R^d$ satisfaciendo que +\begin{equation} + p \cdot (x_i-x_j) \neq 0 +\end{equation} +para cualesquiera atributos $x_i,x_j$ distintos de $\Lambda$. Es decir que se estaría considerando un vector que no diff --git a/Memoria/capitulos/5-Estudio_experimental/3_algoritmo-inicializacion-pesos.tex b/Memoria/capitulos/5-Estudio_experimental/3_algoritmo-inicializacion-pesos.tex index 5388df6..2b2c95c 100644 --- a/Memoria/capitulos/5-Estudio_experimental/3_algoritmo-inicializacion-pesos.tex +++ b/Memoria/capitulos/5-Estudio_experimental/3_algoritmo-inicializacion-pesos.tex @@ -28,7 +28,7 @@ \subsection{Descripción experimento} \item Dado un conjunto de datos de entrenamiento $\D$ se separará el conjunto en: \begin{itemize} \item $\D_i$ \textbf{Conjunto de - datos de inicialización.} Debe de ser mayor que + datos de entrenamiento e inicialización.} Debe de ser mayor que $n$ y lo suficientemente grande para que el algoritmo diseñado funcione correctamente. \item $\D_t$ \textbf{Conjunto de @@ -55,7 +55,7 @@ \subsection{Descripción experimento} \end{itemize} % Paso 2: Evaluación del error -\item Con los datos de entrenamiento $D_i$ y el algoritmo de aprendizaje de \textit{Backpropagation}se entrenará la neuronal inicializada aleatoriamente hasta que iguale o supere el error $\varepsilon_i$. Además puesto que puede darse el caso de quedar estancados en un mínimo local o que oscile entorno a un mínimo (ver propiedades del gradiente descendente \ref{ch05:gradiente-descentente}) +\item Con los datos de entrenamiento $D_i$ y el algoritmo de aprendizaje de \textit{Backpropagation} se entrenará la neuronal inicializada aleatoriamente hasta que iguale o supere el error $\varepsilon_i$. Además puesto que puede darse el caso de quedar estancados en un mínimo local o que oscile entorno a un mínimo si el $\eta$ no es lo suficientemente pequeño (ver propiedades del gradiente descendente \ref{ch05:gradiente-descentente}) superior al error encontrado con el algoritmo de inicialización de pesos, se ha añadido también como criterio de parada el que error se estanque o empeore durante 5 iteraciones consecutivas. Se medirá el tiempo que necesita hasta su fin $t_b$ y el error en entrenamiento y test. @@ -135,4 +135,14 @@ \subsubsection{Implementación del experimento} Deberá de implementarse una función que realice el experimento tal cual hemos descrito en \ref{ch07:experimento-1}. -% Se ha eliminado el contenido de aquí anterior porque eran notas en sucio \ No newline at end of file +\subsection{Resultados obtenidos} + +Concretamente de el experimentos se ha realizado con $\frac{3}{4}|\mathcal{D}|$ de datos de entrenamiento +y el resto de test, se ha repetido además $15$ veces. + +Durante cada iteración los datos del conjunto han sido desordenados. + +Los resultados obtenidos han sido los siguientes: + +Y donde el test de los signos de Wilcoxon ha rechazado la hipótesis nula con un $95\%$ de confianza. + diff --git a/Memoria/img/7-algoritmo-inicializar-pesos/experimento/grafico-bigotes-error_entrenamiento.png b/Memoria/img/7-algoritmo-inicializar-pesos/experimento/grafico-bigotes-error_entrenamiento.png index 92403c44432346363c451080e530ad5dcd3cbd04..e7bc2327fca976335b6f68b54e73b2d650f2f6fe 100644 GIT binary patch literal 28825 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

  • 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

    hN1| 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 z zXVVRlNX#Ca`d8y$LYrM?V%81!>6hs!1@p*9xG@JylXTs=9=m0F;jF$R+~lLHbx7B# ztCrBw0r#lh($qec{g5_zgRWmFZT=0xjzhhyM&#^ zy;E^EgDNYs7x#heK~A;ACLvHc18~hs;BGm*gaWUAwO93mrW2?9J`Md&09gcY)#n>jEBb}ro)3Ml0i&STl}Z~wXD z|A@&dbg+E)F*wMfBLL)e^Y&0=PztNd+}kI_mc-JN9RtK-_e3PM#2^c6{xV7Ai9a_6 zKN0f~-=Z%QlRxnsw|N}6il{hwd5;#O#r}{mnCPA5bI42bBT{rhJu{Vu-yM)b_>F1N zF{o>dVke4W8UJm}R{d`s!I<6HSP*3^3xf_zd2!4p`wT^8PF0uB9grIyy`=A_?|W8? zZwmDbP*Utf_P^5V`(z=`HDC!qdHRXWi-`Lu#wuU1xg?U5AM)ho&+8 z(mX0Ncy?rlbw@uYAtG(D*}K3)c0q93TRaC{EUkSZ-rB(u=b^5do+Jauu!E5^;IQJO zRpwx5K&$2b`O3kauGpO9Yb57hB+oFoLD%R`a+|7-X#C1M;1CSB8W;v3co3FC5M}s}RA$@!FEz1}T*@{pVa881p8bvNjlV{}4 zF%#2PwggOhq)@fM(3Bn-CjHXuoB=pMh(a!(aYsX}9Y3jL%EpnfK83}!v%z=Uk})vt z5Ea;k4aJDaX7gq01uVjPvv@i>eBUl`0mX#tCivV?*F`H^;Nw5v#lWxmWOPkh{PUat h9QdE%`G2=4a74lFsrXb50AvJssVZqbfh)WW{Vxzir-1+f literal 31774 zcmeEuc|4SF+jk*biIU0^N(f142-y;{7sfUj%D(UWI!P*_#lDt(8)Fy7Qi{TmWoGP4 zvNs4r_V>K}e)sd<&-2{(`+5I)-@l%J`h4heUFUT!$8mg@<9dEiTa|&HjsD1yBMfSH z@8}*mLV-PU&KzF)*Y#P)XtB|pNa=|G_#L>x$^W^*|IESv>;qcv z{~vRp7NPUt5#L`Y?$uS)Q41@>Q#3Lx;LrQfY4q=4}-W6&8$9+=J zEj4gInfOQf!vdTnUctGnLh$v@3nKW@>{EaUhiaBp?^sMdv{(N%f>-Ac}o#ys`K?w z=~VA*x|xEG+cdnAwMcaN`lMU);rr*+JhhS^gmyXykNf8vAjr1E_p}z_8qQ_a4dd~s z8pHuz`>Ay0Qx{S`Of2X3KbRUP6}NF-<+8bM4_hoKefeJSl}N(AockyGFX$A!?*1() zbO0T;I<4sj2UvlXlu${^WpTBU%+g;)&WeCOf*C0W|(a(Pw9pVse(WC?t5>V92U zq)At0zxuK*4cF8^2G9L~bQ!)!b0C*H`F3WpVGPa8@G{-@>%e?u<;LQ2rR}!N^Ro%D z0V1Z+{S7(|g`$+wg{v(rr>}Yt9^*}#?DBGB=HBDR_p=k~8G2fIE#hQvX=FO7bulcp za~|xU-mA1}YCSoZm`M`d?`=W54-c&@}T|U3JNFd9hJL)wZ`oNnX({rZ(b} zhij4r(s-`2{SDZ33rn5ve0hB5dGkHo>JT~P;Av<0VTx1GJ=Pn3*@;D>U^;0hv*yMh zv6bKoiy9M8PRjzcxf zw5E5bznnI!)oyQ)biQM^=|ZEQZ;rI;cq8x)wYeLvA?>>IOnuy7U`lb^bZ}??W_F;T zyP(F*#P*G9VM>hgB&;b>R_2DcR^bx^UtG6J)2Jexv$m~neD@9BaXVKoX`@;_;Yx8< zo(TVJNX&ZL!*yf4n`*C#9#E?8`u$g|(r;9;rd&FD&%!DtN! z>$cbw&9#j-ArQO^1mAx8dcO7K5EN{f!{6JnSe}uyCjrrDNVu9*xm$q~d?lGzRcd8$ zZT6aR-iTBSzC_uSc;KRwzn?;5|7A#6Y#27SFrwc?lFyc;);7TLbM>bxJD?E=iQ@O$ zRh%{Z%ZZ!G@+k@9s+!3B(WbqE+sE9CzOBL0a)~U9&!VHya-GNzD&jNfH+~Ucf3ozA z6O-}P2Kp8yE6Ea@95eQBY$FumLg_e)Ub@?~^aYCU(w7Y|&*xS&J)by>5DH%O-kee^>e1jq7X+(ulE zgM_hFWk5l6mC;;mM?8x7YjU(=Sx1Yr7snRyd1EEn>~h8GaHb+TBt+ogX0{2A=Z4QC zuDJR=gX$YMtt9#wp(qnUp*_%RzAv!fBYoip)`gu#@Ku}139*AtvqImC8e-NHrj_<# z{tW54*U$@#?*o><7kVLJPF?DImBG0ziA9qBrarNPxz^;2UP+nYo)1ZprppBEMk{Sl z)pP*7$TOpT{Qf8Z$-tphmJ-tG9;*}|kKUZ)_X|#kSJ_TeGbCLn(q}M^8+OrqI!HR! zwEHg2tCB|<11il2{e!A(D=%S?8m0RwdCHyNYZnv7@e@`11OqB&_XFubO-dCUA=hfE z_{jOSF?q%d_sJ@<#i59rR-WxCOi1Ng-grL-aXjfum2p$`R$x})yc%{k2 z_Tvtf4#QTRtHDES5eqd7Max9(zHfT7>%_?{1HG7xTj*;+ZAE=T-HUN5Fy^b>PvFc0 zGL?bajQe@T5Z36yOH*u zwUP-J#^b4(KQ)e3caR_ZdtS(u^H6RItXd8GNZ_1!vY?|rvG+TYwL}&jb88s6XBMIs zBd>qaU;?(|H!Eyv6aFiu`yhtZH|rcRc%K{^op#H~>Qw?eUcbU0|0wR9_=-xCeh6vX zt7=K~!F$$ThfbLbrg=I^U+Vs}iwkvx)6ew0OUJY>Sa+7=e2#Y#x-T}E=|u@{A~uuY zo9N+?>ix$a6<+I2Ph3o-wI>I~c2;WI1K@*VE6LM4W#VV;eiY}#Yvz`|Oum&}BsgN+ zyS?`6w+Ad_(BBCG>)Ebgol6hPH3_j0HEg^kb)(!&W|Z9I5#VQs3t)cv<`jrddGt3g zu6WPMn#g#Q@XRs$_2g!%cOJ7M_Iqtvmiw%?X6P|=s5E4O4Z38E!&lyTD^5id`Hms7 z?ZeYy$GGcO49mj=dhBMbkR94U#Z0tATYUnCpwpa-K8dx4Z>1MvjE0$U8b);ZjFDzU zmK&o({S&$fQA5js6N#2Au$!6iRJ#ixW?#3fh9$zMGQ-ypk?vaQMfT`-b%@ERlh~}h zpkkH`m!92kL1>nlIoE}fTg;Z@wwsv_4>H-$g1>}YSNOZ^yPH>+Bz8D5&r9wG2?>pI z_+}kU@6IHgC+*fdb~LjyI7i=*@>?igoyD;%Z`DgOb`Gwc^P2p`JKdckP8jc`#d@cI zs=NT@)0ogv%H?_SS+Xn1o1mKLKK<4DVlw`VT1A50%vVYM-%G<5$B=9Lnka1T1Cf_) z4<`2>^_{F*lu{Qpq{6jZB)w5CW{x|396OUSlo7Bc>|`eX#bodX5qHsXr=-EYH&_9S z+FW@(MMqdJXqNH(aVw~5D?m6XzfJ69LqG4xqz~m>Z#Vh4*lrjaqNY0$Vztr5#OB3} z1BTyzXewmJTfK__W10sXt*03a?`W#5rc%Mos4(7L(+=}=culd;mt$PqTyIHMX%Kg> zMmiX1__V}_J16$7BiNbMr&mVjrh+LF6(7TzRSrL-#eRr zcA0G}7Yj4c9UH^eR`44&G5|H_75jwZ8ywu z5`+$GI9E}=OVc>dT0*!4&Yu6gFXMs7r=bYPXgl#d^`s7Lv(H{@6jg_~SsF~_H$&hW z%cAlp7oVk`t;mGprqs_PEe`t>Z+Jaa$n(7;Y?!W~R%4PlKk}5X(}BFI+TszEq@DH% zs2;kQ?>0TEHk9!qq4-(igqjQ&R}3e;8L`#@3gI#?705>~{F1nD`HpZnJrGkd-HECh zi}S1cEl!BE%gPJBT9KS0>2oqp5NR}HRWU~jGjrY_qxYT}(DA5pHqjuN6*}yV^Q|N& z)FOj_+Zn=1JSw&A(MY${>kiM!9&4*Z>Ej3GpDfppFG$iLD@@Bi9aP^)-1|s}4_V_7 z9j0s?_|Re!K3Wyf#8$bKml)uSi>L1MUJECHT54SCHLrxbJSRbFMJH~VRYWJ?yWZLVB z%0GP=v<*(8`(uNNKu9`ANjc7&u0o{7Vp)`6$2KD-)L=c1kvi70E|5zuW6p!m*J>M# z<}zr1aBRr=s7I+VL5{sV4QPr{DzS!*Y{QhmoV9zVA}pI>3P^OnYB;F6sM`|=k93n6 z^|Q57TB~?n+ao&2_;{`dBF|C+aIyy+G6kuF6~-dr{F`Ev!mA5#;u!v?T*lD$Ta%1} zHb>akbm5BO?lt5GUt?<_t96Y)HR0jWpyzQm`xLI*zm7Qsyci52Es5=TC@J;j4cx5S zTOqDdAsZ`aFtw@;wA@TbDCQFyGJYCl50|UhX>-O^*{7_HpEEmMUm~j?#WME!)uY{8 z+ZGR627MM`kOh!*F6Rqb_3K5j#_t`5Xr6Z^# zr)V#X!7m1cyn1Ws^j3)k?gU|-Ji3wq2SY}+9*=K+UmfAsRl_dGxV3I48-=^`dTH#B zd=q#aaB3yx2r8j@vF4lV7h3KKF;y#3SVY`N*OFR=C&>xWFVoeQR(P0~tPxXf>EC9}jYOKHek~%z7 z=a@)p&OE)GBY8IxM24(8s8Eu%Je_;Ae{@2dH73a8zp|`BP|H{FoMoDI3%H7W|ZkiI(qh zS`ueuf|Q$k0B{^X35LBqzkQ%}pTE5OU^9#I0a%45=#@K`sR4m?2M}1psCDZJEyJ0m z%U&}>A~NV5EQ@c`&ZOZY<*}Mke~mXoQ@E6C$hyoEti9g?VV%yz+O>0JvSj`GPm9f= z@;!my5?r&_%@RA#oK1eyCcA$En$O>A$|x|OTt_J|E~5>szT$G@m(O>tGrX@U|C!qVWXyfA6c6KO@I66%zI$^8vv-UnbD@h zj{h1!pG~6?01(@L>qnnG@<1SlddzHt^ZOcRy{D@?S1@SXQ-Cd-T{5$Br-o8c|2l@; zbKC{Vw<3Wy)WQpn@~@Refx-#^nx@`OhrFDdr8G(t4OzM#xbwfCE)}`f!*0!rJm^J* zsp@Z6e-iLs`+1YumkyhrsuK$$VelF5mF=_R0;rnq@2muQ*>l3NIt~PvzRdaM&+NWg znVC02=Fjvd-j2r`aESeCwg)Xsx~f&Es2PQw#>9+dAKae8x*4_%UR? z-E-|xti9n5rcln?B~{IW!X?iz-4I>Kh>%A#1gAjdIj*D4csfM_msrzoa!evb&GwHY zO9P>}x;IZ3(Wc?f5!a8c$?RblX8C!T-FMgDnOuL-jrYNYrfBAB-EDs5`Z7V z+nBK;KMkTWXRZk5Mxh;E-u9O&s4L~tqKBJVd+nv6PAo7BZ; zO3Dp(aW+|)2epNR7XBtqqD3FTwYGbm#ep?W_uK3vjX!2c*yPZ&e9ihbSe~yPr3zIO zc#nxQK{py}Zr|?ZyJ-zjO)tP~H8UN(u#~Gc-Xi#(J(hOgUkS<3b{eqEZNqys5-|DQuUHG$zmEdU)p!;?WPYr*K&f8Hw2moG@V=2l<47)` zPT-po4Eo$I+EK~dW%M)MIXx~u-%HGb4a11rLT2e4{w1wh?TMoL!t8`s#)_%1y1ac4 zLxG0K4BDV7;#ru3dCgJ7% z=#}E%)MEk5g6R6?t9Id?F>+fYg?ZX!)#3oHuM&G#9$b&vm-f^r1w;}4_{bm-oSLrU z4=a>9X4fY|+U@&ln|}j6H1|&5c9Oxk z)~hBG;dXnRYzo0;tl-q!bGCiGZqoigV$+>^G%z(z`Q^Nkf+1t6(g91E08TBMuLlKKhli?Gs-Fq@korP$+6s?c0GZJ_`c@FImzxxo@C0Q{tH8r1VsX z`k-L9Qa^kD%K{pfz3EVRe>!+^)|$n0aU;V5t*t8WyU;1MSK}R^#W4bp88PcJ$iL$R?(X6GXfcWW4fBdF^bDJ3Qep;|8*Iii2xbzU?K_F{8DH1G6%UMK zb3RfL=9<}A{a_zO#ZjA!PW8o2XObKMtBDBN5?lLNydCi45=5wq#$2I1N=2a%s&jnD zn<=&Q)A0LEThc(4q0X)CWqDG{ciU>A;sf8>4p;oxaHYGlRf^zVrPUuh) zQqX4Xh&@~^*?l9n_d$I-J?64m@k+X!2a=KKoJU4AIuIWc}$Ke6F$6qN;Vs5@1!zC@^$)yBl`nt1(HL-w(pE(jw&E zmd!Z58iI(?rfO5q!Iw|3rQLs7K1OX;KdPB~Z{mc;TU0oGdSHCIiPFD)?Z{g(2G3%IRp5TxNtrh~3}#3&8xnx`Xs`gSjX_ zWz5RPukT-nE}2(rVu#n@iy|z)(SY3Q56FFkbTE+_YfgF4G`G4SzvlaxBpG5Ss#xu? zxNWdzK|NN*Ufr>K%&xE8jetaWBsD$xd;;6|w5fzJ0sI`0)g04si+>v3(yg zSPiF~n*c0k?J9t6OiUENCds7h13}?FldB>y`-R&?d*@2z-{6hl9hQjlS*7VHj?=0z zt8y%OB)#74Cj6jr%%lMJu-x+Z?S)l)*(8gvoyc*H!3rakfAp7YJ6G|K>G z0cTpSO*tO;#eZ^fI4z(!Zu(L9YCRz66wI37@^AZYuq!OV^3ONHZNu!kS?uk(DMnNC(F;(p@}ZFwYLzxUjXPpCtQvMhwB+itSV6eKDG8%C}OzbZ$AG z+QTGtP~zc+Z?bID&Pk5ybV&$^6&Li4S{WGdcbV8X6rXMAU#rL?rn)}V*1jI#uJu83GU#{SLGV_W(TOFzy0Xi+B0zPnlk(oO#EXUr z{qzp5O0Uv&q-Y#mFyHO8LQ>txGf(WGLNc%7SZjI`q^{x6;|IuX4?`#x1hLAJErQDI zB35U*-s^rjju5$!jJ`BOMN61T7T zO0H1KXA$(?uTc^77k>L{+0>hU1nHpWCpB{&yFL}?Btym?sApVTB7WCA{}StuCwEWI zNO@ofraN8>oP=3pY;0|}jjZZYj`2;Th(8)`(wD?DfB9u28?c}0_32Jv!dAz}`HFMJ z=u3Q;`8~lgPWA}yPHiy1uoyQW-ZTAWHX(ME`J?5he|P~#s>ZRg@e)pK#10SZm?c9* zujl~1)tC6jKiVIzcc-xU^exYwTX9|raBsber)0@G0$?NY?b`Elu%luifb;`^ zV!j&wvF%D%_u*6dn<*B3NL#!PP`~)ry0=lDUuq&GVI&PLKWj{dF}^8FU(~ejv>gd8 zA+%~8@N`rJy5EuqBvCaVP~FV=Sflrm9ksc-YbUU9r*-=`S6N)7Y;vnFAfNn`8 zO^9By#yQWddv40%R$A>mbtVU}(JT6w)Ha7meAPDwoIcySTt7}_IRT5%OL2kM01bf+ zA9Q2IplpooD4k!`&|Q5P{(&3I|jP^qsbw)?d21?hUoCURMjX?1b)`PkcJ z_Ra-o{oJbs0+-A)cvq-@egA%)>IW@&iL@ri2J0?FP8`<>Z`g;R&sSK49w?Y1+V*FB z))}nBB|T=YFV+)|txf9!Wk>%tV%1n)0u+%<#FCBD+e+edW2-rEw5~F-(VRl0iS^KT z@{NUih0pNi&Z(6Q1qJG{0xtCTJhMP%hvSb2yHj}e5`l)ti6MMojf|DJjLyu=_5$h- zK%VQr`-2VUAWq8wbI`g?*qG$uKLnO#+AL7j66dww3qOcD0)y07+5uf|je({Eif;g) zqC}Wpp(J^Qu%ZPRWJ9jKh_~U}*}_8Qumv}j$+vN41)BkVy~g5dICB#|N{+ZJLr zLlqS0EIVSay&F=p0GqA>8ta@aRz^OhaDDz@k1N)mp}xqjq0o7AWo+cjITLc91;DU? zacrC4dy1~_uWP#=RO4SR_SAYJ2NtY!=+k*4+#LVZ^6hVcnVD(7HV6FfWq}uusml&Y z^hf?q?R8z+Rj!)5WdtD4JxIRpR#L5Wo;tbs)EAx2xPe`QdRzy%`Ky9oO#_Ux*5!5=di^0tCDTE^HJ-zgfRgrE7EAk>vGc+Kp2KOh3*U>FNnSJ6m8{y=)owy0e0iG?^`LW4-k>B&i?T8l+dNX6`vK$j}(DTyoTT(p0(^p;yg)w7qf#ss*tWfULU^ z;O{IC(Q(A!iukk88G`aCL#X0AI@-(kq5Ek4(4Ulmv}aTzc$pc<;{lC^B#y8XfNrAz zZgYg~MDk;WOVG=TG+hP{JwhSC#J!SxBubTOebKegKuG-{|<^twud*9{H5Ghua> z+nnntf_m&B^DK~gPuebgUy5JvnaU&oSxYNc090Gg&27Gw4R#4V_Omh1eJsJUB$fW< z!#M+9=iN&xk^;9IbO+}>{wu1!XF;_6u`qcdF4l5tI6TH^*!a*mxeGw*CwXZLo@(K+6T;m)eSO>N_&FR3MFA zGw*120N#m6d*Gwc?xkPGoyaKORc{ziDFNbhg@GRrX6){R7k>?d>Dk3s7lTZ0fuqbv zQGEhy&A6N%6k-pm%CjDi0(@OKBN-4r1zs@^x1GtBRwr=H@zg1r2FcH%UGnA#f{nuN zhV5|*y5j?4EBglm45tJQb3dqPndZki)O^skOO!g$OUnA%DR6RT+qTCf?%I7LD-D*u zB#&8q!@->#opYJDKC3k3Ma8?|)OyS&2r*Bzcd5U>`H-g%+W ztV&UR5}Ph|X~kdtjXQMcC%|c^?l$Vv+X3r1*y38QtoXihpna@tzDyyyN8UKSCPdtOEIg?XG!I(B`zzZKU4^}b9pCj{!9syfVN zH&wvaNPM5oqsToWv9dJOV8&pwSwYK*-8?ycqPq|`zLyOs*?C~;hCGcQ`!S91G390{f9tQSPZ_3&^(|Pd> zv`;8#v8e0xl}ABXElmKq8#$%y5Qb=Wnh5$ixM6RCNv=v}UxR1~xYKv7incp*fO@*{ zUUkCj^Yvaj=&5zbf7{8pE`_kZ$KHLRdRllXF~ocsK0*^)3$r)qf*PS8!QUSKTvFthQWbnVwY&o zNYtDlU%zsgtrVeD`&cnIGWyirb&fHO1Rk%sWs5ov)&dGY4*@`HMb8I%sse8|yRJ0A zMzp@BU@g2J2`V&OP?S+DS1l4*SpDD+S(PqSm|hgnr5ek=;>HNYe+5mD($|h2-J$(V zj|C7URw~+YnkEe5d(g-xoRf}(FniugaZ+M!ai-(QPcr7aNFo8%K5<>c|=I zA``A5yw>N39*{E%Vr_$F1}be3>%dqhRHRX~P1pmDB*TcYtf^b|LAWzTj8tQHjBBB# zR+xY^K|KmE;>&drL@ra&ou^#rK1C9;FiXWN+-CA6xz4)C;sdd_GA= zEaQ&zVChq#mEgunnFcA>7iYD%HapyU3;`lBK}gbK_s?4`Kq>kcs1B<(|MYB6oPNgQ z3l+b>^!fJkD}KWd#Eq?gLQ<08ra%Wk0Kf?3*m)xL+3Onw0d88Fhi>f z;-*w+sPM5z$Hq+SHy3{vR2Znr?fw)`t9MmHr}V$Tmw{X_05k)(O=p`No!PW=-#WLN zGJ=0=6${f^%e%yDK3o_^`*F-kMH202usX01U9)hTj$&ZU0&kUTRzwW3Xt4D8^OX)~ zwjGWv)`M)MMpj7)Qy&iZIMdx|g`vu>KYw)Hw>ukX2jI;l&M_05f8kPJOrhUi-Xk(8 zQcI@4WcG@asi>l{ScG5B_&3u@G@-Qq#o6|};TNNis%%Ka;W(HEp99M#2pLnAzyC83 zlh4}^5{>?=zX6p^|FiqGXhDrT7X|GfV{jX-+Rel0Pg0b zPhutr>fphE=7mOMSWuCN9!57YVYc%>;X0h%X-2$#QR0EHwT1IZYzse*SSclBS~CK# zegar~lJpNiSmNJjyFvl)H3)dBCxz17^A#S?g55W&TqH4u> zYnFf2&OO5km)+&>JIlL z3v#V*tApV1^-nG2gpOPU%H@?zJ?3y5+^_SuDKHjK-$X+Ll>;bi`(^SArn^-NnX@Y@ zDoFgtkZ8pFntS`V+~kH{Eu5uNI0|6id8%Y^HSK^VSjCE?S+$D7uWTn8+<4T_T|>SI z`x(1epKC!i_HO^eyEP~ay#O;W@M!8H)$S!wJ8*8#erWA}Pz*B*W_Qp~@)VL3W}i)T zVxU4cb;=4tMWQ1VrO7Kjf4G^!sjFYVfMGy{+ykQPm5}sQfP0*-Ci8Rc#q{Rs%+g+? z!0|&S)(0A~f1avF+i^gR$$$1dq!&Jbtu~c?=2<9_3T!n}{YIhM&e3gi$0vZjK9zU$ z*y@b#P^BG~aNX=INaQ&ZUJ&er(5AEn$GoyDv|=3tw;6?^USXE|A|cR9r?(vQy11Bk;tp$GPY zPHn*nls+_Q(BMD-hK2&IilKtS=97%fzNG8wm503>R{>@-kD@^c%_$-=FB|o(D-_ zh$i#XkLj>T>RexFKcT>=X-*27x)*~@JS_Jpmf$opSv`fVoEeZ(Z2PPF0fmef#pxPu zCTffj92ELNK=-H3)(5d%%MRro7%j};%>f&F z3HH<<5HuFeLhMz!A>v1kYV4;b>k_mnn687LXO8~Aryc%pisREIm&8^JwbP_rg3j}3 zCCAo8BoKDxVsAj>EKLJj$6HAyEX)YJ-`_4go1R;~%NN>N)8Q#iJ8Jwo8GS-g_JzO( zy%QxYD5%bCEsO`0XR*Z3&UCm1jkoSrIqzwwzGvT#-ymnP3}FMYVJ9OQ&{ftASQmPP0%G3!!)%g4ENFZ*VS`~T{qh&1!B0}`eEh;yiQ z%zS}+%{k(nU54$KA>4N0*b0?l`Z@H_J7id%u@m3Qw$)rd)Pv*t61;?{lA7vc1@IF8 zhnjou_Kkn)k|{ix``zacG+dLLIT`J-SJ_-rs!1bgz)$NRED86c52z?GW-8I@5YsUW zkYk#7{QBoDC>|Rt;?A5c{H9d*Mc1g>`t8{Ho5mg14Mjhc>HjEyr6O=l8lUMYdtS6J zBM2h`qsC$xO-GwuA4ClA3I*LL50RPfNK>jp+yQ7*%v~R132p+8ZZWkio4@NEh$82% znqeB1Y!*P|GYatacw!T0%xhX_okc&>fv#m9SI0*_DtI3RLOHVgDD*CO2-p>eoU}{ zSt2?Ql+abg+umI!)WKSjqr~y_{LZA7{yYuwrh>hH!*^_?=y5nV{uu6UF0%|~R~J0& zPy?W$iuAo_h5HP+EmR0cuH?m%2?=o*M#U0fFaa~xorYk=5cf3Lp0 zY7;i&^|zTsIB~=fkS=RQpFxY2^k4q$xI&R8U{54I%symy<3T7voMewW3FUH#_NMPR zUkEhTwoKzH=OV9Yl8r}1q51wuv^mee3&G1GMrhz-x}RV`CJ#_f$H~}y0DU#aS-HWE z@DG86clzkU+(JBOFz`%2y!Ya;90KGDJ5`wGxeGiX>;hMdDW*wQZN>_l1arfOd zL7yFTv?9nL)>r0fp`b4gf_`^?0WC`Z_+|gAgCJA%EsgK@11kl*@}AtN;ro~6mM1m5 zzM%90efdfytQyLK8&I)fk!s6Jp~BtM%zi?XYRvq+)%G)RB76OQG zP4+7TQfyn^0m7yY_vLrXyPZa70+AjZiOe9aGON6ngKpRerBy=85YyeLW-XKt=BZ|4 z(PYrD{a|v`5V>R7xr1}0hy^7HTfGHQNZjTQVASY{m{yu3K$l&X6Xvjdo4y3m-sxau z{cL?3YJkTBq^2lc6o5I@CJi%{y_f@VSi z+>??f?wXVV_eY)M3BsnD7#R9O(Hbx(8RX1L+X4DhP_I0n#~gs<^D5F1YyL+cysVzH zpb|Hn!i{2CB!F>l0q@}Nvio4vBs+8gAJ_>;Nu>}2?MPY5fPXxcw3P}48Dk^puqd(9 zmB6?IqAQ4kau&)Or=BtUa`{y^fDX7>gVsRb%;`v-A^>$bvH;`oFL(}c`R1P6T|KAQon?!cFSBMn`{7Az{vv3T9V1fS6Q~S9cV35A1Lz6_mu`ut4e?a=_X;xgP%v zm`Dnz-W3d4O4)c>s=L5buf{ z1wlnGAQ^Y@mEh4D5p+YpUnxLvXdnMd{iexfhrVhqe3p|^5MUI9jT`PG3^nh?cRu_- zaz(Y?Mf-miT^y`7p)9yGJyyb~>*=uf*yKk3()k=GM)1LazrG6~`!7pwa3}(P4hWb& ze|e~+#wB*sAJi?2uv|+tG_J5z|M%w{WN1>aPij@BjK@#*=mY>Ef}hQEL+8c~oSQZ^ z0j8rEsBB!0O38BZUaHo%aotv)@Y<&BlZR5k8iQ((a`T7>^ zhh9l&W@l8%pH95cSBas;=04 zj^gMAUzd?*y`cR#7DU|M@F$lS-1a~5f(B)6AhGDpXsV4nD}pL1{=Za73dPOCA)l{0 z?OGeYF>%p$S()*}f~E^3WCs4Ck$~R#o2xqGGTbQ}HPo1879u|fl=;i6>?Ae;&@o5= znek+UYMY<;PO<@tItBvkd&eg=U}>;i}u;3@UCcpFez>nII`iS zJWhj;fwfih!(8~fHdjanf*Ll0PHy2)dOtYI41UIAffU7nBK~j20;ESyGymDEM{5vl zY=HKR5F9Ijbm@iPyH<-Z>!CK28uKR*c4A?us2iTaof;~$egQRd~cun{0hFH{1gKECoiB6bnOjjlml4w<_gJdoAKiA6vjR)hCGq%jPBvFW}qp;J2W z=M$C}IL`5B(OSjj+NqK2Dw0>2LHt!{{zy?Uk226TL|S+(vue%~JNrcc4& ztMKt|i)pgkDKUdjcD+fKT8O%wmip>VdX8tfWL=5)?6tY)+ot$>4`zJfwreV1VEL*L zIoPGH(M$%n&=U7`QNWI``*32Z$`ov$e%4{6f5cfA4Xg-Iv0(`YvI@8BN8*~pq8?AP;z?fi(Hpl#f z<#OOr`v{d(9>)fHCq~M0Y`TCg!NXSsbWgm%BMMZ9pZbfY>#+gfeLm!m8OK)+8JSf>RO zxl#>M>+q-8n9y0O(+t>|uNdGP|6I@$c;XYs{50BOwDp3RNTISBV9f7>eq^JNTOJ#a zIScUyJqJ!iktRf*bRv9iuH(scF1gS+ghS4*F&Ae%zddMbr2$p1B|KfU*fBQc_Crqq zC`P@O271M3p(v;tou(Us%py;v@BQBJhuo7I=403rv!?eU(P{c)4+fcKDIiRi*PWg~ zH@CGmQ*PjDflR>MSpXzld$QD9(2Vh%EKY%uRDE3z#V#8l*``UAthXltAmajZ$Ko2M zv1+6FB&Ve6^15vSsAtgl-d#Tr`;q#zsVD07r%(Bkq}?mop=rnf(-5-J|5Cvn1XQF4 z!5J87bl=XV>xUO&Z0C0<;hDCI%1!q+aP80AQw1#C7mt74p~D`Px_W~i{5h>HfcpxJ zj8RJ55Vho>t!xWAKnf2ud4aLSWSQ)o)5cZEz2-)X#h|q$49k)tC4^_&a(7D z3v!(UR5HJww8loLi2`bgrIXwBjI&({{Hp)9KmzALRcFVDAcdurncvCSoc|)>QeW8_ zapmcz)8hGmo$wSg+ukS>OMMO$owk;2AmGKae2s+X`KCKsWO)`)34G^k4$;rE=8nsd zE~9o5yD_i3icp`>YGl=c4$8-Cpm5q?RX8AB21RvrO4(hR;BB0fnF`sZTY$lv&2H#W zFrK&%5}~S;z=@+6dawmRTSaflsGGcW8IYO*=jg$|aX+{89!8?eFuVeEG1)CBf|QiX z1GY_m-`-=sG$YB()Gby+I#8+f(e?2VjYy6X*b zfwIGy3Gv-tq_^_xp;D`PNQ~>YC!zc3HM}C*B=y9>J*gSyB zMXN2FSAcDypybv)dLZQfH>rzz5W$vuS7pNMM}99q6z1wdQLwzND@~CO0l0s{g=I+X zfISk}j8d8)Y_3_#?3$cK5iz^^(I6iT=mJKt<6%~hq99m~>X`F6?Dy}pNtWteO$I(L z!yRN+mEHVJAU6D>mH3yF0yZ(!&ZE6`0V=l5UI-C-7HQReia@^)80Zg zroc)!1Qq#^562;+EHek<+i)@rx<;+{w9fZS#rJ|hVWU~qr5}S4{sA26qPV@_ZEifpb54y7P;-MOEP1cVA66`& zQEC%@CF^QZi>|2~Hw)Ow**)(dH9S-nFs2*l`AwdOp1ONug_@EXC3#*YN$wCu0XXJQ zc-zYaY&9su(uv^BAyup*0H|H3n&cwBIFF&6(x&<7u1 z$@sDku4Y;Z0|AL~PXD zSB@=f5zQiE>_I>CX^}58KA=vN3%$Yh-){+QzWKmO=wu?H4ZenwSL(YgcNWN(d0nZ7 zfPjqS(@Lfi66fl@35>Cs&UXY{mN)#d*{;a&42no}O#ma&{2uD4yF`7QH# zq1U3kBJ^bu(2)g%(y9-KLMgW#B<&swr2;GIH@yrDOYR7|q;sgBJN;vGEU7t}=T_t; zX$iNg>1cHvY=5-N|JTP==iwSpoC!X|XDB^=Z0#~A>K_2qV!A(QO+J5J zjb*vfl+h5Y2TJ%p0!iKhd^p5^9kt4K;GB0yM`gv=;lS`6_)v;SA^F$$o5n)e9!Z_# z22HL&tP1cfmF@S9^NaWu6+oU}fO+nrD5P3AhQ#Z_L)XADMXu>4*2Es-f-P!jHI>S>N;7bIZg3_C;&<86js%>4>!_1z(J|rp;$4hfQ z5?WNJ!ZiQEh4#FwL)zctIs0u~Rc8T|bj6IiiFmV+2L~bQN>AG31WNAfowJ`F5-!nW zv+g?3hd#ie?RK3AQV4k^Xj;GS&cmd=uh!u=uil`{yYa_jB_FCSU7vxYcac&}^6_o( z9H&u>#FGaew+g>tgMJhO4cD$)l80|wmr?ffig**e4Sh#GU``7^ zrSYQW8Cm5G*AmdgYB)1mUiCzB;g^hHl6_&V%e~J2ilprFIOHJstOv3m^q+zI^opvtS(_co=#T`n7Q1qxQQ(xCkL z&LDN6x(r-AoU?p0t;zM9*XhSmJBhY^blB&o-5@0`v{?&8j9e<99e`YhGkD6I5sU^% zYamZjz)=7t8SZ)uG80mj0g~YvO-9MEHkg0Nm|rNl@E%ZIbFX)n%T3$f^qEt*xL5x5 z37-Ejf`Ut7Huw^g8vLQ1VwTu_Jm3vr{nWJDq44_{m@wHnrZh#;E`mUk%qY3*^(TKA zDFJv2VEmK0jcQ(e_Ar|nI(<6e^vO-!&XY1VKtr;tMCmgYoN%atA# zDDaj-ffvSENsW2}r6Gu;?X&6jP^Vm@0doREJJf)!d7SDO#4~n*{+JfNF5=Ae)L*)i zx}t{hq}EZk7^r+wgvzH?I)zOq=#fh@u13JsV;D(|C;w6MX`9zC_z})>`VGM#&5LOC z?-J;LNI|aJc6Z}s82{p{AAtC|b~JlS5xOzwP2W2<-KMUQ_jC2{w>f&5hfC(q+)9IL z^IMlddZOhC=bm5&7?Q|eMRS)ID2%MM$%pwJ*g+k#K4umuiZBVS>{lPWda9L-Q9Ok) z;ffomKX~_4$K>6nf0Zuy8qw8aaFlyN0D={FJG7sP?>QCvFS#C+5z6PUk7k56?pnsW z&z>NHQmHWa0`)?Xa#oy>szgyH8hmd@BaJ3f7F*!{cj`|8sUJ#c^8c&7uZ*hl+xi6r zX+b)a4r%F-?vN0qOQl2UZd3#b=|+$aX$fW10s_*F0-F-)ElAg0&-Q=bllQ#fppql`8*;>NZA3F zD~i5z;ZlQ)dtEtEUx4m+l>qsh71i1S0MgC3eJj%;w(3tegvvsJVjv}6YlRgllZTgq zS~`*@gEVGu2rw`pp^r7K0titwl3U)+P3Qzy$HCz#XI6;tgL*{I1coe+jW44-tWbbX zT%5kg((jK<2mIzcw}7)$J$?uOcZRne*RWFfA!M!yfozR1-ggREjl}Ry;;qHi2FTVa zO@{#@cu8`8VW9;g6DKYN4vNXZgQ^AqOY_T0o6pst1>#pwLOBsAs05Gt75iD;5Z0g4tpR-<2L>1stc;mY5ty16?Wz{tZ8hdgyt(v6p~^W92|g-CWHw5c;W|%NdPYO z0%z_|D^7s^Je*_@Cv{vRps|;Y_f6MA96R;a4^d`<`{SGlWoih{`%@zVJ<9|=(P^cUgm#M!o9!o)vD~&nXdvX*0%2ty|62%=RIB^yr>B^) zVMvHLR-)q+_?1#}F~(=FfD)1c<+2pIzdRb2>Y2#DK+%PrdE)yolfHbBAMN!SsuASd zDr~w?nPpwR_g0Ly_bbHufPW0pL~AUSCojGO@9`y+RzcnT%4^L=CkdF^)q1vipBhz` zev^Pf707@Qqhv2=_rdOKktDR;%F&e8 zA)CY~UiLp{X-o!eE#h~iX{Laq6!H+94IS(+%UH+AG>!Eu5H)6L_As)=*TX(HY)G&A z()-62hQ!0N^4zO$K(i_5_j79bDhhk<+foW@?K#Y5CRNZb{2kiUNvWg@$rL$ox^7S^ zf4WJ6h6)mQFAp|_e-BkB^kr}~IXK9vDy{A%DT6vAMuz-0+8_t1`ZYbG@L|##Bt_sr z(YU@lJ?3_XjqVOVAY~1i(jOgv4w&LE&ng`Pge;xZX3{_?Wd=ETP?H#LBI1!pzo0~+ z8k$5cm?*D0cEcD zh>WS(ASXGP+WQ*~a4!PfIHr2w4_`^MgMC7ue|Vpk1{(FR$SGu2iqqui6NuMQz+0$y zu>?>Wa?dCkl&|r>>{08kB@SlP3lK%S;p+M~a zU+SSs2I0Mbv_rF#f7}|TQf0vMeClpj0Sv6=SBfCt=f$6VpB%7@*Q}UqG0`HRM1UP& z5rr)6pg>0{sQ4i0JIiWR?O7|CEo@>p)@`~D1rg(re=XayavB3Fa;a5HyZsEp4iqL} z0|^ptFYY1dwgkLwd|XgO2iLXTs)+rAekV);4_hy_)BlXANG}fDJu2KBUg!}BkS9QM z$~F3f)P%s4nBoIT5>O_!3B=(36EmT9`j-ZXyj6FVUAcX1SW3HK;yNHk8rux7xOB!#xSg7z+MVDsiedrNZQB0ZWS?Y77EeJ7nb? zXP!|-OW(x-R85zF`5j)A0L8}8B6*r-9z-aEP!n+|4Py6=uN-jkM+#16juJ-cWJ^K< zrG)sAn%u^@Hx;Tm)ck+Q&M2R&niK14H)+1EIhLzSE#Ts;4`ScjRx@}sZxrBSyKGfk zrtlPvNGZYYWxXbi-g}0T2!RiJG0+X9F~h9s38DS@D^X*j;QnJuK_6v(-NxGdgEbJd zU{v-InWq8S;X!2}gUp>uP>unFzOGHTo%PV#2?ppHRcf4HI+^a%-P|Sv=aZJ{2tPGTMD`)g49KUF{!@%d;b)qAEB)iDzf6 za~!-}%Xe@ADxC;GwaxsId>##Qkg#+x4i^zbu=KF{3O3rt-H~;4g+tm)s2;$D4|1A4 zPXS!5j&)3a0GV%yh7=Z1XxJQJZs2N>D|$Sr9?lGMrxFf0ItRf1w6y}Hvqt+T{tB?o zNdR;h{#)KxNXk_jbkww=STIPwNAq}8!foxPZhp|C0l0^@Q4ttDmzD)XW}usyXO?W1nUfCg93%-G&>@1hv%I`X zbjiCHn3xDYKDCw%47}n@D zm6kP=%mAT`0qgj!XP!d47X+?r^Zc!D)<3fN*XEf~m56fS9!#b&>S%||((Mj++c($9 zL&QHupKMyM1$t+_D}>kWDtsML4n`*mL&0$Ba9(@QL`aTC0=rHOGgD!R9p&M!&^WfB z5&xY7SN9ekMkAs_y>~MQUPr8aLk>-Y?oXdDQk{=Uz9PhK@v_pP5;>!x;+U~Y{~%#{ z#QLWvPP;0d6*mgdmMEMR6=&WXZDo-OF8}9YiH<^!!H6?!SolRDj_A*V>lR^Cf%ip; zuw$h=z)0#MhnZ>UPt<}#Q$mI7d5PC9NnkFDJ=au%(M@7eFe-7yUb4hV3!vZeX7kSS zbkRbH;R~`d{I^++J_$#QX1cy#N3Z1$wn=A<1fh)Yd zh7EeTI zVKP{HxQ8WEwRn4+yQmO$Y%m8g*fXo$VIiXM`^Z(BO`&5r!4SV50RmnF4+X3CZGCeY zrQ0{VLxo2a_%&0}!3Jh3gOx;7iIQS}P5>*wa1xgbf0cj&$hgEL-JT(GF<2|af}D+o zB6m3pDiK`>ItzHvb_4#Ki4YfT1_`Vhi`UXCh^TohMGsIgE>xL z<{d;tBB!|Y+WRdR)Ogu}VH3|iKul=xV8R@@)vefI7p%tja0%xv@zbc(=fKs)kuK-gAlo@h>KGqz zC{B{?MGgLyhI&ql0{w0n_KqWnRUt(X`|A@$fmf zp8}!XoNb>lIvH=#)MAdyi8h}9XzI_#zt5OvAbE4%jN&7wjJ?&ewB4ZoXoOX9L+Wwg;DVS=- z685YN8ZR-JDm9E5U2STs?a-+^V=!kkXZ=f@AipoB&<7vA392K7DIwGc=#`e?n|d6t z@>K$~mgfA6_1@)|a36OEOd`5(v2V#h%**shgU-#!9E~28=q?s&3JDBX|5@kY1uJ6` zow9_}>y;LY$s*nN7`rd~^{Y5mn6!(2cODoY5yE_=(#I>KWacu;su>vYmblVYkiEhA z(8YgOMtf3b*kNHa>7jA6d2eSe*17MTZe#LVc09>kXi~QFF&vFG=*(VIhnl#sw#A1v z)-J~}!5yL3>!{}47PwwCcoB8UtCE7y6RM~9mDdN2RGu@B%dv9PRb5$T&I{7^#-C~- z&>CHc8_#Q5}+JiqeA&nVw;ANV%8Y7xh8Y<)kC zJW8RgKI8IX{-bC2ZxPwfE^$`l&hse226HnSZp|ND*U* zH=(m(JI5Lc8Cgt**AAnFSddP=P{rEmxx$^D?|#9FfxU~_VhZ_>A=F%^(ie|GSEl;~ zWQ97cWi5^RO|TlSnayH8ya4W@_uhpD5buZ{z>Q?fN?M~7z>rBqC_u}gcl&q%hPO1q zp}xE?%788M8amaLueoLl7UQ=@V@dABW;Y3lY=ka1f^FRafI1c6-^=e3ghYiM+EsBm z&Ek^3F(M9HL?j2Xu=xuLxAZKCi00V z7UK;h_eQ({;Ip(ZIyBw*2fC=6KV(8jj|kwp6I#dGI1`~7vPm@_r6(&A> z-ax|RvOEVD5(LS?u5HQ==CCmlUPC@HV}gzcU{E0Us4;EDU!W5KJOogS_L8Ou*~9{Z z=lUz#fF;mYtv#cW;jImFC7$4a2iDkIVd$CCNV$UjxSI_L2p0fpKV@tBDDEI-+*Ckb zhK(XL$_)V9o6?Q9($Tk&a$stZzH1R`LgxYyPyJTl55rHG$ax)wTfW7Buuvooz-U5< zn;20z^2xmS3jzXYVj-VF=fb~E-`YGAM=riQ(#YsOGzvGE&J;$bG_kTY5Y1*;In&Wd zpaSDSaFq&(7`-lRgglskR?n0J{)mm%^+W=eZLftrFf4FJK3#Sui>Z zkdI7w6(-Fg-;QW<+^f+%8w}+24GbvanLS#5;^5-;L=LAY?_>yc?~i^vI*HWs_VMlb zb}wRpmsZj@G_Qy|*SAX>U}xKy4G(-d0UbzzCm)#WZ|71s8K#UVCx~HK$L!F2qsLze z(*MGi=q*e;TA-4Yvz9AdK{T#RonU@(Mt0faLT;rBTP|gpovU~OvzfWD6rlshL^(_g1D&UgQR{BjV zL9m_fA1W?d`|}q4&Rk5u731tdS~z1yOK8vri4f-KH+^}_IJA$$m2MUp%NNJ{*|yV< zDF$~pP5F7NN5_h6T58eC_8-WzFD zPA2muUi6x0c{)Y!doT769eb45ewoF=T!fC=s`ne6*9qM1bfg9?enyvxXd)Iurk;J5 zsp}44#AoEGf+XG{r_*PjWB9;X_2ae2@6#oi1}z%*LOP!I!5-bGAhPwPtb^Hnthx9A z_PI?EV!kliL{iPSl1e4%AsdS+5^5}8DW}HRLXQsTFaauJyRLbw4Y0~u_Ku_8(dBII zTo(`A!wWKPdg zT)1LMJme*u)R^Dq{;M+rn#Z3Lt-hqrOPNsydXd9Y0xxj019(Z+T8wQ^?JazUUROGK zi-X-ggRW2Xv`!a06x~Bc5fSE|^54veot-=J#@5XG@pj)4OFdfJnmE3w+`MBZ!XqnZ z{^Wbk;g>Wn{uP~z7lvh3XKhEyX&vO*6Q#l6zQ88KHnZ#|bs6Th(2Jj@SBy36)6 zN8ROqsUkM`8d**GG%sjVf(WiP3F@p}dJZ-aYVFJU2VL4Qvp@UZQdyW>jd@@jGtPGL z=+i0z28)UAX21oM>?u4kIo#^H$@<--lXazu z?WOpB6RA(Br{p`uNKNl(AEXi8ycx2geo9}ZaNBX#1KoA!VxVT{N2q=ce2l!JvtFVn zmc>KW->iWF%|0;yoFyloF!XpLhD5Zf98TwSzG8=aJv7h@1C@rFW9A8if_qZ)!YT7w7-$$`d!PVL1wu){U zuz#?isCh-zuygsGlCh~IsDFx-tv1dr{^PxdiZ}M8s->;ic{6IlPmV%#yid18Rmlb_ zpEzB`)yDC`9E7$zV=h>EA3M`&WS(H3y?OiGe9v;Di>^FK)d~deDU7GOHup9!4oBb; zJ{BzvG6px)Sr#ed<(Zl*P=O-#u3ue^oKdx`6Qk44`=7+eqMuVnO!XN&yM!WW*>tI< zo6~$lMt2PPlDV>@&+M7wnSOQb2ASzsGaUt2JiT^ba+rKzO99-#+yO{)ue7&aCdBc0 z3AsC*v9bHlno4ZRBUJdwVL<>^XSqTVK69$Y`sKGO<{Beg7}p-ng)VNq8+KYTVQ!R9 zoDV|qbPt+D(3ty&6{6BwtfyxIP7-`g^0gd2*D`%)KIjp9%JD&;;JAZ?LDDsnuL-x) z_zHCi@)U0?<@CK`9?tQ^$h=zj`f5}oGr-KCPiESCZk+N)H}u=&d2%C{LQy!K&oE|v zaoL9NSxjamTc=nF<_DjJa0J%)Qwc1}v7!f|S~bPEdX8Pf=J>K}A!Azk($Cy&&8W$P zT0+gQ8Vel*fEP4O!z2{PDw17j@<+1f7RLUMHqF-alKZ4CVvoLx!?KpSzTRG-e)Cqm zE9~|wEtnP!^D%kl?2TWqs#1*lsMOCmLa4QB#V^kn)DK*FVVVv}f>V+Um2*^~*tL3j zPDP3!gN3V*=bX&RTD3_2jsIKnNo_rPhNGaV-8&E5-TOJ2N2AA?G}7IvB7o3+JoIji zaM8talT(LfA+xtiMJ=g#edb*Vs30Ke!zNZ=9677oued1}5m&PR+-2!2Gv4})?7O&> z)*Rk_3(~7S1qF_$H-n~ZX9;#!211hY%a&JW)Kcr*^VVl;Ru){^9x^j15!e=83hZuj z9q+)8N?WbQ(4C5sJ-}6rxncnp3Fo3`zn68j?O1yD`e0#kJJT?BP>NJGCaZJ&#DP@G zhmwl#F>g%fC%`IbplMY$#q7dai8>OF;M4}%s!Sj8VhD;zh0($=Vi%$sKpBToOk^et%zp`QHiP1l>Xt6S^Wc3IijPzJ;FJU zf~>I)m4GB?(l}0Y{0~GtKJC@3{J-L`<^U^|PHUu5M~!yj7W<)4L#icoEo5kEaoa@& z4BGkoQI@!{frR7KS86H+M4!!)F7;t5jZwS{mr+5Mm>vxivjh5*rPvsDMh^8CVV1u6 ziu&lg71xTYmde@@zki4G)gKZH@YoH@Pj_9YT^fHsFd4Wh?v&c+tXj5UeHYyP3u_+K z|CnO*266DelcFA+3X~*?2#^;S4VvlIwSH@*q%F7{F+ucEbR2$tY3_2iBgO8P$!_KP zm1>O9sNKO#N6hAg<^3E{s1tdNR+^GsyxrO2=0zVC41nk+(DU6ok?O#I-JY= z)7|*9(8 ztLx&!^zh5_rm74Lgd~)?t|zigoh|B+(>-~R9%cBemZor1aY@^3Y7wVV)q}y-o0>`{{apNFVmXL zz%`q(lOe-S!bXk-poxW?3^YMa{DbAo-_|+%?5jG(s1W*pK0U_g^RN9>(glpo$vJs zGO2Bp)9j5{c?-6eNhl9EXcnyGcnrBHr!jmy&F7q9W+T4Y&aq^Y{)61D=_^JhmO(GK zU5A1yzvLxMc#?;zL{*0q!)d_!Vx+($cpal#L3Xl`k|@Dy(_N;*F-^BON+3dxZGl3# zs`<2`Tb?hUs5btk@B*8>y>SuVCZ4h62NKvU!^i2*tvX$&R(z|G9nh%~djAC|; zPm!P4(?^al&A*5{B<=cs<0i~CK&?#w;+jsq;pI~{@71f7myaG^39)BzNZxIoU+U1L z-hHmEkXt7e9i*x||KwTgM|howX&00C>gt!|Ax@0lir9oyKBuRN3W6=8cI=uCBMy?IRhV5W>`dH1TAGr@DpZCdWoH>FWSny|*=$l-B&zHKlZkBFI z)3AH5LcXdFGe@w!$yQYgW)8~{o7YCDo=7jMmY3tqYqGaGxdr-RL!OM{(U;dYi^|gF z_N~EI-qUZ^w)(t+qKPD z^D1sraCr6pG|cgS;`Ci|SUf(DerZ*yX=33vQB}~K!1qtUbbwx&e6sbu^le1f#Ad@p ze+Vp}=}6t02&V01TJLG|K1=F;Qi6eyv7`ym@9TFZD&#Xhyt%CM@Ynab>kjo;q6)-enJIai2vw=&)wEP-h6JY98F!_E z77+s(<{C}NOuop?@%b@kj|uOH;2Ey$9ekQAOs^{oTF?`8&`#hWC=z-f_2oD_rwVdBP9N_WD;mo4w{Bqe&KR$Jk1p%J zZ@d)a5T?)fOqcpVH?nEvrL_Io3jLiYohFFaTt2Q=GL?t;r0UDr9ffeNL@8Dy z_uF}TLvL=Jc38Rs>rra0Bk)f$-LqBRt{L~TXU6Z*yn0dJ%zCH&L6g1c_r?HCF6sD} z4&dTwCOx?;5^mSo1dqnEihQpA?QLC7VQlEELBn$WCk zwaMla5;t_Jy*pDQBS@+_a-v0s?fFv}(iQO4RPiZI-k+{t6M5Z|VC*t#?_FS7v^HG%P{^n+ zQXcVa)`Mc7<@W<-627Up1oA4s1Is$PVQqvx+QQ@o;PX?C~MfbKUZ8P+fAO23BMLQTAgldt{TNIZapjIsAKU~uv8v! zUiM9TI_MN(O!i99_R5#XWQMJM50#VPyb6KE%)oV~YVAIJ{IbzwjaKk|B3F27tnOZo zy&2iKieX3a$o}|8WxWTUI)pbE49W+%diqc5wj_mAEyGiP?d@qVt0n8Fk4yI9c=aMw ziCb#?!X_!m(bC{ipq5Bpmhi-=1zg6+6$W@)9ld!l)}mJj+e2fHd|1cQ0}OY?=pO_e zLZ^OQEVn9DPIgE32F`?OdJe@#J)Ji(yh(F2#!^ypgIUS!*wIwqH7Ef+SfE7da(k$i zajw?!A0=NrkrW#0y;+)21dpnA7HmQ+V>4 zvwJ;?rfhg!mKT6^={qp*Rmudg<0@DxG+8Dw;WAN5_sUnt0ozwfTTNY4mFoq~mH}`3 zhy4gQuJAx12f?#n)m)OxD&@6XwVcM}s$_;QsuP{Q%wh;3?T7;4j-o{DIefgAb~JnN zO*x(^Vs=UO8_idlF&6`1H?zh1A}c(@XvjhA%&b+z5s?^a`z@wxs{S~Nbw+K zaVqc)7@&~zrT9`ZW>e*ZXYuK oBH8~Z|P|*|W`L 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 literal 26713 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 From ae4346d320338b858636a3652e6e9f01c2657f62 Mon Sep 17 00:00:00 2001 From: Blanca Date: Sat, 18 Jun 2022 20:31:17 +0200 Subject: [PATCH 66/76] =?UTF-8?q?Termina=20cap=C3=ADtulo=207=20#115?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/personal-dictionary.txt | 3 + .../3_algoritmo-inicializacion-pesos.tex | 132 +++++++++++++++++- 2 files changed, 133 insertions(+), 2 deletions(-) diff --git a/.github/workflows/personal-dictionary.txt b/.github/workflows/personal-dictionary.txt index 28faa0c..6ba30c8 100644 --- a/.github/workflows/personal-dictionary.txt +++ b/.github/workflows/personal-dictionary.txt @@ -184,6 +184,9 @@ rrnng separabilidad sigmoide sigmoidea +sobreajustado +sobreajuste +sobreentrenado sobreescribir solventable squasher diff --git a/Memoria/capitulos/5-Estudio_experimental/3_algoritmo-inicializacion-pesos.tex b/Memoria/capitulos/5-Estudio_experimental/3_algoritmo-inicializacion-pesos.tex index 2b2c95c..4a46671 100644 --- a/Memoria/capitulos/5-Estudio_experimental/3_algoritmo-inicializacion-pesos.tex +++ b/Memoria/capitulos/5-Estudio_experimental/3_algoritmo-inicializacion-pesos.tex @@ -140,9 +140,137 @@ \subsection{Resultados obtenidos} Concretamente de el experimentos se ha realizado con $\frac{3}{4}|\mathcal{D}|$ de datos de entrenamiento y el resto de test, se ha repetido además $15$ veces. -Durante cada iteración los datos del conjunto han sido desordenados. +Durante cada iteración los datos del conjunto han sido desordenados y el tiempo medido ha sido estrictamente el de creación y aprendiza de la red neuronal. Los resultados obtenidos han sido los siguientes: -Y donde el test de los signos de Wilcoxon ha rechazado la hipótesis nula con un $95\%$ de confianza. +\begin{table}[H] + \centering + \resizebox{\textwidth}{!}{ + \begin{tabular}{|l|l|l|l|l|l|l|l|l|l|l|l|l|l|l|l|} + \hline + Método y Ejecución & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 & 15 \\ \hline + Algoritmo inicialización & 0,274 & 0,030 & 0,028 & 0,028 & 0,026 & 0,028 & 0,027 & 0,027 & 0,027 & 0,029 & 0,027 & 0,028 & 0,027 & 0,027 & 0,029 \\ \hline + Backpropagation & 6,204 & 5,064 & 5,083 & 6,015 & 5,128 & 5,120 & 5,072 & 5,105 & 5,961 & 5,023 & 5,023 & 5,074 & 5,065 & 5,148 & 5,180 \\ \hline + \end{tabular} + } + \caption{Tiempos en segundos hasta parada empleado por cada algoritmo en las sucesivas iteraciones } +\end{table} + + + +De donde se tiene que nuestro algoritmo de inicialización tiene un promedio de +\begin{equation} + 0,044 \pm 0,064 \text{ segundos } +\end{equation} +mientras que la inicialización aleatoria y aprendizaje con el método de +\textit{Backpropagation} de +\begin{equation} + 5,284 \pm 0,407 \text{ segundos}. +\end{equation} + +Además el test de los signos de Wilcoxon rechazado la hipótesis un $95\%$ de confianza +por lo que podemos afirmar que efectivamente la diferencia de tiempos es significativa. + +El gráfico de caja bigote con los tiempo es el siguiente: + +\begin{figure}[H] + \centering + \includegraphics[width=\textwidth]{7-algoritmo-inicializar-pesos/experimento/grafico-bigotes-tiempo.png} + \caption{Gráfico de caja y bigotes del tiempo requerido por el algoritmo de inicialización de pesos y el de \textit{Backpropagation}.} +\end{figure} +\begin{table}[H] + \centering + \resizebox{\textwidth}{!}{ + \begin{tabular}{|l|l|l|l|l|l|l|l|l|l|l|l|l|l|l|l|} + \hline + Método & Error 1 & Error 2 & Error 3 & Error 4 & Error 5 & Error 6 & Error 7 & Error 8 & Error 9 & Error 10 & Error 11 & Error 12 & Error 13 & Error 14 & Error 15 \\ \hline + Algoritmo inicialización & 0,016 & 0,016 & 0,018 & 0,017 & 0,009 & 0,016 & 0,021 & 0,015 & 0,018 & 0,020 & 0,016 & 0,016 & 0,016 & 0,019 & 0,018 \\ \hline + Aleatorio y Backpropagation & 0,582 & 0,570 & 0,570 & 0,575 & 0,564 & 0,567 & 0,564 & 0,567 & 0,572 & 0,570 & 0,561 & 0,561 & 0,574 & 0,569 & 0,563 \\ \hline + \end{tabular} + } + \label{fig07:error-entrenamiento} + \caption{Error mínimo cuadrático obtenido en entrenamiento tras acabar la ejecución} +\end{table} + +Tal y como se planteó el experimento la parada del algoritmo de \textit{Backpropagation} +pudo producirse por haber alcanzado un error menor que el la red conseguida con el +algoritmo de inicialización o porque ha estancado su valor. +Sin embargo, al observarse la distribución de los errores en el +gráfico \ref{img07:error-entrenamiento} y la tabla \ref{fig07:error-entrenamiento} puede observarse que +el algoritmo de \textit{Backpropagation} se detuvo al alcanzar un +mínimo local. + +\begin{figure}[H] + \centering + \includegraphics[width=\textwidth]{7-algoritmo-inicializar-pesos/experimento/grafico-bigotes-error_entrenamiento.png} + \caption{Gráfico de caja y bigotes del \textbf{error en entrenamiento tras finalizar } el algoritmo de inicialización de pesos y el de \textit{Backpropagation}.} + \label{img07:error-entrenamiento} +\end{figure} + +En promedio el error cuadrático medio dentro del entrenamiento conseguido con nuestro algoritmo es +\begin{equation} + 0,017 \pm 0,003 +\end{equation} +mientras que el de inicialización aleatoria y \textit{Backpropagation} es de +\begin{equation} + 0,569 \pm 0,006. +\end{equation} + +Es interesante entonces comparar el error cuadrático medio obtenido en los datos de test, para ver si efectivamente es tan beneficioso como aparenta el algoritmo creado. + +El resultado en cada ejecución ha sido: + +\begin{table}[H] + \centering + \resizebox{\textwidth}{!}{ + \begin{tabular}{|l|l|l|l|l|l|l|l|l|l|l|l|l|l|l|l|} + \hline + Método & Error 1 & Error 2 & Error 3 & Error 4 & Error 5 & Error 6 & Error 7 & Error 8 & Error 9 & Error 10 & Error 11 & Error 12 & Error 13 & Error 14 & Error 15 \\ \hline + Algoritmo inicialización & 0,176 & 0,179 & 0,184 & 0,175 & 0,096 & 0,191 & 0,192 & 0,172 & 0,171 & 0,183 & 0,161 & 0,179 & 0,163 & 0,175 & 0,170 \\ \hline + Aleatorio y Backpropagation & 0,561 & 0,571 & 0,573 & 0,562 & 0,583 & 0,579 & 0,557 & 0,577 & 0,567 & 0,572 & 0,551 & 0,564 & 0,563 & 0,573 & 0,559 \\ \hline + \end{tabular} + } + \caption{Error mínimo cuadrático \textbf{en test} tras finalizar las sucesivas repeticiones del algoritmo} +\end{table} + + +\begin{figure}[H] + \centering + \includegraphics[width=\textwidth]{7-algoritmo-inicializar-pesos/experimento/grafico-bigotes-error_test.png} + \caption{Gráfico de caja y bigotes del \textbf{error cuadrático medio en test } el algoritmo de inicialización de pesos y el de \textit{Backpropagation}.} + \label{img07:error-test} +\end{figure} + +Donde ahora el promedio para nuestro algoritmo es de un error de +\begin{equation} + 0,171 \pm 0,022 +\end{equation} +mientras que el de inicialización aleatoria y \textit{Backpropagation} es de +\begin{equation} + 0,567 \pm 0,009. +\end{equation} + +% Nota sobre sobreajuste +\marginpar{\maginLetterSize + \iconoAclaraciones \textcolor{dark_green}{ + \textbf{ + ¿Qué significa que un modelos está sobreajustado o sobreentrenado? + } + } + En aprendizaje automático un modelo se dice sobreentrenado o sobreajustado + cuando ha \textit{aprendido} características + propias de los datos de entrenamiento que + no son válidas para el problema general. + Este efecto produce que se tengan resultados en + entrenamiento \textit{mucho} mejores que en test. +} +Como podemos observar en el caso de nuestro +algoritmo; a diferencia del error en test obtenido con \textit{Backpropagation}, que el error en test ha superado al de entrenamiento, lo que indica un sobreajuste +del modelo a los datos de entrenamiento. Esto es totalmente de esperar por +cómo se construye la inicialización de pesos. Sin embargo, a pesar del sobreajuste, el resultado sigue siendo mejor tanto en precisión como en tiempo que el de aprendizaje usando \textit{Backpropagation}. + + + +\newpage From afb0ff37c6adc792c37ed8ccaabc383c9f20c32d Mon Sep 17 00:00:00 2001 From: Blanca Date: Sun, 19 Jun 2022 11:12:11 +0200 Subject: [PATCH 67/76] =?UTF-8?q?Redacta=20introducci=C3=B3n=20y=20conclus?= =?UTF-8?q?i=C3=B3n=20#117?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/personal-dictionary.txt | 3 +- .../capitulos/0-Metodologia/asignaturas.tex | 2 +- .../capitulos/0-Metodologia/herramientas.tex | 2 +- .../capitulos/0-Metodologia/introduccion.tex | 4 +- .../diferencia_entre_los_reales_y_enteros.tex | 2 +- Memoria/capitulos/9-Conclusiones.tex | 39 +++++++++++ Memoria/capitulos/Introduccion.tex | 70 +++++++++++++------ Memoria/library.bib | 56 +++++++++++++++ Memoria/preliminares/resumen.tex | 48 +++---------- Memoria/preliminares/summary.tex | 47 ++++++++++--- Memoria/preliminares/titulo.tex | 5 +- Memoria/tfg.tex | 10 +-- 12 files changed, 205 insertions(+), 83 deletions(-) create mode 100644 Memoria/capitulos/9-Conclusiones.tex diff --git a/.github/workflows/personal-dictionary.txt b/.github/workflows/personal-dictionary.txt index 6ba30c8..c04e4db 100644 --- a/.github/workflows/personal-dictionary.txt +++ b/.github/workflows/personal-dictionary.txt @@ -206,4 +206,5 @@ tratabilidad usefulInformation ésima ésimas -ésimo \ No newline at end of file +ésimo +perceptron \ No newline at end of file diff --git a/Memoria/capitulos/0-Metodologia/asignaturas.tex b/Memoria/capitulos/0-Metodologia/asignaturas.tex index 5fab70b..521cf3e 100644 --- a/Memoria/capitulos/0-Metodologia/asignaturas.tex +++ b/Memoria/capitulos/0-Metodologia/asignaturas.tex @@ -3,7 +3,7 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{Asignaturas de grado relacionadas con el trabajo } - +\label{ch01:asignaturas} Si bien, es casi imposible enumerar de manera exhaustiva todas las asignaturas involucradas en este trabajo, ya que todas han influido en menor o mayor medida en la comprensión diff --git a/Memoria/capitulos/0-Metodologia/herramientas.tex b/Memoria/capitulos/0-Metodologia/herramientas.tex index fad504d..b354810 100644 --- a/Memoria/capitulos/0-Metodologia/herramientas.tex +++ b/Memoria/capitulos/0-Metodologia/herramientas.tex @@ -3,7 +3,7 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{Herramientas utilizadas} - +\label{ch01:Herramientas} \subsection{GitHub} Como servicio externo hemos usado \href{https://github.com}{GitHub}, ya que permite implementar de manera eficaz todo el desarrollo ágil: diff --git a/Memoria/capitulos/0-Metodologia/introduccion.tex b/Memoria/capitulos/0-Metodologia/introduccion.tex index 0c1b6f7..7019ceb 100644 --- a/Memoria/capitulos/0-Metodologia/introduccion.tex +++ b/Memoria/capitulos/0-Metodologia/introduccion.tex @@ -203,7 +203,7 @@ \subsection*{Hito 2: Evaluación experimental de las hipótesis de optimización El criterio de aceptación de un producto mínimo viable consistirá en verificar que: \begin{itemize} - \item La implementación de los algoritmos debe de es coherente y proveniente del hito anterior y debe de estar referenciada. + \item La implementación de los algoritmos debe de es coherente, proveniente del hito anterior y debe de estar referenciada. \item Toda implementación comprueba su correcto funcionamiento mediante tests. \item La redacción del análisis y conclusiones es aprobada por los tutores nuevamente. \end{itemize} @@ -212,7 +212,7 @@ \subsection*{Hito 2: Evaluación experimental de las hipótesis de optimización -\subsection*{Hito x: Entrega del proyecto} +\subsection*{Hito 3: Entrega del proyecto} Su resultado será una memoria revisada y pulida que se entregará en Prado como trabajo fin de grado en el plazo de la convocatoria ordinaria. diff --git a/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/diferencia_entre_los_reales_y_enteros.tex b/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/diferencia_entre_los_reales_y_enteros.tex index 110cf78..02c787c 100644 --- a/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/diferencia_entre_los_reales_y_enteros.tex +++ b/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/diferencia_entre_los_reales_y_enteros.tex @@ -35,7 +35,7 @@ \section{Consideración sobre la capacidad de cálculo} % Teorema de que podemos tener redes neuronales con parámetros racionales que también converjan. \begin{aportacionOriginal} - \begin{teorema} + \begin{teorema}\label{teo:densidad-racional} El espacio $\mathcal{H}(\Q^d, \Q^s)$ es denso en el espacio $\rrnnmc$. \end{teorema} \begin{proof} diff --git a/Memoria/capitulos/9-Conclusiones.tex b/Memoria/capitulos/9-Conclusiones.tex new file mode 100644 index 0000000..a034cbd --- /dev/null +++ b/Memoria/capitulos/9-Conclusiones.tex @@ -0,0 +1,39 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Conclusiones del trabajo +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\chapter{Conclusiones} + +Era nuestro objetivo con este trabajo esclarecer +el motivo y funcionamiento de las redes neuronales y +a partir de ahí optimizar algún aspecto de ellas. + +El sustento teórico queda expuesto en los capítulos +\ref{ch00:methodology}, \ref{chapter:Introduction-neuronal-networks}, +\ref{ch03:teoria-aproximar}, \ref{chapter4:redes-neuronales-aproximador-universal} +y \ref{chapter:construir-redes-neuronales}. +Hemos contribuido al estado del arte actual con los +resultados: + +\begin{itemize} + \item La propuesta del uso de modelo de red neuronal (definición \ref{img:grafo-red-neuronal-una-capa-oculta}). + \item La demostración teórica del uso de distintas funciones de activación en + el modelo seleccionado (corolario \ref{cor:se-generaliza-G-a-una-familia}). + \item La demostración de la densidad del espacio de las redes neuronales racionales en el espacio de las funciones medibles (teorema \ref{teo:densidad-racional}). + \item Resultados sobre la irrelevancia del sesgo en las redes neuronales (sección \ref{consideration-irrelevancia-sesgo}). + \item Una alternativa al uso de funciones de clasificación (sección \ref{ch05:dominio-discreto}). + \item Un criterio de selección de funciones de activación (capítulo \ref{funciones-activacion-democraticas-mas-demoscraticas}). + \item Resultados teóricos sobre la equivalencia de funciones de activación (teorema \ref{teo:equivalencia-grafos-activation-function} y + corolario \ref{corolario:afine-activation-function}). + \item Un algoritmo de inicialización de los pesos de una red neuronal que acelera los métodos de aprendizaje iterativos (capítulo \ref{section:inicializar_pesos}). + \item La biblioteca \textit{OptimizedNeuralNetwork.jl} que aporta un modelo y métodos optimizados para el uso de redes neuronales. +\end{itemize} + +y proponemos como posibles vías de investigación en proyectos futuros: + +\begin{itemize} + \item Una revisión de la selección genética de funciones de activación con nuestro modelo (capítulo \ref{ch08:genetic-selection}). + \item Una investigación sobre la repercusión en la convergencia de la delimitación de la precisión en los coeficientes de las redes neuronales (sección \ref{ch04:capacidad-calculo}). +\end{itemize} + + diff --git a/Memoria/capitulos/Introduccion.tex b/Memoria/capitulos/Introduccion.tex index f5f910b..75e8317 100644 --- a/Memoria/capitulos/Introduccion.tex +++ b/Memoria/capitulos/Introduccion.tex @@ -3,30 +3,58 @@ %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\part{Teoría subyacente} +\chapter*{Introducción} -No es usual en un manual que trate sobre redes neuronales encontrarse en su interior con un -capítulo sobre teoría de la aproximación, pero tampoco es nuestra intención -hacer de este documento una recopilación de todo lo usual, sino todo lo contrario. +\section*{Origen} +En nuestros días, el aprendizaje automático es un campo en +continua expansión. Desde procesamiento de imágenes hasta predicciones de +acciones en bolsa, las redes neuronales se van implantando en todos los +campos del conocimiento. \\ -Existe en la actualidad un desequilibrio entre resultados empíricos y teóricos de redes neuronales llegando incluso a contradicción (como se comenta en la introducción del capítulo \ref{chapter:Introduction-neuronal-networks}), será por tanto -nuestro primer objetivo conseguir una revisión y purga de cualquier artificio existente sobre redes neuronales carente de fundamento matemático. -El fin de esto no es más que construir una teoría sólida que de cabida a -optimizaciones de fundamento teórico. La estructura de la memoria es la siguiente: +A pesar del pragmatismo actual que prevalece en las redes +neuronales, el concepto de neurona artificial nace en el primer tercio del siglo XX con el artículo \textit{ Logical calculus of the ideas immanent in nervous activity} \cite{primer-articulo}, como +intento de modelar el pensamiento humano en forma de proceso lógico. Esta +primera etapa de investigación culmina con la invención del perceptrón en +1958 por Frank Rosenblatt con el artículo \textit{The perceptron: a probabilistic model for information storage and organization in the brain} \cite{rosenblatt1958perceptron}. Es importante notar que todas estas investigaciones +tenían un objetivo más allá de la resolución de problemas complejos utilizando +máquinas u ordenadores: comprender el proceso de aprendizaje y cognición del +ser humano.\\ +Estos primeros modelos tenían sus carencias y reservas por parte +de la comunidad científica y cuando en 1969 la publicación de la demostración de que +los modelos eran incapaces de resolver problemas lógicos simples (véase \cite{minsky69perceptrons}) hizo que el +campo casi muriera. No fue hasta 1986 con el descubrimiento de un modelo en más complejo, +que se superarían estas limitaciones y que darían lugar a las actuales redes neuronales +\cite{10.5555/104279.104293}.\\ -%%% Descripción de los capítulos antigua -Para ello nuestro \textit{modus operandi} será el siguiente: -Se describirá el conjunto y características de problemas que pretendemos abarcar en el capítulo \ref{chapter:Introduction-neuronal-networks}. -Se comentará las limitaciones e inconvenientes que presenta un enfoque clásico -basado en teoría de la aproximación en el capítulo \ref{ch03:teoria-aproximar}. -A continuación en el capítulo \ref{chapter4:redes-neuronales-aproximador-universal}, -presentarán las redes neuronales como un modelo eficiente. - -Al final del mismo capítulo se introduce la definición que hemos determinado por conveniente de red neuronal y que es producto de los capítulos -\ref{ch03:teoria-aproximar} y \ref{chapter4:redes-neuronales-aproximador-universal}. - -Tras todo el fundamento teórico en \ref{chapter:construir-redes-neuronales} se explicitará el diseño de la red neuronal modelizada así como los algoritmo de evaluación y aprendizaje. +El modelos de 1986, no obstante, usaba un método que sus autores eran incapaces de +relacionar con el mundo de la cognición, suponiendo con esto el +inicio de la separación de las redes neuronales con el campo de la psicología +y la neurociencia y el inicio del enfoque actual de resolución de problemas. +Estos nuevos descubrimientos, sumados a una mejora en las capacidades +computacionales de los ordenadores y que en 1989 demostrara formalmente su eficacia \cite{HORNIK1989359} provocaron un auge en el interés acerca de +las redes, que perdura hasta hoy.\\ + + +\section*{Descripción del problema, motivación y objetivos} +Si bien las redes neuronales abandonaron ya la psicología +y a pesar de su uso extensivo en la actualidad, es un área incipiente de la +matemática donde los grandes teoremas aún están por descubrir. +Ante tal desequilibrio entre resultados empíricos y teóricos, + será +nuestro primer objetivo conseguir una revisión y purga de cualquier artificio + existente sobre redes neuronales carente de fundamento matemático. +Siendo el fin de esto construir una teoría sólida que de cabida a +optimizaciones de fundamento teórico. + +\section*{Técnicas, áreas matemáticas y fuentes utilizadas} + +El artículo principal que membrana el proyecto es el artículo +\textit{Multilayer Feedforward Networks are Universal Approximators} \cite{HORNIK1989359} + escrito por Kurt Hornik, Maxwell Stinchcombe y Halber White. Como pilar a la + sección de teoría de aproximación se ha utilizad el manual \textit{The Elements of Real Analysis} \cite{the-elements-of-real-analysis} y finalmente los manuales de referencia seguidos sobre el aprendizaje automático han sido: + \textit{Learning From Data} \cite{MostafaLearningFromData} y \textit{Pattern Recognition and Machine Learning} \cite{BishopPaterRecognition}. + + Sobre las técnicas y áreas empleadas pueden consultarse con detalle en la secciones \ref{ch01:Herramientas} y \ref{ch01:asignaturas}. -En los capítulos \ref{funciones-activacion-democraticas-mas-demoscraticas} y \ref{section:inicializar_pesos} se explican además otros resultados para optimizar el coste computacional. \ No newline at end of file diff --git a/Memoria/library.bib b/Memoria/library.bib index 2fb916e..62948e9 100644 --- a/Memoria/library.bib +++ b/Memoria/library.bib @@ -1,3 +1,59 @@ +%----- Historia redes neuronales + +@article{primer-articulo, + abstract = {Because of the ``all-or-none''character of nervous activity, neural events and the relations among them can be treated by means of propositional logic. It is found that the behavior of every net can be described in these terms, with the addition of more complicated logical means for nets containing circles; and that for any logical expression satisfying certain conditions, one can find a net behaving in the fashion it describes. It is shown that many particular choices among possible neurophysiological assumptions are equivalent, in the sense that for every net behaving under one assumption, there exists another net which behaves under the other and gives the same results, although perhaps not in the same time. Various applications of the calculus are discussed.}, + author = {McCulloch, Warren S. and Pitts, Walter}, + da = {1943/12/01}, + date-added = {2022-06-19 08:07:13 +0200}, + date-modified = {2022-06-19 08:07:13 +0200}, + doi = {10.1007/BF02478259}, + id = {McCulloch1943}, + isbn = {1522-9602}, + journal = {The bulletin of mathematical biophysics}, + number = {4}, + pages = {115--133}, + title = {A logical calculus of the ideas immanent in nervous activity}, + ty = {JOUR}, + url = {https://doi.org/10.1007/BF02478259}, + volume = {5}, + year = {1943}, + Bdsk-Url-1 = {https://doi.org/10.1007/BF02478259}} + %presencación perceptrón +@article{rosenblatt1958perceptron, + title={The perceptron: a probabilistic model for information storage and organization in the brain.}, + author={Rosenblatt, Frank}, + journal={Psychological review}, + volume={65}, + number={6}, + pages={386}, + year={1958}, + publisher={American Psychological Association} +} +% libro muestra carencias perceptrón +@book{minsky69perceptrons, + added-at = {2008-05-16T13:57:01.000+0200}, + address = {Cambridge, MA, USA}, + author = {Minsky, Marvin and Papert, Seymour}, + biburl = {https://www.bibsonomy.org/bibtex/206a5a6751b3e61408455fca2ed8d87fc/sb3000}, + description = {: mf : blob : » bibtex}, + interhash = {d80d4948a422623047f1b800272c0389}, + intrahash = {06a5a6751b3e61408455fca2ed8d87fc}, + keywords = {linear-classification neural-networks seminal}, + publisher = {MIT Press}, + timestamp = {2008-05-16T13:57:02.000+0200}, + title = {Perceptrons: An Introduction to Computational Geometry}, + year = 1969 +} +@inbook{10.5555/104279.104293, +author = {Rumelhart, D. E. and Hinton, G. E. and Williams, R. J.}, +title = {Learning Internal Representations by Error Propagation}, +year = {1986}, + isbn = {026268053X}, + publisher = {MIT Press}, + address = {Cambridge, MA, USA}, + booktitle = {Parallel Distributed Processing: Explorations in the Microstructure of Cognition, Vol. 1: Foundations}, + pages = {318–362}, + numpages = {45} } `%----- Teoría de la aproximación ----- % Texto principal del que se ha sacado @book{the-elements-of-real-analysis, diff --git a/Memoria/preliminares/resumen.tex b/Memoria/preliminares/resumen.tex index 70da254..ffcbf48 100644 --- a/Memoria/preliminares/resumen.tex +++ b/Memoria/preliminares/resumen.tex @@ -22,53 +22,20 @@ \chapter*{Resumen}\label{ch:resumen} purga de cualquier artificio existente sobre redes neuronales carente de fundamento matemático. -Como resultado de ello se ha creado e implementado +Como resultado de ello se ha propuesto e implementado un nuevo modelo de red neuronal así como sus métodos de aprendizaje y evaluación. -Además se ha propuesto un criterio de selección de +Además se ha dado un criterio de selección de funciones de activación y un algoritmo de -inicialización de pesos que mejora los ya existentes. Todos los resultados han conducido a la creación de -la biblioteca \textit{OptimizedNeuralNetwork.jl}, que contiene la implementación de nuestros modelos y métodos optimizados. +inicialización de pesos que mejora los ya existentes. +Todos los resultados han conducido a la creación de +la biblioteca \textit{OptimizedNeuralNetwork.jl}, +que contiene la implementación de nuestros modelos y + métodos optimizados. La estructura de la memoria es la siguiente: -\begin{itemize} - \item \textbf{Capítulo \ref{ch00:methodology}: Descripción de la metodología seguida.} Se ha organizado el proyecto de acorde a una filosofía de desarrollo ágil, basada en la metodología de personas, historias de usuario, hitos y test. Tal método ha conducido e hilado desde el comienzo tanto el desarrollo teórico como el técnico a la par que salvaguardaba la corrección de cada paso. - \item \textbf{Capítulo \ref{chapter:Introduction-neuronal-networks}: Descripción del problema de aprendizaje.} Se introduce las características y tipo de problemas del aprendizaje automático. Además se clarifica cuáles tratan de resolver las redes neuronales. - \item \textbf{Capítulo \ref{ch03:teoria-aproximar}: Teoría de la aproximación.} Se muestran los problemas y virtudes que presenta un enfoque clásico de teoría de la aproximación frente a problemas de aprendizaje. En pos de solventar tales impedimentos, - se sitúa esta teoría como el germen de - las redes neuronales. - Concretamente se desarrolla la teoría necesaria hasta demostrar el teorema de \textit{Stone-Weierstrass} y se explicarán las trabas que presentan este tipo de aproximaciones. - \item \textbf{Capítulo \ref{chapter4:redes-neuronales-aproximador-universal}: Introducción de las redes neuronales como aproximadores universales.} Se presenta nuestra propuesta de modelo de red neuronal y se compara con los modelos actuales. Se demuestra que nuestra definición actúa como un aproximador universal a cualquier función medible basándonos en el artículo - \textit{Multilayer Feedforward Networks are Universal Approximators} (\cite{HORNIK1989359}). Además se demuestran unas serie de resultados sobre cómo es la convergencia en problema de regresión y clasificación. Finalemnte se plantea si en la práctica las redes neuronales - verdaderamente son aproximadores universales. - \item \textbf{Capítulo \ref{chapter:construir-redes-neuronales}: Diseño y construcción de las redes neuronales.} Se describe la implementación de las redes neuronales; esto nos permitirá una comparación - más profunda de nuestro modelo frente a los usuales y que nos servirá como justificación del modelo obtenido. Producto de ello son dos resultados originales sobre el sesgo y dominio de la imagen. - Una vez determinado el modelo concreto se - han diseñado un algoritmo de aprendizaje, basado en \textit{Backpropagation} y otro de evaluación de redes neuronales. Además se han comparado los resultados de nuestro modelado con los utilizado usualmente. - \item \textbf{Capítulo \ref{funciones-activacion-democraticas-mas-demoscraticas}: Democratización de las funciones de activación.} Se pretende en este capítulo determinar qué funciones de activación son más convenientes que otras, es decir, con cuál se podría tener un menor coste computacional. - Para esto, no se ha tenido sólo en cuenta el coste computacional de evaluar cada función; puesto que la imagen de una función de activación repercute - en el número de neuronas necesarias para estar por debajo de cierto error, se ha establecido una serie de teoremas propio que determina qué funciones de activación tendrán los mismos resultados. Gracias a tales resultados se han - podido agrupar a las funciones de activación y - para cada clase se ha tratado de determinar por medio del test de hipótesis de Wilcoxon cuál es la más rápida, resultando con esto que sin perder precisión se ha reducido el costo y tiempo en evaluación y entrenamiento de las redes neuronal. - - \item \textbf{Capítulo \ref{section:inicializar_pesos}: Algoritmo de inicialización de pesos.} Se propone un algoritmo original de inicialización de los pesos de una red neuronal a - partir de un subconjunto de datos de la muestra. Al ser la solución de partida mejor, con este método se pretende reducir el tiempo y coste de aprendizaje de técnicas iterativas, tales como \textit{Backpropagation}. - - En este capítulo se muestran además los - requisitos técnicos de la implementación de la biblioteca \textit{OptimizedNeuralNetwork.jl}, - ya que para medir la bondad del algoritmo es - necesario implementar todas las funcionalidades al completo. Además se han añadido en estas - secciones ejemplo de uso de la biblioteca. - \item \textbf{Capítulo \ref{ch08:genetic-selection}: Selección genética de las funciones de activación.} El uso de distintas funciones de activación presenta un - potencial en cuanto a reducir el error fijado un cierto número de neuronas, sin embargo esto - aumenta el espacio de búsqueda y por tanto la complejidad. Es aquí donde nuestro modelo - propuesto de red neuronal palía la situación, - ya que frente a los modelos convencionales, el nuestro es invariante a la posición de las - funciones de activación de las neuronas, lo cual - reduce el espacio de búsqueda. -\end{itemize} \paragraph{PALABRAS CLAVE:} \begin{itemize*}[label=,itemsep=1em,itemjoin=\hspace{1em}] @@ -76,6 +43,7 @@ \chapter*{Resumen}\label{ch:resumen} \item optimización \item funciones de activación \item inicialización de pesos + \item Biblioteca de aprendizaje automático \end{itemize*} \endinput diff --git a/Memoria/preliminares/summary.tex b/Memoria/preliminares/summary.tex index b8b77db..1b68154 100644 --- a/Memoria/preliminares/summary.tex +++ b/Memoria/preliminares/summary.tex @@ -8,27 +8,54 @@ \selectlanguage{english} \chapter*{Summary}\label{ch:summary} %\addcontentsline{toc}{chapter}{Summar} + Nowadays experimental research in Neural Networks are more advanced than theoretical -results. From this we want to establish a solid mathematical theory from which to optimize the current neural network models. +results. +From this we want to establish a solid mathematical theory from which to optimize the current neural network models. + + +As a result of our study we have proposed a new neural +network model and adapted and optimized already used +evaluation and learning methods to it. +Moreover, we have discovered some theorems that prove the +equivalence among some activation functions and propose a new + algorithm to initialize weights of neural networks. By the +first result, we obtain a criteria to choose the most +suitable activation function to maintain accuracy and reduce computational cost. + By the second one, we might accelerate +learning convergence methods. + +In addition, the models, methods and algorithms have been +implemented in a Julia library calls \textit{OptimizedNeuralNetwork.jl} + +All the theory development, designs, decisions and result are +written in this memory which have the following structure: +\begin{itemize} + \item \textbf{Chapter \ref{ch00:methodology}: Description of the methodology followed.} We have organized our project according to an agile philosophy based on personas methodology, users stories, milestones and tests. The method has conducted and linked mathematical and technical results and implementations, giving them coherence and validation methods. + + \item \textbf{Chapter \ref{chapter:Introduction-neuronal-networks}: Description of the learning problem.} We defined the characteristic and type of machine learning problems. We would focus on supervised learning ones. -As a result of our study we have proposed a new neural network model and adapted and optimized already used evaluation and learning methods to it. Moreover, we have discovered some theorems that prove the equivalence among some activation functions and propose a new algorithm to initialize weights of neural networks. By the first result, we obtain a criteria to choose the most suitable activation function to maintain accuracy and reduce computational cost. By the second one, we might accelerate learning convergence methods. + \item \textbf{Chapter \ref{ch03:teoria-aproximar}: Approximation theory.} In order to establish a solid theory we would start our work trying to solve machine learning problems by traditional approximation methods. The main result we obtained is the Stone Weierstrass’s theorem. As a conclusion of this chapter we would know the virtues and faults of traditional methods and understand the necessity of new methods and structures such as neural networks. -In addition the models, methods and algorithms have been implemented in a Julia library: -OptimizedNeuralNetwork.jl + \item \textbf{Chapter \ref{chapter4:redes-neuronales-aproximador-universal}: Neuronal networks are universal approximators.} In this chapter we introduce our neural network model and compare it with the conventional ones. In order to show it is well defined we will prove the universal convergence of our model to any measurable function. In addition, we will give some results about how our model solves classification and regression problems meanwhile the number of its neurons rises. Finally, we will argue if all of those math results can actually resolve real problems, the idea behind the debate is the computability representation of real numbers. -All the theory development, designs, decisions and result are written in this memory which have the following structure: + \item \textbf{Chapter \ref{chapter:construir-redes-neuronales}: The design and implementation of neural networks.} We would describe carefully the design and implementation of our model of neural network, thanks to that we will obtain some mathematical results about bias and classification function that would be useful to compare our model with the conventional ones and justify +our selection. Moreover, we would explain, justify and design learning and evaluation methods to our models. These methods are optimized versions of Forward Propagation and Backpropagation. -Chapter one: Description of the methodology followed. We have organized our project according to an agile philosophy based on personas methodology, users stories, milestones and tests. The method has conducted and linked mathematical and technical results and implementations, giving them coherence and validation methods. +\item \textbf{Chapter \ref{funciones-activacion-democraticas-mas-demoscraticas}: Democratization of activation functions.} We would explain at this chapter if there are better activation functions. In the direction of that we will prove two original results that show that there are families of activation functions that with the same conditions will resolve problems with the same accuracy. As a result, if we compare the computational cost of the members of those families and choose the faster one, we would obtain a method to optimize evaluation and learning of neural networks without loss accuracy. We have used the Wilcoxon signed-rank test as a statistical hypothesis test so as to give a rigorous study of our criteria. -Chapter 2: Description of the learning problem. We defined the characteristic and type of machine learning problems. We would focus on supervised learning ones. +\item \textbf{Chapter \ref{section:inicializar_pesos}: Weight initializing algorithm.} Since the Backpropagation and other iterative methods are sensible to the initial value of a neural network, we will show an original method to initialize its weights from training data. This process not only will produce a better initial step but also has lower computational cost than Backpropagation. To test the potential of this method we will use the Wilcoxon signed-rank test again and also, from the experiment requirement our OptimizedNeuralNetwork.jl library will be born. In this chapter we will also explain all the decisions done during the design and implementation of the library in other to be as efficient as we could. -Chapter 3: Approximation theory. In order to establish a solid theory we would start our work trying to solve machine learning problems by traditional approximation methods. The main result we obtained is the Stone Weierstrass’s theorem. As a conclusion of this chapter we would know the virtues and faults of traditional methods and understand the necessity of new methods and structures such as neural networks. +\item \textbf{Chapter \ref{ch08:genetic-selection}: Use of genetic algorithm in the selection of activation function.} In this chapter we will explain a future work. Given a fixed number of neurons, the selection of its activation function may be crucial to reduce the train and test error. However, adding more free params to the search space increases its complexity and at same time the cost of finding a solution. However, the result obtained at chapter 6 and a property of our neural model will reduce the space complexity. +\end{itemize} - Chapter 4: Neuronal networks are universal approximators. - \paragraph{KEYWORDS:} \begin{itemize*}[label=,itemsep=1em,itemjoin=\hspace{1em}] \item neural networks + \item optimization + \item activation functions + \item weights initializing + \item machine learning library \end{itemize*} diff --git a/Memoria/preliminares/titulo.tex b/Memoria/preliminares/titulo.tex index a933175..5c6429c 100644 --- a/Memoria/preliminares/titulo.tex +++ b/Memoria/preliminares/titulo.tex @@ -31,8 +31,9 @@ \noindent\miNombre \textit{\miTitulo}. -Trabajo de fin de Grado. Curso académico \miCurso. - +\noindent Trabajo de fin de Grado. Curso académico \miCurso. +\\ +\\ \begin{minipage}[t]{0.25\textwidth} \flushleft \textbf{Responsables de tutorización} diff --git a/Memoria/tfg.tex b/Memoria/tfg.tex index ea14057..4f355e2 100644 --- a/Memoria/tfg.tex +++ b/Memoria/tfg.tex @@ -11,8 +11,8 @@ % Autor de la memoria: Blanca Cano Camarero -\documentclass{scrbook} - +%\documentclass{scrbook} +\documentclass[twoside]{scrbook} \KOMAoptions{% fontsize=10pt, % Tamaño de fuente paper=a4, % Tamaño del papel @@ -219,9 +219,10 @@ %\bigskip % Deja un espacio vertical en la parte superiọ-r } - -%Metodología \include{capitulos/0-Metodologia/Comentarios_previos} +\include{capitulos/Introduccion} +%Metodología + \input{capitulos/0-Metodologia/introduccion} \input{capitulos/0-Metodologia/herramientas} \input{capitulos/0-Metodologia/asignaturas} @@ -274,6 +275,7 @@ \chapter{Las redes neuronales son aproximadores universales} \input{capitulos/5-Estudio_experimental/combinacion_funciones_activacion} %\include{capitulos/N-Exploracion-hipotesis-planteadas/hipotesis} +\include{capitulos/9-Conclusiones} % -------------------------------------------------------------------- % APPENDIX: Opcional From e219bcfe3cecd8378ed34946a25383b4f2cbbed9 Mon Sep 17 00:00:00 2001 From: Blanca Date: Sun, 19 Jun 2022 11:40:43 +0200 Subject: [PATCH 68/76] =?UTF-8?q?A=C3=B1ade=20registro=20horas=20trabajo?= =?UTF-8?q?=20#117?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../capitulos/0-Metodologia/introduccion.tex | 13 +++++++++---- Memoria/img/0-metodologia/chart.png | Bin 0 -> 30217 bytes 2 files changed, 9 insertions(+), 4 deletions(-) create mode 100644 Memoria/img/0-metodologia/chart.png diff --git a/Memoria/capitulos/0-Metodologia/introduccion.tex b/Memoria/capitulos/0-Metodologia/introduccion.tex index 7019ceb..2a0c0c2 100644 --- a/Memoria/capitulos/0-Metodologia/introduccion.tex +++ b/Memoria/capitulos/0-Metodologia/introduccion.tex @@ -227,12 +227,17 @@ \section{Registro de trabajo} las tareas dedicadas y los hitos relacionados en la siguiente \href{https://docs.google.com/spreadsheets/d/1TCcKQIKjKW9sMSU2f6obN9gHgv3c8UEdjmONkBlv42M/edit?usp=sharing}{hoja de cálculo}. -En total el número de horas invertidas ha sido: -\textcolor{red}{TODO Estos TODOS están relacionados con el issue 46} -\textcolor{red}{TODO añadir registro} +En total el número de horas invertidas ha sido +unas $450$. + Que se distribuye de la siguiente manera en los distintos hitos: -\textcolor{red}{TODO añadir registro} +\begin{figure}[H] + \centering + \includegraphics[width=\textwidth]{0-metodologia/chart.png} + \caption{Sector circular sobre la dedicación a cada hito} + \label{img:dedicar-hito} + \end{figure} \section{Resumen de la metodología} diff --git a/Memoria/img/0-metodologia/chart.png b/Memoria/img/0-metodologia/chart.png new file mode 100644 index 0000000000000000000000000000000000000000..4d7e241d8d0198527a2dcbbfedac5653c257c995 GIT binary patch literal 30217 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

    DG}e|6N}rEy!WKz`nGjar|-M==dMoXGPXbD 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%0DMwGa2Ni&dI?Y)e8RGUMuPuQd Date: Sun, 19 Jun 2022 12:35:38 +0200 Subject: [PATCH 69/76] =?UTF-8?q?A=C3=B1ade=20agradecimiento=20#117?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Memoria/preliminares/agradecimientos.tex | 13 ++++++++++++- Memoria/tfg.tex | 2 +- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/Memoria/preliminares/agradecimientos.tex b/Memoria/preliminares/agradecimientos.tex index e94a5b4..dac3bf5 100644 --- a/Memoria/preliminares/agradecimientos.tex +++ b/Memoria/preliminares/agradecimientos.tex @@ -7,5 +7,16 @@ \chapter*{Agradecimientos} -Agradezco a +No todos los días termina una de escribir su trabajo fin de grado y en esta euforia casi descomedida me parece relevante volver la vista atrás y agradecer a todos aquellos que me han acompañado durante el camino. + +Comenzaré por +las personas que más quiero del mundo, gracias papá y mamá por vuestra infinita paciencia y vuestro amor inconmensurable, sin vosotros no hubiera sido posible (de hecho nada lo sería). +Gracias también a mis dos tutores, JJ y Javier por toda la atención que me han dedicado, que sepáis que sois dos \textit{soletes} y el cariño que me inspiráis no es poco. + +Por supuesto también a todas las personas que me han insuflado ganas de aprender e ir a clase, ya sean esos profesores inspiradores y cercanos o +todas las personas que he conocido y me han sacado una sonrisa alguna vez. + +Quiero además añadir una mención especial a mis compañeros \textit{algebristas recalcitrantes} Daniel y Ricardo por haberme aguantado durante tantísimas horas; y como no podía ser de otra forma: a mi fiel compañero de aventuras, a mi Sancho para su Quijote (o su Sancho para mi Quijote, según se tercie), a mi archiamigo Jose, gracias por todos los momentos que hemos compartido y nos quedan por vivir. + + \endinput diff --git a/Memoria/tfg.tex b/Memoria/tfg.tex index 4f355e2..04bf5a8 100644 --- a/Memoria/tfg.tex +++ b/Memoria/tfg.tex @@ -199,10 +199,10 @@ \include{preliminares/portada} \include{preliminares/titulo} \include{preliminares/declaracion-originalidad} +\include{preliminares/agradecimientos} \include{preliminares/resumen} \include{preliminares/summary} %\include{preliminares/dedicatoria} % Opcional -\include{preliminares/agradecimientos} \include{preliminares/tablacontenidos} % Opcional From 63106aa5fbbfe030d25111352c96e1730aafec1b Mon Sep 17 00:00:00 2001 From: Blanca Date: Sun, 19 Jun 2022 18:29:27 +0200 Subject: [PATCH 70/76] =?UTF-8?q?Corrigiendo=20erratilla=20ortogr=C3=A1fic?= =?UTF-8?q?as=20#117?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../capitulos/0-Metodologia/herramientas.tex | 2 +- .../capitulos/0-Metodologia/introduccion.tex | 2 +- .../Objetivos.tex | 2 +- .../aprendizaje_introduccion.tex | 2 +- .../feedforward-network-una-capa.tex | 4 +- .../articulo_1_primeras_definiciones.tex | 16 ++++---- .../introduccion.tex | 28 +++++++------ .../1_polinomios_de_Bernstein.tex | 6 +-- .../2_Weierstrass_approximation_theorem.tex | 30 +++++++------- .../3_TeoremaStoneWeierstrass.tex | 2 +- .../3-Teoria_aproximacion/4_Conclusiones.tex | 2 +- Memoria/capitulos/Introduccion.tex | 2 +- Memoria/preliminares/agradecimientos.tex | 8 ++-- Memoria/preliminares/summary.tex | 40 +++++++++---------- Memoria/tfg.tex | 2 +- 15 files changed, 76 insertions(+), 72 deletions(-) diff --git a/Memoria/capitulos/0-Metodologia/herramientas.tex b/Memoria/capitulos/0-Metodologia/herramientas.tex index b354810..9261fda 100644 --- a/Memoria/capitulos/0-Metodologia/herramientas.tex +++ b/Memoria/capitulos/0-Metodologia/herramientas.tex @@ -37,7 +37,7 @@ \subsection{\textit{Notebooks}} es interpretado (se va traduciendo y ejecutando línea a línea). } -Todos los gráficas que se muestran en la memoria han sido creadas por nosotros. +Todas las gráficas que se muestran en la memoria han sido creadas por nosotros. Las hemos generado con \textit{scripts} o la mayoría de la veces con \href{https://jupyter.org}{\textit{notebooks} de Jupyter}, el motivo de esto ha sido el tener una interacción y visualización más cómoda y compacta de los resultados. diff --git a/Memoria/capitulos/0-Metodologia/introduccion.tex b/Memoria/capitulos/0-Metodologia/introduccion.tex index 2a0c0c2..08abd17 100644 --- a/Memoria/capitulos/0-Metodologia/introduccion.tex +++ b/Memoria/capitulos/0-Metodologia/introduccion.tex @@ -203,7 +203,7 @@ \subsection*{Hito 2: Evaluación experimental de las hipótesis de optimización El criterio de aceptación de un producto mínimo viable consistirá en verificar que: \begin{itemize} - \item La implementación de los algoritmos debe de es coherente, proveniente del hito anterior y debe de estar referenciada. + \item La implementación de los algoritmos debe de ser coherente, proveniente del hito anterior y debe de estar referenciada. \item Toda implementación comprueba su correcto funcionamiento mediante tests. \item La redacción del análisis y conclusiones es aprobada por los tutores nuevamente. \end{itemize} diff --git a/Memoria/capitulos/1-Introduccion_redes_neuronales/Objetivos.tex b/Memoria/capitulos/1-Introduccion_redes_neuronales/Objetivos.tex index dfe720d..818195a 100644 --- a/Memoria/capitulos/1-Introduccion_redes_neuronales/Objetivos.tex +++ b/Memoria/capitulos/1-Introduccion_redes_neuronales/Objetivos.tex @@ -23,7 +23,7 @@ \chapter{Introducción a las redes neuronales} \cite{a-universal-law-of-Robustness} \cite{CHAI2021100134} el sustento de esto no deja de ser experimental o basado en cotas de carácter \textit{en el peor de los casos y por el tamaño del espacio de búsqueda}. Pero estos motivos no constituyen una demostración formal ni rigurosa de porqué decantarnos verdaderamente por -ello y, es más otros artículos experimentales demuestran que aumentar el número de capas no mejora los resultado +ello y, es más otros artículos experimentales demuestran que aumentar el número de capas no mejora los resultados \cite{DBLP:conf/iwann/Linan-Villafranca21}. Así pues, sustentados con la demostración de convergencia universal \cite{HORNIK1989359} diff --git a/Memoria/capitulos/1-Introduccion_redes_neuronales/aprendizaje_introduccion.tex b/Memoria/capitulos/1-Introduccion_redes_neuronales/aprendizaje_introduccion.tex index 685d25c..e3d3cad 100644 --- a/Memoria/capitulos/1-Introduccion_redes_neuronales/aprendizaje_introduccion.tex +++ b/Memoria/capitulos/1-Introduccion_redes_neuronales/aprendizaje_introduccion.tex @@ -130,7 +130,7 @@ \subsubsection{Aprendizaje semi supervisado } como por ejemplo en traducción o detección de fraudes. -Las redes neuronales son partícipes en los tres tipos de aprendizaje +Las redes neuronales son partícipes en todos los tipos de aprendizaje recién mencionados \cite{8612259}, \cite{DBLP:journals/corr/BakerGNR16}, \cite{10.5555/2955491.2955578}. Sin embargo centraremos nuestro estudio en el caso de aprendizaje supervisado. diff --git a/Memoria/capitulos/1-Introduccion_redes_neuronales/feedforward-network-una-capa.tex b/Memoria/capitulos/1-Introduccion_redes_neuronales/feedforward-network-una-capa.tex index f7dc8fd..aa80e5f 100644 --- a/Memoria/capitulos/1-Introduccion_redes_neuronales/feedforward-network-una-capa.tex +++ b/Memoria/capitulos/1-Introduccion_redes_neuronales/feedforward-network-una-capa.tex @@ -110,7 +110,7 @@ \section{Definición de las redes neuronales \textit{Feedforward Networks} \textbf{Interpretación fórmula} } {\maginLetterSize - Observemos que $n$ es el número de neuronas de la capa oculta. Es decir lo que en el grafo \ref{img:grafo-red-neuronal-una-capa-oculta} serían las neuronas de las capas ocultas se correspondería con términos $\gamma_{i}( A_{i}(x))$. + Observemos que $n$ es el número de neuronas de la capa oculta. Es decir lo que en el grafo \ref{img:grafo-red-neuronal-una-capa-oculta} serían los nodos interiores y se correspondería con los términos $\gamma_{i}( A_{i}(x))$. } } \normalmarginpar @@ -174,7 +174,7 @@ \subsection*{Diferencia con otras definiciones} \label{subsection:diferencia-ot Las diferencias con nuestra definición son las siguientes \begin{itemize} - \item \textbf{Desaparece la función de clasificación $\theta$} + \item \textbf{Desaparece la función de clasificación $\theta$}. \item \textbf{Se elimina un parámetro} por cada neurona. \item No se le exige condición de diferenciabilidad a priori, ya que a priori no existe ninguna hipótesis teórica que fuerce a tal restricción, como hemos visto en \ref{teo:MFNAUA}. \end{itemize} diff --git a/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_1_primeras_definiciones.tex b/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_1_primeras_definiciones.tex index c7572da..d7d2044 100644 --- a/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_1_primeras_definiciones.tex +++ b/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_1_primeras_definiciones.tex @@ -106,6 +106,7 @@ \section{Definiciones primeras}\label{ch:articulo:sec:defincionesPrimeras} % Nota sobre que la funciones de activación % son clave en el aprendizaje +\setlength{\marginparwidth}{\smallMarginSize} \marginpar{\maginLetterSize \iconoClave \textcolor{darkRed}{ \textbf{ @@ -117,9 +118,10 @@ \section{Definiciones primeras}\label{ch:articulo:sec:defincionesPrimeras} La idea intuitiva es que cada neurona lo que se hace es \textit{colocar} por transformaciones afines la imagen de la función de activación en el espacio con el fin de aproximar una región de la imagen de la función ideal. -Por lo tanto, la forma que ésta tenga será determinante en el número de neuronas necesarias para la convergencia. - +Por lo tanto, la forma que ésta tenga será determinante en el número de neuronas necesarias para la convergencia. } +\setlength{\marginparwidth}{\bigMarginSize} + % Fin del tratamiento de funciones de activación Para cualquier natural $d$ mayor que cero denotaremos por $\afines$ al conjunto de todas @@ -134,9 +136,9 @@ \section{Definiciones primeras}\label{ch:articulo:sec:defincionesPrimeras} \iconoAclaraciones \textcolor{dark_green}{ \textbf{Idea tras la definición de $\pmc$.} } -Nótese que de acorde a nuestra definición \ref{definition:redes_neuronales_una_capa_oculta} -lo que se ha definido es la clase de las redes -neuronales de una capa oculta y salida de una dimensión. +Nótese que de acorde a la definición \ref{definition:redes_neuronales_una_capa_oculta} +lo que se está refiriendo es la clase de las redes +neuronales de una capa oculta y \textbf{salida de una dimensión}. Donde cada sumando representa una neurona de la capa oculta. } %%% fin nota @@ -156,8 +158,8 @@ \section{Definiciones primeras}\label{ch:articulo:sec:defincionesPrimeras} \end{split} \end{equation} - Conforme avancen los resultado teórico veremos que $\pmc$ - no depende de la función $G$ seleccionada, así pues tras enunciar tales resultados nos referiremos sin ambigüedad a tal conjunto como $\rrnn$. + Conforme avancen los resultados teóricos veremos que $\pmc$ + no depende de la función $G$ seleccionada; así pues, tras enunciar tales resultados nos referiremos sin ambigüedad a tal conjunto como $\rrnn$. \end{definicion} diff --git a/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/introduccion.tex b/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/introduccion.tex index 14a60ef..3208cd0 100644 --- a/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/introduccion.tex +++ b/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/introduccion.tex @@ -6,7 +6,7 @@ %******************************************************* \section{Las redes neuronales son aproximadores universales} -Tras las definición \ref{sec:redes-neuronales-intro-una-capa} de red neural expuesta, +Tras las definición \ref{sec:redes-neuronales-intro-una-capa} de red neuronal expuesta, es pertinente la pregunta si tal estructura será capaz de aproximar con éxito una función genérica desconocida. @@ -35,6 +35,18 @@ \section{Las redes neuronales son aproximadores universales} \ref{teo:TeoremaConvergenciaRealEnCompactosDefinicionesEsenciales} e iremos refinando y generalizando los resultados hasta probar el resultado enunciado \ref{teo:MFNAUA} para una capa oculta. + % Nota margen de denso + \setlength{\marginparwidth}{\bigMarginSize} + \marginpar{\maginLetterSize + \iconoAclaraciones \textcolor{dark_green}{ + \textbf{Idea intuitiva conjunto denso.} + } + Si $S$ es denso en $T$, + se está está diciendo que \textbf{los elementos de $S$ son capaces de aproximar cualquier elemento de $T$ + con la precisión que se desee}. + } + + El esquema general será: \begin{align*} @@ -49,24 +61,14 @@ \section{Las redes neuronales son aproximadores universales} \fM. \end{align*} - % Nota margen de denso - \setlength{\marginparwidth}{\bigMarginSize} - \marginpar{\maginLetterSize - \iconoAclaraciones \textcolor{dark_green}{ - \textbf{Idea intuitiva conjunto denso.} - } - Si $S$ es denso en $T$, - se está está diciendo que \textbf{los elementos de $S$ son capaces de aproximar cualquier elemento de $T$ - con la precisión que se desee}. - } - + \begin{itemize} \item Las redes neuronales que nosotros hemos modelizado son densas en un espacio más general que hemos denominado \textit{Anillo de aproximación de redes neuronales} generado a partir de una función de activación $\psi$. \item Que a su vez es denso en el \textit{Anillo de aproximación de redes neuronales} generado a partir de una función medible $G$. - \item El espacio \textit{Anillo de aproximación de redes neuronales} es denso en la funciones continuas. + \item El espacio \textit{Anillo de aproximación de redes neuronales} es denso en el de las funciones continuas. \item Las funciones continuas son densas en el espacio de funciones medibles. \end{itemize} diff --git a/Memoria/capitulos/3-Teoria_aproximacion/1_polinomios_de_Bernstein.tex b/Memoria/capitulos/3-Teoria_aproximacion/1_polinomios_de_Bernstein.tex index ff4240c..f8883e8 100644 --- a/Memoria/capitulos/3-Teoria_aproximacion/1_polinomios_de_Bernstein.tex +++ b/Memoria/capitulos/3-Teoria_aproximacion/1_polinomios_de_Bernstein.tex @@ -191,7 +191,7 @@ \section{Polinomios de Bernstein}\label{ch:Bernstein} \begin{equation} x^2 = \sum_{k=2}^{n} \frac{k(k-1)}{n(n-1)} \binom{n}{k} x^{k} (1-x)^{n-k}. \end{equation} - Como con los términos $k=0$ y $k=1$ se anula, podemos añadir dichos índices sin modificar la suma + Como con los términos $k=0$ y $k=1$ se anulan, podemos añadir dichos índices sin modificar la suma \begin{equation} x^2 = \sum_{k=0}^{n} \frac{k(k-1)}{n(n-1)} \binom{n}{k} x^{k} (1-x)^{n-k}. \end{equation} @@ -361,9 +361,9 @@ \section{Polinomios de Bernstein}\label{ch:Bernstein} Además recordemos que se puede tomar un $n$ que satisfaga (\refeq{eq:cota-de-la-n}) y entonces se concluye que para los valores de $\mathcal{B}_{n x}$ se puede acotar la desigualdad por $\varepsilon$. - Por tanto, para un $n$ convenientemente seleccionado, se ha acotado la desigualdad para los indices $\mathcal{A}_{n x}$ y $\mathcal{B}_{n x}$, es decir todos los elementos de $\{0, \ldots, n\}$, por lo que concluimos que + Por tanto, para un $n$ convenientemente seleccionado, se ha acotado la desigualdad para los índices $\mathcal{A}_{n x}$ y $\mathcal{B}_{n x}$, es decir todos los elementos de $\{0, \ldots, n\}$, por lo que concluimos que \begin{equation*} |f(x) - B_n(x)| \leq 2 \varepsilon, \end{equation*} - independientemente del valor de $x$, por lo que se prueba que la secuencia de polinomios de Bernstein converge uniformemente a $f$ en $I$. + independientemente del valor de $x$, por lo que se prueba que la sucesión de polinomios de Bernstein converge uniformemente a $f$ en $I$. \end{proof} \ No newline at end of file diff --git a/Memoria/capitulos/3-Teoria_aproximacion/2_Weierstrass_approximation_theorem.tex b/Memoria/capitulos/3-Teoria_aproximacion/2_Weierstrass_approximation_theorem.tex index a6e3d8e..5addfef 100644 --- a/Memoria/capitulos/3-Teoria_aproximacion/2_Weierstrass_approximation_theorem.tex +++ b/Memoria/capitulos/3-Teoria_aproximacion/2_Weierstrass_approximation_theorem.tex @@ -4,18 +4,6 @@ %******************************************************* % Teorema de Aproximación Weierstrass %******************************************************* - -Realizando un repaso global habiendo acabado el teorema, - se pueden extraer que, junto a un ingenioso - manejo de operaciones y acotaciones; la clave del resultado reside en las consideraciones -en \refeq{consecuencia:M} y \refeq{consecuencia:delta} y estas a su vez en la -compacidad de $I$. - -Por su parte, la selección del dominio de $I = [0,1]$ viene determinada ya que - los nodos $\{ \frac{k}{N} \colon k\in \{0,..., N\}\}$ sobre los que se construye el \textit{N-ésimo polinomio de Bernstein} deben pertenecer a $I$. - -Sin embargo, tal dificultad es fácilmente salvable con un homeomorfismo. - % Nota margen sobre Idea intuitiva homeomorfismo \marginpar{\maginLetterSize \iconoAclaraciones \textcolor{dark_green}{ @@ -38,6 +26,19 @@ ya que el número de agujeros que tienen es distinto. } +Realizando un repaso global habiendo acabado el teorema, + se pueden extraer que, junto a un ingenioso + manejo de operaciones y acotaciones; la clave del resultado reside en las consideraciones +en \refeq{consecuencia:M} y \refeq{consecuencia:delta} y estas a su vez en la +compacidad de $I$. + +Por su parte, la selección del dominio de $I = [0,1]$ viene determinada ya que + los nodos $\{ \frac{k}{N} \colon k\in \{0,..., N\}\}$ sobre los que se construye el \textit{N-ésimo polinomio de Bernstein} deben pertenecer a $I$. + +Sin embargo, tal dificultad es fácilmente salvable con un homeomorfismo. + + + Como resultado de relajar el dominio donde se define $f$, pidiéndole tan solo compacidad nace el siguiente corolario. @@ -48,10 +49,9 @@ \begin{proof} Si $f$ se encuentra definida en $[a,b]$ con $a Date: Sun, 19 Jun 2022 23:29:22 +0200 Subject: [PATCH 71/76] corrige erratas menores #117 --- .../articulo_1_primeras_definiciones.tex | 10 +- .../articulo_2_teorema_1_hasta_lema_2_2.tex | 36 ++-- .../articulo_3_teorema_2_2.tex | 20 +-- .../articulo_5_colorarios_lp.tex | 43 ++--- .../articulo_6_multi_output.tex | 4 +- .../aprendizaje.tex | 4 +- .../construccion-evaluacion-red-neuronal.tex | 27 +-- .../1_funciones_activacion.tex | 157 +++++++++--------- .../3_algoritmo-inicializacion-pesos.tex | 7 +- .../3_detalles_implementacion.tex | 18 +- 10 files changed, 166 insertions(+), 160 deletions(-) diff --git a/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_1_primeras_definiciones.tex b/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_1_primeras_definiciones.tex index d7d2044..418f5cb 100644 --- a/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_1_primeras_definiciones.tex +++ b/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_1_primeras_definiciones.tex @@ -175,9 +175,7 @@ \section{Definiciones primeras}\label{ch:articulo:sec:defincionesPrimeras} funciones de esta clase seremos capaz de aproximar cualquier función continua. De esta manera este conjunto actuará de nexo de unión entre las funciones continuas y las redes neuronales facilitando las demostraciones. De ahora en adelante nos - referiremos a este conjunto como al \textbf{de anillo de aproximación} (como curiosidad, el nombre proviene a que - tiene estructura de anillo y que se utilizará para - aproximar funciones continuas). + referiremos a este conjunto como al \textbf{de anillo de aproximación}. } \begin{definicion} [Anillo de aproximación de redes neuronales]\label{def:articulo_abstracción_rrnn} @@ -213,7 +211,8 @@ \section{Definiciones primeras}\label{ch:articulo:sec:defincionesPrimeras} predecir la naturaleza de datos nuevos. Es por ello necesario suponer que estos datos están regidos por alguna regla, la cual puede ser todo lo extraña posible pero que toma valores - que pueden ser observables y cuantificables en la mayoría de los casos, estos comportamientos son formalizados + que pueden ser observables y cuantificables en la mayoría de los casos, + estos comportamientos son formalizados matemáticamente con \textbf{funciones medibles}. } \setlength{\marginparwidth}{\bigMarginSize} @@ -250,7 +249,6 @@ \subsection{ Reflexión sobre el tipo de funciones que se pueden aproximar} \begin{definicion} [Subconjunto denso] % Nota margen de denso - \reversemarginpar \marginpar{\maginLetterSize \iconoAclaraciones \textcolor{dark_green}{ \textbf{Idea intuitiva conjunto denso.} @@ -259,7 +257,6 @@ \subsection{ Reflexión sobre el tipo de funciones que se pueden aproximar} se está está diciendo que \textbf{los elementos de $S$ son capaces de aproximar cualquier elemento de $T$ con la precisión que se desee}. } - \normalmarginpar Dado un subconjunto $S$ de un espacio métrico $(X, \rho)$, se dice que $S$ es denso por la distancia $\rho$ en subconjunto $T$ si para todo $\varepsilon$ positivo y cualquier $t \in T$ existe un $s \in S$ tal @@ -269,6 +266,7 @@ \subsection{ Reflexión sobre el tipo de funciones que se pueden aproximar} Un ejemplo habitual es en el espacio métrico $(\R, |\cdot|)$ con $|\cdot|$ el valor absoluto, el subconjunto $T = \R$ y $S$ los números irracionales, $S = \R \setminus \Q$. +\newpage \begin{definicion} Un subconjunto $S$ de $\fC$ se dice que es \textbf{uniformemente denso para compactos} en $\fC$ diff --git a/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_2_teorema_1_hasta_lema_2_2.tex b/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_2_teorema_1_hasta_lema_2_2.tex index 2b16506..22aebc3 100644 --- a/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_2_teorema_1_hasta_lema_2_2.tex +++ b/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_2_teorema_1_hasta_lema_2_2.tex @@ -99,7 +99,6 @@ \section{Primeros resultados} \end{enumerate} Veamos que $\pmcg$ separa puntos para cada compacto $K \subset \R^r$. - Por ser $G$ no constante existirán $a,b \in \R$ distintos cumpliendo que $G(a) \neq G(b)$. Fijadas $x,y \in K$ tomamos entonces cualquiera de las funciones afines que cumplen que $A(x) = a$ y $A(y)=b$ \footnote{Sabemos que al menos una habrá, ya que podemos plantear la función afín @@ -116,7 +115,7 @@ \section{Primeros resultados} \subsection{Observaciones y reflexiones sobre el teorema de convergencia real en compactos} -Con esto lo que acabamos de probar que una estructura más general de\textit{feedforward neural networks} con tan solo una capa oculta son capaces de aproximar cualquier +Con esto lo que acabamos de probar es que una estructura más general de \textit{feedforward neural networks} con tan solo una capa oculta son capaces de aproximar cualquier función continua en un compacto. Cabe destacar que a la función $G$, que haría el papel de función de activación, solo se le ha pedido como hipótesis ser continua. @@ -135,7 +134,8 @@ \subsection{Observaciones y reflexiones sobre el teorema de convergencia real en \marginpar{\maginLetterSize \iconoProfundizar \textcolor{blue}{\textbf{Nueva hipótesis de optimización}} El corolario \ref{cor:se-generaliza-G-a-una-familia} abre la puerta a preguntarse si la combinación de diferentes funciones de activación -podría mejorar los resultados de alguna manera. +podría mejorar los resultados de alguna manera. De hecho +trataremos sobre esto en el capítulo \ref{ch08:genetic-selection}. } \normalmarginpar @@ -168,7 +168,6 @@ \subsection{Observaciones y reflexiones sobre el teorema de convergencia real en Notemos que este resultado no da pista alguna de las ventajas de una función frente a otra, ni cómo afecta a la \textit{velocidad de convergencia}. - Es más, a priori se estaría aumentando el espacio de búsqueda, lo que significaría que \textit{dificultaría el encontrar la solución}, es decir un aumento en coste y aumento del error de aproximación. @@ -316,48 +315,43 @@ \subsection{Observaciones y reflexiones sobre el teorema de convergencia real en % 2 -> 3 Probaremos ahora que (2) $\Longrightarrow$ (3). - - Por (2) se tiene que sea cual sea el $\varepsilon$ cumpliendo que + Por (2) se tiene que sea cual sea $\varepsilon$ cumpliendo que $0 < \varepsilon \leq 2$ existirá un natural $n_0$ a partir del cual, cualquier otro natural $n$ satisface que \begin{equation} - \mu \{ + \mu \left\{ x : |f_n(x) - f(x)| > \frac{\varepsilon}{2} - \} + \right\} < - \frac{\varepsilon}{2}, + \frac{\varepsilon}{2}. \end{equation} - Gracias a esta desigualdad, para cualquier $n > n_0$ podemos acotar la siguiente integral: \begin{equation} \int \min \{ |f_n(x) - f(x)|, 1\} d\mu(x) \leq \frac{\varepsilon}{2} (1-\frac{\varepsilon}{2}) + 1\frac{\varepsilon}{2} - = \varepsilon - \frac{\varepsilon^2}{4} < \varepsilon. + = \varepsilon - \frac{\varepsilon^2}{4} < \varepsilon, \end{equation} probando con ello la implicación (2) $\Longrightarrow$ (3). % 3 -> 1 Finalmente comprobaremos la implicación (3) $\Longrightarrow$ (1). - Para cada $n\in \N$ llamamos $g_n = \min\{|f_n - f|, 1|\}$. Por (2), dado $0 < \varepsilon < 1$, existe un $n_0 \in \N$ de modo que si $n \geq n_0$ se cumple que \begin{equation}\label{eq:definiciones_Básicas_Integral_GN_menor_Epsilon_Cuadrado} - \int g_n d\mu < \varepsilon^2 + \int g_n d\mu < \varepsilon^2. \end{equation} Como $\varepsilon < 1$ tenemos que \begin{equation} \{ x; g_n(x) > \varepsilon \} = - \{ x; |f_n - f| > \varepsilon \} + \{ x; |f_n - f| > \varepsilon \}, \end{equation} - luego - \begin{equation} \mu\{ x; |f_n - f(x)| > \varepsilon \} = @@ -367,9 +361,8 @@ \subsection{Observaciones y reflexiones sobre el teorema de convergencia real en \int_{g_n(x) > \varepsilon} g_n d\mu < \varepsilon \quad - \forall n \geq n_0 + \forall n \geq n_0, \end{equation} - donde se ha usado la desigualdad de Chebyshev para $g_n$ y la desigualdad (\refeq{eq:definiciones_Básicas_Integral_GN_menor_Epsilon_Cuadrado}). @@ -411,12 +404,12 @@ \subsection{Observaciones y reflexiones sobre el teorema de convergencia real en \iconoAclaraciones \textcolor{dark_green}{ \textbf{Idea intuitiva lema \ref{lema:A_1_C_es_denso_en_M}:}} } \marginpar{\maginLetterSize - Las funciones continuas pueden tomar formas muy variopintas, estando incluso no acotadas. La función de Dirichlet definida en $D(x) = 1$ si $x$ es irracional y $D(x)=0$ si $x$ es racional, es medible pero no es continua ya que presenta infinitas discontinuidades. + Las funciones medibles pueden tomar formas muy variopintas, estando incluso no acotadas, un ejemplo de ello es la función de Dirichlet definida como $D(x) = 1$ si $x$ es irracional y $D(x)=0$ si $x$ es racional. Esta función es medible pero no es continua ya que presenta infinitas discontinuidades. } \marginpar{\maginLetterSize Sin embargo, las funciones continuas son más simples, fáciles de entender y manejar. Gracias al lema \ref{lema:A_1_C_es_denso_en_M} - acabamos de probar que \textbf{podemos aproximar en + se prueba el llamativo resultado de que \textbf{podemos aproximar en casi todos sus puntos cualquier función medible a partir de una continua.} } \marginpar{\maginLetterSize @@ -431,7 +424,6 @@ \subsection{Observaciones y reflexiones sobre el teorema de convergencia real en = g_n. \end{equation} - Por lo que \begin{equation} \label{eq:lema3_2_integral_en_compacto_K} \int_K g_n d\mu @@ -440,7 +432,7 @@ \subsection{Observaciones y reflexiones sobre el teorema de convergencia real en \leq \frac{\varepsilon}{2} . \end{equation} - + % Acotando el primer sumando por la medida del complemento de la región integrada y en virtud de (\refeq{eq:lema3_2_integral_en_compacto_K}) diff --git a/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_3_teorema_2_2.tex b/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_3_teorema_2_2.tex index fe187fe..9910f9a 100644 --- a/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_3_teorema_2_2.tex +++ b/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_3_teorema_2_2.tex @@ -25,7 +25,7 @@ Se prueba en el teorema \ref{teo:2_2_denso_función_continua} que con una \textbf{versión más general de una red neuronal} (perteneciente a $\pmcg$) \textbf{se es capaz de aproximar cualquier función medible}. - La idea de la demostración es sencilla, sabemos aproximar una función medible con una continua y a su vez una continua con una red neuronal generalizada, luego sabemos aproximar una función medible con una red neuronal generalizada. + La idea de la demostración es sencilla, sabemos aproximar una función medible con una continua y a su vez una continua con una del \textit{anillo de aproximación de redes neuronales}, luego sabemos aproximar una función medible con una \textit{anillo de aproximación de redes neuronales}. } % Fin de la nota @@ -298,7 +298,7 @@ < \varepsilon. \end{equation} - + % Por el lema \ref{lema:a_2_paso_previo_denso} existe una función $H_{\delta}(\cdot) = \sum_{t=1}^T \beta_t \psi(A_t(\cdot))$ cumpliendo que @@ -306,7 +306,6 @@ \begin{equation} \sup_{\lambda \in \R} |F(\lambda) - H_{\delta}(\lambda) | < \delta. \end{equation} - Usando \refeq{eq:teorema_2_3__1} para $a_k = F(A_k(x))$ y $b_k = H_\delta(A_k(x))$ obtenemos @@ -320,7 +319,7 @@ < \varepsilon. \end{equation} - + % Puesto que $H_\delta$ es de la forma $\sum_{t=1}^T \beta_t \psi(A_t(\cdot))$ y porque $A_t(A_k(\cdot)) \in \afines$ se tiene por la desigualdad \refeq{eq:teorema2_3__3} que $\prod ^l_{k=1} H_\delta(A_k(\cdot)) \in \rrnng.$ @@ -544,10 +543,9 @@ Definimos \begin{equation} - B = \max \{ |\beta_j| : j \in \{1, ..., q \}\} + B = \max \{ |\beta_j| : j \in \{1, ..., q \}\}, \end{equation} - - En virtud del lema \ref{lema:A_3_función_activación_continua_con_arbitaria} + en virtud del lema \ref{lema:A_3_función_activación_continua_con_arbitaria} podemos encontrar $\cos_{M, \frac{\varepsilon}{q B}} \in \sum(\psi)$ cumpliendo que \begin{equation} @@ -700,7 +698,7 @@ Para cualquier función de activación $\psi$, $d \in \N$ y medida de probabilidad $\mu$ en $(\R^d, B^d)$, se tiene que $\rrnn$ es uniformemente denso para compactos - en $\fC$ y denso en $\fM$ para a la distancia $\dist$. + en $\fC$ y denso en $\fM$ para la distancia $\dist$. \end{teorema} % Nota idea intuitiva lema de que C es denso en M @@ -729,9 +727,9 @@ \begin{proof} En el lema anterior acabamos de ver que $\rrnn$ es uniformemente denso en compactos en $\fC$ -y gracias al lema \ref{lema:2_2_convergencia_uniforme_en_compactos} -(Si $\{f_n\}$ es una sucesión de funciones en $\fM$ que converge -uniformemente en un compacto a $f$ entonces $\rho_{\mu}(f_n, f) \longrightarrow 0$.) +y gracias al lema \ref{lema:2_2_convergencia_uniforme_en_compactos} que recordemos que afirma que +si $\{f_n\}$ es una sucesión de funciones en $\fM$ que converge +uniformemente en un compacto a $f$ entonces $\rho_{\mu}(f_n, f) \longrightarrow 0$; esto implica que $\rrnn$ sea $\dist$-denso en $\fC$. diff --git a/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_5_colorarios_lp.tex b/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_5_colorarios_lp.tex index c825f29..d4415fe 100644 --- a/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_5_colorarios_lp.tex +++ b/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_5_colorarios_lp.tex @@ -33,9 +33,7 @@ \section{Generalización a espacios $L_p$} de funciones $f \in \fM$ tales que \begin{equation} \int |f(x)|^p d\mu < \infty. - \end{equation} - - + \end{equation} Se define la norma de $L_p$ como \begin{equation} \| f\|_p @@ -165,7 +163,7 @@ \section{Generalización a espacios $L_p$} %Corolario 2.4 \begin{corolario} \label{corolario:2_4_conjunto_finito} Sea $\mu$ una medida, que para - un conjunto finito de puntos $O$ cumple que $\mu(0)=1$, + un conjunto finito de puntos $O$ cumple que $\mu(O)=1$, entonces, para cualquier función medible $g \in \fM$ y sea cual sea $\varepsilon >0$ existe $f \in \rrnn$ la cual cumple que @@ -217,7 +215,6 @@ \section{Generalización a espacios $L_p$} |f(x) - g(x)| > \varepsilon \} = 0.$ - Por lo que acabamos de probar, como queríamos, que \begin{equation} \mu\{ @@ -256,15 +253,20 @@ \section{Generalización a espacios $L_p$} El resultado nos indica que podemos obtener una red neuronal $h$ que aproxime tal clasificador, pero \textbf{tal red neuronal no necesariamente tomará valores discretos}, es decir, - pudiera darse el caso que - $h( \{ x : g(x)=0 \}) \subset [-0.2,0.3]$ y que - $h(\{ x : g(x)=1 \}) \subset [0.9,1.2]$, - por lo que se pone de manifiesto en este resultado, - que en caso de requerirse de una salida completamente - discreta debería de componerse con otra función $\theta$ + pudiera darse el caso en que las imágenes + a un rango, por ejemplo: + $$h( \{ x : g(x)=0 \}) \subset [-0.2,0.3]$$ + y que + $$h(\{ x : g(x)=1 \}) \subset [0.9,1.2],$$ + por lo que se pone de manifiesto en este + resultado, + que en caso de requerirse + de una salida completamente + discreta debería de componerse + con otra función $\theta$ tal que - $\theta \circ h(\{ x : g(x)=0 \})=0$ y - $\theta \circ h(\{ x : g(x)=1 \})=1$. + $$\theta \circ h(\{ x : g(x)=0 \})=0$$ y + $$\theta \circ h(\{ x : g(x)=1 \})=1$$. } @@ -365,7 +367,7 @@ \section{Generalización a espacios $L_p$} Por tanto \begin{align} 0 &\leq \psi(-M) \leq \psi(M_1) = 0 \quad \text{ luego } \quad \psi(-M) = 0, \\ - 1 &\geq \psi(M) \geq \psi(M_2) = 1 \quad \text{ luego } \quad\psi(M) = 1 + 1 &\geq \psi(M) \geq \psi(M_2) = 1 \quad \text{ luego } \quad\psi(M) = 1. \end{align} Gracias a estas desigualdades es fácil ver que @@ -382,7 +384,7 @@ \section{Generalización a espacios $L_p$} \begin{equation} \psi(x)= \left\{ \begin{array}{lcc} 0 & si & x \leq 0 \\ - \frac{| x |}{1+ | x |}& si & 0< x + \frac{| x |}{1+ | x |}& si & 0< x. \end{array} \right. \end{equation} @@ -449,7 +451,7 @@ \section{Generalización a espacios $L_p$} Es interesante reparar en que la demostración se basa en añadir una neurona por cada punto que queramos que tome un valor concreto, esa neurona se activará (es decir, no será nula) cuando la entrada $x$ \textit{sea mayor} que el valor que la activa $x_i$ y vale la diferencia con el valor anterior $x_{i-1}$, es decir $g(x_{i}) - g(x_{i-1})$, como el nodo $x_{i-1}$ - también se activará por ser menor menor, el término $g(x_{i-1})$ se suma a la salida de la red y así como una serie telescópica al final solo resultará el valor $g(x_i)$. + también se activará por ser menor, el término $g(x_{i-1})$ se suma a la salida de la red y así como una serie telescópica al final solo resultará el valor $g(x_i)$. } } \setlength{\marginparwidth}{\bigMarginSize} @@ -477,10 +479,10 @@ \section{Generalización a espacios $L_p$} \textbf{Caso primero} -Suponemos que $\{x_1, \cdots, x_n\} \subset \R$ y tras renombrar +Suponemos que $\{x_1, \ldots, x_n\} \subset \R$ y tras renombrar podemos suponer que \begin{equation} - x_1 < x_2 < \ldots < x_n. + x_1 < x_2 < \cdots < x_n. \end{equation} Por alcanzar la función de activación $\psi$ el cero y el uno, @@ -609,7 +611,8 @@ \section{Generalización a espacios $L_p$} \end{equation} Podemos definir entonces $A \in \afines$ por $A_k(x)=B_k(p \cdot x).$ -Fijamos $\beta_k = g(x_k) - g(x_{k-1})$. +Fijamos también +$$\beta_k = g(x_k) - g(x_{k-1}).$$ La red neuronal $f_k$ se calcula como \begin{align} f_k(x) @@ -621,7 +624,7 @@ \section{Generalización a espacios $L_p$} & = \sum_{j=1}^k \beta_j \psi(A_j(x)) = - (g(x_k)-g(x_{k-1})) \psi(A_k(x)) + f_{k-1}(x) + (g(x_k)-g(x_{k-1})) \psi(A_k(x)) + f_{k-1}(x). \end{align} \end{itemize} diff --git a/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_6_multi_output.tex b/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_6_multi_output.tex index 80eca1d..794321d 100644 --- a/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_6_multi_output.tex +++ b/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_6_multi_output.tex @@ -33,7 +33,7 @@ \section{Generalización para \textit{multi-output neural networks}} con $i \in \{1,\ldots, h\}$ . \begin{definicion}[Abstracción de una red neuronal con una capa oculta y múltiple salida] - Para cualquier función Borel medible $G$, definida de $\R$ a $\R$ y cualquiera naturales positivo + Para cualquier función Borel medible $G$, definida de $\R$ a $\R$ y cualesquiera naturales positivos $d,s \in \N$ se define a la clase de funciones $\rrnnmc$ como \begin{equation} \begin{split} @@ -203,7 +203,7 @@ \section{Generalización para \textit{multi-output neural networks}} Considerando $f$ compuesta por $h_n + h_1$ sumandos y donde sus pesos son los siguientes: El peso $\tilde{w}$ de las funciones afines: - Para cuales quiera + Para cualesquiera $i \in \{0, 1, \ldots , d \}$ y $j \in \{1, \ldots , h_n, h_{n} + 1, \ldots, h_n + h_1\}$ determinaremos la siguiente casuística \begin{enumerate} diff --git a/Memoria/capitulos/4-Actualizacion_redes_neuronales/aprendizaje.tex b/Memoria/capitulos/4-Actualizacion_redes_neuronales/aprendizaje.tex index 907d854..8181d28 100644 --- a/Memoria/capitulos/4-Actualizacion_redes_neuronales/aprendizaje.tex +++ b/Memoria/capitulos/4-Actualizacion_redes_neuronales/aprendizaje.tex @@ -556,7 +556,7 @@ \subsection{ Motivación para almacenar cálculos parciales} \subsection{Algoritmos de actualización de pesos de una neurona} -Nuestro objetivo es aplicar el algoritmo de gradiente descendente, codificaremos una red neural $h \in \rrnnsmn$ de estructura $(A,S,B)$, como dos matrices de parámetros $\alpha$ y $\beta$ y de respectivos tamaños $d \times(n+1)$ y $s \times n$: +Nuestro objetivo es aplicar el algoritmo de gradiente descendente, codificaremos una red neuronal $h \in \rrnnsmn$ de estructura $(A,S,B)$, como dos matrices de parámetros $\alpha$ y $\beta$ y de respectivos tamaños $d \times(n+1)$ y $s \times n$: \begin{align}\label{eq:representation red neuronal} A &= (\alpha_{i j}) \text{ con } i \in \{1, \ldots d\}, \; j \in \{1, \ldots n\}. \\ @@ -571,7 +571,7 @@ \subsection{Algoritmos de actualización de pesos de una neurona} \hspace*{\algorithmicindent} \textbf{Input}:$h$ red neuronal y conjunto de entrenamiento \\ \hspace*{\algorithmicindent} \textbf{Output:} $h$ actualizada de acorde al algoritmo de gradiente descendente. \begin{algorithmic}[1] - \STATE Debe de calcularse el previamente $\nabla E(h)$, es decir cada una de las derivadas parciales, esto se hará en el algoritmo \ref{algoritmo:calculo-gradiente}. + \STATE Debe de calcularse previamente $\nabla E(h)$, es decir cada una de las derivadas parciales, esto se hará en el algoritmo \ref{algoritmo:calculo-gradiente}. % actualizamos los pesos de a \STATE Actualización de los pesos de $A$ \\ \For{ diff --git a/Memoria/capitulos/4-Actualizacion_redes_neuronales/construccion-evaluacion-red-neuronal.tex b/Memoria/capitulos/4-Actualizacion_redes_neuronales/construccion-evaluacion-red-neuronal.tex index 29dffb0..591d29e 100644 --- a/Memoria/capitulos/4-Actualizacion_redes_neuronales/construccion-evaluacion-red-neuronal.tex +++ b/Memoria/capitulos/4-Actualizacion_redes_neuronales/construccion-evaluacion-red-neuronal.tex @@ -12,7 +12,7 @@ \chapter{Construcción técnica de las redes neuronales de una sola capa} estaremos en condiciones se comparará y estudiará la relación teórica entre nuestra propuesta de modelo y los modelos usuales de redes neuronales. Además se justificará, -la selección de nuestro modelo en las sección \ref{ch05:justifica-modelo}. +la selección de nuestro modelo en la sección \ref{ch05:justifica-modelo}. Explicaremos también una construcción técnica junto con un análisis del costo necesario y beneficio obtenido del modelo (ver sección \ref{ch05:construction-evaluation-nnnn}); @@ -55,7 +55,7 @@ \section{Componentes de una red neuronal de una capa oculta} \item De la forma $\beta_{i k}$: $n s$. \item De la forma $w_{i j}$: $n(d+1)$. \end{itemize} -Lo que hace un total de $n(s+d+1)$ parámetros, done $n$ es el número de neuronas, $s$ la dimensión de salida y $d$ la dimensión de entrada. +Lo que hace un total de $n(s+d+1)$ parámetros, donde $n$ es el número de neuronas, $s$ la dimensión de salida y $d$ la dimensión de entrada. \textbf{Por lo general $d$ y $s$ son fijos ya que se suponen requisitos del problema, luego si se desea reducir el coste en memoria deberá de hacerse disminuyendo el número de neuronas.} Analizaremos más a fondo su componentes. @@ -104,9 +104,9 @@ \subsection*{Unidades ocultas} \subsection{Criterio de selección de funciones de activación} Los aspectos a tener en cuenta a la hora de seleccionar una función -de activación frente a otra de una red neuronal serían los siguientes: +de activación frente a otra serían los siguientes: \begin{enumerate} - \item Espacio de memoria. + \item Espacio de memoria que ocupe. \item Coste computacional. \item Efectividad en cuanto a reducir el error de aproximación. \end{enumerate} @@ -152,7 +152,7 @@ \section{Justificación del modelo seleccionado} Con el fin de motivarlos tengamos presente la definición de los modelos usuales presentada en \ref{subsection:diferencia-otras-definiciones-RRNN} y la demostración de que el modelo planteado -es un aproximados universal del teorema \ref{teo:MFNAUA}. +es un aproximador universal del teorema \ref{teo:MFNAUA}. Si bien el teorema de convergencia universal nos asegura que los elementos adicionales de los @@ -255,11 +255,11 @@ \subsection{Consideraciones sobre la irrelevancia del sesgo} \begin{equation} \mathcal{E}_{\mathcal{D}}(\mathcal{H}^+(X,Y)) \leq - \mathcal{E}_{\mathcal{D}}(\mathcal{H}(X,Y)) + \mathcal{E}_{\mathcal{D}}(\mathcal{H}(X,Y)). \end{equation} - La clave ahora reside en si se satisface la desigualdad opuesta -Es decir, dada cualquier $h^+ \in \mathcal{H}^+_n(X,Y)$ con un error de $E_D(h^+)$ existe $h \in \mathcal{H}_n(X,Y)$ tal que $E_D(h) \leq E_D(h^+).$ + La clave ahora reside en si se satisface la desigualdad opuesta, +es decir, dada cualquier $h^+ \in \mathcal{H}^+_n(X,Y)$ con un error de $E_D(h^+)$ existe $h \in \mathcal{H}_n(X,Y)$ tal que $E_D(h) \leq E_D(h^+).$ Esto no es posible y para darse cuenta basta con considerar el caso de una neurona, con $G(x)$ su función de activación y $k \in \R^+$ definimos la función ideal como $f(x) = G(x) +k$. Tomando tan solo dos puntos convenientemente seleccionados (por ejemplo $M$ y $-M$ tal que $G(-M) = 0$ y $G(M) = 1$) aprecia que $H_1(\R, \R)$ no puede aproximar $f$ y sin embargo $f \in H^+_1(\R, \R)$. @@ -310,7 +310,7 @@ \subsection{\textit{Modus operandi} ante problemas que requieran un dominio de s $h \in \rrnnmc$ tal que $h$ aproxime a $\theta^{-1} \circ f$. Lo cual exige que $\theta$ tenga inversa y que sea medible, además de la cuestión de qué $\theta$ es la más conveniente $\dots$ - +\newpage \begin{aportacionOriginal} % aportación original salida discreta Es por ello que en nuestra aproximación descartamos este modo de proceder y proponemos el siguiente: @@ -439,9 +439,9 @@ \subsection*{Primera optimización reformulando la implementación de una red ne A \in M_{n \times d}(\R), S\in M_{n \times 1}(\R) \text{ y } - B \in M_{s \times n}(\R). + B \in M_{s \times n}(\R), \end{equation} -y con esta representación la evaluación sería +con esta representación la evaluación sería \begin{equation} h(x) = B \cdot @@ -452,7 +452,7 @@ \subsection*{Primera optimización reformulando la implementación de una red ne + S \right), \end{equation} -que tiene un coste computacional de +que tiene un coste computacional que mostramos en la siguiente tabla: \begin{table}[h] \begin{center} \begin{tabular}{| c | c |} @@ -469,7 +469,7 @@ \subsection*{Primera optimización reformulando la implementación de una red ne \end{center} \end{table} -Que como vemos ha supuesto una mejora de +Que como vemos ha supuesto una mejora de: \begin{table}[h] \centering @@ -607,6 +607,7 @@ \subsubsection*{Ejemplo de evaluación de una red neuronal} \end{bmatrix}. \end{equation} +\newpage \subsection{Implementación de una red neuronal y evaluación} \label{section:rrnn_implementation} A la hora de abstraer una red neuronal diff --git a/Memoria/capitulos/5-Estudio_experimental/1_funciones_activacion.tex b/Memoria/capitulos/5-Estudio_experimental/1_funciones_activacion.tex index 50ca1b7..5316f9f 100644 --- a/Memoria/capitulos/5-Estudio_experimental/1_funciones_activacion.tex +++ b/Memoria/capitulos/5-Estudio_experimental/1_funciones_activacion.tex @@ -368,7 +368,6 @@ \section{Caracterización de las funciones de activación} \subseteq \mathcal{H}^+_{\gamma, n}(\R^d, \R^s). \end{equation} - Además, $\phi$ con las hipótesis exigidas es invertible, con inversa: \begin{equation} @@ -399,7 +398,6 @@ \section{Caracterización de las funciones de activación} = \mathcal{H}^+_{\sigma, n}(\R^d, \R^s). \end{equation*} - Como demostramos en \ref{consideration-irrelevancia-sesgo} se tiene que \begin{equation*} \mathcal{H}^+_{\sigma, n}(\R^d, \R^s) = \mathcal{H}^+_{\gamma, n}(\R^d, \R^s) @@ -531,11 +529,6 @@ \section{ Selección de las mejores funciones de activación} Compararemos entonces su coste computacional y tomaremos como representante de la clase aquel que sea de menor coste. -\subsection{ Implementación de las funciones de activación en la biblioteca de redes neuronales} -\label{ch06:activation-function-implementation} -Las funciones de activación han sido implementadas con cuidado de que sean eficientes -y valiéndose de las características propias de Julia, para ello se han utilizado técnicas como: - % Comentario aclaratorio de qué es indirección \setlength{\marginparwidth}{\bigMarginSize} \marginpar{\maginLetterSize @@ -564,6 +557,12 @@ \subsection{ Implementación de las funciones de activación en la biblioteca de que conllevan resolver las indirecciones en este caso. } + +\subsection{ Implementación de las funciones de activación en la biblioteca de redes neuronales} +\label{ch06:activation-function-implementation} +Las funciones de activación han sido implementadas con cuidado de que sean eficientes +y valiéndose de las características propias de Julia, para ello se han utilizado técnicas como: + \begin{itemize} % Programación modular \item \textbf{Programación modular}: Tal y como se recomienda en la documentación de Julia \footnote{ @@ -578,13 +577,13 @@ \subsection{ Implementación de las funciones de activación en la biblioteca de % Macros \item \textbf{Macros}\footnote{La información consultada de macros ha sido de la página oficial de Julia, a día 23 de mayo del 2022, URL: \url{https://docs.julialang.org/en/v1/manual/metaprogramming}}: - que permiten sustituciones de código cuando el código es analizado por el compilador; + que permiten sustituciones de código cuando éste es analizado por el compilador; de esta manera, funciones que devuelven otras funciones dependientes de un parámetro se verán beneficiadas, ya que hace que se ejecute código más rápido evitando indirecciones \footnote{La fuente bibliográfica ha sido la \href{https://es.wikipedia.org/wiki/Indirección}{Wikipedia}, a día 26 de mayo del 2022. También recomendamos especialmente la entrada en inglés de la misma: \href{https://en.wikipedia.org/wiki/Indirection}{\textit{Indirection}} consultada también el día 26 de mayo del 2022. - } y el y el overhead correspondiente. + } y el overhead correspondiente. Puede encontrar la implementación de esto en la biblioteca de redes neuronales implementada en nuestro repositorio \footnote{ @@ -610,51 +609,35 @@ \subsection{ Implementación de las funciones de activación en la biblioteca de su plenitud, puesto que tengamos en cuenta que la variabilidad a la hora de definir y caracterizar a una función de activación, ya que algunas no dependen de ningún parámetro mientras que otras lo hacen incluso de otras funciones (ver definiciones en la tabla \ref{table:funciones-de-activation}). - - % Sistema de tipos -\subsubsection*{Sobre el sistema de tipos de Julia} -\label{ch06:sistema-timpos-julia} - Julia posee un sistema de tipos muy rico - \footnote{ - Véase la documentación oficial de Julia sobre \textit{Types}: - \url{https://docs.julialang.org/en/v1/manual/types/}. - Esta URL fue consultada el 26 de mayo de 2022. +% Nota sobre porqué nos interesa ajustar el dominio +\reversemarginpar +\setlength{\marginparwidth}{\smallMarginSize} +\marginpar{\maginLetterSize +\iconoClave \textcolor{darkRed}{ + \textbf{ + Interés de controlar el dominio de una función } - dinámico, nominal y paramétrico; pero que ofrece la posibilidad de obtener - beneficio de los tipos estáticos. - Podría entonces un plantearse - Sacar provecho de esto en la \textcolor{darkRed}{declaración - del dominio} e imagen de una función de activación y prevención de errores. - - % Nota sobre porqué nos interesa ajustar el dominio - \reversemarginpar - \setlength{\marginparwidth}{\smallMarginSize} - \marginpar{\maginLetterSize - \iconoClave \textcolor{darkRed}{ - \textbf{ - Interés de controlar el dominio de una función - } - } +} - Lo cual permitiría optimizar la evaluación de la función; - ya que si la función tuviera comportamientos diferentes en función del rango, - habría que estudiarlos con condiciones interiores que aumentan el costo computacional. - } - \setlength{\marginparwidth}{\bigMarginSize} - \normalmarginpar - % fin de la nota, comienza explicación - - % Nota en margen sobre tipos estáticos y dinámicos - \marginpar{\maginLetterSize - \iconoAclaraciones \textcolor{dark_green}{ - \textbf{ - Tipos estáticos y dinámicos - } +Lo cual permitiría optimizar la evaluación de la función; +ya que si la función tuviera comportamientos diferentes en función del rango, +habría que estudiarlos con condiciones interiores que aumentan el costo computacional. +} +\setlength{\marginparwidth}{\bigMarginSize} +\normalmarginpar +% fin de la nota, comienza explicación + +% Nota en margen sobre tipos estáticos y dinámicos +\marginpar{\maginLetterSize +\iconoAclaraciones \textcolor{dark_green}{ + \textbf{ + Tipos estáticos y dinámicos } +} El tipo de dato \textbf{estático} se define en memoria antes de la ejecución del código (durante la compilación del código), - no pudiendo cambiar + no pudiendo cambiar durante la ejecución del programa. Un tipo de dato \textbf{dinámico} puede cambiar y el tipo es determinado mediante @@ -663,34 +646,54 @@ \subsubsection*{Sobre el sistema de tipos de Julia} Por lo general las ventajas del estático son mayor eficiencia y prevención de errores, por el contrario, tipos dinámicos permiten más flexibilidad a la hora de diseñar y escribir el código. +} +% Nota en margen sobre tipos nominal +\marginpar{\maginLetterSize +\iconoAclaraciones \textcolor{dark_green}{ + \textbf{ + Tipo de dato nominal } - % Nota en margen sobre tipos nominal - \marginpar{\maginLetterSize - \iconoAclaraciones \textcolor{dark_green}{ - \textbf{ - Tipo de dato nominal - } - } - Dos tipos de datos diferentes serán equivalentes o compatibles, - si y solo si se ha hecho de manera explícita. - Por ejemplo si definiéramos un tipo de datos de número real y otro de número - racional, solo podríamos sumarlos si le explicáramos al ordenador cómo hacerlo. - } - % Nota en margen sobre tipos paramétricos - \marginpar{\maginLetterSize - \iconoAclaraciones \textcolor{dark_green}{ - \textbf{ - Tipos de datos paramétricos - } - } - Hace referencia al polimorfismo paramétrico, - esto es que una misma función se puede programar - para que actúe en consecuencia al tipo de datos que recibe - como argumento. +} +Dos tipos de datos diferentes serán equivalentes o compatibles, +si y solo si se ha hecho de manera explícita. +Por ejemplo si definiéramos un tipo de datos de número real y otro de número +racional, solo podríamos sumarlos si le explicáramos al ordenador cómo hacerlo. +} + % Nota en margen sobre tipos paramétricos + \marginpar{\maginLetterSize + \iconoAclaraciones \textcolor{dark_green}{ + \textbf{ + Tipos de datos paramétricos } - - Ante esta situación hemos determinado que el tipo más conveniente es a usar en nuestras - implementaciones es el racional; ya que como + } + Hace referencia al polimorfismo paramétrico, + esto es que una misma función se puede programar + para que actúe en consecuencia al tipo de datos que recibe + como argumento. + } +%Fin de la nota + +% Sistema de tipos +\subsubsection*{Sobre el sistema de tipos de Julia} +\label{ch06:sistema-timpos-julia} + Julia posee un sistema de tipos muy rico + \footnote{ + Véase la documentación oficial de Julia sobre \textit{Types}: + \url{https://docs.julialang.org/en/v1/manual/types/}. + Esta URL fue consultada el 26 de mayo de 2022. + } + dinámico, nominal y paramétrico; pero que ofrece la posibilidad de obtener + beneficio de los tipos estáticos. + Podría entonces uno plantearse + sacar provecho de esto en la \textcolor{darkRed}{declaración + del dominio} e imagen de una función de activación y prevención de errores. + + + Ante esta situación hemos determinado que el tipo más conveniente a usar en nuestras + implementaciones es el racional no sólo por + por la observación que comentábamos en la nota marginal del teorema + \ref{teo:densidad-racional} + ; ya que como procedemos a explicar un tipo más restrictivo plantea los siguientes problemas: @@ -741,6 +744,12 @@ \subsubsection*{Sobre el sistema de tipos de Julia} \end{minted} \end{minipage} +\subsection*{Sobre la implementación definitiva y ejemplo de uso} +Puede encontrar la implementación definitiva de las funciones de activación en +el directorio y fichero \texttt{OptimizedNeuralNetwork.jl/src/activation\_function.jl} de nuestro repositorio. +Además en \texttt{Memoria/Ejemplo-uso-biblioteca.ipynb} encontrará un +\textit{Jupyter notebook} de Julia con ejemplos de cómo llamar y utilizar las funciones de activación. + \subsection{Coste computacional funciones activación } \label{ch06:coste-computacional-funciones-activacion} diff --git a/Memoria/capitulos/5-Estudio_experimental/3_algoritmo-inicializacion-pesos.tex b/Memoria/capitulos/5-Estudio_experimental/3_algoritmo-inicializacion-pesos.tex index 4a46671..a256c02 100644 --- a/Memoria/capitulos/5-Estudio_experimental/3_algoritmo-inicializacion-pesos.tex +++ b/Memoria/capitulos/5-Estudio_experimental/3_algoritmo-inicializacion-pesos.tex @@ -56,7 +56,8 @@ \subsection{Descripción experimento} % Paso 2: Evaluación del error \item Con los datos de entrenamiento $D_i$ y el algoritmo de aprendizaje de \textit{Backpropagation} se entrenará la neuronal inicializada aleatoriamente hasta que iguale o supere el error $\varepsilon_i$. Además puesto que puede darse el caso de quedar estancados en un mínimo local o que oscile entorno a un mínimo si el $\eta$ no es lo suficientemente pequeño (ver propiedades del gradiente descendente \ref{ch05:gradiente-descentente}) -superior al error encontrado con el algoritmo de inicialización de pesos, se ha añadido también como criterio de parada el que error se estanque o empeore durante 5 iteraciones consecutivas. +superior al error encontrado con el algoritmo de inicialización de pesos, se ha añadido también como criterio de parada el que error se estanque o empeore durante 5 \footnote{El valor de 5 iteraciones consecutivas es una heurística observada en ejecuciones anteriores y dependiente de $\eta$ y del problema. +Pude observar la traza de de ejecución si ejecuta el experimento.} iteraciones consecutivas. Se medirá el tiempo que necesita hasta su fin $t_b$ y el error en entrenamiento y test. Los tiempos $t_i$ y $t_b$ serán los que compararemos. @@ -189,8 +190,8 @@ \subsection{Resultados obtenidos} Aleatorio y Backpropagation & 0,582 & 0,570 & 0,570 & 0,575 & 0,564 & 0,567 & 0,564 & 0,567 & 0,572 & 0,570 & 0,561 & 0,561 & 0,574 & 0,569 & 0,563 \\ \hline \end{tabular} } - \label{fig07:error-entrenamiento} \caption{Error mínimo cuadrático obtenido en entrenamiento tras acabar la ejecución} + \label{fig07:error-entrenamiento} \end{table} Tal y como se planteó el experimento la parada del algoritmo de \textit{Backpropagation} @@ -199,7 +200,7 @@ \subsection{Resultados obtenidos} Sin embargo, al observarse la distribución de los errores en el gráfico \ref{img07:error-entrenamiento} y la tabla \ref{fig07:error-entrenamiento} puede observarse que el algoritmo de \textit{Backpropagation} se detuvo al alcanzar un -mínimo local. +mínimo local en todos los casos, ya que todos están por encima del error de nuestro algoritmo de inicialización. \begin{figure}[H] \centering diff --git a/Memoria/capitulos/5-Estudio_experimental/3_detalles_implementacion.tex b/Memoria/capitulos/5-Estudio_experimental/3_detalles_implementacion.tex index d2c6e43..f10c7bc 100644 --- a/Memoria/capitulos/5-Estudio_experimental/3_detalles_implementacion.tex +++ b/Memoria/capitulos/5-Estudio_experimental/3_detalles_implementacion.tex @@ -11,7 +11,7 @@ \section{Implementación} \item Implementación del algoritmo. \end{itemize} -\subsection{Implementación de redes neuronal} +\subsection{Implementación de redes neuronales} El modelo a implementar es el presentado en el algoritmo \ref{algoritmo:estructura-de-una-red-neuronal}. En virtud del \textit{composite type} de Julia \footnotetext{ Véase la \href{https://docs.julialang.org/en/v1/manual/types/}{documentación oficial}} la forma más simple y eficiente de declarar una red neuronal es como un nuevo tipo de dato: \textit{red neuronal} cuyos atributos sean las matrices que definen el modelo. @@ -37,6 +37,10 @@ \subsubsection{Diseño de test} \end{itemize} \subsubsection{Ejemplo de uso} +Como ya comentamos puede encontrar un ejemplo completo de uso +en el directorio y fichero \texttt{Memoria/Ejemplo-uso-biblioteca.ipynb} de nuestro repositorio; +sin embargo, para mejorar la comprensión de la sección vamos a mostrar +algunos ejemplo breves aquí. Para construir una \textbf{red neuronal inicializada aleatoriamente} a partir de nuestra biblioteca @@ -141,7 +145,7 @@ \subsubsection{Diseño de los tests} De acorde al modelo \ref{definition:redes_neuronales_una_capa_oculta} tomando como función de activación la identidad (aunque no sería una función de activación como tal) -se podría construir fácilmente +se podrían construir fácilmente redes neuronales que: \begin{itemize} \item Sean la función identidad. @@ -156,7 +160,7 @@ \subsubsection{Diseño de los tests} \item Redes neuronales con $S$ no nulo. \item Combinaciones de tipos anteriores. \end{itemize} -Faltaría comprobar el caso en que $A$ y $B$ no fuera diagonales, a sabiendas de que para los casos anteriores su funcionamiento es correcto, basta con comprobarlo con un ejemplo aleatorio. +Faltaría comprobar el caso en que $A$ y $B$ no fueran diagonales, a sabiendas de que para los casos anteriores su funcionamiento es correcto, basta con comprobarlo con un ejemplo aleatorio. Como la evaluación es correcta falta por cerciorarse de que se comporta como es debido con las funciones de activación definidas. @@ -202,7 +206,7 @@ \subsubsection{Ejemplo de uso} \subsection{Implementación del algoritmo de inicialización de pesos} Se ha realizado la implementación de acorde al algoritmo descrito -en \ref{algo:algoritmo-iniciar-pesos}. Para un desarrollo optimizado se han tenido en cuenta dos +en \ref{algo:algoritmo-iniciar-pesos}. Para un desarrollo optimizado se han tenido en cuenta tres factores esenciales: \begin{itemize} \item Adaptación de los tipos de datos y \textit{ dispatch methods} de Julia en función @@ -226,8 +230,8 @@ \subsubsection{ Uso de los tipos de datos y \textit{ dispatch methods}} ha permitido, ya que en vez de realizar el diseño directo recogido en \ref{algo:algoritmo-iniciar-pesos} puede uno consultar el caso primero de la demostración \ref{teorema:2_5_entrenamiento_redes_neuronales} - y darse cuenta que la existencia del vector $p$ - es una argucia para conseguir un orden en los vectores de entrada. Como $\R$ ya es un cuerpo ordenado se puede prescindir tanto de $p$ como de toda la estructura de datos que ello conlleva. + y darse cuenta de que la existencia del vector $p$ + es una argucia para conseguir un orden en los vectores de entrada. Como $\R$ ya es un cuerpo ordenado, se puede prescindir tanto de $p$ como de toda la estructura de datos que ello conlleva. Esta cuestión guarda relación con el apartado siguiente. \subsubsection{Selección de la estructuras de datos adecuada} @@ -310,7 +314,7 @@ \subsubsection{Tipo de datos de variables auxiliares} Se ha seleccionado cuidadosamente el tipo de las variables auxiliares. \begin{itemize} \item Tipo de dato de $p$: Se ha seleccionado como un vector aleatorio de \textit{Float32}, mientras que el resto de operaciones vectoriales son de \textit{Float64}, el motivo de esto es que $p$ se operará como \textit{Float64} con una precisión mayor al no tener tantas cifras decimales. - \item Para otras variables auxiliares que sabíamos que iban a ser pequeñas se ha especificado que lo iba se con tipos como \textit{Int8}. + \item Para otras variables auxiliares que sabemos que van a ser pequeñas se han especificado tipos como \textit{Int8}. \end{itemize} \subsection{Diseño de los tests} From 6e0f8f1343e53617fd0f58432b1384ee28bbe40f Mon Sep 17 00:00:00 2001 From: Blanca Date: Mon, 20 Jun 2022 07:46:26 +0200 Subject: [PATCH 72/76] =?UTF-8?q?Termina=20de=20revisar=20toda=20la=20memo?= =?UTF-8?q?ria=20#117=20Corrige=20erratillas=20menores=20y=20a=C3=B1ade=20?= =?UTF-8?q?p=C3=A1rrafo=20final=20a=20la=20conclusi=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../3_algoritmo-inicializacion-pesos.tex | 22 ++++---- Memoria/capitulos/9-Conclusiones.tex | 9 +++- Memoria/preliminares/summary.tex | 53 +++++++++++++++---- 3 files changed, 64 insertions(+), 20 deletions(-) diff --git a/Memoria/capitulos/5-Estudio_experimental/3_algoritmo-inicializacion-pesos.tex b/Memoria/capitulos/5-Estudio_experimental/3_algoritmo-inicializacion-pesos.tex index a256c02..6078389 100644 --- a/Memoria/capitulos/5-Estudio_experimental/3_algoritmo-inicializacion-pesos.tex +++ b/Memoria/capitulos/5-Estudio_experimental/3_algoritmo-inicializacion-pesos.tex @@ -130,7 +130,7 @@ \subsubsection{Implementación del aprendizaje de una red neuronal} } Se implementará el algoritmo propio de aprendizaje basado en \textit{Backpropagation} y ya optimizado que describimos en los algoritmos \ref{algoritmo:gradiente-descendente} y \ref{algoritmo:calculo-gradiente}. -Cabe destacar que para este algoritmo es necesario la derivada de las funciones de las funciones de activación. Se ha implementado la derivada débil de ellas. +Cabe destacar que para este algoritmo es necesario la derivada de las funciones de las funciones de activación. Se ha implementado la derivada débil de ellas. Además se ha seguido el mismo criterio de diseño que ya se tuvo con las funciones de activación en la sección \ref{ch06:activation-function-implementation}. \subsubsection{Implementación del experimento} Deberá de implementarse una función que realice el @@ -138,10 +138,11 @@ \subsubsection{Implementación del experimento} \subsection{Resultados obtenidos} -Concretamente de el experimentos se ha realizado con $\frac{3}{4}|\mathcal{D}|$ de datos de entrenamiento -y el resto de test, se ha repetido además $15$ veces. +Concretamente de el experimentos se ha realizado con +una partición del conjunto de datos $\frac{3}{4}|\mathcal{D}|$ para entrenamiento entrenamiento +y el resto de test. Se ha repetido además $15$ veces (por tratarse de un número conveniente de muestras para el Test de los signos de Wilcoxon). -Durante cada iteración los datos del conjunto han sido desordenados y el tiempo medido ha sido estrictamente el de creación y aprendiza de la red neuronal. +Durante cada iteración los datos del conjunto han sido desordenados y el tiempo medido ha sido estrictamente el de creación y aprendizaje de la red neuronal. Los resultados obtenidos han sido los siguientes: @@ -247,10 +248,6 @@ \subsection{Resultados obtenidos} \begin{equation} 0,171 \pm 0,022 \end{equation} -mientras que el de inicialización aleatoria y \textit{Backpropagation} es de -\begin{equation} - 0,567 \pm 0,009. -\end{equation} % Nota sobre sobreajuste \marginpar{\maginLetterSize @@ -264,8 +261,15 @@ \subsection{Resultados obtenidos} propias de los datos de entrenamiento que no son válidas para el problema general. Este efecto produce que se tengan resultados en - entrenamiento \textit{mucho} mejores que en test. + entrenamiento \textit{considerablemente} mejores que en test. } +% fin de la nota +mientras que el de inicialización aleatoria y \textit{Backpropagation} es de +\begin{equation} + 0,567 \pm 0,009. +\end{equation} + + Como podemos observar en el caso de nuestro algoritmo; a diferencia del error en test obtenido con \textit{Backpropagation}, que el error en test ha superado al de entrenamiento, lo que indica un sobreajuste del modelo a los datos de entrenamiento. Esto es totalmente de esperar por diff --git a/Memoria/capitulos/9-Conclusiones.tex b/Memoria/capitulos/9-Conclusiones.tex index a034cbd..1e818bc 100644 --- a/Memoria/capitulos/9-Conclusiones.tex +++ b/Memoria/capitulos/9-Conclusiones.tex @@ -3,7 +3,7 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \chapter{Conclusiones} - +\label{ch09:conclusion} Era nuestro objetivo con este trabajo esclarecer el motivo y funcionamiento de las redes neuronales y a partir de ahí optimizar algún aspecto de ellas. @@ -36,4 +36,11 @@ \chapter{Conclusiones} \item Una investigación sobre la repercusión en la convergencia de la delimitación de la precisión en los coeficientes de las redes neuronales (sección \ref{ch04:capacidad-calculo}). \end{itemize} +Pero finalmente y sobretodo, me llevo la grata experiencia de +todo el proceso que ha conllevado este Trabajo Fin de Grados; +con las habilidades de gestión bibliográfica, comprensión y expresión rigurosa que ello conlleva; +así como el método adquirido, constancia y paciencia; +y por supuesto la satisfacción personal de haber sido capaz de acabar un proyecto +de estas características. + diff --git a/Memoria/preliminares/summary.tex b/Memoria/preliminares/summary.tex index 518f183..907be4b 100644 --- a/Memoria/preliminares/summary.tex +++ b/Memoria/preliminares/summary.tex @@ -21,7 +21,7 @@ \chapter*{Summary}\label{ch:summary} equivalence among some activation functions, and hence propose a new algorithm to initialize weights of neural networks. Thanks to the first result, we obtain a criteria to choose the most -suitable activation function to maintain accuracy and reduce computational cost. +suitable activation function to maintain accuracy and reduce computational costs. Thanks to the second one, we might accelerate learning convergence methods. @@ -31,23 +31,56 @@ \chapter*{Summary}\label{ch:summary} All the theory development, designs, decisions and results are written in this memory, which have the following structure: \begin{itemize} - \item \textbf{Chapter \ref{ch00:methodology}: Description of the methodology followed.} We have organized our project according to an agile philosophy based on personas methodology, users stories, milestones and tests. This method has conducted and linked mathematical and technical results and implementations, giving them coherence and validation methods. + \item \textbf{Chapter \ref{ch00:methodology}: Description of the methodology followed.} We have organized our project according to an agile philosophy based on personas methodology, user stories, milestones and tests. This method has conducted and linked mathematical and technical results and implementations, giving them coherence and validation methods. \item \textbf{Chapter \ref{chapter:Introduction-neuronal-networks}: Description of the learning problem.} We defined the characteristic and type of machine learning problems. We will focus on supervised learning ones. - \item \textbf{Chapter \ref{ch03:teoria-aproximar}: Approximation theory.} In order to establish a solid theory, we will start our work trying to solve machine learning problems by traditional approximation methods. The main result we prove is the Stone Weierstrass's theorem. As a conclusion of this chapter we will achieve knowledge of the virtues and faults of traditional methods and understanding of the necessity of new methods and structures such as neural networks. + \item \textbf{Chapter \ref{ch03:teoria-aproximar}: Approximation theory.} In order to establish a solid theory, we will start our work trying to solve machine learning problems by traditional approximation methods. The main result we prove is the Stone Weierstrass's theorem. As a conclusion of this chapter we will achieve knowledge of the virtues and faults of traditional methods and understanding the necessity of new methods and structures such as neural networks. - \item \textbf{Chapter \ref{chapter4:redes-neuronales-aproximador-universal}: Neural networks are universal approximators.} In this chapter we introduce our neural network model and compare it with the conventional ones. In order to show it is well defined, we will prove the universal convergence of our model to any measurable function. In addition, we will give some results about how our model solves classification and regression problems as its number of neurons rises. Finally, we will argue if all of those math results can actually solve real life problems, the idea behind the debate is the computability representation of real numbers. + \item \textbf{Chapter \ref{chapter4:redes-neuronales-aproximador-universal}: Neural networks are universal approximators.} In this chapter we introduce our neural + network model and compare it with the conventional ones. In order to show it is well + defined, we will prove the universal convergence of our model to any measurable + function. In addition, we will give some results about how our model solves + classification and regression problems as its number of neurons rises. Finally, we + will argue if all of those math results can actually solve real life problems. The + idea behind the debate is the computability representation of real numbers. - \item \textbf{Chapter \ref{chapter:construir-redes-neuronales}: The design and implementation of neural networks.} We will carefully describe the design and implementation of our model of neural network, thanks to that we will obtain some mathematical results about bias and classification function, this would be useful to compare our model with the conventional ones and justify -our selection. Moreover, we would explain, justify and design learning and evaluation methods to our model. These methods are optimized versions of Forward Propagation and Backpropagation. + \item \textbf{Chapter \ref{chapter:construir-redes-neuronales}: The design and implementation of neural networks.} We will carefully describe the design and + implementation of our model of neural network. Thanks to that we will obtain some + mathematical results about bias and classification function. This will be useful to + compare our model with the conventional ones and justify +our selection. Moreover, we will explain, justify and design learning and evaluation +methods to our model. These methods are optimized versions of Forward Propagation and +Backpropagation. -\item \textbf{Chapter \ref{funciones-activacion-democraticas-mas-demoscraticas}: Democratization of activation functions.} We will explain at this chapter if there are better activation functions. In this direction we will prove two original results which show that there are families of activation functions that with the same conditions will resolve problems with the same accuracy. As a result, if we compare the computational cost of the members of those families and choose the faster one, we will obtain a method to optimize evaluation and learning of neural networks without loss accuracy. We have used the Wilcoxon signed-rank test as a statistical hypothesis test so as to give a rigorous study of our criteria. +\item \textbf{Chapter \ref{funciones-activacion-democraticas-mas-demoscraticas}: Democratization of activation functions.} +We will explain in this chapter if there are better activation functions. In this +direction we will prove two original results which show that there are families of +activation functions that with the same conditions will solve problems with the same +accuracy. As a result, if we compare the computational cost of the members of those +families and choose the faster one, we will obtain a method to optimize evaluation and +learning of neural networks without loss of accuracy. We have used the Wilcoxon +signed-rank test as a statistical hypothesis test so as to give a rigorous study of +our criteria. -\item \textbf{Chapter \ref{section:inicializar_pesos}: Weight initializing algorithm.} Since the Backpropagation and other iterative methods are sensible to the initial value of a neural network, we will show an original method to initialize its weights from training data. This process not only will produce a better initial step but also has lower computational cost than Backpropagation. To test the potential of this method we will use the Wilcoxon signed-rank test again and also, from the experiment requirement our OptimizedNeuralNetwork.jl library will be born. In this chapter we will also explain every decision done during the design and implementation of the library in other to be as efficient as we were able. +\item \textbf{Chapter \ref{section:inicializar_pesos}: Weight initializing algorithm.} +Since the Backpropagation and other iterative methods are sensitive to the initial +value of a neural network, we will show an original method to initialize its weights +from training data. This process not only will produce a better initial step but also +has lower computational cost than Backpropagation. To test the potential of this +method we will use the Wilcoxon signed-rank test again and also, from the experiment's +requirements we will design and create our OptimizedNeuralNetwork.jl library. In this chapter we +will also explain every decision done during the design and implementation of the +library in order to be as efficient as possible. -\item \textbf{Chapter \ref{ch08:genetic-selection}: Use of genetic algorithm in the selection of activation function.} In this chapter we will explain a future work. Given a fixed number of neurons, the selection of its activation function may be crucial to reduce the train and test error. However, adding more free params to the search space increases its complexity and at same time the cost of finding a solution. Nevertheless, the result obtained at chapter 6 and a property of our neural model will reduce the space complexity. -\item \textbf{Chapter \ref{ch08:genetic-selection}: Conclusions} +\item \textbf{Chapter \ref{ch08:genetic-selection}: Use of genetic algorithm in the selection of activation function.} +In this chapter we will explain a future work. Given a fixed number of neurons, the +selection of its activation function may be crucial to reduce the train and test +error. However, adding more free params to the search space increases its complexity +and at same time the cost of finding a solution. Nevertheless, the result obtained at +chapter \ref{funciones-activacion-democraticas-mas-demoscraticas} and a property of our neural model will reduce the space complexity. + +\item \textbf{Chapter \ref{ch09:conclusion}: Conclusions.} \end{itemize} \paragraph{KEYWORDS:} From 3bc4c3ae14b286ec0a794d09c4483bf95de9418d Mon Sep 17 00:00:00 2001 From: Blanca Date: Mon, 20 Jun 2022 08:04:26 +0200 Subject: [PATCH 73/76] Actualiza ejemplo de uso #117 de biblioteca de redes neuronales --- .../capitulos/Ejemplo-uso-biblioteca.ipynb | 180 ++++++++++++------ Readme.md | 2 +- 2 files changed, 127 insertions(+), 55 deletions(-) diff --git a/Memoria/capitulos/Ejemplo-uso-biblioteca.ipynb b/Memoria/capitulos/Ejemplo-uso-biblioteca.ipynb index ac744aa..f5137fb 100644 --- a/Memoria/capitulos/Ejemplo-uso-biblioteca.ipynb +++ b/Memoria/capitulos/Ejemplo-uso-biblioteca.ipynb @@ -4,7 +4,24 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Ejemplo de uso de la biblioteca" + "# Ejemplo de uso de la biblioteca\n", + "Este notebook muestra ejemplos de ejecución de la biblioteca programada. \n", + "El contenido de la misma es: \n", + "- Cómo importar la biblioteca.\n", + "- Inicialización de red neuronal con dimensiones dadas y pesos aleatorios. \n", + "- Inicialización de red neuronal a partir de matrices.\n", + "- Ejemplo de evaluación con *Forward propagation*.\n", + "- Ejemplo de uso del algoritmo de inicialización de pesos.\n", + "- Ejemplo de llamadas a las funciones de activación.\n", + "- Ejemplo de aprendizaje de una red neuronal con el algoritmo de *Backpropagation*.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Cómo importar la biblioteca " ] }, { @@ -13,17 +30,20 @@ "metadata": {}, "outputs": [], "source": [ - "using Random\n", + "# Bibliotecas auxiliares que no tienen que ver con con la nuestra\n", + "using Random \n", "using Plots\n", + "\n", + "# Importamos nuestra biblioteca\n", "include(\"../../OptimizedNeuralNetwork.jl/src/OptimizedNeuralNetwork.jl\")\n", - "using Main.OptimizedNeuronalNetwork" + "using Main.OptimizedNeuralNetwork" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Inicialización con pesos aleatorios \n", + "## Inicialización de red neuronal con pesos aleatorios \n", "\n", "Creamos una red neuronal con pesos inicializados de manera aleatoria. " ] @@ -46,9 +66,9 @@ "data": { "text/plain": [ "3×3 Matrix{Float64}:\n", - " 0.284694 0.0768469 0.385379\n", - " 0.166919 0.129388 0.794948\n", - " 0.377328 0.987315 0.707498" + " 0.139102 0.0390801 0.854443\n", + " 0.418074 0.125086 0.679176\n", + " 0.39183 0.851716 0.599144" ] }, "metadata": {}, @@ -68,8 +88,8 @@ "data": { "text/plain": [ "2×3 Matrix{Float64}:\n", - " 0.0882701 0.328332 0.0012991\n", - " 0.112579 0.43775 0.397306" + " 0.132426 0.39587 0.150934\n", + " 0.576401 0.456788 0.665346" ] }, "metadata": {}, @@ -282,104 +302,104 @@ { "data": { "image/png": "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", - "image/svg+xml": "\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", + "image/svg+xml": "\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", "text/html": [ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" + "\n" ] }, "metadata": {}, @@ -476,11 +496,11 @@ "name": "stdout", "output_type": "stream", "text": [ - "CosineSquasher(0.0809642765524543) = 0.5404379245897707\n", - "RampFunction(0.1575655848130193) = 0.1575655848130193\n", - "ReLU(0.7990924914551383) = 0.7990924914551383\n", - "Sigmoid(0.6730365028601888) = 0.6621827491963587\n", - "HardTanh(0.9342280797529621) = 0.9342280797529621\n" + "CosineSquasher(0.6963141756074113) = 0.8206971218447603\n", + "RampFunction(0.708936898471023) = 0.708936898471023\n", + "ReLU(0.279572614615742) = 0.279572614615742\n", + "Sigmoid(0.6463954880294331) = 0.6561977350585728\n", + "HardTanh(0.27377994734523636) = 0.27377994734523636\n" ] } ], @@ -517,9 +537,9 @@ "name": "stdout", "output_type": "stream", "text": [ - "f(-2.733154105970187) = -0.027331541059701873\n", - "f(-1.8583588278359087) = -0.018583588278359087\n", - "f(4.017764270348949) = 4.017764270348949\n" + "f(4.027026570178562) = 4.027026570178562\n", + "f(4.380146279765949) = 4.380146279765949\n", + "f(-2.5822478995523013) = -0.025822478995523014\n" ] } ], @@ -537,6 +557,58 @@ " println(\"$(σ)($x) = $(σ(x))\")\n", "end" ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Backpropagation \n", + "Ejemplo de uso de Backpropagation " + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "En error en la iteración 0 es: 1.334625428920788\n", + "El error en la iteración 1 es: 0.14080024193105276\n", + "El error en la iteración 2 es: 0.12226659859194122\n", + "El error en la iteración 3 es: 0.12146473358191419\n" + ] + } + ], + "source": [ + "n = 3 # número de neuronas \n", + " η = 0.005 # queremos que reduzca sin pasarse, de ahí que sea \"\"pequeño\"\" el learning rate\n", + " tol = 0.5 # rango de error que permitimos ya que puede existir casos en los que el η sea demasiado grande\n", + " data_set_size = n\n", + " cosin(x,y)=cos(x)+sin(y) # funcion ideal\n", + " h = RandomWeightsNN(2,n, 1) # 2 dimensión entrada 1 dimensión de salida \n", + " X_train = (rand(Float64, (data_set_size, 2)))*3\n", + " Y_train = map(v->cosin(v...),eachrow(X_train))\n", + " disminuye_error = 0.0\n", + " error = error_in_data_set(\n", + " X_train,\n", + " Y_train,\n", + " x->forward_propagation(h,RampFunction,x)\n", + " )\n", + " println(\"En error en la iteración 0 es: $error\")\n", + " for i in 1:n \n", + " backpropagation!(h, X_train, Y_train, RampFunction, derivativeRampFunction, n)\n", + "\n", + " error = error_in_data_set(\n", + " X_train,\n", + " Y_train,\n", + " x->forward_propagation(h,RampFunction,x)\n", + " )\n", + " println(\"El error en la iteración $i es: $error\")\n", + " end" + ] } ], "metadata": { diff --git a/Readme.md b/Readme.md index 2b1e2aa..f489b8d 100644 --- a/Readme.md +++ b/Readme.md @@ -93,7 +93,7 @@ forward_propagation(h,RampFunction,x) ### Algoritmo de *back propagation* ``` Julia -TODO :) +backpropagation!(h, X_train, Y_train, RampFunction, derivativeRampFunction, n) ``` ## Reglas From a8b83714feb63a73bcfbcacc2ac540bd7f6b8c50 Mon Sep 17 00:00:00 2001 From: Blanca Date: Mon, 20 Jun 2022 08:10:14 +0200 Subject: [PATCH 74/76] =?UTF-8?q?incluye=20excepci=C3=B3n=20derivativeRamp?= =?UTF-8?q?Function=20al=20diccionario?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/personal-dictionary.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/personal-dictionary.txt b/.github/workflows/personal-dictionary.txt index c04e4db..863946f 100644 --- a/.github/workflows/personal-dictionary.txt +++ b/.github/workflows/personal-dictionary.txt @@ -105,6 +105,7 @@ csv cte darkRed dat +derivativeRampFunction diferenciabilidad diferenciable diferenciables @@ -160,6 +161,7 @@ parametrized paramétrico paramétricos pdf +perceptron perceptrones perceptrón png @@ -206,5 +208,4 @@ tratabilidad usefulInformation ésima ésimas -ésimo -perceptron \ No newline at end of file +ésimo \ No newline at end of file From 3a4f852194c74d3fa65394f9b425c0ab7224b4f7 Mon Sep 17 00:00:00 2001 From: Blanca Date: Mon, 20 Jun 2022 08:18:46 +0200 Subject: [PATCH 75/76] Correcciones de JJ #117 --- Memoria/capitulos/0-Metodologia/herramientas.tex | 2 +- .../desgranando_el_articulo/articulo_3_teorema_2_2.tex | 2 +- .../5-Estudio_experimental/3_algoritmo-inicializacion-pesos.tex | 2 +- .../5-Estudio_experimental/3_detalles_implementacion.tex | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Memoria/capitulos/0-Metodologia/herramientas.tex b/Memoria/capitulos/0-Metodologia/herramientas.tex index 9261fda..c46dc1c 100644 --- a/Memoria/capitulos/0-Metodologia/herramientas.tex +++ b/Memoria/capitulos/0-Metodologia/herramientas.tex @@ -13,7 +13,7 @@ \subsection{Lenguaje de programación Julia} Hemos seleccionado como lenguaje de programación \href{https://julialang.org}{Julia} por los siguientes motivos (\cite{virtudes-de-julia}): \begin{itemize} - \item Ofrece \textit{benchmarks} + \item Ofrece resultados de \textit{benchmarks} muy competitivos\footnote{Véase los resultado expuestos en \url{https://julialang.org/benchmarks/}, web consultada por última vez el 22 de mayo de 2022.}, diff --git a/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_3_teorema_2_2.tex b/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_3_teorema_2_2.tex index 9910f9a..a2958af 100644 --- a/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_3_teorema_2_2.tex +++ b/Memoria/capitulos/2-Articulo_rrnn_aproximadores_universales/desgranando_el_articulo/articulo_3_teorema_2_2.tex @@ -77,7 +77,7 @@ Procedamos a realizar la siguiente prueba constructiva. Tomamos fijo pero arbitrario un $\varepsilon > 0,$ que sin pérdida de generalidad supondremos menor que uno. - Para que $H_\varepsilon$ pertenezca a $\mathcal{H}_\psi{(\R, \R)}$ deberá de ser de la + Para que $H_\varepsilon$ pertenezca a $\mathcal{H}_\psi{(\R, \R)}$ deberá ser de la forma $\sum^{q-1}_{j=1} b_j \psi( A_j(\lambda))$ debemos encontrar por ende el número de sumatorias, $q-1$; esa misma cantidad de constantes reales $b_j$ y funciones afines $A_j$. Para ello tomamos como $q$ cualquier número natural que cumpla que diff --git a/Memoria/capitulos/5-Estudio_experimental/3_algoritmo-inicializacion-pesos.tex b/Memoria/capitulos/5-Estudio_experimental/3_algoritmo-inicializacion-pesos.tex index 6078389..ba96395 100644 --- a/Memoria/capitulos/5-Estudio_experimental/3_algoritmo-inicializacion-pesos.tex +++ b/Memoria/capitulos/5-Estudio_experimental/3_algoritmo-inicializacion-pesos.tex @@ -106,7 +106,7 @@ \subsubsection{Capacidad de crear una red neuronal aleatoria} \subsubsection{Implementación del algoritmo de inicialización} -Deberá de implementarse del algoritmo \ref{algo:algoritmo-iniciar-pesos} con todos los requisitos y atributos que ahí se describe. +Deberá implementarse del algoritmo \ref{algo:algoritmo-iniciar-pesos} con todos los requisitos y atributos que ahí se describe. \subsubsection{Función para medir el error} diff --git a/Memoria/capitulos/5-Estudio_experimental/3_detalles_implementacion.tex b/Memoria/capitulos/5-Estudio_experimental/3_detalles_implementacion.tex index f10c7bc..1f92631 100644 --- a/Memoria/capitulos/5-Estudio_experimental/3_detalles_implementacion.tex +++ b/Memoria/capitulos/5-Estudio_experimental/3_detalles_implementacion.tex @@ -319,7 +319,7 @@ \subsubsection{Tipo de datos de variables auxiliares} \subsection{Diseño de los tests} -Deberá de comprobarse que las dimensiones de salida de la red neuronal son las adecuadas +Deberá comprobarse que las dimensiones de salida de la red neuronal son las adecuadas con respecto a la entrada y salida de los datos. De acorde a la propiedad del teorema \ref{teo:eficacia-funciones-activation} From 5a16eb0e8221b77d219346e56d8b7495e2955ba5 Mon Sep 17 00:00:00 2001 From: Blanca Date: Mon, 20 Jun 2022 08:24:01 +0200 Subject: [PATCH 76/76] =?UTF-8?q?Corrige=20m=C3=A1s=20detarillo=20ortogr?= =?UTF-8?q?=C3=A1ficos=20de=20JJ=20en=20#118?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Memoria/capitulos/0-Metodologia/introduccion.tex | 2 +- .../construccion-evaluacion-red-neuronal.tex | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Memoria/capitulos/0-Metodologia/introduccion.tex b/Memoria/capitulos/0-Metodologia/introduccion.tex index 08abd17..68f0f10 100644 --- a/Memoria/capitulos/0-Metodologia/introduccion.tex +++ b/Memoria/capitulos/0-Metodologia/introduccion.tex @@ -190,7 +190,7 @@ \subsection*{Hito 2: Evaluación experimental de las hipótesis de optimización Deberán de validarse y cuantificar experimentalmente las propuestas de optimización del hito anterior. -Para ello se deberá de: +Para ello se deberá: \begin{enumerate} \item \textbf{Formular los test correspondientes y adecuados} lo que conllevará : \begin{itemize} diff --git a/Memoria/capitulos/4-Actualizacion_redes_neuronales/construccion-evaluacion-red-neuronal.tex b/Memoria/capitulos/4-Actualizacion_redes_neuronales/construccion-evaluacion-red-neuronal.tex index 591d29e..4a463fb 100644 --- a/Memoria/capitulos/4-Actualizacion_redes_neuronales/construccion-evaluacion-red-neuronal.tex +++ b/Memoria/capitulos/4-Actualizacion_redes_neuronales/construccion-evaluacion-red-neuronal.tex @@ -306,7 +306,9 @@ \subsection{\textit{Modus operandi} ante problemas que requieran un dominio de s $\theta$ que discretice la imagen como observábamos en \ref{corolario:2_5_función_Booleana}. -La situación por tanto es la siguiente, si procedemos como en \refeq{red-neuronal-con-compuesta}, se tendría que si $f$ es el patrón subyacente de la clasificación y $\theta$ la función que discretiza el dominio se deberá de encontrar +La situación por tanto es la siguiente, si procedemos como en \refeq{red-neuronal-con-compuesta}, +se tendría que si $f$ es el patrón subyacente de la clasificación +y $\theta$ la función que discretiza el dominio se deberá de encontrar $h \in \rrnnmc$ tal que $h$ aproxime a $\theta^{-1} \circ f$. Lo cual exige que $\theta$ tenga inversa y que sea medible, además de la cuestión de qué $\theta$ es la más conveniente $\dots$

  • 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 literal 0 HcmV?d00001 diff --git a/Memoria/img/7-algoritmo-inicializar-pesos/f_ideal_y_rn_con_51_neuronas.png b/Memoria/img/7-algoritmo-inicializar-pesos/f_ideal_y_rn_con_51_neuronas.png new file mode 100644 index 0000000000000000000000000000000000000000..617b0dbae4b128cc417654ebfc9c45d3dfe79c91 GIT binary patch literal 24898 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 literal 0 HcmV?d00001 diff --git a/Memoria/img/7-algoritmo-inicializar-pesos/f_ideal_y_rn_con_5_neuronas.png b/Memoria/img/7-algoritmo-inicializar-pesos/f_ideal_y_rn_con_5_neuronas.png new file mode 100644 index 0000000000000000000000000000000000000000..4a76c98adb189d43b4495a28881a23de658dc02d GIT binary patch literal 26107 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�@y_q5+;a%i`f72F{zpd# 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 PC!WUr$0}tAtFZq87dddk literal 0 HcmV?d00001 diff --git a/Memoria/img/7-algoritmo-inicializar-pesos/f_ideal_y_rn_con_7_neuronas.png b/Memoria/img/7-algoritmo-inicializar-pesos/f_ideal_y_rn_con_7_neuronas.png new file mode 100644 index 0000000000000000000000000000000000000000..0d8a7385bc1e57581a95d7cb8d387532b8939868 GIT binary patch literal 25659 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 Fe*kme Date: Sun, 5 Jun 2022 11:33:10 +0200 Subject: [PATCH 19/76] =?UTF-8?q?Se=20escribe=20borrador=20resumen=20#117?= =?UTF-8?q?=20Se=20elimina=20secci=C3=B3n=20de=20experimento=20en=20cap?= =?UTF-8?q?=C3=ADtulo=207=20Se=20a=C3=B1ade=20declaraci=C3=B3n=20de=20orig?= =?UTF-8?q?inalidad=20#49?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../capitulos/0-Metodologia/introduccion.tex | 2 +- .../3-Teoria_aproximacion/0_objetivos.tex | 2 +- .../2_descripcion_inicializacion-pesos.tex | 37 ++++++++++++---- .../4_conclusion_intuitiva.tex | 5 +++ Memoria/capitulos/Introduccion.tex | 23 ++++++++-- .../preliminares/declaracion-originalidad.tex | 2 +- Memoria/preliminares/resumen.tex | 42 ++++++++++++------- Memoria/tfg.tex | 7 ++-- 8 files changed, 86 insertions(+), 34 deletions(-) create mode 100644 Memoria/capitulos/5-Estudio_experimental/4_conclusion_intuitiva.tex diff --git a/Memoria/capitulos/0-Metodologia/introduccion.tex b/Memoria/capitulos/0-Metodologia/introduccion.tex index 5fa051c..0c1b6f7 100644 --- a/Memoria/capitulos/0-Metodologia/introduccion.tex +++ b/Memoria/capitulos/0-Metodologia/introduccion.tex @@ -6,7 +6,7 @@ %******************************************************* \chapter{Metodología} - +\label{ch00:methodology} La planificación y organización es un componente vital a la hora del desarrollo de software y la ciencia de datos, por lo que no es de extrañar que sus beneficios sean extrapolables a otras áreas de la ciencia; diff --git a/Memoria/capitulos/3-Teoria_aproximacion/0_objetivos.tex b/Memoria/capitulos/3-Teoria_aproximacion/0_objetivos.tex index d1055e7..fbfee09 100644 --- a/Memoria/capitulos/3-Teoria_aproximacion/0_objetivos.tex +++ b/Memoria/capitulos/3-Teoria_aproximacion/0_objetivos.tex @@ -5,7 +5,7 @@ %%%%%%%% \chapter{Teoría de la aproximación} - \label{chapter:teoria-aproximar} + \label{ch03:teoria-aproximar} Puesto que queremos fundamentar desde el origen las redes neuronales, supongamos que desconociéramos la existencia de éstas diff --git a/Memoria/capitulos/5-Estudio_experimental/2_descripcion_inicializacion-pesos.tex b/Memoria/capitulos/5-Estudio_experimental/2_descripcion_inicializacion-pesos.tex index 48aa1d5..fc4bebe 100644 --- a/Memoria/capitulos/5-Estudio_experimental/2_descripcion_inicializacion-pesos.tex +++ b/Memoria/capitulos/5-Estudio_experimental/2_descripcion_inicializacion-pesos.tex @@ -157,13 +157,11 @@ \section{Descripción del método propuesto} \end{array} \right. \end{equation} +\end{aportacionOriginal} % método de construcción Con todo esto el proceso algorítmico resultante es: -\end{aportacionOriginal} % método de construcción - % Algoritmo de inicialización de pesos de una red neuronal - \begin{algorithm}[H] \caption{Inicialización de pesos de una red neuronal} \label{algo:algoritmo-iniciar-pesos} @@ -218,15 +216,38 @@ \section{Descripción del método propuesto} \subsection{Coste computacional algoritmo de inicialización de pesos} -Antes de comenzar con el análisis notemos que el algoritmo tiene un componente aleatorio introducido en la selección del $p$; -y que en el peor (y con probabilidad nula) de los casos podría acabar con coste $\mathcal{O}(|\mathcal{D}|)$ devolviendo un resultado erróneo. +El algoritmo se divide en tres pasos bien identificados: +\begin{enumerate} + \item Inicialización del vector aleatorio. + \item Selección de los datos iniciales. + \item Cálculo de los parámetros de la red neuronal. +\end{enumerate} +Notemos que la complejidad del primero es constante y +la del tercero lineal. + +Para conocer la complejidad +del paso segundo debemos de apreciar que el algoritmo +tiene un componente aleatorio introducido en la selección del $p$; +y que en el peor (y con probabilidad nula) de los casos podría suponer +$|\mathcal{D}|$ iteraciones en el bucle interior al paso 2. Sin embargo, en virtud de las observaciones hechas en la -descripción del método, la mayoría de los datos del conjunto de entrenamiento tomados para inicializar la red neuronal cumplirán la propiedad de ortogonalidad y por tanto una buena +descripción del método, la peor situación tiene probabilidad nula de ocurrir; +es decir, +la mayoría de los datos del conjunto de entrenamiento tomados para inicializar la red neuronal cumplirán la propiedad de ortogonalidad y por tanto una buena heurística es suponer -que el paso 2 del algoritmo, \textit{Selección de los datos de inicialización} se va a realizar con un coste de orden lineal a $n$. De esta manera el algoritmo de inicialización de pesos propuesto tendría una complejidad $\mathcal{O}(n)$. +que el paso 2 del algoritmo repetirá su bucle $n$ veces. +De esta manera el algoritmo de inicialización de pesos propuesto tendía la misma complejidad que el coste +de tener los datos ordenados. +Si se utilizan sistemas como insertar de manera ordenada los datos, por ejemplo en un \textit{set}, +el coste de cada inserción sería de $log(n)$; esto haría que el orden total del algoritmo sea: +\begin{equation} + \mathcal{O}(n log(n)). +\end{equation} -Notemos que este coste es bastante menor al de realizar \textit{backpropagation} y que además éste debería de realizarse repetidamente pare mejorar el error considerablemente, mientras que el nuestro se realiza tan solo una vez. +Cabe destacar que este coste es bastante menor al de realizar \textit{backpropagation} +y que además éste debería de realizarse repetidamente pare mejorar el error considerablemente, + mientras que el nuestro se realiza tan solo una vez. \subsection{Observaciones } diff --git a/Memoria/capitulos/5-Estudio_experimental/4_conclusion_intuitiva.tex b/Memoria/capitulos/5-Estudio_experimental/4_conclusion_intuitiva.tex new file mode 100644 index 0000000..80da40f --- /dev/null +++ b/Memoria/capitulos/5-Estudio_experimental/4_conclusion_intuitiva.tex @@ -0,0 +1,5 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% CONCLUSIÓN INTUITIVA +% para poder finiquitar la memoria a tiempo +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + diff --git a/Memoria/capitulos/Introduccion.tex b/Memoria/capitulos/Introduccion.tex index d472ea1..47fe27a 100644 --- a/Memoria/capitulos/Introduccion.tex +++ b/Memoria/capitulos/Introduccion.tex @@ -12,16 +12,31 @@ \part{Teoría subyacente} Existe en la actualidad un desequilibrio entre resultados empíricos y teóricos de redes neuronales llegando incluso a contradicción (como se comenta en la introducción del capítulo \ref{chapter:Introduction-neuronal-networks}), será por tanto nuestro primer objetivo conseguir una revisión y purga de cualquier artificio existente sobre redes neuronales carente de fundamento matemático. -El fin de esto no es más que construir una teoría sólida que de cabida a optimizaciones de -fundamento teórico. Para ello nuestro \textit{modus operandi} será el siguiente: +El fin de esto no es más que construir una teoría sólida que de cabida a +optimizaciones de fundamento teórico. La estructura de la memoria es la siguiente: + +\begin{itemize} + \item \textbf{Capítulo } + \item \textbf{Capítulo } + \item \textbf{Capítulo } + \item \textbf{Capítulo } + \item \textbf{Capítulo } + \item \textbf{Capítulo } + \item \textbf{Capítulo } + \item \textbf{Capítulo } +\end{itemize} + + +%%% Descripción de los capítulos antigua +Para ello nuestro \textit{modus operandi} será el siguiente: Se describirá el conjunto y características de problemas que pretendemos abarcar en el capítulo \ref{chapter:Introduction-neuronal-networks}. Se comentará las limitaciones e inconvenientes que presenta un enfoque clásico -basado en teoría de la aproximación en el capítulo \ref{chapter:teoria-aproximar}. +basado en teoría de la aproximación en el capítulo \ref{ch03:teoria-aproximar}. A continuación en el capítulo \ref{chapter4:redes-neuronales-aproximador-universal}, presentarán las redes neuronales como un modelo eficiente. Al final del mismo capítulo se introduce la definición que hemos determinado por conveniente de red neuronal y que es producto de los capítulos -\ref{chapter:teoria-aproximar} y \ref{chapter4:redes-neuronales-aproximador-universal}. +\ref{ch03:teoria-aproximar} y \ref{chapter4:redes-neuronales-aproximador-universal}. Tras todo el fundamento teórico en \ref{chapter:construir-redes-neuronales} se explicitará el diseño de la red neuronal modelizada así como los algoritmo de evaluación y aprendizaje. diff --git a/Memoria/preliminares/declaracion-originalidad.tex b/Memoria/preliminares/declaracion-originalidad.tex index 93f6cd9..041c0f3 100644 --- a/Memoria/preliminares/declaracion-originalidad.tex +++ b/Memoria/preliminares/declaracion-originalidad.tex @@ -11,7 +11,7 @@ \textsc{Declaración de originalidad}\\\bigskip -D. \miNombre \\\medskip +Dña. \miNombre \\\medskip Declaro explícitamente que el trabajo presentado como Trabajo de Fin de Grado (TFG), correspondiente al curso académico \miCurso, es original, entendida esta, en el sentido de que no ha utilizado para la elaboración del trabajo fuentes sin citarlas debidamente. \medskip diff --git a/Memoria/preliminares/resumen.tex b/Memoria/preliminares/resumen.tex index 0a61acd..ad36b58 100644 --- a/Memoria/preliminares/resumen.tex +++ b/Memoria/preliminares/resumen.tex @@ -10,27 +10,37 @@ \chapter*{Resumen}\label{ch:resumen} %\addcontentsline{toc}{chapter}{Resumen} +Con este trabajo se ha pretendido construir una teoría sólida que de cabida a optimizar el modelado actual de las redes neuronales. -Objetivo inofrmática: -Elegir un framework común para trabajar con redes neuronales así como una serie de problemas de complejidad media, tales como spambase. Establecer una línea base examinando los resultados obtenidos con la configuración base a la hora de entrenar este tipo de redes neuronales y el resultado obtenido. A partir de esa línea base, testear las diferentes restricciones, cambios en representación y suposiciones deducidos en la parte matemática para ver qué influencia tienen en la velocidad, en el resultado, o en ambos. +Como resultado de ello se ha creado e implementado +un nuevo modelo de red neuronal así como sus +métodos de aprendizaje y evaluación. +Además se ha propuesto un criterio de selección de +funciones de activación y un algoritmo de +inicialización de pesos que mejora los ya existentes. -Objetivo matemáticas: -El objetivo de esta parte es doble, en primer lugar, se propone analizar con detalle las demostraciones de algunos resultados de aproximación universal de redes neuronales para funciones continuas. En segundo lugar se propone realizar un estudio de la posible optimización de redes neuronales concretas en base a los resultados obtenidos empíricamente en la parte informática. Se tratará de modelizar matemáticamente dichos resultados y de obtener mejoras en la convergencia de las aproximaciones imponiendo, si es necesario, hipótesis más restrictivas en algunos de los elementos de las redes neuronales que se correspondan con su uso en la práctica. +La estructura de la memoria es la siguiente: + +\begin{itemize} + \item \textbf{Capítulo \ref{ch00:methodology}: Descripción de la metodología seguida.} + \item \textbf{Capítulo \ref{chapter:Introduction-neuronal-networks}: Descripción del problema de aprendizaje.} Caracterización de los problemas de aprendizaje. + \item \textbf{Capítulo \ref{ch03:teoria-aproximar}: Teoría de la aproximación.} Ejemplificación de los problemas que presenta un enfoque clásico frente a problemas de problema de aprendizaje. Demostración del teorema de \textit{Stone-Weierstrass}. + \item \textbf{Capítulo \ref{chapter4:redes-neuronales-aproximador-universal}: Introducción de las redes neuronales como aproximadores universales.} Se presenta nuestro modelo de red neuronal. Se demuestra que es un aproximador universal basado en el artículo + \textit{Multilayer Feedforwar Networks are Universal Approximatos} de Kurt Hornik, + Maxwell Stinchcombe y Halber White. Se plantea si en la práctica las redes neuronales se pueden implementar. + \item \textbf{Capítulo \ref{chapter:construir-redes-neuronales}: Construcción de las redes neuronales.} Descripción de la implementación de las redes neuronales. + Comparación de nuestro modelo con los usuales bajo la introducción de resultados originales sobre el sesgo y dominio de la imagen. Motivación, desarrollo e implementación de los algoritmos de aprendizaje y evaluación propuestos. + \item \textbf{Capítulo \ref{funciones-activacion-democraticas-mas-demoscraticas}: Democratización de las funciones de activación.} Se presenta un resultado propio que establece una equivalencia entre distintas funciones de activación. A partir de él se da un criterio de selección de funciones de activación y se estudia experimentalmente los beneficios obtenidos. + \item \textbf{Capítulo \ref{section:inicializar_pesos}: Algoritmo de inicialización de pesos.} Se propone un algoritmo de inicialización de pesos de una red neuronal. + \item \textbf{Capítulo \ref{ch08:genetic-selection}: Selección genética de las funciones de activación.} Se propone un algoritmo de selección de la función de activación basado en algoritmos genéticos. +\end{itemize} -Libros: -[1] Abu-Mostafa, Y.S. et al.: Learning From Data. AMLBook, 2012. [2] G. Cybenko, Approximations by superpositions of a sigmoidal function, Math. Contro Signal Systems 2 (1989), 303-314. [3] J. Conway, A Course in Functional Analysis, -2nd Edition, Springer-Verlag, 1990. [4] A. Géron, Hands-on machine learning with Scikit-Learn, Keras and TensorFlow: concepts, tools, and techniques to build intelligent systems (2nd ed.). O’Reilly, 2019. [5] K. Hornik, M Stinchcombe and H. White, Multilayer feedforward networks are universal approximators, Neural Networks 2 (1989), 359-366. [6] W. Rudin, Real and complex analysis. McGraw-Hill Book Co., New York-Toronto, Ont.-London 1966. \paragraph{PALABRAS CLAVE:} \begin{itemize*}[label=,itemsep=1em,itemjoin=\hspace{1em}] - \item redes neuronales - \item LSTM - \item series temporales - \item selección de modelos - \item validación - \item selección de hiperparámetros - \item detección de anomalías - \item detector - \item perturbación + \item Redes neuronales + \item Optimización + \item Funciones de activación + \item Inicialización de pesos \end{itemize*} \endinput diff --git a/Memoria/tfg.tex b/Memoria/tfg.tex index 6d21ef6..acfbb96 100644 --- a/Memoria/tfg.tex +++ b/Memoria/tfg.tex @@ -198,8 +198,8 @@ \include{preliminares/portada} \include{preliminares/titulo} -%\include{preliminares/declaracion-originalidad} -%\include{preliminares/resumen} +\include{preliminares/declaracion-originalidad} +\include{preliminares/resumen} %\include{preliminares/summary} %\include{preliminares/dedicatoria} % Opcional \include{preliminares/tablacontenidos} @@ -265,7 +265,8 @@ \chapter{Las redes neuronales son aproximadores universales} \include{capitulos/5-Estudio_experimental/1_funciones_activacion} % Estudio del algoritmo de inicialización de pesos \input{capitulos/5-Estudio_experimental/2_descripcion_inicializacion-pesos} -\input{capitulos/5-Estudio_experimental/3_algoritmo-inicializacion-pesos} +%\input{capitulos/5-Estudio_experimental/3_algoritmo-inicializacion-pesos} +\input{capitulos/5-Estudio_experimental/4_conclusion_intuitiva} % Comentario sobre los algoritmos genéticos \input{capitulos/5-Estudio_experimental/combinacion_funciones_activacion} %\include{capitulos/N-Exploracion-hipotesis-planteadas/hipotesis} From 1eaff7cf1d25defc16bcdc32cbca5f555aba10ea Mon Sep 17 00:00:00 2001 From: Blanca Date: Mon, 6 Jun 2022 16:25:58 +0200 Subject: [PATCH 20/76] =?UTF-8?q?Menciona=20en=20la=20metodolog=C3=ADa=20a?= =?UTF-8?q?signaturas=20relacionadas=20#112?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/personal-dictionary.txt | 1 + .../capitulos/0-Metodologia/asignaturas.tex | 38 +++++++++++++++++++ Memoria/paquetes/comandos-entornos.tex | 1 + Memoria/preliminares/resumen.tex | 12 +++--- Memoria/tfg.tex | 1 + 5 files changed, 47 insertions(+), 6 deletions(-) create mode 100644 Memoria/capitulos/0-Metodologia/asignaturas.tex diff --git a/.github/workflows/personal-dictionary.txt b/.github/workflows/personal-dictionary.txt index 5b6de7a..301c950 100644 --- a/.github/workflows/personal-dictionary.txt +++ b/.github/workflows/personal-dictionary.txt @@ -1,6 +1,7 @@ personal_ws-1.1 es 0 utf-8 Amat Approximators +Aristóteles Backpropagation Backpropagations Bernstein diff --git a/Memoria/capitulos/0-Metodologia/asignaturas.tex b/Memoria/capitulos/0-Metodologia/asignaturas.tex new file mode 100644 index 0000000..7599e05 --- /dev/null +++ b/Memoria/capitulos/0-Metodologia/asignaturas.tex @@ -0,0 +1,38 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Asignaturas del grado relacionadas +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\section{Asignaturas de grado relacionadas con el trabajo } + +\epigraph{El todo es más que la suma de sus partes. +}{\textit{Aristóteles}} +Si bien, es casi imposible enumerar de manera +exhaustiva todas las asignaturas involucradas en este trabajo, +ya que todas han influido en menor o mayor medida en la comprensión +y formulación de ideas; las principales han +sido: +\begin{itemize} + \item \textbf{Análisis Matemático}: todas las asignaturas del departamento de análisis matemático + han tenido relevancia, ya sea en el modelado de espacios de funciones, + para probar que las redes neuronales son aproximadores universales + y para la elaboración de nuestro propios resultados. + \item El \textbf{Aprendizaje Automático} y \textbf{Visión por Computador} sientan las bases de lo que son problemas de aprendizaje, + tratamiento de los datos y evaluación del error, así como el uso práctico de las redes neuronales. + \item \textbf{Estructura de Datos}: diseño e implementación de la modelización de las redes neuronales y + sus algoritmos concernientes. + \item \textbf{Infraestructura virtual}:la metodología y buenas práctica seguidas han + bebido en gran parte de las recursos provenientes de tal asignatura. +\end{itemize} + +En menor medida han tenido también relevancia: +\begin{itemize} + \item \textbf{Inferencia Estadística}, la Inferencia Estadística está estrechamente ligada con + la ciencia de datos, también ha sido utilizada para los test de hipótesis. + \item Otras asignaturas que han intervenido \textbf{Programación Orientada a Objeto} \textbf{Diseño y Desarrollo de Sistemas Informáticos} + \item Nociones de \textbf{Topología} se han requerido para probar ciertos resultados analíticos. + \item \textbf{Álgebra, Métodos Numéricos I, Modelos I y Geometría III} esta agrupación de asignaturas + han ayudado a la comprensión y servido como germen de ideas y relaciones a lo largo de todo el desarrollo de la memoria, + por poner algunos ejemplos: la relación entre grafo y una matriz proviene de la asignatura de Modelos, + la existencia de funciones cuyo error tiende a infinito de Métodos Numéricos, + resultados constructivos que después han podido ser implementados (Álgebra y Métodos Numéricos), algunos resultados propios sobres las funciones de activación (Geometría). +\end{itemize} \ No newline at end of file diff --git a/Memoria/paquetes/comandos-entornos.tex b/Memoria/paquetes/comandos-entornos.tex index 23a091d..45742cd 100644 --- a/Memoria/paquetes/comandos-entornos.tex +++ b/Memoria/paquetes/comandos-entornos.tex @@ -151,5 +151,6 @@ \usepackage{csquotes} \let\oldenquote\enquote \renewcommand{\enquote}[1]{{\itshape\oldenquote{#1}}} +\usepackage{epigraph} %este es para las que salen a la derecha diff --git a/Memoria/preliminares/resumen.tex b/Memoria/preliminares/resumen.tex index ad36b58..573e37c 100644 --- a/Memoria/preliminares/resumen.tex +++ b/Memoria/preliminares/resumen.tex @@ -26,8 +26,8 @@ \chapter*{Resumen}\label{ch:resumen} \item \textbf{Capítulo \ref{chapter:Introduction-neuronal-networks}: Descripción del problema de aprendizaje.} Caracterización de los problemas de aprendizaje. \item \textbf{Capítulo \ref{ch03:teoria-aproximar}: Teoría de la aproximación.} Ejemplificación de los problemas que presenta un enfoque clásico frente a problemas de problema de aprendizaje. Demostración del teorema de \textit{Stone-Weierstrass}. \item \textbf{Capítulo \ref{chapter4:redes-neuronales-aproximador-universal}: Introducción de las redes neuronales como aproximadores universales.} Se presenta nuestro modelo de red neuronal. Se demuestra que es un aproximador universal basado en el artículo - \textit{Multilayer Feedforwar Networks are Universal Approximatos} de Kurt Hornik, - Maxwell Stinchcombe y Halber White. Se plantea si en la práctica las redes neuronales se pueden implementar. + \textit{Multilayer Feedforward Networks are Universal Approximators} (\cite{HORNIK1989359}) . Se plantea si en la práctica las redes neuronales + verdaderamente son aproximadores universales. \item \textbf{Capítulo \ref{chapter:construir-redes-neuronales}: Construcción de las redes neuronales.} Descripción de la implementación de las redes neuronales. Comparación de nuestro modelo con los usuales bajo la introducción de resultados originales sobre el sesgo y dominio de la imagen. Motivación, desarrollo e implementación de los algoritmos de aprendizaje y evaluación propuestos. \item \textbf{Capítulo \ref{funciones-activacion-democraticas-mas-demoscraticas}: Democratización de las funciones de activación.} Se presenta un resultado propio que establece una equivalencia entre distintas funciones de activación. A partir de él se da un criterio de selección de funciones de activación y se estudia experimentalmente los beneficios obtenidos. @@ -37,10 +37,10 @@ \chapter*{Resumen}\label{ch:resumen} \paragraph{PALABRAS CLAVE:} \begin{itemize*}[label=,itemsep=1em,itemjoin=\hspace{1em}] - \item Redes neuronales - \item Optimización - \item Funciones de activación - \item Inicialización de pesos + \item redes neuronales + \item optimización + \item funciones de activación + \item inicialización de pesos \end{itemize*} \endinput diff --git a/Memoria/tfg.tex b/Memoria/tfg.tex index acfbb96..d00ae15 100644 --- a/Memoria/tfg.tex +++ b/Memoria/tfg.tex @@ -223,6 +223,7 @@ \include{capitulos/0-Metodologia/Comentarios_previos} \input{capitulos/0-Metodologia/introduccion} \input{capitulos/0-Metodologia/herramientas} +\input{capitulos/0-Metodologia/asignaturas} % Filosofía a seguir \input{capitulos/Introduccion} From c4325b4a28a9d50ab850f7280de078d74ee3edc8 Mon Sep 17 00:00:00 2001 From: Blanca Date: Mon, 6 Jun 2022 18:45:29 +0200 Subject: [PATCH 21/76] =?UTF-8?q?Esboza=20cap=C3=ADtulo=207=20#117?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../capitulos/0-Metodologia/herramientas.tex | 2 +- .../construccion-evaluacion-red-neuronal.tex | 4 +-- .../2_descripcion_inicializacion-pesos.tex | 25 ++++++++++++-- .../3_detalles_implementacion.tex | 34 +++++++++++++++++++ Memoria/capitulos/Introduccion.tex | 11 ------ Memoria/library.bib | 18 +++++++++- Memoria/tfg.tex | 1 + 7 files changed, 77 insertions(+), 18 deletions(-) create mode 100644 Memoria/capitulos/5-Estudio_experimental/3_detalles_implementacion.tex diff --git a/Memoria/capitulos/0-Metodologia/herramientas.tex b/Memoria/capitulos/0-Metodologia/herramientas.tex index ac0e323..fad504d 100644 --- a/Memoria/capitulos/0-Metodologia/herramientas.tex +++ b/Memoria/capitulos/0-Metodologia/herramientas.tex @@ -11,7 +11,7 @@ \subsection{GitHub} \subsection{Lenguaje de programación Julia} Hemos seleccionado como lenguaje de programación \href{https://julialang.org}{Julia} -por los siguientes motivos: +por los siguientes motivos (\cite{virtudes-de-julia}): \begin{itemize} \item Ofrece \textit{benchmarks} muy competitivos\footnote{Véase los resultado expuestos en diff --git a/Memoria/capitulos/4-Actualizacion_redes_neuronales/construccion-evaluacion-red-neuronal.tex b/Memoria/capitulos/4-Actualizacion_redes_neuronales/construccion-evaluacion-red-neuronal.tex index fe10a23..e0e5af9 100644 --- a/Memoria/capitulos/4-Actualizacion_redes_neuronales/construccion-evaluacion-red-neuronal.tex +++ b/Memoria/capitulos/4-Actualizacion_redes_neuronales/construccion-evaluacion-red-neuronal.tex @@ -577,13 +577,13 @@ \subsubsection*{Ejemplo de evaluación de una red neuronal} \subsection{Implementación de una red neuronal y evaluación} \label{section:rrnn_implementation} Como conclusión a todo lo explicado una red neuronal no -sería más que una estructura que almacenara $(\gamma, A, S, B)$, esto es +sería más que una estructura que almacenara $(A, S, B)$, esto es % Pseudo código que refleja la estructura de una red neuronal \begin{algorithm}[H] \caption{Estructura de una red neuronal} - \label{algoritmo:estructura de una red neuronal} + \label{algoritmo:estructura-de-una-red-neuronal} \DontPrintSemicolon \hspace*{\algorithmicindent} \textbf{Entrada}: diff --git a/Memoria/capitulos/5-Estudio_experimental/2_descripcion_inicializacion-pesos.tex b/Memoria/capitulos/5-Estudio_experimental/2_descripcion_inicializacion-pesos.tex index fc4bebe..33593ce 100644 --- a/Memoria/capitulos/5-Estudio_experimental/2_descripcion_inicializacion-pesos.tex +++ b/Memoria/capitulos/5-Estudio_experimental/2_descripcion_inicializacion-pesos.tex @@ -3,16 +3,35 @@ %%%%%%%%%%%%%%%%%%%%%%%%% \chapter{ Mejora en la inicialización de los pesos de una red neuronal} \label{section:inicializar_pesos} + Como observábamos en la sección \ref{sec:gradiente-descendente}, el gradiente descendente pretende en cada iteración mejorar la solución encontrada, pero es totalmente sensible a la posición inicial de los pesos. -Presentamos por tanto la siguiente propuesta para inicializar una red neuronal con el objetivo de que sus pesos se encuentren ya cerca de la solución. Destaquemos que este algoritmo +Presentamos por tanto una propuesta para +inicializar una red neuronal con el objetivo de que +sus pesos se encuentren ya cerca de la solución. +Destaquemos que este algoritmo no solo servirá exclusivamente para el método de gradiente descendente sino para cualquier otro dependiente del punto inicial. -\section{ Estado del arte relacionado } +\section*{Contenido y objetivo del capítulo} + +\begin{itemize} + \item Establecimiento del estado del arte en \ref{ch07:estado-arte}. + \item Descripción del algoritmo y demostración de su corrección \ref{ch07:algoritmo-propuesto}. + \begin{itemize} + \item Determinación de su complejidad algorítmica. + \item Selección de parámetros y generalización. + \end{itemize} + \item Descripción de la implementación. + \item Beneficios obtenidos. +\end{itemize} + + +\section{ Estado del arte relacionado } +\label{ch07:estado-arte} % Nota informativa de lo que es un backbone \setlength{\marginparwidth}{\bigMarginSize} \marginpar{\maginLetterSize @@ -40,7 +59,7 @@ \section{ Estado del arte relacionado } \section{Descripción del método propuesto} - +\label{ch07:algoritmo-propuesto} \begin{aportacionOriginal} % método de construción La idea proviene de la demostración casi constructiva del teorema \ref{teorema:2_5_entrenamiento_redes_neuronales}. diff --git a/Memoria/capitulos/5-Estudio_experimental/3_detalles_implementacion.tex b/Memoria/capitulos/5-Estudio_experimental/3_detalles_implementacion.tex new file mode 100644 index 0000000..914dd85 --- /dev/null +++ b/Memoria/capitulos/5-Estudio_experimental/3_detalles_implementacion.tex @@ -0,0 +1,34 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Implementación del algoritmo +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\section{Implementación} +\label{ch07:Implementar} + +Los requisitos mínimos necesarios para una implementación adecuada son los siguientes +\begin{itemize} + \item Implementación de red neuronal y tipos de constructores. + \item Implementación del algoritmo. +\end{itemize} + +\subsection*{Implementación de redes neuronal} + +El modelo a implementar es el presentado en el algoritmo \ref{algoritmo:estructura-de-una-red-neuronal}. En virtud del \textit{composite type} de Julia \footnotetext{ Véase la \href{https://docs.julialang.org/en/v1/manual/types/}{documentación oficial}} la forma más simple y eficiente de +declarar una red neuronal es como una tipo de dato \textit{red neuronal} cuyos atributos sean las matrices que definen el modelo. + +En vista a la optimización en evaluación y +entrenamiento más eficiente las matrices +$A, S$ se han escrito en una sola permitiendo así una evaluación más compacta. + +\subsection*{Implementación del algoritmo de \textit{Forward propagation}} +La evaluación de una red neuronal se realizará por +medio de una función que recibe como parámetros un +tipo de dato \textit{red neuronal}. + +\subsection*{Implementación del algoritmo} + +Con el objetivo de optimizar: +- Cuestión de tipos composite dispatch. +- Necesidad de una lista ordenada: comentar conjunto y tipos +y argucia del diccionario. + diff --git a/Memoria/capitulos/Introduccion.tex b/Memoria/capitulos/Introduccion.tex index 47fe27a..f5f910b 100644 --- a/Memoria/capitulos/Introduccion.tex +++ b/Memoria/capitulos/Introduccion.tex @@ -15,17 +15,6 @@ \part{Teoría subyacente} El fin de esto no es más que construir una teoría sólida que de cabida a optimizaciones de fundamento teórico. La estructura de la memoria es la siguiente: -\begin{itemize} - \item \textbf{Capítulo } - \item \textbf{Capítulo } - \item \textbf{Capítulo } - \item \textbf{Capítulo } - \item \textbf{Capítulo } - \item \textbf{Capítulo } - \item \textbf{Capítulo } - \item \textbf{Capítulo } -\end{itemize} - %%% Descripción de los capítulos antigua Para ello nuestro \textit{modus operandi} será el siguiente: diff --git a/Memoria/library.bib b/Memoria/library.bib index 393e101..7d42aa5 100644 --- a/Memoria/library.bib +++ b/Memoria/library.bib @@ -700,7 +700,23 @@ @article{Liskov-principle numpages = {31}, keywords = {Larch, subtyping, formal specifications} } - +%%%% Julia +@article{virtudes-de-julia, + author = {Jeff Bezanson and + Stefan Karpinski and + Viral B. Shah and + Alan Edelman}, + title = {Julia: {A} Fast Dynamic Language for Technical Computing}, + journal = {CoRR}, + volume = {abs/1209.5145}, + year = {2012}, + url = {http://arxiv.org/abs/1209.5145}, + eprinttype = {arXiv}, + eprint = {1209.5145}, + timestamp = {Mon, 13 Aug 2018 16:49:00 +0200}, + biburl = {https://dblp.org/rec/journals/corr/abs-1209-5145.bib}, + bibsource = {dblp computer science bibliography, https://dblp.org} +} %%%%%%%%%%%%%%%%%% metodología %%%%%%%%%%%%%% %% Descripción del desarrollo ágil en la ciencia @article{DBLP:journals/corr/abs-2104-12545, diff --git a/Memoria/tfg.tex b/Memoria/tfg.tex index d00ae15..d890f06 100644 --- a/Memoria/tfg.tex +++ b/Memoria/tfg.tex @@ -266,6 +266,7 @@ \chapter{Las redes neuronales son aproximadores universales} \include{capitulos/5-Estudio_experimental/1_funciones_activacion} % Estudio del algoritmo de inicialización de pesos \input{capitulos/5-Estudio_experimental/2_descripcion_inicializacion-pesos} +\input{capitulos/5-Estudio_experimental/3_detalles_implementacion} %\input{capitulos/5-Estudio_experimental/3_algoritmo-inicializacion-pesos} \input{capitulos/5-Estudio_experimental/4_conclusion_intuitiva} % Comentario sobre los algoritmos genéticos From d98bc75d4b027cfb36d5d1e39cfa48d20054feea Mon Sep 17 00:00:00 2001 From: Blanca Date: Mon, 6 Jun 2022 23:09:09 +0200 Subject: [PATCH 22/76] =?UTF-8?q?Fragmenta=20a=20varios=20ficheros=20el=20?= =?UTF-8?q?algoritmo=20de=20inicializaci=C3=B3n=20#116=20Ahora=20seg=C3=BA?= =?UTF-8?q?n=20la=20cabecera=20se=20encuentra=20en=20una=20carpeta=20u=20o?= =?UTF-8?q?tra?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/initial_neuronal_network.jl | 236 ------------------ .../src/weight-inizializer-algorithm/main.jl | 18 ++ .../multiple-input-multiple-output.jl | 73 ++++++ .../multiple-input-single-ouput.jl | 78 ++++++ .../single-input-single-output.jl | 69 +++++ .../src/weight-inizializer-algorithm/utils.jl | 18 ++ .../test/initial_neuron_network.test.jl | 2 +- 7 files changed, 257 insertions(+), 237 deletions(-) delete mode 100644 Biblioteca-Redes-Neuronales/src/initial_neuronal_network.jl create mode 100644 Biblioteca-Redes-Neuronales/src/weight-inizializer-algorithm/main.jl create mode 100644 Biblioteca-Redes-Neuronales/src/weight-inizializer-algorithm/multiple-input-multiple-output.jl create mode 100644 Biblioteca-Redes-Neuronales/src/weight-inizializer-algorithm/multiple-input-single-ouput.jl create mode 100644 Biblioteca-Redes-Neuronales/src/weight-inizializer-algorithm/single-input-single-output.jl create mode 100644 Biblioteca-Redes-Neuronales/src/weight-inizializer-algorithm/utils.jl diff --git a/Biblioteca-Redes-Neuronales/src/initial_neuronal_network.jl b/Biblioteca-Redes-Neuronales/src/initial_neuronal_network.jl deleted file mode 100644 index dec5ff2..0000000 --- a/Biblioteca-Redes-Neuronales/src/initial_neuronal_network.jl +++ /dev/null @@ -1,236 +0,0 @@ -##################################################################### -# IMPLEMENTACIÓN DEL ALGORITMOS DE INICIALIZACIÓN DE PESOS -# Basado en capítulo 7, algoritmo 6 -##################################################################### - -# Tamaño de la red neuronal y conjunto de datos -module InitialNeuralNetwork -export InitializeNodes - -include("one_layer_neuronal_network.jl") -using .OneLayerNeuralNetwork - -""" - notOrtonormal(point_dict::Dict, p::Vector, new_point::Vector)::Bool -Comprueba que todos los vectores de `point_dict` no sean ortogonales al vector `new_point` -Esto es que `p.(v - new_point) neq 0` para todo (_,v) en `point_dict` -point_dict es un diccionario donde los vectores son los valores. -""" -function notOrtonormal(point_dict::Dict, p::Vector, new_point::Vector)::Bool - for (_, v) in point_dict - if sum(p.*(v-new_point)) == 0 - return false - end - end - return true -end - -""" - InitializeNodes(X_train,Y_train, n, M=10) - Devuelve una red neuronal con los pesos ya inicializados - de acorte a los conjuntos de entrenamiento. - `n` es el número de neuronas en la capa oculta. - El tamaño de entrada y salida de la red neuronal vienen determinados por - por los propios datos de entranamiento. - El tamaño de entrada se corresponde con el número de atributos de X_train (su número de columnas) - y a salida con el número de columnas de `Y_train`. - - M es una constante que depende de la función de activación, - por lo visto en teoría M=10 funciona para todas las - -""" -function InitializeNodes(X_train::Matrix,Y_train::Matrix, n::Int, M=10)::AbstractOneLayerNeuralNetwork - (_ , entry_dimension) = size(X_train) - (_ , output_dimension) = size(Y_train) - # inicializamos p - p = rand(Float64, entry_dimension+1) - - nodes = Dict{Float64, Vector{Float64}}() - index = 1 - tam = 0 - y_values = zeros(Float64, n, output_dimension) - - while tam < n && index <= n - new_point = X_train[index, :] - append!(new_point,1) - if notOrtonormal(nodes, p, new_point) - nodes[sum(p.*new_point)] = new_point - tam += 1 - y_values[tam,:] = Y_train[index,:] - end - index += 1 - end - ordered_values = sort(collect(keys(nodes))) - # Matrices de la red neuronal - # A = n x d - # S = n x 1 - # B = s x n - A = zeros(Float64, n, entry_dimension) - S = zeros(Float64, n) - B = zeros(Float64, output_dimension, n) - - # valores iniciales - S[1]=M*p[entry_dimension+1] - A[1,:] = M.*p[1:entry_dimension] - B[:,1] = y_values[1,:] - - # Cálculo del resto de neuronas - x_a = nodes[ordered_values[1]] - y_a = y_values[1,:] - - for (index,key) in collect(Iterators.zip(2:n, ordered_values[2:n])) - x_s = nodes[key] - y_s = y_values[index,:] - - coeff_aux = 2M / sum(p.* (x_s - x_a)) - S[index] = M - sum(p .* x_s) * coeff_aux - A[index,:] = coeff_aux * p[1:entry_dimension] - B[:,index] = y_s - y_a - - x_a = x_s - y_a = y_s - - end - return OneLayerNeuralNetworkFromMatrix(S,A,B) -end - - -""" - InitializeNodes(X_train::Matrix,Y_train::Vector, n::Int, M=10)::AbstractOneLayerNeuralNetwork - Devuelve una red neuronal con los pesos ya inicializados - de acorte a los conjuntos de entrenamiento. - `n` es el número de neuronas en la capa oculta. - El tamaño de entrada y salida de la red neuronal vienen determinados por - por los propios datos de entranamiento. - El tamaño de entrada se corresponde con el número de atributos de X_train (su número de columnas) - y a salida con el número de columnas de `Y_train`. - - M es una constante que depende de la función de activación, - por lo visto en teoría M=10 funciona para todas las - -""" -function InitializeNodes(X_train::Matrix,Y_train::Vector, n::Int, M=10)::AbstractOneLayerNeuralNetwork - (_ , entry_dimension) = size(X_train) - output_dimension = 1 - # inicializamos p - p = rand(Float64, entry_dimension+1) - - nodes = Dict{Float64, Vector{Float64}}() - index = 1 - tam = 0 - y_values = Dict{Float64, Float64}() # float porque la salida es de dimensión 1 - my_keys = zeros(Float64, n) - while tam < n && index <= n - new_point = X_train[index, :] - append!(new_point,1) - if notOrtonormal(nodes, p, new_point) - tam += 1 - ordered_vector = sum(p.*new_point) - my_keys[tam] = ordered_vector - nodes[ordered_vector] = new_point - y_values[ordered_vector] = Y_train[index] - end - index += 1 - end - ordered_values = sortperm(my_keys) - # Matrices de la red neuronal - # A = n x d - # S = n x 1 - # B = s x n - A = zeros(Float64, n, entry_dimension) - S = zeros(Float64, n) - B = zeros(Float64, output_dimension, n) - - # Cálculo del valor de las neuronas - key = my_keys[ordered_values[1]] - x_a = nodes[key] - y_a = y_values[key] - - S[1]=M*p[entry_dimension+1] - A[1,:] = M.*p[1:entry_dimension] - B[1] = y_a - - for index in 2:n - key = my_keys[index] - x_s = nodes[key] - y_s = y_values[key] - - coeff_aux = 2M / sum(p.* (x_s - x_a)) - S[index] = M - sum(p .* x_s) * coeff_aux - A[index,:] = coeff_aux * p[1:entry_dimension] - B[index] = y_s - y_a - - x_a = x_s - y_a = y_s - - end - return OneLayerNeuralNetworkFromMatrix(S,A,B) -end - - - -""" - InitializeNodes(X_train,Y_train, n, M=10) - Devuelve una red neuronal con los pesos ya inicializados - de acorte a los conjuntos de entrenamiento. - `n` es el número de neuronas en la capa oculta. - El tamaño de entrada y salida de la red neuronal vienen determinados por - por los propios datos de entranamiento. - El tamaño de entrada se corresponde con el número de atributos de X_train (su número de columnas) - y a salida con el número de columnas de `Y_train`. - - M es una constante que depende de la función de activación, - por lo visto en teoría M=10 funciona para todas las - -""" -function InitializeNodes(X_train::Vector,Y_train::Vector, n::Int, M=10)::AbstractOneLayerNeuralNetwork - entry_dimension = 1 - output_dimension = 1 - - nodes = [] - index = 1 - tam = 0 - y_values = zeros(n) - - while tam < n && index <= n - - if !(X_train[index] in nodes) - append!(nodes, X_train[index] ) - tam += 1 - y_values[tam] = Y_train[index] - end - index += 1 - end - ordered_index = sortperm(nodes) - # Matrices de la red neuronal - # A = n x d - # S = n x 1 - # B = s x n - A = zeros(Float64, n, entry_dimension) - S = zeros(Float64, n) - B = zeros(Float64, output_dimension, n) - - # valores iniciales - x_a = nodes[ordered_index[1]] - y_a = y_values[ordered_index[1]] - # Función afín constantemente Y_1 - S[1]= M - A[1] = 0 - B[1] = y_values[1] - - # Cálculo del resto de neuronas - for (index,key) in collect(Iterators.zip(2:n, ordered_index[2:n])) - x_s = nodes[key] - y_s = y_values[key] - - A[index] = 2M / (x_s - x_a) - S[index] = M - x_s * A[index] - B[index] = y_s - y_a - - x_a = x_s - y_a = y_s - - end - return OneLayerNeuralNetworkFromMatrix(S,A,B) -end -end #Module OneLayerNeuralNetwork \ No newline at end of file diff --git a/Biblioteca-Redes-Neuronales/src/weight-inizializer-algorithm/main.jl b/Biblioteca-Redes-Neuronales/src/weight-inizializer-algorithm/main.jl new file mode 100644 index 0000000..8b145b0 --- /dev/null +++ b/Biblioteca-Redes-Neuronales/src/weight-inizializer-algorithm/main.jl @@ -0,0 +1,18 @@ +##################################################################### +# IMPLEMENTACIÓN DEL ALGORITMOS DE INICIALIZACIÓN DE PESOS +# Basado en capítulo 7, algoritmo 6 +##################################################################### + +# Tamaño de la red neuronal y conjunto de datos +module InitialNeuralNetwork +export InitializeNodes + +include("../one_layer_neuronal_network.jl") +using .OneLayerNeuralNetwork +#Caso h:R -> R +include("single-input-single-output.jl") +include("utils.jl") +#Caso h:R^d -> R +include("multiple-input-single-ouput.jl") + +end #end module \ No newline at end of file diff --git a/Biblioteca-Redes-Neuronales/src/weight-inizializer-algorithm/multiple-input-multiple-output.jl b/Biblioteca-Redes-Neuronales/src/weight-inizializer-algorithm/multiple-input-multiple-output.jl new file mode 100644 index 0000000..a2d4d91 --- /dev/null +++ b/Biblioteca-Redes-Neuronales/src/weight-inizializer-algorithm/multiple-input-multiple-output.jl @@ -0,0 +1,73 @@ +##################################################################### +# IMPLEMENTACIÓN DEL ALGORITMOS DE INICIALIZACIÓN DE PESOS +# Basado en capítulo 7, algoritmo 6 +# CASO ENTRADA REAL de dimensión d > 1 SALIDA REAL de dimensión s>1 +##################################################################### +""" + InitializeNodes(X_train,Y_train, n, M=10) + Devuelve una red neuronal con los pesos ya inicializados + de acorte a los conjuntos de entrenamiento. + `n` es el número de neuronas en la capa oculta. + El tamaño de entrada y salida de la red neuronal vienen determinados por + por los propios datos de entranamiento. + El tamaño de entrada se corresponde con el número de atributos de X_train (su número de columnas) + y a salida con el número de columnas de `Y_train`. + + M es una constante que depende de la función de activación, + por lo visto en teoría M=10 funciona para todas las + +""" +function InitializeNodes(X_train::Matrix,Y_train::Matrix, n::Int, M=10)::AbstractOneLayerNeuralNetwork + (_ , entry_dimension) = size(X_train) + (_ , output_dimension) = size(Y_train) + # inicializamos p + p = rand(Float64, entry_dimension+1) + + nodes = Dict{Float64, Vector{Float64}}() + index = 1 + tam = 0 + y_values = zeros(Float64, n, output_dimension) + + while tam < n && index <= n + new_point = X_train[index, :] + append!(new_point,1) + if notOrtonormal(nodes, p, new_point) + nodes[sum(p.*new_point)] = new_point + tam += 1 + y_values[tam,:] = Y_train[index,:] + end + index += 1 + end + ordered_values = sort(collect(keys(nodes))) + # Matrices de la red neuronal + # A = n x d + # S = n x 1 + # B = s x n + A = zeros(Float64, n, entry_dimension) + S = zeros(Float64, n) + B = zeros(Float64, output_dimension, n) + + # valores iniciales + S[1]=M*p[entry_dimension+1] + A[1,:] = M.*p[1:entry_dimension] + B[:,1] = y_values[1,:] + + # Cálculo del resto de neuronas + x_a = nodes[ordered_values[1]] + y_a = y_values[1,:] + + for (index,key) in collect(Iterators.zip(2:n, ordered_values[2:n])) + x_s = nodes[key] + y_s = y_values[index,:] + + coeff_aux = 2M / sum(p.* (x_s - x_a)) + S[index] = M - sum(p .* x_s) * coeff_aux + A[index,:] = coeff_aux * p[1:entry_dimension] + B[:,index] = y_s - y_a + + x_a = x_s + y_a = y_s + + end + return OneLayerNeuralNetworkFromMatrix(S,A,B) +end \ No newline at end of file diff --git a/Biblioteca-Redes-Neuronales/src/weight-inizializer-algorithm/multiple-input-single-ouput.jl b/Biblioteca-Redes-Neuronales/src/weight-inizializer-algorithm/multiple-input-single-ouput.jl new file mode 100644 index 0000000..74abe51 --- /dev/null +++ b/Biblioteca-Redes-Neuronales/src/weight-inizializer-algorithm/multiple-input-single-ouput.jl @@ -0,0 +1,78 @@ +##################################################################### +# IMPLEMENTACIÓN DEL ALGORITMOS DE INICIALIZACIÓN DE PESOS +# Basado en capítulo 7, algoritmo 6 +# CASO ENTRADA REAL de dimensión d > 1 SALIDA REAL (una dimensión) +##################################################################### + + +""" + InitializeNodes(X_train::Matrix,Y_train::Vector, n::Int, M=10)::AbstractOneLayerNeuralNetwork + Devuelve una red neuronal con los pesos ya inicializados + de acorte a los conjuntos de entrenamiento. + `n` es el número de neuronas en la capa oculta. + El tamaño de entrada y salida de la red neuronal vienen determinados por + por los propios datos de entranamiento. + El tamaño de entrada se corresponde con el número de atributos de X_train (su número de columnas) + y a salida con el número de columnas de `Y_train`. + + M es una constante que depende de la función de activación, + por lo visto en teoría M=10 funciona para todas las + +""" +function InitializeNodes(X_train::Matrix,Y_train::Vector, n::Int, M=10)::AbstractOneLayerNeuralNetwork + (_ , entry_dimension) = size(X_train) + output_dimension = 1 + # inicializamos p + p = rand(Float64, entry_dimension+1) + + nodes = Dict{Float64, Vector{Float64}}() + index = 1 + tam = 0 + y_values = Dict{Float64, Float64}() # float porque la salida es de dimensión 1 + my_keys = zeros(Float64, n) + while tam < n && index <= n + new_point = X_train[index, :] + append!(new_point,1) + if notOrtonormal(nodes, p, new_point) + tam += 1 + ordered_vector = sum(p.*new_point) + my_keys[tam] = ordered_vector + nodes[ordered_vector] = new_point + y_values[ordered_vector] = Y_train[index] + end + index += 1 + end + ordered_values = sortperm(my_keys) + # Matrices de la red neuronal + # A = n x d + # S = n x 1 + # B = 1 x n + A = zeros(Float64, n, entry_dimension) + S = zeros(Float64, n) + B = zeros(Float64, output_dimension, n) + + # Cálculo del valor de las neuronas + key = my_keys[ordered_values[1]] + x_a = nodes[key] + y_a = y_values[key] + + S[1]=M*p[entry_dimension+1] + A[1,:] = M.*p[1:entry_dimension] + B[1] = y_a + + for index in 2:n + key = my_keys[index] + x_s = nodes[key] + y_s = y_values[key] + + coeff_aux = 2M / sum(p.* (x_s - x_a)) + S[index] = M - sum(p .* x_s) * coeff_aux + A[index,:] = coeff_aux * p[1:entry_dimension] + B[index] = y_s - y_a + + x_a = x_s + y_a = y_s + + end + return OneLayerNeuralNetworkFromMatrix(S,A,B) +end \ No newline at end of file diff --git a/Biblioteca-Redes-Neuronales/src/weight-inizializer-algorithm/single-input-single-output.jl b/Biblioteca-Redes-Neuronales/src/weight-inizializer-algorithm/single-input-single-output.jl new file mode 100644 index 0000000..637d109 --- /dev/null +++ b/Biblioteca-Redes-Neuronales/src/weight-inizializer-algorithm/single-input-single-output.jl @@ -0,0 +1,69 @@ +##################################################################### +# IMPLEMENTACIÓN DEL ALGORITMOS DE INICIALIZACIÓN DE PESOS +# Basado en capítulo 7, algoritmo 6 +# CASO ENTRADA REAL (una dimensión) SALIDA REAL (una dimensión) +##################################################################### +""" +InitializeNodes(X_train::Vector,Y_train::Vector, n::Int, M=10)::AbstractOneLayerNeuralNetwork + Devuelve una red neuronal de entrada de una dimensión y + de salida una dimensión con los pesos ya inicializados + de acorte a los conjuntos de entrenamiento. + `n` es el número de neuronas en la capa oculta. + El tamaño de entrada y salida de la red neuronal vienen determinados por + por los propios datos de entranamiento. + El tamaño de entrada se corresponde con el número de atributos de X_train (su número de columnas) + y a salida con el número de columnas de `Y_train`. + + M es una constante que depende de la función de activación, + por lo visto en teoría M=10 funciona para todas las + +""" +function InitializeNodes(X_train::Vector,Y_train::Vector, n::Int, M=10)::AbstractOneLayerNeuralNetwork + entry_dimension = 1 + output_dimension = 1 + + nodes = [] + index = 1 + tam = 0 + y_values = zeros(n) + + while tam < n && index <= n + if !(X_train[index] in nodes) + append!(nodes, X_train[index] ) + tam += 1 + y_values[tam] = Y_train[index] + end + index += 1 + end + ordered_index = sortperm(nodes) + # Matrices de la red neuronal + # A = n x 1 + # S = n x 1 + # B = 1 x n + A = zeros(Float64, n, entry_dimension) + S = zeros(Float64, n) + B = zeros(Float64, output_dimension, n) + + # valores iniciales + x_a = nodes[ordered_index[1]] + y_a = y_values[ordered_index[1]] + # Función afín constantemente Y_1 + S[1]= M + A[1] = 0 + B[1] = y_values[1] + + # Cálculo del resto de neuronas + for (index,key) in collect(Iterators.zip(2:n, ordered_index[2:n])) + x_s = nodes[key] + y_s = y_values[key] + + A[index] = 2M / (x_s - x_a) + S[index] = M - x_s * A[index] + B[index] = y_s - y_a + + x_a = x_s + y_a = y_s + + end + return OneLayerNeuralNetworkFromMatrix(S,A,B) +end diff --git a/Biblioteca-Redes-Neuronales/src/weight-inizializer-algorithm/utils.jl b/Biblioteca-Redes-Neuronales/src/weight-inizializer-algorithm/utils.jl new file mode 100644 index 0000000..0e49696 --- /dev/null +++ b/Biblioteca-Redes-Neuronales/src/weight-inizializer-algorithm/utils.jl @@ -0,0 +1,18 @@ +##################################################################### +# Función auxiliar para comprobar la perpendicularidad +##################################################################### +""" +notOrtonormal(point_dict::Dict, p::Vector, new_point::Vector)::Bool +Función auxiliar para la inicialización de pesos de redes neuronales de entrada de dimensión mayor que uno. +Comprueba que todos los vectores de `point_dict` no sean ortogonales al vector `new_point` +Esto es que `p.(v - new_point) neq 0` para todo (_,v) en `point_dict` +`point_dict`` es un diccionario donde los vectores son los valores. +""" +function notOrtonormal(point_dict::Dict, p::Vector, new_point::Vector)::Bool +for (_, v) in point_dict + if sum(p.*(v-new_point)) == 0 + return false + end +end +return true +end \ No newline at end of file diff --git a/Biblioteca-Redes-Neuronales/test/initial_neuron_network.test.jl b/Biblioteca-Redes-Neuronales/test/initial_neuron_network.test.jl index 50d3990..bad6420 100644 --- a/Biblioteca-Redes-Neuronales/test/initial_neuron_network.test.jl +++ b/Biblioteca-Redes-Neuronales/test/initial_neuron_network.test.jl @@ -7,7 +7,7 @@ Random.seed!(2); include("./../src/activation_functions.jl") include("./../src/one_layer_neuronal_network.jl") -include("./../src/initial_neuronal_network.jl") +include("./../src/weight-inizializer-algorithm/main.jl") using .InitialNeuralNetwork @testset "Nodes initialization algorithm entry dimension 1 output dimension 1" begin From ab40827108ed8feb87586f17bcc37cda199fe040 Mon Sep 17 00:00:00 2001 From: Blanca Date: Mon, 6 Jun 2022 23:21:45 +0200 Subject: [PATCH 23/76] Reorganiza carpeta de test #117 --- .../multiple-input-single-ouput.jl | 5 +- .../test/RUN_ALL_TEST.jl | 2 +- .../test/initial_neuron_network.test.jl | 85 ------------------- .../weight-inizializer-algorithm/main.test.jl | 14 +++ .../multiple-input-multiple-output.test.jl | 30 +++++++ .../multiple-input-single-output.test.jl | 36 ++++++++ .../single-input-single-output.test.jl | 36 ++++++++ .../0_experimento_sintetico.jl | 2 +- .../1_experimento_sintetico.jl | 50 +++++++++++ 9 files changed, 170 insertions(+), 90 deletions(-) delete mode 100644 Biblioteca-Redes-Neuronales/test/initial_neuron_network.test.jl create mode 100644 Biblioteca-Redes-Neuronales/test/weight-inizializer-algorithm/main.test.jl create mode 100644 Biblioteca-Redes-Neuronales/test/weight-inizializer-algorithm/multiple-input-multiple-output.test.jl create mode 100644 Biblioteca-Redes-Neuronales/test/weight-inizializer-algorithm/multiple-input-single-output.test.jl create mode 100644 Biblioteca-Redes-Neuronales/test/weight-inizializer-algorithm/single-input-single-output.test.jl create mode 100644 Experimentos/inicializacion-pesos-red-neuronal/1_experimento_sintetico.jl diff --git a/Biblioteca-Redes-Neuronales/src/weight-inizializer-algorithm/multiple-input-single-ouput.jl b/Biblioteca-Redes-Neuronales/src/weight-inizializer-algorithm/multiple-input-single-ouput.jl index 74abe51..2620926 100644 --- a/Biblioteca-Redes-Neuronales/src/weight-inizializer-algorithm/multiple-input-single-ouput.jl +++ b/Biblioteca-Redes-Neuronales/src/weight-inizializer-algorithm/multiple-input-single-ouput.jl @@ -4,7 +4,6 @@ # CASO ENTRADA REAL de dimensión d > 1 SALIDA REAL (una dimensión) ##################################################################### - """ InitializeNodes(X_train::Matrix,Y_train::Vector, n::Int, M=10)::AbstractOneLayerNeuralNetwork Devuelve una red neuronal con los pesos ya inicializados @@ -24,10 +23,10 @@ function InitializeNodes(X_train::Matrix,Y_train::Vector, n::Int, M=10)::Abstrac output_dimension = 1 # inicializamos p p = rand(Float64, entry_dimension+1) - - nodes = Dict{Float64, Vector{Float64}}() index = 1 tam = 0 + + nodes = Dict{Float64, Vector{Float64}}() y_values = Dict{Float64, Float64}() # float porque la salida es de dimensión 1 my_keys = zeros(Float64, n) while tam < n && index <= n diff --git a/Biblioteca-Redes-Neuronales/test/RUN_ALL_TEST.jl b/Biblioteca-Redes-Neuronales/test/RUN_ALL_TEST.jl index b5f8ee7..c8a779e 100644 --- a/Biblioteca-Redes-Neuronales/test/RUN_ALL_TEST.jl +++ b/Biblioteca-Redes-Neuronales/test/RUN_ALL_TEST.jl @@ -19,7 +19,7 @@ t = @elapsed include("forward_propagation.test.jl") println("done (took $t seconds).") println("Testing our initialization algorithm") -t = @elapsed include("initial_neuron_network.test.jl") +t = @elapsed include("weight-inizializer-algorithm/main.test.jl") println("done (took $t seconds).") println("Testing metric estimation") diff --git a/Biblioteca-Redes-Neuronales/test/initial_neuron_network.test.jl b/Biblioteca-Redes-Neuronales/test/initial_neuron_network.test.jl deleted file mode 100644 index bad6420..0000000 --- a/Biblioteca-Redes-Neuronales/test/initial_neuron_network.test.jl +++ /dev/null @@ -1,85 +0,0 @@ -################################################### -# Test inicialización de pesos -################################################### -using Test -using Random -Random.seed!(2); - -include("./../src/activation_functions.jl") -include("./../src/one_layer_neuronal_network.jl") -include("./../src/weight-inizializer-algorithm/main.jl") -using .InitialNeuralNetwork - -@testset "Nodes initialization algorithm entry dimension 1 output dimension 1" begin - # Comprobamos que las hipótesis de selección son correctas - M = 1 - @test ActivationFunctions.RampFunction(M) == 1 - @test ActivationFunctions.RampFunction(-M) == 0 - # Bien definido para tamaño n = 2 y salida de dimensión 1 - f_regression(x)=(x<=1) ? exp(-x) : log(x) - data_set_size = 5 - entry_dimension = 1 - output_dimension = 1 - # Número de neuronas - n = data_set_size # Debe de ser mayor que 1 para que no de error - X_train= map( - x-> (x-0.5)*10, # reescalamos al intervalo [-5,5] - rand(Float64, data_set_size) - ) - - Y_train = map(f_regression, X_train) - h = InitializeNodes(X_train, Y_train, n, M) - - # veamos que el tamaño de la salida es la adecuada - @test size(h.W1) == (n,2) - @test size(h.W2) == (1,n) - - # Si ha sido bien construida: - # Evaluar la red neuronal en los datos con los que se construyó - # debería de resultar el valor de Y_train respectivo - evaluar(x)=OneLayerNeuralNetwork.ForwardPropagation(h, - ActivationFunctions.RampFunction,x) - - for (x,y) in zip(X_train,Y_train) - @test evaluar([x]) ≈ [y] - end - -end - - -@testset "Nodes initialization algorithm entry dimension >1 output dimension 1" begin - # Comprobamos que las hipótesis de selección son correctas - M = 1 - @test ActivationFunctions.RampFunction(M) == 1 - @test ActivationFunctions.RampFunction(-M) == 0 - - # Bien definido para tamaño n = 2 y salida de dimensión 1 - f_regression(x,y,z)=x*y-z - data_set_size = 5 - entry_dimension = 3 - output_dimension = 1 - # Número de neuronas - n = 3# Debe de ser mayor que 1 para que no de error - X_train= rand(Float64, data_set_size, entry_dimension) - Y_train = map(x->f_regression(x...), eachrow(X_train))#ones(Float64, data_set_size, output_dimension) - - h = InitializeNodes(X_train, Y_train, n, M) - - # veamos que el tamaño de la salida es la adecuada - @test size(h.W1) == (n,entry_dimension+1) - @test size(h.W2) == (output_dimension,n) - - # Si ha sido bien construida: - # Evaluar la red neuronal en los datos con los que se construyó - # debería de resultar el valor de Y_train respectivo - evaluar(x)=OneLayerNeuralNetwork.ForwardPropagation(h, - ActivationFunctions.RampFunction,x) - - for (x,y) in zip(eachrow(X_train),Y_train) - #@test evaluar(x) ≈ [y] AHORA MISMO ESTE TEST NO LO PASA - end -end - - - - diff --git a/Biblioteca-Redes-Neuronales/test/weight-inizializer-algorithm/main.test.jl b/Biblioteca-Redes-Neuronales/test/weight-inizializer-algorithm/main.test.jl new file mode 100644 index 0000000..0ced5b5 --- /dev/null +++ b/Biblioteca-Redes-Neuronales/test/weight-inizializer-algorithm/main.test.jl @@ -0,0 +1,14 @@ +################################################### +# Test inicialización de pesos +################################################### +using Test +using Random +Random.seed!(2); + +include("./../../src/activation_functions.jl") +include("./../../src/one_layer_neuronal_network.jl") +include("./../../src/weight-inizializer-algorithm/main.jl") +using .InitialNeuralNetwork + +include("single-input-single-output.test.jl") +include("multiple-input-single-output.test.jl") \ No newline at end of file diff --git a/Biblioteca-Redes-Neuronales/test/weight-inizializer-algorithm/multiple-input-multiple-output.test.jl b/Biblioteca-Redes-Neuronales/test/weight-inizializer-algorithm/multiple-input-multiple-output.test.jl new file mode 100644 index 0000000..39748d8 --- /dev/null +++ b/Biblioteca-Redes-Neuronales/test/weight-inizializer-algorithm/multiple-input-multiple-output.test.jl @@ -0,0 +1,30 @@ +@testset "Nodes initialization algorithm n=3 entry = 3 output = 2" begin + # Bien definido para tamaño n = 2 y salida de dimensión 1 + f_regression(x,y,z)=x*y-z,x + data_set_size = 2 + entry_dimension = 3 + output_dimension = 2 + # Número de neuronas + n = 2 # Debe de ser mayor que 1 para que no de error + X_train= rand(Float64, data_set_size, entry_dimension) + Y_train = map(x->f_regression(x...), eachrow(X_train))#ones(Float64, data_set_size, output_dimension) + + h = InitializeNodes(X_train, Y_train, n, 1) + + # veamos que el tamaño de la salida es la adecuada + @test size(h.W1) == (2,4) + @test size(h.W2) == (1,2) + + # Si ha sido bien construida: + # Evaluar la red neuronal en los datos con los que se construyó + # debería de resultar el valor de Y_train respectivo + evaluar(x)=OneLayerNeuralNetwork.ForwardPropagation(h, + ActivationFunctions.RampFunction,x) + + for (x,y) in zip(eachrow(X_train),Y_train) + #@test evaluar(x) == [y] + end + +end + + diff --git a/Biblioteca-Redes-Neuronales/test/weight-inizializer-algorithm/multiple-input-single-output.test.jl b/Biblioteca-Redes-Neuronales/test/weight-inizializer-algorithm/multiple-input-single-output.test.jl new file mode 100644 index 0000000..1bd7877 --- /dev/null +++ b/Biblioteca-Redes-Neuronales/test/weight-inizializer-algorithm/multiple-input-single-output.test.jl @@ -0,0 +1,36 @@ +@testset "Nodes initialization algorithm entry dimension >1 output dimension 1" begin + # Comprobamos que las hipótesis de selección son correctas + M = 1 + @test ActivationFunctions.RampFunction(M) == 1 + @test ActivationFunctions.RampFunction(-M) == 0 + + # Bien definido para tamaño n = 2 y salida de dimensión 1 + f_regression(x,y,z)=x*y-z + data_set_size = 5 + entry_dimension = 3 + output_dimension = 1 + # Número de neuronas + n = 3# Debe de ser mayor que 1 para que no de error + X_train= rand(Float64, data_set_size, entry_dimension) + Y_train = map(x->f_regression(x...), eachrow(X_train))#ones(Float64, data_set_size, output_dimension) + + h = InitializeNodes(X_train, Y_train, n, M) + + # veamos que el tamaño de la salida es la adecuada + @test size(h.W1) == (n,entry_dimension+1) + @test size(h.W2) == (output_dimension,n) + + # Si ha sido bien construida: + # Evaluar la red neuronal en los datos con los que se construyó + # debería de resultar el valor de Y_train respectivo + evaluar(x)=OneLayerNeuralNetwork.ForwardPropagation(h, + ActivationFunctions.RampFunction,x) + + for (x,y) in zip(eachrow(X_train),Y_train) + #@test evaluar(x) ≈ [y] #AHORA MISMO ESTE TEST NO LO PASA + end +end + + + + diff --git a/Biblioteca-Redes-Neuronales/test/weight-inizializer-algorithm/single-input-single-output.test.jl b/Biblioteca-Redes-Neuronales/test/weight-inizializer-algorithm/single-input-single-output.test.jl new file mode 100644 index 0000000..f71cdf4 --- /dev/null +++ b/Biblioteca-Redes-Neuronales/test/weight-inizializer-algorithm/single-input-single-output.test.jl @@ -0,0 +1,36 @@ + +@testset "Nodes initialization algorithm entry dimension 1 output dimension 1" begin + # Comprobamos que las hipótesis de selección son correctas + M = 1 + @test ActivationFunctions.RampFunction(M) == 1 + @test ActivationFunctions.RampFunction(-M) == 0 + # Bien definido para tamaño n = 2 y salida de dimensión 1 + f_regression(x)=(x<=1) ? exp(-x) : log(x) + data_set_size = 5 + entry_dimension = 1 + output_dimension = 1 + # Número de neuronas + n = data_set_size # Debe de ser mayor que 1 para que no de error + X_train= map( + x-> (x-0.5)*10, # reescalamos al intervalo [-5,5] + rand(Float64, data_set_size) + ) + + Y_train = map(f_regression, X_train) + h = InitializeNodes(X_train, Y_train, n, M) + + # veamos que el tamaño de la salida es la adecuada + @test size(h.W1) == (n,2) + @test size(h.W2) == (1,n) + + # Si ha sido bien construida: + # Evaluar la red neuronal en los datos con los que se construyó + # debería de resultar el valor de Y_train respectivo + evaluar(x)=OneLayerNeuralNetwork.ForwardPropagation(h, + ActivationFunctions.RampFunction,x) + + for (x,y) in zip(X_train,Y_train) + @test evaluar([x]) ≈ [y] + end + +end diff --git a/Experimentos/inicializacion-pesos-red-neuronal/0_experimento_sintetico.jl b/Experimentos/inicializacion-pesos-red-neuronal/0_experimento_sintetico.jl index 7fa046a..aa2234d 100644 --- a/Experimentos/inicializacion-pesos-red-neuronal/0_experimento_sintetico.jl +++ b/Experimentos/inicializacion-pesos-red-neuronal/0_experimento_sintetico.jl @@ -9,7 +9,7 @@ config = TOML.parsefile(FICHERO_CONFIGURACION)["visualizacion-inicializacion-pes img_path = config["DIRECTORIO_IMAGENES"] Random.seed!(1) -include("../../Biblioteca-Redes-Neuronales/src/initial_neuronal_network.jl") +include("../../Biblioteca-Redes-Neuronales/src/weight-inizializer-algorithm/main.jl") include("../../Biblioteca-Redes-Neuronales/src/one_layer_neuronal_network.jl") include("../../Biblioteca-Redes-Neuronales/src/metric_estimation.jl") include("../../Biblioteca-Redes-Neuronales/src/activation_functions.jl") diff --git a/Experimentos/inicializacion-pesos-red-neuronal/1_experimento_sintetico.jl b/Experimentos/inicializacion-pesos-red-neuronal/1_experimento_sintetico.jl new file mode 100644 index 0000000..75af131 --- /dev/null +++ b/Experimentos/inicializacion-pesos-red-neuronal/1_experimento_sintetico.jl @@ -0,0 +1,50 @@ +######################################################## +# EXPERIMENTO SINTÉTICO DE NUESTRO algoritmo +######################################################## +using Random +using Plots +using TOML +FICHERO_CONFIGURACION = "Experimentos/.config.toml" +config = TOML.parsefile(FICHERO_CONFIGURACION)["visualizacion-inicializacion-pesos-R"] +img_path = config["DIRECTORIO_IMAGENES"] + +Random.seed!(1) +include("../../Biblioteca-Redes-Neuronales/src/weight-inizializer-algorithm/main.jl") +include("../../Biblioteca-Redes-Neuronales/src/one_layer_neuronal_network.jl") +include("../../Biblioteca-Redes-Neuronales/src/metric_estimation.jl") +include("../../Biblioteca-Redes-Neuronales/src/activation_functions.jl") + +using .InitialNeuralNetwork +using .OneLayerNeuralNetwork +using .ActivationFunctions +entry_dimension = 2 +output_dimension = 1 +M = 1 +K_range = 3 +f_regression(x,y)=x+2y +for n in [4] + + println("EXPERIMENTO SINTÉTICO") + println("n=$n ") + + linRange_values = Vector(LinRange(-K_range, K_range, n)) + my_product = linRange_values + for i in 1:entry_dimension + my_product = collect(Iterators.product(my_product..., linRange_values)) + println("\n$i\n") + display(my_product) + end + println(typeof(my_product)) + + """ + Y_train = map(f_regression, X_train) + h = InitializeNodes(X_train, Y_train, n, M) + evaluate(x)=OneLayerNeuralNetwork.ForwardPropagation(h, + ActivationFunctions.RampFunction,x) + interval = [-K_range,K_range] + file_name = "f_ideal_y_rn_con_$(n)_neuronas" + plot(x->evaluate([x])[1], -K_range,K_range, label="red neuronal n=$n") + display(plot!(f_regression, label="f ideal", title="Comparativa función ideal y red neuronal n=$n")) + #png(img_path*file_name) + """ +end \ No newline at end of file From ce643dc161978616204da0755390ff8061fdb0de Mon Sep 17 00:00:00 2001 From: Blanca Date: Tue, 7 Jun 2022 21:03:40 +0200 Subject: [PATCH 24/76] Fragmenta carpetas bibliotes #117 --- .../src/forward-propagation.jl | 15 +++++++++++++++ .../src/one_layer_neuronal_network.jl | 15 +-------------- .../multiple-input-single-output.test.jl | 2 +- .../experimento-iris.jl | 5 ----- 4 files changed, 17 insertions(+), 20 deletions(-) create mode 100644 Biblioteca-Redes-Neuronales/src/forward-propagation.jl delete mode 100644 Experimentos/inicializacion-pesos-red-neuronal/experimento-iris.jl diff --git a/Biblioteca-Redes-Neuronales/src/forward-propagation.jl b/Biblioteca-Redes-Neuronales/src/forward-propagation.jl new file mode 100644 index 0000000..560d259 --- /dev/null +++ b/Biblioteca-Redes-Neuronales/src/forward-propagation.jl @@ -0,0 +1,15 @@ +###################################################### +# ALGORITMO FORWARD PROPAGATION +# Algoritmo 3 descrito en la memoria. Capítulo 5. +###################################################### +""" +ForwardPropagation (h::AbstractOneLayerNeuralNetwork, activation_function, x::Vector{Real}) +Only use an activation function +""" +function ForwardPropagation(h,activation_function, x) + x_aux = copy(x) + s = h.W1 * push!(x_aux,1) + ∑= map(activation_function,s) + x_aux = h.W2 * ∑ + return x_aux +end diff --git a/Biblioteca-Redes-Neuronales/src/one_layer_neuronal_network.jl b/Biblioteca-Redes-Neuronales/src/one_layer_neuronal_network.jl index 06b139c..ea078b7 100644 --- a/Biblioteca-Redes-Neuronales/src/one_layer_neuronal_network.jl +++ b/Biblioteca-Redes-Neuronales/src/one_layer_neuronal_network.jl @@ -3,7 +3,7 @@ # and evaluation with forward propagation ######################################################## module OneLayerNeuralNetwork - +include("forward-propagation.jl") # Constructores export OneLayerNeuralNetworkRandomWeights export OneLayerNeuralNetworkFromMatrix @@ -88,17 +88,4 @@ mutable struct OneLayerNeuralNetworkFromMatrix <: AbstractOneLayerNeuralNetwork return new(hcat(A,S), B) end end - -""" -ForwardPropagation (h::AbstractOneLayerNeuralNetwork, activation_function, x::Vector{Real}) -Only use an activation function -""" -function ForwardPropagation(h,activation_function, x) - x_aux = copy(x) - s = h.W1 * push!(x_aux,1) - ∑= map(activation_function,s) - x_aux = h.W2 * ∑ - return x_aux -end - end # end OneLayerNeuralNetwork \ No newline at end of file diff --git a/Biblioteca-Redes-Neuronales/test/weight-inizializer-algorithm/multiple-input-single-output.test.jl b/Biblioteca-Redes-Neuronales/test/weight-inizializer-algorithm/multiple-input-single-output.test.jl index 1bd7877..e478f40 100644 --- a/Biblioteca-Redes-Neuronales/test/weight-inizializer-algorithm/multiple-input-single-output.test.jl +++ b/Biblioteca-Redes-Neuronales/test/weight-inizializer-algorithm/multiple-input-single-output.test.jl @@ -27,7 +27,7 @@ ActivationFunctions.RampFunction,x) for (x,y) in zip(eachrow(X_train),Y_train) - #@test evaluar(x) ≈ [y] #AHORA MISMO ESTE TEST NO LO PASA + #@test evaluar(x) ≈ [y] end end diff --git a/Experimentos/inicializacion-pesos-red-neuronal/experimento-iris.jl b/Experimentos/inicializacion-pesos-red-neuronal/experimento-iris.jl deleted file mode 100644 index 66d5718..0000000 --- a/Experimentos/inicializacion-pesos-red-neuronal/experimento-iris.jl +++ /dev/null @@ -1,5 +0,0 @@ -################################################ -# Resultados de la inicialización de pesos -# utilizando la base de datos (elegir una de aquí) -# https://juliaml.github.io/MLDatasets.jl/stable/ -################################################ \ No newline at end of file From d60261e39d755cb2cf640c8a75c950484e23b129 Mon Sep 17 00:00:00 2001 From: Blanca Date: Wed, 8 Jun 2022 18:34:10 +0200 Subject: [PATCH 25/76] =?UTF-8?q?Escribe=20borraodor=20de=20la=20implement?= =?UTF-8?q?aci=C3=B3n=20del=20algoritmo=20propio=20#115=20#117=20en=20la?= =?UTF-8?q?=20memoria?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/personal-dictionary.txt | 5 + .../1_funciones_activacion.tex | 1 + .../2_descripcion_inicializacion-pesos.tex | 10 +- .../3_detalles_implementacion.tex | 121 ++++++++++++++++-- Memoria/library.bib | 38 +++++- 5 files changed, 160 insertions(+), 15 deletions(-) diff --git a/.github/workflows/personal-dictionary.txt b/.github/workflows/personal-dictionary.txt index 301c950..282b6a9 100644 --- a/.github/workflows/personal-dictionary.txt +++ b/.github/workflows/personal-dictionary.txt @@ -59,6 +59,7 @@ Pérez ReLU Readme Rosenblatt +STL Sebastien Sellke Sigmoid @@ -76,6 +77,7 @@ approximators aproximable aproximador aproximadores +autobalanceado autres auxiliarDiferenciaPorDerivada backpropagation @@ -111,6 +113,7 @@ ij ik inasumible inecuación +initializer insesgado insesgados ipynb @@ -143,6 +146,7 @@ precompilados preimágenes primeraCapa qB +redimensionando reenfocar reescalados referenciada @@ -160,6 +164,7 @@ sigmoidea sobreescribir solventable squasher +stl struct subespacio subespacios diff --git a/Memoria/capitulos/5-Estudio_experimental/1_funciones_activacion.tex b/Memoria/capitulos/5-Estudio_experimental/1_funciones_activacion.tex index 19ae66c..a7214b7 100644 --- a/Memoria/capitulos/5-Estudio_experimental/1_funciones_activacion.tex +++ b/Memoria/capitulos/5-Estudio_experimental/1_funciones_activacion.tex @@ -613,6 +613,7 @@ \subsection{ Implementación de las funciones de activación en la biblioteca de % Sistema de tipos \subsubsection*{Sobre el sistema de tipos de Julia} +\label{ch06:sistema-timpos-julia} Julia posee un sistema de tipos muy rico \footnote{ Véase la documentación oficial de Julia sobre \textit{Types}: diff --git a/Memoria/capitulos/5-Estudio_experimental/2_descripcion_inicializacion-pesos.tex b/Memoria/capitulos/5-Estudio_experimental/2_descripcion_inicializacion-pesos.tex index 33593ce..34b3652 100644 --- a/Memoria/capitulos/5-Estudio_experimental/2_descripcion_inicializacion-pesos.tex +++ b/Memoria/capitulos/5-Estudio_experimental/2_descripcion_inicializacion-pesos.tex @@ -234,7 +234,7 @@ \section{Descripción del método propuesto} \end{algorithm} \subsection{Coste computacional algoritmo de inicialización de pesos} - +\label{ch07:coste-computacional-algoritmo-propio} El algoritmo se divide en tres pasos bien identificados: \begin{enumerate} \item Inicialización del vector aleatorio. @@ -325,17 +325,15 @@ \subsection{Generalización del método para funciones de activación } \centering \begin{tabular}{|c|c|} \hline - Función de activación & Valor mínimo de $M$ \\ \hline + \textbf{Función de activación} & \textbf{Valor mínimo de $M$} \\ \hline Función rampa & 1 \\ \hline \textit{Cosine Squasher} & $\frac{\pi}{2}$ \\ \hline Función indicadora 0 & 0 \\ \hline Función de activación & Valor mínimo de $M$ \\ \hline - Sigmoidea & con $M=10$ el error menor de $10^{-5}$\\ \hline - Tangente hiperbólica & con $M=7$ el error menor de $10^{-5}$\\ \hline + Sigmoidea & con $M=10$ el error será menor que $10^{-5}$\\ \hline + Tangente hiperbólica & con $M=7$ el error será menor que $10^{-5}$\\ \hline \textit{Hardtanh} & 1 \\ \hline \end{tabular} \caption{Valor mínimo del parámetro $M$ en algoritmo de inicialización de redes neuronales según la función de activación seleccionada (con más resultados).} \label{table:M-activation-function-2} \end{table} - -%\textcolor{red}{TODO issue 107: Hacer experimentaciones } \ No newline at end of file diff --git a/Memoria/capitulos/5-Estudio_experimental/3_detalles_implementacion.tex b/Memoria/capitulos/5-Estudio_experimental/3_detalles_implementacion.tex index 914dd85..535708b 100644 --- a/Memoria/capitulos/5-Estudio_experimental/3_detalles_implementacion.tex +++ b/Memoria/capitulos/5-Estudio_experimental/3_detalles_implementacion.tex @@ -14,21 +14,126 @@ \section{Implementación} \subsection*{Implementación de redes neuronal} El modelo a implementar es el presentado en el algoritmo \ref{algoritmo:estructura-de-una-red-neuronal}. En virtud del \textit{composite type} de Julia \footnotetext{ Véase la \href{https://docs.julialang.org/en/v1/manual/types/}{documentación oficial}} la forma más simple y eficiente de -declarar una red neuronal es como una tipo de dato \textit{red neuronal} cuyos atributos sean las matrices que definen el modelo. +declarar una red neuronal es como un nuevo tipo de dato: \textit{red neuronal} cuyos atributos sean las matrices que definen el modelo. En vista a la optimización en evaluación y entrenamiento más eficiente las matrices -$A, S$ se han escrito en una sola permitiendo así una evaluación más compacta. +$A, S$ se han escrito en una sola permitiendo así una evaluación más compacta. Puede encontrar la implementación en \href{https://github.com/BlancaCC/TFG-Estudio-de-las-redes-neuronales/tree/main/Biblioteca-Redes-Neuronales/src}{nuestro repositorio}. \subsection*{Implementación del algoritmo de \textit{Forward propagation}} La evaluación de una red neuronal se realizará por medio de una función que recibe como parámetros un -tipo de dato \textit{red neuronal}. +tipo de dato \textit{red neuronal}. Puede encontrar la implementación en \href{https://github.com/BlancaCC/TFG-Estudio-de-las-redes-neuronales/tree/main/Biblioteca-Redes-Neuronales/src}{nuestro repositorio}. -\subsection*{Implementación del algoritmo} +\subsection*{Implementación del algoritmo de inicialización de pesos} + +Se ha realizado la implementación de acorde al algoritmo descrito +en \ref{algo:algoritmo-iniciar-pesos}. Para un desarrollo optimizado se han tenido en cuenta dos +factores esenciales: +\begin{itemize} + \item Adaptación de los tipos de datos y \textit{ dispatch methods} de Julia en función + de las dimensiones de entrada y salida del conjunto de datos de entrenamiento. + \item Estructuras de datos propias de Julia. +\end{itemize} + +\subsubsection*{ Uso de los tipos de datos y \textit{ dispatch methods}} +Las entradas y salidas de dimensión uno son codificadas como vectores en lugar de matrices, +es por ello que vamos a hacer uso de la variedad de tipos que ofrece Julia y de sus \textit{dispatch methods} que ya comentamos en +la sección \ref{ch06:sistema-timpos-julia} con + profundidad. + + Gracias a esta manera de implementar polimorfismo + en Julia, tendremos una sola función que recoja a + nuestro algoritmo de inicialización de pesos y diversas implementaciones adaptadas a la dimensión de entrada y salida. + + Puede consultar la implementación en \href{https://github.com/BlancaCC/TFG-Estudio-de-las-redes-neuronales/tree/main/Biblioteca-Redes-Neuronales/src}{la carpeta \textit{weight-initializer-algorithm}} de nuestra biblioteca. + Cabe mencionar que el caso de entrada y salida de dimensión uno ha sido el que más reducción de costo + ha permitido, ya que en vez de realizar + el diseño directo recogido en \ref{algo:algoritmo-iniciar-pesos} puede uno consultar + el caso primero de la demostración \ref{teorema:2_5_entrenamiento_redes_neuronales} + y darse cuenta que la existencia del vector $p$ + es una argucia para conseguir un orden en los vectores de entrada. Como $\R$ ya es un cuerpo ordenado se puede prescindir tanto de $p$ como de toda la estructura de datos que ello conlleva. + Esta cuestión guarda relación con el apartado siguiente. + +\subsubsection*{ Selección de la estructuras de datos adecuada} +Como ya observamos en la sección \ref{ch07:coste-computacional-algoritmo-propio} el coste computacional recae principalmente en conseguir una ordenación del conjunto denominado como +$\Lambda$ en el pseudo código \ref{algo:algoritmo-iniciar-pesos}. + +La forma más eficiente de proceder en estos casos +es con una estructura de datos pertinente. +En lenguajes como C++ una solución eficiente sería introducir los datos en +un \textit{set}, que por estar construidos sobre un \href{https://en.wikipedia.org/wiki/Red–black_tree}{\textit{red-black tree}} +% Sobre la implementación +\footnote{ + Puede consultar la implementación del tipo de dato \textit{set} de la STL en + \url{https://github.com/gcc-mirror/gcc/blob/master/libstdc\%2B\%2B-v3/include/bits/stl_set.h} + (fuente consultada por última vez el 8 de junio de 2022). +} +%https://en.wikipedia.org/wiki/Red–black_tree +\marginpar{\maginLetterSize + \iconoAclaraciones \textcolor{dark_green}{ + \textbf{ + Estructura de datos + \textit{red-black tree} + } + } + Se trata de un árbol binario de búsqueda + autobalanceado, esto es un grafo no cíclico que partiendo de uno concreto denominado raíz la \textit{altura} (número máximo de nodos hasta llegar a un extremo partiendo de la raíz) es mínima. + + Esta estructura es muy interesante ya que no solo guarda los datos ordenados si no que su coste de búsqueda es $\mathcal{O}(n \log(n))$, pero su inserción y consulta de media términos de análisis de amortización tiene complejidad constante. En el peor de los casos sería + $\mathcal{O}(n \log(n))$. +} +tienen como efecto la ordenación eficiente de los mismos. + +% Sobre contribuir a Julia +\setlength{\marginparwidth}{\smallMarginSize} +\reversemarginpar +\marginpar{\maginLetterSize + \iconoClave \textcolor{darkRed}{ + \textbf{ + Contribución a Julia + } + } + Sería interesante explorar si se podría contribuir a Julia a partir de esta implementación, ya que a priori el uso de un diccionario solo + aporta simpleza en la implementación, + \href{https://github.com/JuliaLang/julia/blob/master/CONTRIBUTING.md}{CONTRIBUTING}. +} +\setlength{\marginparwidth}{\bigMarginSize} +\normalmarginpar +Por desgracia, en Julia esto no es posible sin hacer uso de bibliotecas externas o una implementación propia; ya que el tipo conjunto está + construido sobre diccionarios + (ver la línea 40 de la implementación del tipo \textit{set} de Julia que puede + encontrar en \href{https://github.com/JuliaLang/julia/blob/master/base/set.jl}{sus fuentes en GitHub})\footnote{ + Las fuentes se encuentran concretamente en + \url{https://github.com/JuliaLang/julia/blob/master/base/set.jl} + y han sido consultadas por última vez el 8 de junio de 2022. + }. + + Para resolver el problema hemos optado + por usar el tipo de dato de Julia + \textit{Array} \footnote{ + Véase su documentación oficial + \url{https://docs.julialang.org/en/v1/base/arrays/} + + Consultada por última vez el 8 de junio de 2022. +} +ya que tiene los siguientes beneficios: +\begin{itemize} + \item Permite declarar directamente la dimensión requerida (que es conocida de antemano por tratarse del número de neuronas); esto ahorraría en evitar tener que estar redimensionando en cada inserción. + \item Permite introducir el tipo de dato que contendrá. En la propia documentación de Julia \footnote{ + Consultar \url{https://docs.julialang.org/en/v1/manual/performance-tips/}. + Fue visitada por última vez el 8 de Junio de 2022. + } se nos indica que evitar el uso de tipo abstractos mejora la eficiencia. + \item Mantiene el mismo coste computacional. + Concretamente para ordenar Julia dispone de + dos algoritmo en su núcleo: \textit{Quick Sort} y \textit{Merge Sort}. + + Nosotros hemos optado por usar \textit{Quick Sort} \cite{Quicksort} porque a pesar de tener la misma complejidad $\mathcal{O}(n \log(n))$ la constante oculta de \textit{Quick Sort} es menor con array y además no necesita de memoria adicional, (\textit{Merge Sort}\cite{merge-sort} tiene complejidad $\mathcal{O}(n)$ en memoria). + ya que la ordenación de un array mantiene la eficiencia ya que + tal y como se indica en la documentación de Julia \footnote{ Consúltese \url{https://docs.julialang.org/en/v1/base/sort/}} + en la ordenación de array numéricos + (nuestro caso) utiliza el método de ordenación de \textit{Quick Sort} + (véase el artículo comparativo \cite{quicksort-vs-merge-sort}). +\end{itemize} -Con el objetivo de optimizar: -- Cuestión de tipos composite dispatch. -- Necesidad de una lista ordenada: comentar conjunto y tipos -y argucia del diccionario. diff --git a/Memoria/library.bib b/Memoria/library.bib index 7d42aa5..2fb916e 100644 --- a/Memoria/library.bib +++ b/Memoria/library.bib @@ -6,7 +6,43 @@ @book{the-elements-of-real-analysis year={1947}, publisher={John. Wiley \& Sons} } - +% --- algoritmos de ordenación +@article{Quicksort, + author = {Hoare, C. A. R.}, + title = "{Quicksort}", + journal = {The Computer Journal}, + volume = {5}, + number = {1}, + pages = {10-16}, + year = {1962}, + month = {01}, + abstract = "{A description is given of a new method of sorting in the random-access store of a computer. The method compares very favourably with other known methods in speed, in economy of storage, and in ease of programming. Certain refinements of the method, which may be useful in the optimization of inner loops, are described in the second part of the paper.}", + issn = {0010-4620}, + doi = {10.1093/comjnl/5.1.10}, + url = {https://doi.org/10.1093/comjnl/5.1.10}, + eprint = {https://academic.oup.com/comjnl/article-pdf/5/1/10/1111445/050010.pdf}, +} + +@book{merge-sort, + title={"Section 5.2.4: Sorting by Merging". Sorting and Searching. The Art of Computer Programming}, + author={Knuth, Donald}, + year={1998}, + publisher={Addison-Wesley}, + isbn={ISBN 0-201-89685-0}, + pages={158–168}, + edition={Vol. 3 (2nd ed.).} +} +% comparación de quicksort y merge sort +@article{quicksort-vs-merge-sort, +author = {Ali, Irfan and Lashari, Haque Nawaz and Keerio, Imran and Maitlo, Abdullah and Chhajro, M. and Malook, Muhammad}, +year = {2018}, +month = {01}, +pages = {192-195}, +title = {Performance Comparison between Merge and Quick Sort Algorithms in Data Structure}, +volume = {9}, +journal = {International Journal of Advanced Computer Science and Applications}, +doi = {10.14569/IJACSA.2018.091127} +} % ---------- Introducción a las redes neuronales ------- % Importancia y estado del arte del aprendizaje automático en la actualidad From 51611a1089d290b4fb850601160dfd713248b5b1 Mon Sep 17 00:00:00 2001 From: Blanca Date: Thu, 9 Jun 2022 18:43:14 +0200 Subject: [PATCH 26/76] =?UTF-8?q?Tras=20renombrar=20ahora=20va=20el=20?= =?UTF-8?q?=C3=ADndice=20#116?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main.jl | 0 .../multiple-input-multiple-output.jl | 0 .../multiple-input-single-ouput.jl | 19 ++++++++++--------- .../single-input-single-output.jl | 0 .../utils.jl | 12 ++++++------ .../test/RUN_ALL_TEST.jl | 2 +- .../weight-inizializer-algorithm/main.test.jl | 2 +- .../multiple-input-single-output.test.jl | 15 ++++++++++++--- 8 files changed, 30 insertions(+), 20 deletions(-) rename Biblioteca-Redes-Neuronales/src/{weight-inizializer-algorithm => weight-initializer-algorithm}/main.jl (100%) rename Biblioteca-Redes-Neuronales/src/{weight-inizializer-algorithm => weight-initializer-algorithm}/multiple-input-multiple-output.jl (100%) rename Biblioteca-Redes-Neuronales/src/{weight-inizializer-algorithm => weight-initializer-algorithm}/multiple-input-single-ouput.jl (85%) rename Biblioteca-Redes-Neuronales/src/{weight-inizializer-algorithm => weight-initializer-algorithm}/single-input-single-output.jl (100%) rename Biblioteca-Redes-Neuronales/src/{weight-inizializer-algorithm => weight-initializer-algorithm}/utils.jl (73%) diff --git a/Biblioteca-Redes-Neuronales/src/weight-inizializer-algorithm/main.jl b/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/main.jl similarity index 100% rename from Biblioteca-Redes-Neuronales/src/weight-inizializer-algorithm/main.jl rename to Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/main.jl diff --git a/Biblioteca-Redes-Neuronales/src/weight-inizializer-algorithm/multiple-input-multiple-output.jl b/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/multiple-input-multiple-output.jl similarity index 100% rename from Biblioteca-Redes-Neuronales/src/weight-inizializer-algorithm/multiple-input-multiple-output.jl rename to Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/multiple-input-multiple-output.jl diff --git a/Biblioteca-Redes-Neuronales/src/weight-inizializer-algorithm/multiple-input-single-ouput.jl b/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/multiple-input-single-ouput.jl similarity index 85% rename from Biblioteca-Redes-Neuronales/src/weight-inizializer-algorithm/multiple-input-single-ouput.jl rename to Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/multiple-input-single-ouput.jl index 2620926..f87c2e9 100644 --- a/Biblioteca-Redes-Neuronales/src/weight-inizializer-algorithm/multiple-input-single-ouput.jl +++ b/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/multiple-input-single-ouput.jl @@ -24,24 +24,25 @@ function InitializeNodes(X_train::Matrix,Y_train::Vector, n::Int, M=10)::Abstrac # inicializamos p p = rand(Float64, entry_dimension+1) index = 1 - tam = 0 + tam :: Int8= 0 - nodes = Dict{Float64, Vector{Float64}}() - y_values = Dict{Float64, Float64}() # float porque la salida es de dimensión 1 + nodes = Array{Vector{Float64}}(undef, n) + y_values = Array{Float64}(undef, n) # float porque la salida es de dimensión 1 my_keys = zeros(Float64, n) while tam < n && index <= n new_point = X_train[index, :] append!(new_point,1) - if notOrtonormal(nodes, p, new_point) + if notOrtonormal(nodes, p, new_point, tam) tam += 1 ordered_vector = sum(p.*new_point) my_keys[tam] = ordered_vector - nodes[ordered_vector] = new_point - y_values[ordered_vector] = Y_train[index] + nodes[tam] = new_point + y_values[tam] = Y_train[index] + end index += 1 end - ordered_values = sortperm(my_keys) + ordered_values_index = sortperm(my_keys) # Matrices de la red neuronal # A = n x d # S = n x 1 @@ -51,7 +52,7 @@ function InitializeNodes(X_train::Matrix,Y_train::Vector, n::Int, M=10)::Abstrac B = zeros(Float64, output_dimension, n) # Cálculo del valor de las neuronas - key = my_keys[ordered_values[1]] + key = ordered_values_index[1] x_a = nodes[key] y_a = y_values[key] @@ -60,7 +61,7 @@ function InitializeNodes(X_train::Matrix,Y_train::Vector, n::Int, M=10)::Abstrac B[1] = y_a for index in 2:n - key = my_keys[index] + key = ordered_values_index[index] x_s = nodes[key] y_s = y_values[key] diff --git a/Biblioteca-Redes-Neuronales/src/weight-inizializer-algorithm/single-input-single-output.jl b/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/single-input-single-output.jl similarity index 100% rename from Biblioteca-Redes-Neuronales/src/weight-inizializer-algorithm/single-input-single-output.jl rename to Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/single-input-single-output.jl diff --git a/Biblioteca-Redes-Neuronales/src/weight-inizializer-algorithm/utils.jl b/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/utils.jl similarity index 73% rename from Biblioteca-Redes-Neuronales/src/weight-inizializer-algorithm/utils.jl rename to Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/utils.jl index 0e49696..67f3774 100644 --- a/Biblioteca-Redes-Neuronales/src/weight-inizializer-algorithm/utils.jl +++ b/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/utils.jl @@ -8,11 +8,11 @@ Comprueba que todos los vectores de `point_dict` no sean ortogonales al vector ` Esto es que `p.(v - new_point) neq 0` para todo (_,v) en `point_dict` `point_dict`` es un diccionario donde los vectores son los valores. """ -function notOrtonormal(point_dict::Dict, p::Vector, new_point::Vector)::Bool -for (_, v) in point_dict - if sum(p.*(v-new_point)) == 0 - return false +function notOrtonormal(points::Vector{Vector{Float64}}, p::Vector, new_point::Vector, tam::Int8)::Bool + for i in 1:tam + if sum(p.*(points[i]-new_point)) == 0 + return false + end end -end -return true + return true end \ No newline at end of file diff --git a/Biblioteca-Redes-Neuronales/test/RUN_ALL_TEST.jl b/Biblioteca-Redes-Neuronales/test/RUN_ALL_TEST.jl index c8a779e..1b8b71e 100644 --- a/Biblioteca-Redes-Neuronales/test/RUN_ALL_TEST.jl +++ b/Biblioteca-Redes-Neuronales/test/RUN_ALL_TEST.jl @@ -19,7 +19,7 @@ t = @elapsed include("forward_propagation.test.jl") println("done (took $t seconds).") println("Testing our initialization algorithm") -t = @elapsed include("weight-inizializer-algorithm/main.test.jl") +t = @elapsed include("weight-initializer-algorithm/main.test.jl") println("done (took $t seconds).") println("Testing metric estimation") diff --git a/Biblioteca-Redes-Neuronales/test/weight-inizializer-algorithm/main.test.jl b/Biblioteca-Redes-Neuronales/test/weight-inizializer-algorithm/main.test.jl index 0ced5b5..5068e45 100644 --- a/Biblioteca-Redes-Neuronales/test/weight-inizializer-algorithm/main.test.jl +++ b/Biblioteca-Redes-Neuronales/test/weight-inizializer-algorithm/main.test.jl @@ -7,7 +7,7 @@ Random.seed!(2); include("./../../src/activation_functions.jl") include("./../../src/one_layer_neuronal_network.jl") -include("./../../src/weight-inizializer-algorithm/main.jl") +include("./../../src/weight-initializer-algorithm/main.jl") using .InitialNeuralNetwork include("single-input-single-output.test.jl") diff --git a/Biblioteca-Redes-Neuronales/test/weight-inizializer-algorithm/multiple-input-single-output.test.jl b/Biblioteca-Redes-Neuronales/test/weight-inizializer-algorithm/multiple-input-single-output.test.jl index e478f40..c65d300 100644 --- a/Biblioteca-Redes-Neuronales/test/weight-inizializer-algorithm/multiple-input-single-output.test.jl +++ b/Biblioteca-Redes-Neuronales/test/weight-inizializer-algorithm/multiple-input-single-output.test.jl @@ -1,3 +1,12 @@ +using Test +using Random +Random.seed!(2); + +include("./../../src/activation_functions.jl") +include("./../../src/one_layer_neuronal_network.jl") +include("./../../src/weight-initializer-algorithm/main.jl") +using .InitialNeuralNetwork +### borrar lo de arriba @testset "Nodes initialization algorithm entry dimension >1 output dimension 1" begin # Comprobamos que las hipótesis de selección son correctas M = 1 @@ -6,11 +15,11 @@ # Bien definido para tamaño n = 2 y salida de dimensión 1 f_regression(x,y,z)=x*y-z - data_set_size = 5 + data_set_size = 3 entry_dimension = 3 output_dimension = 1 # Número de neuronas - n = 3# Debe de ser mayor que 1 para que no de error + n = data_set_size# Debe de ser mayor que 1 para que no de error X_train= rand(Float64, data_set_size, entry_dimension) Y_train = map(x->f_regression(x...), eachrow(X_train))#ones(Float64, data_set_size, output_dimension) @@ -27,7 +36,7 @@ ActivationFunctions.RampFunction,x) for (x,y) in zip(eachrow(X_train),Y_train) - #@test evaluar(x) ≈ [y] + @test evaluar(x) ≈ [y] end end From 3bdeb8d31d7b31755901873f7bc56d04ac6fa7f4 Mon Sep 17 00:00:00 2001 From: Blanca Date: Thu, 9 Jun 2022 21:05:54 +0200 Subject: [PATCH 27/76] =?UTF-8?q?Arregla=20algoritmo=20inicializaci=C3=B3n?= =?UTF-8?q?=20de=20pesos=20#116?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../multiple-input-single-ouput.jl | 14 +++++++------- .../multiple-input-single-output.test.jl | 15 +++------------ .../2_descripcion_inicializacion-pesos.tex | 15 +++++++++------ .../3_detalles_implementacion.tex | 19 ++++++++++--------- 4 files changed, 29 insertions(+), 34 deletions(-) diff --git a/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/multiple-input-single-ouput.jl b/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/multiple-input-single-ouput.jl index f87c2e9..65c7a8c 100644 --- a/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/multiple-input-single-ouput.jl +++ b/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/multiple-input-single-ouput.jl @@ -22,7 +22,7 @@ function InitializeNodes(X_train::Matrix,Y_train::Vector, n::Int, M=10)::Abstrac (_ , entry_dimension) = size(X_train) output_dimension = 1 # inicializamos p - p = rand(Float64, entry_dimension+1) + p = rand(Float32, entry_dimension) index = 1 tam :: Int8= 0 @@ -31,7 +31,7 @@ function InitializeNodes(X_train::Matrix,Y_train::Vector, n::Int, M=10)::Abstrac my_keys = zeros(Float64, n) while tam < n && index <= n new_point = X_train[index, :] - append!(new_point,1) + #append!(new_point,1) if notOrtonormal(nodes, p, new_point, tam) tam += 1 ordered_vector = sum(p.*new_point) @@ -56,8 +56,8 @@ function InitializeNodes(X_train::Matrix,Y_train::Vector, n::Int, M=10)::Abstrac x_a = nodes[key] y_a = y_values[key] - S[1]=M*p[entry_dimension+1] - A[1,:] = M.*p[1:entry_dimension] + S[1]=M + A[1,:] = zeros(Float64, entry_dimension) B[1] = y_a for index in 2:n @@ -65,14 +65,14 @@ function InitializeNodes(X_train::Matrix,Y_train::Vector, n::Int, M=10)::Abstrac x_s = nodes[key] y_s = y_values[key] + coeff_aux = 2M / sum(p.* (x_s - x_a)) - S[index] = M - sum(p .* x_s) * coeff_aux - A[index,:] = coeff_aux * p[1:entry_dimension] + S[index] = M - coeff_aux*sum(p .* x_s) + A[index,:] = coeff_aux * p B[index] = y_s - y_a x_a = x_s y_a = y_s - end return OneLayerNeuralNetworkFromMatrix(S,A,B) end \ No newline at end of file diff --git a/Biblioteca-Redes-Neuronales/test/weight-inizializer-algorithm/multiple-input-single-output.test.jl b/Biblioteca-Redes-Neuronales/test/weight-inizializer-algorithm/multiple-input-single-output.test.jl index c65d300..1853207 100644 --- a/Biblioteca-Redes-Neuronales/test/weight-inizializer-algorithm/multiple-input-single-output.test.jl +++ b/Biblioteca-Redes-Neuronales/test/weight-inizializer-algorithm/multiple-input-single-output.test.jl @@ -1,12 +1,3 @@ -using Test -using Random -Random.seed!(2); - -include("./../../src/activation_functions.jl") -include("./../../src/one_layer_neuronal_network.jl") -include("./../../src/weight-initializer-algorithm/main.jl") -using .InitialNeuralNetwork -### borrar lo de arriba @testset "Nodes initialization algorithm entry dimension >1 output dimension 1" begin # Comprobamos que las hipótesis de selección son correctas M = 1 @@ -15,16 +6,16 @@ using .InitialNeuralNetwork # Bien definido para tamaño n = 2 y salida de dimensión 1 f_regression(x,y,z)=x*y-z - data_set_size = 3 + data_set_size = 4 entry_dimension = 3 output_dimension = 1 # Número de neuronas n = data_set_size# Debe de ser mayor que 1 para que no de error X_train= rand(Float64, data_set_size, entry_dimension) - Y_train = map(x->f_regression(x...), eachrow(X_train))#ones(Float64, data_set_size, output_dimension) + Y_train = map(x->f_regression(x...), eachrow(X_train)) h = InitializeNodes(X_train, Y_train, n, M) - + # veamos que el tamaño de la salida es la adecuada @test size(h.W1) == (n,entry_dimension+1) @test size(h.W2) == (output_dimension,n) diff --git a/Memoria/capitulos/5-Estudio_experimental/2_descripcion_inicializacion-pesos.tex b/Memoria/capitulos/5-Estudio_experimental/2_descripcion_inicializacion-pesos.tex index 34b3652..fc101a2 100644 --- a/Memoria/capitulos/5-Estudio_experimental/2_descripcion_inicializacion-pesos.tex +++ b/Memoria/capitulos/5-Estudio_experimental/2_descripcion_inicializacion-pesos.tex @@ -112,8 +112,8 @@ \section{Descripción del método propuesto} $p_{[i,j]} = (p_i, p_{i+1}, \ldots, p_{j})$ donde $(p_0, p_1, \ldots, p_d)=p$, comenzaremos definiendo el valor de la primera fila como \begin{align} - &S_1 = M p_0, \\ - & A_{1 *} = M p_{[1,d]}, \\ + &S_1 = 0, \\ + & A_{1 *} = 0_{[1,d]}, \\ & B_{* 1} = y_1. \end{align} @@ -151,8 +151,9 @@ \section{Descripción del método propuesto} \begin{equation} \left\{ \begin{array}{l} + % sesgo \alpha_{k 0} = \tilde{\alpha}_{k s} = - M - \frac{2 M}{p \cdot (x_k - x_{k-1})}(p \cdot x_{k}) + M - \frac{2 M}{p \cdot (x_k - x_{k-1})}(p \cdot x_{k}) \\ \alpha_{k i} = \tilde{\alpha}_{k p} p_{i} = @@ -168,9 +169,11 @@ \section{Descripción del método propuesto} \begin{equation} \left\{ \begin{array}{l} - S_{k} = M - \frac{2 M}{p \cdot (x_k - x_{k-1})}(p \cdot x_{k-1})\\ + S_{k} = + M - \frac{2 M}{p \cdot (x_k - x_{k-1})}(p \cdot x_{k}) + \\ A_{k i} = \frac{2 M}{p \cdot (x_k - x_{k-1})} - p_{i} + p_{i} \\ B_{* k} = y_k - y_{k-1} \end{array} @@ -223,7 +226,7 @@ \section{Descripción del método propuesto} \STATE \textit{Cálculo del resto de neuronas}. \For{ cada $(x_k, y_k) \in \Lambda$}{ \begin{align} - &S_{k} = M - \frac{2 M}{p \cdot (x_k - x_{k-1})}(p \cdot x_{k-1})\\ + &S_{k} = M - \frac{2 M}{p \cdot (x_k - x_{k-1})}(p \cdot x_{k}),\\ & A_{k i} = \frac{2 M}{p \cdot (x_k - x_{k-1})} p_{i} \quad i \in \{1, \ldots d\},\\ & B_{* k} = y_k - y_{k-1}. diff --git a/Memoria/capitulos/5-Estudio_experimental/3_detalles_implementacion.tex b/Memoria/capitulos/5-Estudio_experimental/3_detalles_implementacion.tex index 535708b..770dad6 100644 --- a/Memoria/capitulos/5-Estudio_experimental/3_detalles_implementacion.tex +++ b/Memoria/capitulos/5-Estudio_experimental/3_detalles_implementacion.tex @@ -126,14 +126,15 @@ \subsubsection*{ Selección de la estructuras de datos adecuada} } se nos indica que evitar el uso de tipo abstractos mejora la eficiencia. \item Mantiene el mismo coste computacional. Concretamente para ordenar Julia dispone de - dos algoritmo en su núcleo: \textit{Quick Sort} y \textit{Merge Sort}. - - Nosotros hemos optado por usar \textit{Quick Sort} \cite{Quicksort} porque a pesar de tener la misma complejidad $\mathcal{O}(n \log(n))$ la constante oculta de \textit{Quick Sort} es menor con array y además no necesita de memoria adicional, (\textit{Merge Sort}\cite{merge-sort} tiene complejidad $\mathcal{O}(n)$ en memoria). - ya que la ordenación de un array mantiene la eficiencia ya que - tal y como se indica en la documentación de Julia \footnote{ Consúltese \url{https://docs.julialang.org/en/v1/base/sort/}} - en la ordenación de array numéricos - (nuestro caso) utiliza el método de ordenación de \textit{Quick Sort} - (véase el artículo comparativo \cite{quicksort-vs-merge-sort}). + dos algoritmos: \textit{Quick Sort} y \textit{Merge Sort}\footnote{ Consúltese \url{https://docs.julialang.org/en/v1/base/sort/}} . + + Nosotros hemos optado por usar \textit{Quick Sort} \cite{Quicksort} porque a pesar de tener ambos algoritmos la misma complejidad media $\mathcal{O}(n \log(n))$, la constante oculta de \textit{Quick Sort} es menor con \textit{arrays} y además no necesita de memoria adicional, (\textit{Merge Sort} \cite{merge-sort} tiene complejidad $\mathcal{O}(n)$ en memoria) (véase el artículo comparativo \cite{quicksort-vs-merge-sort}). \end{itemize} - +\subsection{Diseño de los tests} + +Deberá de comprobarse que las dimensiones de salida de la red neuronal son las adecuadas +con respecto a la entrada y salida de los datos. + +De acorde a la propiedad del teorema \ref{teo:eficacia-funciones-activation} todos los datos con los que se construya la red neuronal deben de tener una aproximación exacta. + From 791a98cdd5d6edbbd39788862e54e09d69a8efab Mon Sep 17 00:00:00 2001 From: Blanca Date: Fri, 10 Jun 2022 07:34:09 +0200 Subject: [PATCH 28/76] =?UTF-8?q?Corrige=20algoritmo=20inicializaci=C3=B3n?= =?UTF-8?q?=20de=20pesos=20#115=20Versi=C3=B3n=20multiple=20input=20multip?= =?UTF-8?q?le=20output?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/weight-initializer-algorithm/main.jl | 2 + .../multiple-input-multiple-output.jl | 45 ++++++++++--------- .../multiple-input-single-ouput.jl | 8 +--- .../single-input-single-output.jl | 3 +- .../test/RUN_ALL_TEST.jl | 2 +- .../weight-inizializer-algorithm/main.test.jl | 3 +- .../multiple-input-multiple-output.test.jl | 25 ++++++----- .../0_experimento_sintetico.jl | 2 +- .../1_experimento_sintetico.jl | 2 +- 9 files changed, 46 insertions(+), 46 deletions(-) diff --git a/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/main.jl b/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/main.jl index 8b145b0..927c7bf 100644 --- a/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/main.jl +++ b/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/main.jl @@ -14,5 +14,7 @@ include("single-input-single-output.jl") include("utils.jl") #Caso h:R^d -> R include("multiple-input-single-ouput.jl") +#Caso h:R^d -> R^s con r,s> 1 +include("multiple-input-multiple-output.jl") end #end module \ No newline at end of file diff --git a/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/multiple-input-multiple-output.jl b/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/multiple-input-multiple-output.jl index a2d4d91..bf3dbd7 100644 --- a/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/multiple-input-multiple-output.jl +++ b/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/multiple-input-multiple-output.jl @@ -21,24 +21,26 @@ function InitializeNodes(X_train::Matrix,Y_train::Matrix, n::Int, M=10)::Abstrac (_ , entry_dimension) = size(X_train) (_ , output_dimension) = size(Y_train) # inicializamos p - p = rand(Float64, entry_dimension+1) + p = rand(Float32, entry_dimension) - nodes = Dict{Float64, Vector{Float64}}() - index = 1 - tam = 0 - y_values = zeros(Float64, n, output_dimension) + index :: Int8 = 1 + tam :: Int8= 0 + nodes = [Vector{Float64}(undef, output_dimension) for _ in 1:n] + y_values = [Vector{Float64}(undef, output_dimension) for _ in 1:n] + my_keys = zeros(Float64, n) while tam < n && index <= n new_point = X_train[index, :] - append!(new_point,1) - if notOrtonormal(nodes, p, new_point) - nodes[sum(p.*new_point)] = new_point + if notOrtonormal(nodes, p, new_point, tam) tam += 1 - y_values[tam,:] = Y_train[index,:] + ordered_vector = sum(p.*new_point) + my_keys[tam] = ordered_vector + nodes[tam] = new_point + y_values[tam] = Y_train[index,:] end index += 1 end - ordered_values = sort(collect(keys(nodes))) + ordered_values_index = sortperm(my_keys) # Matrices de la red neuronal # A = n x d # S = n x 1 @@ -47,27 +49,26 @@ function InitializeNodes(X_train::Matrix,Y_train::Matrix, n::Int, M=10)::Abstrac S = zeros(Float64, n) B = zeros(Float64, output_dimension, n) + # Cálculo del valor de las neuronas + key = ordered_values_index[1] + x_a = nodes[key] + y_a = y_values[key] # valores iniciales - S[1]=M*p[entry_dimension+1] - A[1,:] = M.*p[1:entry_dimension] - B[:,1] = y_values[1,:] - - # Cálculo del resto de neuronas - x_a = nodes[ordered_values[1]] - y_a = y_values[1,:] + S[1]=M + B[:, 1] = y_a - for (index,key) in collect(Iterators.zip(2:n, ordered_values[2:n])) + for index in 2:n + key = ordered_values_index[index] x_s = nodes[key] - y_s = y_values[index,:] + y_s = y_values[key] coeff_aux = 2M / sum(p.* (x_s - x_a)) - S[index] = M - sum(p .* x_s) * coeff_aux - A[index,:] = coeff_aux * p[1:entry_dimension] + S[index] = M - coeff_aux*sum(p .* x_s) + A[index,:] = coeff_aux * p B[:,index] = y_s - y_a x_a = x_s y_a = y_s - end return OneLayerNeuralNetworkFromMatrix(S,A,B) end \ No newline at end of file diff --git a/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/multiple-input-single-ouput.jl b/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/multiple-input-single-ouput.jl index 65c7a8c..6f42d6e 100644 --- a/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/multiple-input-single-ouput.jl +++ b/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/multiple-input-single-ouput.jl @@ -18,7 +18,7 @@ por lo visto en teoría M=10 funciona para todas las """ -function InitializeNodes(X_train::Matrix,Y_train::Vector, n::Int, M=10)::AbstractOneLayerNeuralNetwork +function InitializeNodes(X_train::Matrix,Y_train::Vector{Float64}, n::Int, M=10)::AbstractOneLayerNeuralNetwork (_ , entry_dimension) = size(X_train) output_dimension = 1 # inicializamos p @@ -31,14 +31,12 @@ function InitializeNodes(X_train::Matrix,Y_train::Vector, n::Int, M=10)::Abstrac my_keys = zeros(Float64, n) while tam < n && index <= n new_point = X_train[index, :] - #append!(new_point,1) if notOrtonormal(nodes, p, new_point, tam) tam += 1 ordered_vector = sum(p.*new_point) my_keys[tam] = ordered_vector nodes[tam] = new_point - y_values[tam] = Y_train[index] - + y_values[tam] = Y_train[index] end index += 1 end @@ -57,7 +55,6 @@ function InitializeNodes(X_train::Matrix,Y_train::Vector, n::Int, M=10)::Abstrac y_a = y_values[key] S[1]=M - A[1,:] = zeros(Float64, entry_dimension) B[1] = y_a for index in 2:n @@ -65,7 +62,6 @@ function InitializeNodes(X_train::Matrix,Y_train::Vector, n::Int, M=10)::Abstrac x_s = nodes[key] y_s = y_values[key] - coeff_aux = 2M / sum(p.* (x_s - x_a)) S[index] = M - coeff_aux*sum(p .* x_s) A[index,:] = coeff_aux * p diff --git a/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/single-input-single-output.jl b/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/single-input-single-output.jl index 637d109..389bd16 100644 --- a/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/single-input-single-output.jl +++ b/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/single-input-single-output.jl @@ -49,8 +49,7 @@ function InitializeNodes(X_train::Vector,Y_train::Vector, n::Int, M=10)::Abstrac y_a = y_values[ordered_index[1]] # Función afín constantemente Y_1 S[1]= M - A[1] = 0 - B[1] = y_values[1] + B[1] = y_a # Cálculo del resto de neuronas for (index,key) in collect(Iterators.zip(2:n, ordered_index[2:n])) diff --git a/Biblioteca-Redes-Neuronales/test/RUN_ALL_TEST.jl b/Biblioteca-Redes-Neuronales/test/RUN_ALL_TEST.jl index 1b8b71e..c8a779e 100644 --- a/Biblioteca-Redes-Neuronales/test/RUN_ALL_TEST.jl +++ b/Biblioteca-Redes-Neuronales/test/RUN_ALL_TEST.jl @@ -19,7 +19,7 @@ t = @elapsed include("forward_propagation.test.jl") println("done (took $t seconds).") println("Testing our initialization algorithm") -t = @elapsed include("weight-initializer-algorithm/main.test.jl") +t = @elapsed include("weight-inizializer-algorithm/main.test.jl") println("done (took $t seconds).") println("Testing metric estimation") diff --git a/Biblioteca-Redes-Neuronales/test/weight-inizializer-algorithm/main.test.jl b/Biblioteca-Redes-Neuronales/test/weight-inizializer-algorithm/main.test.jl index 5068e45..5e388d6 100644 --- a/Biblioteca-Redes-Neuronales/test/weight-inizializer-algorithm/main.test.jl +++ b/Biblioteca-Redes-Neuronales/test/weight-inizializer-algorithm/main.test.jl @@ -11,4 +11,5 @@ include("./../../src/weight-initializer-algorithm/main.jl") using .InitialNeuralNetwork include("single-input-single-output.test.jl") -include("multiple-input-single-output.test.jl") \ No newline at end of file +include("multiple-input-single-output.test.jl") +include("multiple-input-multiple-output.test.jl") \ No newline at end of file diff --git a/Biblioteca-Redes-Neuronales/test/weight-inizializer-algorithm/multiple-input-multiple-output.test.jl b/Biblioteca-Redes-Neuronales/test/weight-inizializer-algorithm/multiple-input-multiple-output.test.jl index 39748d8..d1b9d35 100644 --- a/Biblioteca-Redes-Neuronales/test/weight-inizializer-algorithm/multiple-input-multiple-output.test.jl +++ b/Biblioteca-Redes-Neuronales/test/weight-inizializer-algorithm/multiple-input-multiple-output.test.jl @@ -1,19 +1,20 @@ -@testset "Nodes initialization algorithm n=3 entry = 3 output = 2" begin + @testset "Nodes initialization algorithm n=3 entry = 3 output = 2" begin + M = 1 # Constante para la función rampa # Bien definido para tamaño n = 2 y salida de dimensión 1 - f_regression(x,y,z)=x*y-z,x - data_set_size = 2 + f_regression(x,y,z)=[x*y-z,x] + data_set_size = 6 entry_dimension = 3 output_dimension = 2 # Número de neuronas - n = 2 # Debe de ser mayor que 1 para que no de error - X_train= rand(Float64, data_set_size, entry_dimension) - Y_train = map(x->f_regression(x...), eachrow(X_train))#ones(Float64, data_set_size, output_dimension) - - h = InitializeNodes(X_train, Y_train, n, 1) + n = data_set_size # Debe de ser mayor que 1 para que no de error + X_train= rand(Float32, data_set_size, entry_dimension) + Y_train::Matrix = mapreduce(permutedims, vcat, map(x->f_regression(x...), eachrow(X_train))) + + h = InitializeNodes(X_train, Y_train, n, M) # veamos que el tamaño de la salida es la adecuada - @test size(h.W1) == (2,4) - @test size(h.W2) == (1,2) + @test size(h.W1) == (n,entry_dimension+1) + @test size(h.W2) == (output_dimension,n) # Si ha sido bien construida: # Evaluar la red neuronal en los datos con los que se construyó @@ -21,8 +22,8 @@ evaluar(x)=OneLayerNeuralNetwork.ForwardPropagation(h, ActivationFunctions.RampFunction,x) - for (x,y) in zip(eachrow(X_train),Y_train) - #@test evaluar(x) == [y] + for i in 1:n + @test evaluar(X_train[i,:]) ≈ Y_train[i,:] end end diff --git a/Experimentos/inicializacion-pesos-red-neuronal/0_experimento_sintetico.jl b/Experimentos/inicializacion-pesos-red-neuronal/0_experimento_sintetico.jl index aa2234d..c659996 100644 --- a/Experimentos/inicializacion-pesos-red-neuronal/0_experimento_sintetico.jl +++ b/Experimentos/inicializacion-pesos-red-neuronal/0_experimento_sintetico.jl @@ -9,7 +9,7 @@ config = TOML.parsefile(FICHERO_CONFIGURACION)["visualizacion-inicializacion-pes img_path = config["DIRECTORIO_IMAGENES"] Random.seed!(1) -include("../../Biblioteca-Redes-Neuronales/src/weight-inizializer-algorithm/main.jl") +include("../../Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/main.jl") include("../../Biblioteca-Redes-Neuronales/src/one_layer_neuronal_network.jl") include("../../Biblioteca-Redes-Neuronales/src/metric_estimation.jl") include("../../Biblioteca-Redes-Neuronales/src/activation_functions.jl") diff --git a/Experimentos/inicializacion-pesos-red-neuronal/1_experimento_sintetico.jl b/Experimentos/inicializacion-pesos-red-neuronal/1_experimento_sintetico.jl index 75af131..f04a0f9 100644 --- a/Experimentos/inicializacion-pesos-red-neuronal/1_experimento_sintetico.jl +++ b/Experimentos/inicializacion-pesos-red-neuronal/1_experimento_sintetico.jl @@ -9,7 +9,7 @@ config = TOML.parsefile(FICHERO_CONFIGURACION)["visualizacion-inicializacion-pes img_path = config["DIRECTORIO_IMAGENES"] Random.seed!(1) -include("../../Biblioteca-Redes-Neuronales/src/weight-inizializer-algorithm/main.jl") +include("../../Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/main.jl") include("../../Biblioteca-Redes-Neuronales/src/one_layer_neuronal_network.jl") include("../../Biblioteca-Redes-Neuronales/src/metric_estimation.jl") include("../../Biblioteca-Redes-Neuronales/src/activation_functions.jl") From 97e959a791f2c7823b854acf1336fb7034b1913b Mon Sep 17 00:00:00 2001 From: Blanca Date: Fri, 10 Jun 2022 09:26:06 +0200 Subject: [PATCH 29/76] =?UTF-8?q?A=C3=B1ade=20ejemplo=20de=20uso=20de=20la?= =?UTF-8?q?=20biblioteca=20declaraci=C3=B3n=20de=20redes=20neuronales=20#1?= =?UTF-8?q?17=20#115?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/personal-dictionary.txt | 6 + .gitignore | 1 + .../src/one_layer_neuronal_network.jl | 29 ++-- .../multiple-input-multiple-output.jl | 2 +- .../multiple-input-single-ouput.jl | 2 +- .../single-input-single-output.jl | 2 +- .../test/forward_propagation.test.jl | 14 +- .../test/one_layer_neural_network.test.jl | 27 ++-- .../1_funciones_activacion.tex | 2 +- .../3_detalles_implementacion.tex | 135 ++++++++++++++++-- Memoria/paquetes/comandos-entornos.tex | 18 ++- 11 files changed, 193 insertions(+), 45 deletions(-) diff --git a/.github/workflows/personal-dictionary.txt b/.github/workflows/personal-dictionary.txt index 282b6a9..c67b986 100644 --- a/.github/workflows/personal-dictionary.txt +++ b/.github/workflows/personal-dictionary.txt @@ -19,6 +19,7 @@ Factorizando Feedforward Fn ForwardPropagation +FromMatrixNN Funtores GN GPUs @@ -53,9 +54,11 @@ Multilayer NN Nótese Ockham +OneLayerNeuralNetwork Palett Perceptrón Pérez +RandomWeightsNN ReLU Readme Rosenblatt @@ -81,6 +84,7 @@ autobalanceado autres auxiliarDiferenciaPorDerivada backpropagation +baselinestretch bgcolor ceil cienciadedatos @@ -104,6 +108,7 @@ feedforward fg fj fjk +framesep gj gjk hiperplanos @@ -171,6 +176,7 @@ subespacios subrecubrimiento sumatoria sumatorias +sutilBackground sutilGreen tanh teo diff --git a/.gitignore b/.gitignore index 8dccbb6..803cd14 100644 --- a/.gitignore +++ b/.gitignore @@ -44,3 +44,4 @@ Notas/ Experimentos/comparativas-funciones-activacion/pruebas-linter.jl Experimentos/comparativas-funciones-activacion/boxplot.jl Experimentos/comparativas-funciones-activacion/img/boxplot-whiskers-activation-function.png +Memoria/capitulos/.ipynb_checkpoints/Ejemplo-uso-biblioteca-checkpoint.ipynb diff --git a/Biblioteca-Redes-Neuronales/src/one_layer_neuronal_network.jl b/Biblioteca-Redes-Neuronales/src/one_layer_neuronal_network.jl index ea078b7..62a1879 100644 --- a/Biblioteca-Redes-Neuronales/src/one_layer_neuronal_network.jl +++ b/Biblioteca-Redes-Neuronales/src/one_layer_neuronal_network.jl @@ -5,14 +5,13 @@ module OneLayerNeuralNetwork include("forward-propagation.jl") # Constructores -export OneLayerNeuralNetworkRandomWeights -export OneLayerNeuralNetworkFromMatrix +export RandomWeightsNN +export FromMatrixNN # Evaluación por algoritmo de ForwardPropagation export ForwardPropagation # Tipo export AbstractOneLayerNeuralNetwork - """ AbstractOneLayerNeuralNetwork The basic elements that define a one layer neural network @@ -23,17 +22,17 @@ W2: Matris s x n abstract type AbstractOneLayerNeuralNetwork end """ - OneLayerNeuralNetworkRandomWeights + RandomWeightsNN Return a random initialized Neuronal Network """ -mutable struct OneLayerNeuralNetworkRandomWeights <: AbstractOneLayerNeuralNetwork +mutable struct RandomWeightsNN <: AbstractOneLayerNeuralNetwork entry_dimesion :: Int number_of_hide_units :: Int output_dimension :: Int W1 # pesos de la entrada a la capa oculta A S (sesgo última columna) W2 # pesos de la capa oculta a la salida - function OneLayerNeuralNetworkRandomWeights(entry_dimesion, + function RandomWeightsNN(entry_dimesion, number_of_hide_units, output_dimension) @@ -51,13 +50,13 @@ mutable struct OneLayerNeuralNetworkRandomWeights <: AbstractOneLayerNeuralNetw end """ - OneLayerNeuralNetworkRandomWeights + RandomWeightsNN Return a Neuronal Network inizialized by three matrix """ -mutable struct OneLayerNeuralNetworkFromMatrix <: AbstractOneLayerNeuralNetwork +mutable struct FromMatrixNN <: AbstractOneLayerNeuralNetwork W1 :: Matrix # pesos de la entrada a la capa oculta W2 :: Matrix# pesos de la capa oculta a la salida - function OneLayerNeuralNetworkFromMatrix(S,A,B) + function FromMatrixNN(S,A,B) # Comprobación de que los tipos son correctos if !( typeof(S) <: Vector && typeof(A) <: Matrix && typeof(B) <: Matrix ) throw(ArgumentError("El tipo de los argumentos no es el correcto\n @@ -88,4 +87,16 @@ mutable struct OneLayerNeuralNetworkFromMatrix <: AbstractOneLayerNeuralNetwork return new(hcat(A,S), B) end end + +""" + Base.show(io::IO, h <:AbstractOneLayerNeuralNetwork) +Implementamos el algoritmo de visualización de nuestras matrices +""" +function Base.show(io::IO, h ::AbstractOneLayerNeuralNetwork) + display(Text("La matrix de pesos de las neuronas, W1, es:\n")) + display(h.W1) + display(Text("\nLa matrix de pesos de la salida, W2, es:\n")) + display(h.W2) +end + end # end OneLayerNeuralNetwork \ No newline at end of file diff --git a/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/multiple-input-multiple-output.jl b/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/multiple-input-multiple-output.jl index bf3dbd7..c4c53da 100644 --- a/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/multiple-input-multiple-output.jl +++ b/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/multiple-input-multiple-output.jl @@ -70,5 +70,5 @@ function InitializeNodes(X_train::Matrix,Y_train::Matrix, n::Int, M=10)::Abstrac x_a = x_s y_a = y_s end - return OneLayerNeuralNetworkFromMatrix(S,A,B) + return FromMatrixNN(S,A,B) end \ No newline at end of file diff --git a/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/multiple-input-single-ouput.jl b/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/multiple-input-single-ouput.jl index 6f42d6e..1146f32 100644 --- a/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/multiple-input-single-ouput.jl +++ b/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/multiple-input-single-ouput.jl @@ -70,5 +70,5 @@ function InitializeNodes(X_train::Matrix,Y_train::Vector{Float64}, n::Int, M=10) x_a = x_s y_a = y_s end - return OneLayerNeuralNetworkFromMatrix(S,A,B) + return FromMatrixNN(S,A,B) end \ No newline at end of file diff --git a/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/single-input-single-output.jl b/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/single-input-single-output.jl index 389bd16..3b4f04b 100644 --- a/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/single-input-single-output.jl +++ b/Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/single-input-single-output.jl @@ -64,5 +64,5 @@ function InitializeNodes(X_train::Vector,Y_train::Vector, n::Int, M=10)::Abstrac y_a = y_s end - return OneLayerNeuralNetworkFromMatrix(S,A,B) + return FromMatrixNN(S,A,B) end diff --git a/Biblioteca-Redes-Neuronales/test/forward_propagation.test.jl b/Biblioteca-Redes-Neuronales/test/forward_propagation.test.jl index 2e376d0..681a547 100644 --- a/Biblioteca-Redes-Neuronales/test/forward_propagation.test.jl +++ b/Biblioteca-Redes-Neuronales/test/forward_propagation.test.jl @@ -13,7 +13,7 @@ include("./../src/one_layer_neuronal_network.jl") entry_dimesion = 2 number_of_hide_units = 3 output_dimension = 2 - OLNN = OneLayerNeuralNetwork.OneLayerNeuralNetworkRandomWeights( + OLNN = OneLayerNeuralNetwork.RandomWeightsNN( entry_dimesion, number_of_hide_units, output_dimension @@ -30,7 +30,7 @@ end S = [0, 0] A = [1 0; 0 1] B = [1 0; 0 1] - h = OneLayerNeuralNetwork.OneLayerNeuralNetworkFromMatrix(S,A,B) + h = OneLayerNeuralNetwork.FromMatrixNN(S,A,B) vectores = [ [1,2], [0,0],[-1,4] @@ -42,7 +42,7 @@ end S = [0, 0] A = [1 0; 0 1] B = [2 0; 0 3] - h = OneLayerNeuralNetwork.OneLayerNeuralNetworkFromMatrix(S,A,B) + h = OneLayerNeuralNetwork.FromMatrixNN(S,A,B) vectores = [ [1,2], [0,0],[-1,4] @@ -54,7 +54,7 @@ end S = [1, 2] A = [1 0; 0 1] B = [1 0; 0 1] - h = OneLayerNeuralNetwork.OneLayerNeuralNetworkFromMatrix(S,A,B) + h = OneLayerNeuralNetwork.FromMatrixNN(S,A,B) vectores = [ [1,2], [0,0],[-1,4] @@ -71,7 +71,7 @@ end c = c + S c = B*c - h = OneLayerNeuralNetwork.OneLayerNeuralNetworkFromMatrix(S,A,B) + h = OneLayerNeuralNetwork.FromMatrixNN(S,A,B) @test OneLayerNeuralNetwork.ForwardPropagation(h, x->x,v) == c end @@ -80,7 +80,7 @@ end S = [0, 0] A = [1 0; 0 1] B = [1 0; 0 1] - h = OneLayerNeuralNetwork.OneLayerNeuralNetworkFromMatrix(S,A,B) + h = OneLayerNeuralNetwork.FromMatrixNN(S,A,B) vectores = [ [1,2], [0,-3] @@ -95,7 +95,7 @@ end S = [0, 0] A = [1 0; 0 1] B = [1 0; 0 1] - h = OneLayerNeuralNetwork.OneLayerNeuralNetworkFromMatrix(S,A,B) + h = OneLayerNeuralNetwork.FromMatrixNN(S,A,B) vectores = [ [-1,2], [0,-3] diff --git a/Biblioteca-Redes-Neuronales/test/one_layer_neural_network.test.jl b/Biblioteca-Redes-Neuronales/test/one_layer_neural_network.test.jl index b92c98d..fff012d 100644 --- a/Biblioteca-Redes-Neuronales/test/one_layer_neural_network.test.jl +++ b/Biblioteca-Redes-Neuronales/test/one_layer_neural_network.test.jl @@ -1,33 +1,33 @@ using Test - include("./../src/one_layer_neuronal_network.jl") -#using .OneLayerNeuralNetwork - entry_dimesion = 2 -number_of_hide_units = 3 +number_of_hidden_units = 3 output_dimension = 2 -OLNN = OneLayerNeuralNetwork.OneLayerNeuralNetworkRandomWeights( +OLNN = OneLayerNeuralNetwork.RandomWeightsNN( entry_dimesion, - number_of_hide_units, + number_of_hidden_units, output_dimension - ) +) @testset "Dimension of one layer networks random initialization" begin # Weights have correct dimensions # Notemos que OLNN ha sido creada con la iniciacilización aleatoria, - # La única hipótesis que debe de cumplir es que: + # Las única hipótesis que debe de cumplir es que: # 1. Inicialización con las dimensiones correctas - @test size(OLNN.W1)==(number_of_hide_units, 1+entry_dimesion) - @test size(OLNN.W2)==(output_dimension, number_of_hide_units) + @test size(OLNN.W1)==(number_of_hidden_units, 1+entry_dimesion) + @test size(OLNN.W2)==(output_dimension, number_of_hidden_units) + # 2. Por la aleatoriedad generada no todas las entradas debieran de ser iguales + @test OLNN.W1[1,:] != OLNN.W1[2,:] + @test OLNN.W2[1,:] != OLNN.W2[2,:] end @testset "One layer created from matrix" begin S = [1,2] #vector A = [3 4; 4 6] # matrix B = reshape([ 1 ; 1 ],1,2) # matrix 2 x 1 - h = OneLayerNeuralNetwork.OneLayerNeuralNetworkFromMatrix(S, A, B) + h = OneLayerNeuralNetwork.FromMatrixNN(S, A, B) # Comprobación de tipo correcto @test typeof(h) <: OneLayerNeuralNetwork.AbstractOneLayerNeuralNetwork # Comprobación de tamaños correctos @@ -44,10 +44,7 @@ end @test n_columns2 == r_a @test n_columns2 == c_b println("Revisión ocular:") - println( "A=", A) - println("S=", S) - println("h_w1=",h.W1) - println("B=$(B) = h_w2 = ($(h.W2))") + println(h) end diff --git a/Memoria/capitulos/5-Estudio_experimental/1_funciones_activacion.tex b/Memoria/capitulos/5-Estudio_experimental/1_funciones_activacion.tex index a7214b7..e20275b 100644 --- a/Memoria/capitulos/5-Estudio_experimental/1_funciones_activacion.tex +++ b/Memoria/capitulos/5-Estudio_experimental/1_funciones_activacion.tex @@ -717,7 +717,7 @@ \subsubsection*{Sobre el sistema de tipos de Julia} frame=lines, %framesep=2mm, % baselinestretch=1.2, - bgcolor=sutilGreen, + %bgcolor=sutilGreen, linenos ]{Julia} struct IntervaloCentral{T<:Real} <: Real diff --git a/Memoria/capitulos/5-Estudio_experimental/3_detalles_implementacion.tex b/Memoria/capitulos/5-Estudio_experimental/3_detalles_implementacion.tex index 770dad6..aa3289b 100644 --- a/Memoria/capitulos/5-Estudio_experimental/3_detalles_implementacion.tex +++ b/Memoria/capitulos/5-Estudio_experimental/3_detalles_implementacion.tex @@ -11,21 +11,133 @@ \section{Implementación} \item Implementación del algoritmo. \end{itemize} -\subsection*{Implementación de redes neuronal} +\subsection{Implementación de redes neuronal} El modelo a implementar es el presentado en el algoritmo \ref{algoritmo:estructura-de-una-red-neuronal}. En virtud del \textit{composite type} de Julia \footnotetext{ Véase la \href{https://docs.julialang.org/en/v1/manual/types/}{documentación oficial}} la forma más simple y eficiente de declarar una red neuronal es como un nuevo tipo de dato: \textit{red neuronal} cuyos atributos sean las matrices que definen el modelo. En vista a la optimización en evaluación y entrenamiento más eficiente las matrices -$A, S$ se han escrito en una sola permitiendo así una evaluación más compacta. Puede encontrar la implementación en \href{https://github.com/BlancaCC/TFG-Estudio-de-las-redes-neuronales/tree/main/Biblioteca-Redes-Neuronales/src}{nuestro repositorio}. +$A, S$ se han escrito en una sola permitiendo así una evaluación más compacta. +Puede encontrar la implementación +en \href{https://github.com/BlancaCC/TFG-Estudio-de-las-redes-neuronales/tree/main/Biblioteca-Redes-Neuronales/src}{nuestro repositorio}. +\subsubsection{Diseño de test} +Para las redes neuronales generadas de manera aleatoria se debe de satisfacer que: +\begin{itemize} + \item Las dimensiones de salida son las requeridas. + \item Las matrices no deben de tener todas sus entradas idénticas, ya que ese caso tiene probabilidad nula de ocurrir. +\end{itemize} + +Para las redes neuronales generadas a partir de +ciertas matrices: +\begin{itemize} + \item Que exista comprobación de tipos en la entrada. + \item Que se cerciore de la coherencia de las matrices. + \item La estructura se almacena correctamente. +\end{itemize} + +\subsubsection{Ejemplo de uso} + +Para construir una \textbf{red neuronal inicializada +aleatoriamente} a partir de nuestra biblioteca +podría usarse el siguiente código: + +\begin{minipage}{\textwidth}% + \begin{minted} + [ + frame=single, + framesep=10pt, + baselinestretch=1.2, + bgcolor=sutilBackground, + %linenos + ]{Julia} + # Dimensiones requeridas + entry_dimension = 2 + number_of_hidden_units = 3 + output_dimension = 2 + # Creación de la red neuronal + OneLayerNeuralNetwork.RandomWeightsNN( + entry_dimension, + number_of_hidden_units, + output_dimension + ) + \end{minted} +\end{minipage} + +Que tendrá como resultado la siguiente salida: + +\begin{minipage}{\textwidth}% + \begin{minted} + [ + frame=single, + framesep=10pt, + baselinestretch=1.2, + %bgcolor=sutilBackground, + %linenos + ]{Julia} + La matrix de pesos de las neuronas, W1, es: + 3×3 Matrix{Float64}: + 0.705454 0.305242 0.46417 + 0.0991484 0.720979 0.231972 + 0.46869 0.683745 0.981889 + + La matrix de pesos de la salida, W2, es: + 2×3 Matrix{Float64}: + 0.651893 0.227729 0.0385169 + 0.937148 0.596889 0.0810362 + \end{minted} +\end{minipage} -\subsection*{Implementación del algoritmo de \textit{Forward propagation}} +Veamos ahora la \textbf{creación de una red neuronal +a partir de matrices} + +\begin{minipage}{\textwidth}% + \begin{minted} + [ + frame=single, + framesep=10pt, + baselinestretch=1.2, + bgcolor=sutilBackground, + %linenos + ]{Julia} + S = [1,2,3] # Matriz de sesgos + A = [3 4 1; 4 6 3; 1 1 1] # Matriz de pesos entre entrada y capa oculta + B = [1 2 3; 3 2 3] # Matriz de pesos entre capa oculta y salida + OneLayerNeuralNetwork.FromMatrixNN(S, A, B) + \end{minted} +\end{minipage} + +Que tendrá como salida: + +\begin{minipage}{\textwidth}% + \begin{minted} + [ + frame=single, + framesep=10pt, + baselinestretch=1.2, + %bgcolor=sutilBackground, + %linenos + ]{Julia} + La matrix de pesos de las neuronas, W1, es: + 3×4 Matrix{Int64}: + 3 4 1 1 + 4 6 3 2 + 1 1 1 3 + + La matrix de pesos de la salida, W2, es: + 2×3 Matrix{Int64}: + 1 2 3 + 3 2 3 +\end{minted} +\end{minipage} + + +\subsection{Implementación del algoritmo de \textit{Forward propagation}} La evaluación de una red neuronal se realizará por medio de una función que recibe como parámetros un tipo de dato \textit{red neuronal}. Puede encontrar la implementación en \href{https://github.com/BlancaCC/TFG-Estudio-de-las-redes-neuronales/tree/main/Biblioteca-Redes-Neuronales/src}{nuestro repositorio}. -\subsection*{Implementación del algoritmo de inicialización de pesos} +\subsection{Implementación del algoritmo de inicialización de pesos} Se ha realizado la implementación de acorde al algoritmo descrito en \ref{algo:algoritmo-iniciar-pesos}. Para un desarrollo optimizado se han tenido en cuenta dos @@ -34,9 +146,10 @@ \subsection*{Implementación del algoritmo de inicialización de pesos} \item Adaptación de los tipos de datos y \textit{ dispatch methods} de Julia en función de las dimensiones de entrada y salida del conjunto de datos de entrenamiento. \item Estructuras de datos propias de Julia. + \item Tipo de datos de variables auxiliares. \end{itemize} -\subsubsection*{ Uso de los tipos de datos y \textit{ dispatch methods}} +\subsection{ Uso de los tipos de datos y \textit{ dispatch methods}} Las entradas y salidas de dimensión uno son codificadas como vectores en lugar de matrices, es por ello que vamos a hacer uso de la variedad de tipos que ofrece Julia y de sus \textit{dispatch methods} que ya comentamos en la sección \ref{ch06:sistema-timpos-julia} con @@ -55,7 +168,7 @@ \subsubsection*{ Uso de los tipos de datos y \textit{ dispatch methods}} es una argucia para conseguir un orden en los vectores de entrada. Como $\R$ ya es un cuerpo ordenado se puede prescindir tanto de $p$ como de toda la estructura de datos que ello conlleva. Esta cuestión guarda relación con el apartado siguiente. -\subsubsection*{ Selección de la estructuras de datos adecuada} +\subsubsection{Selección de la estructuras de datos adecuada} Como ya observamos en la sección \ref{ch07:coste-computacional-algoritmo-propio} el coste computacional recae principalmente en conseguir una ordenación del conjunto denominado como $\Lambda$ en el pseudo código \ref{algo:algoritmo-iniciar-pesos}. @@ -131,10 +244,16 @@ \subsubsection*{ Selección de la estructuras de datos adecuada} Nosotros hemos optado por usar \textit{Quick Sort} \cite{Quicksort} porque a pesar de tener ambos algoritmos la misma complejidad media $\mathcal{O}(n \log(n))$, la constante oculta de \textit{Quick Sort} es menor con \textit{arrays} y además no necesita de memoria adicional, (\textit{Merge Sort} \cite{merge-sort} tiene complejidad $\mathcal{O}(n)$ en memoria) (véase el artículo comparativo \cite{quicksort-vs-merge-sort}). \end{itemize} -\subsection{Diseño de los tests} +\subsection{Tipo de datos de variables auxiliares} + +\section{Diseño de los tests} Deberá de comprobarse que las dimensiones de salida de la red neuronal son las adecuadas con respecto a la entrada y salida de los datos. -De acorde a la propiedad del teorema \ref{teo:eficacia-funciones-activation} todos los datos con los que se construya la red neuronal deben de tener una aproximación exacta. +De acorde a la propiedad del teorema \ref{teo:eficacia-funciones-activation} +todos los datos con los que se construya la red neuronal al evaluarse deben +de tener la misma imagen. + + diff --git a/Memoria/paquetes/comandos-entornos.tex b/Memoria/paquetes/comandos-entornos.tex index 45742cd..d43a950 100644 --- a/Memoria/paquetes/comandos-entornos.tex +++ b/Memoria/paquetes/comandos-entornos.tex @@ -14,7 +14,22 @@ %%%%%%%%% Mis comandos %%%%%%%%% % Para escribir código y pseudo código \usepackage{minted} - +\usemintedstyle{friendly} +\definecolor{sutilGreen}{rgb}{0.850, 0.996, 0.807} % para el fondo del código +\definecolor{sutilBackground}{rgb}{0.9,0.9,0.9} +\newminted{code}{ + frame=single, + framesep=10pt, + baselinestretch=1.2, + bgcolor=sutilBackground, + %linenos +} +\newminted{example}{frame=single, + framesep=10pt, + baselinestretch=1.2, + %bgcolor=sutilBackground, + %linenos +} \usepackage{algorithmic} % Para la definición de redes neuronales de una sola capa \newcommand{\Hu}{\mathcal{H}(X,Y)} % Espacio de las redes neuronales @@ -90,7 +105,6 @@ % https://palett.es/6a94a8-013e3b-7eb645-31d331-26f27d \definecolor{darkRed}{rgb}{0.2,1,0.7}%{ 0.149, 0.99, 0.49}%{1,0.1,0.1} \definecolor{dark_green}{rgb}{0, 0.24, 0.23} %{0.2, 0.7, 0.2} -\definecolor{sutilGreen}{rgb}{0.850, 0.996, 0.807} % para el fondo del código \definecolor{blue}{rgb}{0.61, 0.98, 0.759} % sobreeescribimos el azul \newcommand{\smallMarginSize}{1.8cm} \newcommand{\bigMarginSize}{3cm} From 443adb75f9647feefc7464b94068e25fb27681f3 Mon Sep 17 00:00:00 2001 From: Blanca Date: Fri, 10 Jun 2022 09:32:32 +0200 Subject: [PATCH 30/76] =?UTF-8?q?Cambia=20color=20fondo=20c=C3=B3digo=20#1?= =?UTF-8?q?17?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Memoria/paquetes/comandos-entornos.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Memoria/paquetes/comandos-entornos.tex b/Memoria/paquetes/comandos-entornos.tex index d43a950..8d6029a 100644 --- a/Memoria/paquetes/comandos-entornos.tex +++ b/Memoria/paquetes/comandos-entornos.tex @@ -16,7 +16,7 @@ \usepackage{minted} \usemintedstyle{friendly} \definecolor{sutilGreen}{rgb}{0.850, 0.996, 0.807} % para el fondo del código -\definecolor{sutilBackground}{rgb}{0.9,0.9,0.9} +\definecolor{sutilBackground}{rgb}{0.933, 0.905, 0.866} \newminted{code}{ frame=single, framesep=10pt, From abaa1eca144a03f8875bdc74b7aa6ff5238d65f6 Mon Sep 17 00:00:00 2001 From: Blanca Date: Fri, 10 Jun 2022 12:33:38 +0200 Subject: [PATCH 31/76] =?UTF-8?q?Elimina=20l=C3=ADneas=20innecesarias=20#1?= =?UTF-8?q?17=20#115?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Biblioteca-Redes-Neuronales/test/forward_propagation.test.jl | 3 +-- .../0_experimento_sintetico.jl | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/Biblioteca-Redes-Neuronales/test/forward_propagation.test.jl b/Biblioteca-Redes-Neuronales/test/forward_propagation.test.jl index 681a547..614cbd5 100644 --- a/Biblioteca-Redes-Neuronales/test/forward_propagation.test.jl +++ b/Biblioteca-Redes-Neuronales/test/forward_propagation.test.jl @@ -5,8 +5,6 @@ using Test include("./../src/activation_functions.jl") include("./../src/one_layer_neuronal_network.jl") -#using .ActivationFunctions -#using .OneLayerNeuralNetwork @testset "ForwardPropagation correct types" begin ## Comprobación de tipos y dimensión @@ -50,6 +48,7 @@ end for v in vectores @test OneLayerNeuralNetwork.ForwardPropagation(h, x->x,v ) == [2*v[1], 3*v[2]] end + # Funcionamiento correcto para translaciones # Debiera de ser la red neuronal que suma el vector (1 2) S = [1, 2] A = [1 0; 0 1] diff --git a/Experimentos/inicializacion-pesos-red-neuronal/0_experimento_sintetico.jl b/Experimentos/inicializacion-pesos-red-neuronal/0_experimento_sintetico.jl index c659996..063f4c8 100644 --- a/Experimentos/inicializacion-pesos-red-neuronal/0_experimento_sintetico.jl +++ b/Experimentos/inicializacion-pesos-red-neuronal/0_experimento_sintetico.jl @@ -17,8 +17,7 @@ include("../../Biblioteca-Redes-Neuronales/src/activation_functions.jl") using .InitialNeuralNetwork using .OneLayerNeuralNetwork using .ActivationFunctions -entry_dimension = 1 -output_dimension = 1 + M = 1 K_range = 3 f_regression(x)=(x<1) ? exp(-x)-4 : log(x) From 6df9d73364cdd1a404babf202e578bd19ed73c62 Mon Sep 17 00:00:00 2001 From: Blanca Date: Fri, 10 Jun 2022 12:34:28 +0200 Subject: [PATCH 32/76] =?UTF-8?q?A=C3=B1ade=20ejemplos=20de=20uso=20de=20l?= =?UTF-8?q?a=20biblioteca=20#49=20#117=20As=C3=AD=20como=20conclsi=C3=B3n?= =?UTF-8?q?=20que=20hila=20con=20teor=C3=ADa=20de=20aproximaci=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/personal-dictionary.txt | 6 + .../3-Teoria_aproximacion/4_Conclusiones.tex | 2 +- .../3_detalles_implementacion.tex | 180 +++++++++++++++++- .../4_conclusion_intuitiva.tex | 57 ++++++ Memoria/paquetes/comandos-entornos.tex | 4 +- 5 files changed, 242 insertions(+), 7 deletions(-) diff --git a/.github/workflows/personal-dictionary.txt b/.github/workflows/personal-dictionary.txt index c67b986..e3bb06e 100644 --- a/.github/workflows/personal-dictionary.txt +++ b/.github/workflows/personal-dictionary.txt @@ -1,4 +1,6 @@ personal_ws-1.1 es 0 utf-8 +ActivationFunctions +ActivationFunctions Amat Approximators Aristóteles @@ -32,6 +34,7 @@ HardTanh Hardtanh Hardtanh Hornik +InitializeNodes IntervaloCentral Isoperimetry Iésima @@ -41,6 +44,7 @@ Jupyter LReLU LaTeX Liang +LinRange Liskov Lusin López @@ -58,6 +62,7 @@ OneLayerNeuralNetwork Palett Perceptrón Pérez +RampFunction RandomWeightsNN ReLU Readme @@ -150,6 +155,7 @@ posteriori precompilados preimágenes primeraCapa +println qB redimensionando reenfocar diff --git a/Memoria/capitulos/3-Teoria_aproximacion/4_Conclusiones.tex b/Memoria/capitulos/3-Teoria_aproximacion/4_Conclusiones.tex index bcd4e7b..067928c 100644 --- a/Memoria/capitulos/3-Teoria_aproximacion/4_Conclusiones.tex +++ b/Memoria/capitulos/3-Teoria_aproximacion/4_Conclusiones.tex @@ -2,7 +2,7 @@ % Conclusiones teoría de la aproximación %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{Conclusiones teoría de la aproximación} - +\label{ch03:conclusiones-teoria-aproximacion} Acabamos de probar en \ref{ch:TeoremaStoneWeiertrass} que cualquier función continua es aproximable uniformemente con polinomios en un compacto. Sin embargo este enfoque tiene los siguientes problemas: diff --git a/Memoria/capitulos/5-Estudio_experimental/3_detalles_implementacion.tex b/Memoria/capitulos/5-Estudio_experimental/3_detalles_implementacion.tex index aa3289b..ffaeedd 100644 --- a/Memoria/capitulos/5-Estudio_experimental/3_detalles_implementacion.tex +++ b/Memoria/capitulos/5-Estudio_experimental/3_detalles_implementacion.tex @@ -64,7 +64,7 @@ \subsubsection{Ejemplo de uso} \end{minted} \end{minipage} -Que tendrá como resultado la siguiente salida: +Que tendrá como resultado la siguiente salida red neuronal de coeficientes aleatorios: \begin{minipage}{\textwidth}% \begin{minted} @@ -137,6 +137,68 @@ \subsection{Implementación del algoritmo de \textit{Forward propagation}} medio de una función que recibe como parámetros un tipo de dato \textit{red neuronal}. Puede encontrar la implementación en \href{https://github.com/BlancaCC/TFG-Estudio-de-las-redes-neuronales/tree/main/Biblioteca-Redes-Neuronales/src}{nuestro repositorio}. +\subsubsection{Diseño de los tests} +De acorde al modelo \ref{definition:redes_neuronales_una_capa_oculta} +tomando como función de activación la identidad +(aunque no sería una función de activación como tal) +se podría construir fácilmente +redes neuronales que: +\begin{itemize} + \item Sean la función identidad. + \item Actúen como una traslación. + \item Actúen como un escalado. +\end{itemize} +Sabiendo esto es fácil predecir para cierta entrada +cual debiera de ser su salida con el algoritmo de +\textit{forward propagation}, esto nos va a permitir comprobar la correcta evaluación para: +\begin{itemize} + \item Redes neuronales con matrices $A$ y $B$ diagonales. + \item Redes neuronales con $S$ no nulo. + \item Combinaciones de tipos anteriores. +\end{itemize} +Faltaría comprobar el caso en que $A$ y $B$ no fuera diagonales, a sabiendas de que para los casos anteriores su funcionamiento es correcto, basta con comprobarlo con un ejemplo aleatorio. + +Como la evaluación es correcta falta por cerciorarse +de que se comporta como es debido con las funciones de activación definidas. + +\subsubsection{Ejemplo de uso} +\begin{minipage}{\textwidth}% + \begin{minted} + [ + frame=single, + framesep=10pt, + baselinestretch=1.2, + bgcolor=sutilBackground, + %linenos + ]{Julia} + # Variables auxiliares + # S,A,B son las matrices del ejemplo anterior + v = [1,2,2] + h = OneLayerNeuralNetwork.FromMatrixNN(S, A, B) + # Ejemplo de evaluación h(v) + # con función de activación ReLU y ForwardPropagation + OneLayerNeuralNetwork.ForwardPropagation(h, ActivationFunctions.ReLU,v ) + + \end{minted} +\end{minipage} + +El resultado de las líneas anteriores sería: + +\begin{minipage}{\textwidth}% + \begin{minted} + [ + frame=single, + framesep=10pt, + baselinestretch=1.2, + %bgcolor=sutilBackground, + %linenos + ]{Julia} + 2-element Vector{Int64}: + 86 + 114 + \end{minted} +\end{minipage} + \subsection{Implementación del algoritmo de inicialización de pesos} Se ha realizado la implementación de acorde al algoritmo descrito @@ -149,7 +211,7 @@ \subsection{Implementación del algoritmo de inicialización de pesos} \item Tipo de datos de variables auxiliares. \end{itemize} -\subsection{ Uso de los tipos de datos y \textit{ dispatch methods}} +\subsubsection{ Uso de los tipos de datos y \textit{ dispatch methods}} Las entradas y salidas de dimensión uno son codificadas como vectores en lugar de matrices, es por ello que vamos a hacer uso de la variedad de tipos que ofrece Julia y de sus \textit{dispatch methods} que ya comentamos en la sección \ref{ch06:sistema-timpos-julia} con @@ -244,16 +306,124 @@ \subsubsection{Selección de la estructuras de datos adecuada} Nosotros hemos optado por usar \textit{Quick Sort} \cite{Quicksort} porque a pesar de tener ambos algoritmos la misma complejidad media $\mathcal{O}(n \log(n))$, la constante oculta de \textit{Quick Sort} es menor con \textit{arrays} y además no necesita de memoria adicional, (\textit{Merge Sort} \cite{merge-sort} tiene complejidad $\mathcal{O}(n)$ en memoria) (véase el artículo comparativo \cite{quicksort-vs-merge-sort}). \end{itemize} -\subsection{Tipo de datos de variables auxiliares} +\subsubsection{Tipo de datos de variables auxiliares} +Se ha seleccionado cuidadosamente el tipo de las variables auxiliares. +\begin{itemize} + \item Tipo de dato de $p$: Se ha seleccionado como un vector aleatorio de \textit{Float32}, mientras que el resto de operaciones vectoriales son de \textit{Float64}, el motivo de esto es que $p$ se operará como \textit{Float64} con una precisión mayor al no tener tantas cifras decimales. + \item Para otras variables auxiliares que sabíamos que iban a ser pequeñas se ha especificado que lo iba se con tipos como \textit{Int8}. +\end{itemize} -\section{Diseño de los tests} +\subsection{Diseño de los tests} Deberá de comprobarse que las dimensiones de salida de la red neuronal son las adecuadas con respecto a la entrada y salida de los datos. De acorde a la propiedad del teorema \ref{teo:eficacia-funciones-activation} todos los datos con los que se construya la red neuronal al evaluarse deben -de tener la misma imagen. +de tener la misma imagen. + +\subsection{Ejemplo de uso} +Para crear la red neuronal bastará con llamar a la función +\begin{verbatim} + InitializeNodes(X_train, Y_train, n, M) +\end{verbatim} +con $n$ el número de neuronas y $M$ una constante elegida según los criterios ya mencionados en \ref{table:M-activation-function} y \ref{table:M-activation-function-2}. + +Veamos un ejemplo de ejecución: + +\begin{minipage}{\textwidth}% + \begin{minted} + [ + frame=single, + framesep=10pt, + baselinestretch=1.2, + bgcolor=sutilBackground, + %linenos + ]{Julia} + # Declaramos las variables que vamos a seguir + # Función ideal que queremos aproximar + f_regression(x)=(x<1) ? exp(-x)-4 : log(x) + data_set_size = 5 + n = data_set_size # Número de neuronas + # coincide con el tamaño del conjunto + #Partición homogénea del dominio [-3,3] + K_range = 3 + X_train= Vector(LinRange(-K_range, K_range, n)) + Y_train = map(f_regression, X_train) # Imágenes de la partición + + M = 1 + # USO DE LA FUNCIÓN DE INICIALIZACIÓN DE LOS PESOS + h = InitializeNodes(X_train, Y_train, n, M) + + \end{minted} +\end{minipage} + +\begin{minipage}{\textwidth}% + \begin{minted} + [ + frame=single, + framesep=10pt, + baselinestretch=1.2, + bgcolor=sutilBackground, + %linenos + ]{Julia} + # Imprimimos la red neuronal + display(Text("La red neuronal obtenida es :")) + println(h) + + # Vamos a ver cómo aproxima los resultados + # Función que dado un punto lo evalúa con ForwardPropagation + # y la función de activación Rampa + evaluate(x)=OneLayerNeuralNetwork.ForwardPropagation(h, + ActivationFunctions.RampFunction,x) + + # Mostramos gráfica comparativa + entre el resultado y la función ideal + + plot(x->evaluate([x])[1], + -K_range,K_range, + label="red neuronal n=$n") + plot!(f_regression, + label="f ideal", + title="Comparativa función ideal y red neuronal n=$n") + + \end{minted} +\end{minipage} + +El resultado ha sido el siguientes + +\begin{minipage}{\textwidth}% + \begin{minted} + [ + frame=single, + framesep=10pt, + baselinestretch=1.2, + %bgcolor=sutilBackground, + %linenos + ]{Julia} + La red neuronal obtenida es : + La matrix de pesos de las neuronas, W1, es: + 5×2 Matrix{Float64}: + 0.0 1.0 + 1.33333 3.0 + 1.33333 1.0 + 1.33333 -1.0 + 1.33333 -3.0 + + La matrix de pesos de la salida, W2, es: + 1×5 Matrix{Float64}: + 16.0855 -15.6038 -3.48169 3.40547 0.693147 + \end{minted} +\end{minipage} + +Además de la imagen \ref{img:ch07-ejemplo-5-neuronas-incializacion-pesos} + +\begin{figure}[H] + \centering + \includegraphics[width=.8\textwidth]{7-algoritmo-inicializar-pesos/f_ideal_y_rn_con_5_neuronas.png} + \caption{Ejemplo de ejecución del algoritmo de inicialización de pesos} + \label{img:ch07-ejemplo-5-neuronas-incializacion-pesos} + \end{figure} diff --git a/Memoria/capitulos/5-Estudio_experimental/4_conclusion_intuitiva.tex b/Memoria/capitulos/5-Estudio_experimental/4_conclusion_intuitiva.tex index 80da40f..aefc92b 100644 --- a/Memoria/capitulos/5-Estudio_experimental/4_conclusion_intuitiva.tex +++ b/Memoria/capitulos/5-Estudio_experimental/4_conclusion_intuitiva.tex @@ -3,3 +3,60 @@ % para poder finiquitar la memoria a tiempo %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{Utilidad del algoritmo de inicialización de pesos en problemas de teoría de la aproximación clásicos} + +El algoritmo que acabamos de implementar no solo +tiene su utilidad en el uso de inicialización de pesos +de redes neuronales, sino que resuelve problemas +de teoría de aproximación clásicos. + +Para mostrar esto habrá que remontarse a los ejemplos +del comienzo de este trabajo. +En la sección \ref{ch03:conclusiones-teoria-aproximacion} +se mostraba que había algunas funciones cuyo error +de aproximación tendía a infinito. +Gracias al teorema \ref{teo:MFNAUA} sabemos que +las redes neuronales convergen llevando el error +a cero. + +Véase cómo se aproxima ahora el ejemplo patológico +que se mostraba en la figura \ref{fig:aproximacion-lagrage}: + +\begin{figure}[H] + \centering + \begin{subfigure}[b]{0.475\textwidth} + \centering + \includegraphics[width=\textwidth]{7-algoritmo-inicializar-pesos/f_ideal_y_rn_con_3_neuronas.png} + \caption[Network2]% + {{\small Red neuronal inicializada a partir de 3 datos}} + \end{subfigure} + \hfill + \begin{subfigure}[b]{0.475\textwidth} + \centering + \includegraphics[width=\textwidth]{7-algoritmo-inicializar-pesos/f_ideal_y_rn_con_7_neuronas.png} + \caption[]% + {{\small Red neuronal inicializada a partir de 7 datos}} + \end{subfigure} + \vskip\baselineskip + \begin{subfigure}[b]{0.475\textwidth} + \centering + \includegraphics[width=\textwidth]{7-algoritmo-inicializar-pesos/f_ideal_y_rn_con_10_neuronas.png} + \caption[]% + {{\small Red neuronal inicializada a partir de 10 datos}} + \end{subfigure} + \hfill + \begin{subfigure}[b]{0.475\textwidth} + \centering + \includegraphics[width=\textwidth]{7-algoritmo-inicializar-pesos/f_ideal_y_rn_con_51_neuronas.png} + \caption[]% + {{\small Red neuronal inicializada a partir de 51 neuronas}} + \end{subfigure} + \caption{Ejemplo de aproximación de la función $f(x)$ con redes neuronales.} + \label{fig:aproximacion-red-neuronal} +\end{figure} +\begin{figure}[H] + \centering + \includegraphics[width=.5\textwidth]{7-algoritmo-inicializar-pesos/f_ideal_y_rn_con_100_neuronas.png} + \caption{Ejemplo de aproximación de la función $f(x)$ con red neuronal de 100 neuronas.} + \label{fig:aproximacion-red-neuronal-2} + \end{figure} diff --git a/Memoria/paquetes/comandos-entornos.tex b/Memoria/paquetes/comandos-entornos.tex index 8d6029a..d28fdc6 100644 --- a/Memoria/paquetes/comandos-entornos.tex +++ b/Memoria/paquetes/comandos-entornos.tex @@ -16,7 +16,9 @@ \usepackage{minted} \usemintedstyle{friendly} \definecolor{sutilGreen}{rgb}{0.850, 0.996, 0.807} % para el fondo del código -\definecolor{sutilBackground}{rgb}{0.933, 0.905, 0.866} +%\definecolor{sutilBackground}{rgb}{0.933, 0.905, 0.866} +\definecolor{sutilBackground}{rgb}{0.99, 0.95, 0.9} + \newminted{code}{ frame=single, framesep=10pt, From 7e0934eb9105243265d6f64e9e38dc5126e005bf Mon Sep 17 00:00:00 2001 From: Blanca Date: Fri, 10 Jun 2022 12:49:57 +0200 Subject: [PATCH 33/76] =?UTF-8?q?Elimino=20fichero=20basura=20que=20se=20m?= =?UTF-8?q?e=20hab=C3=ADa=20colado=20#117?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ejemplos_sinteticos_regresion.ipynb | 201 ------------------ 1 file changed, 201 deletions(-) delete mode 100644 Experimentos/inicializacion-pesos-red-neuronal/ejemplos_sinteticos_regresion.ipynb diff --git a/Experimentos/inicializacion-pesos-red-neuronal/ejemplos_sinteticos_regresion.ipynb b/Experimentos/inicializacion-pesos-red-neuronal/ejemplos_sinteticos_regresion.ipynb deleted file mode 100644 index edfb3d9..0000000 --- a/Experimentos/inicializacion-pesos-red-neuronal/ejemplos_sinteticos_regresion.ipynb +++ /dev/null @@ -1,201 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Ejemplo sintético de regresión " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Función ideal que queremos descubrir: \n" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "5×1 Matrix{Float64}:\n", - " 1.1173469733884014\n", - " 1.5670876392807782\n", - " 0.6578336266482825\n", - " 0.456540126597453\n", - " 1.5090594388897025" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "f_regression(x,y,z)=x*(y-0.5)+2z\n", - "tam_set = 1000\n", - "data_set_size = 5\n", - "entry_dimension = 3\n", - "output_dimension = 1\n", - "X_train = rand(Float64, data_set_size, entry_dimension)\n", - "# Data images\n", - "Y_train = map( x->f_regression(x...), eachrow(X_train))\n", - "Y_train = hcat(Y_train)" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "InitializeNodes" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "true" - ] - }, - "execution_count": 28, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - " \n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Set([4, 2, 3, 1])" - ] - }, - { - "data": { - "text/plain": [ - "Set{Int64} with 3 elements:\n", - " 2\n", - " 3\n", - " 1" - ] - }, - "execution_count": 35, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s = Set([2,3,4,3,1])\n", - "print(s)\n", - "pop!(s)\n", - "s" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Set{Nodes} with 3 elements:\n", - " Nodes(2, 4)\n", - " Nodes(4, 1)\n", - " Nodes(1, 2)" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "struct Nodes\n", - " v\n", - " p_dot_v\n", - "end\n", - "\n", - "function Base.:(<)(x::Nodes, y::Nodes)\n", - " x.p_dot_v < y.p_dot_v\n", - "end\n", - "\n", - "x = Nodes(4,1)\n", - "y = Nodes(1,2)\n", - "z = Nodes(2,4)\n", - "s = Set([y,z,x])" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Nodes(2, 4)\n", - "Nodes(4, 1)\n", - "Nodes(1, 2)\n" - ] - } - ], - "source": [ - "for i in s<\n", - " println(i)\n", - "end" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Julia 1.7.1", - "language": "julia", - "name": "julia-1.7" - }, - "language_info": { - "file_extension": ".jl", - "mimetype": "application/julia", - "name": "julia", - "version": "1.7.1" - }, - "orig_nbformat": 4 - }, - "nbformat": 4, - "nbformat_minor": 2 -} From cc46d033a99c89cba862ec92a6fa79046bcc87ca Mon Sep 17 00:00:00 2001 From: Blanca Date: Fri, 10 Jun 2022 18:17:17 +0200 Subject: [PATCH 34/76] =?UTF-8?q?Mido=20la=20correlaci=C3=B3n=20para=20cas?= =?UTF-8?q?o=20sint=C3=A9tico=20#117?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/metric_estimation.jl | 8 +++ .../test/metric_estimation.test.jl | 2 + .../0_experimento_sintetico.jl | 18 +++-- .../1_experimento_sintetico.jl | 50 -------------- .../1_experimento_sintetico_heterogeneo.jl | 63 ++++++++++++++++++ .../f_ideal_y_rn_con_15_neuronas.png | Bin 0 -> 25448 bytes .../f_ideal_y_rn_con_20_neuronas.png | Bin 0 -> 26112 bytes .../f_ideal_y_rn_con_3_neuronas.png | Bin 0 -> 24320 bytes .../f_ideal_y_rn_con_40_neuronas.png | Bin 0 -> 26198 bytes .../f_ideal_y_rn_con_5_neuronas.png | Bin 0 -> 25604 bytes .../f_ideal_y_rn_con_60_neuronas.png | Bin 0 -> 26203 bytes .../f_ideal_y_rn_con_7_neuronas.png | Bin 0 -> 24282 bytes .../f_ideal_y_rn_con_100_neuronas.png | Bin .../f_ideal_y_rn_con_10_neuronas.png | Bin .../f_ideal_y_rn_con_20_neuronas.png | Bin .../f_ideal_y_rn_con_2_neuronas.png | Bin .../f_ideal_y_rn_con_3_neuronas.png | Bin .../f_ideal_y_rn_con_51_neuronas.png | Bin .../f_ideal_y_rn_con_5_neuronas.png | Bin .../f_ideal_y_rn_con_72_neuronas.png | Bin .../f_ideal_y_rn_con_7_neuronas.png | Bin .../f_ideal_y_rn_con_90_neuronas.png | Bin 22 files changed, 87 insertions(+), 54 deletions(-) delete mode 100644 Experimentos/inicializacion-pesos-red-neuronal/1_experimento_sintetico.jl create mode 100644 Experimentos/inicializacion-pesos-red-neuronal/1_experimento_sintetico_heterogeneo.jl create mode 100644 Experimentos/inicializacion-pesos-red-neuronal/img/0_1_aleatorio/f_ideal_y_rn_con_15_neuronas.png create mode 100644 Experimentos/inicializacion-pesos-red-neuronal/img/0_1_aleatorio/f_ideal_y_rn_con_20_neuronas.png create mode 100644 Experimentos/inicializacion-pesos-red-neuronal/img/0_1_aleatorio/f_ideal_y_rn_con_3_neuronas.png create mode 100644 Experimentos/inicializacion-pesos-red-neuronal/img/0_1_aleatorio/f_ideal_y_rn_con_40_neuronas.png create mode 100644 Experimentos/inicializacion-pesos-red-neuronal/img/0_1_aleatorio/f_ideal_y_rn_con_5_neuronas.png create mode 100644 Experimentos/inicializacion-pesos-red-neuronal/img/0_1_aleatorio/f_ideal_y_rn_con_60_neuronas.png create mode 100644 Experimentos/inicializacion-pesos-red-neuronal/img/0_1_aleatorio/f_ideal_y_rn_con_7_neuronas.png rename Experimentos/inicializacion-pesos-red-neuronal/img/{ => 0_sintetico_homogeneo}/f_ideal_y_rn_con_100_neuronas.png (100%) rename Experimentos/inicializacion-pesos-red-neuronal/img/{ => 0_sintetico_homogeneo}/f_ideal_y_rn_con_10_neuronas.png (100%) rename Experimentos/inicializacion-pesos-red-neuronal/img/{ => 0_sintetico_homogeneo}/f_ideal_y_rn_con_20_neuronas.png (100%) rename Experimentos/inicializacion-pesos-red-neuronal/img/{ => 0_sintetico_homogeneo}/f_ideal_y_rn_con_2_neuronas.png (100%) rename Experimentos/inicializacion-pesos-red-neuronal/img/{ => 0_sintetico_homogeneo}/f_ideal_y_rn_con_3_neuronas.png (100%) rename Experimentos/inicializacion-pesos-red-neuronal/img/{ => 0_sintetico_homogeneo}/f_ideal_y_rn_con_51_neuronas.png (100%) rename Experimentos/inicializacion-pesos-red-neuronal/img/{ => 0_sintetico_homogeneo}/f_ideal_y_rn_con_5_neuronas.png (100%) rename Experimentos/inicializacion-pesos-red-neuronal/img/{ => 0_sintetico_homogeneo}/f_ideal_y_rn_con_72_neuronas.png (100%) rename Experimentos/inicializacion-pesos-red-neuronal/img/{ => 0_sintetico_homogeneo}/f_ideal_y_rn_con_7_neuronas.png (100%) rename Experimentos/inicializacion-pesos-red-neuronal/img/{ => 0_sintetico_homogeneo}/f_ideal_y_rn_con_90_neuronas.png (100%) diff --git a/Biblioteca-Redes-Neuronales/src/metric_estimation.jl b/Biblioteca-Redes-Neuronales/src/metric_estimation.jl index dfe7eb3..a3c686b 100644 --- a/Biblioteca-Redes-Neuronales/src/metric_estimation.jl +++ b/Biblioteca-Redes-Neuronales/src/metric_estimation.jl @@ -7,6 +7,14 @@ using Statistics using LinearAlgebra export Regression +""" + Regression(X::Vector,Y,f) +Para los puntos (X,Y) devuelve tupla con +1. Media del error entre Y y f(X) +2. Mediana del error +3. Desviación típica del error +4. Coeficiente de correlación +""" function Regression(X::Vector,Y,f) f_x = map(f, X) diferences = map(norm,eachrow(Y .- f_x)) diff --git a/Biblioteca-Redes-Neuronales/test/metric_estimation.test.jl b/Biblioteca-Redes-Neuronales/test/metric_estimation.test.jl index b6b861d..8802f26 100644 --- a/Biblioteca-Redes-Neuronales/test/metric_estimation.test.jl +++ b/Biblioteca-Redes-Neuronales/test/metric_estimation.test.jl @@ -8,5 +8,7 @@ include("../src/metric_estimation.jl") f(x)=x.*x X = [1,-1,-2,2] Y = map(f, X) + # Comprobamos que devuelve que para este caso en concreto son correctas: + # la media de error, mediana de error, la desviación media y el coeficiente de correlación @test Metric.Regression(X,Y,f) == (0,0,0,1) end diff --git a/Experimentos/inicializacion-pesos-red-neuronal/0_experimento_sintetico.jl b/Experimentos/inicializacion-pesos-red-neuronal/0_experimento_sintetico.jl index 063f4c8..4467cf0 100644 --- a/Experimentos/inicializacion-pesos-red-neuronal/0_experimento_sintetico.jl +++ b/Experimentos/inicializacion-pesos-red-neuronal/0_experimento_sintetico.jl @@ -1,5 +1,6 @@ ######################################################## # EXPERIMENTO SINTÉTICO DE NUESTRO algoritmo +# Visualiza para ciertos tamaños de muestra el error obtenido ######################################################## using Random using Plots @@ -13,7 +14,7 @@ include("../../Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/main include("../../Biblioteca-Redes-Neuronales/src/one_layer_neuronal_network.jl") include("../../Biblioteca-Redes-Neuronales/src/metric_estimation.jl") include("../../Biblioteca-Redes-Neuronales/src/activation_functions.jl") - +include("../../Biblioteca-Redes-Neuronales/src/metric_estimation.jl") using .InitialNeuralNetwork using .OneLayerNeuralNetwork using .ActivationFunctions @@ -25,15 +26,24 @@ for (data_set_size,n) in zip([3,4,5, 8,15,23,51,73,100, 103],[2,3,5,7,10,20,51,7 println("EXPERIMENTO SINTÉTICO") println("n=$n y tamaño conjunto $data_set_size") - # Número de neuronas + # Partición del conjunto de muestra X_train= Vector(LinRange(-K_range, K_range, n)) Y_train = map(f_regression, X_train) + # Cálculo de la red neuronal con pesos inicializados h = InitializeNodes(X_train, Y_train, n, M) + # Función de evaluación por forward propagation evaluate(x)=OneLayerNeuralNetwork.ForwardPropagation(h, ActivationFunctions.RampFunction,x) + # Visualización interval = [-K_range,K_range] file_name = "f_ideal_y_rn_con_$(n)_neuronas" - plot(x->evaluate([x])[1], -K_range,K_range, label="red neuronal n=$n") - plot!(f_regression, label="f ideal", title="Comparativa función ideal y red neuronal n=$n") + plot(x->evaluate([x])[1], + -K_range,K_range, + label="red neuronal n=$n" + ) + plot!(f_regression, + label="f ideal", + title="Comparativa función ideal y red neuronal n=$n" + ) png(img_path*file_name) end \ No newline at end of file diff --git a/Experimentos/inicializacion-pesos-red-neuronal/1_experimento_sintetico.jl b/Experimentos/inicializacion-pesos-red-neuronal/1_experimento_sintetico.jl deleted file mode 100644 index f04a0f9..0000000 --- a/Experimentos/inicializacion-pesos-red-neuronal/1_experimento_sintetico.jl +++ /dev/null @@ -1,50 +0,0 @@ -######################################################## -# EXPERIMENTO SINTÉTICO DE NUESTRO algoritmo -######################################################## -using Random -using Plots -using TOML -FICHERO_CONFIGURACION = "Experimentos/.config.toml" -config = TOML.parsefile(FICHERO_CONFIGURACION)["visualizacion-inicializacion-pesos-R"] -img_path = config["DIRECTORIO_IMAGENES"] - -Random.seed!(1) -include("../../Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/main.jl") -include("../../Biblioteca-Redes-Neuronales/src/one_layer_neuronal_network.jl") -include("../../Biblioteca-Redes-Neuronales/src/metric_estimation.jl") -include("../../Biblioteca-Redes-Neuronales/src/activation_functions.jl") - -using .InitialNeuralNetwork -using .OneLayerNeuralNetwork -using .ActivationFunctions -entry_dimension = 2 -output_dimension = 1 -M = 1 -K_range = 3 -f_regression(x,y)=x+2y -for n in [4] - - println("EXPERIMENTO SINTÉTICO") - println("n=$n ") - - linRange_values = Vector(LinRange(-K_range, K_range, n)) - my_product = linRange_values - for i in 1:entry_dimension - my_product = collect(Iterators.product(my_product..., linRange_values)) - println("\n$i\n") - display(my_product) - end - println(typeof(my_product)) - - """ - Y_train = map(f_regression, X_train) - h = InitializeNodes(X_train, Y_train, n, M) - evaluate(x)=OneLayerNeuralNetwork.ForwardPropagation(h, - ActivationFunctions.RampFunction,x) - interval = [-K_range,K_range] - file_name = "f_ideal_y_rn_con_$(n)_neuronas" - plot(x->evaluate([x])[1], -K_range,K_range, label="red neuronal n=$n") - display(plot!(f_regression, label="f ideal", title="Comparativa función ideal y red neuronal n=$n")) - #png(img_path*file_name) - """ -end \ No newline at end of file diff --git a/Experimentos/inicializacion-pesos-red-neuronal/1_experimento_sintetico_heterogeneo.jl b/Experimentos/inicializacion-pesos-red-neuronal/1_experimento_sintetico_heterogeneo.jl new file mode 100644 index 0000000..08437bd --- /dev/null +++ b/Experimentos/inicializacion-pesos-red-neuronal/1_experimento_sintetico_heterogeneo.jl @@ -0,0 +1,63 @@ +######################################################## +# EXPERIMENTO SINTÉTICO DE NUESTRO algoritmo +# Visualiza para ciertos tamaños de muestra el error obtenido +######################################################## +using Random +using Plots +using TOML +FICHERO_CONFIGURACION = "Experimentos/.config.toml" +config = TOML.parsefile(FICHERO_CONFIGURACION)["visualizacion-inicializacion-pesos-R-aleatorio"] +img_path = config["DIRECTORIO_IMAGENES"] +NOMBRE_FICHERO_RESULTADOS = config["NOMBRE_FICHERO_RESULTADOS"] +# número de particiones +numero_particiones = config["NUMERO_PARTICIONES"] + +Random.seed!(1) +include("../../Biblioteca-Redes-Neuronales/src/weight-initializer-algorithm/main.jl") +include("../../Biblioteca-Redes-Neuronales/src/one_layer_neuronal_network.jl") +include("../../Biblioteca-Redes-Neuronales/src/metric_estimation.jl") +include("../../Biblioteca-Redes-Neuronales/src/activation_functions.jl") +include("../../Biblioteca-Redes-Neuronales/src/metric_estimation.jl") + +using .InitialNeuralNetwork +using .OneLayerNeuralNetwork +using .ActivationFunctions + +M = 1 +# Conjunto de datos sobre los que se van a comparar +limite_inf = config["LIMITE_INFERIOR"] +limite_sup = config["LIMITE_SUPERIOR"] +factor = config["FACTOR"] # muestras de entrenamiento + +f_regression(x)=(x<1) ? exp(-x)-4 : log(x) +for n in [3,5,7,15,20,40,60] + data_set_size = factor*n + + println("EXPERIMENTO SINTÉTICO") + println("n=$n y tamaño conjunto $data_set_size") + # Partición del conjunto de muestra + X_train = Vector(LinRange(limite_inf, limite_sup, data_set_size)) + X_train = shuffle(X_train) + Y_train = map(f_regression, X_train) + # Cálculo de la red neuronal con pesos inicializados + h = InitializeNodes(X_train, Y_train, n, M) + # Función de evaluación por forward propagation + evaluate(x)=OneLayerNeuralNetwork.ForwardPropagation(h, + ActivationFunctions.RampFunction,x) + # Visualización + + interval = [limite_inf, limite_sup] + file_name = "f_ideal_y_rn_con_$(n)_neuronas" + plot(x->evaluate([x])[1], + limite_inf, limite_sup, + label="red neuronal n=$n" + ) + plot!(f_regression, + label="f ideal", + title="Comparativa función ideal y red neuronal n=$n, rango aleatorio" + ) + png(img_path*file_name) + + media, mediana, desv, cor = Metric.Regression(X_train, Y_train,x->evaluate([x])[1]) + println(media, mediana, desv, cor) +end \ No newline at end of file diff --git a/Experimentos/inicializacion-pesos-red-neuronal/img/0_1_aleatorio/f_ideal_y_rn_con_15_neuronas.png b/Experimentos/inicializacion-pesos-red-neuronal/img/0_1_aleatorio/f_ideal_y_rn_con_15_neuronas.png new file mode 100644 index 0000000000000000000000000000000000000000..3f85e2af4d44c8910adb465de216285aa7988d9e GIT binary patch literal 25448 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 QKx!ebYU*ngV{V834@@s9U;qFB literal 0 HcmV?d00001 diff --git a/Experimentos/inicializacion-pesos-red-neuronal/img/0_1_aleatorio/f_ideal_y_rn_con_3_neuronas.png b/Experimentos/inicializacion-pesos-red-neuronal/img/0_1_aleatorio/f_ideal_y_rn_con_3_neuronas.png new file mode 100644 index 0000000000000000000000000000000000000000..0f279bd0387aac5d791fb88fbdd46b98a25157b7 GIT binary patch literal 24320 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

    !OU+E8HQW&A_(r>=;$^-Z8K3Ve^%RcO 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 UKc3D4B^HK?f~I^K;#tW50C$1CH2?qr literal 0 HcmV?d00001 diff --git a/Experimentos/inicializacion-pesos-red-neuronal/img/f_ideal_y_rn_con_7_neuronas.png b/Experimentos/inicializacion-pesos-red-neuronal/img/f_ideal_y_rn_con_7_neuronas.png new file mode 100644 index 0000000000000000000000000000000000000000..3b2095c84cb6cd321e05c71d50d103270b9b8b95 GIT binary patch literal 27779 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 literal 0 HcmV?d00001 diff --git a/Experimentos/inicializacion-pesos-red-neuronal/img/f_ideal_y_rn_con_90_neuronas.png b/Experimentos/inicializacion-pesos-red-neuronal/img/f_ideal_y_rn_con_90_neuronas.png new file mode 100644 index 0000000000000000000000000000000000000000..e25cff66b9502fcabdaff13880158e2dae6c4204 GIT binary patch literal 25418 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 J#VY3b{{coOo)`cC literal 0 HcmV?d00001 diff --git a/Experimentos/inicializacion-pesos-red-neuronal/img_sintetico_nodos_aleatorior_R_R/plot_107.png b/Experimentos/inicializacion-pesos-red-neuronal/img_sintetico_nodos_aleatorior_R_R/plot_107.png deleted file mode 100644 index 5ea6605a62ebd39b68e2e4955cfee3d73f91937d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26100 zcmafbcRZGT`1YMjqRdES3(3k}A)D;IC3|lY8FeGsJ9~v}*|LhPWUuUGZyDLV=k59Z zKJVxK>-F@B=W^ZO>$=YGIgaBv&#NFM1*zMZB$x;U;hF#WN{!#0BcV^oHDM1cDMFBmPwFW%Bxzy9mM331a(TvrJkPpW6r%6Z^hgWeu+5 zmcOU9evy99xG5R4VL_EupzEk|L6PTM*WX0q689Oz{$bL*jom+)8|Q4gMkVrFbjRx) zvpwk`Rc~{%)^qFi%yX+sk}GiOILusr1VXNVtLcKAkT5njR>GAM;Y(*;6{N%%EA;w! zZ=^^!oI<#`u<#@QeFE3Tp9y@-aPiBP0K|;0Swdf4i}})GO?D=-^zO7?YGF zVBV8lq+8us^z~?WDOWCGXLa}y4-b!Vk;}I?*Pq3+6qWy4>`q$hO=HCm3aK=(ZMrx= zN#=9LCm=}5+{sbW*5>m$KXqLjQ6_sQLlE5Ry!i9z--LZ0_QwaRNht-ICI7Z&(!M>n z5TbeejhNrXLQd}1aE3A+9i3Tw7}?R$5r5Zcq4rzc@oIa+a*3#ji08Jpp|~$TYjJaP z!^Lf@)U5?Q|J|bEbXo2rxkyS#u(Y=qcK9t)t7rE;mOVl4?%jC)VE@2C8sxy>U}%k1 z=)sH+1(nOc^|72!^$%lWW2um6XlS3XzkggxiU*BW^A(Lk83N>IJ2xY#BJW9?Zo_>*aajkN9whB$SAVD5pH4)5PlHsGDad zS?Dzh)%O>l6Pek>KB!Zl{%xliEz)hD`-@E>B~^RtVh0kCk?DIT zC}&BAl0V^RVCZOVZJnNO^g!c49?>@c`SXYHkp?9an_Tcy^mRN@At51f26|l`PFY#m z7cXA0b8r+D7QT7=R!mg1;-WyKfI`Tt!-QSHZCy)4!|nX^sJ>p1m9->8EO21OrR?ke z+Gv`fN3#k04IJ|I+1ZS)*d&}CV`JL%+_ie%2b)tv zLqn&hUQ$x+eSJ!XhK4EZ;p9(5F^*17G}YAf>R@?@&L-TYUnkqL27P!JfQyQ{0b ztZe7t0Cr6vz-T-zv!;faYVS`g7Q0g!;~PpRXJ=<8r~3MO8(Uj-Ms-n9w5Pb|=jZ&^ z^cNCY{a;*GL|K#>WB>mB%WBy8v$uC?_ej6aZTNJ}7TipN8gDFQ_w>k_Jqp~1;94Yj zt*Pm7hS-gb9e;oSd-v|y+1V*5D9lIQWi{w9DT9;dc*zL}P#<~psNmhZcMzp(B?{Rp zQ+4iJ{aI3kgoL6QrJe_y1_lQ6O^lBoMMp(lL-Xq)Ey&L&7xqq0O7dL)_1SG>99FmF zDIMiOkjpmp#_-nd$53?QL>ekhQa8iSOEgbs@s`yJ#OgctA(D zxVXqp9Kxdi1sM?V=j9pym3jDDT>SFo%c>MaLP~sm?wRW{18n}!pR`!@FaJ_=b89dW zDJF5t4`M_nCwqY(XJ%4^bC(zj-@SYHOm=5yhsB^?OHXg|i|d--)f*(l|H{pK85tQN z-qaX}v!BIBMMoDE712;r>r`508){`JeQ#@{d+?xhVTapxTwGjSOIzFW{MqK}{uF76 zUhNL-jh{$*ZQ+nmH4=%ucH@TiXwGZ9NZIVAo|LYiKks1rzeT@YR$e}MQ;Ugcrt!4^ z4UHIeWX+c^5TR=oYsAvdk}3tm{r&x5liyCYczAe;bD8&kCUOOPWjHhDkjHM6N$x|S z&>*KhmdLJlZB5ojdue6&!yY6j-6=jXR=H53-g6&-{`gdBB7)ALWfukRz}wjn-R zspV!h#GfK2ixn*5${=-k>5zMkpzdRb2gUj{rsn_>E<* z)f-AM>c?HUp{*+W83S{D2zj~--8qitBp&HD#WN#mq^#Q8p0hO`uRe;E&DL*8ed77c zrYa{SH+QK!i6`<(FGgqA8>w(|OLJEKlt$xr?35@TyGe_|oKQE~;^N}bV*SB8Y+m-X zI2XTuX?4p^R9K3gTZ1q2FU3KL1FyB3*45V!#ohV)x7KYV@$K8UImBtbO|SOz|Gm;I z)XLZ$=1BN?o0Quk{_*xbDi4?T_I7K-(0+@Gjfv{fb4f8sFFQwGEnV?(an!1>BrSx3 zA_NCUN(}9#XNAuXuTs(CVz{mULODHT9y}V!h$U=!bZUZ((9lp3%EQCCaARZR68$0@T$)85S6@;urRub&1$+rOhrB5J@SiXv>pk ze=HMXb#?W9c_d_|vy%g1=S4Yq!W{V|2*0PekY*EKKo)*cKE@m71E2zI^-Mt_EGS63 z)@i{!?X@IPpCS^n=e$!bZ&-;=@FGI)#G*lPI%FVYR z1bT%pP}ym;#L%$G`*mB$J&cTh8xz**XqL_F!3FC>N;PJuM#mQC^B2`3dQ+dA?5zyaE2geP zUK4y1M*bxKp=ycv^1=caY`F7M4^(vt35mxEawMVub{3v(jI-PmIeDjAFkDqtB}eBx z^hw#<+xy$MZyaVnYg|@Tn7@fo+c3_X_WYe|Ut`KsV(2jYshX=`$+|vLL@K(Ro8~>h zM8%poQmCEvP(wpQ(qPSXWkBNOj+oHifPp~m#P#dfAKt<2ZWar~rb2=jYdm}T;`6VT zmbcwzQ0}dXqN+a<&?^+~4(1K7&b9!6vzxBZ(`I-4Bfht_P|KYnuBE0Xo?23A94Aey z$1*xHqTx)uR#04wee2eDHo2v1`QbME!$L!ANf<3HEtOleLMQ7S$UX>}BJF{4bH$YC zLhLhfY46uvam<4({~)-ik#vfwHqwZ30hv%2{8?~7Jke-6`2m*Qg?PiLx@0;$2nigj zAygetd77=_9}qx|+?;7L>>>eJ{05ib=e*u5h^j%7$9_5l_jt9Sq~b1%cG)$mJ=n96 z9Z7b)RYL-=gDH2649meBOI9WZhEk{#pFc--n#|+xET2H_;WE90DWRkkF&pGC-w`>E zC4Bh%YRZ(aUMmDgWpHHRN4olBy5@)o+>N&qEb-B!Jmc2N40q;-H&~laMOml_s6>~8 zSsVKdo&n6m73Jsg=La0_cppGSpqWeq{_O8>Zz~TBoTL@i)MCtn{Adzg8kNdM8G>8! zG5r&l*kNn?rg_KZnDG*Oc}2_m6S@{gwAoo$SZHWkdV9m=h-u$Y#xd&#;PQK)*0>qn zY7shKrs+--BoDVC@&qTV^dyY(bg;6@@A)Ehx-IsGlG6uL;J2x%GssS3V`KJMz2oCw z>}MJmpkm3$@Ly0)m)_;g54c6OwXnTg3{y@x8pohbU(VjT-R;P3+$oGFgpu(K_W zr{MI7&oW7_60<$`bwi-@L*$AsM=J{T8`PL|;-|QkUcG@GVLjv><`3bY^b%rKN29-V z>Nz;B4Ywy08`m4=C=Ad{b5N`bVaUNhC zMn-aSGSpj-moMR5EePZ-n-xhhL*ihYa>nP|GPU%!SLA6WnGq))S; z`0eQEn2?Y_Cg3*2SIuPDc%Nzy{M54PZc8bN@rZD!#Tt}}wUMGu?p5?_dP~!!_wUya zBls2h8&7w-Ag=+)1+*reJpcu4_hmgKV<`y?DcX_SMe3jHINbhsV*xv|ai=4zpxl#}^mp zX8_5l z(pI6USous*k(HIzemFl?f#MoKN}zIug@qv@x9sihuU=*AgKY13f3))+q$hH6@)EOz`D4@+Lt?)?;q& zf3O(;W1j0N_Q+FyPF({gA{yi>7yFLw$yL#g&d!HGZvN?u(j&w^4O=D1(cxmaY+iJ* zRS-~(y>VF`dU$r82CP2OA7YM_(;`Br2$(6w;}_S)B2tr+>j6ihucKq#WtptDpMhBG z6hDN#N{yU;eV{KkT`(9d%S05tWLJiN7A|srU~Bla;fvJBc|(LQ`-2AywvlQY8r+n4 zt6tON!teZ+h~%qO^VHxW8=My2$H$L;QqBTQ)yeS{kOA;Q61T$P+5_2a6|v&gmx2Zx zGd?jU+zMEz{rmTba5t-`o10M4_`5nwny%c{t^}$zx?-nL z9IyAx$Y{2D#(VA0pPlVlv5gn=uYIXBiuLl;7{O%~ggB|s05Q%-hoh(WTR^!P2T<|Z zxE&-FDIp=)tDGEPJr=`CE5g7Q$bW;4%tS%rP~xq>l5~nGUwAP`cakWP@}0BN)3TsR)`byAYGt!)v9=nw-?!49J^ z6C7-OJ}vn=EfJBg0LATQ8udM?y-p8512J$T66e}L56~@r{tYY)SXft2uTY}^w2hh4 zSH!mh($Z!?oS}H~>LW*-0_oV-4<9~!+AZRGnL8l0No?ZtIK`ZLoTQd##M`dl@@5GE z->a8k`*CeHVc{m3r8fur`}*}S9aCB>4kk!~#4`&EnQpak_WH^t9J$27oeu+wEKy@@ z52q-Zsu5>oWi_m_xi@x$mW{1%V&Vj)>nWrR+)-kDg?Dk^b$X=ln zxu%DTyG(;)W3@m!0q9GG-S0ou%uoW6F8kZsa6d>>@Hn750diKoXc|{kCoShezkc1r z!vpF=NV0UuMLE#9pS8M8u4cD$;x8?a-VL8ZY-``{h`l|`WI;>-f z6T_*!=q&XP_ZW0gRTUM5G@+?l=Ow^|Am8xu^2Wr)0a`i$%h%S{zCQUUficV52)})7 z+$IOG4jA9r@qSlt@5Ri;IjSlW6I)C^YzMk66-rVG@{XtH36LnCNn2!|euWfADcC;uUm9(^e0fui6xmW&b--@0-7o}$yG>mt5 z%P(!r6Evz9Xgr{&k9JRkFdp&|$$ktHF6b|1y{QU3_k_|Yh>3|QD1>dtD?mH+ZJ%rX z{@v?nAwHnJ(EiW&AYgzbz-<6bKY8+m03RQ9U8rBH!v*L=z`UwJKrIGs2gqJDy`r0g z14xqZ!otkhi0zXyd^W}_L3|#Ajnyfl3*@}d>+rjs!siagwRsGJEZqu=en7oWpnSQ{ zymklNb_;zD3OTs2i=$(|-6(u|O^V`mg=tsZ@87>cwK+aH**!X~sHlJxZ~?Z5-F`rN z^%zh9AW~2zy!VGSL74;6J%8T!+aB3%*8Ab{Tp)!vrPu?{Os=1vTMh1~hkrqX++QDa z?$4AU<9C5=wY0Rfli7 zw!sUoXIl3$&u43Yea$!@*$;u9-BCofUh6|s6s82fwY1{fxqhdLnMy+5ND%(6+R8BL> z>AY|=g~OCQ1F$P~$Y%+d9uS2Ce zxzH;SW3PUH^{e!8I7=`^DOe|3Wm<*61(ti6vQ+X=V%d{wyxJg8Pq^Nm1;2mqGOhpt zCV_oTr^X>8C;!#i@pk}>oox-^M)y=w?@N6;du<6A9I~l(^%fP9_*NT=Z3UmfR*lzL z07mXGia`&f8A`R1D$NWhcv=G96ZktVv; z=toI<{9U-D#%{rvpE>frPDv6sdxt@HBo0L%fXJZ{pYj+EX6(IGXJ1s4OtZSD7OO8g+G zq{%5MT>AAL28&!hDWB9BQGzRwq};(e*R{p9wP)xwxEOn*5+iaN{&O!K9Y0IcI=Q)x zY_US^eHh;baLj7mPg`9bdP_w^Lu%YfQw5r=?(PR=W$cmCCieD*p5cfx9iR|rOPo05 zg3{8`&)E~8lA(k|EhZL5MwC|k(cRDstY>(kOs*1?(C2 z1f&$eq+B>J7Mwg@z2XmS=}*{mD`Q&lrK7XDx|%;@s5}E<1MPNXK zM_1R|n3w~s+Io8T2?(IT{MpzbBO;Q-6^DC|?kqgxQw2T7)wQxm0fHztC8c}TVUJ$w zHT1;56|znElyY;fnXw`6@_m^McM>L9v-za@`=;LiH4Er z`)CtIM$hZGZrM}^e6H9SDGb_%8VJ&aT@M#`%Fd1x@tZLO^Pi=Bd0aTdZ)1clu4*dX z@(${EcHfpAR z4yy&CA<{p{X0HzAsk*pu4*MZ6Lr8gwS8~vJR?LwYR0`Es)JxJB#B0@Vz}c^wfHY6n|* zHIe`g>F=*hCQZg-*eI9P-`vtdYN#$L86cWLX;?mHV{UHVjS55)_5=usxzPb>W;(pG z@f-0e)9U-Hj|WH7R-yTyP6chVk7|ta!gvN>Tu=;wA*dACs#Rs;x95~dSk!%UG6?tm z1M-nu|2qp18VWht3hH1=iaw~SmrG|^-l0OW{rocX(s2(je-1YCLW(8c+|<-^(fbht zgA(I~VIX>?PD)ae?#WAsSlQU5q=H>Zq>{37q#g?oTNDV-0|P2Mu7F@YJZ`6K?C$L3 z7Zg;+1M^*+pC{(kOF3mab{zQw81UicmkE(LMy1^pP_IEycev}L=!Tu}sYKV)9ZY4O zy6WJ=&LI$@7!u;*Oga^x0Et2$BTAYU>c`&B4hhIL#FYHI3?_X%??8ynj;&%J&J!@-tw*t2t>5Q6HR?3?QqK)(yVZf%}+c_&R$-pSyJIOdUiTG z<8Q8G*-h5WuB{~{C4m+<3B=9behVa8klo}{1^Gbd0PZtAJ$=kIQ{za(!qPJ~c2u|3 zs9SE<4cfdob^m;4v|5n_m7=NT$ z45B8LSb!H$XDD@I7*oIwHmB;K9Sz%-%4IzQtKo@0(kMIxgoGywdkY+al+Wp-2<6KO zolG#%pFc>^S(tpd7}hk5tagElgp$i1^1(nzNz*wAl{oHq(B=p+C6tx>pT+R8VkgHlcK0%B4$qi<*gcpW5%<@#qQck?)n z7-D6CoNGsd91C zPoWdG8;6uz?t~_slxK4;Tv$O`npp6q19L$->V_ewE-Q7;`227lTxr%&YlpOY0m5Ai z^o@CJe)-N_EG#xRH-kvg+$;(~itGdEX~SsNNEudIxBbPV|Q z*q#=nd169@v=Cb7S6Cn_X?H?W+Hv(sQsG1{}#2tEidltryU}DE; zXTB49MkoagdZuYlJk6d{qYMiI3VecyNz2#h7yR#y+ayC!Izegn+3n_mdIbXs06sev9u*6ONNkT^aeq3e8yuE2!n%a>|uYBp0}hDS%;C#r0jhzhPycmV{pKN$ru z4Nw4jq&&5H=UuE#0NFL!&&;mPz!G%ws7{E?tqd4mDIG2^ELzhQa`GdT( zLpD5+??NJ|+aRWOjB=6y#I^=K3Fd)>Eje`@9N0V*tBl*j0H2WyzGUO%bOCAVI2P)R zr5!aH8QEPHJ?Tav$3Nfgo6g*h_bg*&32|}zpr?fFgN;v+TLirq@Gmen?;Y}<;bClb6_x$gl zR`}t#I=uVVpq;6m72NGFpy}Wfq=vDFf1a9JMs|P4fg;%=ovnf$Xly0?$L5$8KWOps zRkr&!JV+%Qn{|j)01Z!FDSgrA+Cq~!EeC*=!z@@FXP6Rc^+Csb`s$e0FNzjWfqh?D z<^|!J>pD;0W2*gk_p;zvjOkc`&9x86RLKvj%jCpSrM^pDU%vrrDzMTgFSkWJQH^Q? z4UHVtLvV`u4+pRKJa#^sao_8^qvJsRy%x<)T6krj0EH$>^^9y_Xl7>?# zIWYe=^bn~09DwN&cS4v63FtLPCrQ6fFN%zCopCIyi&s;b>S944EXY9)0NFALCbFO{ z`ELiR5-%TLWC;ufy?XWK{LU}gZ1yKl^vyBX2L=X!hNSqX%T%t5OJl4ToqEa`D=Gtc z`HIi1SF_y~N^0o!R|05!&pM-*kT3@a0Tt+DL$Elg9uW}{YojIBnBe}SgM-cho{DrT z#~VC(Y8~L`jEoFWUtHYXOB@TYTVOIf-Ou1&^Pa=v_W637^sVlSf-M5U=BZvnpgu6L zsC~Cwo<8~HVo~}8>@+wym@A(osqkDs3u+IGUX25E6IAjlfZfkKe1&Z7^SAXb@FS?x zp!7X``V^|?!S?nqP+hXJXi%h&iiih`oyk48aCfIZJ>EzjOjdz_jhYp}aIBq#c2}gT6GV3vXm-#Xr40t1Z?eI2w53H1 zRJLEGRM44$(jNN*I8*eX$y>VNKhVj1clU9|^9gpltw>_kEqa)=Gz;Z%z#OI;3P^6z zan^(pw~o8ewQ;Hy1YUZ|!OlJ~I;u$*4Q<)Rlg&El9m8Y+@Y#aD@veUT31ZYA`D!^{ z^FQ0tE5#-iL&4i^3Qtc@UEK+oCW4MCGGcL*mfv;N1+qE-80%gIpcPVC{X%DZsz@bo z@5XaQeqXwQGJ!6OZE8B%i*r@xKyM8MVzA6<;fHp)*%{axK3ex`pRv~AN6bU3O6ZAo zqN*VzI?#MoRaL>{`g(e&Q|>cl!ror++ijQ9u@5a|@T{Aw^6m$*Q*}Q#_(D)smdFGG z6V(tjYy{1IC-*RpMSpd3(;I3fBx88E2z{9qmsb#Os5}BkVJ;94Z+3O{hY34M9D+>* z^lCp|@sNcjEE&xcy7v)xl425QMUlAnziInZU6b9>jgUuP3<%$#;E<3)$0N|nK6*Sc zYQEOp+kWHv^+?tZ3X?vM_@<_&9QTk#37}S?#B6=$bn;mkQ~^@DU!pxd?#qb-F-j-@ zNsmX3EW9BX_5IXOjWPc!gm&Kxm_{_I+7#d3Fu}=0aS((^u#rX(F4cF6$5LMBJg%;U z|Hb>gkT?t=)-PWCfdEL_rQh0rEI7`t;~Fvj>ELt|AShF`BmOL;AW#rd=7eblnCu|U z?m?f!NqSg&94||k!wtw9!TbhKlH_AVxQWuzzHi^2awL%ZzkHj!_nAeBVl5-M5Dlz zeGD=bOd!l?)PO1vgLY}IgBE~aLvchXdI%jnvF{oRS_qhGs}A8HEWDYBf|COW9q@y` zL!Uh8&tqd?g&`3b&tzp`(BK049XveM0L0}J*cU*WxrLt9)(mhTGTbF!>88b!40I(^ zJ35Oho2ReoE7%;^r;qMbV~qWWto@2RZ*rR6_&=QVaqdQ&S^3R3pBh5&@H0S!fGRaL zIf*L@6*@t{-413qp*?ENw7#^2l2+SFh7cpad}U%a!^e9KNAFY`6SvJeP~vg>O6XgX z;QbGUC90eX>9gkK<*liy`QW7w`B{ze$jf`Kz*bOU8COEtPTdLZa?jcHC8d#&RXqXq zL!tor^$Bn!!0%sbYB(Fm+gdP4>^t@bRO@iF#Yn-KKCsi!ijs%BLp^~a00>ZsfngbB z)6kMZtzYL2kNFz}XZinIS-I_~l^Q|>y1@6c8EIPB&P(|oG})J}PF~GQ(6E0Fev02xvb;k|1QfM7lm=Nku2BR=Wn*yf1j<;lD({BX=;BD;{=7@{zpY| zv1F0FN!C;DA%~~-|DA}`Qn~~g;rTt%#R{I1|6Ru4^nqwd&+prbI&Nk-a$nG)TAFC1 z!slj?QddD2g+cZu-KG2X2cN3h@#(y$X|8(#Argpq%O_N7%S0t_VH3%P z@{{2e*8i@}#q0WxN_QpAG1^#Io_tZ)SAU8s zCWyrQw9O=?<2N{7pFUIE_)m+F$Hq76hO4MOpjQ*}`A@V+B%*CjG`bbnjl_8t=2gNN z|KCm0T?^VS`XHoV_+^jj$zQDhQln@DhII=CcOCzkMC+W^e|c4n5^n_En9VkqiTP}e zKKmmQm6i~kH>HuT&nv8Yv4a?%e2M+f9H?V+w^NH5elUkO$zGZ*1P9+}ij8E-?MK-F zK@-EX;7?)K;gKSrQgdQV6>(KBZAa1QM(D_2K2pd{{EUp3SLyP8JSg*wzs%vjkKs&W zgoI&N+yWi`I5N^o`J+qBKE(gi%U0JNQ+m|0N5n&nr5O1%qP+G(;yU+v!dFG{eb zk^4v^ZdD;XL;gbi1r;*XdlWRj;#&5c0#x>2X~)tgB4i~luT6r5ZzSg68Txhk7D^7e zEGb$M7^K%)ennEm%`_+-QKw#Bn-i0^8NIm{E$LxbFpeFv{|?li%zhF>30K#BNa-ML zL#rKT&tdGC#LztWtIc31zfFb31$y9v86zZK6)kE<&5;7l09T5&K2r+`or9uq75$c0 zxtaXjn$5$)6A65;iL$}E|BBevd$U4xpj?0iKfeYonlNBwz$0wDDw(eajL99>{H{Cb zdgAr#>8zU6Rq*lYkkgP-s3-tcYFra}C*NE1oa_z|2+SYdyJTu`!ao!1?cd*Ed;mK3 z&|~9XlXY|Z7jT=jV-)7@I-?%6VWuZ^E;!Zdg&7fxV(@)&z9CPrp>Kb3?oRwx!qtK< zbka^us(Fz-yW7SJ6QPn>XU>_$*&&}bs=Uu$MM_sds|`9}sX$b0A89b$0gyj$ zO%$AM_1Sm;z`tzvfR~(^^u=n0`5)tnLi*RDw$JIp{@+zCC%P?yK(fK58p@KwArC(Q z#Q;XmhqZnJT!qBkrt{E$-ia@|bExMaB#46ObUTvz9FyJ!!{0BV2KX6Ww2bQ=W}N@4 zc7k2lcz87P)W*lhNvg+*u4Hknn-#MNT4fr)}S zcuB>@#RX+=yzc2%vp<2E4Qt6lV`0uO)dEolw?oyITt#XbO(D3-bI zME6nVd@n`8VAN%Virj_;_`X_0Lu1oprU#y9!1RieQ)93gb4udw1hhR9i&^b@}JD zlz1wgjOjep2cI&@(h3+qURsO@6Q8OT(#PZ1XA*Ty8jt2LkH$eM*uR!__qWYjR7=wT z6kTK^uBlF@sVj6iO3fzw_0z)3lXl=Rl&}X2)N0j9n zWQr?6eeiC0B@G2h%3XzI>-`9L3Frc^M?m5_8iL4joR;PTpQGhx5S z22!3lR#AMbZttg72+A21Jo_HG~IgF>Qt1(u#P({q^?NBbywo&>VlG`lqUnEKLq4PA49QgZd45 z*cgbuvOLDFSW}7j_3KU^{wjKfckULLm@-->sOV)z#pRp45bwjVCQa@_S*VM?(Dr63 z^Herr4`D=?BQ_3=9Dn&T$BM(5O=*num(Ny@G(S-gW*t)RS6KfbdlHnfX%>lv_vhbz zg>4%wpYtKRHrbqT;o(_$>n|~1G@t2_hRpleZ0hWf;@TP?@#7h~#OFiFnjJ)c`~DiS z5}v@55H*#_D63G?)=Ot1c-TrE(nfh$ zW%7dNW!1Ibu+5Rg-xCCaq;Kr)inWYFU+!Ob?Y}h%E3^Ge06)*hGJe{Nl$)yV2a{H_ZL6 z)RFeuziTttD*CShG1FEq8jZNbD1F4P;E7Itim^@>=S4r>AX%|w4LHPsC~5T_0^zFq z{#i`6KR6lOcjo*IQd1>8DhOBtl>_B^GKSyPmP)Sv&jLns(!Y3rGhq)aC*cGuATctG z$bXH=?aF|x3t*vXJE@GI>5k3OSG#{pF7!C4D5ONCajSDv3IfoMp!R#d zGs7_6mFL?$< zPR$0v!ybekWA9g$LP7^Ch4q&oj@K3Qb0i3xpzCR(_1%G-BB30X$tI=zp@`w9@|^{S z_fA8YeBB1p<*qqne1pkPw7jP<1n3isIA{e2O;&;;0z<95a0%cNhpwhGr4Ob#?GM(*qJuWtT&A=EQbdbMS_ zCpGhlbpc1zb(+NwLm|}&&PS+cqwkf8U&?;uG`Qe#?|rk)8+*mOuLhC@wKmXdjk1=* zHi-w<`LTVg;i~oSTLvH>cZ@>ANkK;DAtR%cgM)=vcehy#y*HN>*}k~;oKIS8dI{QJ zj}0BKiHB3IU4Q3_T5n`xUS_7;zK>U#kohWfy$Z2QIbF^J^L%+blRUibiJOz}S!`N& z*38JrWt^P??U>?zVg#{4w+n`==B>dYtC5Xxyq7hyFTzp3i^!EG8;Zsrf6Zt8?Y&=Wwe#z; zE~uNLjeG9_-j~{17`~4x0X>uL76GQe{iB~tyD;Z9a~R8A?l`?X=joJ(zjSs|pu`(C z$2%>G;@VTSH(FW?4y!-qn;+QHy_VayNi=Vmce74)O&|b5@YaY}{&_gTws^faldTU& zvlQrx>v^iV(5c21y@7q7n9~9`(AX~e_uu7D)g0c7q4}Gc%r^jA|8431$(@49-Jtn* zo*PO`-!(Nx6B&A!J~qi3nsva~FJHbC5fK5$gl&SCJ%1hY%PW24apRPKl3kmY$Mrb5 zbn|ZK-inIXZy&;-YMZu(8&4MCCG|FpQCZ@EGZ?{x@xG(=@?LmdZ5Uc*ZKIZNBwzjE zaZ)#3JQPWp?H{o`>a8K<5w?1&E=!H7aU$jH<9Do~W8RkkgHwA@`2()-z9iRF`z>7^ zHW+v^GcrAi0K^F`?CFRVVxyJ8tt-yy8e%;6l;}AGb9qvv?bj{xwV%)peY2uiuW+fO z7S7r}2`9X+4b(woE}eBl(_L9adt`~vgyx#Sdr^+?}#$!yW^INXK+xM`bH+4g) zvE`-0#3^9je(<=S;O_s<0$j9j+h~@qH0%V9e!{*1P!S02@x4XAnNH2%pI=<}gn7S_ z3U=G|#6w3d*!x^fIY!J?1Thp(^0rD@=`JwpmYj?$c85VO!8MRK1t<7kmxT^zSOWkG zVkK7t;4F2`_uF%kCv1py>V2XWe=?3WxYe&W?b4JLy1b*78au;vlwy-bU{S<#&IpV( z+fO&n)1~#bEFCwPug&z>jaYsATvqj(zbvyMghCcpv+eh!sf~FGLjqK&(=`aeL&zQ?V#cB^HynDZ1X6%P#tdu-A%G8jK=rKn=pZd2UCF$_H5!E9q<5@@K~ z&Q(V-7pS-RRBRX^GQ9Y0@!^KIAQ}GbMa$l82fcqZ6HS`^VZ*I~+>EWQU}h-!zT&?e z=IVc*Y9^4N(^w?;QS}rY^sOV0l(ByFtY6Nu+$mME`tag5F<7wWwnJ-be15s9gR0im z5X)9l&SA?j#e7W5^JBh&HTp{Paq& zFV(daQ;`%4wHtk9`_A8T^i`W8^Pki@ln(n1XFMtp8y$!bFPLL_#zOW7iM{ZTJgB@V zFAVDgj|J&<*S7-Ak{NRrG4$tmE5b-Z9R60Nl>Id7G*hpowLeQ9m=k{V4D%B<<_A_{ zp)0q5$b6=5_BO(IQtvjva}negNb4i8IH zC(-Fqj_-GI@_%Hj1ztz6nMYuRnmN0_a4%zQ#2}Fl^t!ku}W0n75-aR#^-1%#u-?;V+z`f6+4>Awka1=fBuM(LRD6~ zaa{+$QYZ8qhp5tBVkLXIEI~(mYa5q}9oeu~o(xX|yKWhS@&L@E*2wtBmOjg|2jNuF zZPpiPEd^JH9sP)|*xh_O^;^x>B*pggjVufMkE=%UclzAh-T^Y5Fpt?a_tf4Hdyiws zba+lPR^-f>@L{zE`X}VHqI2b@na)=&MY*}@B$aO$eU$X?zXy6~vgX#}ewtG34z2x0 zAt(y5!u9B9&#oYDqswQ>zxmp?IsHAR;KxnPnD%2l&YEd9miy*MuJA{*tKd=eW+(ag z81ktfHg~_@Txqwt8-iD=`PSzfujq3GuPG-Xn%Irzcm4hEwRvJrPH=hehsYzcI0{ca zwT})|VxKXRx4t(Hdx&jcwK@<@HW|J$e5J=16_M9yo9V>c`#*bEP{rRVn2VV~;;IE2 z_c&B>f#yW-@~*5VU2s;XGm_a#f=hrhWbid*_qW*9WdwrmHonndS!PBPwZ&6-5*>ed2pI5Do6_#d}T{+&Ee z%r@8!$)6=Qf;u&0eQ>hz9JILUZyCQjdE9UYqK4W7;g}~iDsHdtX1UTUNM9=$6zD5z zI|VNQL*a2oE1vx&^~kTh`J)7F)`;pl8~>MD6ePy1$N4rfUg z!E}$d*-Z3YNA>qj3B!yp;kXKQF-HfHM#!>?(m#KT1_tZY2iOaGGLnnWR_ts)g<%tu zRfN9z@|4;}NI}EGp5nzgmuWL`B3bmR1rs@y!|#9hAjo7>Q*_8L-20159I(U5?$`k( z1Vr!Za;dSGYC}3}^Dx?d5!+6a?l+{?r{8c?JbgOroUel4HCIAp2M@`SV0%?-;|&O8 z4v$!due=F(D^u-91+rANz34l4g-33UO5N5svL4Fa40t@@Vpg>hf~)e*slb3PMz~(X z$pougp=0m%^UB-LD>kpCSR>e;IXvg#q4UGue{h_vzUR_5j`dq-_)h;ivOLh8;SZtlclmRa8OA<71Z^j{(wmUrJ`@q}n*YP~(v358*O)*A#8XI`E0NJ1`miB?hv5$0 z#HTWyK4@8B96Ct;bIg_)O*q`|d)#LwpssG73w?uk#$i7=qE^To``j=^g0BWe$WpjB z2Nw)M0_nMpJZX-**?wUyz#Om9@Jj7yC&Ok2y)rX#j5}hO+joTk;hc>2{151BHu`Me za`L{Us@&g@s-MF+z-1=xS=4b|u^fgDjI?r$?h$+ApTFG$P2O!<8n=4gP=CU!ZdG#= zUu}y(d#(d07yu~@*`30h;n^zp?%%&pNC*hHpiR@7PiVjW>Ut?eaOKl$A$e>#oSsyp z-o(}IY{-Z*IojS=>aoX#>p#go6d1eP{5CgR9CnRfo;<~}idN0T#csdz=`9{URf<9y zk9{iinpN^p|0)g*4b9d})6Ah2^N;85>uqe~%N7e&=8OT;MqN1>MO(P%ZVqiWkr<6+ z->Qv|T%|CmVpR+x)Ke1GV&iD*oDH;f#0g$Ko}7R!B%UU-bn8*Of#v&vU6dOBkq{cm z5K6M+$jP)Ndq*cl5ai2gtn#&=O~NG`xDdH<)gvy6%=Y8Nmf!q7t_APrIyN=SDr z(%qedG!i0>(hUv>64Kz%As`JBBHi8H9e4BH`{Vn4S*){W4V-=UocGL*v)|`AAcuTq zd$dT4gpd%Vj}&VovXTnH>ae5P@n4$$0!3`UcfSw27#f>=Jd@C(s5`kceSnSpRanYR4krV&Ck~l21V-!QzV2>v{sEy`XF~ z*m}hK6ht+SZIv!#d`n0nhl_yHq&=_UxQnSI!6I1xI7tS0fHnRi$Sr|NfJ}BW5g$(g z4`=)>Llpl0{Ttk{5A=yNAx)kRAol}+fy*ANo#e>=och3ySa#Kl)xB+1y|mwE|Cjyf zsjGO7j$8(Ni(K0MNFff%yDOEBQ8Nq`%9e_3es2&;5DjiC-1=-mSFC?3Uq zfY`XV`U%WZ=V-D#Oz?kUeVBtE$?_3?0Nu9G*YsEYlkq-S@-Al&OIluK>M3@Fq`x75 zArI!F<-@5;8vqQ{0jfn-R+fq?qf-m>qy&?Z(MUtdCUE-#mFJ zG+4l77scABe9M3o2DvM16vT}#>^pvP=RL2cXj`VBaTd%bA@Qjbn%Il~B*)|zEibaK z#YT%=xI#_8n-_W7*j}}smCSmoELGW*{(7NrLn>uP(~Gl{%n5sp@`-X3B69*{^hs(x z4O{ubt+e9-s+KS@RsW#0w8H)M#lwO$mT;=XbN+d+`jnBj@3dj1;WZ;2dRtym zR0(Vh|C?5ZX|Il2qtD7AAe)8rg2@4_ZoABk(5J;zw(FI4*{?=1qx$clgX0TTP9W z$mHa;b~jhgW+JHEJjtWYeqKwWEt}-meR!?Z#zInlAGxIK?JACTon`{&DY4KPpJL5X z1oCwWl^!iE+tM@D@Uc3)aFz|9nHzGs$sC%?LYb-^9-j6{5K2V_$kGRfn!gJ@=0CVg z?$EVD2!mQ$3e^36Tuh9-Is3zP>i9fM4Kj`g>ZXZC6mk7WMI%=5@45R^B0syoJ@1J8 zitsm-1^#luVrE2o;%VxB#R*C}TgkDPt@MC*zF7`$P(6wv4Ny-0sME3DTqLAEP;&94 z6|y`;)DSI|BO{@Z`F7J@qkf9WPjBZ0k74k~g&vU~T$u=b*fh#Lxn%v#nZ+c1k)FLI zeZ##2IUK%vSSC%HteZ_%Xn&t22bGH74Ua2^N#%m3V9it{zjU%FgQ>7WrUClZXemx^ zktDi%r_#s5pd0WOwtL|sbq#;rFdctm+-%1)SkK~OH3#K{!OUKLl3NKWS#XOubZhi) z-ofO4cTuMcnkI8ge%BkDkO(13nYqLaO$~+>tpM@^!dXf*;&Uwr}~;*ifYkki7}{YijXF7r4 zOqVpp0oR^XSkBO$VU|pQEz=G*{wW(@;zbqwQy}dHtY;l9q)$v&qCfwZmTf)Cbu70PG7>aP;Tw~HZs~mve8Ift z*Zl5M^c7;23@L(JTG<=7N>*AnVai(yY_dn@=)i_DcOW0qp8rb0!08_m-9WbuZSrUS z$Q7>m;ck6K=day1Ir^-u9B7a#X!5AIMa^X7P(|v3b zU~B9Ib#GU=xspH2>^itWgX-70hsa%Wp1@aR)q}W3Ob{F;KJT}&D&ko1G|CD5ij znlup&Jr@WgSX7wm^Io~^6Ye#h`0+OkIPNZ}x$wI2H=CA6xrmjN1aT;1Al#?e;xZU7 zsPwh4hujC_yrUN6$8k_3)JzNkV(7JQ$DAhO{MYLxl2w?yB5K16#oNuds&#Pr0w;X1 zH+f#{M@?o2A=dl7oU0OYnQb`~Bx{<&!F7YB6r&wS0`I@!j~!@x|G;{T`K~8wU<-+c zV}b~LEEXJDTXSkW8c008)yWdK%^~mV9@m5iDz#hH*`P}E>phaL$DjlXOl37G!pTWb zzM_+Ip7_fbPvu`$^GiWmSGalN`+LpaJyXBCBrZ;SG?)uZ)vcFSV(GnUB>4G3~5f7fvLY@@QEq8C1Q*3YNrJ8tvyz!QqiN2u1s3C`BYN zPxqD1wNx){|HltV)mhjYq{=mX3}zbvkycI$Ue)gA-EewVNV1Pe!qw$66>mFrb7_qM)zkzi+$GET|`X*EAGnJnZ@oUEh5((zFw^*(ZkqUB@ zoAG?Xp@zh#`49IFqg5HMd5YP?pnkVaHv>MBiMTqDgIt0~i1oAyU!@)X=L11fvFSvD z?Cos6?4`Ay(`bzqscZr^+XiRcBU`(X$n{+Ho3nNwx7XQ$z2ADyxk z&2>N!89gVAlFO6x$dBy9n#@C}gA^NI8x-DT-(xSW0(+%#$0 z+bZW-Ay}vyys`9Nr6$*r%1EhVe4KvI92z^;A4lw%=-9I|NnBF&i1ej+0)l;x^7be! zHhxx)oq*MCurb$X7t2h*@m})?DK>Ly;_71ITaXC#J0yt$YF-Bw)wB-<$K6ip|9;BD+xCab!+<11{$*KFF;k zRH9jdVrNn>hiE#{I-vLPkxZ3wS{h?X_$L)CameF3KMJaC)98I!{D7!ni&hq8QltPV z{zdcX5InD=nh`4|z%Y2ZHAKT`P!xrReu4L&BP@Pz{=5FKD+)1L+9Qpb9*8Ow?9uQd z)VCr?xR&5?PNt$sYViaU`c)`(koaXNJZD(^@Lp-b7Gsd=1Y%+gksu|kkZOj%xScgz zJw{^06u0`Rjfx7+a!cX+iVUz)UBl`GBCJJQ{?inJb%HAn(OUE-@U$emZR<*5LlOSm zZ7vxNeJH)?cbH-0=s{W6$T*h{QPDq7E{CG_?bbAED3F`;&i^cBy3t%l9WwgnU5o}kMrQB z!!b#~FhgKHlsjHJ(|>o)y}9#pdCBx{f!$(2@MwUzohCwH1F!WrG>B83`0=c06qTOo zh0+tFITxQ3j{+5Lx;~^!x6!CBBj0yL^qrXbjAME5R;3iuZ8soL>s%bsj@zA zTgJa^swb5X+38b~NvlAdv*Qet~MwLKD!^6jidn-(H8R1cJ2*W_t2wev2 zM>9g3M$rYM=C~4@q^HH5a8aJ!bb%{;|qo80z zNy#oqPnv1=y9dkz$oB7W1oZ-PjhCdQHxCva;AgYgH*1&$Onj#uyMf-~duoM4tA#y|D8bx-J1r{JTui8&~C zxu`@zAcrd_XXR*_G5&K{d3pI7;J1O9ht>+N0bpt8izCm6BlFvk`3_Pu zUO2Y6CpHC67g2Pw;6`A>2D#qK>~3e(s~m*3$g#$)FDyoEVvC#g;-pkl!PhhpqZL?C z!F2Qd+}^^%!l)Y9O*J$ec&884(U=*#6sXv_e|hPrUsm6wAKvUgU;cwZ%3{xrfsWng z)8~6WtEHxP4CeDdYyvQ^QNX|b`TLjZYFff}DT0z^9gXBEj>k|=&C0ox$8%D$nLu=W zvJmPMPa(Z(`w#2s9>9|WJS&%DdXCs2mL03QlkghFdsl*c`0gJMch>ZYMAT9ZDMr># zB4e?(im!#`<<21MyX{C5$(NYqxbDNv;jO|Y{O~y}K{Ik)hK)J6h%lB5RBquHa`x9= zDUP?v?lU$MBbiG29QTWrg>KTBuO_Ss@g<-EI0+4t)5q8x?~=a>71q~p#xu{!#=hitYIW&Y%?c+AinybpAByaF83Vq}C+)vC8;EWuRLv5jZ?j~2 zF3&Fl1rz%t<)k)9yntea^;Bp>LkDVFKFcaz7Fygu$e8S!YbxfyUzN zH3-ck6q*g~rbuCd*!}w6gG1pE7Ao&E0-p15sR%ke|FAGx4A8)eK_y<+3gNlLgo#N> zExrzsdDx9Uu}P{}$GrAm@7|V*B?0$;$AV@iytUG1%m@0IX~YT zZP2xUBP$@0B(Hv4)wVPch z)I(?0+LMTnpH9|#%N?~nIgNpmL2|xuxu0!Ff!~h;Om}`Ip6`?KV>ijoCWcH!UXlB! zRKCANp%3DhkmK*bskVG6THpTDscD64xWtDY_5O#$YhAawhA-o9Jc!FTb$q-Sk5j5jaYH1f7%>N2IH|dza&8gUwv6zv z%(uPjQ@%>}4(b`AIc#=B!S1|t;r-pF!xaS)A9g*kXioyDF_#y1!D1DX{F0~wQw{^e!&0@4EJe7kupim?9S$kiYdl2E{1zQMA zFuG?DG~ep`dL}P%89+Lo>J+yIZga^bzt^9LxJVa6hDdxWGJ7@HXV3czUP3d+7f@d$ z{p-E9Lqr(-)kFkaL}nB*=vIs~Ba!qQ6lIjjTTQjXCtM7RC-W%I!xgBC2278SE+g1N zY*^k(5tc7)L+AsjQAl|&dEFhE8)_25mDid#(|TcH6)x;qb1tRi|Y6ZI*Zg6v=E( zh&3J3c>4Go#qi4^Q`)Sl%!w(ckJoix_c*yT{ltXj4HzGCNv=N`kxXc!qCOUfaAtv# z$9Ly5W&Zsnn{$3dl{`2Zs#N$D&KEO6)tND?x=u@!y#Mzht=mjDp3x<4SlVv>=*Qlg zK3ziiDntd(@`UvFuhy(_5+qGvVOJ;mw}_EH8Z@j9){IzX?Tjl{p!!AvCmYGw(GtN8 z)8Y5|C<2e~_0iSJSF80wMt$snVob<&fI0n3*q5N{bTCQAO)b##Os$GPE-98V8lm<* zooK3HuoGjqxLZ8feXYH)`%d~jE+Z*QCEh2MKglw^3YX=ov{}ZSOmK=SaTRjHw*C%1unJ3 zREw1AIJROtCfqoT3Ue0F*to8oryjwnpuE_^gr zcV*R5&B*Q)x}f$!8Kk&)oh;SotZw-Khy-FAvx}MdW~j zRQgpX3(T)PDi}IQqPT-PTHIBJWww>RP~AvlcS^64e1F~1+gV@vRH0+wB_}DkL^-jJ z9N6YN_gH=%nAzcuR(}5K{?MBJ#mTplq@DIMVf}S3+Aq(~*V*YD3 z9qKx2CTEEQmIoeU{(kl;|9|E^g&Yk@bcA{JF`_~_+(<}If*+m{kdLb(shx%$9<5tI zr?4w*`*15Di%tPmW{x{4Rpu%2QEDnj*Z-wqlA;~Hr{%D!3zZk;jEI-0gv!0b_{T5;RmWI zVQhikkJ4I5N5SubKl-kL@u>{7S+L+qr?@~VaH$xpSCIF>%%!8|GEleXI@AS58KThI zH>o=aX|vXgmeNe@2|*WxEEdP#L`@gr0 zL8OT09dLUdxUq19CFsuh3`PCLew!jv-Y}M6{(IUy?^rPzA)~+S<0c>|_zWks$lEm;-a!^BqKl zD-^&n5iC7}#~^*Y))E4egXL`gd#fEOOfL}zZuY{at4p%8&4zO1A7rIZhyq8ZrXI9J zS65fS_YxEiSDOJGz?|RxEg;s=sC))joox)FM8GX$;M8m`DA?RKy7vNVoUzpnnYVBI z0ZXN)rw3}*>~rZH-jU@dP4`H+m8PJmr~xc^+E7jFT$GSF=2G1cBrX7*)>-U9=v z4|r+-;I9hYUSv-xax_)~Cl#RLK=lT`36o>n#{fe0tnby|n~N^d(t?72^~AFqJ39a* zHLGepXmbR^`FBs3bJnV$P*;EZyUiC(S{I4BNbN~;7xM@L7?ejR-o ztBL?q5wLn;KUG<9eu&LC^V6gawIqBfbPiQhMdfe}?r3We4rBU)A1UKaB}KZhQDl=0LNur-GfC!ie7#Q%maX-`@5UU z)hASU?APnQ@q!Xz+H7m@Ust}cG0!Z)f&k;wFsTCx(dBxz z?I=sh_7Fi}%lpGymF2_QN&B&%lyZ1LsBi;d5x?7QBRhj`NK4_rcHpd>^*1^IruO^I zcYa>`jpyL80kS{n4S?b7(-^}BaM&19Lm|Nujgosn768Z)U6LpAd%+}z7o%k#s{jGG zvtwUk_ml>lkWrVv!a(X>4|qT;b8~A0OnUf(DGvBo!BALgWOTIZ!7PVKVrxK1U!i5> zdkQ$!`Emy1qr2F5Co*8q($J+Qc}|0jkJUk(k0TRgfvPc zc^B{R`^Np}j_W(dtDJbA{p`K=TyxH~HbE*%ayU21Z(?9z;5>dL{R{)+sul*ul?cRD zc;!qpXaN4gGFFh2#<;lrFRd{*3Il^0zxgARAaxL6_I4# z82_3KPbE|Iwo>#s4(r^v>KIAG77%c66-^>_O^kOO)c5b3jFspQq>5`g$zWh~=W<9g z5r;%YMM+6XWoBfsu(GP_Co8eg)0?h-&(2j&-Rkrk{qZA7)YZP#AEzgd^WtF2R>XdY z+j6u>yXw`*=ajy#uI=63&yK4f;35^VwYGCj*$Q#7(b2pQC;Acv;y4ZO;p3+lEq#!Y zmF3W{-&-3g+QvQzP8C`q(`$7~-naV-Z8Su)-`1qy8 zMJBr-F)=Yjx`6F03|wH&!xt&+eo#a}!tSv8ogO{-E%ffxi{G1V?d_N}YWn)cYr&4M z9=ab$Bl6!|y!rc65~gp$U~FPSh?iH*u3~3r=ilz~usN?WH%HuO%Q238waKql*-l#X z1=11{Um9F@*VfjotgT7dw4NIo(I62p_&+nBYaCaPgUpFhq3%U+Fno=`)6{v zHPheUzi59iT)?;uK^rgp4JH_7JC04;eq;Q>L|poUtD9S}bcSr|@lFq?VWZm}0s>|YQBW&$RN z$D$5D-MMpTs>YTCah;{efN^nto`8a4I#S_@qM{5!F_B-F~8j! z*aE{s`}w)Lx?*BseP4A%4?>6}CnsMH0`nH}-pWvB>)Ld(@9U8Q^{d`LLpYnpD=ng? zRYmXpSx)uhU}dEvx#`yej~N|JgjPuv^OSv0`t>VB1PV zLqknX&BlfUl?O9AJ3C8GPF^v_z{t3~xJZqL7|O`V2yD6c&~0U91;$8V+uhwA{PDxU z^3>E6Yf9~Xdis%(k;qi}$B%r z7}V9(1xUfk&d$fpZU6c;Dc5rhS3ia9XBiWrZ2bJywY7pGA|mwk?HwHfJxd=_tt+oy z!^YkF``3Ivl<@oa?*)a0$w^6_Q-DDODGx)!!bS%NN%^fl`uethHZaiCBq1V-j*Rp+ z(rSKt*3i(vMD%a{3|5%au&KAJD^foD&6_tcD{RE;jd$n@OG=a!6o!X}o=(%NtE)G< z?)snFb<%hlw70h({+Z)sW24}Cd3$?b5^;xw1RD#Bn24xsVk2EDKv-Cq|Cs;JbX`9FJH2){>g~Ar@-Ma_VWz|02d47Ik z8zjx`@cYS**z1Fh3GvgvQdU+QyUPOsx5-dM_r%{)&{SGa@zY}Bqhe!Ydt%wA8r=^e zipl{-`A4%bg=?9sTcu@XY0;IHl`JeQ2|S+W=6O|Be6D@t9&U#GxXs97qDNEUK<*%pXjVZn7+TE-fw5CrWIS8yOg+;LqLIU`ZYw;G7 zh}nRy2rhQhG#28=Xo+tdS35W3Uyu3k( z(y=i{F>~(upZ0T2o`2k|_4FvVT`3>BslB17c0aVC=x8_I2J~P0@O-k;f{%}HQAk=^ zI->cOj*boqr-4;JU&|d<4Qh0WULCjVj>!&fESom1^ENXhW5B7WG@@Lq2oMiOI5g_A z_9Ops6hqhV*wobUg`-bq1B(ajkjkY0b|SHrfBpKknE8Murr!CF!Hx-}&C#JDnt_|G zWkL?Wf50|pwCv|Y%}0`^d@!y0M|yU>HF9g>6E+R+%ifQ_pClzDbie$>Omx#ul8J`K zXyIFETR?O|0!!k11d5fl5D;({g0?+`1TsAh|9X|>7(8%_kOKn?%UZbjIdwmN>O*%1 zclPp$_=E(2Pfji_E)kKFt(nh_Zu=jmjA2VXuo^FejS}GRpOc-9iH%JtqAegGu;cs@ zfr268;f2E#`1|=Ki+iQGba!=G051u@_YmOh1|HsAgDa2k*Fl(rrl>Yrv6BrR^k9W) z&%N`)tgP#rh!)5S=!nmsKTod-zu6!~t$Z2~qq_%te(%rR#TV~uG&D4Td+>i&jiN7H zz2Cn-+d6q1o0xb45O25e4gW+ggWS*0&*hf$LwTanjM7Zn!LDXE;Ep0>2Ms;a7nQwX8~ZSVKDV$4Le{_j71Z#i1Su@wt(!ycTprx)J^Wg(+ zjqOC4(KUY~3fzFxRYFPg7cUmp*WGu2_jPu50*bwQ_3ByvkE0`(36o~H?RzpFpov6x z?!-h#JDwdo&3~B6O?@k0VzBEw`0ZPca;g{!hhAV zrkpgw&%O3XH0>3V_^ruN=HK3vwY383(V&kHHdzI<-@M_crJQhnZ*v#j7H8C#z}FY= z0&t5+zvMBuApSy-2|Q+DMQ8*HfZv`0e;J33m{mkXSHlH3UR^d}B4tQB?ZG~JZ_iOU zx!<@vLCl&S*GdY7GNG47PEJgWjEyxP&TP&$-lf@V#S`z8$E6fTpFb33RNdf{-^+O{ zFHft?@3^9ZR)Nebf$S&-bof^WE98*Zy^Oa)^%tQd;o= z7K#p?qnJ3_W>=zzyj&Xu4IUoejsk#=53-`VI(E}ALEBrl3)AS)BZQr_jM(ALn>T53 zzne;G>FO317WNpI17YlPIGGROM55deHY|*TfFsKwtS2iUYkW_lzK`qQ(Ae1J2e>1P z=t~uE4k96t%yW4n!K-$#IThy-aX&^rC^YzyJVnP?sbM%$r_P@KUsc-`Js#i7u=5Ch z?BVhD?b`|hV|+kx>gEF&aza7^?5&FMCK+A2#6AutCTiu!6rFFk+esEt^B8Vh({&XD zw1`Hy?MZBD)A3E3J%}9s?U$CXUKJG=$3J069f-TbFOE=r@}!`kz{C$&s02dsBbTHG zN>A36la-ZqLLsm;d|Fe2iHLwi&mWIUDO&II8yuR&)m3KA^7?vV@* zA9DV+;Gg7YY{Y;qKynBSZ^v^s9r?&-&(_*Wu@Oi0!1^oLIFgHb2%^l7_g0CCiS7M@ zodAxEt8-(65HY(B`aj)J zv)~#b6;&JpVpu(~eL1SxcOCBm~uCS~^z6+2a4Q)Su8Gtx>mbFID_0Qd>V+DSrN7;awdWMExpyn0{jCFOI-#+}; z!sBlw?LL_-;v7g|?B{X*Z+UU7`=Qlj@Ez81tLlwkz@>-0nm;V}Cucs(Z?pUGJ~?>? zUW4?Qn3ObqYTCu7Q`reR>pnHU841(z`mF6?(Sod zTkqem%xD48z&NM#dwo5`h}1O*NVx=0gox|$$q6hr78X_tqyVO`b{yCBbyhY7O6EyX=o6q4%Adu-j^dn0T8zR_`%D_ z$jHMJ<$?2FaPq?gE-ncKeyFXzA4o|1o)4e(uh4)rvEQC=hY0SGHvrfLWB|^-v0-I@ z1_^1&V9MMq7?=u7jF{`reNN6&_#r4xpab+8zsT!emUPRI$*7qYv~7ol)6Y zSsT-Jy8zU6b#*|;t@X@9I*VP&LvwO-HMO)Ji53+Ubocg}lxwlCsYrNG*gp<8(z-Z5 zQ+@UfG+!6x&4dz(kl4Ih*V_8}Z*6Uz_XsW^U-ax>wAfL!mi6{N(SH2&=@4YqYuB#r z?(TM_qFBWufpB>I{ff<~oHAWyNrGB|QAtWldY&B6_y0;5{bZ)BEsogHb=g_GA*79u zlAhz3XGdK30nEY;cmYW!WhB`Z?Fr?^EQA0O}J|A7t4v531;}=(+koDR+b;$tC+k~TS$TMz zf&>LFZX(Cn_8^sw#Ps^rE89)NJHIn7(K{sWw@=p_ z6PZUSZSm0c-+%2FNg4R=K3y!UZW~NVu2Qmm_A^gU&&z)}s(S3Njnp|T-zNx~w!9-U zWcu4f`T8-*MT31hRV{F zxD(RS(aF6h17X}&&M zTzn+`av-G84>17mV2xg z=H}zQ)KXS zS!e~rG-vbaGulW|pd}u)o=1OwIV|_{nVkdc3XM-T7rq2ZTB=-Vm{ou6HbxnyJ9S-S8ef@ z*j^BVB_Sh&He((A{(BAf4#CqGi2-^y9!%8Cy`6HT`vpURdHHPGL%g$`0^qwRY0bkYV(uYL9IFh>J95^n#r`~0%wtK zI*_$_Xd?#Zkui@8&@;lCr7pYIuR8|@!r#BYkDac@LO&b*-L^yyAtWpec~XFZ;pLCK zr;GM=BaigB!C0~sMkLme@y@}(E5PXi{R;XSh_p-yF@C^q@z1q2a?r)Z#G}&4SLWt> z8xuSLA$)u>(>tfYM1q5ZN7*&QV6S+4OM*RMV`DS?0;|f@va-7R<)?`@cK^i}9Z5+P z#&fjJStFHz^dZt2;9x~Ls|tp(ZmCB@UTU_ycr3g3+xlwi03HI7_ADRPRyrs?o@{&O zeMku1952doVs~ff73}DusW-9d&+@^jBJ?)`VxzJV?6YtLTTfE&9(++XS1IPveS2Te zjmatn+Q_4S|M)y#xP+YkTTTTKtO$U(fc$O6pIF-yDxVFOUu;ZFWGO*zb~fLxBl2vD zTS~0c+T2{F;U=n5iT9H@X|htPh_emY6A zQRlaBSdqty)Mzy77tFD)Kn+-6)M$R&+38aaN!lM?$E%Dx3LJ(_NnrJ5%Hg%2Y)yrY zi%BacodEO8K3Rj@Tx^@cpC#xVG2Xz9uClJkwV@fzS9z6x$}=VV5ZvdL0+ z3FI&J z4Q4(#F($di@Du{v+#t}$!EXk$d0~DY?s*6VgULYFx~f>WMp#fV3Ctd_Z`(Hg)6>&o zW)lT$@BPz~v#~q{GO1h1X9G*BtLqM^pXzn)3hN16Qv77&lT-k%UEOr-mag00ijj>C zKt}bek%GLuJOH_~qlIuVl+*R%GWvfmgo_)1XtixVBSs=$AN@4~=K)-!$*HLxN{J%v zPv5$`*T77s^4xp+=usyS2T(@IF)@5*{S-S9S(NFmHa}EibZcz7WSu_zvaf@z47oB& zk(i8(Szz1|#>x zX*4Gkotnxy=JXo$k2I&r4vw<4rb~OeE^K9B^j(}(;ITgF3=0UrcI^g9n;0M8#bD`Z zLdLCKOk_({R8kUqH>GuK><~0QB7NeMnZQnD1g{$vP1pi3gopp0y8_y_CBF%Fw$X2J zdAe1_z`(#p9HRH^*)wjZHMKhH=hL-z6*q|FVwqW3XoX9AR#sQf0IwD;5)7}%1PlBa z8y)R7-Gw~^V%#!|tD+a!Fj2q`&>0#rX^IYdpihEwAZw%#-LSE-Cp>ia)(KJR5$2B~ z?z$}Lo6z+ziP6W%gCJ3`v5-a>k^TnzFgBJU5&YuVh7cf|fQWrm+Q0jgMeLWX_@_EM z1NEM1Xz;rqSk=+pg`9ioYnfP2klRss{oBc&Zfc*M6%!Ut5XG^hO1JuP>*@mx8dtT5 z!9f-KvAg7<)s|x=PV1vI=&M(+nndwkh_yh_^~9{Nt?jrpFc^$e*w>6cC*^ne-76bl z_((}9c1nC8o+rRV*`(vkYxRql>K!h-zZJpGcXh4v_m>6R1PhlU&jmY0nigCr#w{u+ zABBU@q}M6~`c_KHHzwvzT?6RRqM|3t%Hg7WkH zj~+b=3=fBL3J^XgXJ;ULklKM$RGjN@w`9uo0`5WN9@q%iguxk?j}Hw+3StfP^_iAy zRamlvwHgx>BP%NlF5e=_OHC?Kd+m05+r{(@4Deyl zXu7aBU0u7J$}KH0JE3L~7`AWkOd>5K)85v`Mfx5JY?rkeU_BWbEig$Q3KXbEw2|;W zkXjvTB$!O&6BEn^R}|&tgF{1$3k%mr3dev>2c5K%-u5r@P6y?emL{R8dDuwef<&Rx z2U}V)s;l`yoeAZh1gFL&fzY3iTLb+GG5YBf&%e(1)JOzWO`?;Nivi^p7BVw4qY@KY ziEb7b7bgmGLOG+jq=bRr!rt}eO9p?V#r{w<5RkI6GLS`}kc^Ce{r;UZ9#=7 zV1M(wHy-#9yKeOc@KaSMeGHWfn<+~ojKMdc!@#!`5)uMlnmvzT#&E<#qA}h%yPY0A z75~A(Splu@%=vNEsfig*WcaTUmZ3Be5JtcXl<3U`KgLgk5elP zwPA^3r{xpG6%34bhd$KTF)-3bsV{%Z<3pgJaQq6#2MKTK`2O!LVNE0~Iuvg5>WSs4 z4|!64Ha-unA}T76_0etDL6e5+j8v^qC$l1;APT8IZ%v0ua{aB6e)3mxOMHqBQ*m0X z1Tb6vtNRk`2dOZronqE(6*yqhz`X{){{P(h|Ld*wNl7h25A{h50pn{J80HTX3Rnjj zTubMr6kIJvTkm=v5V{BZ5s!XVzlu>wn6Gxc*aZd7@4;j8_X)t5hkUcAz$&YTdq2NXQW@7vh|H#DSK4Oge8JX4QF_P8 zBO9j4kzQW}fscA37w)e)aHoeaFE0)^RxO`HoDP}|(wyqwB8Bmam0iNfPiEM#IbyZ0 zNWvm{)wh|k?_Gx}e|NaDBN>SN?nwTOiYiBID=(z+zZe+I+Crjx z-%715q%g-$IXpF%>CnW6P|^HO=@VfzOGpyZCL?6OG)htQEKu`?`ZHz>j0li|b{FTK z>SOa~DPo>(hg1%?MeWhFCWpO_D;dc3es%F_D)pRjFwKvE zTa;zMj0XYM2THjaaOLg??b+b>;i z)B_&R&*MpS@X5W}iTOhN*dsZs*(W4nH+9E662RaaJuf@}sF zDi=zwuB$8Z;@f+mSx~@%x;oxn{@&qX2Vh8l3UrN((i0Q!;@h%nmVkNH-PsA|bE?=G zlwQPK{!*iupdt=M?Ua-hPJ@QO`}_L!j?6Lgmo6AE8+;U$vBBj!+}#EF>N)l-&`n2I zH&xhat+2F-{Gl5!s&j5mTv%AgMjnI>@Y;#-@mfegB_(0)#y9+0romHBqCl%CDfI() z3}gmaYB#o%l=O~?895R6JxE7WH^6fj@d?q<`F?#4od8{mJZ^jD%F4=EzTU_LE+d~E zUnEV=?qEV%&yHlLRB74*6UL0D7XH1b(~^?r`F`=1T_hY@W$${HXweX~=Fgu;08NXH z^+$rY;J&jMl%H>5Y&An$64SWcZj!!4+0SX6^4mER%4lqxl z=K7>}6ZW^__4J&a-vLx_ADwyu3xv5<%~wMY7N{43ERemP4#^lww(Tf|nhhFhprZeERgMx%mQkJM2Mo z-UJD12?QT6@8GJVvAl4yQo738`ubeeAZ{9(8qjtVgh$W?>=EW3S0T+3J#dB1Pv&Q3 zGUF`&)urAaxua&CQZ(ojy4~(lhq2mHT8c49>A96Pzb;Z=U*9GU9Tc>YOe`$HE`ra$ zV7R-Vba%@WhtN;0I@C?Kw4mDKk)fbXv3w=b@)j1%VG9+Po+u85pvsoIpoKL1y>Pko z(@!j5{sdVu6liK|GuIGJ_`If|0+h(jU51)Aj2!w%MpsPR8P=eZ=C)s89IgUt7WBU= zQ*;0x)n&z%o!uG~8OX<)@^VQ8+1oUfpQ3KQgrUoup(xdio-^lOY6>zZG-{04*wxY=;K?Qa!#KguDT(DL*;=3Je zkP#9Nml}%ySI{aoXq>Hz1_uhX^~aB-XcaJDpFVx+u*MM3Wl}L=RfkekRGg=RQO=_w z-2Va*1-DNY0dn=SCiC$pyl`-E0392}T9p+{JP73!Q6T_XS>;0LqkvMHnz}l;xP_1= zpgU++pNE;5S;&5|Q#>Yfh?vu0`t&AOlK)>{4ojE!j3fsmlH1wylJ$M5p#*`@&VYFP zF9Q>}3LPdP!MZTfsd( zK6j=0QEJ$HgOK4#il{3L;Wic>?0|(ATMVTt(j?tgIxOoWw^Vw*Pr(TVnWrHFvwylRhaN#JNEjL;TF;!q#`QQ0j4! z1i|BgH}R2=?iZg>T32CO7RkJ(&}`*nhANe}`cuUX_4U~WqJa3rYT;i%CM(tcgm?V52N3YQ; zaI@vUM8?FIAhsY*U>&%){z6X#1lHMNlrl7G$Td)Ma&oqxOwY{BnA*m+{^~5j=kJ@G zOjt3jhvCD{BJ>lz2mL}DP;UTnez|r<4Hj)L=aQJa^3>MceUYl8{!Xw+&>%w%Z5-2V zX^&W9xZ`^R0};^H)ouo*80XE&kyxtPqT1Tjm*)LsLW&wY)Od50j5jFe(#0k9R8{H5 z(yk<6{Wp=zyZ?eWpU&u_P%V%V=NA^#_3_iLw&Cp(V3Wz`R<8Fp1LuL2?qb$bRh4o? z(kg&b3zB~M@@2P92}SJs-{X&riv-vlKIt_;%Ns)M`=g){46J&3XVxyjkh9a%(NaS% zfI9HAz{7!QPX_V?KW~nCs%7SW$|`uGm!Ld+vHUDMo|xf7#&@i&(g~#=p!$P;%**e~ z>g$0RN5RHhYyqu`tkH!y4kLY#0TNeL6-=0mX_%sC#FK)zUkKymhvU%1?JpUZ8nr#e zkPwM@bRTAFs=?LaQK#1%5olcUHD>Gun+Pa!wIe=sW@(OgrlvjZ7NV;J3t^KqalWYay^4`$f{k~t!EJvH3X)Lu>0E-;oy=z$ zt7l|yzXO#v2=B=Z8Bxz;H724kD)IBPC?Ad0L5};BQmx-4bu?L7dUNjT63}zaGhw79 zgVMaz<>0p1FF{KwLwz?L`ZdKsfB)$4a8x2N@!yM!q-11WTlG>1btsBOM}JIAv^4)B zNKKiQc)R|Liu9Y~K~cCT3+p>jK$QV7L(_E*0Y}+1##YK?&?y6U6Ac>roS-=s>ROXm~vI{T)uoyK;^!}A-7GLhCUyc6$SPcf+(Gdu_~ z4bKQ^wr(#4fhtHTJou=*+IwW&>Us|_-r3)nZ6bb2@7!CFCwi@p+Jlp#!`H_r&_M+1 z+|VBb)$(hX6=!|OFVMjOm2q?g&=Tn70XF*J_7n{E<;xst+OJ$}LPBIdW!D@BsHG7P zk^@HCMTZ`o<=zT^NTN{Gh7&(%i1p6KPt;A8@jlVbyX531zB1;PmV_74ad8Uw3A8QO z+JXpA_SYGSLmobSc!_Y(9)}ySySJ*^{!3rNeWhBm)1K1c&8vX^BN;^NU~}9JxdaL1 zRSe-UfZ5PcFm)=yyF>*FUPvK8FhldJA?SoSr#wjnbPwhktuHD5pjt3Mk3ob>mvU(lI^#}GwE zLE!-e9=ch9)@SGB5VXDtrxekc!P5HkT>h@3F7u?=3V(bpQ|@Bt%P8A^>f5Z=5{(=o z-6Xtx)U^a(k>A-bA^!QGb(&56x3sBbWM8LG%MXH=3^eFHKKx{#n`>(Nj36|VpE%>9 z(8ysYmzid9*)=n3{Kx*_{ z8oc_~a7Gk#YLS<&+^_eSCIT%VqU8!5XiA#=w#Wc_4aXcYVE7oq-di42G~V5OX{(96 zS>JY!Z$BSWxkn{1=Cf^zvGSq2rw5)cXH5s=PGCrgWpljq1q4*NUcgv~=*R}o7jL){ zwFA4lCIVy79&Bs_aQ>mYhSh*IM&6EsG29F*fgwg7A4Me3_=*pRtgJ|%HoH&6s&K>c zSIiQZm}}uX1y`wF;F^KBe|Q_~#Z0|Zv3s!=8*z{{m$~-tjq6u$`k`{22dVEDj0Ame zI#a1~TK%Ts6K#&oaX@~lGBK#1hEPji%xdE~tH4hYnH&(AWTStN{jTZmkqd``DyM!L zN1avXL`vL9YHP5DdHMWU?>A!buU|@g3E4)UhzVP!Ph3^?m03zfYXxxW z6^b9MhzG*HOWam|KcA{Jsf{?n)drdKG?CCGiWPoO^XRV<@udfVf&RgTAd78`XM1Tg z&swW=d0ZgBD{ac&WlKyo1^b@c%s^m}IVriV-G2&~*nQ)uf9|8#c{GRuP_lQ-oF6VIVQL%5tlCWL`F=u|sN@;+M6ioFy zooDORZM+{7lhl&%76T?xk3bsbXXxfm|ufqrE<5lDG*Uv7mBRAu# z(%O$t5`vy!E*TVtMSb;n#usTsYFWl9KJQ(4&yfNX1H&onKr-<1+xricu~!i3pw2Mz zXb>prk)an_`_=t7dJ5VtWeQ4g;2FX&!PP+N_{s`2xI7gvG&K z+HSA)Vr^2KxEnAPeG;&`NZIW2<8V@4a*7+5kM;`7=P#Ac){D(&RMJE(c!cm=Zr;?V z*fT$5rF5t2c}ub+N7OH4!$0l3gV^5Rz3;0^fZXc1`lgi%r0G?0aY4G`YGa zkOqkk__p}Xkm2W3sR@6j!NP*?+QD~Q+Z=j-ZUm^K)W=}KB;?>@cqxsA%mugz1&zzo zCK!%LM9W2n3ey&0d%8gOYjKFaJZzmQv&h6mT{X4)?kj6+^68z+g=#FGr$=_$+7p-F zgQDV8)8N7Im>I?X>W6^*r5A4N1@#HG-vnmRvOzh~V?;qe{`U6;) zm_SCs%!A@BrKrna5bSO{S*nMXE0;Dcm^s-=mT34WR1Lr%FyEU1 zH|0r^;8O*KTQs~-a)6Ej=v`?u_=t%*t7b1tydT|^Bs9aur?K&9(a>OhC__XF~3pPLqW| zqDgPd%3Y`N-5z*M7~YY{Z5qt>&E(0GC-U<0ffvvK28um#MevoiwI?LC>al`NCf|+) zd}p#*LzUT2xOZs?f_VA(rqZ9y5X1Fp`VmHytdN3@*>56PEh+conM4|7HnC`row}YwnXK z5V&amzZZi>8N!=>5IapxO>lam4aZN7Wgi-nFI^KFAW&sxTwo)BKECYd8Oo5cHZ<>e zowOpryZc67NH6FL#ycB@8)FDY#ROjP?(0yHdbYSTOG}%fYq^@U(AOefJH#a?{GR_o z3Lol!kj_yrm7Dg)l>b$*YfI?7+y6G-$vbKfJf52LYL|%##=q`FutgtABAf91GI$)5 zUM{i=GGB*V-SGK)_C)RpsVe2Uu3CHnE5NtJKWfBWc+0%GFix@S+vfj+4QWZv)n_IzZpxNo!%Z-K%IZFz z`D+CSr^sfbYp&KbmYqg&=UWPfys-q561TvfVx1tabA zJ8G*d!LijE%{02wc)0iF)%8hW=XYO`9Ot$wWzMw!a~{jI7^1F!=kiqyc-4_dMDd}o z=}`!e#s4mQ<+@Qwx!e<76&Gve1~s3;dX`J*xb0Kc{!!_kRm0a@u`M^^B%-Sr5^>m) z0$gdKM(Ezi9GalZ_0)CV3_(~>POAd0>Jwi# zS}zZHzr5I{{G)pg?^++se4LD`6J|Zv`}F)JAq&-^kt-vG1?Y=94JM-Rq_-b)Qd-$5 z-^5f^#{|4>pi088zTtjEq|?3osozu-OZI%>JASzLStJXkt8P+jz&S4r-t{Y)QKAZO zRpoR?eeT)AQ7_E8h8)@6UtG;Aa@uzo{s~Fe4qhTAE18}my48JI82j%F{{%B%-b~Sp5n@lmfF^@$%&x*Nx-`$$53UOKn`v2xt~xzFYdcopF5F1aC^ny`$bh5(UH1)diGk z^P_`lIA3%xT>anTUhygOYm;Stx z?2S0dWf@Z#6JBpETWc-bP(Rst$w~QMQu1+31Rz(M8xl<^Z#Iw37tW!u{>r1T4EsO$ zNXEEs6p%rdz;l9Ae4}B-(*NPR&p@=&2w_;}lP{Kc>F&8$#)z@DVg8M}yga6f3+Qu(EFiCKqbWTyYKoUkeM5Bpi!P-O+C9;@palQ2 z;!1!0mszUk8!#Bb1tcLRhR*{ZnV6jHR^%}s1T%_}Jk%e#b9e}Lsl!y96!tZHa8Tow!xY z5+3(icb)7bCJqj$7VUv~dnXlo?4ebrI6uFur$+?RDRi05@#h&< z@_N>HZ_ zuNIU%ilZS8k)eGmFkb9T>MbFWu9Eeg!z(ThsvBStw%XBec&x9lGd}tF+|tq=jtS+E zK>a8F$!{nGLi@#?RB)`JJ9`X{olP0gj}+wR|GGSWP()2r{kMhF5a*#Dy{X#Gp{O9< zM%nu50>76f4`*Yv6o> zF#_#Xvy~RZ&=VPC4?Ps%h|-{KrfbXLqyP*R8o}IqKR$qYgT}2_C-$GQOD?)6mz`z& zCU~sM5-0wH=%MJ>p@Y!c-`}rvpfdUej)50I5rY!A2S%4rgx!w}W&jc4TM+FKoaF4OJZ8At;qmbkV06qLU^;194Lo*w z8eTRoftMMHXP-T6_0vrZNCU5#XI8q~8`cY=5C>`0}`*x?TqK_`~gdh@~jG6Ow@woIzbm6ZbQEe#& zj0N|)5o61SfOJQ13)7l>w#t8ks0vs{9cjN-UFF`l#*eTnAbx%ThApF($VOdyBW8tz zlabbLH?Cd320Fr*dc$!#=P3Mp35)&BhfxfnEPi1;kms7H5h7GKV+7WDx{?>%lh)!M zMgoKDcd#1AE6do?FvqV1>p{ZZn|k9% z?K$i3C4;xoA4}JQ0aR-+CCBrJ_7ux$R5zr;^agx>!!(+cz<84T+O%yd=cf*(ma!Cm z20&e3Vig`hd9)g&%*v`y(tay5;0AXX#IEo$%LPBceni=YzwvrTAokCbEz;O zT1q6%y5%x7jjmMR7zo+keDJyvh8>ONQ)ZcFZn564Kla+z9e9CUMaLu?H{!N`7>{S+&|x$#ic@?=n#po#P;vW08$ORMb1=Q@A4uVQ>T`9fwCm&@}uJ=*X^tjpm? z#wz(hO~m#GHxJDulNQhNfmO%|(fO@t@`-95SBx&?Ppvm9pBo zbL31;f`7n>ZHAt?qBy7KzHwT?BVyMjZsx6an|&oH*~h!?3dT=Qn9>^ugE!PD8`pGm zP3Wl(a*~vyZvMoTg2^GcZshE3RKMGlr|e=tvWsRa`}I6bbmI-~f9zTnzKVA&LiMHG@7JJV3QEI_O81KJ3ui$&{xR)fQx-4K>*ES#rl>xiR@<91X5ab)T+NcIz|1 zfLh79o_$Q#dAr4UhF9~zVw_F4n=1cELla1&1fx%g%!gp($1;!gwV#^W+37znudE2v zP;Z%!+gVMzisNgQV8k$zmSQbG<}|dPZT6~YZdh$BNRDh8Hy;8I$1c}H%icwG|7;hS z0Oz_?{EkXRyC2FMD5RsH-u-B`xRE;~8bpg@#3VNg<=bPHiq>e0{VT{>J_nYZ#M-ER z<^E-PnDfzX@MO(`R99>5RRUM}FCBB5yP0n~!*2PMiDalakyvxg)+88B6sDe0>*MS( zQ5`<;1@c%)VxiC8T$@&ume!C})KozcL&8;Xv#!dIH>fPIBvD3yV~m^Fe0AQ+-M=x& zzv;o)V5e-rs{vG|*2nHcMI?HLFs5}_x1nyMtp=;`kYm%-gIj&=g{-<$HpI$Z4*WQh zxM-p{^|+WZB9fm=e($@lYUq>IG)V^zfkILzuSZpvNKBE|kbb-Oymw@nkLyQ`35|1X zcWVhVT${MHApD>f)0DAh;A}CjG$T)DUyUxOVEsDA%FQeS3nc@)r*DlEpGKBdzSGg~ zEntU^+FyZ|!F+q&d^qdl{h7`^nD@~cWOg%)9i-=HVEStjW(yM2{P?E z+fT1{9Z0jarxWy2$|^pl8-C@#v-2e1EoWm^ss4A)H{x%jw-Z7NET?WrA`37>Q#dB+ zPWwgY>duz>9mEnY*<#v$*6CXJbWu{x#7LdCiyeO{O8`yDfU%C6T``xG!#AX6SXCYT z{s2mx1h0f!J}UaJWtDjPl=eMb7t^}dlqsLT*T$&FdaUS|M_ouQl1s~~s`sIlc|i7= zU4p-9T^Od#^YkVDK%*BH7N+Bg>1)AnOp)kU*IIA?E=oSyt&8weDij|G>a z#)j5;&m`s7`hdto`A!sun*1|$29{2uJ1^CjU&6H>blYDiJqyiQVoh+x97wQOHWlqI z2)Hq(ipTTr7Ww84AC*QGr@i-aUN!q;ik2uB$KZ82Pe@5C)V0!V9R0;z{Y*W*$lpyv zZ2d?YdH+~NioT498Q)hA<;Qw5YRaoWaqt`5_5JECLU28OGX1VD8Qa9^F8n?U+_NzG z@{=?Y6B>+7AH$x3CyJ$=-4TmsTngX!U)kRx#VX~q3U;mDXE?tta95SCaaPaDkK>yk zs|O3FWL_BWM$(>{$4*C;ZSGTN)rf6lc(Uj#BtPO_Hau2VS~APA4<2^Be#g~n-9Dvw zFfT4=xYo_`uI|Iobe#gK7v!BFI#r*<8Hv6fiRqa7CbMBY?36PlL40-4xHiq;W8Bk( z6rJc4**>qZUuI^#yG_B7T|N6_ftS1t2=ZZKmd{jKk1C+pqpMCqOmB+;0mNGVq zgCh6pU$JLFdDN;A@p=idY@JH!nsHeViVYsP2P!7vc;tTGtKQ*FLwWUcfPgMueWJr6 z^m$!lziHJwu_brVmAs$?iIE(hRj>CkUTvQtpM}oP;3!9Jm>QMo?5|{7zZ;#>Smd8D zDC>}3^~q9I>9W-netQ7-e{IBr=ApfW9oz7`P~aRF{B9L!^vY%UQ1N9-HuVNkcx22sIX#UV;Y2#oXrKxy`Y>KiXgIyXH?QmcCV(H9vCcU zqCvo+N~r0+eDOk6R~JsU`1txxSXED7y0<|=K|q-Y=G#Nyc*uXhM1hlp2~#$Em3?OI z&GSa(oRQ*pPV z{W9`R%RD+Z3`cFk2OA3nUXeQ{U0J(A!jIsIx^6p`lD8K*zD`G5V zhJN&j|A2-s|)0_1JV}fK#Dh{`ke+3*I6>iHkn{x3g|F*X5Ezawr zuR~l@OLzE#Rd&!KscP-G-=ARJ;qtWPiHz6l8*5?qYJnK$U|8gyefK@Lw|b^1)SB*^ zbK)Zx$s=>O#ah=j)h9v{ZcRDg*6>BjbA_@-RP09An{|y%2RX~~oeCp0dDoq1?d*~N z%K-Bq&{;^PfScjUt;jo9uAFoVM=IIR^00M${|*9!dxt${LJ%n#Zn>O`9e+#^QS(~b z_o>)fccwqAIoM*aB9O9_OD*Nvt3h7I8T>GKi_11T#^WcW)mw$!ghT4-sigN@ukIk; zU^zqluY|lnXAV)4NRO_Rg~U5me=!~_%`02|XTPKO*xr3@sMN4vZIm$dawq?hw0^0b zZdm!n%}W{tsC(Mf7I(;ejQqw(z96~T*N07G-?VzCdbW7}^6IAk^h{Y!XQA_8ZG6UV zdE?|T^B*DlXqK>02}ypNch&|8>u5=p>+zE}DW&$=?(<&E9bAC{1{e|w4Z(Cb$q7Fn zrMy9ad&^juB9&s>KMvZl9KC+~_N}S+rXpG1EK5hRNK(Z5bylncCb!1d?6>!@0cLOmb(F>?@q|(6V`Z=CW*6qaSO(V`7CQR%03@IJ+%$5b>=~;+z6F${K ztxLaGux!eZs$HpYnbWzhtF1i%iyM>_6bN>3Lp9Grn)D1Ysil=w4M43BIee(1Vh9;7 zh}-b;%egyFHu7j;Bc^1Y_J^R zmDf1liEvoBGRvb##~o9XW;O0R%`8pVDvbSuF6SK?xIL^0TOKMZ-zV04MUO`93nn~s z29{5QYuBdE87m1poV|K+I6pNjwbpI*UKiGmaCBL zE@DUVSmRUAQkLCN=a#+T6b=$fmIs9l1_%OnMo0;<&5oGyZI8X_t@JR*Kt`_3sE9|q za0BnSs%yz!K^|4&I&zokw>DTMf)Ll@1<3(}UjI9ZYR#3^l)Ux+3B^ zyv*=hp3H-YJ;$|oC(DCcWm57IM`YV$H1Il-QJ9GHtB3|!681y8KOf!FgnNGEdkG8~ zCM2`Je~z6n2$LD9A1q=HZWl3wMLt%nv@PCs{8?$H;DB$4XyH%6eBkZ;AMF+;9fdls9@!;Y-nZKFN&dYqIEbVbbE z9sWLW1n;YUIZTU}+P|)*ns9Mh2QLRUZH?FPDvd6WE_g)-oE}3G*VJ(mSkC(vzpl3> zenBK^s^k4<#Y+LO!QHJIVvu1*7J!r_yNb+pUA$*O+T!fDkTDrQw<97q2&b~bFgNzu zpaM=WNBZJI?Ay7NcM~Tal_ykn5|TIpyE~Tx^6EcpVjw4wqL%ueAZ2TvX6#%*E&VpN z<2Ym!jX6W5%!@8eW&MptqJM3LJ$zKR@n|+Ze(a(b>qN)l+Sl_>5QoLZ3U_8iPP=9L zqPdS+eZ&q&w~r^f;y8Kr%W|b!eA4>6`qu^q>UT0^PKQK;0oKmA_qVPIcjNYILDtLR z^T$E3wUstsPtDg#&O1)1mo;LXRyb|;&ta?0`w!PsDs}yQ|D4(G(&pd4pT26~sBmxY zJMroHEH5s|Tvz?~_i$rkoo?616CbA9VRc>2Tkjle%Xe3_TVwz+w45R)yY^MV*BiY1 zPgJ|SI0prYYs(0gp=rN*-9L*5H2Tg|{j`quJ?*DZnWABCD+X{wstUhVa z-$21WyT(y+4B{@rIG85%sQ9TTbuzNZs=IyZP&LxXPViYr$R~D*l))BqmvUkJcCpc!PLnN6Fg`wtc0PXgX1U0x zbDQS(S#tHJ5neo^0cCW#p4yN=yD`i0Rw=D;AzH2}^`PV7x1`p>;hT%o>EEPI!wHBwvQ@{~S)O-7avq@?$*El}UA>PU*0lgKmcY zF$%0uHtKyZR)nfzX}(b~R_rlA_gNUL-dOk^X`FF-79+$}8opM!EU%f!bLDlg@U^uj zudjC|g*evgKNbWUb9;6pv3Jj&^?p=Zg+)tPw8uMPA5zJP=5CQ`26#5=D$=gMr5~p@MPBeww$9i~^sCdhI1dE8-o|tC;kov~tZe8*tKb`QJs&wNQLO1ZlIMND% zFqQUulu31xBW@*_z7A6sfyL@87-Rk+RDeZ=XnoDzUS3d-!L;1UElty!N~eWZxj4}+ zV^jrm6cXYpQ8WGig#UW7@!7+}+q8q%^khzkCPd z&#vPB_Wyn)Pq)?eXj566o-9%`^8JPbn=@m+OY~Fg(2!X~ATP-QCf46c@i$xC?zmcu zkZr%m*iV5Q{9R0qnbOBvAEF<%cv#i5(Kd$KqI+gGyI6m%Yjuw|whnbgW$t=L#W!U6q>|oV7Oj)$zx03rl9A+T7hvs!tJU zFO0jtGSc?j*=LK`ZX-!~w2DGAV|K?tMh9AI53sxCo zJndRadzAd_RXVJCO-GHB7=IU#t~CsvVO9Bfe#dY7U;VNwYmsqRo%Fw+2d4aoef_I9 ztrgR|LLybG>D3ZmoxT-jlr}%9XG>^GF7SRVvG!~^>hMoOp}>%>@<@234cl{C>!1*u z3-IBFB4MxZamhYD`er8IS8OrRZTmdvo?$S-3{EVQ$iSh12(Un){nJ9-WDe7OjAi~k zSpM=Mr}`5enIDd>rTe6BXh(ICty%o$zUoB6xyPUHR!cs;>tkiL0F^!+g(5)8foQ3d zMc9uZFdyvhW)H5Y@0s|k^H4->KtqO@njajLMMxc5Z5M{hZ8Ma7NPKyO{a0!7m(6@x z=o}%-sio7rm`0+_&GnW8}GaUWvIXvTT8tD9R0u z1oBkCs6yjPzy(v64_c>$29 z%p$xw2AHSao|g4RRQLMsr{_988~MR>S7R-4S%^sB9*!W5^`egqp$CdbO&y|H;rGA{N&^>$Q= zKL2x`PYpL19|z(ipXiU87i}1akJ;GTrrW-=GN`3o=FQQ0*~9;l@bshxs2Zr%O>0j! z8mT)LTp>hgzY3Uwx3@P4mPW)mTTlsBRw4$#=s{Zk#>qPz?$n73n^Y4eT=X6X+m2w* zs?Edj5WHF(7Ol6I<-3$Ue!gSM%TPXikXl=Qdn3tae__%sWZb|9&`icir9kw|N58t{ z_K_}rac`RZm~4?}yZOzI_;cxFFfmCy*jLQa%7OGY%h8}+DGa{*nf-tm;*TzJVdD}K z0O&LyqH<%xKjDf)^@mP37YxrOTu`|F%0UE12YoP1w^HRJ8a4 z+Nwt;o(u87M}X`GZqOo(tC{Y&w4XQ8Lwp}!fvK--(D z4uM)?QedBfz$?RfNLGNM7BEBvJLF)ydwP00I$}E(fRbzL?k4Qw&Q@@%@cvO@UWu28 zbIksCyYeJ9Bivcf(@*y{$IM7!tGUn9rano=%OS>HO-T0V31?af_7R00W)Zy>?qfGw zTm*1E43vK&0{0Y;L;1e;6VL5iDN`sdXGh^Rg_L&l6r7%JYo2Jm^vV(WbUFm;8Q6*3 zXu@I?c48HFw!|j3rHX)Tk&8Szp6+e`7;5qwUvqHGttG9Z{ABn0&rT{-*q-27Bd8Vr z#_HK=Xz)QmI@QIg#C^D$$A>lz$K%<2fte|z6VY(xLrEfoI#)A%U56e`{7d`xknI-R$<&x~;JO#}ta%I>l{y0}Kh5;e#1ru-A!d|DQ=qlHfB0Q^ zW&};>)xINi#=+bBHw^ex1Jv0HWJ(NN9hP~*WFMgJ_fgBlU7Cp$pC!Io(zMFjk=!uA zjyPi!axa6r{YS8+da>9oUUhn%OU#eH7?-s2eNd5;aKn6WlTA-F*s@Pzn7zt{m4}H6 z6n_{+{I^?fHik>RqWR7I($BO!XDjUHe#>*{ev!TApz)`^w$Gb>NxYNlSD>J^4a|M& zGc{>$`1CjKe+&-o;;z%Mlu7OJDf;~4*__xE!!vz0cQtQsBeyrqK7JRH3}%1J^fpY) zoIQh~6=h+iXJe&**tT`v-M#B+_brn;j?N?Hqp}!Ull|}YlOL9jW#;BcZLVrH%^G)7 zy-l~jI2s7oC#ND;x7$E`kuw;DuDDdvlS!E=chvNLGXJOEVGY-Ou`@r@B{qh%MC9** zv7Q0v6YiiFbGjCpDT~_A7c>_k+cBMIYz~|sxwK0C@eb-F{qrr_%WR{Z4rc#hG>GWtn>`x3pIAfnM*x(1`V238{_EK_ z#>=;&&QY3q&w-)vVKClk^a41$Gj1{7N4VQ_;76yz{B{!ahBkP5Y zt`M;*FBQ=3+grUJK(HHy->%qS^#2~Szlw7Q}r!K0`<;gMe zkGKQt&>Y7h-iA+O({IL1CWv|&c|&m$qAJXnuQJ7{AlSu+41KgsH4PymxW-hykfrA; zZe1Ypxxav?PjPQ2Vuj^P^k(LS4QBI~zz_`oC>V~@g82W|_82seg34+d#4n>e1og&w zh2v6DYllWQxm~eKRNsa2xV3(AUcb(LU0h@3JNbaa)i6ST7o|Gz;r`o*xMSB$KTB^{ zE?84ct~79;Gi+brD_1SJzx9X9bV{15@3Ia`fp&)FGj)HkLXe%MIsGVVunkjduBUD{ z%?4Q<-*cm?=}`|fTDkEx^ZH7zYotEQb^~2ZKZ*v1YRbPqUUj~YcmJ-DXBu*kc7>iM zmztVfyM6avr7b?jj8V??JmD;4o2jE{5b_^5;Aj17V_6x6bDWBbvzTt2rruT{Po3pE z=afrr9SiB)Q)bDMI{D<}z02qTVzjq{vCxo>Wv>{;4lq6b-CW4<#thEJj1$^O>|BJH zSaH9Iyn%teRZ`)6qTaKsV_LWye+v?9lWSh<%cV%%`ISfBk0sgJz+IDaKVagNpV!x* zUV~)5f2?MlG=xpft}seWcY85+kPPX>PkqkL%N82ec{58{%+^8IlFNkun;@EfH@}3p z6z}(DT(0dQZT0{umQS&mtjd`2%X{V?u^?CwIpa_E^`>np5z)En)9(m~yTdz7qHG&* zvg%WoWAa$j#J%M3xqD{m;`FDcS$u>O4ZVP z+wVujggw%t@rs_f6OJUDX2Jy(rswFF=IBTG2q!i67LAwB55^Dvql*{#H&_<5>gM^X zqM{|QG6+-lvcTUS{m)m$N{8fSp3dEO{)m)OIgRFaA98kg0fndoW;`W5f~Z2;@X7|| zkNtCY7IP=7H^jrQ;nTVEYgvF!WW#N#6E8%|K=A5JdMJ(IUUX|+% z`_~^A@~Pp1oFWpw+eDgt>{BJ*xHUGn_%aO4E- z)r&CoXfl;YpoAj^?G~yzFq(;K=ZJ_{Pyc-SII;(>uWQ$4swq7BM@L_-4hfu=3}C^} z%?(?>K7L4#r`7JdBAL^c9lOscqZ9K1?HPFslOM%K?ezhc=+f3Ki%+uevf|Q$`RWh zmz?ai^5fdOPXqn^te*3zT0U2I@#HU{4+irPcdRWayS#C8A9C~Z}JYHoi>K4eRUu@3K z&YJtGy1IxbM}Arc3o&Q_W`uK}e}PIL%o<=${~47dMY2@8%i)z!y?0*fn0dO-y+Z}D%j>F0Ty28UQN(-zp!0^^H-vS{}^{X0*@dD?O z9AEX*-*Cgcaf_^2G<&0vV=J_FuENWS?c4?t3>I8UO3jnTAV`|m+Pg^N5mHU9t-rdB z+w-AD?Ck6WQN1YHnDpOX`L#4*8&eDh1FnLxP4Lx{vqQRYIP5BlFf{_i9>`1ii$>G+IA3vNnyooT^fX)O@hTqPF zhfEeNWr?e$thOd7x zqHGibwGL3?!otEJ$bd1XrmlW^v*3$18ekL-!?}is0gwifo`69y7M?O1g5p$vFVP40 ztPBTKI8@Zrr}qvisR^wE8Bq#O^uf;RaCGZSBeq5%kLXVD0)kqDb=Bnoe+R1srru15 zicMCUmp9~ew1fN;Vvp-z|HAGdmTs2il>UR>le!VF0$(A(75&c*)_91BUWi7ZfTmIY gA1n0#`FJ3g{eu3cf=iGcM0knrE2=Bxqs;>TAInf87|1>6?7i2TYsU9|a~?yKm88*8iBJ&;1iGw@gen4YLmPoW`iOD^Ub)Z;8Gyg; zn955_Ag-?e`_!Bpg+M$+$V!N+yCrYWy6WSuT_JuA7~C;0YoC)B5s{d=Dfv=tE7e)g zws^`$udqh5SaaHDtK`S?>JJUoHM{<}FZ|vFYOH_9c??yZjuG2)HL2rWi0e zIf+Rw^e!~i<77X(#mu^)QyJH_W@&+Y8smIv?N-Sd{tC0EUN`u2fTI-E@7 zDk?Zwnu`2pPb_n$Fdio-CmLE9GA7w$%blvy)=MHp!7K%y0%hKkr4FCBM%s5q6#Ws5LA`?KTm zj)H}S<;fH6m)%@EJYc76bp{RAdfRapJw3gK2eOfGkTLC1tt>66mZzkmqM|t6e*J`H zyr`d1$&{*oJ{{X>YGH1!-{R%I^z}WhQnK6GpW+s?(VO||e6Lm&$jQ^#&A#TH=j+wl z!(-m#%SuXi!lUi%?8tSP>VaW7- zO-)U+=kcGz!_h@BM1SQxgfo%ggJK6y<1pk`wWO+b+K4rh6`&VC&_nJWJeGwu>Eh!Dsw* zn!`EDd+6x5{pw$>F~lyftu@xwVcmMUHz(NH-qa+Zrl!W7bg@1}UmO0z#Iy*DdpTeKJzx4Xy+XyP@AaIkS$mnP%SZaH_n5XAii}%^o^fcoY zm$0xfti7$RZEjA8o_=GsFG)4O3j9P=RMg3TadGirZ2%6bp|LSIIGC82nDIx94E57A zAvn|H!$XCqPg}iC992{z!o#0lU0zJu)yO??cXuBe8giI#DbCA#@#+;CIyx68ry9$( zNjJwB;T~32Yonv1;4o`zYvClkk-HOkVVw~X5!Tk$V(Ejh4r*$N`tq2xw6x^pdx({l z6?S&^Loq%!gp7;~*lK++{mtUVaCM$^d~9sadG6w(X~XdFuqrKW?%<%Zt?gE#@Td6r zc-p6_gZ#lCzQCh;dcx-Fz{fH=0{%cqR#a4c{wzWhCHpNcK3=Aj5)XACO*kzoYH4+q z``O?_p|ny%0~Hk&2?+^ZU81l~N7%#Ny9>YF4%0X|IpJyn0Rbi^rf99M{(c__Q%g%r zB_*YBGQson^XMzxaYXceeEgiOtcmGq{wGi9Sf7HCoHkTtWkcfP#{H0P+DwSq*=>XS zOHf8cMUB8Kw{G~$`S0)V!{#8+mseIMr>BvTksBKu$4O!uU?b|9n!^V448Eb^;iUxy zs$L|UcxeO({YICa$x5pm{>H;uvWG^61qJrA4M&F?Y6%LfJ3FLAL0QS{UfjUIK+u9VcB z;Es){>cYh>g~D$`@o8zkzZW};ii*H>7)&*j^+-raPXFxKT3O}dyjh%yOiuQ?ICU=9 z-rn1rFEtX5R41+dy}!~^S62rqD3aRS+gn^rY*aW!mp&~5_R6AP_c1AHYj>9nAOGu$ z<5mNgg;+WpCFScj<09>HvGT#;;r$-g*7Ng&0oUz`q54-=9t%U6((-b0Gz#&9B?kN+ zcSW%nwMqnBwkJ{rJvEE8(=X?U!+j3Q@Q08O9a=APWKAMu9(x=JAM@6L3T5BDkonS*4B=} zX;);vejqK}|DBYWNcQA~NPVx7@5ODztF?ZE2B-XtU*%@s=t6ZHU5dMFQ@YIi(}ay^ zqK3A1XX@21#L0!co?K|H*aqCadlxZSZYF&+E1A}hM=;j%cM&b7G^4!y_f)m5?Zkp( zy}sZ(|C`9Fc-78Znh0g1X2@-bPZNdUoXFrLcSv|0B_f6qpNEFnDJVpBS0Zd%JVZTU%R&ZqkQoB?gVFtE)LAsbOI~ka%LW;$*0)q~0mBa9Z}pA8n0` zKW7&67#zt{$^5fBTbQg5nJF?VDn@=dt)lz*5ff8US(&oRs)4lGc!>ehLmr;EOImNX zdn8Yk>xcJRuTnGU;1F#_=~fsf?EZi|#kkJy&Nd<$uXM+t5wNI}eH_b_4u=dN$qt^k zv~=@oWp}s4(ZV1KKYj6?)6dUHD}p~47xy9Ri8PDuH(wbT7-+;Awfdx7y3obmBj&z` zP*<|YlN=K6URqir#*w;N{ZT?&Sy{yDEhN$(y4oyptyh<4h(V|okgy=x?SGG;f^bKa z*^Dtrvh!g#G&D?2PVUS$^3c$%4yKDcHCpXVRqM03F0==_?#_g~ef!DtPL5Jafp(nG z_V&&WFG+t8IM~Y1&+ab6CIj#p#inSGTiVz=sbXNHDC1G9(FD4d1AKA|} zB|zFDB;<9N6NseV+1`#m$X*Q@oSaPfw#01Iat^_Qjg2iHbPvhz=TGC6NGPRok00Wp zZtR1h5XO+aRjItEko+<-C_QAieiS2#tRQ1asyG>aZ@g2=^#MN;Wut@}7Z+C%btJQ# zl$2CnUj9BBgoMFZ6QrF;rEP>*9H;2diCn|4gcceVn=a_DBA$o9xaMkJ+p?2iiw$7 z$HEJ|wHBM9kTNI(-DbB}9NmqLABti@3f5#%@U4gJCwj$6PapCS1t3XeB#vZ4UEPz0 z>MU8xTYgcrPZ{v#sBt_!Jzqb>Gg|xdMdI~CK=ILPC`YZO%Q1{v>%Kqeu?u|LSdCf~ zuGZCsY6X1GwO3}uXvMgbQlg`?=pY%&-+8mJxTxBZluc&?&V+!KD0SlW;Zh*ZPu9{x z1MlCze<+$76O&ybZj(J>1`*$7j&my_GBQJdX*gScBa+py=~LX`#YwkA!k;!|a>VCY zW<499CB8AST`DFPmOF_54!-tPUkblgJrDiEhd%-FLV^z^=cqcK_cc1Pd}r9~frN{kIIjJLPSzK9O zo*>{}v6!Yn6J`H_aaUTvarvzR&DnZp`1*NPNEiWYXy@YboG0tUha%-4zb(PS2@p!D z0y?>f#}U!dhXA{MeXq*O*gCy5F9w;Vw@uBcQGOxJG=sQBr=+<_Be}6~X+d@6X^fAuj)`6N_E zo7@l7?_doIbE&r+5dqjt;#kRmgT7_U7Mp-fI{V{eavu&}T=a+97K7Q53k7@T4nKE4gP4)Mt`f&{_mwEp7H zw$5oODnl*xut8>je?LRq>BdTZeSNo?ly0?6w&O}ri(GPie4e%{Flm>ascZINZVo7u zF19e2J*J%aae_h(EKC@fDdc}%Uf%Az3Uqk7y1E6WsyF>beqEmJr2$pj94mAh_6FVs z83Py-o>mjmr=}(^cmcAhlA>Z?SC>l5rIw0Hy4S4yR#S7c221|%8zQ{M50@*2mkU4q zF29TgTMm+Tc9X}_AU!jrn!TT+!2Z@RHZoFGUELgrtH3>fsriue)js0WsU&@ttEF&Z z43Z}wlaryq7y$aAqsK$tdTe8P{`WTkjTxvyq4ycr8QTDJ-|z!(u&HQhZEf8bCKvR$ zg)l9Tw-03Gs_iVh7GwZU;El;)_wNM7wke_bXcGgE_7Wm{I! zMrC1RBj2%V{DnQls;_!K^Vrw(#m+EbcMVS;AiyoEL5TSN{rlme)9IQJGr&_aq_e+& z^LnwGNH_LoB%*TOu2F6#(L_eZvH(o7AB@!eo(1K zT!Zr1cz9S@S*_rpFjUCh^mm$5#|n;KrMs>Mq7g(B7d=KpLpusgRKAiMc95|6LjTOg zUge9zg@b7;C@w#L{sg`WR3a!iSWjE~BXvSlRHaGBodgBVa6c|y51@#Tt&@kwr8mX_ zDMEhHueKQjq6S>o)WU+xeSaCi8<4vw>ih}f8~&ew_I>&!Vxe}3qj*Z}lp9D51l{xL z(*Z5uq0Jr|^*ct)4QG-Uv;xf%VaLt|S`l$^v~fN6H30q40%h;O6wYEz7^KGO0{tFM98bopwR^|or=9j!QtwdthP2-dKT;l;!$sJFL?WBW45p18t^Uod$vd_6KGL`UjUCMnUF$`h4NHr@&QaQ#0yTcUC>f>X zC+Wkog&9iHnWtK+zq=S*E5*ITvjOzC)YZ9xP|L7p?!}RfiFq5!g__z3phb{^w5G{LGQS~$0|V);+Pb^t zPJQA%fS7?2um-pxRmi&mger{S%yaoXrFA7SkB{o;>)}6P5e%)S_g!1K^_7(eA@x#G zQQ0a5pbHRPTwFNJ)M4Y|W;!}o`mDv;3}EWc(2fytn9CGu7TYjuZuKe$W02lJtV|Yx zMCJ}605OmKpjojsWbZ@L1cve3U}8e1n}{@@)BNDzZymvy!Y9kPE4I{C*TGh+fItXZ zdcaY23*HCN39qezma=YDOvlVTTW%J-m@eqe{`~nXD8(%(r6QQ-^N?q%JIo7;)!E-X6CBLcT}LVp4TNQl{t7J(#T5GM z*JTbIH7Qj}1Q!y{^1%rKi~grq0*cf)LnDcKGY$p!g@lCQ^xeVpp%!IoYpbY;j^}+g z=b%+gq>k%pz4)Vd^qy{tZp?=gBICKttIepVLg{pyZ!m?v_w|wT*e7@Q-b{r2ZUZ&n z)N~Pu`{-4H8yak$7RB`1d*j+n&CIAMDL1uB8|c+?K2p~Mtv_AX0}00zZxGSpk32NVCpjuTGYDW@+hidT0%5pP=WTzb7Xbz$|>P zE{=h?!40qZIrsA^Iv?4i%`w|AZ?O{+5zUpa0Rj}IZ>}=qVu$3iHEH^~w_7*`vN*51?tOzGF0&?Zb zqPvU?iYS)tc*!ip{7CN8%*;$6WG;(eLUgTS-Q)cH5KtdsZ2*0savs5AU#<4)RNKUK zQ!^1cIy)Pbn+D2IqhespRauXKU;rAi+uvUc02KEOc5pxgKh<3S_3M}LGhG>dMN|?{DO2f$bo~8G?An%X{)` zp#y0DkHvs0NInp0Jv}{JGxY}z&Rg~n+T`TEaNc_@XZ;-=OP~Tev7bIu04a5TXaZo3 zNkf02l~ZtM`ke0KKY!Z#l6V;ROn{)l{)WvS#yF&@YVCLj9PX;#i@J%B zm+ygM&}wT*7~{NAiY55OkXJ0mdK1K7fcs)s)l<1oul339+y{K}^s88Twg`rT6dg;* z2;E$#XJ;e1W-$pCKp><(kmNh^!p?j^UI^u27(sP>k_?q-D5V2*=1^1TMBBq8hZZD1 zkfqUkMwUYFyH3%Eg@kNOlvAC@0Ri0?PzExGORJ>L!UpgGlECY)oIQC=x#Ulr0gH0ujl zsi~L0z9&Yox&1Qk)OAkOk+L`eG3jS(t?>_WkP5rU=%DU&z7OgyC@27VDbwrgD_2*o zQ~?Pil!8Y>9_rLMv-PiN`S}|>PhP($#X6#xST96cs@$vj?@ixcIq@%-im=N2e_! za5gJG6rmZQd-YjX#;_(KiMY7bXfwGuI%bR*0>U>o{`rwY{PJ|G6cG4zCX0@SWC46l z&D%>?POcmBDkMWe0RfMr%}&$u^|qN%qeIhjkdmf*dyA%!%0WD4U|^u4>gew;0Rbo{ zCx@YpP9}SJdwUy-Bw4sL=8Bx6VsTN?;r_nrq@|>!BnaFHZ9P3LPghXzEuEa43=KiV zl;4|c<|R?`@PI0v-Pq`fKJY7(r)TY8O!_8JOVGm1t*oXeCJy)J(+1X{GZGsY*Vxc7 z>{(P$un7tQ35N7aCO8QEsVXm5Nl=3)ZiBL#pPx^H@oj9Z8mdWXGX)+hlnzh>H8km& zn1J;Ka!&e zO-o=SBO@dA`X#29!_b{OKlg&}8_}Jmyi!R!KeK(Pqxk z+}sRIO}FDqI#?2DJWg0=YHBJ41;t)sa}9fSuSA|}cZl+Q`9pOpFwG$zEqsiqU(H|n zV9c=un=*iig^P=ep57Y#9(V^N<2I(Z_xvxXvry7=GQkpu2Jvv(Mon(zEghnH?8cO% zccIRLBya1;k0GYm4Nx4CF!(E!7{QAV&!qE)esYNgV2Ry9FNND(MkxhY48>)&GkHtz!BRL0vR6Gc&NOm!%c6|2Ftq_(wcOGU8VHo;H@4M-2$poL2pH4GlIesFEtT zQUy0l?(Wt?gs1Skg7l$IKT{xM5!>vYUwEvw2P+*AzCFRxS z`N=89t&O&~*i=qD_uZmeq)-qu80m}gDF3av(`GZ|<9L4BlRq?%qBi-lzzWQ2YEJ|1 z`J?xIEnn1m*K$)7g<_P0>qr7F{NUX~W;o)C2S=crWBCzdx?Vl)3`PgPwB{7b^@7u-?EU~@`7#o0g?h&cv4uG+&7zsL@ z5J+)cfUUS}f4I53)6?AX_`Mhi5Ca4^VJPQNue;1Eg2uwb7UG^6UgWx8;0VkDwv#2|6ZVogJW|P(|hCuSg$&)Gy4(&yPv+q)ekw z6S^{Y{6VLS>$aa{82)=w{u)59>FMc^#z2L4b#_KaN3X7}ov*USHE@HD zSen}5k`l;ZLO$niAhskVOhOPrQxvo- zeQ`GcXrS?fG)Ebc2lj#;1C#p>74^;Q*A380$ycLA0QNOeSC0+}=>iFX2NROZvd1B{QA1L5ebZNb0{;oxOfL{z3~XD zietS1RNwaYjEoF1cB`VoLR%=Q=rP={Eu*dj#==Bf+J$bGEJiXD8nW41u& zaw9iwm=z@2jkPuD<9!vpnCNI~JXDyxI0P+_pO+WubHH8P)&3N{ov*Ozeq%PoCph$L z>ALnuj$#r3w2|9iOkaWp(*}IC+&Y5LU%9y4@dH4}631`;9SiZo)s-Af0Gi8pU? zh}zdfEWptkk$@-SUbOMe3p%=Q4Lf}5EmHvIPbn@p!Mfxr)w zG+OQ%7=VsLc{M1og~9}~?l?C7A|kEV6%U%GOtocYbWBX@`GI|wBh>-`;-Jw2Ee?oJ zTPdlppkvwiRBpb6@()u18qLeVd;|mqZ{E0ZO@2VDZqSAZgC5hQ9k(c!SUQO1NFsoM znw!1*jy82)$pugcJ8aMEoc|&cHm_?j6GchC`gL$%J613TiKw*cIvAl-mSwcIvI6|! zSxYsfAEY zaAIf6QBM&+4Q6Y&sAMaqTo`6wWG(3cwL#cTRpkS&1T=@hdhh^%L!WFE4bo>&g+YqY z2`{M5<9#HC`00$sC{U9yZ~H(f9gAW#i%GABiJJP$#6%rj3*ZOb{$i(g9>8v`X=fn=2JmEi`^k=y)T0!<@Rro09q!sp<^uvRFS6E)A1 zGCJ#x+W=wXgIsh?A*H4FU_6OT!&Ze;K0qoJ>6WN^i>ztm*#Pw4wR%-9VFFxS)%1wQe${R26OpD@N(QCs^B`G6<~n@UO{ z@v-&a7b*G#w%o_q48Qn};{-z5dFudPSxX+s2T%`;<~e)5+(!3CetnH;p814eA^y&` zcklji8mARQ;rak-DAcl(t&$cMu@w{hVv|+zbS691$O{J{x?^G5=M($UcFM& zX@+^5PoF+_b;-K-0@=t>pi$F#>r|jq11WXd-H&<~Un6}j#2sLzJQKd_#&BRp9ta>q zYBG#498?UQ$-}LA->cclNq5jnKp9b0*jF_)yo9*}0P*33oH;OL0KF?DKag2KJq2um zPA)X_?OX0DeOUxP*8n~RqGPoEdu8$8A!ftze}ycI)-i!vs3KyMk}$buHiiHu_Mm%? z5eyGYah;`4OGtoTbkq9!GYFaM?!d;d#g8H#L>XkE$jC@&k8&jRf&|ka&rZe1m-uaI zw$(Q+HS#(5I7kgbFxyAf#5t-DP0U{nfie1g0f2?yNOqYo*6F=hBWUALl?_O&gGMJD z4v4;pYyA{P)eiT;n?S>W5>A9zc02*PxDhe}0vwb{19f$EZS4o-)3&;ry zE})5kly?ptwB6lZpmeqNT&f?W`<`Im5dFo6Nf*{)F63C#A`ZFI24e2Zw{Jb>9H)0B zpr?Ge4}VXQ6d!`WfVbTcj9 zjXqR7bbb8T9KFR8B|?$kT*n+Zn(s2!RDW}0m<80T|`RTK-<(FqWXKo|s3 zklkfl+sMcW@riu&7-YI+Vc$7u)%ZLd0?Z8*8(J#Bsi9!!yJ>cS*bf6><8^zzWsh5B zYc*t2C1RzLD^eRZ!=^`XDZSSJkCPDp%$g2Dr=2ai`>i!hJzgUwC1+0r3qnu6PYC-) z*H4#S)(%VvMLIt)ATo}c`&V2Z8uo~&4FhYNk^8$R^}VU zt#k?MttRk58~mz|C_UZXuiv~GNZ}vPQ6$C>yPh8oa;T)x{$sB|Oxv}@e~Nw+$WG;_ zz%vwp1dLcHusvxkiH_Qw`!vnLary#Zp3m#e`(NK~vucpC$!TL4$__x&YiKSdEzRTg z2Hk3VT+&d-Fd{PVzk_wweTLm~okcgtK$)zmt|o=mG2Uw{xadwc%% z!vAH`y2Cyr%ZVxYIO#AR8Xk^$0a5T{V`GC0@6W*jF~5sl2V*g5aL*QpGLCz{*Ixw# zyVN%0s(2%X_jiG4{|_ZMdv>OXHjV;F!F{d2Rs1oCpQKn=gTJ2J+-@CL{@r1_zt8bs z?b#R>3;P8|yF3^W2G;o8*47gs4M^qOUP-!bY?Y7gXVaNZBW3rnuPH--GH!OD#4{Tk zBIxr%cJ1!&hCqjo<72O+srEfVvA<_>QHJ9Fk3U%oUHg*tntK2fej%hh-N|T|@|5QI z)gO_x5y_uZ|GS&o= zFgJ(1zm_G&*!(0=K5y}rop(~{n3Vj-pqC#=P*T5p($s$;?~pe3j~geFypah&eBR@& zf;}|p7yai6%t4VTgg1z(_FNXvwEhdroK9u%@%VrbEY0pj%Z~rq<}UjuiSI7IX%u@O zg(xnDgg`7LqTGZTA7dPj3_OPtX%vdAFJ(9sv~1d%(OL_#J25U9FjavP2cxVjk59;`dLt*k|;fO@lapmoQ%cp*zPk9UBQ<}aai<#w4 z_>b>@yd*TGq<&w2o+>UeL3b^Z#9t!?iVo_K<1&?N?L-6@`6(@aoz?j?xQibdMC zZ;`Py1ZkmSi+z7V=maZ@nxmqAS(|;E_rDeSJn*2TcF$?DH_09k-};vePEFR~RtjR$ zA!ZKUsE+?VQt-0`3iUwrxbr8v#ejc1%tDSwK|&~;e!zx2av$yA$I`!ovgBuv=du~x zAq|g2upg0%DDJK*`%?E1x1{_|HGeCp@`})Beu!7t+iuwPUPo`m0vD)NHY|xwlvNx- z7@F18WxCDSDrkE>yXeI$DI5w+P**}Il@c+}>iqwGR0=+N$WG7hhv%TPazYhn;2qIYx&}KusczSWvznF&@Cg{H>4wuDTO}(%grl@+juf zkGwM3)^ZCKg7WK=yVL#Ne8v(`l zvS|_b9U>WwXg4|N;O$c@x{#0G0yJ|Zl9flKDB4Vuf)p7}Z3&bUORg~}FGsWliql@+ z*SNdaS`ztp^T@xA4QO{EvCk2zQjY$$Z}-IxnEV(XI~vTf^Wc zRHY(0#cGqYulP{^yGWVx@bRN=3w0@-S;zFrLBdB`m(gL8e4*DD`VcBpQX@R3B6un` zV^MT!Sdwc5CBQT37_L`pAp-6sM*7w^!I|u~4ZcwQ_MC;aPb`ZVcyg9ePz=f$FHRhn z8(9=;q(lE6SJkq>oKZNaY9CD=iIH=@mi>IN$hRgIH8^y?G)=Qbc34s!4(RYZL@FYH z4@+xnj*eQ}ZbTF}w14}{*%r1~ULbp&#FOtKPmZLP5`IJjZu*p^5g9;N91N?G3BSjJ z{lSU0@{4k~6a`km$>2W|n5&Y0350ir;av_C?IHj3RsSL~gJdbgo%mQ6i-@&qa(q~> zAlw-RkvStvbC=d|JonA0-GstWj4%*X-SBHe7(RgbMrgX4dYvg7Y8`Qfx?yw1q6_JP!bB#&s?SD zueTD)GWr>Dq)0MFqtL?bzv$7!-Rn8mCDu*E-o2n27l<7*GjI{X4EkJi_|^KqhqGVj z20shYcg+JU4qJaeiY0b_=goMFt4bjha|7}uyZF<9KlBxX^esQ{NKy2uV*aj zRgv8X6eQJQ_m>7(jXTiU=x98axM`5EfHz^?8v518of!C>aPC`S3lpVx-xf)Y?B2rS z1PZVv`?EPd6m+m!zjeA~d~&ja$|y{spI=<8^(EE9Xcs^T_Jnd1AH-5)JZ#wCT>D*u z*7-O~eVzLB%j+%Q0|*cV;(1`;P$}WPuL~W)1Wek4@Wh<@%dBJejb{CVFvS$&Ksy2l zrD?LxtL^FsoLU6saOp7pb3^zx0uvw&RbZ0Ub$wq=di@;Ue79gfA{0VJSnfS#^gaDV zc~b6@d2M?XKqa^Q0C7YA3~>#t7dp5U>m6Y{2?i@qtJBivf$SH@Ac*XXZWe`GrFlNW zC?CrUuPQ21I8n`e`B!~mNRcM3gesmXrE>x&Z<{BJ;(wHOzz0i?_0&4@QBV0p%0QXK zleDn10x0DQU%9wOF