产生重复尖峰的功能

时间:2018-08-03 13:21:27

标签: r function signals

我在CrossValidated上问了类似的问题,但没有得到答复。无论如何,我继续前进,并建立了一个函数,但是复制存在问题...

original question, posted here 如下:

  

我正在寻找一个产生类似于以下内容的函数(或简短的算法,最好用R实现):

     

spikes

     

看,我希望能够生成遵循这种模式的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")

...这将导致以下绘图:

result plot

这正是我想要的,除了只有一个峰值。我知道某处存在代码或逻辑错误,但找不到我要去哪里。请帮助我在一段时间内重复执行此峰值程序。

此调度程序使用的代码:

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)
)

1 个答案:

答案 0 :(得分:0)

哇,我刚发现自己的错误。我正在使用is.integer()函数,该函数无法按我希望的方式工作。我需要使用is.whole.number()中的mosaic函数。

修复了一个错误,我找到了以下图表,正是我想要的

beauty