J'ai décidé de démarrer Keras pour de bon, j'ai donc écrit le code pour construire le modèle de prédiction de XOR. J'aimerais créer des modèles complexes tels que Graph Convolutional Networks à l'avenir, je vais donc commencer par l'API fonctionnelle.
Comme ça. Sans la normalisation par lots, il était facile de tomber dans une solution locale, alors je l'ai ajoutée. Dans de nombreux cas, la couche finale était une couche linéaire, mais c'était un problème de classification 0, 1 et je n'étais pas convaincu, j'ai donc choisi la fonction sigmoïde. Le nombre d'unités dans les deux couches intermédiaires est fixé à huit.
sample.py
import tensorflow as tf
from tensorflow.keras.models import Sequential, Model
from tensorflow.keras.layers import Dense, Input, Dropout, BatchNormalization
import numpy as np
def main():
x_input = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
y_input = np.array([[0], [1], [1], [0]])
input_tensor = Input(shape=(x_input.shape[1]))
# x = Dense(units=32, activation="tanh", kernel_initializer='random_normal')(input_tensor)
x = Dense(units=8, activation="relu", kernel_initializer='random_normal', use_bias=True)(input_tensor)
x = BatchNormalization()(x)
x = Dropout(0.1)(x)
x = Dense(units=8, activation="relu", kernel_initializer='random_normal', use_bias=True)(x)
kernel_initializer='random_normal', use_bias=False)(x)
output_layer = Dense(units=1, activation='sigmoid', kernel_initializer='random_normal', use_bias=False)(x)
model = Model(input_tensor, output_layer)
model.compile(loss='mse', optimizer='sgd', metrics=['accuracy'])
model.summary()
#Apprentissage
model.fit(x_input, y_input, nb_epoch=2000, batch_size=2, verbose=2)
#Prévoir
print(model.predict(np.array([[0, 0]])))
print(model.predict(np.array([[1, 0]])))
print(model.predict(np.array([[0, 1]])))
print(model.predict(np.array([[1, 1]])))
if __name__ == "__main__":
main()
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_1 (InputLayer) [(None, 2)] 0
_________________________________________________________________
dense (Dense) (None, 8) 24
_________________________________________________________________
batch_normalization (BatchNo (None, 8) 32
_________________________________________________________________
dropout (Dropout) (None, 8) 0
_________________________________________________________________
dense_1 (Dense) (None, 8) 72
_________________________________________________________________
dense_2 (Dense) (None, 1) 8
=================================================================
Total params: 136
Trainable params: 120
Non-trainable params: 16
[[0.09092495]]
[[0.9356866]]
[[0.90092343]]
[[0.08152929]]
Je l'ai essayé comme point de départ cette fois, mais j'aimerais essayer diverses choses telles que le réglage des paramètres et la visualisation.
Recommended Posts