Не могу запустить эту часть кода, и она очень медленная.
Я просто хочу создать модель для классификации изображений листьев на 4 типа (ни одного, затем 3 типа болезней)
Я хочу использовать F1 в качестве функции потерь, а затем использовать байесовскую оптимизацию, чтобы получить наилучшие параметры для моей модели листового класса, но она не работает. Или он работает очень медленно, а затем выходит из строя...
Я работаю на процессоре, так как у меня нет графического процессора
# Objective function for Optuna
def objective(trial, train_dataloader, val_dataloader, device):
# Define hyperparameter search space using Optuna's suggest functions
conv1_filters = trial.suggest_categorical("conv1_filters", [16, 32, 64])
conv2_filters = trial.suggest_categorical("conv2_filters", [64, 128, 256])
kernel_size = trial.suggest_categorical("kernel_size", [3, 5, 7])
hidden_units = trial.suggest_categorical("hidden_units", [256, 512, 1024])
dropout_rate = trial.suggest_float("dropout_rate", 0.1, 0.5)
learning_rate = trial.suggest_float("learning_rate", 1e-5, 1e-2, log=True)
num_epochs = trial.suggest_int("num_epochs", 10, 50)
# Initialize the model with the given params
model = LeafCNN(
conv1_filters=conv1_filters,
conv2_filters=conv2_filters,
kernel_size=kernel_size,
hidden_units=hidden_units,
dropout_rate=dropout_rate
).to(device)
# Set up the optimizer and loss function
optimizer = optim.Adam(model.parameters(), lr=learning_rate)
loss_fn = nn.CrossEntropyLoss(weight=class_weights_tensor)
# Early stopping parameters
patience = 10 # Allow 10 epochs without improvement
delta = 0.001 # Minimum change that counts as an improvement
best_val_loss = float("inf")
patience_counter = 0 # Starting the counter at 0
# Training loop
for epoch in range(num_epochs):
model.train()
for X_batch, y_batch in train_dataloader:
X_batch, y_batch = X_batch.to(device), y_batch.to(device)
optimizer.zero_grad()
outputs = model(X_batch)
loss = loss_fn(outputs, y_batch)
loss.backward()
optimizer.step()
# Validation loss
model.eval()
val_loss = 0.0
with torch.no_grad():
for X_batch, y_batch in val_dataloader:
X_batch, y_batch = X_batch.to(device), y_batch.to(device)
outputs = model(X_batch)
loss = loss_fn(outputs, y_batch)
val_loss += loss.item()
val_loss /= len(val_dataloader)
print(f"Epoch {epoch + 1}/{num_epochs}, Val Loss: {val_loss}")
if val_loss < best_val_loss - delta:
best_val_loss = val_loss
patience_counter = 0
else:
patience_counter += 1
if patience_counter >= patience:
print(f"Early stopping triggered at epoch {epoch + 1}")
break
# Evaluate using F1 score
model.eval()
all_preds, all_labels = [], []
with torch.no_grad():
for X_batch, y_batch in val_dataloader:
X_batch, y_batch = X_batch.to(device), y_batch.to(device)
outputs = model(X_batch)
_, predicted = torch.max(outputs, 1)
all_preds.extend(predicted.cpu().numpy())
all_labels.extend(y_batch.cpu().numpy())
f1 = f1_score(all_labels, all_preds, average="weighted")
return f1 # We aim to maximize the F1 score
# Main function to run Optuna optimization
def optuna_search(train_dataloader, val_dataloader, device, num_trials):
# Create Optuna study
study = optuna.create_study(direction="maximize") # Maximize the F1 score
study.optimize(lambda trial: objective(trial, train_dataloader, val_dataloader, device), n_trials=num_trials)
# Print the best hyperparameters
print("Best hyperparameters found:", study.best_params)
print("Best F1 Score:", study.best_value)
return study.best_params, study.best_value
# Main Program
if __name__ == "__main__":
# Create DataLoaders
train_dataset = TensorDataset(X_train_split, y_train_split)
train_dataloader = DataLoader(train_dataset, batch_size=4, shuffle=True)
val_dataset = TensorDataset(X_val, y_val)
val_dataloader = DataLoader(val_dataset, batch_size=4, shuffle=False)
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
# Run Optuna optimization
best_params, best_f1 = optuna_search(train_dataloader, val_dataloader, device, num_trials=10)
print("Best Params:", best_params)
print("Best F1 Score:", best_f1)
Подробнее здесь: https://stackoverflow.com/questions/792 ... timisation
Многоклассовая классификация с байесовской оптимизацией ⇐ Python
Программы на Python
-
Anonymous
1734304077
Anonymous
Не могу запустить эту часть кода, и она очень медленная.
Я просто хочу создать модель для классификации изображений листьев на 4 типа (ни одного, затем 3 типа болезней)
Я хочу использовать F1 в качестве функции потерь, а затем использовать байесовскую оптимизацию, чтобы получить наилучшие параметры для моей модели листового класса, но она не работает. Или он работает очень медленно, а затем выходит из строя...
Я работаю на процессоре, так как у меня нет графического процессора
# Objective function for Optuna
def objective(trial, train_dataloader, val_dataloader, device):
# Define hyperparameter search space using Optuna's suggest functions
conv1_filters = trial.suggest_categorical("conv1_filters", [16, 32, 64])
conv2_filters = trial.suggest_categorical("conv2_filters", [64, 128, 256])
kernel_size = trial.suggest_categorical("kernel_size", [3, 5, 7])
hidden_units = trial.suggest_categorical("hidden_units", [256, 512, 1024])
dropout_rate = trial.suggest_float("dropout_rate", 0.1, 0.5)
learning_rate = trial.suggest_float("learning_rate", 1e-5, 1e-2, log=True)
num_epochs = trial.suggest_int("num_epochs", 10, 50)
# Initialize the model with the given params
model = LeafCNN(
conv1_filters=conv1_filters,
conv2_filters=conv2_filters,
kernel_size=kernel_size,
hidden_units=hidden_units,
dropout_rate=dropout_rate
).to(device)
# Set up the optimizer and loss function
optimizer = optim.Adam(model.parameters(), lr=learning_rate)
loss_fn = nn.CrossEntropyLoss(weight=class_weights_tensor)
# Early stopping parameters
patience = 10 # Allow 10 epochs without improvement
delta = 0.001 # Minimum change that counts as an improvement
best_val_loss = float("inf")
patience_counter = 0 # Starting the counter at 0
# Training loop
for epoch in range(num_epochs):
model.train()
for X_batch, y_batch in train_dataloader:
X_batch, y_batch = X_batch.to(device), y_batch.to(device)
optimizer.zero_grad()
outputs = model(X_batch)
loss = loss_fn(outputs, y_batch)
loss.backward()
optimizer.step()
# Validation loss
model.eval()
val_loss = 0.0
with torch.no_grad():
for X_batch, y_batch in val_dataloader:
X_batch, y_batch = X_batch.to(device), y_batch.to(device)
outputs = model(X_batch)
loss = loss_fn(outputs, y_batch)
val_loss += loss.item()
val_loss /= len(val_dataloader)
print(f"Epoch {epoch + 1}/{num_epochs}, Val Loss: {val_loss}")
if val_loss < best_val_loss - delta:
best_val_loss = val_loss
patience_counter = 0
else:
patience_counter += 1
if patience_counter >= patience:
print(f"Early stopping triggered at epoch {epoch + 1}")
break
# Evaluate using F1 score
model.eval()
all_preds, all_labels = [], []
with torch.no_grad():
for X_batch, y_batch in val_dataloader:
X_batch, y_batch = X_batch.to(device), y_batch.to(device)
outputs = model(X_batch)
_, predicted = torch.max(outputs, 1)
all_preds.extend(predicted.cpu().numpy())
all_labels.extend(y_batch.cpu().numpy())
f1 = f1_score(all_labels, all_preds, average="weighted")
return f1 # We aim to maximize the F1 score
# Main function to run Optuna optimization
def optuna_search(train_dataloader, val_dataloader, device, num_trials):
# Create Optuna study
study = optuna.create_study(direction="maximize") # Maximize the F1 score
study.optimize(lambda trial: objective(trial, train_dataloader, val_dataloader, device), n_trials=num_trials)
# Print the best hyperparameters
print("Best hyperparameters found:", study.best_params)
print("Best F1 Score:", study.best_value)
return study.best_params, study.best_value
# Main Program
if __name__ == "__main__":
# Create DataLoaders
train_dataset = TensorDataset(X_train_split, y_train_split)
train_dataloader = DataLoader(train_dataset, batch_size=4, shuffle=True)
val_dataset = TensorDataset(X_val, y_val)
val_dataloader = DataLoader(val_dataset, batch_size=4, shuffle=False)
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
# Run Optuna optimization
best_params, best_f1 = optuna_search(train_dataloader, val_dataloader, device, num_trials=10)
print("Best Params:", best_params)
print("Best F1 Score:", best_f1)
Подробнее здесь: [url]https://stackoverflow.com/questions/79283333/multiclass-classification-with-bayesian-optimisation[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия