Обучаем модель со слоями Emedding и Dense в TensorFlow
После того как мы подготовили данные, можем обучить модель машинного обучения. Для этого будет использовать слой Embedding – векторное представление слова, о котором также шла речь тут. В его основе лежит векторизация каждого слова, в нашем случае их 10000 (max_words). Слой Embedding инициализирует веса случайным образом, которые постепенно корректируются с помощью алгоритма обратного распространения ошибки. Вот так может выглядеть 4-мерный Embedding для слов:
Векторное представление слов в Embedding
Слой Embedding принимает в качестве аргументов следующие параметры:
- — размер словаря. В нашем случае мы ограничились 10000.
- — размерность выходной матрицы Embedding. Например, на изображение выше — это 4. Выбирается этот параметр эмпирическим путем: в зависимости от точности модели его можно уменьшать или увеличивать.
- — размерность входного слоя. В нашем случае это 50, так как мы преобразовали отзывы в вектор с 50-ю элементами ().
Архитектура модели простая:
- слой Flatten, который выпрямляет слой Embdedding;
- всего один выходной нейрон с функцией активацией , который выводит вероятность принадлежности к классу 1 (позитивный отзыв) или 0 (негативный отзыв).
Это реализуется следующим кодом на Python:
from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Embedding, Flatten model = Sequential() model.add(Embedding( input_dim=max_words, output_dim=4, input_length=maxlen)) model.add(Flatten()) model.add(Dense(1, activation='sigmoid'))
Чтобы посмотреть гиперпараметры архитектуры, можно вызвать метод :
>>> model.summary() Model: "sequential_3" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= embedding_2 (Embedding) (None, 50, 4) 40000 _________________________________________________________________ flatten_2 (Flatten) (None, 200) 0 _________________________________________________________________ dense_2 (Dense) (None, 1) 201 ================================================================= Total params: 40,201 Trainable params: 40,201 Non-trainable params: 0
Теперь можем обучить модель. Выберем adam в качестве оптимизатора, функцию потерь и будем обучать на 15 эпохах:
model.compile( optimizer='adam', loss='binary_crossentropy', metrics=) history = model.fit( x_train, y_train, epochs=15, batch_size=128, validation_split=0.1)
Модель показала точность 96 % на тренировочном наборе данных и 80 % на валидационном. Это говорит о переобучении. С этим можно бороться, построив более сложную архитектуру или выбрав другую размерность матрицы Embedding.
Кроме того, можно получить вектор для какого-либо слова. У атрибута модели есть метод , который возвращает список матриц Embedding. Все что требуется, это узнать индекс слова. Для этого воспользуемся словарем с индексами . Посмотрим на вектор для слова bad:
>>> word_index = imdb.get_word_index() ... >>> word = 'bad' >>> word_number = word_index >>> word_vector = embedding_matrix ... >>> word, word_number, word_vector ('bad', 75, array(, dtype=float32))
Как видим, слово bad имеет индекс 75, а его подкорректированный в результате обучения вектор состоит из 4-х элементов.
Смотреть расписание
Записаться на курс
Источники
- https://www.youtube.com/watch?v=ahFiZnpi2Tk
Параметры steps_per_epoch и validation_steps
Если
мы хотим, чтобы обучающие данные от эпохи к эпохе не сбрасывались, а
последовательно проходили по мини-батчам от начала до конца, то для этого можно
воспользоваться параметром
steps_per_epoch
который
устанавливает число батчей на эпоху, например, так:
model.fit(train_dataset, epochs=5, steps_per_epoch = 100, validation_data=val_dataset)
Но,
при слишком большом значении steps_per_epoch, например, 300
пакетов будет недостаточно для пяти эпох и Keras сгенерирует
предупреждение с остановом процесса обучения.
Как
правило, обучение запускают без этого параметра, но если вдруг потребуется
более тонкая настройка для исследования процесса обучения, то полезно знать
возможности метода fit().
Второй
похожий параметр validation_steps задает число
мини-батчей, используемых в проверочной выборке. Например, указав число пять:
model.fit(train_dataset, epochs=5, validation_data=val_dataset, validation_steps=5)
в
конце каждой эпохи будет использовано пять мини-батчей из выборки валидации для
оценки качества работы модели на текущем этапе обучения.
❖ Как исправить ошибку: «Nonetype» объект не имеет атрибута «Группа»?
Так как мы уже обсудили причины получения Ошибка атрибута и способы решения таких ошибок, давайте посмотрим на очень задаваемый вопрос на основе нашего предыдущего обсуждения.
AttributeError: объект «NONETYPE» не имеет атрибута «Группа»
Пример:
import re # Search for an upper case "S" character in the beginning of a word, and print the word: txt = "The rain in Spain" for i in txt.split(): x = re.match(r"\bS\w+", i) print(x.group())
Выход:
Traceback (most recent call last): File "D:/PycharmProjects/Errors/attribute_error.py", line 9, in print(x.group()) AttributeError: 'NoneType' object has no attribute 'group'
Причина:
Код встречает ошибку атрибута, потому что в первой итерации он не может найти совпадение, поэтому Возвращает Отказ Следовательно, когда мы пытаемся использовать атрибут для Объект возвращает ошибку атрибута.
Решение:
Пренебрежение для ситуации, где Возвращает И, таким образом, не соответствует регелесу. Поэтому используйте Блок такой, что ошибка атрибута обрабатывается за исключением блока. Следующий код будет дальше уточнить вещи:
import re txt = "The rain in Spain" for i in txt.split(): x = re.match(r"\bS\w+", i) try: print(x.group()) except AttributeError: continue
Выход:
Spain
Примечание: Приведенный выше пример сделки с Regex Отказ Вы хотите освоить сверхдержаву Regeex? Проверьте нашу книгу Самый умный способ изучать регулярные выражения в Python С инновационным 3-ступенчатым подходом для активного обучения: (1) Изучение книги главы, (2) Решите головоломки кода и (3) Смотреть воспроизведение главы видео.
Решение 3. Попробуйте запустить приложение в режиме совместимости
Список индексов за пределами границ может иногда появляться, если приложение, которое вы пытаетесь запустить, не полностью совместимо с Windows 10. Это может случиться со старыми приложениями, но вы можете решить проблему, просто запустив его в режиме совместимости.,
Если вы не знаете, режим совместимости — это специальная функция, которая позволяет запускать старые приложения в Windows 10, и вы можете активировать режим совместимости, выполнив следующие действия:
-
Щелкните правой кнопкой мыши приложение, которое отправляет вам это сообщение, и выберите « Свойства» в меню.
- Перейдите на вкладку « Совместимость » и установите флажок « Запустить эту программу в режиме совместимости» . Теперь выберите более старую версию Windows. Нажмите Apply и OK, чтобы сохранить изменения.
По мнению пользователей, использование режима совместимости может решить эту проблему для вас, но вам, возможно, придется экспериментировать с другими настройками, пока не найдете тот, который подходит именно вам.
Задача
Вместо чего-то типа sklearn.neighbors.KNeighborsClassifier нам предлагается в classifiers/k_nearest_neighbor.py самостоятельно написать три функции:
- compute_distances_no_loops()
- compute_distances_one_loop()
- compute_distances_two_loops()
Зачем такое разнообразие? Авторы курса хотят продемонстрировать множество разных подходов и их влияние на сложность вычислений. Окей. Первую функцию, которую необходимо реализовать — это compute_distances_two_loops(). Тут идея в следующем: мы пишем два цикла, один вложен в другой. Во внешнем цикле мы обходим тренировочный сет на глубину тестового сета, во внутреннем на глубину тренировочного. Считаем дистанцию между тренировочными изображениями и искомым.
Обратите внимание, что в задаче требуют посчитать не L1 distance, а L2 distance. В лекции об этом подробно рассказывается
О чем идет речь? L2 distance — это геометрическая интерпретация евклидового расстояния между двумя векторами. Более простым языком:
L2 более строго оценивает расстояние между двумя векторами. Почему это так в курсе объясняется позже, я соответственно тоже разберу этот аспект в других статьях.
Далее, построив функцию в два цикла, строим compute_distances_one_loop(). Она ничем не отличается от функции в два цикла. Разница лишь в том, что мы обходим в один цикл на глубину тестового сета, примерно вот так:
Вы уже наверное догадались, что авторы курса постепенно приучают вас писать функции, которые потребляют меньше памяти. Пишем compute_distances_no_loops(). Для нее необходимо посчитать дистанцию без циклов, используя инструменты numpy. Чтобы решить эту задачу, надо знать, как расписать формулу L2 дистанции, и немного покрутить с размерностью массивов Можно как-то так:
Всё, осталось добавить в наш k_nearest_neighbor.py функцию predict_labels. Для этого надо проитерировать по всей тестовой выборке и вернуть индексы ближайшего \(k\)-го соседа \(i\)-го изображения. В комментарии к задаче прямо пишут как это сделать (Hint: Look up the function numpy.argsort). Предсказываем метку, а затем возвращаем количество успешных предсказаний для каждой метки.
Запускаем ячейки, смотрим визуализации и через import time считаем время исполнения функций. Oneloop должен получиться где-то примерно в два раза дольше twoloop и в 100 раз хуже, чем noloop.
Про валидацию в задаче вопросов нет, зато есть про кроссвалидацию. Авторы курса объясняют этот метод следующим образом: вместо того, что бы проходить валидацию по одному сету, можно сделать несколько, пройти по ним, а затем усреднить результат. Это долго, зато менее шумно. Ок.
Что надо сделать? В knn.ipynb необходимо разделить тренировочный сет на 5 сабсетов. Затем нужно прогнать по каждому сабсету наш алгоритм.
Мы будем прогонять цикл j раз (в задаче num_folds = 5) для каждого значения k из списка (в задаче k_choices = ) (1). Построим тестовые и валидационные сабсеты (2), применим к ним наш самописный knn-классификатор (я обращался к самому быстрому classifier.compute_distances_no_loops()) (3), получим метки, посчитаем количество правильных (4) и вернем список по всему сету (5).
Дальше получаем вот такой график:
Вот и вся задача. Делаем вывод, что у нас k = 10 — зебест, выпиваем бокал шампанского и надуваем шарики.
Какой вывод делают авторы курса? KNN медленный, он перебирает весь сет попиксельно. В случае с изображениями данные многоразмерные и обработка алгоритма затратна. К тому же расстояния основанные на пикселях, не справляются с поврежденными изображениями. Поэтому переходим к следующим задачам курса
Некоторые распространенные ошибки, которые приводят к ошибке атрибута в python
Если мы попытаемся выполнить append() для любого типа данных, отличного от List:
Иногда, когда мы хотим объединить две строки, мы пытаемся добавить одну строку в другую, что невозможно, и мы получаем ошибку атрибута.
Выход-
AttributeError: 'str' object has no attribute 'append'
То же самое относится и к кортежам,
((5,6))>
Выход-
AttributeError: 'tuple' object has no attribute 'append'
Попытка доступа к атрибуту класса:
Иногда мы пытаемся получить доступ к атрибутам класса, которыми он не обладает. Давайте лучше разберемся в этом на примере.
Здесь у нас есть два класса — один-класс человека, а другой — класс транспортного средства. Оба обладают разными свойствами.
class Person: def __init__(self,age,gender,name): def speak(self): print("Hello!! How are you?") class Vehicle: def __init__(self , model_type , engine_type): def horn(self): print("beep!! beep") (20,"male","ashwini") print(ashwini.gender) print(ashwini.engine_type)
Выход-
male AttributeError: 'Person' object has no attribute 'engine_type'
print(ashwini.horn())
AttributeError: 'Person' object has no attribute 'horn'
(>
Выход-
Petrol AttributeError: 'Vehicle' object has no attribute 'gender'
print(car.speak())
Error- AttributeError: 'Vehicle' object has no attribute 'speak'
В приведенных выше примерах, когда мы попытались получить доступ к свойству пола класса Person, нам это удалось. Но когда мы попытались получить доступ к атрибуту engine_type (), он показал нам ошибку. Это происходит потому, что у человека нет атрибута под названием engine_type. Точно так же, когда мы попытались вызвать engine_type на транспортном средстве, мы добились успеха, но это было не в случае пола, так как Транспортное средство не имеет атрибута, называемого полом.
AttributeError: ‘NoneType’
Мы получаем ошибку NoneType, когда получаем «None» вместо экземпляра, который, как мы предполагаем, мы получим. Это означает, что задание провалилось или вернуло неожиданный результат.
Выход-
AttributeError: 'NoneType' object has no attribute 'upper'
При работе с модулями:
Очень часто при работе с модулями возникает ошибка атрибута. Предположим, мы импортируем модуль с именем hello и пытаемся получить доступ к двум функциям в нем. Один из них-print_name (), а другой-print_age().
Модуль Привет-
def print_name(): print("Hello! The name of this module is module1") import hello hello.print_name() hello.print_age()
Выход-
Hello! The name of this module is module1 AttributeError: module 'hello' has no attribute 'print_age'
Поскольку модуль hello не содержит атрибута print_age, мы получили атрибут Attributeerror. В следующем разделе мы узнаем, как устранить эту ошибку.
Quota
Теперь нам надо установить квоты для юзверей на дисковое пространство. Ставим пакет quota:
sudo apt-get install quota
Редактируем файл /etc/fstab, добавляем «usrquota» в раздел, на который устанавливаем ограничение для пользователей:
sudo nano /etc/fstab
UUID=04b5c25b-a82c-4bc7-8dad-2ccb9cfe7be6 / ext4 noatime,relatime,usrquota,user_xattr,errors=remount-ro 0
Перемонтируем:
sudo mount -o remount /
или перезагружаемся.
По умолчанию файлы квот хранятся в корневом каталоге файловой системы в файлах с именами aquota.user и aquota.group соответственно для пользовательских и групповых квот.
Этой командой создадим файлы:
quotacheck /
Если будет ругаться — пробуем запускать с ключем -m или -f .
sudo edquota -u petrov_ia
после этой команды откроется текстовый редактор, в которым указываем ограничения и сохраняем. Вы можете ограничивать размещение ресурсов на основе объема дискового пространства (квотирование блоков), количества файлов (квотирование inode) или их комбинации. Каждое из этих ограничений, в свою очередь, делится на две категории: мягкие (soft) и жёсткие (hard) ограничения. Жёсткое ограничение не может быть превышено. мягкие ограничения могут быть превышены в течении некоторого периода времени. Если пользователь превышает своё мягкое ограничение в течение периода времени, превышающего отсрочку, то это мягкое ограничение становится жестким и последующее выделение ресурсов будет запрещено.
Например поставим ограничения: по объему – 1000 Мбайт, по количеству – 1000 файлов. Добавляя 10% запаса на жесткие пределы:
Disk quotas for user petrov_ia (uid 1005):
Filesystem blocks soft hard inodes soft hard
/dev/loop0 7 1024000 1126400 4 1000 1100
Размер указывается не в КБ, это число блоков. Но у меня в файловой системе один блок — 1024Б, поэтому в данном примере 1 блок = 1 КБ.
Параметры blocks и inodes изменять бессмысленно, они ставятся автоматически.
Параметр «grace period» позволяет вам установить время, прежде чем значение soft limit будет приведено в жизнь на файловой системе с включенными квотами:
sudo edquota -t
По умолчанию:
Grace period before enforcing soft limits for users:
Time units may be: days, hours, minutes, or seconds
Filesystem Block grace period Inode grace period
/dev/loop0 7days 7days
Проверяем установленные квоты:
sudo repquota /
Иногда желательно установить ограничения квот на некоторый диапазон UID (идентификаторов пользователей). Это можно сделать при помощи параметра -p в команде edquota. Во-первых, установите желаемое ограничение для пользователя, а затем запустите команду edquota -p protouser startuid-enduid. Например, если пользователь test имеет желаемые ограничения, то для дублирования этих ограничений на пользователей с UID от 10000 до 19999 может быть использована такая команда:
sudo edquota -p test 10000-19999
Или для списка пользователей:
sudo edquota -p test test1 test2 test3 …
Для квотирования групп пользователей (в моем примере это не используется, так, для справки) в /etc/fstab добавляем grpquota, туда же, куда и usrquota, создаем файл:
quotacheck
Добавляем квоты:
sudo edquota -g smbusers
И далее аналогично установкам квот на пользователя.
Куда пойти отсюда?
Достаточно теории, давайте познакомимся!
Чтобы стать успешным в кодировке, вам нужно выйти туда и решать реальные проблемы для реальных людей. Вот как вы можете легко стать шестифункциональным тренером. И вот как вы польские навыки, которые вам действительно нужны на практике. В конце концов, что такое использование теории обучения, что никто никогда не нуждается?
Практические проекты – это то, как вы обостряете вашу пилу в кодировке!
Вы хотите стать мастером кода, сосредоточившись на практических кодовых проектах, которые фактически зарабатывают вам деньги и решают проблемы для людей?
Затем станьте питоном независимым разработчиком! Это лучший способ приближения к задаче улучшения ваших навыков Python – даже если вы являетесь полным новичком.
Присоединяйтесь к моему бесплатным вебинаре «Как создать свой навык высокого дохода Python» и посмотреть, как я вырос на моем кодированном бизнесе в Интернете и как вы можете, слишком от комфорта вашего собственного дома.
Присоединяйтесь к свободному вебинару сейчас!
Я профессиональный Python Blogger и Content Creator. Я опубликовал многочисленные статьи и создал курсы в течение определенного периода времени. В настоящее время я работаю полный рабочий день, и у меня есть опыт в областях, таких как Python, AWS, DevOps и Networking.
Вы можете связаться со мной @:
- Заработка
- Linkedin.
6.3.5. Дискретность
Дискретизация (также известная как квантование или биннинг) обеспечивает способ разделения непрерывных функций на дискретные значения. Определенные наборы данных с непрерывными объектами могут выиграть от дискретизации, потому что дискретизация может преобразовать набор данных с непрерывными атрибутами в набор только с номинальными атрибутами.
Дискретизированные признаки, закодированные одним горячим способом (One-hot encoded), могут сделать модель более выразительной, сохраняя при этом интерпретируемость. Например, предварительная обработка с помощью дискретизатора может внести нелинейность в линейные модели.
6.3.5.1. Дискретизация K-бинов
дискретизирует функции в бункеры:
>>> X = np.array(, ... , ... ]) >>> est = preprocessing.KBinsDiscretizer(n_bins=, encode='ordinal').fit(X)
По умолчанию выходные данные быстро кодируются в разреженную матрицу (см. ), и это можно настроить с помощью параметра. Для каждого объекта границы интервалов вычисляются во время и вместе с количеством интервалов они определяют интервалы. Следовательно, для текущего примера эти интервалы определены как:
- особенность 1: ${[-\infty, -1), [-1, 2), [2, \infty)}$
- особенность 2: ${[-\infty, 5), [5, \infty)}$
- особенность 3: ${[-\infty, 14), [14, \infty)}$
На основе этих интервалов бинов преобразуется следующим образом:
>>> est.transform(X) array(, , ])
Результирующий набор данных содержит порядковые атрибуты, которые в дальнейшем можно использовать в файле .
Дискретизация аналогична построению гистограмм для непрерывных данных. Однако гистограммы фокусируются на подсчете объектов, которые попадают в определенные интервалы, тогда как дискретизация фокусируется на присвоении значений признаков этим интервалам.
реализует различные стратегии биннинга, которые можно выбрать с помощью параметра. «Равномерная» стратегия использует ячейки постоянной ширины. Стратегия «квантилей» использует значения квантилей, чтобы иметь одинаково заполненные ячейки в каждой функции. Стратегия «k-средних» определяет интервалы на основе процедуры кластеризации k-средних, выполняемой для каждой функции независимо.
Имейте в виду, что можно указать настраиваемые интервалы, передав вызываемый объект, определяющий стратегию дискретизации . Например, мы можем использовать функцию Pandas :
>>> import pandas as pd >>> import numpy as np >>> bins = >>> labels = >>> transformer = preprocessing.FunctionTransformer( ... pd.cut, kw_args={'bins': bins, 'labels': labels, 'retbins': False} ... ) >>> X = np.array() >>> transformer.fit_transform(X) Categories (5, object):
Примеры:
- Использование KBinsDiscretizer для дискретизации непрерывных объектов
- Дискретизация функций
- Демонстрация различных стратегий KBinsDiscretizer
6.3.5.2. Бинаризация функций
Бинаризация функций — это процесс определения пороговых значений числовых функций для получения логических значений . Это может быть полезно для последующих вероятностных оценок, которые предполагают, что входные данные распределены согласно многомерному распределению Бернулли . Например, это касается .
В сообществе обработки текста также распространено использование двоичных значений признаков (вероятно, для упрощения вероятностных рассуждений), даже если нормализованные подсчеты (также известные как частоты терминов) или функции, оцениваемые по TF-IDF, часто работают немного лучше на практике.
Что касается класса утилиты, он предназначен для использования на ранних этапах . Метод не делает ничего , поскольку каждый образец обрабатывают независимо от других:
>>> X = , ... , ... ] >>> binarizer = preprocessing.Binarizer().fit(X) # fit does nothing >>> binarizer Binarizer() >>> binarizer.transform(X) array(, , ])
Есть возможность настроить порог бинаризатора:
>>> binarizer = preprocessing.Binarizer(threshold=1.1) >>> binarizer.transform(X) array(, , ])
Что касается класса, модуль предварительной обработки предоставляет вспомогательную функцию, которая будет использоваться, когда API-интерфейс преобразователя не нужен.
Обратите внимание, что это похоже на то, когда k = 2 и когда край ячейки находится на значении . Редкий ввод
Редкий ввод
и принимать как плотные, похожие на массивы, так и разреженные матрицы из scipy.sparse в качестве входных данных .
Для разреженного ввода данные преобразуются в представление сжатых разреженных строк (см . Раздел «Ресурсы» ). Чтобы избежать ненужных копий памяти, рекомендуется выбирать представление CSR в восходящем направлении.
Notes
- Weights will be saved in the backup folder every 100 iterations till 900 and then every 10000.
- Kill the training process once the average loss is less than 0.06, or once the avg value no longer increases.
Region 23 Avg IOU: 0.880141, Class: 0.999959, Obj: 0.999842, No Obj: 0.000690, .5R: 1.000000, .75R: 1.000000, count: 1498591: 0.033501, 0.063296 avg, 0.000010 rate, 0.004106 seconds, 498591 imagesLoaded: 0.003061 seconds
Results
We should now have .weights files in the backup directory that represents our trained model. Let’s use this on some images to see how well it can detect the object it is trained on.
./darknet detector test cfg/obj.data cfg/yolov3-tiny.cfg backup/yolov3-tiny_900.weights data/rubicks.jpg
You can pick some interesting images to showcase the performance of your detection setup. Images that haven’t been used in training, we’re not cheating here.
If the results are not as per your expectations, It’s time for you to know how to play with learning_rate, batch, sub_divisions.
If you want to change the rate at which weights saves you can play with “steps” in cfg file.
If you need a script which can work as a real-time detector on web-cam you can try on with this script, you just have to provide with yolov3.weights, yolov3-tiny.cfg and objects.names as argument.
Note: This is for single object detection. Please use this link to train with multi-object. Thanks and have a good day.
Useful blogs which you can refer for detailed understanding:
Решение 1 — Удалить файлы System Mechanic
По словам пользователей, при попытке запустить System Mechanic может появиться ошибка L ist index of bounds . Кажется, что эта ошибка вызвана некоторыми файлами System Mechanic, которые могут быть повреждены, поэтому для решения этой проблемы вам нужно найти и удалить эти файлы с вашего ПК.
Для этого просто выполните следующие действия:
-
Откройте проводник и перейдите в каталог C: ProgramDataiolo . Этот каталог по умолчанию скрыт, поэтому вам нужно его раскрыть. Просто перейдите на диск C: и затем выберите View и проверьте Hidden items .
- Как только вы войдете в этот каталог, найдите файлы Smgthints.xml и Status.xml и удалите их.
После удаления этих файлов проверьте, сохраняется ли проблема. Имейте в виду, что это решение работает только для программного обеспечения System Mechanic, поэтому, если другая проблема дает вам эту проблему, вам придется использовать другое решение.
✨ Типеррера: «INT» Объект не Callable
Это еще одна общая ситуация, когда пользователь призывает объект и заканчивается с Отказ Вы можете столкнуться с этой ошибкой в сценариях, таких как следующее:
☞ Объявление переменной с именем функции, которая вычисляет целочисленные значения
Пример:
# sum variable with sum() method Amount = Discount = sum = 10 if sum(Amount) > 5000: print(sum(Amount) - 1000) else: sum = sum(Amount) - sum(Discount) print(sum)
Выход:
Traceback (most recent call last): File "D:/PycharmProjects/PythonErrors/rough.py", line 5, in if sum(Amount)>5000: TypeError: 'int' object is not callable
Решение: Чтобы исправить эту проблему, мы можем просто использовать другое имя для переменной вместо сумма Отказ
#sum variable with sum() method Amount = Discount = k = 10 if sum(Amount)>5000: print(sum(Amount)-1000) else: k = sum(Amount)-sum(Discount) print(k)
Выход:
1200
Обзор
Цель: Цель этой статьи – обсудить и исправить TypeError: «Модуль» объект не вызывается в питоне. Мы будем использовать многочисленные иллюстрации и методы для решения проблемы упрощенным образом.
Пример 1. :
# Example of TypeError:'module' object is not callable import datetime # importing datetime module def tell_date(): # Method for displaying today's date return datetime() print(tell_date())
Выход:
Traceback (most recent call last): File "D:/PycharmProjects/PythonErrors/rough.py", line 9, in print(tell_date()) File "D:/PycharmProjects/PythonErrors/rough.py", line 6, in tell_date return datetime() TypeError: 'module' object is not callable
Теперь вышеупомянутый выход приводит нас к нескольким вопросам. Давайте посмотрим на них один за другим.
The Importance of Data Splitting
Supervised machine learning is about creating models that precisely map the given inputs (independent variables, or predictors) to the given outputs (dependent variables, or responses).
How you measure the precision of your model depends on the type of a problem you’re trying to solve. In , you typically use the coefficient of determination, root-mean-square error, mean absolute error, or similar quantities. For problems, you often apply accuracy, precision, recall, F1 score, and related indicators.
The acceptable numeric values that measure precision vary from field to field. You can find detailed explanations from Statistics By Jim, Quora, and many other resources.
What’s most important to understand is that you usually need unbiased evaluation to properly use these measures, assess the predictive performance of your model, and validate the model.
This means that you can’t evaluate the predictive performance of a model with the same data you used for training. You need evaluate the model with fresh data that hasn’t been seen by the model before. You can accomplish that by splitting your dataset before you use it.
Полный код
Полный код для этого учебника приведен ниже:
import seaborn as sns from sklearn.model_selection import train_test_split #import dataset titanic = sns.load_dataset('titanic') #output vector y = titanic.survived #input vector x=titanic.drop('survived',axis=1) #split x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2) #verify print("shape of original dataset :", titanic.shape) print("shape of input - training set", x_train.shape) print("shape of output - training set", y_train.shape) print("shape of input - testing set", x_test.shape) print("shape of output - testing set", y_test.shape)
✨ JypeError ISERROR: объект «Список» не вызывается
Эта ошибка возникает, когда мы пытаемся вызвать объект «списка», а вы используете «()» вместо использования «[]».
Пример:
collection = for i in range(3): print(collection(i)) # incorrect notation
Выход:
Traceback (most recent call last): File "D:/PycharmProjects/PythonErrors/rough.py", line 3, in print(collection(i)) # incorrect notation TypeError: 'list' object is not callable
Решение: Чтобы исправить эту проблему, нам нужно использовать правильный процесс доступа к элементам списка I.e, используя «[]» (квадратные скобки). Так просто! .
collection = for i in range(3): print(collection) # incorrect notation
Выход:
One 2 three
Model Selection
Larger models like YOLOv5x and YOLOv5x6 will produce better results in nearly all cases, but have more parameters, require more CUDA memory to train, and are slower to run. For mobile deployments we recommend YOLOv5s/m, for cloud deployments we recommend YOLOv5l/x. See our README for a full comparison of all models.
Start from Pretrained weights. Recommended for small to medium sized datasets (i.e. VOC, VisDrone, GlobalWheat). Pass the name of the model to the —weights argument. Models download automatically from the latest YOLOv5 release.
python train.py --data custom.yaml --weights yolov5s.pt yolov5m.pt yolov5l.pt yolov5x.pt custom_pretrained.pt
Start from Scratch. Recommended for large datasets (i.e. COCO, Objects365, OIv6). Pass the model architecture yaml you are interested in, along with an empty —weights » argument:
python train.py --data custom.yaml --weights '' --cfg yolov5s.yaml yolov5m.yaml yolov5l.yaml yolov5x.yaml