2017-08-19 56 views
2

model.fit中的acc陀螺是(200 * 3)輸入層形狀是(200 * 3)。爲什麼會有這樣的問題?檢查輸入時出錯:期望的acc_input有3個維度,但有形狀的數組(200,3)。這是我的模型的可視化。keras輸入層(Nnoe,200,3),爲什麼沒有?輸入有3個維度,但得到了形狀的陣列(200,3)

enter image description here

這是我的代碼:

WIDE = 20 
FEATURE_DIM = 30 
CHANNEL = 1 
CONV_NUM = 64 
CONV_LEN = 3 
CONV_LEN_INTE = 3#4 
CONV_LEN_LAST = 3#5 
CONV_NUM2 = 64 
CONV_MERGE_LEN = 8 
CONV_MERGE_LEN2 = 6 
CONV_MERGE_LEN3 = 4 
rnn_size=128 

acc_input_tensor = Input(shape=(200,3),name = 'acc_input') 
gyro_input_tensor = Input(shape=(200,3),name= 'gyro_input') 
Acc_input_tensor = Reshape(target_shape=(20,30,1))(acc_input_tensor) 
Gyro_input_tensor = Reshape(target_shape=(20,30,1))(gyro_input_tensor) 
acc_conv1 = Conv2D(CONV_NUM,(1, 1*3*CONV_LEN),strides=  (1,1*3),padding='valid',activation=None)(Acc_input_tensor) 
acc_conv1 = BatchNormalization(axis=1)(acc_conv1) 
acc_conv1 = Activation('relu')(acc_conv1) 
acc_conv1 = Dropout(0.2)(acc_conv1) 
acc_conv2 = Conv2D(CONV_NUM,(1,CONV_LEN_INTE),strides= (1,1),padding='valid',activation=None)(acc_conv1) 
acc_conv2 = BatchNormalization(axis=1)(acc_conv2) 
acc_conv2 = Activation('relu')(acc_conv2) 
acc_conv2 = Dropout(0.2)(acc_conv2) 

acc_conv3 = Conv2D(CONV_NUM,(1,CONV_LEN_LAST),strides=(1,1),padding='valid',activation=None)(acc_conv2) 
acc_conv3 = BatchNormalization(axis=1)(acc_conv3) 
acc_conv3 = Activation('relu')(acc_conv3) 
acc_conv3 = Dropout(0.2)(acc_conv3) 
gyro_conv1 = Conv2D(CONV_NUM,(1, 1*3*CONV_LEN),strides=(1,1*3),padding='valid',activation=None)(Gyro_input_tensor) 
gyro_conv1 = BatchNormalization(axis=1)(gyro_conv1) 
gyro_conv1 = Activation('relu')(gyro_conv1) 
gyro_conv1 = Dropout(0.2)(gyro_conv1) 

gyro_conv2 = Conv2D(CONV_NUM,(1, CONV_LEN_INTE),strides=(1,1),padding='valid',activation=None)(gyro_conv1) 
gyro_conv2 = BatchNormalization(axis=1)(gyro_conv2) 
gyro_conv2 = Activation('relu')(gyro_conv2) 
gyro_conv2 = Dropout(0.2)(gyro_conv2) 

gyro_conv3 = Conv2D(CONV_NUM,(1, CONV_LEN_LAST),strides=(1,1),padding='valid',activation=None)(gyro_conv2) 
gyro_conv3 = BatchNormalization(axis=1)(gyro_conv3) 
gyro_conv3 = Activation('relu')(gyro_conv3) 
gyro_conv3 = Dropout(0.2)(gyro_conv3) 
sensor_conv_in = concatenate([acc_conv3, gyro_conv3], 2) 
sensor_conv_in = Dropout(0.2)(sensor_conv_in) 
sensor_conv1 = Conv2D(CONV_NUM2,kernel_size=(2, CONV_MERGE_LEN),padding='SAME')(sensor_conv_in) 
sensor_conv1 = BatchNormalization(axis=1)(sensor_conv1) 
sensor_conv1 = Activation('relu')(sensor_conv1) 
sensor_conv1 = Dropout(0.2)(sensor_conv1) 
sensor_conv2 = Conv2D(CONV_NUM2,kernel_size=(2, CONV_MERGE_LEN2),padding='SAME')(sensor_conv1) 
sensor_conv2 = BatchNormalization(axis=1)(sensor_conv2) 
sensor_conv2 = Activation('relu')(sensor_conv2) 
sensor_conv2 = Dropout(0.2)(sensor_conv2) 

sensor_conv3 = Conv2D(CONV_NUM2,kernel_size=(2, CONV_MERGE_LEN3),padding='SAME')(sensor_conv2) 
sensor_conv3 = BatchNormalization(axis=1)(sensor_conv3) 
sensor_conv3 = Activation('relu')(sensor_conv3) 

conv_shape = sensor_conv3.get_shape() 
print conv_shape 
x1 = Reshape(target_shape=(int(conv_shape[1]), int(conv_shape[2]*conv_shape[3])))(sensor_conv3) 

x1 = Dense(64, activation='relu')(x1) 

gru_1 = GRU(rnn_size, return_sequences=True, init='he_normal', name='gru1')(x1) 
gru_1b = GRU(rnn_size, return_sequences=True, go_backwards=True, init='he_normal', name='gru1_b')(x1) 
gru1_merged = merge([gru_1, gru_1b], mode='sum') 

gru_2 = GRU(rnn_size, return_sequences=True, init='he_normal', name='gru2')(gru1_merged) 
gru_2b = GRU(rnn_size, return_sequences=True, go_backwards=True, init='he_normal', name='gru2_b')(gru1_merged) 
x = merge([gru_2, gru_2b], mode='concat') 
x = Dropout(0.25)(x) 
n_class=2 
x = Dense(n_class)(x) 
model = Model(input=[acc_input_tensor,gyro_input_tensor], output=x) 
model.compile(loss='mean_squared_error',optimizer='adam') 
model.fit(inputs=[acc,gyro],outputs=labels,batch_size=1, validation_split=0.2, epochs=2,verbose=1 , 
     shuffle=False) 

在model.fit在ACC陀螺是(200×3),在輸入層形狀是(200×3)。爲什麼會有這樣的問題?檢查的輸入錯誤:預期acc_input有3個維度,但得到了陣列狀(200,3)

+0

對此問題感到抱歉,但是您是如何形象化您的模型的? – Paddy

+0

這是一個deeeeep網絡,希望你擁有大量的數據 – DJK

回答

0

形狀(None, 200, 3)在Keras用於批次,None裝置batch_size,因爲在創建或重塑輸入陣列的時間,批量大小可能未知,所以如果您將使用batch_size = 128您的批量輸入矩陣將具有形狀(128, 200, 3)

相關問題