MNISTデータセットでテスト

Hands on Machine Learning の第3章で、モデルの精度を評価する際にいろんな方法があるが、分類問題には適していない評価方法もあって、適している評価方法もある。 from sklearn.datasets import fetch_mldata import numpy as np # $HOME/scikit_learn_dataディレクトリにデータがダウンロードされる mnist = fetch_mldata('MNIST original') X, y = mnist["data"], mnist["target"] X_train, X_test, y_train, y_test = X[:60000], X[60000:], y[:60000], y[60000:] shuffle_index = np.random.permutation(60000) X_train, y_train = X_train[shuffle_index], y_train[shuffle_index] y_train_5 = (y_train == 5) y_test_5 = (y_test == 5) print("y_train_5: {}\ny_test_5: {}\ny_train_5.shape: {}".format(y_train_5, y_test_5, y_train_5.shape)) y_train_5: [False False False ... False False False] y_test_5: [False False False ... False False False] y_train_5.

2層のニューラルネットワークをスクラッチから実装

やりたいことは2階層のニューラルネットワークを実装して、猫なのか、猫じゃないなのかを判断するモデルを作ることです。CNN(畳み込みネットワーク)は使わず、スクラッチからNumpyでForward PropagationとBack propagationを実装します。 209枚の画像訓練データと50枚の画像テストデータを使います。 訓練データtrain_catvnoncat.h5とテストデータ test_catvnoncat.h5両方とも HDF5フォーマットです。 とりあえず訓練データを読み込んで中身を確認します。 import numpy as np import h5py train_dataset = h5py.File('./images/train_catvnoncat.h5', "r") print(list(train_dataset.keys())) 結果 ['list_classes', 'train_set_x', 'train_set_y'] 訓練データの画像セットとラベルをそれぞれ抽出します。訓練用の画像は209枚があって、どれも3つの色チャンネルで、 横 x 縦 64 x 64の画像です。 train_x_orig = np.array(train_dataset["train_set_x"]) # 訓練データ画像セット自体 train_y = np.array(train_dataset["train_set_y"]) # 訓練データ画像セットのラベル train_y = train_y.reshape(train_y.shape[0], -1).T print(train_x_orig.shape) print(train_y.shape) 結果: (209, 64, 64, 3) (1, 209) 訓練データと同様にテストデータを準備します。テストの画像データは50枚があって、どれも3つの色チャンネルで、 横 x 縦は 64 x 64の画像です。 test_dataset = h5py.File('./images/test_catvnoncat.h5', "r") test_x_orig = np.