Я пытаюсь сгенерировать подписи к изображениям, поэтому использую для этого модель RNN-LSTM. Я хочу оптимизировать его производительность путем настройки гиперпараматора. Я попытался использовать GridSearchCV для этого. Но невозможно передать 2 списка в качестве входного параметра в методе fit. X1_train - содержит функции изображения. X2_train - содержит последовательность слов y_train - содержит следующее слово. Итак, мои X - X1_train & X2_train, а y (target) - y_train.
Я искал настройки в Google, но не смог найти ресурс для Это. Я пытаюсь избежать, несколько циклов для создания списка параметров для поиска.
Мой код:
def define_model(vocab_size, max_length,layer_one_dropout=0.2,layer_two_dropout=0.2):
# feature extractor model
inputs1 = Input(shape=(2048,))
fe1 = Dropout(layer_one_dropout)(inputs1)
#fe1 = Dropout(0.5)(inputs1)
fe2 = Dense(256, activation='relu')(fe1)
# sequence model
inputs2 = Input(shape=(maximum_length,))
se1 = Embedding(vocab_size, 256, mask_zero=True)(inputs2)
se2 = Dropout(layer_two_dropout)(se1)
#se2 = Dropout(0.5)(se1)
se3 = LSTM(256)(se2)
# decoder model
decoder1 = add([fe2, se3])
decoder2 = Dense(256, activation='relu')(decoder1)
outputs = Dense(vocab_size, activation='softmax')(decoder2)
#model = Model(inputs=[inputs1, inputs2], outputs=outputs)
model = Model(inputs=[inputs1, inputs2], outputs=outputs)
model.compile(loss='categorical_crossentropy', optimizer='adam',metrics=['accuracy'])
return model
rnn = KerasClassifier(build_fn=define_model(vocab_size, maximum_length),
epochs=10 ,batch_size=256, verbose=1)
params={
'nn__layer_one_dropout': [0.3,0.5],
'nn__layer_two_dropout': [0.3,0.5]
}
gs = GridSearchCV(rnn, param_grid=params, n_jobs = -1, verbose=1, scoring='accuracy')
print(X1train.shape, X2train.shape,ytrain.shape)
gs.fit([X1train, X2train], ytrain)```
**Error is:**
```(306374, 2048) (306374, 34) (306374, 7581)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-819-68774369151e> in <module>
39 print(X1train.shape, X2train.shape,ytrain.shape)
40
---> 41 gs.fit([X1train, X2train], ytrain)
~/opt/anaconda3/lib/python3.7/site-packages/sklearn/model_selection/_search.py in fit(self, X, y, groups, **fit_params)
648 refit_metric = 'score'
649
--> 650 X, y, groups = indexable(X, y, groups)
651 fit_params = _check_fit_params(X, fit_params)
652
~/opt/anaconda3/lib/python3.7/site-packages/sklearn/utils/validation.py in indexable(*iterables)
246 """
247 result = [_make_indexable(X) for X in iterables]
--> 248 check_consistent_length(*result)
249 return result
250
~/opt/anaconda3/lib/python3.7/site-packages/sklearn/utils/validation.py in check_consistent_length(*arrays)
210 if len(uniques) > 1:
211 raise ValueError("Found input variables with inconsistent numbers of"
--> 212 " samples: %r" % [int(l) for l in lengths])
213
214
ValueError: Found input variables with inconsistent numbers of samples: [2, 306374]```