記事ディレクトリ
序文
この記事では主に、Python のいくつかの一般的なデータ形式間の変換方法、特に Pytorch でのテンソル型の変換に関連するデータ操作を紹介します。
1. ナンピー
Numpy によって作成されるデフォルトの浮動小数点型はnp.float64
です。 Numpy によって作成される整数 ndarray はnp.int32です。
(1) numpyをtensorに変換する
1. torch.tensor 関数を直接使用する --------ディープコピー
2. torch.from_numpy メソッドを使用する ---浅いコピー
これら 2 つの方法を比較すると、torch.from_numpy メソッドを使用する方が優れており、より安全です。
要素が 1 つだけ (サイズ = 1) の場合、item() メソッドを使用してスカラーを変換できます。
(2) numpyをリストに変換する
1. Numpy には独自の関数 nump.tolist() があります - リスト内のデータの次元に注意してください
(3) numpyをPIL.Imageデータ型に変換
1. Image.fromarray() メソッドを使用します。
注: Image.fromarray() では、入力 dtype が uint8 型である必要があります。
(4) numpy を pandas データ型に変換する
1. pd.DataFrame()メソッドを使用する
2. テンソル
torch のテンソルのデフォルトの浮動小数点型は float32 型です。
torch のテンソルのデフォルトの整数型は int64 型です
[numpy との違いに注意してください]
まず、torch.tensor() と torch.Tensor() の 2 つのメソッドを見てください。どちらもディープ コピー メソッドであり、テンソルを返す間、元のデータとメモリを共有しないため、元のデータの変更の影響を受けません。
もう一度違いを理解してみましょう。
- torch.Tensor() は Python クラスである torch.FloatTensor() のエイリアスであり、すべてのテンソルは torch.Tensor のインスタンスです。入力を torch.FloatTensor() に変換します
- torch.tensor() は関数です。入力データ型に応じて、対応するデータ型に変換します。
空の tensot を作成する方法:
#两种方法
torch.Tensor()
torch.tensor(())
(1) ユニバーサル変換メソッド: torch.as_tensor() メソッド。他の型をテンソル型に変換します。
torch.as_tensor(data, dtype=None, device=None)->Tensor
data: リスト、タプル、ndarray、スカラーなどにすることができます。
dtype: テンソル内のデータのタイプを指定できます。
device: 返されたテンソルの場所を指定します。デフォルトは cpu です。
注: torch.as_tensor() はデフォルトではシャロー コピー メソッドですが、指定された dtype とデータ型が一致しない場合はディープ コピーになります。
(2) テンソルをnumpyに変換する
1. .numpy 関数を使用します --------浅いコピー
2. torch.Tensor.numpy() 関数を使用します --------浅いコピー
(3) CPUとGPUでのテンソルの変換
Pytorch トレーニングを使用するプロセスでは、トレーニングのためにデータを GPU に配置したり、テストのために GPU でトレーニングされたモデル データを CPU に配置したりする必要があることがよくあります。したがって、テンソル型を前後に変換する必要がある場合が多く、以下にいくつかの変換方法を簡単に紹介します。
1. CPU から GPU への変換
1. .cuda() メソッドを使用します。
2. torch.set_default_tensor_type()メソッドを使用して、デフォルトの浮動小数点型を cuda 型に設定します。
2. GPUからCPUへの変換
#把数据转到CPU----.cpu()方法
gpu_tensor.cpu()
一般的な書き方:
GPU が存在する場合は GPU に配置し、存在しない場合は CPU に配置します。
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
tensor1 = tensor1.to(device)
tensor2 = tensor2.to(device)
#......
(4) テンソルをスカラーに変換する
前と同様に、 item() メソッドを使用します
(5) テンソルをリストに変換
1.tolistメソッド
3. 画像読み込み時のデータ型
(1)cv2
cv2.imread()関数は主に画像を読み取るときに使用されます
。
img = cv2.imread(filename, flags)
#filename:图片路径
#flags:读取图片的格式。默认为1:彩色图片;0:灰度图片;
そして、numpy 型を返します。
注:
- cv2.imread() 関数によって読み取られた画像チャネルは、 RGBではなくBGRの順序で格納されます。cv2.imshow()を使用すると正常に表示できますが、他のライブラリを使用して表示する場合は変換が必要です。
- cv2.imread() で読み取って配列に変換した画像の形状は [H, W, C] ですが、Pytorch での入力に必要な形状は [B, C, H, W] です。
- cv2.imread() は中国語のパスをサポートしていません。パス名を変更したくない場合は、次のように読み取ることができます。
import numpy as np
import cv2
img=cv2.imdecode(np.fromfile(imgpath, dtype=np.uint8), cv2.IMREAD_COLOR)
- cv2.imshow() を使用してピクチャが点滅する可能性があることを表示する場合、 cv2.waitKey(0) ;というステートメントの行を追加できますが、 imshow() の最初のウィンドウ名は省略できません。
これは正しく表示されます:
(2)ピル
画像の読み込みと表示方法は以下のとおりです。
from PIL import Image
img = Image.open('E:\A.png')
img.show()
print(type(img))
出力:
- Imageで読み込む画像形式はW×H形式、読み込みは「RGB」、numnpy変換後のシェイプサイズは
[ C, H, W ]となります。
1. PIL をテンソルに変換する
pytorch でグラフィックス ライブラリtorchvisionを使用するには、torchvision.transforms が主にいくつかの一般的なグラフィックス変換に使用されます。
使用法は次のとおりです。torchvision.transforms.ToTensor(img)
のように記述しないでください。
注: ToTensor() メソッドは、テンソルに
要約する
実際には、まだ多くのコンテンツがあり、後で追加される予定です。