选择神经网络中用于圆锥数据分布的层数

时间:2019-05-10 11:21:55

标签: python tensorflow keras neural-network

我创建了一个数据集,该数据集包含一个圆中包含的所有点(标记为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

1 个答案:

答案 0 :(得分:0)

五个唯一点定义了一个与平面(https://en.wikipedia.org/wiki/Five_points_determine_a_conic)相交的圆锥形,因此,如果每个神经元对一个点的两个坐标进行建模,则可以尝试10。