小编Cam*_*ium的帖子

并发修改例外

我目前正在研究一个多线程应用程序,偶尔也会收到一个同时修改的异常(平均大约每小时一次或两次,但是看似随机的间隔).

有缺陷的类本质上是一个map的包装器 - 它扩展了LinkedHashMap(accessOrder设置为true).该类有几个方法:

synchronized set(SomeKey key, SomeValue val)
Run Code Online (Sandbox Code Playgroud)

set方法将键/值对添加到内部映射,并受synchronized关键字的保护.

synchronized get(SomeKey key)
Run Code Online (Sandbox Code Playgroud)

get方法根据输入键返回值.

rebuild()
Run Code Online (Sandbox Code Playgroud)

内部地图偶尔重建一次(〜每2分钟,间隔与异常不匹配).rebuild方法基本上根据键重建值.由于rebuild()相当昂贵,我没有在方法上放置synchronized关键字.相反,我正在做:

public void rebuild(){
  /* initialization stuff */
  List<SomeKey> keysCopy = new ArrayList<SomeKey>();
  synchronized (this) {
    keysCopy.addAll(internalMap.keySet());
  }
  /* 
    do stuff with keysCopy, update a temporary map
   */    
  synchronized (this) {
    internalMap.putAll(tempMap);
  }
}
Run Code Online (Sandbox Code Playgroud)

例外情况发生在

keysCopy.addAll(internalMap.keySet());
Run Code Online (Sandbox Code Playgroud)

在synchronized块内.

建议非常感谢.请随意向我指出Effective Java和/或Concurrency in Practice中的特定页面/章节.

更新1:

消毒堆栈跟踪:

java.util.ConcurrentModificationException
        at java.util.LinkedHashMap$LinkedHashIterator.nextEntry(LinkedHashMap.java:365)
        at java.util.LinkedHashMap$KeyIterator.next(LinkedHashMap.java:376)
        at java.util.AbstractCollection.toArray(AbstractCollection.java:126)
        at java.util.ArrayList.addAll(ArrayList.java:473)
        at a.b.c.etc.SomeWrapper.rebuild(SomeWraper.java:109)
        at a.b.c.etc.SomeCaller.updateCache(SomeCaller.java:421)
        ...
Run Code Online (Sandbox Code Playgroud)

更新2:

感谢大家到目前为止的答案.我认为问题在于LinkedHashMap及其accessOrder属性,尽管我并不完全确定atm(调查). …

java collections concurrency

8
推荐指数
2
解决办法
1万
查看次数

具有softmax激活的神经网络

编辑:

一个更尖锐的问题:在我的梯度下降中使用softmax的导数是什么?


这或多或少是一门课程的研究项目,我对NN的理解非常/非常有限,所以请耐心等待:)


我目前正在建立一个神经网络,试图检查输入数据集并输出每个分类的概率/可能性(有5种不同的分类).当然,所有输出节点的总和应该加起来为1.

目前,我有两层,我设置隐藏层包含10个节点.

我想出了两种不同类型的实现

  1. Logistic sigmoid用于隐藏层激活,softmax用于输出激活
  2. Softmax用于隐藏层和输出激活

我使用梯度下降来查找局部最大值,以便调整隐藏节点的权重和输出节点的权重.我确信我对sigmoid有正确的看法.我不太确定softmax(或者我是否可以使用梯度下降),经过一些研究后,我找不到答案并决定自己计算衍生物并获得softmax'(x) = softmax(x) - softmax(x)^2(这会返回一个大小为n的列向量) .我还研究了MATLAB NN工具包,工具包提供的softmax的派生返回了一个大小为nxn的方阵,其中对角线与我手工计算的softmax'(x)一致; 我不知道如何解释输出矩阵.

我运行每个实现,学习率为0.001和1000次反向传播.但是,对于输入数据集的任何子集,我的NN为所有五个输出节点返回0.2(均匀分布).

我的结论:

  • 我相当确定我的下降梯度不正确,但我不知道如何解决这个问题.
  • 也许我没有使用足够的隐藏节点
  • 也许我应该增加层数

任何帮助将不胜感激!

我正在使用的数据集可以在这里找到(处理过的克利夫兰):http: //archive.ics.uci.edu/ml/datasets/Heart+Disease

matlab machine-learning neural-network softmax

2
推荐指数
1
解决办法
1万
查看次数