我正在使用R编程语言和使用Keras来构建一个功能性的一维CNN。
我有以下形状行*功能(6000*1024)的数据集矩阵。
输入层使用以下代码设置:
input_layer = layer_input(shape = 1024, batch_shape = c(nrow(train_matrix),1024), dtype = 'float64')
然后我构建了一个一维控制层,如下所示:
conv1 = input_layer %>% layer_conv_1d(filters = 32, kernel_size = 50, strides = 10, input_shape = 1024, batch_input_shape = list(NULL, 1024) ,dtype = 'float64', activation = 'relu' )
但我得到了以下错误:
Py_call_impl(可调用的点args, dots关键字)中的错误: ValueError: Input 0与layer conv1d: expected ndim=3,found ndim=2不兼容
我相信这是因为1DCNN层期望输入的形式如下
输入形状:具有形状的三维张量:(batch_size,steps,input_dim)
我知道我必须将我的数据重新定义为(NULL, nrow(train_matrix), 1
;因为在Python中使用同样的问题时,不同的答案都提到了这一点。
如果我是对的,
另外,如果我的理解是错误的,否则应该怎么做?
发布于 2019-04-03 02:26:33
输入层产生二维张量,而一维卷积层则期望三维张量作为输入。在这个回答中可以找到一个很好的解释,说明为什么克鲁斯会期待它,以及你应该如何重塑你对3d的2d输入。
我使用了Keras函数k_reshape( 2d_tensor, (list_of_new_dims))
-> k_reshape(input_layer, list(nrow(train_matrix), num_of_feature_vectors, 1)
。
nrow(train_matrix)
--我的矩阵中的行总数(不包括样本)
num_of_feature_vectors
-矩阵中的列总数(特性总数)
1
-我想要一个在z轴上只有一个元素的三维张量,因此z轴被初始化为1。
https://datascience.stackexchange.com/questions/48442
复制相似问题