Обновляйте блог во время написания ? Он будет обновляться в ближайшее время, вы можете сначала добавить его в закладки
Официальная ссылка на домашнее задание
Поддержка записи курса и трансляции на станции B2017 старая версия 2020 новая версия
1. setup
Официальная ссылка выше дает два экспериментальных метода, первый — использовать облачный сервер Google, второй — запускать локально, и я выбрал второй. Загрузите папку, содержащую блокнот jupyter и стартовый код, затем выполните команду pip, чтобы загрузить некоторые используемые пакеты. Если на этом этапе возникает ошибка, см. подсказку, могут быть конфликты между зависимостями пакетов и тому подобное.
pip install -r requirements.txt
Далее выполняем скрипт для скачивания набора данных Набор данных не большой, больше 100 Мб.
cd cs231n/datasets
./get_datasets.sh
Запустите блокнот Jupyter.
jupyter notebook
Просто выберите подходящее руководство.
2. KNN (20 points)
Просто запустите его прямо в блокноте Jupyter.
Сначала установите блокнот, этот код может напрямую вставить сгенерированное изображение в текст, что очень удобно.
Это вводит набор данных, и, учитывая ситуацию с несколькими прогонами, он автоматически очистит предыдущие данные и, наконец, распечатает форму данных, имеется 50 000 обучающих данных, 10 000 тестовых данных, «32, 32, 3» равно 32 * 32 пикселя * Значение RGB для каждого пикселя (3). labels — это одномерный массив, указывающий на вид, свинью, собаку, корову, овцу и т. д.
Простая визуализация наборов данных.
Сужая набор данных, все равно сложно запустить десятки тысяч картинок на блокноте.
k_nearest_neighbor.py завершение кода
«Обучение» KNN — это просто сохранение тренировочного набора.
Метод calculate_distances_two_loops() требует завершения. Входные данные – тестовый набор, а выходные данные – массив из двух цифр. Diss[i][j] представляет собой евклидово расстояние между тестовым набором[i] и обучающим набором[j]. .
Создайте экземпляр KNearestNeighbor, обучите и распечатайте форму расстояний, чтобы проверить выполненную выше функцию. Напечатанные 500 * 5000 верны
Визуализируйте этот массив, не можете ясно видеть, запустите его локально.
Это массив 500 * 5000. Как упоминалось ниже, чем больше евклидово расстояние, тем светлее цвет (ярче).
Продолжайте увеличивать масштаб.
Вы можете видеть, что после визуализации есть куча светлых и темных точек, а также смутно видно много ярких линий. Здесь поднимается вопрос:
Inline Question 1
Notice the structured patterns in the distance matrix, where some rows or columns are visible brighter. (Note that with the default color scheme black indicates low distances while white indicates high distances.)
- What in the data is the cause behind the distinctly bright rows?
- What causes the columns?
1. Яркая горизонтальная линия указывает на то, что евклидово расстояние между тестовыми данными и всеми данными поезда очень велико, то есть оно не совпадает со всеми данными поезда.
2. Вертикальная светлая линия показывает, что евклидово расстояние между обучающими данными и всеми тестовыми данными очень велико и не похоже на все тестовые данные.
Сначала я не запускал код на блокноте Jupyter, а запускал его локально.Если вы встретите следующие две ямы, вы можете обратиться к нему. Если он работает на jupyter, то проблем не возникает.
Яма 1:
python knn.py
Traceback (most recent call last):
File "knn.py", line 5, in <module>
from cs231n.data_utils import load_CIFAR10
File "/Users/cherish/Documents/assignment1/cs231n/data_utils.py", line 7, in <module>
from imageio import imread
ImportError: No module named imageio
Решение: в локальной среде есть как python2.7, так и python3.7, первый соответствует python, а второй соответствует python3. изменить на
python3 knn.py
проблема решена.
Яма 2:
~/Documents/assignment1 » python3 knn.py
Training data shape: (50000, 32, 32, 3)
Training labels shape: (50000,)
Test data shape: (10000, 32, 32, 3)
Test labels shape: (10000,)
[1] 49571 segmentation fault python3 knn.py
Позже внезапно возникла ошибка semgent, и проблема появилась в предложении plt.show() после устранения неполадок. Решение состоит в том, чтобы добавить две строки
import matplotlib as mpl # 这两行在前
mpl.use('TkAgg') # 这两行在前
import matplotlib.pyplot as plt # 这一行在后