此代码来自:
我正在尝试构建神经网络(使用嵌入)
features <- c(14:18, 20:21)
(q0 <- length(features))
Xlearn <- as.matrix(learn[, features]) # design matrix learning sample
Brlearn <- as.matrix(learn$VehBrandX)
Relearn <- as.matrix(learn$RegionX)
Ylearn <- as.matrix(learn$ClaimNb)
Xtest <- as.matrix(test[, features]) # design matrix test sample
Brtest <- as.matrix(test$VehBrandX)
Retest <- as.matrix(test$RegionX)
Ytest <- as.matrix(test$ClaimNb)
Vlearn <- as.matrix(log(learn$Exposure))
Vtest <- as.matrix(log(test$Exposure))
lambda.hom <- sum(learn$ClaimNb)/sum(learn$Exposure)
CANN <- 1 # 0=Embedding NN, 1=CANN
if (CANN==1){
Vlearn <- as.matrix(log(learn$fitGLM2))
Vtest <- as.matrix(log(test$fitGLM2))
lambda.hom <- sum(learn$ClaimNb)/sum(learn$fitGLM2)
}
lambda.hom
(BrLabel <- length(unique(learn$VehBrandX)))
(ReLabel <- length(unique(learn$RegionX)))
q1 <- 20
q2 <- 15
q3 <- 10
d <- 2 # dimensions embedding layers for categorical features
Design <- layer_input(shape = c(q0), dtype = 'float32', name = 'Design')
VehBrand <- layer_input(shape = c(1), dtype = 'int32', name = 'VehBrand')
Region <- layer_input(shape = c(1), dtype = 'int32', name = 'Region')
LogVol <- layer_input(shape = c(1), dtype = 'float32', name = 'LogVol')
BrandEmb <- VehBrand %>%
layer_embedding(input_dim = BrLabel, output_dim = d, input_length = 1, name = 'BrandEmb') %>%
layer_flatten(name='Brand_flat')
RegionEmb <- Region %>%
layer_embedding(input_dim = ReLabel, output_dim = d, input_length = 1, name = 'RegionEmb') %>%
layer_flatten(name='Region_flat')
Network <- list(Design, BrandEmb, RegionEmb) %>% layer_concatenate(name='concate') %>%
layer_dense(units=q1, activation='tanh', name='hidden1') %>%
layer_dense(units=q2, activation='tanh', name='hidden2') %>%
layer_dense(units=q3, activation='tanh', name='hidden3') %>%
layer_dense(units=1, activation='linear', name='Network',
weights=list(array(0, dim=c(q3,1)), array(log(lambda.hom), dim=c(1))))
Response <- list(Network, LogVol) %>%
layer_add(LogVol,name = 'Add') %>%
layer_dense(units = 1, activation = k_exp, name = 'Response', trainable = FALSE,
weights = list(array(1, dim = c(1, 1)), array(0, dim = c(1))))
model <- keras_model(inputs = c(Design, VehBrand, Region, LogVol), outputs = c(Response))
model %>% compile(optimizer = optimizer_nadam(), loss = 'poisson')
summary(model)
我得到了这个“回应”:
Error: KeyError: 0
7. stop(structure(list(message = "KeyError: 0\n", call = NULL, cppstack = NULL), class = c("Rcpp::exception", "C++Error", "error", "condition")))
6. (structure(function (...) { dots <- py_resolve_dots(list(...)) result <- py_call_impl(callable, dots$args, dots$keywords) ...
5. do.call(keras$layers$add, c(list(inputs), dots$named))
4. layer_add(., LogVol, name = "Add")
3. create_layer(keras$layers$Dense, object, list(units = as.integer(units), activation = activation, use_bias = use_bias, kernel_initializer = kernel_initializer, bias_initializer = bias_initializer, kernel_regularizer = kernel_regularizer, bias_regularizer = bias_regularizer, activity_regularizer = activity_regularizer, ...
2. layer_dense(., units = 1, activation = k_exp, name = "Response", trainable = FALSE, weights = list(array(1, dim = c(1, 1)), array(0, dim = c(1))))
1. list(Network, LogVol) %>% layer_add(LogVol, name = "Add") %>% layer_dense(units = 1, activation = k_exp, name = "Response", trainable = FALSE, weights = list(array(1, dim = c(1, 1)), array(0, dim = c(1))))