用神经网络和ReLU(Keras)逼近正弦函数

时间:2017-06-23 08:17:00

标签: python machine-learning neural-network regression keras

我试图用神经网络(Keras)近似正弦函数。

是的,我阅读了相关帖子:)

使用四个隐藏的sigmoid神经​​元和一个线性激活的输出层工作正常。

但也有一些设置提供了对我来说很奇怪的结果。

由于我刚刚开始工作,我对事情发生的原因和原因感兴趣,但到目前为止我无法理解这一点。

<script src="//code.angularjs.org/snapshot/angular.min.js"></script>

<div ng-app='app' ng-controller="MyController">           
  <table style='float:left;border-right:0' class='left'>
      <thead>
        <tr>
          <th>School</th>
          <th>Class</th>
        </tr>
      </thead>
      <tbody>
        <tr ng-repeat='item in base' style='height:{{item.w*30}}px'>
          <td>{{item.school}}</td>
          <td>{{item.cl}}</td>
        </tr>
      </tbody>
  </table>

  <table style='float:left' class='left'>
      <thead>
        <tr>
          <th>Student</th>
          <th>Student-number</th>
        </tr>
      </thead>
      <tbody>
        <tr ng-repeat='item in students' style='height:{{item.w*30}}px'>
          <td>{{item.name}}</td>
          <td>{{item.number}}</td>
        </tr>
      </tbody>
  </table>

  <table>
      <thead>
        <tr>
          <th>Books</th>
        </tr>
      </thead>
      <tbody>
        <tr ng-repeat='item in books track by $index' style='height:30px'>
          <td>{{item}}</td>
        </tr>
      </tbody>
  </table>

</div>

这是四个隐藏神经元(ReLU)和线性输出激活的结果。 4 hidden neurons (ReLU), output activation: linear

为什么结果采用ReLU的形状?

这是否与输出规范化有关?

2 个答案:

答案 0 :(得分:5)

这里有两件事:

  1. 您的网络非常浅薄。只有4个具有relu的神经元就会出现这样的情况,即这对神经元完全饱和的可能性非常大。这可能是您的网络结果看起来像这样的原因。尝试使用he_normalhe_uniform作为初始化程序来解决此问题。
  2. 在我看来,您的网络对于此任务来说太小了。我肯定会通过向网络中添加更多神经元和图层来增加网络的深度和宽度。如果sigmoid具有与sin函数类似的形状,则这可能会正常工作 - 但在relu的情况下,您确实需要更大的网络。

答案 1 :(得分:1)

尝试添加更多隐藏层,每层都有更多隐藏单元。我使用了这段代码:

model = Sequential()
model.add(Dense(50, input_dim=X.shape[1], activation='relu'))
model.add(Dense(50, input_dim=X.shape[1], activation='relu'))
model.add(Dense(1, activation='linear'))

并获得以下结果:

enter image description here