le mie informazioni di contatto
Posta[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Scuotimento dello sfondo:(Non leggerlo se vuoi risparmiare)
Di recente ho trovato uno stage come annotatore di intelligenza artificiale, ma durante tutto il processo stavo svolgendo lavori relativi al testo. Essenzialmente, stavo ancora stringendo le viti, volevo solo apprendere alcune competenze nell'adeguamento dei parametri e nell'implementazione per aumentare la mia competitività, in modo che il mio il curriculum sarebbe più facile da confezionare in futuro.
Naturalmente, la prima scelta per i tutorial è l'Università Bilibili. Come previsto, ho trovato uno strumento gratuito per la regolazione dei parametri che ha ricevuto molte recensioni positive.Optuna。
A proposito, lo stage che ho fatto lo è statoAnnotazione di testo per la direzione sulla sicurezza dei contenuti(Detto umano: assicurarsi che il contenuto del set di formazione siacorrettezza politica), ma guardando altri video per imparare a usare Yolo5 per il riconoscimento di maschere e volti, ho scoperto che esiste un programma gratuitoAnnotazione dell'immagineLo strumento è molto facile da usare. L'ho testato io stesso. È molto facile da installare e utilizzare. Non presenta pubblicità o oneri. Si concentra sulla semplicità e sull'efficienza.
Nome dello strumento:EtichettaImg
Un articolo di account pubblico condiviso in precedenza dall'istruttore ha fornito un'introduzione molto completa:
Italiano: https://mp.weixin.qq.com/s/AE_rJwd9cKQkUGFGD6EfAg
Portale dei conti pubblici
————————————————————————————————————————————
Testo: Informazioni su Optuna e sul processo di apprendimento
**Link al tutorial video: **https://www.bilibili.com/list/watchlater?oid=832000670&bvid=BV1c34y1G7E8&spm_id_from=333.1007.top_right_bar_window_view_later.content.click
Video dei maestri della Stazione B
Metodo di installazione:
Anaconda dovrebbe essere installato anche tramite conda. L'ho appena installato tramite pip come mostrato nel video per evitare problemi.
————————————————————————————————————————————
Collegamento al caso Kaggle utilizzato dai maestri:
https://www.kaggle.com/code/yunsuxiaozi/learn-to-use-the-optuna/notebook
portale
Sebbene copiare e incollare sia divertente, per mantenere la sensazione e sentire i dettagli, si consiglia, se hai tempo, di scriverlo lentamente a mano. Anche se lo digiti in base ad esso, è meglio che copiare e incollando direttamente. Quando impari per la prima volta un'abilità, lento è veloce.
Allo stesso modo, se hai Anaconda sul tuo computer, si consiglia di creare un ambiente virtuale speciale per testare Optuna ed evitare conflitti.
————————————————————————————————————————————
Tutorial sulla costruzione dell'ambiente virtuale conda del master CSDN e sulla configurazione dell'ambiente virtuale jupyter:
Italiano: https://blog.csdn.net/fanstering/article/details/123459665
Puoi saltare questo passaggio se non hai Anaconda
Conosco già questo passaggio della creazione di un ambiente virtuale. L'ambiente e i pacchetti Optuna sono stati installati. Tuttavia, Jupyter segnala ancora che non è presente alcuna libreria Optuna quando l'ho installata secondo il tutorial di questo esperto.nb_condaIl problema verrà risolto più tardi.
————————————————————————————————————————————
Quindi entra nel processo familiare di scrittura del codice. Innanzitutto, importa le librerie Python richieste e installa tutto ciò che manca. Sia l'installazione pip che l'installazione conda sono accettabili. Anaconda consiglia quest'ultima.
Se segnala un errore spettrale: TqdmWarning: IProgress non trovato. Aggiornare jupyter e ipywidgets. Vedere https://ipywidgets.read
zhebu
Non aver paura, devi solo aggiornare Jupyter.
Dopo aver completato i primi tre passaggi, ho aggiornato ed eseguito questo passaggio del programma e tutto è andato bene.
————————————————————————————————
Link per il download del set di dati: https://www.kaggle.com/competitions/titanic/data?select=train.csv
portale
total_df['Embarked_is_nan']=(total_df['Embarked']!=total_df['Embarked'])
Questa riga di codice crea una nuova colonna "Embarked_is_nan", che viene utilizzata per contrassegnare valori nulli (NaN) nella colonna "Embarked". Se l'elemento nella colonna "Imbarcato" non è esso stesso (ovvero l'elemento è un NaN), la posizione corrispondente nella nuova colonna verrà impostata su True.
Questa è la prima volta che vedo questo tipo di scrittura.
keys=['Pclass','Sex','SibSp','Parch']
for key in keys:
values=np.unique(train_df[key].values)
if len(values)<10 and key!="Survived":
print(f"key:{key},values:{values}")
key_target=train_df['Survived'].groupby([train_df[key]]).mean()
keys=key_target.keys().values
target=key_target.values
key_target=pd.DataFrame({key:keys,key+"_target":target})
total_df=pd.merge(total_df,key_target,on=key,how="left")
total_df.head()
Questo pezzo di codice è un po' complicato. Innanzitutto filtra quattro caratteristiche importanti ['Pclass', 'Sex', 'SibSp', 'Parch'] e le memorizza nell'elenco delle chiavi a cui sono considerate potenzialmente correlate la situazione di sopravvivenza dei passeggeri.
Quindi scorrere l'elenco uno per uno per vedere quanti valori univoci ha ciascuna funzionalità nel set di addestramento.
Se il numero di valori univoci len (valori) di una colonna chiave è inferiore a 10, il codice analizzerà ulteriormente la relazione tra questa colonna e la situazione di sopravvivenza.
(Sono un po' confuso sul perché chiave! = "Sopravvissuto" è enfatizzato. Non c'è alcun valore di "Sopravvissuto" in questo elenco di chiavi??)
Stampalo e scopri che tutti e quattro gli attributi soddisfano le condizioni:
key_target=train_df['Survived'].groupby([train_df[key]]).mean()
In questo passaggio, nel training set train_df, il codice calcola il tasso di sopravvivenza medio della colonna "Sopravvissuto" corrispondente a ciascun valore univoco nell'elenco delle chiavi.
Come si può vedere dalla figura, il valore del dataframe key_target cambia con il valore dell'attributo key in ogni ciclo. Ad esempio, quando viene elaborato key = Pclass, le chiavi di key_target sono 1, 2 e 3 e il. valore è il tasso di sopravvivenza medio corrispondente; elaborazione Quando chiave = sesso, le chiavi di key_target sono "Femmina" e "Maschio" e i valori sono anche i corrispondenti tassi di sopravvivenza medi.
I passaggi successivi sono un po' complicati. Disegna una tabella di parole per capirla:
Ci sono un totale di quattro attributi nelle chiavi. Uno di essi verrà utilizzato per ciascun caso. Infine, i dati dei quattro attributi verranno archiviati in total_df, riepilogati e restituiti.
Questo è il caso di PClass. PClass ha tre valori: 1/2/3 Il tasso di sopravvivenza medio viene calcolato per ciascun valore e memorizzato in key_target.
Quindi la chiave di key_target viene estratta e memorizzata nell'elenco delle chiavi (sì, questo elenco si chiama anche chiavi..., ma in questo momento i valoriin esso dovrebbero essere i tre valori1/ 2/3 di PClass) e il valore viene memorizzato nell'elenco di destinazione (ovvero i tre numeri 0.629630, 0.472826, 0.242363), quindi nominare artificialmente le due colonne di chiave e valore. La colonna chiave è anche chiamata PClass e la colonna del valore è più personalizzata e dovrebbe essere chiamata "PClass_target".
Per analogia, i key_target dei successivi tre attributi sono tutti in questa routine, ma la tabella total_df è in continua espansione.
(maschio qui è una parola vietata, l'immagine è stata tagliata e un pezzo separato è stato aggiunto in seguito)
Fino a quando finalmente total_df diventa una tabella di grandi dimensioni:
Ad essere onesti, per un caso Optuna il cui scopo principale è insegnare alle persone come utilizzare lo strumento di regolazione dei parametri, la logica scritta dall'autore originale in questo passaggio ha davvero aumentato il peso della comprensione per me...
Ho chiesto a Kimi di riscrivere questo codice in una versione più chiara e semplice, in modo che non sia facile confondere i tanti tasti e target che riempiono lo schermo:
Questa parte non è il fulcro della fase di regolazione dei parametri. Se davvero non la capisci, puoi saltarla. ——————————————————————————————————————————
Usa la media per riempire i valori mancanti Segna i passaggi comuni nell'elaborazione dei dati che hai imparato.
Supplemento: Quando ho seguito il corso di analisi dei dati e visualizzazione di Tableau, l'insegnante ha condiviso un post che introduceva specificamente molti tipi di dati mancanti e metodi di elaborazione: https://towardsdatascience.com/all-about-missing-data-handling-b94b8b5d2184
Aggiungi la descrizione del collegamento
Il post è in inglese ed è necessario registrarsi ed effettuare il login per visualizzarlo.
————————————————————————————————————————————
Dopo aver ottenuto il set di dati total_df con attributi sempre più completi, viene nuovamente suddiviso nel set di addestramento e nel set di test in base alla lunghezza precedente.
————————————————————————————————————————————
Qui viene menzionato che il rapporto tra set di addestramento e set di test è 8:2, ovvero 4:1, che è un rapporto di divisione molto comune.
L'autore originale probabilmente considerava test e valido la stessa cosa, quindi non c'era alcuna distinzione speciale nella denominazione.
Ma in realtà questi due concetti non sono esattamente la stessa cosa (ma vedo che a volte la distinzione non è rigorosa). Qui utilizzo un metodo di scrittura unificato di test_X e test_y.
————————————————————————————————————————————
importareRegressore LGBM , sebbene il set di dati del Titanic sia utilizzato principalmente per problemi di classificazione (prevedere se un passeggero sopravviverà), l'autore originale lo tratta qui come un problema di regressione. Ho considerato che per i principianti sarebbe stato più facile iniziare scegliendo un tutorial con un set di dati semplice e familiare e una spiegazione video, quindi non mi sono preoccupato dei dettagli dei problemi di regressione o di classificazione. Una volta acquisito dimestichezza con il processo, è possibile trovare online dati più complessi e standardizzati per esercitarsi.
Link didattico supplementare: "Impostazione del parametro LGMBRegressor parametro lgbmclassifier"
Italiano: https://blog.51cto.com/u_12219/10333606
Aggiungi la descrizione del collegamento
(A proposito, non c'è un classificatore LGBM in questo post? Perché l'autore ha menzionato specificamente la gestione dei problemi di regressione nel video?)
————————————————————————————————————————————
RMSE come funzione di perdita, ovvero un indice di valutazione, è una funzione Python che calcola l'errore quadratico medio (Root Mean Square Error).Più piccolo è, meglio è。
————————————————————————————————————————————
Imposta i parametri dell'obiettivo dell'attività in base alla spiegazione del video originale dell'autore:
Per nomi di parametri specifici, significati e valori consigliati, fare riferimento al post di apprendimento supplementare "Impostazione del parametro LGMBRegressor Parametro lgbmclassifier" sopra.
def objective(trial):
param = {
'metric':'rmse',
'random_state':trial.suggest_int('random_state', 2023, 2023), #随机种子固定,所以设置为2023-2023
'n_estimators':trial.suggest_int('n_estimators', 50, 300), #迭代器数量 50-300 的整数
'reg_alpha':trial.suggest_loguniform('reg_alpha', 1e-3, 10.0),
'reg_lambda':trial.suggest_loguniform('reg_lambda', 1e-3, 10.0), #对数正态分布的建议值
'colsample_bytree':trial.suggest_float('colsample_bytree', 0.5, 1), #浮点数
'subsample':trial.suggest_float('subsample', 0.5, 1),
'learning_rate':trial.suggest_float('learning_rate', 1e-4, 0.1, log = True),
'num_leaves':trial.suggest_int('num_leaves', 8, 64), #整数
'min_child_samples':trial.suggest_int('min_child_smaples', 1, 100),
}
model = LGBMRegressor(**param) #调用模型
model.fit(train_X, train_y, eval_set = [(test_X, test_y)], early_stopping_rounds = 100, verbose = False) #拟合
preds = model.predict(test_X) #计算测试集的损失
rmse = RMSE(test_y, preds)
return rmse
————————————————————————————————————————————
Codice chiave: chiama Optuna, crea un'attività di apprendimento, specifica la perdita minima e imposta il nome dell'attività:
#创建的研究命名,找最小值
study = optuna.create_study(direction = 'minimize', study_name = 'Optimize boosting hpyerparameters') #创建了一个Optuna研究对象,用于优化超参数。
#关键代码:调用Optuna,创建一个学习任务,指定让损失最小,设置任务名称。
#目标函数,尝试的次数
study.optimize(objective, n_trials = 100) #将设定好参数的object任务传进来,尝试一百次
#输出最佳的参数
print('Best Trial: ',study.best_trial.params) #找到最佳参数 tudy.best_trial 表示在所有尝试中损失最小的那次试验,params 是一个字典,包含了那次试验中使用的超参数。
lgbm_params = study.best_trial.params #这行代码将最佳参数赋值给 lgbm_params 变量。这样可以将这些参数用于LightGBM模型或其他需要这些超参数的模型。
————————————————————————————————————————————
L'idea va bene, ma abbiamo riscontrato uno strano errore: fit() ha ricevuto un argomento chiave inaspettato 'early_stopping_rounds':
Il metodo di Kimi riportava ancora un errore dopo averlo provato, quindi probabilmente non dovremmo prenderci la colpa.
I maestri di StackFlow forniscono due soluzioni:
https://stackoverflow.com/questions/76895269/lgbmclassifier-fit-got-an-unexpected-keyword-argument-early-stopping-rounds
portale
Tieni presente che è meglio utilizzare pip install, conda install sembra non essere in grado di installarsi.
Ma ho scoperto che era inutile... ricevevo ancora lo stesso errore, non riconoscevo early_stopping_rounds e, anche dopo averlo eliminato, non riconoscevo il seguente parametro verbose...
Non è possibile modificare i parametri secondo il post supplementare precedente Sembra che l'aggiornamento delle informazioni sia in ritardo...
————————————————————————————————————————————
Durante il processo di ricerca ho trovato anche un punto soggetto a errori: early_stopping_rounds sembra avere solo un limite massimo di 100.
Italiano: https://blog.csdn.net/YangTinTin/article/details/120708391
portale
————————————————————————————————————————————
Ho cercato manualmente su Internet e ho chiesto a Kimi, ma non ho ancora trovato un'alternativa molto efficace. Poiché vogliamo soprattutto provare l'utilizzo di Optuna, eliminiamo prima questi due parametri fastidiosi.
model.fit(train_X, train_y, eval_set=[(test_X, test_y)]) #拟合
Codice obiettivo completo:
def objective(trial):
param = {
'metric':'rmse',
'random_state':trial.suggest_int('random_state', 2023, 2023), #随机种子固定,所以设置为2023-2023
'n_estimators':trial.suggest_int('n_estimators', 50, 300), #迭代器数量 50-300 的整数
'reg_alpha':trial.suggest_loguniform('reg_alpha', 1e-3, 10.0),
'reg_lambda':trial.suggest_loguniform('reg_lambda', 1e-3, 10.0), #对数正态分布的建议值
'colsample_bytree':trial.suggest_float('colsample_bytree', 0.5, 1), #浮点数
'subsample':trial.suggest_float('subsample', 0.5, 1),
'learning_rate':trial.suggest_float('learning_rate', 1e-4, 0.1, log = True),
'num_leaves':trial.suggest_int('num_leaves', 8, 64), #整数
'min_child_samples':trial.suggest_int('min_child_smaples', 1, 100),
}
model = LGBMRegressor(**param) #调用模型
model.fit(train_X, train_y, eval_set=[(test_X, test_y)]) #拟合
preds = model.predict(test_X) #计算测试集的损失
rmse = RMSE(test_y, preds)
return rmse
Allora puoiOttieniBest_TrialAvuto:
————————————————————————————————————————————
Allo stesso modo, veniva utilizzato anche l'UP originalexgboost e catboostMetodi simili vengono utilizzati per trovare i parametri ottimali.
Non è difficile vedere che la differenza principale tra i tre diversi metodi è il parametro del parametro selezionato e il metodo della funzione specificato dal modello.
XGBoost:
Risultati XGBoost:
————————————————————————————————————————————
CatBoost:
Risultati CatBoost:
————————————————————————————————————————————
ultimo usoConvalida incrociata K-foldOttieni i migliori risultati:
La convalida incrociata è anche un termine comunemente usato nell'apprendimento automatico.
def accuracy(y_true, y_pred):
return np.sum(y_true == y_pred)/len(y_true)
kf è un oggetto KFold, ovvero uno strumento nella libreria scikit-learn per implementare la convalida incrociata K-fold. KFold divide il set di dati inn_divide sottoinsiemi, ogni sottoinsiemeA turno, come set di convalidae il resto funge da set di allenamento.
for train_index, valid_index in kf.split(x): questa riga di codice eseguirà l'iterazione sull'oggetto KFold, restituendo due array per ogni iterazione: train_index e valid_index.train_index contiene l'indice del punto dati utilizzato per l'addestramento, mentre valid_index contiene l'indice del punto dati utilizzato per la convalida . In base all'indice del set completo X, y, è possibile ottenere ogni volta i dati del set di addestramento e del set di verifica. Questo processo è come interrompere l'intera classe, selezionando casualmente alcuni studenti ogni volta e chiamando un gruppo di studenti.
————————————————————————————————————————————
Ora ho riscontrato un altro bug comune. Anche se non so come sia successo, non so se Python dovrebbe assumersi nuovamente la colpa. (Poiché le forme dei set di dati X e Y erano esattamente le stesse di prima dell'autore, logicamente non ci saranno altre operazioni su di essi in seguito...)
Non aver paura se incontri problemi, risolvili! Devi fidarti di Kimi su questo! (A proposito, anche i dipendenti dell'azienda di intelligenza artificiale dove sto facendo il tirocinio usano Kimi, quindi Kimi è relativamente affidabile e libero!!)
Non dimenticare di disabilitare contemporaneamente i parametri early_stopping_rounds e verbose per evitare di causare un altro errore.
Questo pezzo di codice è relativamente lungo e contiene molte ripetizioni. Fai attenzione a non commettere errori.
from sklearn.model_selection import KFold #在机器学习库中导入k折交叉验证的函数
from xgboost import XGBRegressor
from lightgbm import LGBMRegressor
from catboost import CatBoostRegressor
def accuracy(y_true,y_pred):
return np.sum(y_true==y_pred)/len(y_true)
print("start fit.")
folds = 10 #将数据分成10份
y=train_df['Survived']
X=train_df.drop(['Survived'],axis=1)
train_accuracy=[]
valid_accuracy=[]
# 存储已学习模型的列表
models = []
#将数据集随机打乱,并分成folds份
kf = KFold(n_splits=folds, shuffle=True, random_state=2023)
#从x_train中按照9:1的比例分成训练集和验证集,并取出下标
for train_index, valid_index in kf.split(X):
#根据下标取出训练集和验证集的数据
x_train_cv = X.iloc[train_index]
y_train_cv = y.iloc[train_index]
x_valid_cv =X.iloc[valid_index]
y_valid_cv = y.iloc[valid_index]
model = LGBMRegressor(**lgbm_params)
#模型用x_train_cv去训练,用x_train_cv和x_valid_cv一起去评估
model.fit(
x_train_cv,
y_train_cv,
eval_set = [(x_train_cv, y_train_cv), (x_valid_cv, y_valid_cv)],
#early_stopping_rounds=100,
#verbose = 100, #迭代100次输出一个结果
)
#对训练集进行预测
y_pred_train = model.predict(x_train_cv)
#对验证集进行预测
y_pred_valid = model.predict(x_valid_cv)
y_pred_train=(y_pred_train>=0.5)
y_pred_valid=(y_pred_valid>=0.5)
train_acc=accuracy(y_pred_train,y_train_cv)
valid_acc=accuracy(y_pred_valid,y_valid_cv)
train_accuracy.append(train_acc)
valid_accuracy.append(valid_acc)
#将model保存进列表中
models.append(model)
model = XGBRegressor(**xgb_params)
#模型用x_train_cv去训练,用x_train_cv和x_valid_cv一起去评估
model.fit(
x_train_cv,
y_train_cv,
eval_set = [(x_train_cv, y_train_cv), (x_valid_cv, y_valid_cv)],
#early_stopping_rounds=100,
#verbose = 100, #迭代100次输出一个结果
)
#对训练集进行预测
y_pred_train = model.predict(x_train_cv)
#对验证集进行预测
y_pred_valid = model.predict(x_valid_cv)
y_pred_train=(y_pred_train>=0.5)
y_pred_valid=(y_pred_valid>=0.5)
train_acc=accuracy(y_pred_train,y_train_cv)
valid_acc=accuracy(y_pred_valid,y_valid_cv)
train_accuracy.append(train_acc)
valid_accuracy.append(valid_acc)
#将model保存进列表中
models.append(model)
model = CatBoostRegressor(**cat_params)
#模型用x_train_cv去训练,用x_train_cv和x_valid_cv一起去评估
model.fit(
x_train_cv,
y_train_cv,
eval_set = [(x_train_cv, y_train_cv), (x_valid_cv, y_valid_cv)],
#early_stopping_rounds=100,
#verbose = 100, #迭代100次输出一个结果
)
#对训练集进行预测
y_pred_train = model.predict(x_train_cv)
#对验证集进行预测
y_pred_valid = model.predict(x_valid_cv)
y_pred_train=(y_pred_train>=0.5)
y_pred_valid=(y_pred_valid>=0.5)
train_acc=accuracy(y_pred_train,y_train_cv)
valid_acc=accuracy(y_pred_valid,y_valid_cv)
train_accuracy.append(train_acc)
valid_accuracy.append(valid_acc)
#将model保存进列表中
models.append(model)
print(f"train_accuracy:{train_accuracy}, valid_accuracy:{valid_accuracy}")
train_accuracy=np.array(train_accuracy)
valid_accuracy=np.array(valid_accuracy)
print(f"mean_train_accuracy: {np.mean(train_accuracy)}")
print(f"mean_valid_accuracy: {np.mean(valid_accuracy)}")
L'output intermedio tra me e l'autore originale è leggermente diverso, non so cosa causi il divario:
Ma fortunatamente, sembra che i risultati finora non siano poi così negativi:
————————————————————————————————————————————
Testare le prestazioni di ciascun modello sul set di test:
test_X = test_df.drop(['Survived'], axis = 1).values
preds_test = []
#用每个保存的模型都对x_test预测一次,然后取平均值
for model in models:
pred = model.predict(test_X)
preds_test.append(pred)
#将预测结果转换为np.array
preds_test_np = np.array(preds_test)
#按行对每个模型的预测结果取平均值
test_pred= preds_test_np.mean(axis = 0 )
test_pred=(test_pred >= 0.5).astype(np.int64)
#平均预测值与 0.5 进行比较,根据比较结果(大于等于 0.5 为 True,否则为 False)将每个值转换为二进制形式(即 1 或 0),然后使用 astype(np.int64) 将布尔值转换为 64 位整数类型。
test_pred
Guarda l'output test_pred.shape. Non guardare la forma quadrata dell'array. Guarda la forma come un array unidimensionale con 418 elementi.
In Python, la forma di un array unidimensionale è solitamente rappresentata come (N,), dove N è il numero totale di elementi nell'array.
————————————————————————————————————————————
Come utilizzato nella frase test_pred=(test_pred >= 0.5).astype(np.int64), ci sono molti esempi di creazione di una nuova colonna e confronto della dimensione per assegnare un valore Bool di True o False. Ci sono molti esempi in questo progetto:
————————————————————————————————————————————
Infine salva e scrivi nel file CSV:
submission=pd.read_csv("D:/StudyFiles/Optuna_Titanic/data/gender_submission.csv") #读取CSV文件,并将其存储在变量submission中
submission['Survived']=test_pred #更新了submission DataFrame中的'Survived'列,使其包含模型预测的生存概率或分类结果。
submission.to_csv("submission.csv",index=None) #将更新后的submission DataFrame保存为一个新的CSV文件"submission.csv"。参数index=None表示在保存CSV文件时不包括行索引。
submission.head()
————————————————————————————————————————————
Invierò il mio pacchetto di codici alla home page CSDN. Gli amici bisognosi sono invitati a scaricarlo da soli. Ci vediamo nel prossimo tutorial.
————————————————————————————————————————————
Altri contenuti didattici correlati:
(1) **9.1 Regolazione dei parametri del modello [Stanford 21 autunno: edizione cinese pratica dell'apprendimento automatico]: **Il video dell'insegnante Li Mu introduce alcune teorie sulla regolazione dei parametri. Se non capisci la regolazione dei parametri, puoi guardarlo per imparare conoscenza di base. .
https://www.bilibili.com/video/BV1vQ4y1e7LF/?spm_id_from=333.788.recommend_more_video.1&vd_source=cdfd0a0810bcc0bcdbcf373dafdf6a82
portale
(due) Questo strumento di regolazione automatica del ginseng è semplicemente troppo potente! Può soddisfare pienamente l'uso quotidiano dell'apprendimento automatico e della regolazione dei parametri di apprendimento profondo! Uno strumento indispensabile per i principianti!: Il contenuto del video non è buono come il video dimostrativo che ho seguito. Parla principalmente di Optuna brevemente senza casi pratici.
https://www.bilibili.com/video/BV1Zs421K7Qj/?spm_id_from=333.788.recommend_more_video.6&vd_source=cdfd0a0810bcc0bcdbcf373dafdf6a82
portale
Tuttavia, sono molto interessato al libro presentato da questo UP, perché per un principiante come me che manca di esperienza e ama trovare regole, spero davvero di avere una guida che possa introdurmi ad alcune formule e indicazioni universali.