Коллега, я также написал себе в избранное через telethon и получил вечный бан! Я пользовался кодом из https://docs.telethon.dev/en/stable/modules/client.html - await client.send_message('me', 'Hello to myself!'). Потом спустя длительное время я создал новый аккаунт по тому же номеру.
В каких терминалах можно курсор устанавливать кликом мыши? Например, пишу одну большую строку для выполнения и хочу поставить курсор в нужное место. Мышкой - один клик, но приходится нажимать на кнопки клавиатуры. Кроме того, можно ли в таком терминале удалить выделенную курсором часть команды?
Почему для всех оптимизаторов используется одинаковый набор learning rates?
Почему в роли метрики качества выбрана accuracy, а не val_accuracy (где выборка валидации — тестовая выборка)?
По поводу первого хочу отметить. Мной были выявлены следующие оптимальные learning rates для некоторых оптимизаторов: — SGD: 0.1; — Adam: 0.001; — AdaBelief: 0.001; — Adadelta: 2.0 (при таком значении занял 1 место среди других); — Adagrad: 0.1; — Adamax: 0.01; — Nadam: 0.001; — RMSprop: 0.001.
По поводу второго тоже хочу отметить. Я использовал tensorflow. К сожалению, там я не нашел функционала для выбора наиболее оптимальных параметров сети (на основе всех эпох) в конце обучения (например, 30 эпох проходит, лучшая — 20, после обучения сохраняется в сети именно она, а не результат 30 эпохи). Поэтому пришлось писать:
свой callback
class MyEarlyStopping(tf.keras.callbacks.Callback):
def __init__(self,
monitor='val_accuracy',
baseline=0.9,
baseline_epochs=1,
restore_best_weights=True):
super(MyEarlyStopping, self).__init__()
self.monitor = monitor
self.baseline = baseline
self.baseline_epochs = baseline_epochs
self.wait = 0
self.stopped_epoch = 0
self.restore_best_weights = restore_best_weights
self.best_weights = None
if 'acc' in self.monitor:
self.monitor_op = np.greater
else:
self.monitor_op = np.less
def on_train_begin(self, logs=None):
self.wait = 0
self.stopped_epoch = 0
self.best = np.Inf if self.monitor_op == np.less else -np.Inf
self.best_weights = None
def on_epoch_end(self, epoch, logs=None):
current = self.get_monitor_value(logs)
if current is None:
return
if self.restore_best_weights and self.best_weights is None:
self.best_weights = self.model.get_weights()
if self._is_improvement(current, self.best):
self.best = current
self.wait = 0
if self.restore_best_weights:
self.best_weights = self.model.get_weights()
if self._is_improvement(current, self.baseline):
self.wait = 0
else:
self.wait += 1
if self.wait >= self.baseline_epochs:
self.stopped_epoch = epoch
self.model.stop_training = True
if self.restore_best_weights and self.best_weights is not None:
self.model.set_weights(self.best_weights)
def on_train_end(self, logs=None):
if self.restore_best_weights and self.best_weights is not None:
self.model.set_weights(self.best_weights)
def get_monitor_value(self, logs):
logs = logs or {}
monitor_value = logs.get(self.monitor)
if monitor_value is None:
logging.warning('Early stopping conditioned on metric `%s` '
'which is not available. Available metrics are: %s',
self.monitor, ','.join(list(logs.keys())))
return monitor_value
def _is_improvement(self, monitor_value, reference_value):
return self.monitor_op(monitor_value, reference_value)
Продолжить изучение Machine Learning и Data Science вы сможете на наших курсах.
Вводных статей по теме нейронных сетей куча. В том числе с использованием только numpy. Ваша статья (хоть и является переводом) отличается сравнительно малым количеством информации.
Хорошая реклама курса — это не когда вы переводите какую-нибудь главу из книги по нейронным сетям (что может сделать почти любой тех. специалист), а когда вы сами на основе своего опыта можете сделать что-то гораздо большее, чем обучить персептрон на XOR. В статье вы показали только то, что можете перевести главу из книги.
Здесь я не прав по поводу сети «попроще». Точность от 99.10 до 99.19% на ней достигается при использовании extra training data. Если говорить о стандартном MNIST, то для точности 99% и выше на тестовой выборке следует использовать сверточную нейронную сеть. Например, следующую:
15 эпох, около 5 минут, точность на обучающей 99.08%, точность на тестовой 99.41%. Если подождать ещё 15 эпох (5 минут), то результаты ещё лучше — точность на обучающей 99.57%, точность на тестовой 99.52%. Результаты нейронной сети, предложенной автором, немного хуже (в плане обобщения) — точность на обучающей 99.69% и точность на тестовой ~99.21% (30 эпох).
Из классики на русском — «Фундаментальные алгоритмы на C++. Часть 5. Алгоритмы на графах» Роберта Седжвика и «Совершенный алгоритм. Графовые алгоритмы и структуры данных» Тима Рафгардена.
На английском можно найти больше книг. Можно посмотреть в сторону Amazon (в поиске есть фильтры, в том числе фильтр по целевой аудитории + отзывы развернутые). Там нужно именно выбирать книги по отзывам, а скачивать — на Libgen или на Z-Library.
1. По поводу чисел в графах — они маленькие, а расстояния между вершинами большие. Возможно, у вас какая-то программа генерирует эти изображения. Рекомендую для статей использовать draw.io (там можно и перемещать объекты, и менять размер шрифта и др.).
2. «Но есть еще два способа как можно задавать граф, а точнее представлять его». Если можно написать точнее, то пишите без лишних слов.
3. Неправильные определения плотного и разреженного графов: «... плотных графов в которых количество ребер (E) примерно равно количеству вершин (V)» и «... разреженных графов, то есть графов где количество ребер меньше количества вершин». Откуда прямая связь с числом вершин? Плотный граф — граф, в котором число ребер близко к максимально возможному числу ребер (у полного графа) (см. определение из NIST). Разреженный граф — граф, в котором число ребер намного меньше максимально возможного числа ребер (у полного графа) (см. определение из NIST).
4. Множество орфографических, грамматических и логических ошибок.
Наиболее выделяющиеся ошибки
«Здесь отсутствует дублирование между вершинами, так как если вершина 1 соединена с вершиной 2, наоборот соединена она не может быть, так у нас есть направление у ребра». Конструкция «если ..., то» частично отсутствует.
«В вершину 1 ничего не входит, значит матрица верна». Это не вывод, вы же заранее составляете матрицу, а не доказываете её правильность.
«в нашем случаи». Должно быть «в <?> случае».
5. Перевёрнутую А не используют для обозначения матрицы. Матрицу обозначают буквой M (английской; от слова Matrix), иначе грош цена вашим обозначениям, когда они ни одному учебнику и ни одному стандарту не соответствуют.
Остальное не проверял — потерял интерес.
Теория графов хорошо проработана во многих учебниках. Не совсем понимаю, в чем смысл таких чисто теоретических статей, причем с ошибками. Желательно делать одну статью с краткой теорией и большей по объему практикой.
Upd. Также непонятно, что делает эта статья в хабах «Сетевые технологии», «Машинное обучение» и «Искусственный интеллект».
Точности модели достаточно для примера (~99 % в наборе валидации).
Конечно, можно добиться гораздо лучшего результата.
Здесь можно посмотреть примеры архитектур и их результат на MNIST.
Кроме того, можно ради интереса попробовать сеть попроще: Dropout(0.4), Dense(250, linear), Relu(), Dense(250, linear), Relu(), Dense(10, linear) с оптимизатором Adadelta(lr=5), инициализацией параметров xavier normal normalized и batch_size=500 (у меня получается после 500 эпох лучший результат со 100% точностью на обучающей и от 99.10 до 99.19% точностью на тестовой выборках; обучение не более 15 минут).
Единственный вопрос — зачем? Цель всегда должна быть в любой статье. Иначе получаем «статья для статьи».
Вы пишете, что это некая «игрушка». Но я могу смотреть на это только как на placeholder text generator (генератор бессмысленного текста-заполнителя по типу lorem ipsum). Других применений не вижу.
Да, важную деталь я упустил. MNIST содержит 13 ошибочно размеченных ТЕСТОВЫХ образцов. 99,87 — максимально возможная точность. И ровно этой точности достиг «Branching/Merging CNN + Homogeneous Vector Capsules» в 2020 году. Лучше быть не может, как я понял.
на игрушечной задаче по распознаванию цифр из датасета MNIST
В чем заключается «игрушечность»?
Судя по результатам классификации, на тестовой выборке 100% точности никто не достиг. В целом, оно и не сильно требуется — часть ошибочно распознанных образцов сам человек распознает с трудом.
До сих пор учёные пишут статьи, где демонстрируют работу своих нейронных сетей в том числе и на MNIST.
Также в идеале было бы неплохо представить тестирующий код.
Значения в столбце «Время вычисления» выглядят странно. Это среднее? Или просто один запуск? В идеале нужно приводить доверительный интервал для среднего на основе нескольких запусков (можно попробовать хотя бы 10 запусков).
1. В коде у вас встречается знак «—». Это знак тире. Ожидалось: «-» (дефис, который играет роль минуса). В частности здесь:
p — ;
2. Также обратите внимание на лишние пробелы. В частности здесь:
return — 1;
3. Не хватает:
— Асимптотика (по времени и памяти; для случаев с использованием таблицы смещений, таблицы суффиксов);
— Достоинства и недостатки алгоритма и его эвристик (когда эффективна та или иная эвристика по отдельности, а когда эффективны обе и почему);
— Анализ влияния используемого алфавита, числа символов в строке, числа символов в подстроке на время выполнения (также сравнение с линейным поиском в этом же смысле) — это, скорее всего, на пятерку с плюсом.
4. Название статьи нужно сделать конкретнее. Например, «Алгоритм поиска строки Бойера — Мура».
1. «Какие ограничения это накладывает на применение критерия?»
Все ограничения связаны по большей части с необратимостью матрицы ковариаций.
Многое зависит от цели исследования. Все ограничения не описать в одном сообщении.
Можно привести одно ограничение, которое не было рассмотрено в статье — при расчете расстояния Махаланобиса между двумя классами по принципу центроида можно натолкнуться на редкий случай, когда два класса не совпадают, но имеют одинаковые центроиды (по сути один класс окружен другим), и расстояние, соответственно, равно 0 (опять же, по принципу центроида). Это ограничение устраняет расстояние Бхаттачарьи.
Вкратце — все зависит от ситуации.
2. «Является ли сферичность множества следствием нормальности распределения?»
Вопрос: «Если точки нормально распределены, описывают ли они сферообразное множество?».
Ответ: в общем случае — нет (оно и понятно, сфера — частный случай).
А эллипс в общем случае? Вряд ли. Существует т. н. эллиптическое распределение, которое обобщает многомерное нормальное распределение.
Вопрос: «Если точки описывают сферообразное множество, то они нормально распределены?»
Ответ: да, многомерно нормально распределены.
Расстояние Махаланобиса в общем случае описывает эллипс. Сделал исправление в статье:
«расстояние Махаланобиса предполагает, что точки множества эллипсоидально (частный случай — сферически) распределены вокруг центра масс».
3. «В каких умозрительных примерах критерий может адекватно применяться?»
В приведенных вами примерах теоретически может применяться (практически — нужно проверять).
Я видел следующие применения (статьи с картинками):
— в многоклассовой классификации изображений дистанционного зондирования (статья);
— в кластеризации объектов, изображенных на космических снимках (статья).
Коллега, я также написал себе в избранное через telethon и получил вечный бан! Я пользовался кодом из https://docs.telethon.dev/en/stable/modules/client.html -
await client.send_message('me', 'Hello to myself!')
. Потом спустя длительное время я создал новый аккаунт по тому же номеру.В каких терминалах можно курсор устанавливать кликом мыши?
Например, пишу одну большую строку для выполнения и хочу поставить курсор в нужное место. Мышкой - один клик, но приходится нажимать на кнопки клавиатуры.
Кроме того, можно ли в таком терминале удалить выделенную курсором часть команды?
Почему для всех оптимизаторов используется одинаковый набор learning rates?
Почему в роли метрики качества выбрана accuracy, а не val_accuracy (где выборка валидации — тестовая выборка)?
По поводу первого хочу отметить. Мной были выявлены следующие оптимальные learning rates для некоторых оптимизаторов:
— SGD: 0.1;
— Adam: 0.001;
— AdaBelief: 0.001;
— Adadelta: 2.0 (при таком значении занял 1 место среди других);
— Adagrad: 0.1;
— Adamax: 0.01;
— Nadam: 0.001;
— RMSprop: 0.001.
По поводу второго тоже хочу отметить. Я использовал tensorflow. К сожалению, там я не нашел функционала для выбора наиболее оптимальных параметров сети (на основе всех эпох) в конце обучения (например, 30 эпох проходит, лучшая — 20, после обучения сохраняется в сети именно она, а не результат 30 эпохи). Поэтому пришлось писать:
свой callback
Вводных статей по теме нейронных сетей куча. В том числе с использованием только
numpy
. Ваша статья (хоть и является переводом) отличается сравнительно малым количеством информации.Хорошая реклама курса — это не когда вы переводите какую-нибудь главу из книги по нейронным сетям (что может сделать почти любой тех. специалист), а когда вы сами на основе своего опыта можете сделать что-то гораздо большее, чем обучить персептрон на XOR. В статье вы показали только то, что можете перевести главу из книги.
Здесь я не прав по поводу сети «попроще».
Точность от 99.10 до 99.19% на ней достигается при использовании extra training data.
Если говорить о стандартном MNIST, то для точности 99% и выше на тестовой выборке следует использовать сверточную нейронную сеть. Например, следующую:
Описание нейронной сети
15 эпох, около 5 минут, точность на обучающей 99.08%, точность на тестовой 99.41%.
Если подождать ещё 15 эпох (5 минут), то результаты ещё лучше — точность на обучающей 99.57%, точность на тестовой 99.52%.
Результаты нейронной сети, предложенной автором, немного хуже (в плане обобщения) — точность на обучающей 99.69% и точность на тестовой ~99.21% (30 эпох).
Из классики на русском — «Фундаментальные алгоритмы на C++. Часть 5. Алгоритмы на графах» Роберта Седжвика и «Совершенный алгоритм. Графовые алгоритмы и структуры данных» Тима Рафгардена.
На английском можно найти больше книг. Можно посмотреть в сторону Amazon (в поиске есть фильтры, в том числе фильтр по целевой аудитории + отзывы развернутые). Там нужно именно выбирать книги по отзывам, а скачивать — на Libgen или на Z-Library.
1. По поводу чисел в графах — они маленькие, а расстояния между вершинами большие. Возможно, у вас какая-то программа генерирует эти изображения. Рекомендую для статей использовать draw.io (там можно и перемещать объекты, и менять размер шрифта и др.).
2. «Но есть еще два способа как можно задавать граф, а точнее представлять его». Если можно написать точнее, то пишите без лишних слов.
3. Неправильные определения плотного и разреженного графов: «... плотных графов в которых количество ребер (E) примерно равно количеству вершин (V)» и «... разреженных графов, то есть графов где количество ребер меньше количества вершин». Откуда прямая связь с числом вершин? Плотный граф — граф, в котором число ребер близко к максимально возможному числу ребер (у полного графа) (см. определение из NIST). Разреженный граф — граф, в котором число ребер намного меньше максимально возможного числа ребер (у полного графа) (см. определение из NIST).
4. Множество орфографических, грамматических и логических ошибок.
Наиболее выделяющиеся ошибки
«Здесь отсутствует дублирование между вершинами, так как если вершина 1 соединена с вершиной 2, наоборот соединена она не может быть, так у нас есть направление у ребра». Конструкция «если ..., то» частично отсутствует.
«В вершину 1 ничего не входит, значит матрица верна». Это не вывод, вы же заранее составляете матрицу, а не доказываете её правильность.
«в нашем случаи». Должно быть «в <?> случае».
5. Перевёрнутую А не используют для обозначения матрицы. Матрицу обозначают буквой M (английской; от слова Matrix), иначе грош цена вашим обозначениям, когда они ни одному учебнику и ни одному стандарту не соответствуют.
Остальное не проверял — потерял интерес.
Теория графов хорошо проработана во многих учебниках. Не совсем понимаю, в чем смысл таких чисто теоретических статей, причем с ошибками. Желательно делать одну статью с краткой теорией и большей по объему практикой.
Upd. Также непонятно, что делает эта статья в хабах «Сетевые технологии», «Машинное обучение» и «Искусственный интеллект».
Это правда. Однако есть более очевидные ошибки, например, в почти идеальных случаях с цифрами 5 и 6:
Screenshot
Думаю, можно опустить этот вопрос, т.к. статья носит больше демонстративный характер.
Конечно, можно добиться гораздо лучшего результата.
Здесь можно посмотреть примеры архитектур и их результат на MNIST.
Кроме того, можно ради интереса попробовать сеть попроще: Dropout(0.4), Dense(250, linear), Relu(), Dense(250, linear), Relu(), Dense(10, linear) с оптимизатором Adadelta(lr=5), инициализацией параметров xavier normal normalized и batch_size=500 (у меня получается после 500 эпох лучший результат со 100% точностью на обучающей и от 99.10 до 99.19% точностью на тестовой выборках; обучение не более 15 минут).
Единственный вопрос — зачем? Цель всегда должна быть в любой статье. Иначе получаем «статья для статьи».
Вы пишете, что это некая «игрушка». Но я могу смотреть на это только как на placeholder text generator (генератор бессмысленного текста-заполнителя по типу lorem ipsum). Других применений не вижу.
Да, важную деталь я упустил. MNIST содержит 13 ошибочно размеченных ТЕСТОВЫХ образцов. 99,87 — максимально возможная точность. И ровно этой точности достиг «Branching/Merging CNN + Homogeneous Vector Capsules» в 2020 году. Лучше быть не может, как я понял.
В чем заключается «игрушечность»?
Судя по результатам классификации, на тестовой выборке 100% точности никто не достиг. В целом, оно и не сильно требуется — часть ошибочно распознанных образцов сам человек распознает с трудом.
До сих пор учёные пишут статьи, где демонстрируют работу своих нейронных сетей в том числе и на MNIST.
Также в идеале было бы неплохо представить тестирующий код.
В целом, статья полезная.
Значения в столбце «Время вычисления» выглядят странно. Это среднее? Или просто один запуск? В идеале нужно приводить доверительный интервал для среднего на основе нескольких запусков (можно попробовать хотя бы 10 запусков).
2. Также обратите внимание на лишние пробелы. В частности здесь:
3. Не хватает:
— Асимптотика (по времени и памяти; для случаев с использованием таблицы смещений, таблицы суффиксов);
— Достоинства и недостатки алгоритма и его эвристик (когда эффективна та или иная эвристика по отдельности, а когда эффективны обе и почему);
— Анализ влияния используемого алфавита, числа символов в строке, числа символов в подстроке на время выполнения (также сравнение с линейным поиском в этом же смысле) — это, скорее всего, на пятерку с плюсом.
4. Название статьи нужно сделать конкретнее. Например, «Алгоритм поиска строки Бойера — Мура».
Все ограничения связаны по большей части с необратимостью матрицы ковариаций.
Многое зависит от цели исследования. Все ограничения не описать в одном сообщении.
Можно привести одно ограничение, которое не было рассмотрено в статье — при расчете расстояния Махаланобиса между двумя классами по принципу центроида можно натолкнуться на редкий случай, когда два класса не совпадают, но имеют одинаковые центроиды (по сути один класс окружен другим), и расстояние, соответственно, равно 0 (опять же, по принципу центроида). Это ограничение устраняет расстояние Бхаттачарьи.
Вкратце — все зависит от ситуации.
2. «Является ли сферичность множества следствием нормальности распределения?»
Вопрос: «Если точки нормально распределены, описывают ли они сферообразное множество?».
Ответ: в общем случае — нет (оно и понятно, сфера — частный случай).
А эллипс в общем случае? Вряд ли. Существует т. н. эллиптическое распределение, которое обобщает многомерное нормальное распределение.
Вопрос: «Если точки описывают сферообразное множество, то они нормально распределены?»
Ответ: да, многомерно нормально распределены.
Расстояние Махаланобиса в общем случае описывает эллипс. Сделал исправление в статье:
«расстояние Махаланобиса предполагает, что точки множества эллипсоидально (частный случай — сферически) распределены вокруг центра масс».
3. «В каких умозрительных примерах критерий может адекватно применяться?»
В приведенных вами примерах теоретически может применяться (практически — нужно проверять).
Я видел следующие применения (статьи с картинками):
— в многоклассовой классификации изображений дистанционного зондирования (статья);
— в кластеризации объектов, изображенных на космических снимках (статья).