• 1000 при запуске
model.fit
мне нужно указать раздел проверки данных TRAIN или данных TEST? - Насколько я понимаю, это будет val_split тестовых данных, поскольку каждая свертка будет повторять разные их комбинации.
Обучаемая модель представляет собой многоклассовый классификатор с несколькими метками. * У меня есть ранняя остановка и контрольные точки модели, так как я хочу сохранить и наиболее эффективную модель.
код:
inputs=np.array(countsscale)#ALL data, scaled to between 0 and 1
targets=trainingtarget #ALL targets -- one-hot encoded using keras to_categorical
checkpoint=tf.keras.callbacks.ModelCheckpoint(filepath=fileName,monitor='val_loss',verbose=1,save_weights_only=True,save_freq='epoch')
#earlystopping
earlystop=tf.keras.callbacks.EarlyStopping(monitor='val_loss', patience=5,verbose=1,mode='auto')
fold_no = 1
for train, test in kfold.split(normCountsscale1, trainingtarget):
# Define the model
model=tf.keras.models.Sequential()
model.add(tf.keras.layers.Dense(units=200, input_dim=10000, activation="relu"))
model.add(tf.keras.layers.Dense(units=300, activation="relu"))
model.add(tf.keras.layers.Dense(units=100, activation="relu"))
model.add(tf.keras.layers.Dense(units=19, activation="sigmoid"))
# Compile the model
model.compile(loss="binary_crossentropy", optimizer="adam", metrics=['accuracy'])
# Generate a print
print('------------------------------------------------------------------------')
print(f'Training for fold {fold_no} ...')
checkpoint = tf.keras.callbacks.ModelCheckpoint(checkpointDir+str(fold_no),
monitor='val_loss', verbose=1,
save_best_only=True, mode='auto')
history=model.fit(inputs[train], targets[train],
epochs=200,
batch_size=32,
verbose=1,
validation_data=(inputs[test], targets[test]),
callbacks=[checkpoint, earlystop], shuffle=True)
scores = model.evaluate(inputs[test], targets[test], verbose=0)
print(f'Score for fold {fold_no}: {model.metrics_names[0]} of {scores[0]}; {model.metrics_names[1]} of {scores[1]*100}%')
acc_per_fold.append(scores[1] * 100)
loss_per_fold.append(scores[0])
# Increase fold number
fold_no = fold_no + 1
первый вопрос: kfold.split позаботится о разделении, и ни о каком другом разделение до этого необходимо? Второй вопрос: аргумент validation_data в model.fit должен быть тестовыми данными из for train, test in kfold.split(normCountsscale1, trainingtarget)
: правильно?
или данные поезда (входы [поезд]) должны иметь свой собственный раздел проверки, т.е. validation_split=0.2
аргумент в model.fit, а затем тестовые данные оцениваются отдельно?
Причина путаницы, я видел обучение без какой-либо проверки в примерах перекрестной проверки и обучение, где разделение проверки - это именно набор тестов. 1020 * спасибо !!