Профессии в области информационных технологий многообразны и включают в себя различные области специализации. Вот примерная карта профессий в ИТ:
1. Разработка программного обеспечения / инженерия:
- *Junior/Senior/Middle Developer:* Разработчики могут специализироваться в различных областях, таких как фронтенд (работа с пользовательским интерфейсом), бэкенд (работа с серверной частью), или быть full-stack (работать и с фронтендом, и с бэкендом).
- *DevOps Engineer:* Специалисты DevOps работают на стыке разработки и IT-операций, обеспечивая быстрое и качественное внедрение изменений в продакшн.
- *QA Engineer / Tester:* QA-инженеры занимаются контролем качества программного обеспечения, они проверяют продукт на наличие ошибок и багов.
- *Data Scientist / Machine Learning Engineer:* Эти специалисты занимаются анализом данных и созданием моделей машинного обучения.
2. IT-управление и консалтинг:
- *IT Project Manager:* Управляют IT-проектами, контролируют сроки и бюджеты, координируют работу команды.
- *IT Consultant:* Помогают организациям оптимизировать использование технологий для достижения бизнес-целей.
- *Business Analyst:* Анализируют бизнес-процессы и требования, а также работают над их оптимизацией и автоматизацией.
3. Сетевые технологии и администрирование:
- *Network Engineer:* Отвечают за установку, поддержку и оптимизацию сетей.
- *System Administrator:* Управляют и поддерживают работоспособность компьютерных систем и серверов.
4. Информационная безопасность:
- *Information Security Analyst:* Защищают информационные системы организации от угроз.
- *Ethical Hacker / Penetration Tester:* Проводят тестирование на проникновение, имитируя действия злоумышленников, чтобы обнаружить уязвимости.
5. Системы управления базами данных (СУБД):
- *Database Administrator (DBA):* Управляют базами данных, обеспечивают их эффективную работу, безопасность и доступность.
- *Database Developer:* Разрабатывают и оптимизируют структуру баз данных, создают запросы и процедуры.
6. UI/UX дизайн:
- *UI Designer:* Занимаются разработкой интерфейсов, обеспечивая удобство и эстетичность отображения элементов.
- *UX Designer:* Работают над оптимизацией пользовательского опыта, делая продукт удобным и понятным для конечного пользователя.
7. Техническая поддержка:
- *Helpdesk / IT Support:* Предоставляют поддержку пользователям, решают технические проблемы и вопросы.
8. Системный анализ и архитектура:
- *System Analyst:* Анализируют и оценивают системные требования и работают над их реализацией.
- *System Architect / IT Architect:* Разрабатывают общую структуру IT-системы или ее отдельных частей.
9. Управление продуктом:
- *Product Manager:* Руководят процессом разработки продуктов, определяя стратегию, приоритеты и планируя релизы.
Выбор конкретной профессии в области ИТ зависит от многих факторов, включая ваши интересы, навыки, образование и карьерные цели. Некоторые профессии, такие как разработчик программного обеспечения или аналитик данных, требуют глубоких технических знаний, в то время как другие, например, менеджер проектов или аналитик бизнес-процессов, могут требовать больше навыков управления и понимания бизнеса.
1. Разработка программного обеспечения / инженерия:
- *Junior/Senior/Middle Developer:* Разработчики могут специализироваться в различных областях, таких как фронтенд (работа с пользовательским интерфейсом), бэкенд (работа с серверной частью), или быть full-stack (работать и с фронтендом, и с бэкендом).
- *DevOps Engineer:* Специалисты DevOps работают на стыке разработки и IT-операций, обеспечивая быстрое и качественное внедрение изменений в продакшн.
- *QA Engineer / Tester:* QA-инженеры занимаются контролем качества программного обеспечения, они проверяют продукт на наличие ошибок и багов.
- *Data Scientist / Machine Learning Engineer:* Эти специалисты занимаются анализом данных и созданием моделей машинного обучения.
2. IT-управление и консалтинг:
- *IT Project Manager:* Управляют IT-проектами, контролируют сроки и бюджеты, координируют работу команды.
- *IT Consultant:* Помогают организациям оптимизировать использование технологий для достижения бизнес-целей.
- *Business Analyst:* Анализируют бизнес-процессы и требования, а также работают над их оптимизацией и автоматизацией.
3. Сетевые технологии и администрирование:
- *Network Engineer:* Отвечают за установку, поддержку и оптимизацию сетей.
- *System Administrator:* Управляют и поддерживают работоспособность компьютерных систем и серверов.
4. Информационная безопасность:
- *Information Security Analyst:* Защищают информационные системы организации от угроз.
- *Ethical Hacker / Penetration Tester:* Проводят тестирование на проникновение, имитируя действия злоумышленников, чтобы обнаружить уязвимости.
5. Системы управления базами данных (СУБД):
- *Database Administrator (DBA):* Управляют базами данных, обеспечивают их эффективную работу, безопасность и доступность.
- *Database Developer:* Разрабатывают и оптимизируют структуру баз данных, создают запросы и процедуры.
6. UI/UX дизайн:
- *UI Designer:* Занимаются разработкой интерфейсов, обеспечивая удобство и эстетичность отображения элементов.
- *UX Designer:* Работают над оптимизацией пользовательского опыта, делая продукт удобным и понятным для конечного пользователя.
7. Техническая поддержка:
- *Helpdesk / IT Support:* Предоставляют поддержку пользователям, решают технические проблемы и вопросы.
8. Системный анализ и архитектура:
- *System Analyst:* Анализируют и оценивают системные требования и работают над их реализацией.
- *System Architect / IT Architect:* Разрабатывают общую структуру IT-системы или ее отдельных частей.
9. Управление продуктом:
- *Product Manager:* Руководят процессом разработки продуктов, определяя стратегию, приоритеты и планируя релизы.
Выбор конкретной профессии в области ИТ зависит от многих факторов, включая ваши интересы, навыки, образование и карьерные цели. Некоторые профессии, такие как разработчик программного обеспечения или аналитик данных, требуют глубоких технических знаний, в то время как другие, например, менеджер проектов или аналитик бизнес-процессов, могут требовать больше навыков управления и понимания бизнеса.
Одним из самых известных случаев взлома является атака на систему аутентификации с использованием уязвимости SQL-инъекции. SQL-инъекция - это техника, которая использует некорректную обработку пользовательского ввода для манипуляции с SQL-запросами, что позволяет злоумышленнику получить несанкционированный доступ к базе данных.
Рассмотрим пример кода на PHP, который подвержен SQL-инъекции:
В этом примере, если пользователь вводит что-то вроде
Такой запрос всегда вернет истину, что позволит злоумышленнику обойти систему аутентификации.
Для предотвращения такой атаки следует использовать параметризованные запросы или готовые функции для эскейпинга специальных символов в пользовательском вводе. Также стоит хранить пароли в зашифрованном виде, используя безопасные алгоритмы хэширования, чтобы даже в случае утечки данных злоумышленник не смог прочитать их.
Рассмотрим пример кода на PHP, который подвержен SQL-инъекции:
php
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// Создаем подключение
$conn = new mysqli($servername, $username, $password, $dbname);
// Проверяем подключение
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$username = $_POST['username'];
$password = $_POST['password'];
$sql = "SELECT * FROM Users WHERE username = '$username' AND password = '$password'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// вход успешен
} else {
// вход не успешен
}
$conn->close();
?>
В этом примере, если пользователь вводит что-то вроде
' OR '1'='1 в поле username или password, то SQL-запрос станет таким:sql
SELECT * FROM Users WHERE username = '' OR '1'='1' AND password = '' OR '1'='1'
Такой запрос всегда вернет истину, что позволит злоумышленнику обойти систему аутентификации.
Для предотвращения такой атаки следует использовать параметризованные запросы или готовые функции для эскейпинга специальных символов в пользовательском вводе. Также стоит хранить пароли в зашифрованном виде, используя безопасные алгоритмы хэширования, чтобы даже в случае утечки данных злоумышленник не смог прочитать их.
Пример сложной строки кода на Python:
Разберем подробнее:
-
-
Итак, весь код можно перевести как "создай список из всех чисел от 1 до 100, которые являются четными".
pythonЭта строчка кода использует list comprehension в Python, который представляет собой способ создания списка на основе существующих списков или других итерируемых объектов. В данном случае создается список
output = [i for i in range(1, 101) if i % 2 == 0]
output, содержащий все четные числа в диапазоне от 1 до 100.Разберем подробнее:
-
i for i in range(1, 101): Это основа нашего list comprehension. Мы говорим Python: "для каждого i в диапазоне от 1 до 100 (не включая 101)..."-
if i % 2 == 0: Это условие фильтрации. Мы говорим Python: "включи i в список только в том случае, если i делится на 2 без остатка", то есть является четным.Итак, весь код можно перевести как "создай список из всех чисел от 1 до 100, которые являются четными".
Вот пример сложного регулярного выражения, которое проверяет, является ли строка валидным адресом электронной почты:
Разберем его части:
-
-
-
-
-
Это регулярное выражение очень сложное и старается учесть многие варианты адресов электронной почты в соответствии со стандартом RFC 5322. В реальной жизни часто используются более простые регулярные выражения для проверки формата адреса электронной почты, так как полное соответствие стандарту RFC 5322 включает множество редко используемых и сложных случаев.
regex
^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])$
Разберем его части:
-
^ и $ - они обозначают начало и конец строки соответственно. Весь паттерн должен совпадать с всей строкой, а не с ее частью.-
(?:[a-z0-9!#$%&'*+/=?^_{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*) - это часть до символа `@. Она может содержать любое количество (но не менее одного) символов из указанного диапазона, а также точки, но точки не могут идти подряд или находиться в начале или в конце.-
@ - обязательный символ @.-
(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])? - это доменное имя после @. Оно может содержать любое количество поддоменов, разделенных точками, и каждый поддомен должен начинаться и заканчиваться буквой или цифрой.-
|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\] - это альтернатива доменному имени и представляет собой IP-адрес, заключенный в квадратные скобки. В этом случае поддерживаются как IPv4, так и IPv6 адреса.Это регулярное выражение очень сложное и старается учесть многие варианты адресов электронной почты в соответствии со стандартом RFC 5322. В реальной жизни часто используются более простые регулярные выражения для проверки формата адреса электронной почты, так как полное соответствие стандарту RFC 5322 включает множество редко используемых и сложных случаев.
Если вам нужно проверить формат адреса электронной почты на базовом уровне, можно использовать более простое регулярное выражение. Например, такое регулярное выражение проверяет, есть ли в строке что-то, похожее на адрес электронной почты:
-
-
-
-
-
Это простое регулярное выражение не учитывает многие сложные случаи, которые допустимы по стандарту RFC 5322, но может быть достаточно для многих практических сценариев.
regexЭто регулярное выражение проверяет:
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
-
^[a-zA-Z0-9._%+-]+: строка начинается с одного или более символов, которые могут быть буквами (верхнего или нижнего регистра), цифрами, точками, процентами, плюсами, минусами или подчеркиваниями.-
@: затем идет символ @.-
[a-zA-Z0-9.-]+: затем идет один или более символов, которые могут быть буквами (верхнего или нижнего регистра), цифрами, точками или дефисами.-
\.: затем идет точка.-
[a-zA-Z]{2,}$: строка заканчивается двумя или более буквами.Это простое регулярное выражение не учитывает многие сложные случаи, которые допустимы по стандарту RFC 5322, но может быть достаточно для многих практических сценариев.
Недельный обзор QA навыков показывает разнообразие инструментов и методологий. Самый востребованный навык - Python (73 упоминания), широко применяемый в автоматическом тестировании. Android и мобильные навыки также популярны (55 и 44 упоминания), отражая рост мобильного сектора. Удаленная работа в QA значима (42 упоминания), как и REST и веб-тестирование (38 и 37 упоминаний). Selenium остается важным инструментом автоматизированного тестирования (31 упоминание), а Git, Docker и Postman также отмечены. Agile и бизнес-понимание подчеркивают гибкость QA (12 и 13 упоминаний). Несмотря на акцент на автоматизацию, ручное тестирование значимо (29 упоминаний). Обзор подтверждает, что QA требует широкого набора навыков и понимания бизнес-процессов.
Как работает этот ТГ канал?
Это канал микроленинга, канал на интересных, иногда сложных, иногда простых примерах учит как писать код. Важно что мы пытаемся найти интересные примеры - потому что ничто не поможет вам стать лучше или научится кодить с нуля кроме искреннего интереса.
Используем больше кода из популярных языков в вакансиях работадателей, но будут и редкие интересные языки программирования. Ещё периодически мы постим тренды на рынке вакансий Dev и QA, а иногда отдельные интересные вакансии
Это канал микроленинга, канал на интересных, иногда сложных, иногда простых примерах учит как писать код. Важно что мы пытаемся найти интересные примеры - потому что ничто не поможет вам стать лучше или научится кодить с нуля кроме искреннего интереса.
WHILE интерес == TRUE { Пишите код and становитесь лучше в разработке } Используем больше кода из популярных языков в вакансиях работадателей, но будут и редкие интересные языки программирования. Ещё периодически мы постим тренды на рынке вакансий Dev и QA, а иногда отдельные интересные вакансии
Тенденции в вакансиях игровой индустрии: Недельный обзор
Игровая индустрия продолжает демонстрировать динамичный рост. За прошедшую неделю, сфера игровой разработки подтвердила большой спрос на следующие навыки:
Unity и Unreal Engine остаются ключевыми инструментами для разработчиков игр, с 34 и 9 упоминаниями соответственно.
Навыки разработки в целом остаются в высоком спросе, как отмечено 34 раза, включая упоминания "developer" и "lead" для ролей разработчика и руководителя проектов.
Графический дизайн и визуализация также остаются важными, с упоминаниями "artist", "designer", "Adobe" и "Blender".
Важность мобильной разработки подчеркнута 4 упоминаниями "mobile", а технологии Python и React также упоминаются, указывая на их роль в бэкенд-сервисах и инструментальных интерфейсах.
В целом, рынок вакансий игровой разработки остается многообразным и динамичным, с широким спектром востребованных навыков.
Игровая индустрия продолжает демонстрировать динамичный рост. За прошедшую неделю, сфера игровой разработки подтвердила большой спрос на следующие навыки:
Unity и Unreal Engine остаются ключевыми инструментами для разработчиков игр, с 34 и 9 упоминаниями соответственно.
Навыки разработки в целом остаются в высоком спросе, как отмечено 34 раза, включая упоминания "developer" и "lead" для ролей разработчика и руководителя проектов.
Графический дизайн и визуализация также остаются важными, с упоминаниями "artist", "designer", "Adobe" и "Blender".
Важность мобильной разработки подчеркнута 4 упоминаниями "mobile", а технологии Python и React также упоминаются, указывая на их роль в бэкенд-сервисах и инструментальных интерфейсах.
В целом, рынок вакансий игровой разработки остается многообразным и динамичным, с широким спектром востребованных навыков.
Давайте рассмотрим реализацию алгоритма сортировки пузырьком на двух популярных языках программирования: Python и Java.
Python:
Java:
Преимущества и недостатки:
Python является интерпретируемым языком, что означает, что он обрабатывается во время выполнения, а не перед ним. Благодаря этому, код на Python обычно более короткий и читаемый, чем на многих других языках. Это особенно заметно в реализации алгоритма сортировки пузырьком, где Python позволяет легко и быстро обменивать элементы местами.
Java, напротив, является статически типизированным, компилируемым языком. Это означает, что он обычно работает быстрее Python, особенно на больших и сложных проектах. Однако, код на Java обычно длиннее и менее читаемый.
Python:
python
def bubbleSort(arr):
n = len(arr)
for i in range(n):
for j in range(0, n-i-1):
if arr[j] > arr[j+1] :
arr[j], arr[j+1] = arr[j+1], arr[j]
arr = [64, 34, 25, 12, 22, 11, 90]
bubbleSort(arr)
print ("Sorted array is:")
for i in range(len(arr)):
print ("%d" %arr[i], end = " ")
Java:
java
public class BubbleSort
{
void bubbleSort(int arr[])
{
int n = arr.length;
for (int i = 0; i < n-1; i++)
for (int j = 0; j < n-i-1; j++)
if (arr[j] > arr[j+1])
{
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
public static void main(String args[])
{
BubbleSort bs = new BubbleSort();
int arr[] = {64, 34, 25, 12, 22, 11, 90};
bs.bubbleSort(arr);
System.out.println("Sorted array");
int n = arr.length;
for (int i=0; i<n; ++i)
System.out.print(arr[i] + " ");
}
}
Преимущества и недостатки:
Python является интерпретируемым языком, что означает, что он обрабатывается во время выполнения, а не перед ним. Благодаря этому, код на Python обычно более короткий и читаемый, чем на многих других языках. Это особенно заметно в реализации алгоритма сортировки пузырьком, где Python позволяет легко и быстро обменивать элементы местами.
Java, напротив, является статически типизированным, компилируемым языком. Это означает, что он обычно работает быстрее Python, особенно на больших и сложных проектах. Однако, код на Java обычно длиннее и менее читаемый.
👍1
Допустим, мы имеем следующий код на языке Python:
Этот код написан с целью удалить все нули из списка. Но он содержит серьезную ошибку: он изменяет список во время его перебора. Это может привести к непредсказуемым результатам и ошибкам в выполнении кода.
Вот исправленная версия этого кода:
В этой версии мы используем генератор списка (list comprehension) для создания нового списка, который содержит все элементы исходного списка, кроме нулей. Это более эффективно и безопасно, поскольку мы не изменяем исходный список во время его перебора.
python
def func(l):
for i in range(len(l)):
if l[i] == 0:
l.pop(i)
return l
Этот код написан с целью удалить все нули из списка. Но он содержит серьезную ошибку: он изменяет список во время его перебора. Это может привести к непредсказуемым результатам и ошибкам в выполнении кода.
Вот исправленная версия этого кода:
python
def func(l):
return [i for i in l if i != 0]
В этой версии мы используем генератор списка (list comprehension) для создания нового списка, который содержит все элементы исходного списка, кроме нулей. Это более эффективно и безопасно, поскольку мы не изменяем исходный список во время его перебора.
Давайте рассмотрим пример кода на Python, который использует несколько базовых концепций и функций этого языка. Этот код будет генерировать Фибоначчиеву последовательность до заданного числа.
1. Определяется функция
2. Внутри функции создается список
3. Затем в цикле
4. Цикл продолжается до тех пор, пока количество элементов в списке не достигнет
5. Функция возвращает список с последовательностью Фибоначчи.
Наконец, мы вызываем эту функцию с аргументом
pythonВот что делает этот код:
def fibonacci(n):
fib_sequence = [0, 1]
while len(fib_sequence) < n:
fib_sequence.append(fib_sequence[-1] + fib_sequence[-2])
return fib_sequence
print(fibonacci(10))
1. Определяется функция
fibonacci(n), которая принимает один параметр: n - количество чисел Фибоначчи, которые мы хотим сгенерировать.2. Внутри функции создается список
fib_sequence с двумя начальными значениями последовательности Фибоначчи: 0 и 1.3. Затем в цикле
while добавляются новые элементы в список. Каждый новый элемент - это сумма двух последних элементов списка. Это основное свойство последовательности Фибоначчи.4. Цикл продолжается до тех пор, пока количество элементов в списке не достигнет
n.5. Функция возвращает список с последовательностью Фибоначчи.
Наконец, мы вызываем эту функцию с аргументом
10, чтобы сгенерировать первые 10 чисел Фибоначчи и выводим результат на экран с помощью функции print().Давайте рассмотрим пример простого веб-скрейпера на Python, использующего библиотеку Beautiful Soup для извлечения данных из веб-страницы.
1. Импортирует необходимые библиотеки:
2. Определяет URL веб-страницы, с которой мы хотим извлечь данные.
3. Выполняет GET-запрос к указанному URL и сохраняет ответ в переменной
4. Создает объект BeautifulSoup, который представляет документ в виде вложенной структуры данных, что упрощает работу с HTML-кодом.
5. В цикле перебирает все теги
6. Выводит атрибут
Пожалуйста, обратите внимание, что этот пример использует
pythonЭтот скрипт делает следующее:
import requests
from bs4 import BeautifulSoup
url = 'https://www.example.com'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
for link in soup.find_all('a'):
print(link.get('href'))
1. Импортирует необходимые библиотеки:
requests для выполнения HTTP-запросов и BeautifulSoup из модуля bs4 для обработки HTML.2. Определяет URL веб-страницы, с которой мы хотим извлечь данные.
3. Выполняет GET-запрос к указанному URL и сохраняет ответ в переменной
response.4. Создает объект BeautifulSoup, который представляет документ в виде вложенной структуры данных, что упрощает работу с HTML-кодом.
5. В цикле перебирает все теги
<a> (ссылки) на странице, найденные с помощью метода find_all объекта BeautifulSoup.6. Выводит атрибут
href каждой ссылки, который обычно содержит URL-адрес, на который ведет ссылка.Пожалуйста, обратите внимание, что этот пример использует
'https://www.example.com' в качестве заглушки для URL. В реальном коде вы должны заменить его на URL сайта, с которого хотите скрейпить данные. Имейте в виду, что скрейпинг веб-сайтов может быть юридически сложным, и перед использованием скрейпера вы должны убедиться, что его использование не нарушает условия использования сайта.Рассмотрим пример кода на Python, который использует нейронную сеть для классификации образцов из набора данных MNIST (распространенный набор данных, состоящий из рукописных цифр). Для этого мы будем использовать библиотеку Keras, что сильно упрощает процесс.
Этот скрипт выполняет следующие действия:
1. Загружает набор данных MNIST с помощью встроенной функции
2. Нормализует данные изображений, делая все значения пикселей между 0 и 1.
3. Создает простую нейронную сеть, состоящую из входного слоя, преобразующего каждое изображение в одномерный массив (28x28 пикселей), скрытого слоя с 128 нейронами и функцией активации ReLU, слоя Dropout для предотвращения переобучения и выходного слоя с 10 нейронами (по одному для каждой цифры от 0 до 9).
4. Компилирует модель с оптимизатором Adam, функцией потерь для мультиклассовой классификации (
5. Обучает модель на обучающих данных с использованием 5 эпох.
6. Оценивает модель на тестовых данных и печатает потери и точность.
Это базовый пример нейронной сети с помощью Keras. В реальности вам, скорее всего, потребуется больше настройки и анализа для создания эффективной модели для конкретной задачи.
python
import tensorflow.keras as keras
# Загружаем набор данных MNIST
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
# Нормализуем данные
x_train = x_train / 255.0
x_test = x_test / 255.0
# Создаем модель
model = keras.models.Sequential([
keras.layers.Flatten(input_shape=(28, 28)),
keras.layers.Dense(128, activation='relu'),
keras.layers.Dropout(0.2),
keras.layers.Dense(10)
])
# Компилируем модель
model.compile(optimizer='adam',
loss=keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
# Обучаем модель
model.fit(x_train, y_train, epochs=5)
# Оцениваем модель
model.evaluate(x_test, y_test)
Этот скрипт выполняет следующие действия:
1. Загружает набор данных MNIST с помощью встроенной функции
load_data() из Keras. Данные разбиваются на обучающий и тестовый наборы.2. Нормализует данные изображений, делая все значения пикселей между 0 и 1.
3. Создает простую нейронную сеть, состоящую из входного слоя, преобразующего каждое изображение в одномерный массив (28x28 пикселей), скрытого слоя с 128 нейронами и функцией активации ReLU, слоя Dropout для предотвращения переобучения и выходного слоя с 10 нейронами (по одному для каждой цифры от 0 до 9).
4. Компилирует модель с оптимизатором Adam, функцией потерь для мультиклассовой классификации (
SparseCategoricalCrossentropy) и метрикой для отслеживания точности.5. Обучает модель на обучающих данных с использованием 5 эпох.
6. Оценивает модель на тестовых данных и печатает потери и точность.
Это базовый пример нейронной сети с помощью Keras. В реальности вам, скорее всего, потребуется больше настройки и анализа для создания эффективной модели для конкретной задачи.
Мы пишем примеры кода два раза в день в будние дни. Достаточно ли этого или вы хотите видеть примеры кода в выходные тоже?
Anonymous Poll
58%
В будние достаточно
42%
Добавьте примеры в выходные
Давайте рассмотрим другой пример использования нейронных сетей на Python. Мы создадим простую модель для решения задачи бинарной классификации, то есть задачи, где есть два возможных класса или ответа. Мы будем использовать набор данных, который встроен в библиотеку Keras - это набор данных о раке груди из UCI Machine Learning Repository.
1. Загружает набор данных о раке груди с помощью встроенной функции
2. Нормализует данные с помощью
3. Разделяет данные на обучающий и тестовый наборы.
4. Создает простую нейронную сеть с одним скрытым слоем, содержащим 16 нейронов и функцией активации ReLU, и выходным слоем с одним нейроном и функцией активации sigmoid (что хорошо подходит для бинарной классификации).
5. Компилирует модель с оптимизатором Adam, функцией потерь
6. Обучает модель на обучающих данных с использованием 50 эпох.
Прошу прощения за прерывание. Вот продолжение последней строки:
7. Оценивает модель на тестовых данных и выводит потери и точность.
Этот код представляет собой базовый пример использования нейронной сети для задачи бинарной классификации. Помимо этого, в реальных задачах вы можете захотеть добавить больше слоев или нейронов в вашу сеть, настроить параметры оптимизатора, использовать различные функции активации или применять техники, такие как ранняя остановка или отложенное уменьшение скорости обучения, чтобы улучшить производительность вашей модели.
pythonВот что делает этот скрипт:
import numpy as np
import tensorflow.keras as keras
# Загружаем набор данных о раке груди из sklearn
from sklearn.datasets import load_breast_cancer
data = load_breast_cancer()
# Разделяем данные на признаки и целевую переменную
X = data.data
Y = data.target
# Нормализуем данные
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X = sc.fit_transform(X)
# Разбиваем данные на обучающую и тестовую выборку
from sklearn.model_selection import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 0.2, random_state = 0)
# Создаем модель
model = keras.models.Sequential([
keras.layers.Dense(16, activation='relu', input_shape=(X_train.shape[1],)),
keras.layers.Dense(1, activation='sigmoid')
])
# Компилируем модель
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
# Обучаем модель
model.fit(X_train, Y_train, epochs=50)
# Оцениваем модель
model.evaluate(X_test, Y_test)
1. Загружает набор данных о раке груди с помощью встроенной функции
load_breast_cancer() из sklearn. Данные разбиваются на признаки (X) и целевую переменную (Y).2. Нормализует данные с помощью
StandardScaler из sklearn. Это приводит все признаки к одному и тому же масштабу.3. Разделяет данные на обучающий и тестовый наборы.
4. Создает простую нейронную сеть с одним скрытым слоем, содержащим 16 нейронов и функцией активации ReLU, и выходным слоем с одним нейроном и функцией активации sigmoid (что хорошо подходит для бинарной классификации).
5. Компилирует модель с оптимизатором Adam, функцией потерь
binary_crossentropy (хорошо подходит для задач бинарной классификации) и метрикой для отслеживания точности.6. Обучает модель на обучающих данных с использованием 50 эпох.
Прошу прощения за прерывание. Вот продолжение последней строки:
7. Оценивает модель на тестовых данных и выводит потери и точность.
Этот код представляет собой базовый пример использования нейронной сети для задачи бинарной классификации. Помимо этого, в реальных задачах вы можете захотеть добавить больше слоев или нейронов в вашу сеть, настроить параметры оптимизатора, использовать различные функции активации или применять техники, такие как ранняя остановка или отложенное уменьшение скорости обучения, чтобы улучшить производительность вашей модели.
Если вы ищете пример кода для создания нейронной сети без использования библиотек высокого уровня, таких как Keras или PyTorch, вам придется написать больше кода, и он будет сложнее для понимания. Однако это может быть хорошим способом лучше понять, как работают нейронные сети.
Вот пример простейшей нейронной сети с одним скрытым слоем, реализованной на чистом Python:
1. Функции
2. Класс
3. Метод
4. Метод
5. Далее мы определяем входные данные и целевые значения, создаем объект нейронной сети и выполняем 1500 итераций прямого распространения и обратного распространения.
6. Наконец, мы выводим полученные предсказания сети.
При выполнении этого кода вы увидите, что сеть учится предсказывать целевые значения на основе входных данных.
Важно отметить, что это простой пример, и его не следует использовать для решения сложных проблем машинного обучения. В реальных задачах рекомендуется использовать библиотеки машинного обучения, такие как TensorFlow, Keras или PyTorch, которые содержат множество оптимизаций и могут работать на GPU, что значительно ускоряет обучение и инференцию.
Вот пример простейшей нейронной сети с одним скрытым слоем, реализованной на чистом Python:
pythonЭтот скрипт создает простую нейронную сеть с одним скрытым слоем и обучает ее с помощью алгоритма обратного распространения ошибки.
import numpy as np
def sigmoid(x):
return 1.0/(1+ np.exp(-x))
def sigmoid_derivative(x):
return x * (1.0 - x)
class NeuralNetwork:
def __init__(self, x, y):
self.input = x
self.weights1 = np.random.rand(self.input.shape[1],4)
self.weights2 = np.random.rand(4,1)
self.y = y
self.output = np.zeros(self.y.shape)
def feedforward(self):
self.layer1 = sigmoid(np.dot(self.input, self.weights1))
self.output = sigmoid(np.dot(self.layer1, self.weights2))
def backprop(self):
d_weights2 = np.dot(self.layer1.T, (2*(self.y - self.output) * sigmoid_derivative(self.output)))
d_weights1 = np.dot(self.input.T, (np.dot(2*(self.y - self.output) * sigmoid_derivative(self.output), self.weights2.T) * sigmoid_derivative(self.layer1)))
self.weights1 += d_weights1
self.weights2 += d_weights2
X = np.array([[0,0,1],
[0,1,1],
[1,0,1],
[1,1,1]])
y = np.array([[0],[1],[1],[0]])
nn = NeuralNetwork(X,y)
for i in range(1500):
nn.feedforward()
nn.backprop()
print(nn.output)
1. Функции
sigmoid и sigmoid_derivative используются как функции активации и их производные.2. Класс
NeuralNetwork инициализируется с входными данными, весами для двух слоев сети, вектором целевых значений и пустым вектором для вывода сети.3. Метод
feedforward выполняет прямое распространение входного сигнала через сеть и сохраняет вывод.4. Метод
backprop реализует алгоритм обратного распространения ошибки, который корректирует веса сети на основе ошибки между ее текущим и желаемым выходом.5. Далее мы определяем входные данные и целевые значения, создаем объект нейронной сети и выполняем 1500 итераций прямого распространения и обратного распространения.
6. Наконец, мы выводим полученные предсказания сети.
При выполнении этого кода вы увидите, что сеть учится предсказывать целевые значения на основе входных данных.
Важно отметить, что это простой пример, и его не следует использовать для решения сложных проблем машинного обучения. В реальных задачах рекомендуется использовать библиотеки машинного обучения, такие как TensorFlow, Keras или PyTorch, которые содержат множество оптимизаций и могут работать на GPU, что значительно ускоряет обучение и инференцию.
Давайте создадим простую полносвязную нейронную сеть с помощью библиотеки PyTorch. Эта нейронная сеть будет классифицировать изображения из набора данных MNIST.
Вот что делает этот скрипт:
1. Сначала мы загружаем набор данных MNIST с помощью torchvision, нормализуем его и создаем DataLoader.
2. Затем мы определяем модель. В этом случае мы используем полносвязную (или "плотную") нейронную сеть с двумя скрытыми слоями и функцией активации ReLU. Выходной слой использует LogSoftmax для получения вероятностей для каждого класса.
3. Мы определяем функцию потерь (в этом случае, отрицательную логарифмическую вероятность, или NLL) и оптимизатор (SGD - стохастический градиентный спуск).
4. Затем мы обучаем модель за 5 эпох, пройдя по всем изображениям и меткам в trainloader. Мы переформатируем каждое изображение в вектор, затем запускаем его через модель, вычисляем потери, делаем обратный проход и обновляем веса модели.
5. В конце каждой эпохи мы выводим среднюю потерю во время обучения.
Пожалуйста, обратите внимание, что для выполнения этого кода у вас должны быть установлены библиотеки PyTorch и torchvision.
Это пример простой полносвязной нейронной сети, которая может быть использована для классификации изображений. В реальных сценариях использования, вы можете добавить больше слоев, изменить функции активации, добавить dropout слои для предотвращения переобучения и настроить другие параметры модели и процесса обучения, чтобы улучшить производительность вашей модели.
python
import torch
from torchvision import datasets, transforms
from torch import nn, optim
# Загружаем данные
transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,))])
trainset = datasets.MNIST('~/.pytorch/MNIST_data/', download=True, train=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=64, shuffle=True)
# Определяем модель
model = nn.Sequential(nn.Linear(784, 128),
nn.ReLU(),
nn.Linear(128, 64),
nn.ReLU(),
nn.Linear(64, 10),
nn.LogSoftmax(dim=1))
# Определяем функцию потерь и оптимизатор
criterion = nn.NLLLoss()
optimizer = optim.SGD(model.parameters(), lr=0.003)
# Обучаем модель
epochs = 5
for e in range(epochs):
running_loss = 0
for images, labels in trainloader:
# Переформатируем images из набора размером (batch_size, 1, 28, 28) в вектор размером (batch_size, 784)
images = images.view(images.shape[0], -1)
optimizer.zero_grad()
output = model(images)
loss = criterion(output, labels)
loss.backward()
optimizer.step()
running_loss += loss.item()
else:
print(f"Training loss: {running_loss/len(trainloader)}")
Вот что делает этот скрипт:
1. Сначала мы загружаем набор данных MNIST с помощью torchvision, нормализуем его и создаем DataLoader.
2. Затем мы определяем модель. В этом случае мы используем полносвязную (или "плотную") нейронную сеть с двумя скрытыми слоями и функцией активации ReLU. Выходной слой использует LogSoftmax для получения вероятностей для каждого класса.
3. Мы определяем функцию потерь (в этом случае, отрицательную логарифмическую вероятность, или NLL) и оптимизатор (SGD - стохастический градиентный спуск).
4. Затем мы обучаем модель за 5 эпох, пройдя по всем изображениям и меткам в trainloader. Мы переформатируем каждое изображение в вектор, затем запускаем его через модель, вычисляем потери, делаем обратный проход и обновляем веса модели.
5. В конце каждой эпохи мы выводим среднюю потерю во время обучения.
Пожалуйста, обратите внимание, что для выполнения этого кода у вас должны быть установлены библиотеки PyTorch и torchvision.
Это пример простой полносвязной нейронной сети, которая может быть использована для классификации изображений. В реальных сценариях использования, вы можете добавить больше слоев, изменить функции активации, добавить dropout слои для предотвращения переобучения и настроить другие параметры модели и процесса обучения, чтобы улучшить производительность вашей модели.
Рассмотрим пример на Python. Допустим, у нас есть список, и мы хотим удалить из него все дубликаты.
Неоптимальный вариант:
Оптимизированный вариант:
Однако стоит учесть, что
Неоптимальный вариант:
pythonВ этом примере функция
def remove_duplicates(lst):
result = []
for item in lst:
if item not in result:
result.append(item)
return result
print(remove_duplicates([1, 2, 2, 3, 4, 4, 4, 5, 6, 6, 7]))
remove_duplicates проходит по каждому элементу списка и проверяет, есть ли он уже в результирующем списке. Если нет, то элемент добавляется. Это работает, но неэффективно, потому что операция item not in result требует прохода по всему списку result на каждой итерации, что делает сложность алгоритма O(n^2).Оптимизированный вариант:
pythonВ этом случае мы используем структуру данных
def remove_duplicates(lst):
return list(set(lst))
print(remove_duplicates([1, 2, 2, 3, 4, 4, 4, 5, 6, 6, 7]))
set, которая автоматически удаляет все дубликаты. После этого мы просто преобразуем set обратно в список. Этот алгоритм имеет сложность O(n), что значительно быстрее предыдущего варианта, особенно для больших списков.Однако стоит учесть, что
set не сохраняет порядок элементов, так что если порядок важен, этот вариант не подойдет. В этом случае можно использовать dict или collections.OrderedDict (в Python 3.7 и выше порядок вставки элементов сохраняется в dict):pythonЭтот вариант также имеет сложность O(n), но сохраняет порядок элементов.
def remove_duplicates(lst):
return list(dict.fromkeys(lst))
print(remove_duplicates([1, 2, 2, 3, 4, 4, 4, 5, 6, 6, 7]))
Вот пример "необычного" кода на Python. Он называется "quine". Quine — это программа, которая выводит свой собственный исходный код. Вот пример простого quine на Python:
Вот что делает этот код:
1. Он определяет функцию
2. Внутри этой функции он определяет строку
3. Функция
4. Наконец, он вызывает функцию
Особенность этого кода в том, что он является самовоспроизводящимся: когда вы его выполняете, он выводит свой собственный исходный код. Это необычная и интересная особенность некоторых программ, которая демонстрирует некоторые из уникальных возможностей языков программирования.
python
def quine():
q = 'def quine():\n q = {!r}\n print(q.format(q))\nquine()'
print(q.format(q))
quine()
Вот что делает этот код:
1. Он определяет функцию
quine().2. Внутри этой функции он определяет строку
q, которая содержит исходный код функции quine(), где сама строка q представлена в виде {!r}. {!r} — это placeholder для представления строки в виде строки, экранирующей специальные символы и обрамляющей её в кавычки.3. Функция
quine() затем выводит q.format(q), заменяя {!r} на саму строку q, что даёт нам исходный код функции quine().4. Наконец, он вызывает функцию
quine(), чтобы начать всю эту процедуру.Особенность этого кода в том, что он является самовоспроизводящимся: когда вы его выполняете, он выводит свой собственный исходный код. Это необычная и интересная особенность некоторых программ, которая демонстрирует некоторые из уникальных возможностей языков программирования.
Интересный фильм о технологиях, искусственном интеллекте и сфере digital
Социальная дилемма (2020) - зависимость от социальных сетей возникает не случайно. Популярные приложения манипулируют нами, залезая вглубь подсознания и пользуясь его уязвимостью, о которой многие даже не подозревают. Документальная лента раскрывает тёмную сторону социальных сетей, рассказывая о неоднозначном влиянии информационных технологий.
Социальная дилемма (2020) - зависимость от социальных сетей возникает не случайно. Популярные приложения манипулируют нами, залезая вглубь подсознания и пользуясь его уязвимостью, о которой многие даже не подозревают. Документальная лента раскрывает тёмную сторону социальных сетей, рассказывая о неоднозначном влиянии информационных технологий.
👍2