主頁 > 後端開發 > 【技識訓累】Python中的PyTorch庫【一】

【技識訓累】Python中的PyTorch庫【一】

2023-06-07 07:41:56 後端開發

PyTorch庫介紹

PyTorch是一個基于Python的科學計算庫,用于構建深度學習神經網路,它主要由兩個部分組成:一個是PyTorch Tensor庫,提供了類似于NumPy的陣列操作,但是支持GPU加速;另一個是PyTorch的自動微分系統,能夠自動計算神經網路中的反向傳播演算法,

PyTorch是一個開源的深度學習框架,它的設計理念是簡潔易懂、動態的計算圖和易于使用,這使得PyTorch成為了學術界和工業界的熱門選擇,以下是PyTorch庫的一些主要特性:

  1. 動態計算圖:PyTorch中的計算圖是即時構建的,與TensorFlow等靜態計算圖的框架不同,PyTorch允許在運行時動態定義神經網路的架構,這種方式允許深度學習研究者更容易地嘗試新的模型型別和實驗,

  2. 自動微分:PyTorch能夠自動計算神經網路的梯度,即反向傳播,這種自動微分機制顯著地簡化了深度學習模型的訓練流程,

  3. 靈活性:PyTorch非常靈活,可以輕松地與NumPy等其他Python庫集成,其Tensor庫的API也很類似于NumPy,另外,PyTorch可以支持大規模的并行計算,包括多個GPU和多臺機器,

  4. 高效性:PyTorch通過使用C++代碼進行底層優化,可以在代碼中使用Python語言的優點,同時不會降低計算性能,

  5. 豐富的工具箱:PyTorch提供了許多用于計算機視覺、自然語言處理、語音處理、增強學習和生成模型等領域的高級工具箱和模型庫,

總的來說,PyTorch庫非常適合深度學習研究者和實踐者使用,其靈活性和易用性可以幫助他們更快地實作和測驗新的模型,并且可以在大規模的資料集上快速進行訓練和評估,

PyTorch中的Autograd是什么?它有什么作用?

Autograd是PyTorch中的自動微分引擎,它可以自動計算一些神經網路中的引數在損失函式下對損失的梯度值,從而可以進行反向傳播,更新引數,使得模型更加準確,它可以自動化地計算任何區分可能的函式的導數,因此,在神經網路訓練中,Autograd允許我們方便地計算梯度,減少手動計算梯度的麻煩,此外,Autograd還具有自動求解Hessian矩陣等高級微分方法的能力,這大大簡化了訓練開發作業的復雜性,提高了演算法的實用性,

以下是PyTorch中使用Autograd的一個簡單例子,

我們有一個簡單的線性模型:,我們想要優化這個模型,使得損失函式最小化,我們使用均方誤差作為我們的損失函式,

我們可以使用以下代碼實作:

import torch

x = torch.tensor([1.0], requires_grad=True) # 定義一個張量x并打開requires_grad
model = torch.nn.Linear(1, 1) # 定義一個線性模型,y = wx + b
optimizer = torch.optim.Adam(model.parameters(), lr=0.01) # 定義優化器
criterion = torch.nn.MSELoss() # 定義損失函式,均方誤差

for i in range(100):
    optimizer.zero_grad() # 梯度清零
    output = model(x) # 計算模型的輸出
    loss = criterion(output, torch.tensor([3.0])) # 計算損失
    loss.backward() # 反向傳播,計算梯度
    optimizer.step() # 更新引數
print(model.state_dict()) # 輸出優化后的引數值

我們將張量x打開requires_grad屬性,這樣它就可以追蹤梯度了,然后我們定義一個線性模型,即y = wx + b,使用Adam優化器進行優化,使用均方誤差作為損失函式,我們將模型訓練100次,通過梯度下降更新引數,最終輸出優化后的引數值,通過這些步驟,我們可以使用Autograd自動計算和更新梯度,從而優化模型,

該模型訓練完畢后,列印出的model.state_dict()為一個字典型別,其中包含了優化后的模型引數,

在上述代碼中,model.state_dict()的輸出結果應該為:

OrderedDict([('weight', tensor([[2.0023]])), ('bias', tensor([0.9952]))])

如何使用PyTorch庫進行影像分類任務?

  1. 準備資料集:首先,需要收集足夠數量的影像資料,將其分為訓練集和測驗集,并將其放入檔案夾中,同時,需要創建一個文本檔案或CSV檔案來映射影像和其標簽的索引,

  2. 加載資料集:PyTorch提供了DataLoader類,它可以加載和預處理訓練和測驗資料集,可以使用transforms模塊預處理影像,例如縮放、裁剪、歸一化等,

  3. 建立模型:PyTorch提供了許多預訓練模型和可調整的模型,例如AlexNet、VGG、ResNet等,可以通過呼叫相應的模型建構式來創建一個模型,

  4. 訓練模型:通過定義損失函式和優化器,并以批次的方式迭代訓練資料集來訓練模型,PyTorch提供了Adam、SGD等優化器,

  5. 測驗模型:使用測驗資料集驗證模型的性能并計算精度指標,可以使用PyTorch的torch.no_grad()背景關系管理器來關閉梯度計算,以節省記憶體并提高速度,

  6. 保存和加載模型:可以通過呼叫模型的state_dict()方法保存模型的狀態字典,并使用torch.load()方法加載模型,

  7. 預測和推理:使用模型進行預測和推理需要使用模型的forward()方法,并將輸入傳遞給模型以獲取輸出,

以上是使用PyTorch進行影像分類任務的基本步驟,具體實作會根據具體的資料集和模型而有所不同,

PyTorch中的torch.nn模塊是什么?它如何使用?

torch.nn模塊是PyTorch中的神經網路模塊,包含了構建神經網路所需的各種層和函式,它提供了一種方便的方式來構建、訓練和測驗各種型別的神經網路,

使用torch.nn模塊需要進行以下步驟:

  1. 定義一個繼承自torch.nn.Module的類,該類將定義神經網路的架構和前向傳遞的邏輯,
  2. 在類的建構式中定義層和函式,并初始化它們的引數,
  3. 實作類的forward()方法,該方法定義神經網路的前向傳遞邏輯,
  4. 使用該類進行訓練、測驗和推理操作,

在使用torch.nn模塊時,通常需要使用其他模塊和函式,如torch.optim、torch.utils.data等,這些模塊和函式提供了訓練、資料加載和其他輔助功能,

例如,下面的代碼演示了使用torch.nn模塊構建一個簡單的神經網路,并訓練它進行分類操作:

import torch
import torch.nn as nn
import torch.optim as optim
import torch.utils.data as data

# 定義神經網路類
class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.fc1 = nn.Linear(10, 5)
        self.fc2 = nn.Linear(5, 2)

    def forward(self, x):
        x = self.fc1(x)
        x = nn.functional.relu(x)
        x = self.fc2(x)
        return nn.functional.log_softmax(x, dim=1)

# 準備資料
x_train = torch.randn(100, 10)
y_train = torch.randint(0, 2, (100,))

# 定義模型、優化器和損失函式
model = Net()
optimizer = optim.SGD(model.parameters(), lr=0.1)
criterion = nn.NLLLoss()

# 訓練模型
for epoch in range(100):
    running_loss = 0.0

    # 使用DataLoader加載資料批次
    for x_batch, y_batch in data.DataLoader(list(zip(x_train, y_train)), batch_size=10, shuffle=True):
        optimizer.zero_grad()
        y_pred = model(x_batch)
        loss = criterion(y_pred, y_batch)
        loss.backward()
        optimizer.step()
        
        running_loss += loss.item()

    print(f"Epoch {epoch}: Loss = {running_loss}")

上述代碼中,首先定義了一個繼承自nn.Module的Net類,該類定義了一個包含兩個線性層和激活函式的簡單神經網路,隨后定義了模型、優化器和損失函式,使用DataLoader進行資料批次的加載,進行模型的訓練并輸出訓練損失,

如何使用PyTorch庫進行自然語言處理任務?

PyTorch是一種常用的深度學習庫,可以用于自然語言處理任務,以下是一些可以使用PyTorch庫進行自然語言處理的任務:

  1. 詞嵌入:PyTorch提供了大量的庫來處理文本資料,其中最常用的是torchtext,使用torchtext,可以將文本資料預處理成單詞或字符級別的序列,并使用PyTorch中的Embedding層構建詞嵌入模型,

  2. 文本分類:文本分類是一種常見的自然語言處理任務,例如,將文本分為積極的和消極的評論,PyTorch提供了一些網路結構(如CNN和LSTM)和損失函式(如交叉熵和softmax),可以用來訓練文本分類模型,

  3. 序列標注:序列標注是指將每個單詞或字符標記為特定的類別,例如,標記文本中的詞性或物體,PyTorch提供了一些模型和損失函式,例如條件隨機場(CRF)和貝葉斯網路,可以用來訓練序列標注模型,

  4. 機器翻譯:機器翻譯是將一種語言翻譯成另一種語言的任務,PyTorch提供了一些注意力機制和序列到序列模型,可以用來訓練機器翻譯模型,

  5. 對話系統:對話系統是一種可以回答用戶問題的計算機程式,PyTorch提供了一些基礎網路結構,如回圈神經網路和注意力機制,可以用來訓練對話系統,還可以使用預訓練的語言模型,如BERT,來改進對話系統的效果,

PyTorch中的torch.optim模塊是什么?它有什么作用?

PyTorch中的torch.optim模塊是一個優化器,用于優化神經網路模型的引數,其作用是通過梯度下降演算法自動地更新模型的引數,以使得模型的損失函式值最小化,從而實作更好的預測結果,torch.optim模塊提供了多種優化演算法的實作,如SGD、Adam、Adagrad等,用戶可以根據自己的需求選擇不同的優化演算法,此外,torch.optim模塊還提供了一些引數調整的方法,例如學習率調整和權重衰減等,可以幫助用戶更加靈活地控制訓練程序,

如何使用PyTorch庫進行時間序列預測任務?

使用PyTorch庫進行時間序列預測任務可以遵循以下步驟:

1.準備資料:資料應該包含一系列時間序列資料和相應的目標,也可以包含先前的時間步驟的其他特征,

2.創建PyTorch資料集:將資料轉換為PyTorch資料集,準備進行訓練和測驗,

3.定義網路結構:創建一個神經網路模型,可以是LSTM、GRU、RNN等,

4.定義損失函式:選擇合適的損失函式,如均方誤差(MSE)或平均絕對誤差(MAE),

5.定義優化器:選擇合適的優化器,如隨機梯度下降(SGD)或Adam,以更新網路的權重,

6.訓練網路:使用訓練資料來訓練神經網路,計算損失并優化權重,

7.測驗網路:使用測驗資料對神經網路進行測驗,評估其性能并進行調整,

8.預測結果:使用訓練好的模型來對以前未見過的資料進行預測,評估性能并進行調整,

例如,下面的代碼演示了如何用PyTorch庫進行時間序列預測

import torch
from torch.utils.data import Dataset, DataLoader

# 準備資料
class TimeSeries(Dataset):
    def __init__(self, data):
        self.data = https://www.cnblogs.com/yyyyfly1/archive/2023/06/06/data
        
    def __len__(self):
        return len(self.data) - sequence_length

    def __getitem__(self, idx):
        x = self.data[idx:idx+sequence_length]
        y = self.data[idx+sequence_length]
        return torch.Tensor(x), torch.Tensor(y)

# 創建資料集
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
sequence_length = 3
dataset = TimeSeries(data)
dataloader = DataLoader(dataset, batch_size=1)

# 定義網路結構
class LSTMNet(torch.nn.Module):
    def __init__(self, input_size, hidden_size, num_layers, output_size):
        super(LSTMNet, self).__init__()
        self.hidden_size = hidden_size
        self.num_layers = num_layers
        self.lstm = torch.nn.LSTM(input_size, hidden_size, num_layers, batch_first=True)
        self.fc = torch.nn.Linear(hidden_size, output_size)
        
    def forward(self, x):
        h0 = torch.zeros(self.num_layers, x.size(0), self.hidden_size).requires_grad_()
        c0 = torch.zeros(self.num_layers, x.size(0), self.hidden_size).requires_grad_()
        out, (hn, cn) = self.lstm(x, (h0.detach(), c0.detach()))
        out = self.fc(out[:, -1, :])
        return out

# 定義損失函式和優化器
input_size = 1
hidden_size = 2
num_layers = 1
output_size = 1
epochs = 100
lr = 0.01
net = LSTMNet(input_size, hidden_size, num_layers, output_size)
criterion = torch.nn.MSELoss()
optimizer = torch.optim.Adam(net.parameters(), lr=lr)

# 訓練網路
for epoch in range(epochs):
    for i, (x, y) in enumerate(dataloader):
        optimizer.zero_grad()
        output = net(x)
        loss = criterion(output, y)
        loss.backward()
        optimizer.step()
    print(f'Epoch {epoch+1}, Loss {loss.item()}')
    
# 測驗網路與預測結果
test_data = https://www.cnblogs.com/yyyyfly1/archive/2023/06/06/[11, 12, 13, 14]
test_dataset = TimeSeries(test_data)
x_test, y_test = test_dataset[0]
net.eval()
with torch.no_grad():
    prediction = net(x_test.unsqueeze(0))
    print(f'True value: {y_test.item()}, Predicted value: {prediction.item()}')

PyTorch中的torch.utils.data模塊是什么?它如何使用?

torch.utils.data是PyTorch中用于處理資料的模塊,是資料加載和預處理的核心模塊,它基于torch.Tensor的輸入資料,提供了一個封裝類,用于資料讀取器、預處理函式、采樣器、轉換器等的組合,并封裝到一個可迭代的類中,方便用戶訓練、驗證和測驗深度學習模型,

在使用torch.utils.data時,通常需要自定義以下類:

  • Dataset,表示資料集的抽象類,必須實作__getitem__和__len__方法,
  • DataLoader,使用Dataset作為資料源,并將資料提供給模型訓練時使用,

一個簡單的例子:

import torch
from torch.utils.data import Dataset, DataLoader

class MyDataset(Dataset):
  def __init__(self):
    self.data = https://www.cnblogs.com/yyyyfly1/archive/2023/06/06/torch.randn(100, 10)

  def __getitem__(self, index):
    return self.data[index], index

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

dataset = MyDataset()
dataloader = DataLoader(dataset, batch_size=10)

for data_batch, index_batch in dataloader:
  print(data_batch.shape, index_batch.shape)

這個例子中,我們定義了一個MyDataset類,它的__getitem__方法回傳一個資料樣本及其索引,__len__方法回傳資料集中樣本的數量,通過DataLoader,我們可以輕松地批量獲取資料,在每個迭代中,DataLoader都從Dataset中回傳batch_size大小的資料,方便我們訓練模型,

PyTorch中的torchvision模塊是什么?它有什么作用?

PyTorch中的torchvision模塊是一個用于處理影像和視覺資料的包,主要用于影像資料的加載、預處理和擴充等操作,它提供了許多著名的資料集,如MNIST、CIFAR-10、ImageNet等,同時也包含各種預訓練模型,如VGG16、ResNet等,

torchvision還提供了許多用于影像處理的工具,如圖片格式轉換、資料集分割、生成網路、影像預處理等,可以大大簡化在PyTorch中處理影像資料的代碼作業量,讓用戶可以更快速地開發視覺模型,

如何使用PyTorch庫進行遷移學習任務?

使用PyTorch庫進行遷移學習任務需要執行以下步驟:

  1. 準備資料:獲取原始資料,并將其分為訓練集、驗證集和測驗集,如果資料集很小,可以使用資料增強方法來擴充資料集,

  2. 加載預訓練模型:在PyTorch中,可以使用torchvision庫中的預訓練模型來進行遷移學習,可以從預訓練模型中加載模型引數,

  3. 修改網路結構:對加載的預訓練模型進行微調,將其適應新的任務,比如更改分類層的輸出節點數,

  4. 設定優化器和損失函式:定義要使用的優化器和損失函式,通常使用Adam優化器和交叉熵損失函式,

  5. 訓練模型:使用訓練集訓練模型,并使用驗證集或交叉驗證來調整超引數,如學習率和批量大小,

  6. 評估模型:使用測驗集評估模型性能,

  7. 預測新資料:使用訓練好的模型進行預測,

以下是使用PyTorch庫進行遷移學習任務的示例代碼:

import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import models, datasets, transforms

# 定義模型
model = models.resnet18(pretrained=True)
num_features = model.fc.in_features
model.fc = nn.Linear(num_features, 2) # 這里假設我們只有二分類任務

# 準備資料
data_transforms = {
    'train': transforms.Compose([
        transforms.RandomResizedCrop(224),
        transforms.RandomHorizontalFlip(),
        transforms.ToTensor(),
        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
    ]),
    'val': transforms.Compose([
        transforms.Resize(256),
        transforms.CenterCrop(224),
        transforms.ToTensor(),
        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
    ]),
}

data_dir = 'data/hymenoptera_data'
image_datasets = {x: datasets.ImageFolder(os.path.join(data_dir, x), data_transforms[x]) for x in ['train', 'val']}
dataloaders = {x: torch.utils.data.DataLoader(image_datasets[x], batch_size=4, shuffle=True, num_workers=4) for x in ['train', 'val']}
dataset_sizes = {x: len(image_datasets[x]) for x in ['train', 'val']}

# 設定優化器和損失函式
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)

# 訓練模型
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
model.to(device)
num_epochs = 10
for epoch in range(num_epochs):
    for phase in ['train', 'val']:
        if phase == 'train':
            model.train(True)
        else:
            model.train(False)

        running_loss = 0.0
        running_corrects = 0

        for inputs, labels in dataloaders[phase]:
            inputs = inputs.to(device)
            labels = labels.to(device)

            optimizer.zero_grad()

            with torch.set_grad_enabled(phase == 'train'):
                outputs = model(inputs)
                _, preds = torch.max(outputs, 1)
                loss = criterion(outputs, labels)

                if phase == 'train':
                    loss.backward()
                    optimizer.step()

            running_loss += loss.item() * inputs.size(0)
            running_corrects += torch.sum(preds == labels.data)

        epoch_loss = running_loss / dataset_sizes[phase]
        epoch_acc = running_corrects.double() / dataset_sizes[phase]

        print('{} Loss: {:.4f} Acc: {:.4f}'.format(phase, epoch_loss, epoch_acc))

# 評估模型
correct = 0
total = 0
with torch.no_grad():
    for data in dataloaders['test']:
        images, labels = data
        outputs = model(images)
        _, predicted = torch.max(outputs.data, 1)
        total += labels.size(0)
        correct += (predicted == labels).sum().item()

print('Accuracy of the network on the test images: %d %%' % (100 * correct / total))

# 預測新資料
# 假設有一張新的圖片,路徑為test.jpg,需要預測它的類別
image = Image.open("test.jpg")
image_tensor = data_transforms['val'](image).to(device)
image_tensor = image_tensor.unsqueeze(0)
output = model(image_tensor)
_, pred = torch.max(output, 1)
print("預測結果:", pred.item())
在黑夜里夢想著光,心中覆寫悲傷,在悲傷里忍受孤獨,空守一絲溫暖, 我的淚水是無底深海,對你的愛已無言,相信無盡的力量,那是真愛永在, 我的信仰是無底深海,澎湃著心中火焰,燃燒無盡的力量,那是忠誠永在,

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/554482.html

標籤:其他

上一篇:8-地圖可視化與seaborn可視化

下一篇:返回列表

標籤雲
其他(160483) Python(38206) JavaScript(25478) Java(18205) C(15237) 區塊鏈(8270) C#(7972) AI(7469) 爪哇(7425) MySQL(7234) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5873) 数组(5741) R(5409) Linux(5347) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4585) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2434) ASP.NET(2403) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1983) 功能(1967) HtmlCss(1952) Web開發(1951) C++(1932) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1879) .NETCore(1863) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • 【技識訓累】Python中的PyTorch庫【一】

    博客推行版本更新,成果積累制度,已經寫過的博客還會再次更新,不斷地琢磨,高質量高數量都是要追求的,工匠精神是學習必不可少的精神。因此,大家有何建議歡迎在評論區踴躍發言,你們的支持是我最大的動力,你們敢投,我就敢肝 ......

    uj5u.com 2023-06-07 07:41:56 more
  • 8-地圖可視化與seaborn可視化

    # 地圖可視化 basemap安裝和使用 區域縮放與繪圖 綜合案例:美國人口分布圖 # seaborn可視化 樣式與分布圖 分類圖 # basemap地圖繪制 地圖繪制也是資料可視化的一部分,常用的地圖繪制庫為basemap工具包,其為matplotlib的子包。本章將講解如何利用whl檔案在Pyt ......

    uj5u.com 2023-06-07 07:40:38 more
  • 演算法 in Golang:Recursion(遞回)

    # 演算法 in Golang:Recursion(遞回) ## 遞回演算法 ### 場景:在套娃中找到寶石 ### 可以這樣做 - while 沒找到: - if 當前項 is 寶石: - return 寶石 - else if 當前項 is 套娃: - 打開這個套娃 - if 當前項 is 寶石: ......

    uj5u.com 2023-06-07 07:39:52 more
  • JVM運行時資料區

    # JVM運行時資料區 ## 簡介 JVM運行時資料區包括:JVM堆疊(虛擬機堆疊),堆,方法區,本地方法堆疊,PC暫存器。大概的劃分就是堆疊和堆,以及一些其他的結構。重點在JVM堆疊,堆,方法區。JVM規范指出:方法區在邏輯上屬于堆,但是實際的具體的JVM中并不屬于堆的一部分。 在JVM堆疊中會發生GC和Er ......

    uj5u.com 2023-06-07 07:39:32 more
  • 20個Golang片段讓我不再健忘

    本文使用代碼片段的形式來解釋在 go 語言開發中經常遇到的小功能點,由于本人主要使用 java 開發,因此會與其作比較,希望對大家有所幫助。 ......

    uj5u.com 2023-06-07 07:39:21 more
  • Python 中 yeild 的用法

    本文包含以下四部分: > 1. yeild 介紹 > 2. yeild 案例 > 3. 簡單的例子對比yeild和常規函式 > 4. 復雜的例子說明yeild 與普通函式的差異 ### 1. yeild 介紹 yield 是 Python 的一個關鍵字,用于從一個函式中回傳一個生成器(generat ......

    uj5u.com 2023-06-07 07:39:16 more
  • 47基于java的養老院管理系統設計與實作

    基于java的養老院管理系統設計與實作;可適用于敬老院管理系統,老人管理系統,老人資訊管理系統,java養老院資訊系統,java敬老院資訊管理系統; ......

    uj5u.com 2023-06-07 07:39:12 more
  • java集成OpenAI的chatGpt功能

    一、開通OpenAI賬號 1.注冊OpenAI賬號 官網地址:https://openai.com/ 注意:提前準備好國外手機號,沒有的話用短信平臺購買手機號接收短信 2.購買國外手機號 地址:https://tiger-sms.com/ 我用支付寶充值了30多元(起充要30,加上手續費30多有點坑 ......

    uj5u.com 2023-06-07 07:33:27 more
  • Java革命性ORM框架之快速上手的Jimmer

    Jimmer是一款革命性的ORM框架,它的目標是提供一個簡單易用的API,幫助開發人員更加輕松地操作資料庫。Jimmer使用了Java 8的新特性,如Lambda運算式和Stream API,使得代碼更加簡潔、易讀。本文將詳細介紹Jimmer的基本用法,并提供一些Java代碼案例說明。 # 1. 什 ......

    uj5u.com 2023-06-06 15:25:39 more
  • ubuntu 搭建 cmake + vscode 的 c/c++ 開發環境

    # 軟體安裝 略 # 最基本的 vscode 插件 只需要安裝如下兩個插件即可 c/c++ 擴展是為了最基本的代碼提示和除錯支持 cmake language support 是為了提示 CMakeLists.txt 腳本 ![image](https://img2023.cnblogs.com/b ......

    uj5u.com 2023-06-06 15:09:20 more