2017-08-10 4 views
0

は私がmxnetモデル(基本的なフィードフォワード多層Perecptron)への入力としてこれを使用したいと思い、このmxnetで複数のデータ型を使用して入力を作成する方法は?

0.00,2015-10-21,1,Y,798.78,323793701,6684,0.00,Q,H2512,PE0,1,0000 

のように見えるのエントリを持つデータファイルがあるとします。単一の入力レコードが

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と正確には同じではありませんが、そのインタフェースと完全に一致するため、概念的には同じです)。

+0

1つの方法は、各列に変数を定義することです。しかし、あなたが念頭に置いているネットワーク構造を最初に明確にしてください。あなたは、いくつかのレイヤーで異なる変数をマージするネットワーク構造が必要です。または、データを先取りして処理する必要があります。つまり、単一の入力ベクトルを作成する必要があります。 – leezu

+0

@leezuオリジナルの投稿を編集しました。それはあなたが「ネットワーク構造」の意味ですか?私はちょうど始めて、本当にこれを今のところ簡単に保っています。 – sail0r

答えて

2

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') 

これまでは、数値以外のデータを数値データに変換する必要があります。これは、1つのホットベクトルまたはその変数の意味に依存する他の方法の形で行うことができます。

サンプルに関する質問は長さが異なりますが、最も簡単な方法は、短いものに0を埋め込むことでそれらをすべて共通の長さにすることです。

関連する問題