首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在mxnet中创建具有多种数据类型的输入?

如何在mxnet中创建具有多种数据类型的输入?
EN

Stack Overflow用户
提问于 2017-08-11 01:09:41
回答 1查看 482关注 0票数 0

假设我有一个数据文件,其条目如下所示

代码语言:javascript
复制
0.00,2015-10-21,1,Y,798.78,323793701,6684,0.00,Q,H2512,PE0,1,0000

我想将其用作mxnet模型(basic Feed Forward Multi-layer Perecptron)的输入。一条输入记录具有数据类型,其顺序如下所示

代码语言:javascript
复制
float,date,int,categorical,float,int,int,float,categorical,categorical,categorical,int, float

每条记录都是一个特定实体的有意义的表示。如何将这种数据表示为mxnet?另外,让事情更复杂一点的是,假设我想对分类列进行单热编码?如果每条记录都有这些字段,按顺序显示,但在某些情况下重复多次,使得每条记录可能具有不同的长度,该怎么办?

在基本情况下,如果您的输入数据都是相同类型的,并且可以在不进行任何转换的情况下加载到相同的输入中,那么这些文档非常适合这种情况,但是如何处理这种情况呢?

更新:添加了一些额外的细节。为了尽可能简单,假设我只想将其输入到一个简单的网络中。类似于:

代码语言:javascript
复制
my $data = mx->symbol->Variable("data");
my $fc = mx->symbol->FullyConnected($data, num_hidden => 1);
my $softmax=mx->symbol->SoftmaxOutput(data => $fc, name => "softmax");
my $module = mx->mod->new(symbol => $softmax);

在简单的情况下,数据都是一种类型,并且不需要太多的预处理,那么我可以做一些类似如下的事情

代码语言:javascript
复制
$module->fit(
    $train_iter,
    eval_data => $eval_iter,
    optimizer => "adam",
    optimizer_params=>{learning_rate=>0.001},
    eval_metric => "mse",
    num_epoch => 25
);

其中$train_iter是训练数据上的简单NDArray迭代器。(对于Perl API,它不完全是NDArray,但与该接口完全相同,因此在概念上是相同的)。

EN

回答 1

Stack Overflow用户

发布于 2017-08-22 09:13:24

NDArrayIter还支持多输入。您可以按如下方式使用它

代码语言:javascript
复制
data = {'data1':np.zeros(shape=(10,2,2)), 'data2':np.zeros(shape=(20,2,2))}
label = {'label1':np.zeros(shape=(10,1)), 'label2':np.zeros(shape=(20,1))}
dataiter = mx.io.NDArrayIter(data, label, 3, True, last_batch_handle='discard')

在此之前,您必须将非数值数据转换为数值数据。这可以是一个热向量的形式,也可以是其他一些方式,这取决于该变量的含义。

关于样本长度不同的问题,最简单的方法是通过用0填充较短的样本,使它们都达到相同的长度。

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

https://stackoverflow.com/questions/45619738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档