首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >当NLP任务需要三维输入(张量)时,在R(Rstudio)中使用keras一维卷积层设置输入形状

当NLP任务需要三维输入(张量)时,在R(Rstudio)中使用keras一维卷积层设置输入形状
EN

Data Science用户
提问于 2019-04-02 05:24:54
回答 1查看 705关注 0票数 1

我正在使用R编程语言和使用Keras来构建一个功能性的一维CNN。

我有以下形状行*功能(6000*1024)的数据集矩阵。

输入层使用以下代码设置:

代码语言:javascript
运行
AI代码解释
复制
input_layer = layer_input(shape = 1024, batch_shape = c(nrow(train_matrix),1024), dtype = 'float64') 

然后我构建了一个一维控制层,如下所示:

代码语言:javascript
运行
AI代码解释
复制
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中使用同样的问题时,不同的答案都提到了这一点。

如果我是对的,

  1. 我应该为输入层提供哪些值?
  2. 我应该如何重塑我的培训数据?
  3. 这是否意味着我也必须重塑测试数据?

另外,如果我的理解是错误的,否则应该怎么做?

EN

回答 1

Data Science用户

发布于 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。

票数 0
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/48442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文