我在CrossValidated上问了类似的问题,但没有得到答复。无论如何,我继续前进,并建立了一个函数,但是复制存在问题...
original question, posted here 如下:
我正在寻找一个产生类似于以下内容的函数(或简短的算法,最好用R实现):
看,我希望能够生成遵循这种模式的n个项的向量,并映射到一组输入(例如seq(1:n))。理想情况下,我将能够告诉算法在第k个时间段内“峰值”达到最大高度h,然后以速率r衰减。但是,我很高兴能够生成周期性发生的峰值模式。
我用R编写了一些代码,该代码很好用...
## Neural Networks / Deep Learning ##
# first, must install Python from:
# https://www.anaconda.com/download/#windows
# https://www.python.org/downloads/
if (!require(keras)) devtools::install_github("rstudio/keras") ; library(keras)
# install_tensorflow()
spikes_model <- function(maxiter, total_spikes = 10, max_height = 0.001, min_height = 0.000005, decay_rate = 1) {
value_at_iteration <- rep(0, maxiter)
spike_at <- maxiter / total_spikes
current_rate <- min_height
holder_timeval <- 0
for(i in 1:maxiter) {
spike_indicator <- i / spike_at
if (is.integer(spike_indicator)) {
current_rate <- max_height
value_at_iteration[i] <- current_rate
holder_timeval <- spike_indicator
} else if (i < spike_at) {
current_rate <- min_height
value_at_iteration[i] <- current_rate
} else {
timeval <- i - (holder_timeval*spike_at)
current_rate <- max_height*exp(-decay_rate*timeval) + min_height
value_at_iteration[i] <- current_rate
}
}
return(value_at_iteration)
}
asdf <- spikes_model(maxiter = 100)
plot(asdf, type="l")
...这将导致以下绘图:
这正是我想要的,除了只有一个峰值。我知道某处存在代码或逻辑错误,但找不到我要去哪里。请帮助我在一段时间内重复执行此峰值程序。
此调度程序使用的代码:
eps <- 1000
sch <- spikes_model(eps)
lr_schedule <- function(epoch, lr) {
lrn <- sch[as.integer(epoch)]
lrn <- k_cast_to_floatx(lrn)
return(lrn)
}
## Add callback to automatically adjust learning rate downward when training reaches plateau ##
reduce_lr <- callback_learning_rate_scheduler(lr_schedule)
## Fit model using trainig data, validate with validation data ##
mod1.hst <- mod1 %>% fit(
x=X.train, y=Y.train,
epochs=eps, batch_size=nrow(X.train),
validation_data = list(X.val, Y.val),
shuffle=TRUE, callbacks = list(checkpoint, reduce_lr)
)