Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- from keras.models import Sequential
- from keras.layers import Dense
- from keras.utils.vis_utils import plot_model
- # binary representation of the number
- def binary_encode(i, num_digits):
- s = "{0:b}".format(i).zfill(num_digits)
- return np.array([int(x) for x in s])
- # one hot encoding for even and odd labels
- def one_hot_encode(i):
- if i % 2 == 0:
- return np.array([1, 0]) # even label
- else:
- return np.array([0, 1]) # odd label
- NUM_DIGITS = 10
- train_X = np.array([binary_encode(i, NUM_DIGITS) for i in range(101, 2 ** NUM_DIGITS)])
- train_Y = np.array([one_hot_encode(i) for i in range(101, 2 ** NUM_DIGITS)])
- # model
- model = Sequential()
- model.add(Dense(10, input_dim=10, activation="relu"))
- model.add(Dense(5, activation="relu"))
- model.add(Dense(2, activation="softmax"))
- plot_model(model, to_file='model_plot.png', show_shapes=True, show_layer_names=True)
- model.compile(loss='categorical_crossentropy', optimizer='adagrad', metrics=["accuracy"])
- model.fit(train_X, train_Y, nb_epoch=20, verbose=1)
- # one hot prediction to text
- def prediction_to_text(i, prediction):
- return ["even", "odd"][prediction]
- # try to predict even or odd for numbers from 1 to 100
- numbers = np.arange(1, 101)
- test_X = np.array([binary_encode(i, NUM_DIGITS) for i in numbers])
- test_Y = model.predict_classes(test_X)
- output = np.vectorize(prediction_to_text)(numbers, test_Y)
- #print('predicted', output)
- # correct answer
- answer = np.array([])
- for i in numbers:
- if i % 2 == 0:
- answer = np.append(answer, "even")
- else:
- answer = np.append(answer, "odd")
- #print('correct', answer)
- # evaluate
- evaluate = np.array(answer == output)
- print(np.count_nonzero(evaluate == True) / len(output))
Add Comment
Please, Sign In to add comment