まず、Python環境にPyTorchをインストールする必要があります。これを行う最も簡単な方法は—です。 pip
またはconda
ツールを使用します。 pytorch.org にアクセスし、使用するPythonインタープリターとパッケージマネージャーのバージョンをインストールします。
#このPythonコードをJupyterノートブックで実行できます
#正しいバージョンを自動的にインストールします
#PyTorch。
# http://pytorch.org / from os import path
from
Wheel.pep425tags
import
get_abbr_impl、get_impl_ver、get_abi_tag
プラットフォーム
=
`{} {}-{}`
。
format
(get_abbr_impl()、get_impl_ver()、get_abi_tag())
アクセラレータ
=
`cu80`
if
path.exists(
`/ opt / bin / nvidia-smi`
)
else
`cpu`
! pip install
-
q http:
/
/
download.pytorch.org
/
whl
/
{accelerator}
/
トーチ
-
0.3
。
0.post4
-
{platform}
-
linux_x86_64.whl torchvision
PyTorchをインストールしたら、今すぐ始めましょうコードを見てください。
必要なライブラリ関数とオブジェクトをインポートするには、以下の2行を記述してください。
import
torch
from
torch.autograd
import
変数
また、いくつかのデータを定義し、それを変数 x_dataとy_data次のように:
x_data
=
変数(torch.Tensor([[
]、[
2.0
]、 [
3.0
]]))
y_data
=
Variable(torch.Tensor([[
2.0
]、[
4.0
]、[
6.0
]]))
ここにx_data& #8212;独立変数、および y_data —従属変数。これが今のところ私たちのデータセットになります。次に、モデルを定義する必要があります。モデルの定義には、主に2つのステップがあります。それらは次のとおりです。
- モデルを初期化します。
- フォワードパスを宣言します。
- データを渡し、予測されたy値を計算することにより、ライブ転送を実行します。
- MSEを使用して損失を計算します。
- すべてのグラデーションを0にリセットし、逆伝播してから重みを更新します。
以下のクラスを使用します:
class
LinearRegressionModel(torch.nn.Module):
def
__ init __(
self
):
super
(LinearRegressionModel、
self
).__ init __()
self
。線形
=
torch.nn.Linear(
1
、
1
)
#1つの入力と1つの出口
def
forward(
self
、x):
y_pred
=
自己
。線形(x)
return
y_pred
ご覧のとおり、 Modelクラスはtorch.nn.moduleのサブクラスです。さらに、ここでは入力と出力が1つしかないため、入力と出力のサイズが1の線形モデルを使用します。
次に、このモデルのオブジェクトを作成します。
#モデル
our_model
=
LinearRegressionModel()
その後、オプティマイザーを選択し、損失基準。ここでは、損失関数として平均二乗誤差(MSE)を使用し、オプティマイザーとして確率的勾配降下法(SGD)を使用します。また、学習率を任意に0.01に固定します。
<コードクラス="プレーン">基準<コードクラス="キーワード">=<コードクラス="プレーン">torch.nn.MSELoss(size_average =
False
)
オプティマイザー
=
torch.optim.SGD(our_model.parameters()、lr
=
0.01
)
これで、学習段階になりました。トレーニング中に次のタスクを500回実行します。
for
エポック
in
範囲
(
500
):
#フォワードパス:
#xからモデルへ
pred_y
=
our_model(x_data)
#計算して印刷を失う
損失
=
基準(pred_y、y_data)
#ゼロ勾配、バックトラック
#そして重みを更新します。
optimizer.zero_grad()
loss.backward()
optimizer.step()
print
(
`epoch {}、loss {}`
。
フォーマット
(epoch、loss.data [
0
]))
トレーニングを完了した後、定義したモデル。そのため、不明な x_data 値、この場合は4.0をチェックします。
new_var
=
Variable(torch.Tensor([[[
4.0
]]))
pred_y
=
our_model(new_var)
print
(
"predict(トレーニング後)"
、
4
、our_model( new_var).data [
0
] [
0
])
すべての手順を正しく実行すると、エントリ4.0で次のように表示されます。以下に示すように、値は8.0に非常に近い値です。したがって、このモデルは基本的に、明示的なプログラミングなしで入力と出力の関係を学習します。
予測(トレーニング後)4 7.966438293457031
参考として、以下のこの記事のすべてのコード:
import
torch
from
torch.autograd
import
変数
x_data
=
Variable(torch.Tensor([[
1.0
]、[
2.0
]、[
3.0
]]))
y_data
=
V ariable(torch.Tensor([[
2.0
]、[
4.0
]、[
6.0
]]))
class
LinearRegressionModel(torch.nn.Module):
def
__ init __(
self
):
super
(LinearRegressionModel、
self
).__ init __()
self
。線形
=
torch.nn.Linear(
1
、
1
)
#1つの入力と1つの出力
def
forward(
self
、x):
y_pred
=
自己
。線形(x)
return
y_pred
#モデル
our_model
=
LinearRegressionModel()
基準
=
torch.nn.MSELoss(size_average
=
False
)
オプティマイザー
=
torch.optim。 SGD(our_model.parameters()、lr
=
0.01
)
for
エポック
in
range
(
500
):
#フォワードパス:パスして予測yを計算します
#—モデルへのÖ
pred_y
=
our_model(x_data)
#計算して印刷を失う
損失
=
基準(pred_y、y_data)
#ゼロ勾配、バックパス、
#そして重みを更新します。
optimizer.zero_grad()
loss.backward()
optimizer.step()
印刷
(
`エポック{}、損失{}`
。
format
(epoch、loss.data [
0
]))
new_var
=
Variable(torch.Tensor([[
4.0
]]))
< / p>
pred_y
=
our_model(new_var)
print
(
"predict(トレーニング後)"
、
4
、our_model(new_var).data [
0
] [
0
])