読み込みと可視化FashionMNIST
このノートブックでは、ロードして表示したい ファッション・MNISTデータベース画像。
任意の分類の最初のステップは、あなたが使用しているデータを参照するように設定されています。この方法で、あなたは画像とラベルフォーマット、ならびにこのような画像設定モードを識別するために、ネットワークを定義する方法についていくつかの洞察力についてのいくつかの詳細を学ぶことができます。
PyTorch一部があり、内蔵されているデータが使用できる設定し、FashionMNISTはそのうちの一つである、それはこの中でノートブックにダウンロードされているdata/
ディレクトリので、我々は行う必要があり、これらのイメージをロードして使用FashionMNISTデータセットクラスを使用することであるDataLoader
バルクロードデータを。
ロードデータ
データセットクラスとテンソル
torch.utils.data.Dataset
データセットを表す抽象クラスであり、FashionMNISTクラスは、私たちは、画像/タグデータボリュームをロードすることができます。このデータセットクラスの拡張機能であり、かつ均一例えば、すべての画像を使用するように変換されます、我々のデータを変換するために適用されますテンソルのニューラルネットワークを訓練します。テンソル同様のnumpyのアレイは、計算をスピードアップするために、GPU上で使用することができます。
のは、トレーニングデータセットを構築する方法を見てみましょう。
#我々の基本的なライブラリーは、 トーチインポート インポートtorchvisionの #データローディングおよび変換 torchvision.datasetsからFashionMNISTインポート torch.utils.dataインポートデータローダから 変換torchvisionインポートから 位torchvisionデータセットの出力は、範囲のPILImage画像を[0、1]です。 #私たちは、CNNに入力用のテンソルにそれらを変換 テンソルなどのデータを読むために変換定義## data_transform = transforms.ToTensor() #トレーニングとテストデータセットを選択し train_data = FashionMNIST(ルート=「/データ」を、電車= Trueの場合、 ダウンロード= Falseの、変換は= data_transform) #印刷アウトトレーニングデータに関するいくつかの統計 印刷( '画像の列車データ、番号:'、LEN(train_data))
列車のデータ、画像の数:60000
イテレーションとバッチデータ
次に、私たちが使用しようとしているtorch.utils.data.DataLoader
、それはバッチ処理データと設定イテレータランダムなデータすることができます。
次のセルでは、データ、および負荷20画像/データタグのバルクのサイズをスクランブル。
#は、データローダを用意し、BATCH_SIZE設定 あなたは大きくても小さくてもしBATCH_SIZEを変更してみてください:## TODO BATCH_SIZEが損失をどのように影響するかを参照して、あなたのネットワークを訓練に取得するときに## BATCH_SIZE = 20 train_loader =データローダー(train_data、BATCH_SIZE =をBATCH_SIZE、シャッフル= TRUE) #は、画像クラスを指定 するクラス= [ 'Tシャツ/トップ'、 'ズボン'、 'プル'、 'ワンピース'、 'コート'、 'サンダル'、 'シャツ'、 'スニーカー'、 「バッグ」、「アンクルブーツ」]
いくつかのトレーニングデータの可視化
このセルは、使用、トレーニングデータセットを横断するdataiter.next()
画像/データタグのランダムなバッチを読み込みます。その後、それは次のようになります2 x batch_size/2
グリッドにこれらの視覚的イメージとラベル。
NPのようなインポートnumpyの PLTとしてインポートmatplotlib.pyplot %matplotlibのインライン #トレーニング画像のバッチを得 dataiter = ITER(train_loader) 画像、ラベル= dataiter.next() 画像= images.numpy() #プロットバッチ内の画像、対応するラベルと共に 図= plt.figure(figsize =(25、4)) np.arangeにおけるIDX(BATCH_SIZE)用: AX = fig.add_subplot(2、BATCH_SIZE / 2、IDX + 1、xticks = []、 yticks = []) ax.imshow(np.squeeze(画像[IDX])、CMAP = 'グレー') ax.set_title(クラス[ラベル[IDX]])
より詳細に画像を表示します
各画像データセットは、28x28
画素とグレースケール画像を正規化されています。
正規化された記述について
正規化は、各画像ではなく、ネットワークの特定の層の過剰な活性化よりも、値の類似の範囲内に入る、請求CNN処理におけるトレーニングは、フィードは、前面と逆伝搬ステップを経たことを確実にします。フォワード供給工程の間に、ニューラルネットワークは、入力画像を受け取り、各入力ピクセルは、フィルタ重み畳み込みの数を乗じたオフセットを加え、その後、いくつかの関数を適用すると、活性化し、プールされています。正規化せずに、勾配バックプロパゲーションステップは非常に大きくなり、むしろ収束よりも、私たちの増加の損失につながる計算します。
#インデックスで画像を選択 IDX = 2 IMG = np.squeeze(画像[IDX]) #表示その画像の画素値 図= plt.figure(figsize =(12,12)) AX = fig.add_subplot(111) ax.imshow(IMG、CMAP = 'グレー') 幅、高さ= img.shapeの THRESH = img.max()/ 2.5 の範囲(幅)におけるXの場合: yの範囲内(高さ): ヴァル= ROUND(IMG [ X] [Y]、2)もしIMG [X] [Y]!= 0そうでなければ0 ax.annotate(STR(ヴァル)、XY =(Y、X)、 たHorizontalAlignment = '中央'、 VerticalAlignmentを= '中央'、 色= '白'であればIMG [X] [Y] <THRESH他'黒')