2017-08-19 57 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)

相关问题