Все входные массивы (x) должны иметь одинаковое количество выборок при использовании Keras с бэкэндом TensorFlow (спросите еще раз) - PullRequest
0 голосов
/ 22 апреля 2020

Извините, не знаю, как задать хороший вопрос в первый раз, поэтому спросите еще раз.
Я создал модель с несколькими входами и выходами. Структура модели показана ниже.
У вас недостаточно репутации для публикации изображения, поэтому в этой ссылке изображение .

inputV = keras.layers.Input(shape=(4096,),name='inputV') #input for visible task
inputH = keras.layers.Input(shape=(4096,),name='inputH') #input for hidden task
hiddenTaskLayer = keras.layers.Dense(14,use_bias=False,activation='sigmoid',name='hiddenTask')
outputV = hiddenTaskLayer(inputV)
outputH = hiddenTaskLayer(inputH)
visibleTaskLayer = keras.layers.Dense(7,use_bias=False,activation='softmax',name='visibleTask')
outputV = visibleTaskLayer(outputV)
outputV = keras.layers.Activation('linear',name='outputV')(outputV)
outputH = keras.layers.Activation('linear',name='outputH')(outputH)
model = keras.models.Model(inputs=[inputH,inputV],outputs=[outputH,outputV])
model.compile(optimizer='sgd',
              loss={'outputH': 'msle', 'outputV': 'categorical_crossentropy'},
              loss_weights={'outputH': .5, 'outputV': 0.5})
Model: "model_2"
__________________________________________________________________________________________________
Layer (type)                    Output Shape         Param #     Connected to                     
==================================================================================================
inputH (InputLayer)             [(None, 4096)]       0                                            
__________________________________________________________________________________________________
inputV (InputLayer)             [(None, 4096)]       0                                            
__________________________________________________________________________________________________
hiddenTask (Dense)              (None, 14)           57344       inputV[0][0]                     
                                                                 inputH[0][0]                     
__________________________________________________________________________________________________
visibleTask (Dense)             (None, 7)            98          hiddenTask[0][0]                 
__________________________________________________________________________________________________
outputH (Activation)            (None, 14)           0           hiddenTask[1][0]                 
__________________________________________________________________________________________________
outputV (Activation)            (None, 7)            0           visibleTask[0][0]                
==================================================================================================
Total params: 57,442
Trainable params: 57,442
Non-trainable params: 0
__________________________________________________________________________________________________

Однако, когда я попытался приспособить модель

model.fit({'inputH': XforHT, 'inputV': XforVT},
          {'outputH': YforHT, 'outputV': YforVT},
          epochs=10000, batch_size=100,
          shuffle=True,validation_split=0.33, 
          callbacks=[tensorboard_callback, cp_callback, scheduler_callback])

с предоставленным набором данных,

print(XforHT.shape)
print(YforHT.shape)
print(XforVT.shape)
print(YforVT.shape)
(593, 4096)
(593, 14)
(327, 4096)
(327, 7)

ошибка возникает как:

ValueError: All input arrays (x) should have the same number of samples. Got array shapes: [(593, 4096), (327, 4096)]

Я знаю, что если сократить количество выборок в XforHT до 327, коды будут работать хорошо, но я не хочу этого делать.
У меня есть разное количество выборок для разных входов и выходов, и я Уверен, что у каждого выхода есть одинаковое количество выборок их соответствующих входных данных. Что я могу сделать , не отказываясь от некоторых своих образцов или не ища новые образцы ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...