假设我有一个数据文件,其条目如下所示
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)的输入。一条输入记录具有数据类型,其顺序如下所示
float,date,int,categorical,float,int,int,float,categorical,categorical,categorical,int, float每条记录都是一个特定实体的有意义的表示。如何将这种数据表示为mxnet?另外,让事情更复杂一点的是,假设我想对分类列进行单热编码?如果每条记录都有这些字段,按顺序显示,但在某些情况下重复多次,使得每条记录可能具有不同的长度,该怎么办?
在基本情况下,如果您的输入数据都是相同类型的,并且可以在不进行任何转换的情况下加载到相同的输入中,那么这些文档非常适合这种情况,但是如何处理这种情况呢?
更新:添加了一些额外的细节。为了尽可能简单,假设我只想将其输入到一个简单的网络中。类似于:
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);在简单的情况下,数据都是一种类型,并且不需要太多的预处理,那么我可以做一些类似如下的事情
$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,但与该接口完全相同,因此在概念上是相同的)。
发布于 2017-08-22 09:13:24
NDArrayIter还支持多输入。您可以按如下方式使用它
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填充较短的样本,使它们都达到相同的长度。
https://stackoverflow.com/questions/45619738
复制相似问题