使用 pytorch 構(gòu)建一維卷積神經(jīng)網(wǎng)絡(luò)與數(shù)據(jù)集

  • 以一維卷積神經(jīng)網(wǎng)絡(luò)為例

1 直接使用 numpy 與 tensor 來構(gòu)建數(shù)據(jù)集

1.1一維卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)
class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = nn.Conv1d(in_channels=1, out_channels=10, kernel_size=3, stride=2)
        self.max_pool1 = nn.MaxPool1d(kernel_size=3, stride=2)
        self.conv2 = nn.Conv1d(10, 20, 3, 2)
        self.max_pool2 = nn.MaxPool1d(3, 2)
        self.conv3 = nn.Conv1d(20, 40, 3, 2)
        
        self.liner1 = nn.Linear(40 * 14, 120)
        self.liner2 = nn.Linear(120, 84)
        self.liner3 = nn.Linear(84, 4) 
        
    def forward(self, x):
        x = F.relu(self.conv1(x))
        x = self.max_pool1(x)
        x = F.relu(self.conv2(x))
        x = self.max_pool2(x)
        x = F.relu(self.conv3(x))
        
        x = x.view(-1, 40 * 14)
        x = F.relu(self.liner1(x))
        x = F.relu(self.liner2(x))
        x = self.liner3(x)
        
        return x
1.2 數(shù)據(jù)的結(jié)構(gòu)

x_train, x_test, y_train, y_test = train_test_split(dataSet, labels, test_size=0.3, random_state=42)
print( x_train.shape, y_train.shape, x_test.shape, y_test.shape)

out:

((51527, 500), (51527,), (22084, 500), (22084,))
1.3 數(shù)據(jù)的結(jié)構(gòu)
1.3.1 將 numpy 數(shù)據(jù)集轉(zhuǎn)化為 tensor
x_train = torch.from_numpy(x_train)
y_train = torch.from_numpy(y_train)
x_test = torch.from_numpy(x_test)
y_test = torch.from_numpy(y_test)
1.3.2 訓(xùn)練集數(shù)據(jù)類型轉(zhuǎn)化為:tensor.float32
x_train = torch.tensor(x_train, dtype=torch.float32)
x_test = torch.tensor(x_test, dtype=torch.float32)
1.3.3 改變 x_train.shape , x_test.shape 的形狀

送入訓(xùn)練的數(shù)據(jù)格式為:(1程腹, 1, 500)

x_train = x_train.reshape(x_train.shape[0], 1, 1, x_train.shape[1])
x_test = x_test.reshape(x_test.shape[0], 1, x_train.shape[1])
print(x_train.shape, x_test.shape)

out:

(torch.Size([51527, 1, 1, 500]), torch.Size([22084, 1, 500]))
1.3.4 標(biāo)簽的數(shù)據(jù)格式 與 數(shù)據(jù)類型
  • 在1.2 節(jié)中給出標(biāo)簽的形狀:x_train.shape = (51527,) , y_train.shape = (22084,)渐裂,要糊,類型是:float腮考, 但是訓(xùn)練器需要的是:(51527, 1), (22084, 1) ,dtype=tensor.long
y_train = y_train.reshape(y_train.shape[0], 1)
y_test = y_test.reshape(y_test.shape[0], 1)

y_train = torch.tensor(y_train, dtype=torch.long)
y_test = torch.tensor(y_test, dtype=torch.long)

1.4 開始訓(xùn)練

# 定義損失函數(shù) 與 優(yōu)化器
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)
start = time.time()
for epoch in tqdm(range(10)):
    running_loss = 0
    for i, input_data in enumerate(x_train, 0):
        # print(input_data.shape)
        label = y_train[i]
        optimizer.zero_grad()
        
        outputs = net(input_data)
        loss = criterion(outputs, label)
        loss.backward()
        optimizer.step()
        
        running_loss += loss.item()
        if i % 2000 == 1999:
            print('[%d, %5d] loss: %0.3f' % (epoch + 1, i + 1, running_loss / 2000))
            running_loss = 0.0
print('time = %2dm:%2ds' % ((time.time() - start)//60, (time.time()-start)%60))

2 通過繼承 torch.utils.data.Dataset類構(gòu)建一個(gè)數(shù)據(jù)集

class NuclearDataset(Dataset):
    """ Nuclear Dataset."""

    def __init__(self, data_file, root_dir=None, transform=None):
        """
        Args:
            data_file (string): Path to the data file with annotations.
            root_dir (string): Directory with all the images.
            transform (callable, optional): Optional transform to be applied
                on a sample.
        """
        # self.landmarks_frame = pd.read_csv(csv_file)
        # 加載數(shù)據(jù)
        self.landmarks_frame = np.load(data_file)
        self.root_dir = root_dir
        self.transform = transform

    def __len__(self):
        return len(self.landmarks_frame)

    def __getitem__(self, idx):
        if torch.is_tensor(idx):
            idx = idx.tolist()

        # img_name = os.path.join(self.root_dir,self.landmarks_frame.iloc[idx, 0])
        # image = io.imread(img_name)
        # landmarks = self.landmarks_frame.iloc[idx, 1:]
        landmarks = self.landmarks_frame[:, -1]
        landmarks = np.array([landmarks])
        # landmarks = landmarks.astype('float').reshape(-1, 2)
        landmarks = landmarks.astype('float').reshape(-1, 1)
        sample = {'landmarks': landmarks}

        if self.transform:
            sample = self.transform(sample)

        return sample
dataSet實(shí)例

標(biāo)簽

同樣可以直接定義函數(shù) 劃分訓(xùn)練集與訓(xùn)練集,比較方便碳竟,代碼可移植性較好慰安。這其中數(shù)據(jù)的形狀是怎樣的,可以按照代碼運(yùn)行的錯(cuò)誤提示進(jìn)行修改蹋砚。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
禁止轉(zhuǎn)載扼菠,如需轉(zhuǎn)載請(qǐng)通過簡(jiǎn)信或評(píng)論聯(lián)系作者。
  • 序言:七十年代末坝咐,一起剝皮案震驚了整個(gè)濱河市循榆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌墨坚,老刑警劉巖秧饮,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異框杜,居然都是意外死亡浦楣,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門咪辱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人椎组,你說我怎么就攤上這事油狂。” “怎么了寸癌?”我有些...
    開封第一講書人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵专筷,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我蒸苇,道長(zhǎng)磷蛹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任溪烤,我火速辦了婚禮味咳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘檬嘀。我一直安慰自己槽驶,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開白布鸳兽。 她就那樣靜靜地躺著掂铐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上全陨,一...
    開封第一講書人閱讀 51,198評(píng)論 1 299
  • 那天爆班,我揣著相機(jī)與錄音,去河邊找鬼辱姨。 笑死柿菩,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的炮叶。 我是一名探鬼主播碗旅,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼镜悉!你這毒婦竟也來了祟辟?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤侣肄,失蹤者是張志新(化名)和其女友劉穎旧困,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體稼锅,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡吼具,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了矩距。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拗盒。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖锥债,靈堂內(nèi)的尸體忽然破棺而出陡蝇,到底是詐尸還是另有隱情,我是刑警寧澤哮肚,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布登夫,位于F島的核電站,受9級(jí)特大地震影響允趟,放射性物質(zhì)發(fā)生泄漏恼策。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一潮剪、第九天 我趴在偏房一處隱蔽的房頂上張望涣楷。 院中可真熱鬧,春花似錦鲁纠、人聲如沸总棵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)情龄。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間骤视,已是汗流浹背鞍爱。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留专酗,地道東北人睹逃。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像祷肯,于是被迫代替她去往敵國(guó)和親沉填。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容