2017-11-14 5 views
0

次の形状のニューラルネット入力をフィードしたいとします。 各トレーニングエントリは、寸法が700x10の2D配列です。合計204のトレーニング項目があります。 ラベル私は緻密層を使用しようとしたサイズ204(バイナリ出力)カスタムテンソルフロー入力またはケラスニューラルネット入力

のわずか1次元配列である:

model = Sequential() 
model.add(Dense(300, activation='relu', input_shape=(700, 10))) 
model.add(Dense(1, activation='sigmoid')) 

しかし、私は、第1の層上にinput_shapeする次のエラー(関連しないを取得してい出力の検証中):

ValueError: Error when checking target: expected dense_2 to have 3 dimensions, but got array with shape (204, 1) 

204 - トレーニングデータの量。

スタックトレース:

Kerasコードをデバッグ中に私が見つけた何
model.fit(xTrain, yTrain, epochs=4, batch_size=6) 
    File "keras\models.py", line 867, in fit 
    initial_epoch=initial_epoch) 
    File "keras\engine\training.py", line 1522, in fit 
    batch_size=batch_size) 
    File "keras\engine\training.py", line 1382, in _standardize_user_data 
    exception_prefix='target') 
    File "keras\engine\training.py", line 132, in _standardize_input_data 

それはトレーニング前に検証中に失敗しました。出力配列を検証します。

ニューラルネットワーク構造によると、最初の密集層は何とか700,1次元出力を生成し、出力はそれに204個の1-d配列しかないので後で失敗します。

どのようにこの問題を解決できますか?私はDense()層の後にFlatten()を追加しようとしましたが、おそらく精度に悪影響を及ぼします。私は700個の配列から1つの点に固有の情報をグループ化したいと思います。

答えて

3

Denseレイヤーは、1つのディメンション、つまり最後のディメンションでのみ機能します。

(700,10)を入力すると、(700,units)が出力されます。これを確認するにはmodel.summary()を確認してください。

簡単な解決策は、緻密適用する前に、データを平坦化することである。

model.add(Flatten(input_shape=(700,10))) 
model.add(Dense(300,...)) 
model.add(Dense(1,...)) 

この方法で、緻密層は、単純な(7000,)入力が表示されます。


ここで、モデルにこれらの2つのディメンションを分けて理解させたい場合は、より洗練された構造を試してください。何をすべきかは、データが何で、何をしたい、どのようにモデルがそれを理解してほしいかなどに大きく左右されます。

+0

よろしくお願いしますmodel.summary()tipありがとう!ケラスとそれがより徹底的に提供しなければならないものをさらに調査しようとするでしょう – Twisty

+0

データを記述することはできますか?たとえば、700個のベクトルが時間ステップである場合、GRUやLSTMなどの反復ネットワークを使用できます。物理的な長さの場合は、1D畳み込みを使用するのが面白いかもしれません。 –

関連する問題