Rumah >Peranti teknologi >AI >Fahami dengan mendalam fungsi teras Pytorch: terbitan automatik!
Hai, saya Xiaozhuang!
Mengenai operasi terbitan automatik dalam pytorch, perkenalkan konsep terbitan automatik dalam pytorch
Derivasi automatik ialah fungsi penting rangka kerja pembelajaran mendalam, digunakan untuk mengira kecerunan dan mencapai kemas kini dan pengoptimuman parameter.
PyTorch ialah rangka kerja pembelajaran mendalam yang biasa digunakan yang menggunakan graf pengiraan dinamik dan mekanisme terbitan automatik untuk memudahkan proses pengiraan kecerunan.
Penerbitan automatik ialah fungsi penting rangka kerja pembelajaran mesin Ia boleh mengira secara automatik derivatif (kecerunan) fungsi, sekali gus memudahkan proses melatih model pembelajaran mendalam. Dalam pembelajaran mendalam, model selalunya mengandungi sejumlah besar parameter, dan pengiraan kecerunan secara manual boleh menjadi rumit dan terdedah kepada ralat. PyTorch menyediakan fungsi terbitan automatik, membolehkan pengguna mengira kecerunan dengan mudah dan melakukan perambatan belakang untuk mengemas kini parameter model. Pengenalan ciri ini sangat meningkatkan kecekapan dan kemudahan penggunaan pembelajaran mendalam.
Fungsi terbitan automatik PyTorch adalah berdasarkan graf pengiraan dinamik. Graf pengiraan ialah struktur graf yang digunakan untuk mewakili proses pengiraan fungsi, di mana nod mewakili operasi dan tepi mewakili aliran data. Berbeza daripada graf pengiraan statik, struktur graf pengiraan dinamik boleh dijana secara dinamik berdasarkan proses pelaksanaan sebenar, dan bukannya ditakrifkan terlebih dahulu. Reka bentuk ini menjadikan PyTorch fleksibel dan berskala untuk menyesuaikan diri dengan keperluan pengkomputeran yang berbeza. Melalui graf pengiraan dinamik, PyTorch boleh merekodkan sejarah operasi, melakukan perambatan belakang dan mengira kecerunan mengikut keperluan. Ini menjadikan PyTorch sebagai salah satu rangka kerja yang digunakan secara meluas dalam bidang pembelajaran mendalam.
Dalam PyTorch, setiap operasi pengguna direkodkan untuk membina graf pengiraan. Dengan cara ini, apabila kecerunan perlu dikira, PyTorch boleh melakukan perambatan balik mengikut graf pengiraan dan secara automatik mengira kecerunan setiap parameter kepada fungsi kehilangan. Mekanisme terbitan automatik ini berdasarkan graf pengiraan dinamik menjadikan PyTorch fleksibel dan berskala, menjadikannya sesuai untuk pelbagai struktur rangkaian saraf yang kompleks.
Dalam PyTorch, tensor ialah struktur data asas untuk terbitan automatik. Tensor adalah serupa dengan tatasusunan berbilang dimensi dalam NumPy, tetapi mempunyai ciri tambahan seperti terbitan automatik. Melalui kelas obor.Tensor, pengguna boleh mencipta tensor dan melakukan pelbagai operasi padanya.
import torch# 创建张量x = torch.tensor([2.0], requires_grad=True)
Dalam contoh di atas, require_grad=True bermaksud kita ingin membezakan secara automatik tensor ini.
Setiap operasi yang dilakukan akan mencipta nod dalam graf pengiraan. PyTorch menyediakan pelbagai operasi tensor, seperti penambahan, pendaraban, fungsi pengaktifan, dsb., yang akan meninggalkan kesan dalam graf pengiraan.
# 张量操作y = x ** 2z = 2 * y + 3
Dalam contoh di atas, proses pengiraan y dan z direkodkan dalam graf pengiraan.
Setelah graf pengiraan dibina, rambatan belakang boleh dilakukan dengan memanggil kaedah .backward() untuk mengira kecerunan secara automatik.
# 反向传播z.backward()
Pada ketika ini, kecerunan x boleh diperolehi dengan mengakses x.grad.
# 获取梯度print(x.grad)
Kadangkala, kami ingin melumpuhkan penjejakan kecerunan untuk operasi tertentu, kami boleh menggunakan pengurus konteks torch.no_grad().
with torch.no_grad():# 在这个区域内的操作不会被记录在计算图中w = x + 1
Dalam gelung latihan, biasanya perlu mengosongkan kecerunan sebelum setiap rambatan belakang untuk mengelakkan pengumpulan kecerunan.
# 清零梯度x.grad.zero_()
Untuk menunjukkan proses terbitan automatik dengan lebih khusus, mari kita pertimbangkan masalah regresi linear mudah. Kami mentakrifkan model linear dan fungsi kehilangan ralat purata kuasa dua dan menggunakan terbitan automatik untuk mengoptimumkan parameter model.
import torch# 数据准备X = torch.tensor([[1.0], [2.0], [3.0]])y = torch.tensor([[2.0], [4.0], [6.0]])# 模型参数w = torch.tensor([[0.0]], requires_grad=True)b = torch.tensor([[0.0]], requires_grad=True)# 模型和损失函数def linear_model(X, w, b):return X @ w + bdef mean_squared_error(y_pred, y_true):return ((y_pred - y_true) ** 2).mean()# 训练循环learning_rate = 0.01epochs = 100for epoch in range(epochs):# 前向传播y_pred = linear_model(X, w, b)loss = mean_squared_error(y_pred, y)# 反向传播loss.backward()# 更新参数with torch.no_grad():w -= learning_rate * w.gradb -= learning_rate * b.grad# 清零梯度w.grad.zero_()b.grad.zero_()# 打印最终参数print("训练后的参数:")print("权重 w:", w)print("偏置 b:", b)
Dalam contoh ini, kami mentakrifkan model linear mudah dan fungsi kehilangan ralat min kuasa dua. Melalui berbilang gelung latihan berulang, parameter w dan b model akan dioptimumkan untuk meminimumkan fungsi kehilangan.
Akhirnya
Melalui graf pengiraan dinamik dan pengiraan kecerunan, pengguna boleh dengan mudah mentakrifkan struktur rangkaian saraf yang kompleks dan melaksanakan algoritma pengoptimuman seperti penurunan kecerunan melalui terbitan automatik.
Ini membolehkan penyelidik dan jurutera pembelajaran mendalam menumpukan lebih pada reka bentuk model dan eksperimen tanpa perlu risau tentang butiran pengiraan kecerunan.
Atas ialah kandungan terperinci Fahami dengan mendalam fungsi teras Pytorch: terbitan automatik!. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!