Ошибка измерения при указании данных проверки в model.fit () - PullRequest
0 голосов
/ 02 апреля 2019

У меня есть два разных входа. Один вход - это 100 матриц размера 200x6000, которые я даю сверточной нейронной сети, а другой состоит из 100 векторов длиной 6000, которые я даю полностью подключенной нейронной сети. Я объединяю эти две сети, за которыми следует полностью подключенная нейронная сеть.

Проблема возникает, когда я явно указываю данные проверки вместо использования validation_split = 0.2. И тогда я получаю следующую ошибку:

enter image description here

Мой вклад в свёрточную нейронную сеть - это image_train измерений (100,1200,6000). Размеры входа в полностью подключенную нейронную сеть составляет (100,6000). А для проверки данные image_valid имеют размерность (30,1200,6000) и размерность position_valid (30,6000).

Размеры Ytest для данных обучения - (100,2), а Yvalid - (30,2)

Мой код выглядит следующим образом:

###Setting up the architecture

###Convolution neural network
i1 = Input(shape=(1, 200, 6000))

c1 = Conv2D(128*2, kernel_size=3,activation='relu',data_format='channels_first')(i1)
c1 = Conv2D(128*2, kernel_size=3, activation='relu')(c1)
c1 = Conv2D(128*2, kernel_size=4, activation='relu')(c1)
c1 = Dropout(0.2)(c1)
#c1 = Conv2D(128*2, kernel_size=4, activation='relu')(c1)
#c1 = Dropout(0.2)(c1)
c1 = Flatten()(c1)

###Fully connected neural network
i2 = Input(shape=(6000, ))
c2 = Dense(64, input_shape = (6000,), activation='relu')(i2)
#c2 = Dense(256, activation='relu', kernel_initializer='normal')(c2)
#c2 = Dense(64, input_shape = (4500,), activation='relu')(i2)
c2 = Dropout(0.2)(c2)

###Concatenating
c = concatenate([c1, c2])

x = Dense(256, activation='relu', kernel_initializer='normal')(c)
x = Dropout(0.25)(x)
output = Dense(2, activation='softmax')(x)

model = Model([i1, i2], [output])

model.summary()

model.compile(loss='categorical_crossentropy',
          optimizer='sgd',
          metrics=['accuracy'])

history = model.fit([image_train, positions_train], Ytest, batch_size=32,
          epochs=20,
          verbose=1,
          validation_data=([image_valid, positions_valid], Yvalid))

Если бы я использовал validation_split = 0.2, тот же код работал бы. Но я хочу указать validation_data, и когда я это делаю, выдает ошибку, о которой я упоминал выше. Мы будем признательны за понимание.

...