# Instalar pacotes necessários (caso ainda não estejam instalados)!pip install -q efficientnet-pytorch kagglehub
Preparing metadata (setup.py) ... done
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━363.4/363.4 MB3.5 MB/s eta 0:00:00━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━13.8/13.8 MB122.7 MB/s eta 0:00:00━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━24.6/24.6 MB96.8 MB/s eta 0:00:00━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━883.7/883.7 kB60.5 MB/s eta 0:00:00━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━664.8/664.8 MB2.1 MB/s eta 0:00:00━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━211.5/211.5 MB4.9 MB/s eta 0:00:00━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━56.3/56.3 MB44.3 MB/s eta 0:00:00━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━127.9/127.9 MB20.1 MB/s eta 0:00:00━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━207.5/207.5 MB5.0 MB/s eta 0:00:00━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━21.1/21.1 MB96.0 MB/s eta 0:00:00
Building wheel for efficientnet-pytorch (setup.py) ... done
# ========== MODELO ==========class EfficientNetB7(nn.Module):def__init__(self, num_classes):super(EfficientNetB7, self).__init__()self.efficientnet = EfficientNet.from_name('efficientnet-b7', num_classes=num_classes)def forward(self, x): x =self.efficientnet.extract_features(x) x =self.efficientnet._avg_pooling(x) x = torch.flatten(x, 1) x =self.efficientnet._dropout(x) x =self.efficientnet._fc(x)return x
Downloading: "https://download.pytorch.org/models/mobilenet_v3_large-8738ca79.pth" to /root/.cache/torch/hub/checkpoints/mobilenet_v3_large-8738ca79.pth
torch.save(model.state_dict(), 'modelo_treinado_EfficientNet_15epo.pth')print("Modelo salvo com sucesso!")
Modelo salvo com sucesso!
from google.colab import filesfiles.download('/content/modelo_treinado_EfficientNet_15epo.pth')
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, confusion_matrixdef evaluate_model(model, dataloader, class_names): model.eval() y_true = [] y_pred = []with torch.no_grad():for inputs, labels in dataloader: inputs = inputs.to(model.device) ifhasattr(model, 'device') else inputs labels = labels.to(model.device) ifhasattr(model, 'device') else labels outputs = model(inputs) _, preds = torch.max(outputs, 1) y_true.extend(labels.cpu().numpy()) y_pred.extend(preds.cpu().numpy())# Cálculo das métricas acc = accuracy_score(y_true, y_pred) prec = precision_score(y_true, y_pred, average='binary') rec = recall_score(y_true, y_pred, average='binary') f1 = f1_score(y_true, y_pred, average='binary')# Opcional: imprimir matriz de confusão cm = confusion_matrix(y_true, y_pred)print(f'Matriz de Confusão:\n{cm}')# Retornar dicionário com as métricasreturn {'accuracy': acc,'precision': prec,'recall': rec,'f1_score': f1 }
import pandas as pdimport matplotlib.pyplot as pltimport seaborn as sns# --- Supondo que metrics_df já esteja carregado ---# Reorganizar o DataFramemetrics_melted = metrics_df.melt(id_vars='fold', var_name='Métrica', value_name='Valor')# Gráfico de barras agrupado com cores vibrantesplt.figure(figsize=(10, 6))sns.set(style="whitegrid") # Estilo limposns.barplot(data=metrics_melted, x='Métrica', y='Valor', hue='fold', palette='tab10') # Cores vibrantesplt.title('Comparação de Métricas entre os Folds', fontsize=14, weight='bold')plt.ylim(0, 1.05)plt.ylabel('Valor', fontsize=12)plt.xlabel('Métrica', fontsize=12)plt.xticks(fontsize=11)plt.yticks(fontsize=11)plt.legend(title='Fold', fontsize=10, title_fontsize=11, loc='upper right')plt.tight_layout()# Salvar gráfico em alta resoluçãoplt.savefig("grafico_comparativo_folds_vibrante.png", dpi=400)plt.show()
---------------------------------------------------------------------------NameError Traceback (most recent call last)
/tmp/ipython-input-2-2591455955.py in <cell line: 0>() 6 7# Reorganizar o DataFrame----> 8metrics_melted = metrics_df.melt(id_vars='fold', var_name='Métrica', value_name='Valor') 9 10# Gráfico de barras agrupado com cores vibrantesNameError: name 'metrics_df' is not defined
import matplotlib.pyplot as pltimport numpy as np# Dadosfolds = ['Fold 1', 'Fold 2', 'Fold 3', 'Fold 4', 'Fold 5']accuracy = [0.973,0.972,0.974,0.972,0.976]precision = [0.977,0.974,0.985,0.982,0.978]recall = [0.967,0.969,0.963,0.964,0.972,]f1_score = [0.972,0.971,0.974,0.973,0.9752]# Configurações do gráficox = np.arange(len(folds))width =0.2fig, ax = plt.subplots(figsize=(10, 6))# Plotagembars1 = ax.bar(x -1.5*width, accuracy, width, label='Acurácia', color='royalblue')bars2 = ax.bar(x -0.5*width, precision, width, label='Precisão', color='indianred')bars3 = ax.bar(x +0.5*width, recall, width, label='Revocação', color='seagreen')bars4 = ax.bar(x +1.5*width, f1_score, width, label='F1-Score', color='orange')# Rótulos e títuloax.set_ylabel('Valor')ax.set_ylim([0.94, 0.98])ax.set_title('Comparação das Métricas de Desempenho por Fold ')ax.set_xticks(x)ax.set_xticklabels(folds)ax.legend()# Exibir valores acima das barrasdef annotate_bars(bars):for bar in bars: height = bar.get_height() ax.annotate(f'{height:.3f}', xy=(bar.get_x() + bar.get_width() /2, height), xytext=(0, 3), textcoords="offset points", ha='center', va='bottom', fontsize=8)for bars in [bars1, bars2, bars3, bars4]: annotate_bars(bars)plt.tight_layout()plt.show()
import matplotlib.pyplot as pltimport seaborn as snsdef plot_training_history(history): epochs =range(1, len(history['train_loss']) +1) plt.figure(figsize=(12, 5))# Loss plt.subplot(1, 2, 1) plt.plot(epochs, history['train_loss'], label='Treino perda', marker='o') plt.plot(epochs, history['val_loss'], label='Validação perda', marker='o') plt.xlabel('Épocas') plt.ylabel('Perda') plt.title('Perda ao longo das Épocas') plt.legend() plt.grid()# Accuracy plt.subplot(1, 2, 2) plt.plot(epochs, history['train_acc'], label='Treino Acurácia', marker='o') plt.plot(epochs, history['val_acc'], label='Validação Acurácia', marker='o') plt.xlabel('Épocas') plt.ylabel('Acurácia') plt.title('Acurácia ao longo das Épocas') plt.legend() plt.grid() plt.tight_layout() plt.show()# Após o treinamento do modelo, chame a função com os dados do históricoplot_training_history(history)
# Salva o modelo inteiro incluindo arquitetura e pesostorch.save(model.state_dict(), 'modelo_treinado_MobileNet_V3_15epo.pth')print("Modelo salvo com sucesso!")
import json# Salvar os pesos do modelomodel_state_dict = model.state_dict()# Converter os tensores para listas (JSON não suporta tensores diretamente)model_state_dict_json = {key: value.tolist() for key, value in model_state_dict.items()}# Salvar como JSONwithopen('modelo_treinado_ResNet_50.json', 'w') as json_file: json.dump(model_state_dict_json, json_file)print("Modelo salvo em JSON com sucesso!")
# Carregar o JSONwithopen('modelo_treinado_ResNet50.json', 'r') as json_file: model_state_dict_json = json.load(json_file)# Converter listas de volta para tensoresmodel_state_dict = {key: torch.tensor(value) for key, value in model_state_dict_json.items()}# Carregar os pesos no modelomodel.load_state_dict(model_state_dict)model.to(device) # Mover para GPU se necessáriomodel.eval() # Definir para modo de avaliaçãoprint("Modelo carregado com sucesso!")
model = torch.load('modelo_completo_Resnet50_15epo.pth')model.to(device)model.eval()
pip install torchsummary
from torchsummary import summary# modelo está na GPU (se disponível) ou na CPUdevice = torch.device("cuda"if torch.cuda.is_available() else"cpu")model = ResNet50(num_classes=2).to(device)# Exibir a estrutura do modelosummary(model, input_size=(3, 224, 224))
import torchfrom torchsummary import summaryimport ioimport sysimport pandas as pd# Criar o modelo e enviá-lo para o dispositivo corretodevice = torch.device("cuda"if torch.cuda.is_available() else"cpu")model = ResNet50(num_classes=2).to(device)# Capturar a saída do summary() como stringbuffer= io.StringIO()sys.stdout =buffersummary(model, input_size=(3, 224, 224))sys.stdout = sys.__stdout__ # Restaurar a saída padrão# Processar a saída capturadasummary_str =buffer.getvalue()# Salvar como arquivo TXTwithopen("model_summary_ResNet50.txt", "w") as f: f.write(summary_str)print("Resumo salvo em model_summary.txt")
ifgggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggmport torchfrom torchsummary import summaryimport ioimport sysimport matplotlib.pyplot as pltfrom PIL import Image, ImageDraw, ImageFont# Criar o modelo e enviá-lo para o dispositivo corretodevice = torch.device("cuda"if torch.cuda.is_available() else"cpu")model = ResNet50(num_classes=2).to(device)# Capturar a saída do summary() como stringbuffer= io.StringIO()sys.stdout =buffersummary(model, input_size=(3, 224, 224))sys.stdout = sys.__stdout__ # Restaurar a saída padrãosummary_str =buffer.getvalue()# Configuração da imagemimg_width =1200# Largura da imagemline_height =20# Altura de cada linha de textopadding =10# Espaço ao redor do texto# Processar as linhas do summary para a imagemlines = summary_str.split("\n")img_height = (len(lines) +2) * line_height # Altura baseada no número de linhas# Criar imagem brancaimage = Image.new("RGB", (img_width, img_height), "white")draw = ImageDraw.Draw(image)# Configurar a fonte (se disponível)try: font = ImageFont.truetype("arial.ttf", 16)exceptIOError: font = ImageFont.load_default()# Desenhar o texto na imagemy = paddingfor line in lines: draw.text((padding, y), line, fill="black", font=font) y += line_height# Salvar como PNGimage.save("model_summary_Resnet50.png")print("Resumo salvo como model_summary.png")