8 Dicembre 2020 di Daniele Frulla
Le reti neurali svolgono oggi un ruolo fondamentale nella società. Sono la base con le quali sono costruite le piattaforme di Machine Deep Learning come Google, Amazon, Facebook ed ogni altro assistente basato su intelligenza artificiale.
Un rete neurale o neural network non è altro che un insieme di neuroni artificiali che sono connessi insieme. Per dirla in poche parole, un grafo è ciò che rappresenta questa rete.
Il primo neurone artificiale fu teorizzato da Warren Mc Culloch e Walter Pitts e proposto poi da Frank Rosenblatt nel 1958.
Si voleva in questo modo simulare la funzione di un neurone reale.
Si prendevano n ingressi, si sommavano ognuno col proprio peso w e generavano una uscita.
Ormai sono passati diversi anni dal lontano 1958 e si sono sviluppati framework che aiutano a creare vere e proprie reti neurali. Uno di questi è keras (in python) installabile tramite tensorflow (progetto Google).
Come esempio simuliamo al funzione XOR attraverso una rete neurale.
X1 | X2 | Uscita |
1 | 1 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
0 | 0 | 0 |
Come si vede in tabella la funzione XOR è semplice, tuttavia per fare in modo che la nostra rete neurale funzioni occorrerà addestrarla.
Scriviamo il primo file model.py che costruisce un modello di rete neurale in Keras.
import tensorflow as tf
class XorModel(tf.keras.Model):
def __init__(self):
super(XorModel, self).__init__()
self.dense1 = tf.keras.layers.Dense(32, input_dim=2, activation="relu")
self.dense2 = tf.keras.layers.Dense(1, activation="sigmoid")
def call(self, inputs, training=False):
x = self.dense1(inputs)
return self.dense2(x)
Ora possiamo scrive il nostro file di addestramento e previsione dell’uscita:
from .model import XorModel
import tensorflow as tf
import numpy as np
# Ingressi ed Uscite
x_train = np.array([[0,0],[0,1],[1,1],[1,0]])
y_train = np.array([0,1,0,1])
model = XorModel( )
model.compile(
loss="mean_squared_error",
optimizer="adam",
metrics=tf.keras.metrics.BinaryAccuracy(
name='binary_accuracy', dtype=None, threshold=0.5
))
# Addestro il modello
model.fit(
x_train,
y_train,
epochs=500,
verbose=2
)
x = np.array( [[0,0],[0,1]] )
y = model.predict(x)
print(y)
In uscita avremo un array con i valori approssimato di 0 e 1. Infatti il valore in uscita è una predizione di possibilità.
Sicuramente un esempio semplice, ma rende l’idea di quello che si può fare con le reti neurali e Keras, un ottimo strumento per realizzare le proprie strutture neuronali artificiali.
Lascia un commento