2016-12-31 4 views
0

私は機械学習の新人です。私は実践として簡単な例に取り組んでいます。私は数字のペアを生成し、両方の値が偶数または奇数の場合はラベル '1'を割り当て、一方が偶数で奇数ならばラベル '0'を割り当てます。Kerasを使用して、2つの数字が埋め込みを使用して同じ「奇妙」を持っているかどうかを予測します。

私のモデルは時々〜75%前後になることがありますが、どちらのペアが1になり、0につながるのかを単に記憶していることは間違いありません。モデルには2つのカテゴリ、例えば、[1,4] = 0、[1,6] = 0なので、4と6は同じカテゴリに属する​​ことが分かります。

私は適切なトラックにいますか?これはMLで解決するための合理的な問題でもありますか?ここ

は私のコードである:

num_examples = 500000 
input_dim = 300 

# Generate the randomized training data 
data = (input_dim * numpy.random.random((num_examples, 2))).astype(int) 
labels = [] 

# Generate the correct labels for the training data 
for example in data: 
    if example[0] % 2 == example[1] % 2: 
     labels.append([1, 0]) 
    else: 
     labels.append([0, 1]) 


model = Sequential() 
model.add(Embedding(input_dim, 70, input_length=2)) 
model.add(Flatten()) 
model.add(Dense(20)) 
model.add(Dense(2, activation='sigmoid')) 

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) 
model.fit(data, labels, nb_epoch=900, batch_size=10000) 
+0

コードを実行したところ、基本的に50%の精度が得られました。 75%が表示されていますか? – gobrewers14

+0

はい、約半分の時間は50%を超えず、それ以外の時間は75%のレベルになります。 – TheN33k

答えて

0

埋め込み層は、各番号のための特徴ベクトルを割り当てるので、このモデルは見えない番号に一般化することはできません。数字がトレーニングの例に含まれていない場合、数字は更新されず、最初のランダムな値が保持されます。私はバイナリ形式で数値を供給することを考えています(たとえば、値 '00001001'の8つの入力として '9'を供給)。とにかくこれは私の意見では汚れたハックです。なぜなら、今のところネットワークが必要とするのは、各入力の最後のビットがいつ等しいかを検出することです。

関連する問題