背景就是利用pytorch進行圖形分類處理,採用的是cnn算法,在使用過程中碰到了一些小麻煩。
1、在對圖片進行壓縮時的報錯,報錯形式爲:
raise ValueError("empty range for randrange() (%d,%d, %d)" % (istart, istop, width)) ValueError
解決辦法:添加transform.Resize((256,256))
train_transforms = transforms.Compose([
transforms.Resize((256, 256)),#添加補充
transforms.RandomCrop(96),
transforms.RandomHorizontalFlip(),
transforms.ToTensor(),
transforms.Normalize(mean=mean, std=stdv),
])
2、在利用交叉熵nn.CrossEntropyLoss()進行target與output進行計算時報錯,報錯形式爲:
Target 212 is out of bounds
解決辦法:num_classes與你的分類結果不一致導致的。需要將num_classes調整爲分類結果(從0開始計算);此外,需要注意的是整體的取值。以我的分類爲例,共214個分類,但其實中間有些是沒分類數的,所以統計出來共210個分類,這個地方也卡了好久,具體爲什麼要將num_classes修改爲214,還望知情者相告。
self.out = nn.Linear(32 * 24 * 24, 214) # fully connected layer, output 214 classes
以上是我在做圖形分類時困惱了一段時間的問題,希望能對在學習pytorch過程中的你們有所幫助,儘量少走彎路。