ゼロベース入門CV試合-ストリートキャラクタ符号化識別Task 4
4534 ワード
この部分の内容はモデルの訓練とパラメータを主とすべきで、前のニューラルネットワークの紹介に続いて、このモデルの訓練とパラメータの方法を主としないで、このpytorchモジュールの関連内容を話して、結局.pytorchこれこそ今回のコンテンツの重点モジュールです.
1.概要PyTorch
PyTorchはFacebookが発表した非常に個性的な深さ学習フレームワークで、Tensorflow、Keras、Theanoなどの他の深さ学習フレームワークとは異なり、動的計算図モードであり、その応用モデルは実行中に実行パラメータに基づいて動的に変更することをサポートし、その他のいくつかのフレームワークは静的計算図モードであり、そのモデルは実行前に確定されている.
2.PyTorchの使用
PyTorchではTensorは多次元配列を表し,Tensorは実際にnumpyの配列に類似しており,両者は自由に変換できる.
デフォルトのVariableは導関数gradがあり、x.dataはデータで、ここでx.dataはTensorです.x.gradは計算中に動的に変化する導関数である.pytorchを理解するには,まず導出の概念を理解しなければならない.導出の役割は,ニューラルネットワークの重みパラメータを導関数で調整することであり,Pytorchでは導出のためにautogradという専用のパケットを提供した.Autogradを使うとVariableがパラメータを定義すると、Variableは2つの変数を自動的に定義し、dataは元の重みデータを表す.gradは導出後のデータ,すなわち勾配を表す.反復プロセスのたびにこのgradを用いて重みデータを修正する.もう一つの重点の概念、損失関数を紹介します.損失関数はターゲット関数とも呼ばれ,ニューラルネットワークモデルをコンパイルするために必要な2つのパラメータの1つである.もう1つの必須パラメータはオプティマイザです.損失関数とは、ラベル値と予測値の差を計算するための関数であり、機械学習の過程で、多くの損失関数が選択可能であり、典型的には距離ベクトル、絶対値ベクトルなどがある.
いくつかの一般的な損失関数の計算方法について説明します.
nn.L 1 Loss:L 1 Lossの計算方法は簡単で,予測値と真実値の絶対誤差の平均数をとる.
nn.SmoothL 1 Loss:SmoothL 1 LossはHuber Lossとも呼ばれ、誤差は(-1,1)では二乗損失であり、その他の場合はL 1損失である.
nn.MSELOss:二乗損失関数.その計算式は、予測値と実際の値の間の二乗和の平均数です.
nn.BCELOss:二分類用のクロスエントロピーは計算式が複雑で,ここでは主に概念があればよいが,一般的には用いられない.
nn.CrossEntropyLoss:クロスエントロピー損失関数は,画像分類ニューラルネットワークモデルでよく用いられ,画像認識検証に用いられる.
nn.NLLloss:負の対数尤度損失関数で,前にLogSoftMax層を接続するとクロスエントロピー損失に等価である.ここのxlabelは前のクロスエントロピー損失とは異なり,ここではlog演算後の数値であることに注意する.この損失関数は一般に画像認識モデルにも用いられる.
nn.NLLoss 2 d:上記と似ていますが、いくつかの次元が多く、一般的に画像に使われています.たとえば,全ボリュームネットワークを分類すると,最後のピクチャの各点がカテゴリラベルを予測する.
概要オプティマイザ:
オプティマイザは通俗的に言えばアルゴリズムであり,導関数を計算するアルゴリズムである.様々なオプティマイザの目的と発明の目的は、実際には、ユーザーに自分のシーンに適したオプティマイザを選択させることである.オプティマイザの最も主要な測定指標は最適化曲線の安定性であり、最良のオプティマイザは各サンプルデータの最適化がウェイトパラメータを目標値に均一に近づけ、ジャンプの変化ではなく、ジャンプの変化に近づけることである.従って,損失値の安定な低下は深さ学習モデルにとって非常に重要な測定指標である.pytorchのオプティマイザはtorchに置かれています.optimパッケージにあります.一般的なオプティマイザには、SGD、Adam、Adadelta、Adagrad、Adamaxなどがあります.このいくつかのオプティマイザは現実世界で十分に使用されています.特殊なオプティマイザをカスタマイズする必要がある場合は、pytorchもカスタマイズの手段を提供していますが、ここでは深く研究しません.結局、残されたオプティマイザは十分強いです.
線形回帰のシミュレーション:Y=wX+b
Pytorchではモデルの保存とロードが非常に簡単で、モデルパラメータの保存とロードが一般的です:
プール化レイヤ:プール化レイヤは比較的分かりやすく、複数の要素を1つの統計値で表すことです.例えば2次元最大値のプール化にはtorchを用いる.nn.functional. F.max_pool 2 dメソッドで操作します.
まとめ:
機械の勉強は広くて深くて、道が長いので、今回何を書いたのか分かりません.後ろはゆっくりyolov 4をやります.
1.概要PyTorch
PyTorchはFacebookが発表した非常に個性的な深さ学習フレームワークで、Tensorflow、Keras、Theanoなどの他の深さ学習フレームワークとは異なり、動的計算図モードであり、その応用モデルは実行中に実行パラメータに基づいて動的に変更することをサポートし、その他のいくつかのフレームワークは静的計算図モードであり、そのモデルは実行前に確定されている.
2.PyTorchの使用
PyTorchではTensorは多次元配列を表し,Tensorは実際にnumpyの配列に類似しており,両者は自由に変換できる.
import torch
from torch.autograd import Variable
x=Variable(torch.Tensor(2,2))
print("x variable: ",x)
print ("x.data: ",x.data, ",x.grad: ",x.grad)
#
x variable: tensor([[0.0000e+00, 0.0000e+00],
[2.1019e-44, 0.0000e+00]])
x.data: tensor([[0.0000e+00, 0.0000e+00],
[2.1019e-44, 0.0000e+00]]) ,x.grad: None
デフォルトのVariableは導関数gradがあり、x.dataはデータで、ここでx.dataはTensorです.x.gradは計算中に動的に変化する導関数である.pytorchを理解するには,まず導出の概念を理解しなければならない.導出の役割は,ニューラルネットワークの重みパラメータを導関数で調整することであり,Pytorchでは導出のためにautogradという専用のパケットを提供した.Autogradを使うとVariableがパラメータを定義すると、Variableは2つの変数を自動的に定義し、dataは元の重みデータを表す.gradは導出後のデータ,すなわち勾配を表す.反復プロセスのたびにこのgradを用いて重みデータを修正する.もう一つの重点の概念、損失関数を紹介します.損失関数はターゲット関数とも呼ばれ,ニューラルネットワークモデルをコンパイルするために必要な2つのパラメータの1つである.もう1つの必須パラメータはオプティマイザです.損失関数とは、ラベル値と予測値の差を計算するための関数であり、機械学習の過程で、多くの損失関数が選択可能であり、典型的には距離ベクトル、絶対値ベクトルなどがある.
import torch
from torch.autograd import Variable
import torch.nn as nn
import torch.nn.functional as F
sample = Variable(torch.ones(2,2))
a=torch.Tensor(2,2)
a[0,0]=0
a[0,1]=1
a[1,0]=2
a[1,1]=3
target = Variable (a)
いくつかの一般的な損失関数の計算方法について説明します.
nn.L 1 Loss:L 1 Lossの計算方法は簡単で,予測値と真実値の絶対誤差の平均数をとる.
nn.SmoothL 1 Loss:SmoothL 1 LossはHuber Lossとも呼ばれ、誤差は(-1,1)では二乗損失であり、その他の場合はL 1損失である.
nn.MSELOss:二乗損失関数.その計算式は、予測値と実際の値の間の二乗和の平均数です.
nn.BCELOss:二分類用のクロスエントロピーは計算式が複雑で,ここでは主に概念があればよいが,一般的には用いられない.
nn.CrossEntropyLoss:クロスエントロピー損失関数は,画像分類ニューラルネットワークモデルでよく用いられ,画像認識検証に用いられる.
nn.NLLloss:負の対数尤度損失関数で,前にLogSoftMax層を接続するとクロスエントロピー損失に等価である.ここのxlabelは前のクロスエントロピー損失とは異なり,ここではlog演算後の数値であることに注意する.この損失関数は一般に画像認識モデルにも用いられる.
nn.NLLoss 2 d:上記と似ていますが、いくつかの次元が多く、一般的に画像に使われています.たとえば,全ボリュームネットワークを分類すると,最後のピクチャの各点がカテゴリラベルを予測する.
概要オプティマイザ:
オプティマイザは通俗的に言えばアルゴリズムであり,導関数を計算するアルゴリズムである.様々なオプティマイザの目的と発明の目的は、実際には、ユーザーに自分のシーンに適したオプティマイザを選択させることである.オプティマイザの最も主要な測定指標は最適化曲線の安定性であり、最良のオプティマイザは各サンプルデータの最適化がウェイトパラメータを目標値に均一に近づけ、ジャンプの変化ではなく、ジャンプの変化に近づけることである.従って,損失値の安定な低下は深さ学習モデルにとって非常に重要な測定指標である.pytorchのオプティマイザはtorchに置かれています.optimパッケージにあります.一般的なオプティマイザには、SGD、Adam、Adadelta、Adagrad、Adamaxなどがあります.このいくつかのオプティマイザは現実世界で十分に使用されています.特殊なオプティマイザをカスタマイズする必要がある場合は、pytorchもカスタマイズの手段を提供していますが、ここでは深く研究しません.結局、残されたオプティマイザは十分強いです.
線形回帰のシミュレーション:Y=wX+b
import torch
from torch.autograd import Variable
import numpy as np
from numpy import random
import matplotlib.pyplot as plt
X = np.linspace(-1, 1, 200)
Y = 0.5 * X + 0.2* np.random.normal(0, 0.05, (200, ))
plt.scatter(X,Y)
plt.show()
# X,Y 200 batch ,1
X=Variable(torch.Tensor(X.reshape(200,1)))
Y=Variable(torch.Tensor(Y.reshape(200,1)))
#
model = torch.nn.Sequential(
torch.nn.Linear(1, 1),)
optimizer = torch.optim.SGD(model.parameters(), lr=0.5)
loss_function = torch.nn.MSELoss()
for i in range(300):
prediction = model(X)
loss = loss_function(prediction, Y)
optimizer.zero_grad()
loss.backward()
optimizer.step()
plt.figure(1, figsize=(10, 3))
plt.subplot(131)
plt.title('model')
plt.scatter(X.data.numpy(), Y.data.numpy())
plt.plot(X.data.numpy(), prediction.data.numpy(), 'r-', lw=5)
plt.show()
Pytorchではモデルの保存とロードが非常に簡単で、モデルパラメータの保存とロードが一般的です:
torch.save(model_object.state_dict(), 'model.pt')
model.load_state_dict(torch.load(' model.pt'))
≪ボリューム・レイヤ|Volume Layer|emdw≫:ボリューム・レイヤは、元のデータを固定サイズの矩形領域で席巻し、元のデータをボリューム・コアと同じサイズの小さなブロックに分割し、これらの小さなブロックとボリューム・コアを乗算してボリューム値を出力します.ボリュームの本質は、ボリュームコアのパラメータで元のデータの特徴を抽出することであり、マトリクス点乗の演算により、ボリュームコアの特徴と一致する値を抽出し、ボリューム層に複数のボリュームコアがある場合、ニューラルネットワークは、各ボリュームコアが1つの特徴を表すように、ボリュームコアのパラメータ値を自動的に学習する.プール化レイヤ:プール化レイヤは比較的分かりやすく、複数の要素を1つの統計値で表すことです.例えば2次元最大値のプール化にはtorchを用いる.nn.functional. F.max_pool 2 dメソッドで操作します.
import torch.nn.functional as F
from torch.autograd import Variable
print("conv2d sample")
a=range(20)
x = Variable(torch.Tensor(a))
x=x.view(1,1,4,5)
print("x variable:", x)
y=F.max_pool2d(x, kernel_size=2,stride=2)
print ("y:",y)
まとめ:
機械の勉強は広くて深くて、道が長いので、今回何を書いたのか分かりません.後ろはゆっくりyolov 4をやります.