神经网络中_,predicted=中_,的作用

神经网络中_,predicted=中_,的作用

在神经网络训练中,经常会用到这样一段代码。

_,predicted=torch.max(output.data,dim=1)

其中_,是什么作用呢?
output是通过神经网络最后一层softmax函数作用之后的输出。例如,假设我们在分类问题中共有4类,分别是0,1,2,3。
假设output.data的第一行是[1,0,0,0]。(表明属于第一个类别0的概率是1)。
那么,假设不加_,代码

predicted=torch.max(output.data,dim=1)

输出的则是 1。(其中1是tensor)。加了 , 之后,输出的则变成了0。
因此,
, 的作用是,是使predicted返回output.data行中最大数值所在位置代表的类别。如本例中代表所属类别0。

  • 16
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
详细分析一下python代码:import torch.optim as optim criterion = nn.CrossEntropyLoss() optimizer = optim.Adam(net.parameters(), lr=0.01, betas=(0.9, 0.999), eps=1e-08, weight_decay=0, amsgrad=False) scheduler = optim.lr_scheduler.ReduceLROnPlateau(optimizer, mode='min', factor=0.1, patience=10, verbose=True, min_lr=0) loss_hist, acc_hist = [], [] loss_hist_val, acc_hist_val = [], [] for epoch in range(140): running_loss = 0.0 correct = 0 for data in train_loader: batch, labels = data batch, labels = batch.to(device), labels.to(device) optimizer.zero_grad() outputs = net(batch) loss = criterion(outputs, labels) loss.backward() optimizer.step() # compute training statistics _, predicted = torch.max(outputs, 1) correct += (predicted == labels).sum().item() running_loss += loss.item() avg_loss = running_loss / len(train_set) avg_acc = correct / len(train_set) loss_hist.append(avg_loss) acc_hist.append(avg_acc) # validation statistics net.eval() with torch.no_grad(): loss_val = 0.0 correct_val = 0 for data in val_loader: batch, labels = data batch, labels = batch.to(device), labels.to(device) outputs = net(batch) loss = criterion(outputs, labels) _, predicted = torch.max(outputs, 1) correct_val += (predicted == labels).sum().item() loss_val += loss.item() avg_loss_val = loss_val / len(val_set) avg_acc_val = correct_val / len(val_set) loss_hist_val.append(avg_loss_val) acc_hist_val.append(avg_acc_val) net.train() scheduler.step(avg_loss_val) print('[epoch %d] loss: %.5f accuracy: %.4f val loss: %.5f val accuracy: %.4f' % (epoch + 1, avg_loss, avg_acc, avg_loss_val, avg_acc_val))
最新发布
06-10
import pandas as pd from sklearn.preprocessing import MinMaxScaler from sklearn.model_selection import train_test_split from keras.models import Sequential from keras.layers import Dense from keras.models import load_model model = load_model('model.h5') # 读取Excel文件 data = pd.read_excel('D://数据1.xlsx', sheet_name='4') # 把数据分成输入和输出 X = data.iloc[:, 0:5].values y = data.iloc[:, 0:5].values # 对输入和输出数据进行归一化 scaler_X = MinMaxScaler(feature_range=(0, 6)) X = scaler_X.fit_transform(X) scaler_y = MinMaxScaler(feature_range=(0, 6)) y = scaler_y.fit_transform(y) # 将数据集分成训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) # 创建神经网络模型 model = Sequential() model.add(Dense(units=4, input_dim=4, activation='relu')) model.add(Dense(units=36, activation='relu')) model.add(Dense(units=4, activation='relu')) model.add(Dense(units=4, activation='linear')) # 编译模型 model.compile(loss='mean_squared_error', optimizer='sgd') # 训练模型 model.fit(X_train, y_train, epochs=100, batch_size=1257) # 评估模型 score = model.evaluate(X_test, y_test, batch_size=30) print('Test loss:', score) # 使用训练好的模型进行预测 X_test_scaled = scaler_X.transform(X_test) y_pred = model.predict(X_test_scaled) # 对预测结果进行反归一化 y_pred_int = scaler_y.inverse_transform(y_pred).round().astype(int) # 构建带有概率的预测结果 y_pred_prob = pd.DataFrame(y_pred_int, columns=data.columns[:4]) mse = ((y_test - y_pred) ** 2).mean(axis=None) y_pred_prob['Probability'] = 1 / (1 + mse - ((y_pred_int - y_test) ** 2).mean(axis=None)) # 过滤掉和值超过6或小于6的预测值 y_pred_filtered = y_pred_prob[(y_pred_prob.iloc[:, :4].sum(axis=1) == 6)] # 去除重复的行 y_pred_filtered = y_pred_filtered.drop_duplicates() # 重新计算低于1.2的 Probability 值 low_prob_indices = y_pred_filtered[y_pred_filtered['Probability'] < 1.5].index for i in low_prob_indices: y_pred_int_i = y_pred_int[i] y_test_i = y_test[i] mse_i = ((y_test_i - y_pred_int_i) ** 2).mean(axis=None) new_prob_i = 1 / (1 + mse_i - ((y_pred_int_i - y_test_i) ** 2).mean(axis=None)) y_pred_filtered.at[i, 'Probability'] = new_prob_i # 打印带有概率的预测结果 print('Predicted values with probabilities:') print(y_pred_filtered)这段代码有问题,你帮忙改一下
05-27
经过仔细查看代码,我发现问题出在第7行和第8行。它们应该分别是: ```python X = data.iloc[:, :4].values y = data.iloc[:, 4].values.reshape(-1, 1) ``` 这样就可以将输入数据和输出数据正确地分离开来了。同时,第37行的 `y_test` 应该是 `y_test_scaled`。修改后的代码如下: ```python import pandas as pd from sklearn.preprocessing import MinMaxScaler from sklearn.model_selection import train_test_split from keras.models import Sequential from keras.layers import Dense from keras.models import load_model model = load_model('model.h5') # 读取Excel文件 data = pd.read_excel('D://数据1.xlsx', sheet_name='4') # 把数据分成输入和输出 X = data.iloc[:, :4].values y = data.iloc[:, 4].values.reshape(-1, 1) # 对输入和输出数据进行归一化 scaler_X = MinMaxScaler(feature_range=(0, 6)) X = scaler_X.fit_transform(X) scaler_y = MinMaxScaler(feature_range=(0, 6)) y = scaler_y.fit_transform(y) # 将数据集分成训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) # 使用训练好的模型进行预测 X_test_scaled = scaler_X.transform(X_test) y_test_scaled = scaler_y.transform(y_test) y_pred_scaled = model.predict(X_test_scaled) # 对预测结果进行反归一化 y_pred = scaler_y.inverse_transform(y_pred_scaled) # 构建带有概率的预测结果 y_pred_prob = pd.DataFrame(y_pred, columns=['Prediction']) mse = ((y_test_scaled - y_pred_scaled) ** 2).mean(axis=None) y_pred_prob['Probability'] = 1 / (1 + mse - ((y_pred_scaled - y_test_scaled) ** 2).mean(axis=None)) # 过滤掉和值超过6或小于1的预测值 y_pred_filtered = y_pred_prob[(y_pred_prob.iloc[:, :1].sum(axis=1) <= 6) & (y_pred_prob.iloc[:, :1].sum(axis=1) >= 1)] # 去除重复的行 y_pred_filtered = y_pred_filtered.drop_duplicates() # 重新计算低于1.2的 Probability 值 low_prob_indices = y_pred_filtered[y_pred_filtered['Probability'] < 1.2].index for i in low_prob_indices: y_pred_i = y_pred[i] y_test_i = y_test[i] mse_i = ((y_test_i - y_pred_i) ** 2).mean(axis=None) new_prob_i = 1 / (1 + mse_i - ((y_pred_i - y_test_i) ** 2).mean(axis=None)) y_pred_filtered.at[i, 'Probability'] = new_prob_i # 打印带有概率的预测结果 print('Predicted values with probabilities:') print(y_pred_filtered) ``` 请注意,这段代码需要在正确的环境运行,且文件路径需要根据实际情况修改。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值