Keras神经网络通过自身的损失函数多次应用

时间:2018-08-22 12:33:23

标签: r multidimensional-array neural-network keras

我是机器学习工具的新手,并且已经在R中安装了Keras。在考虑更简单的模型时,我现在想将神经网络用于更多特殊目的。通常,神经网络应该是函数Phi: R^d -> R,其中输入是d维的。

给出n个时间点的d维数据,以便神经网络每次都计算1维目标值。其中,我有M个样本,即输入有些(samples,times,input_dimension)=(M,n,d),在其上分别应用了神经网络。输出应为(samples,times)=(M,n)形式,以便每次将神经网络的预测值与所需目标进行比较-并针对每个样本进行比较。仅供参考,数字范围在d=5, n=1000, M=100左右。

基于此,建议在具有d维输入和1维目标的M*n样本上运行“常规”神经网络。但是,问题在于损失函数取决于每个时间步长中神经网络的先前评估,即损失的形式为

  

l(y_pred,y_target) = sum_{i=1}^n (y^i_pred-y^i_target+f_i(...))^2

其中y^i_predy^i_target分别是第i个时间步长的预测值和目标值,而f_i是附加函数(取决于神经网络的二阶导数) ,但这是另一回事,与先前的损失有关。

到目前为止,我有以下代码来说明我的问题:

input <- array(data1,dim=c(M,n,d))
target <- array(data2,dim=c(M,n))
myloss <- function(f,y_true,y_pred) {
  K <- backend()
  return(K$sum((y_pred-y_true+f)^2))
}

library(keras)
NN <- keras_model_sequential()
NN %>%
  layer_dense(units=20,activation='relu',input_shape=c(n,d)) %>% 
  layer_dense(units=20,activation='relu') %>%
  layer_dense(units=1,activation='relu')
summary(NN)

NN %>% compile(
  loss function(y_true,y_pred) myloss(f,y_true,y_pred),
  optimizer = "adam",
  metrics = "acc"
)
history <- NN %>% fit(
  input, target, 
  epochs = 30, batch_size = 20, 
  validation_split = 0.1
)

我收到各种错误消息(关于目标和自定义损失函数的维数),因此我的问题是:是否有可能将我的问题合并到Keras模型中?还是应该使用卷积神经网络?我还研究了循环网络,但就我而言,只有损失取决于“先前的价值”。也许有人可以提供建议,我将不胜感激。

0 个答案:

没有答案