Я создал набор данных, содержащий все точки, содержащиеся в круге, помеченном как 0, и все точки вне его как 1. Я хотел научить простую нейронную сеть, если она может изучить проблему двоичной классификации.
Теперь я имел дело с проблемой XOR.Это вдохновило меня на использование двух скрытых слоев.Поскольку окружность - это коника, подобная паре прямых линий, используемой в задаче XOR, это имеет некоторый смысл.В противном случае я бы пошел на один скрытый слой.Там нет проблем.У меня возникают проблемы при интерпретации варианта использования количества единиц / нейронов в каждом слое.
Очевидно, я экспериментировал таким образом.
def layer_experiment(first=2,second=1):
print("Layers' count : ",first," ",second)
# create model
model = Sequential()
model.add(Dense(first, input_dim=2, activation='relu'))
model.add(Dense(second, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
# Compile model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
# Fit the model
model.fit(data[:4000,[0,1]],data[:4000,2],epochs=30, batch_size=20, verbose=0)
scores = model.evaluate(data[4000:,:2], data[4000:,2])
print("Scores : ",scores)
predictions = model.predict_proba(data[4000:,:2])
# predictions = predictions.argmax(axis=-1)
predictions = [[migrate(x[0])] for x in predictions]
dd = np.append(data[4000:,:2],predictions,axis=-1)
df = pd.DataFrame(dd)
fg = seaborn.FacetGrid(data=df,hue=2,aspect=1.61)
fg.map(plt.scatter,0,1).add_legend()
Мне было интересно, почему изменение различных параметров вызвало изменение графиков или, более конкретно, гиперплоскостей, разделяющих данные.Больше кода здесь: https://colab.research.google.com/drive/14HYdrUxvc5REUdToFkfZQxElPq_0l7-g