2017-11-09 15 views
0

次のコードは、複数の変数を使用して特定の値を予測するモデルを作成します。私のデータは11947を行列形式で9で構成し、トレーニング用に9000、テスト用に2947を使用するデータを作成しました。トレーニングデータとテストデータの数が異なる場合、どのようにKerasを使用しますか?

import numpy as np 
from keras.models import Model 
from keras.layers import Dense, Input, concatenate, Conv1D 
batchSize=1000 

def get_model(rows, cols): 

    inputs1 = Input(shape=(1, rows)) 
    inputs2 = Input(shape=(1, rows)) 
    inputs3 = Input(shape=(1, rows)) 
    inputs4 = Input(shape=(1, rows)) 
    inputs5 = Input(shape=(1, rows)) 
    inputs6 = Input(shape=(1, rows)) 
    inputs7 = Input(shape=(1, rows)) 

    conv1 = Conv1D(1024, 1, activation='relu', padding='same')(inputs1) 
    conv1 = Conv1D(512, 1, activation='relu', padding='same')(conv1) 

    conv2 = Conv1D(1024, 1, activation='relu', padding='same')(inputs2) 
    conv2 = Conv1D(512, 1, activation='relu', padding='same')(conv2) 

    conv3 = Conv1D(1024, 1, activation='relu', padding='same')(inputs3) 
    conv3 = Conv1D(512, 1, activation='relu', padding='same')(conv3) 

    conv4 = Conv1D(1024, 1, activation='relu', padding='same')(inputs4) 
    conv4 = Conv1D(512, 1, activation='relu', padding='same')(conv4) 

    conv5 = Conv1D(1024, 1, activation='relu', padding='same')(inputs5) 
    conv5 = Conv1D(512, 1, activation='relu', padding='same')(conv5) 

    conv6 = Conv1D(1024, 1, activation='relu', padding='same')(inputs6) 
    conv6 = Conv1D(512, 1, activation='relu', padding='same')(conv6) 

    conv7 = Conv1D(1024, 1, activation='relu', padding='same')(inputs7) 
    conv7 = Conv1D(512, 1, activation='relu', padding='same')(conv7) 

    convConcat = concatenate([conv1, conv2, conv3, conv4, conv5, conv6, conv7]) 

    convOut = Dense(rows, activation='relu')(convConcat) 


    model = Model(inputs=[inputs1, inputs2, inputs3, inputs4, inputs5, inputs6, inputs7], outputs=[convOut]) 


    model.compile(optimizer='Adam', loss='mean_squared_error', metrics=['accuracy']) 

    return model 

def train_and_predict(): 
    dataT = data_train.transpose() 

    dataT_O = dataT[0].reshape((1, 1, -1)) 
    dataT_1 = dataT[2].reshape((1, 1, -1)) 
    dataT_2 = dataT[3].reshape((1, 1, -1)) 
    dataT_3 = dataT[4].reshape((1, 1, -1)) 
    dataT_4 = dataT[5].reshape((1, 1, -1)) 
    dataT_5 = dataT[6].reshape((1, 1, -1)) 
    dataT_6 = dataT[7].reshape((1, 1, -1)) 
    dataT_7 = dataT[8].reshape((1, 1, -1)) 

    model.fit([dataT_1, dataT_2, dataT_3, dataT_4, dataT_5, dataT_6, dataT_7], dataT_O, epochs=100, batch_size=batchSize) 

    dataT = data_test.transpose() 

    dataT_1 = dataT[2].reshape((1, 1, -1)) 
    dataT_2 = dataT[3].reshape((1, 1, -1)) 
    dataT_3 = dataT[4].reshape((1, 1, -1)) 
    dataT_4 = dataT[5].reshape((1, 1, -1)) 
    dataT_5 = dataT[6].reshape((1, 1, -1)) 
    dataT_6 = dataT[7].reshape((1, 1, -1)) 
    dataT_7 = dataT[8].reshape((1, 1, -1)) 

    model.predict([dataT_1, dataT_2, dataT_3, dataT_4, dataT_5, dataT_6, dataT_7]) 
    print('Done!') 

if __name__ == '__main__': 

    data_train = np.genfromtxt('./trainingLossdata_train.txt') 
    data_test = np.genfromtxt('./trainingLossdata_test.txt') 

    model = get_model(data_train.shape[0], data_train.shape[1]) 

    train_and_predict() 

しかし、誤差は、訓練データとテストデータの数との差に発生しました。正確に次のエラーメッセージが表示されます。

"ValueError: Error when checking: expected input_1 to have shape (None, 1, 9000) but got array with shape (1, 1, 2947)"

どうすればこの問題を解決できますか?実際、私は深い学習プログラミングを行うためにKerasを使用する初心者です。私にいくつかのアドバイスをお願いします。

答えて

0

入力の作成が間違っているようです。それは、トレーニングとテストサンプルの数が違うこととは関係ありません(実際には常に起こります)。今、あなたは言った

My data compose 11947 by 9

これは、11947個のサンプルがそれぞれ9つの機能を持つことを意味します。したがって、入力の理想的な形状はNone,9またはNone,1,9です。このNoneは実際には入力の大きさを表します。

+0

ありがとうございました!私は理解した! –

関連する問題