Я готов создать нейронную сеть на python, используя Keras, которая сообщает, является ли число четным или нечетным.Я знаю, что это можно сделать разными способами, и использование NN для этого является излишним, но я хочу сделать это в образовательных целях.
Я сталкиваюсь с проблемой: точность моей модели составляет около 50%, чтоозначает, что он не может определить, является ли число четным или нечетным.
Я подробно опишу вам шаг, который я прошел, и, надеюсь, мы вместе найдем решение:)
Шагодно создание данных и меток: в основном мои данные представляют собой числа от 0 до 99 (двоичные), а метки - 0 (нечетные) и 1 (четные)
for i in range(100):
string = np.binary_repr(i,8)
array = []
for k in string:
array.append(int(k))
array = np.array(array)
labels.append(-1*(i%2 - 1))
Затем я создаю модельэто сделано из 3 слоев.-Слой 1 (вход): один нейрон, который принимает любой массив numly размером 8 (8-битное представление целых чисел) -Слой 2 (скрытый): два нейрона -Слой 3 (выход): один нейрон
# creating a model
model = Sequential()
model.add(Dense(1, input_dim=8, kernel_initializer='uniform', activation='relu'))
model.add(Dense(2, kernel_initializer='uniform', activation='relu'))
model.add(Dense(1, kernel_initializer='uniform', activation='sigmoid'))
затем я обучаю модель, используя binary_cross_entropy как функцию потерь, так как я хочу двоичную классификацию целых чисел:
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
, затем я обучаю модель и оцениваю ее:
#training
model.fit(data, labels, epochs=10, batch_size=2)
#evaluate the model
scores = model.evaluate(data, labels)
print("\n%s: %.2f%%" % (model.metrics_names[1], scores[1]*100))
И вот где я потерялся из-за этой 50% точности.
Я думаю, что я что-то упустил из-за реализации NN или Keras, поэтому любая помощь будет принята.
Спасибо за чтение
редактировать: я изменил свой код в соответствии с комментарием Стефана Фалька