我有以下代码,来自PyBrain教程:
from pybrain.datasets import SupervisedDataSet
from pybrain.supervised.trainers import BackpropTrainer
from pybrain.tools.shortcuts import buildNetwork
from pybrain.structure.modules import TanhLayer
ds = SupervisedDataSet(2, 1)
ds.addSample((0,0), (0,))
ds.addSample((0,1), (1,))
ds.addSample((1,0), (1,))
ds.addSample((1,1), (0,))
net = buildNetwork(2, 3, 1, bias=True, hiddenclass=TanhLayer)
trainer = BackpropTrainer(net, ds)
for inp, tar in ds:
print [net.activate(inp), tar]
errors = trainer.trainUntilConvergence()
for inp, tar in ds:
print [net.activate(inp), tar]
Run Code Online (Sandbox Code Playgroud)
然而,结果是一个训练不好的神经网络.在查看错误输出时,网络会得到正确的训练,但是它会使用'continueEpochs'参数来训练更多,并且网络再次表现更差.因此网络正在融合,但没有办法获得训练有素的网络.PyBrain的文档意味着返回的网络被训练得最好,但它会返回一个错误元组.
当我将continueEpochs设为0时,我得到一个错误(ValueError:max()arg是一个空序列)所以continueEpochs必须大于0.
是否实际维护了PyBrain,因为它似乎在文档和代码方面存在很大差异.
我有以下问题,我无法解决:
我有不同的类,它们都实现了一个名为的接口IProtocol.的命名,现在,SimpleProtocol,ParallelProtocol.我想坚持这些对象,所以我使用JSON.NET,一切正常.除非我试图反序列化它们,当我知道它们应该是什么类型时,它会完美地工作,例如:
SimpleProtocol p = JsonConvert.DeserializeObject<SimpleProtocol>(myJsonData);
Run Code Online (Sandbox Code Playgroud)
但是,我现在处于需要加载JSON数据并IProtocol返回的情况,但可以理解的是,JSON不允许这样做; 例如,这样的事情并没有工作:
IProtocol p1 = JsonConvert.DeserializeObject<IProtocol>(myJsonData); // does not work
IProtocol p2 = (IProtocol)JsonConvert.DeserializeObject(myJsonData); // also, does not work
Run Code Online (Sandbox Code Playgroud)
所以,查找API我发现了这个方法签名:
public static Object DeserializeObject(
string value,
Type type
)
Run Code Online (Sandbox Code Playgroud)
看起来就像我需要的东西,所以通过将字符串中的类型持久化并检索它来尝试:
// test
Type protocolType = Type.GetType("MyApp.Protocols.SimpleProtocol");
IProtocol p1 = JsonConvert.DeserializeObject(myJsonData, protocolType);
Run Code Online (Sandbox Code Playgroud)
我得到一个错误,这是不可能投下Newtonsoft.Json.Linq.JObject到IProtocol.这很奇怪,我不知道如何解决这个问题.
在泛型方法中传递Type对象是不可能的,所以我基本上被困在这里.有没有办法解决这个问题,最好不要使用反射?在我看来,这是一个完全正常的用例.
我能做什么,但对我来说似乎有点"脏",是创建一个简单的包装类,它包含一个IProtocol实例并序列化/反序列化?
我用Java编写了一个神经网络,现在正在研究反向传播算法.
我已经读过,权重的批量更新将导致更稳定的渐变搜索,而不是在线权重更新.
作为测试,我创建了一个100分的时间序列函数,这样x = [0..99]和y = f(x).我创建了一个神经网络,其中包含一个输入和一个输出以及2个隐藏层,其中包含10个神经元用于测试.我正在努力解决的问题是在解决这个问题时反向传播算法的学习速度.
我有100个输入点,所以当我计算dw_{ij}每个节点的重量变化时,它实际上是一个总和:
dw_{ij} = dw_{ij,1} + dw_{ij,2} + ... + dw_{ij,p}
Run Code Online (Sandbox Code Playgroud)
其中,p = 100在这种情况下.
现在重量更新变得非常巨大,因此我的错误E反弹,因此很难找到最小值.我得到一些正确行为的唯一方法是当我将学习率设置为y类似的时候0.7 / p^2.
根据样本量,是否有一些设定学习率的一般规则?
我发现了一些关于使用扩展方法提升事件的帖子,但我的问题有点不同:
我有这样的界面:
public interface IStateMachine
{
void SetState(IState NewState);
IState GetState();
}
Run Code Online (Sandbox Code Playgroud)
使用此接口,我可以创建如下的扩展方法:
public static void ChangeState(this IStateMachine StateMachine, IState NewState)
{
StateMachine.GetState().Exit();
StateMachine.SetState(NewState);
StateMachine.GetState().Enter();
}
Run Code Online (Sandbox Code Playgroud)
我真正想要的是会有需要解雇的事件,例如:a statechange-event.
但是我不希望它StatechangeEvent成为IStateMachine界面的一部分,但似乎这是唯一的方法.我有几个实现的类,IStateMachine因此我每次都必须重做相同的代码.
我有一个很大的Kotlin项目,其中包含大约2500个针对KotlinTest编写的单元测试。该项目是gradle项目,我能够从Gradle任务运行所有测试,但是通常我是从编辑器运行它们的。通过单击“运行”图标,我可以从编辑器运行单个测试。
昨天效果不错,今天效果不好。没有改变。绝对没有。当我将鼠标悬停在图标上时,它会显示“ Nothing Here”。添加主要功能时,我可以执行主要功能,但不能执行测试。测试文件夹被标记为“测试源根”。
这非常令人沮丧,因为每当我更改某项内容时,我都想测试一个单独的单元测试,而不必测试另外2500个...
IntelliJ是最新的。Kotlin插件是最新的。
编辑:我发现,如果我将a添加fun main(args: Array<String>)到文件的顶部,它将起作用。奇怪的!?
有时当你刚学习一门新语言时,很难找到一个非常基本的答案,因为搜索关键词要么非常简单(导致太多不相关的搜索结果),要么我不知道要使用哪些关键词.
我正在观看Jetbrains的第一部关于他们使用Scala的IntelliJ功能的电影(https://www.youtube.com/watch?v=UJe4wPUtcUQ#t=235).在此框架中,您会看到以下代码:
test("Email with valid address") {
val email = Email("name@gmail.com")
assert(email.address != null)
}
Run Code Online (Sandbox Code Playgroud)
这看起来很奇怪(来自Java)并且查看Scalatest.FunSuite的API文档我看到Funsuite是一个功能测试套件,但我无法test在FunSuite(http:// doc.)的文档中找到该函数. scalatest.org/2.2.1/index.html#org.scalatest.FunSuite).
我的猜测是函数test以某种方式要求你在它之后定义一个匿名函数,但这意味着什么?什么test回报?test如果不在课堂上,我在哪里可以找到API文档FunSuite?
我有一个简单的特性,要求实现有一个quality(x:A)我想要返回的方法Ordered[B].换句话说,quality转换A为Ordered[B].这样我可以比较B.
我有以下基本代码:
trait Foo[A] {
def quality[B](x:A):Ordered[B]
def baz(x1:A, x2:A) = {
// some algorithm work here, and then
if (quality(x1) > quality(x2)) {
// some stuff
}
}
Run Code Online (Sandbox Code Playgroud)
我想实现如下:
class FooImpl extends Foo[Bar] {
def quality(x:Bar):Double = {
someDifficultQualityCalculationWhichReturnsADouble
}
}
Run Code Online (Sandbox Code Playgroud)
我认为这可以工作,因为如果我是正确的,Double隐式转换为RichDouble实现Ordered[Double].
但是在特征>的baz方法中它给了我一个quality(x2)说明的错误:Type mismatch, expected Nothing, actual Ordered[Nothing]
我不明白这一点,因为,来自C#,我发现它可以与返回类似的东西相比IEnumerable<A>,然后使用一个很好的扩展方法IEnumerable.
我在这里错过了什么?我想要的特性是在trait中定义一个复杂的算法,但是关键函数需要由实现trait的类来定义.需要使用这些函数来计算品质因数.这可以是一种 …
我正在使用JUNG2库,这样我就能想象出我创建的神经网络系统.
首先,我关注JUNG2的代码示例,并使用以下Java代码:
DirectedSparseMultigraph<Integer, Integer> graph = new DirectedSparseMultigraph<Integer, Integer>();
DelegateForest<Integer, Integer> delf = new DelegateForest<Integer, Integer>();
Factory<Tree<Integer, Integer>> delt = DelegateTree.<Integer, Integer>getFactory();
Transformer<Integer, Double> trans = new Transformer<Integer, Double>() {
@Override
public Double transform(Integer arg0) {
return 1.0;
}
};
MinimumSpanningForest2<Integer, Integer> prim = new MinimumSpanningForest2<Integer, Integer>(graph, delf, delt, trans);
Run Code Online (Sandbox Code Playgroud)
现在Scala中的等效代码:
var graph = new DirectedSparseMultigraph[Int, Int]
var delf = new DelegateForest[Int, Int]()
var delt = DelegateTree.getFactory[Int, Int]()
var trans = new Transformer[Int, Double] {
def transform(input:Int):Double = {
return …Run Code Online (Sandbox Code Playgroud) 我有一个大型数据集,其中包含10个不同的输入和1个输出。所有的输出和输入都是谨慎的(低,中,高)。我当时正在考虑为这个问题创建一个神经网络,但是当我将网络设计为具有3种不同的输出(低,中,高)并使用softmax神经元时,我基本上得到了“概率”。我对么?
这使我认为尝试使用Naive Bayes分类器可能更好,因此可以忽略输入变量之间的可能相关性,但是在大型数据集中,Naive Bayes显示出令人鼓舞的结果。
在这种情况下,是否有理由选择贝叶斯神经网络?当您希望将概率作为输出时选择神经网络的原因是什么(使用神经网络中的softmax函数)。