python, neurolab,逐步训练

3 投票
1 回答
1143 浏览
提问于 2025-04-17 23:09

我有一个来自neurolab的人工神经网络(ANN),像这样:

net = nl.net.newff([[0.0, 1.0]] * 5, [2])

我想要进行迭代训练,每隔K个周期进行一次验证检查。

虽然net.train()这个函数可以接受周期数作为参数,但对我来说它的用法看起来很奇怪。

似乎它会存储最后一个周期(在网络实例上?),所以接下来的训练会因为“达到最大训练周期”而失败,根本无法继续训练。

for k in xrange(10):
    net.train(training, target, epochs=1)
    ...do some checks

下面的方法是可以的,但这样会增加计算负担,因为每次都要从头开始。

for k in xrange(10):
    net.train(training, target, epochs=k)
    ...do some checks

我是不是漏掉了什么? :)

1 个回答

1

在编程中,有时候我们需要让程序在特定的条件下执行某些操作。这就像给程序设定了一些规则,只有当这些规则被满足时,程序才会继续进行。比如说,如果你想让程序在用户输入正确的密码后才能访问某个功能,你就需要设置一个条件来检查这个密码是否正确。

条件通常是用一些比较符号来判断的,比如“等于”、“大于”或“小于”。当条件成立时,程序就会执行相应的代码块。如果条件不成立,程序就会跳过这些代码,继续执行后面的部分。

这样做的好处是可以让程序更加灵活和安全,因为它只会在满足特定条件时才执行某些操作。

#first
import neurolab as nl
#then
rep=10
i=0
#Number of inputs
numIN=5
#Number of neurons per layer
cap1=12
cap2=5
#Number of outputs
out=5
#create network
net = nl.net.newff([[-1, 1]]*numIN,[cap1,cap2,out])
while i<rep:
# I use train_bfgs is faster
#entradasu are the inputs and targetsu are the targets of your data
#then the network is adjusted in each iteration
    error = nl.train.train_bfgs(net,entradasu, targetsu, epochs=1, show=0, goal=0.001)
#then do some checks
    if checks==True:
        i=rep
    else
        i+=1

撰写回答