1,371
社区成员




我做了一个简单的口罩识别,是把TensorFlow的代码改成了pytorch的代码,因为那个TensorFlow老师版本报错不想用。是一个二分类问题,但是我学习分类出来全部是同一类,根本不会分类出另外一类。请问是什么原因
这是他原来的代码
from keras.layers import LSTM
model=Sequential()
model.add(Conv2D(100,(3,3),input_shape=x.shape[1:],activation='relu',strides=2))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Conv2D(64,(3,3),activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Flatten())
model.add(Dense(50, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(2, activation='softmax'))
这是我的代码
class Mask(torch.nn.Module):
def __init__(self):
super(Mask, self).__init__()
self.con = torch.nn.Conv2d(1, 100, kernel_size=(3, 3), stride=(2, 2))
self.con2 = torch.nn.Conv2d(100, 64, kernel_size=(3, 3))
self.pool = torch.nn.MaxPool2d(2)
self.l1 = torch.nn.Linear(1600, 50)
self.l2 = torch.nn.Linear(50, 2)
self.dropout = torch.nn.Dropout(p=0.2)
def forward(self, x):
batch_size = x.size(0)
x = self.con(x)
x = F.relu(x)
x = self.pool(x)
x = self.con2(x)
x = F.relu(x)
x = self.pool(x)
x = x.view(batch_size, -1)
x = self.l1(x)
x = F.relu(x)
# x = self.dropout(x)
x = self.l2(x)
x = F.softmax(x)
return x
运行结果就是,全都是1 一个0都没有
这是训练代码
def train():
running_loss = 0.0
for batch_idx, (inputs, target) in enumerate(train_Loader):
optimizer.zero_grad() # 梯度置零
inputs = inputs.to(device)
target = target.to(device)
output = model(inputs.float()) # 前向传播
_, predicts = torch.max(output.data, dim=1)
print(predicts)
accuracy = (predicts.cpu() == target.cpu()).sum().item()
loss = criterion(output, target.long()) # 损失计算
loss.backward() # 反向传播
optimizer.step() # 更新梯度
running_loss = running_loss + loss
求解决。