【Python】 KerasでXOR回路を作成する
Kerasを使ってXOR回路を作成するというのは実用性はありませんが、自分がKeras初心者のため「とにかく簡単なサンプルが欲しい」と思い作成しました。まず、XOR回路は下記のようになります。 ここでは入力に対して出力が下記表のようになるよう、図中のの値を調整します。
0 | 0 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 0 |
これをKerasを使ってプログラムを書くと以下のコードとなります(コメントを日本語で書くとエラーが出たため、英語でコメントを書きました)。
# -*- coding: utf-8 -*- import numpy as np from keras.models import Sequential, model_from_json from keras.layers.core import Dense from keras.optimizers import RMSprop # Input data X_train = np.array([[0.0, 0.0], [1.0, 0.0], [0.0, 1.0], [1.0, 1.0]]) # Teacher for input Y_train = np.array([0.0, 1.0, 1.0, 0.0]) # Build model model = Sequential() output_count_layer0 = 2 model.add(Dense(output_count_layer0, input_shape=(2,), bias=True, activation='sigmoid')) # Need to specify input shape for input layer output_count_layer1 = 1 model.add(Dense(output_count_layer1, bias=True, activation='linear')) model.compile(loss='mean_squared_error', optimizer=RMSprop(), metrics=['accuracy']) # Start training BATCH_SIZE = 4 ITERATION = 3000 history = model.fit(X_train, Y_train, batch_size=BATCH_SIZE, nb_epoch=ITERATION, verbose=0) # Evaluate model X_test = X_train Y_test = Y_train score = model.evaluate(X_test, Y_test, verbose=0) print('Test score:', score[0]) print('Test accuracy:', score[1]) # Save model model_file_name = 'xor.json' model_json = model.to_json() with open(model_file_name, 'w') as file: file.write(model_json) # Save weights weight_file_name = 'xor_weights.hdf5' model.save_weights(weight_file_name) # Load model with open(model_file_name, 'r') as file: model_json = file.read() model = model_from_json(model_json) # Load weights model.load_weights(weight_file_name) # Predict using trained model y = model.predict(np.array([[0, 0]]))
とても短いコードで記述することが出来ました。Kerasはこれから少しずつ勉強したいと思います。