Как вход должен соотноситься / сопоставляться с меткой y, если Keras Model.fit () предоставлен список массивов входных поездов> - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь работать с моделью глубокого обучения в двух следующих сценариях ios, где даны два разных ввода. Я хочу добиться следующего:

  1. Обучить две модели (с разными весами, но с одинаковой архитектурой) с одинаковыми входными данными и объединить результат. Поэтому в model.fit () я передаю только значение trainX. Код приведен ниже. Он отлично работает.

    def create_model(input_tensor):
        x= Conv1D(filters = 16, kernel size=6, strides = 5, kernel_initializer = "uniform", activation = "relu")(input_tensor)
        x= GlobalMaxPooling1D()(x)
        x = Dense(2,activation ='softmax')()
        return x
    
    dataframe = pd.read_csv(Filename, index_col=0)
    X= dataframe.values[:,:].astype(float)
    Y = dataframe.values[:,1]
    
    trainx, testx, trainy, testy = train_test_split(X,Y, test_Szie= 0.2, random_state=200, shuffle =True)
    
    input_shape = (33000,1)
    input_tensor = Input(input_shape)
    pred_a = create_model(input_tensor)
    pred_b = create_model(input_tensor)
    
    out = keras.layers.Multiply()([pred_a, pred_b]) 
    
    model =Model(inputs=(input_tensor), outputs=out)
    model.compile(loss='categorical_crossentropy', optimizer= 'Adam', metrics =['accuracy'])
    histroy = model.fit(trainX, trainy)
    
  2. Тренируйте одну и ту же модель (с одинаковыми весами) дважды, но с разными входами. Я запутался, как передать входные данные в этом случае. В обычных случаях у нас одинаковое количество экземпляров как в trainX, так и в trainy. Если я передам список типа model.fit([x_train_1, x_train_2], trainy), то число экземпляров объединенных x_train_1, x_train_2 будет в два раза больше, чем y. Насколько trainy соответствует входному trainx в этом случае?

1 Ответ

0 голосов
/ 06 апреля 2020

Входные данные и соответствующие выходные данные модели имеют формы X = (batch_size, ....), y = (batch_size, ....). В случае нескольких входов вы можете определить несколько входных слоев и подавать их для различных экземпляров вашей модели:

inp_A = Input(shape=(...))
inp_B = Input(shape=(...))

pred_A = create_model(inp_A)
pred_B = create_model(inp_B)

*** Other layers and code ****
model = Model(inputs=[inp_A, inp_B], outputs=out)
*** Other code ***

Затем вы можете вызвать model.fit с передачей списка входов и одного вывода.

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