Архив за месяц: Март 2018

Как скопировать жесткий диск с OS linux

Бывает необходимо иметь резервную копию диска, на случай поломки или выхода из строя. Также возможна ситуация, когда Вы просто хотите перейти на диск большего размера. Как раз у меня возникла такая ситуация и на диск ssd диск 128 гигабайт перестал влезать необходимый софт. Для этого был прикуплен ssd на 250Gb. Установленная операционная система — Ubuntu 16.04 .
Немного порывшись в интернете решил, что самым простым способом будет исользовать специально предназначенную для этого программу clonezilla. Таким образом алгоритм перехода на новый диск будет таким

1. Копируем важную информацию на другой носитель/компьютер/облако. Думаю тут понятно что этот шаг обязателен, т.к. пойти может что-то не так и что никто никогда не предугадает )

2. Делаем образ clonezilla live. Для этого можно воспользоваться специальной утилитой tuxboot.
2.1 устанавливаем Tuxboot , на официальном сайте tuxboot написано как это сделать. Я выбрал
установку через ppa.
2.2 Запускаем просто набрав в командной строке tuxboot. Вас спросят пароль администратора.
2.3 Интерфейс будет достаточно понятным, выбираем образ и флешку, и далее ОК

3. Загружаемся с загрузочной флешки (В биосе надо нажать кнопку прерывания для выбора приоритета загрузки, на плате B350M PRO-VDH это F11)
3.1 Далее идут простые вопросы, выбираем с диска на диск и в самом простом случае выбираем все дефолтные настройки. Опять же особенности каждой опции можно узнать на официальном сайте clonezilla .

Готово, теперь у Вас есть копия диска. На этом можно закончить, но добавлю пункт 4 со звёздочкой

4*. Редактирование разбиения диска или партиций. Как было замечено, мне необходимо было перейти на диск большего объёма, бывают случаи что надо например сделать резервную копию на диск меньшего объёма. В таком случае в clonezilla надо выбрать режим «expert mode». И тогда в одном из окон вас спросят про разделы. Выбираем чтобы разделы создавались пропорционально.

Таким образом за 4 шага мне удалось перейти на новый, более быстрый и объёмистый диск на линуксе.

Простой пример нейронной сети на keras и tensorflow с тремя слоями

В данном посте будет показано, как инициализировать нейроннуй сеть на python, задать слои, обучить и получить предсказанные результаты. Пример сделан на python3, а в прослойке между tensorflow установлена библиотека Keras. Чтобы было понятнее — все входные параметры будут подписаны.
И так, нейронные сети очень мощный и не тривиальный инструмент в руках дата-инженера. Однако большинство продвижений в области машинного обучения в последние годы связано именно с нейронными сетями.
Установка:
keras и tensorflow ставится через pip: pip3 install keras и pip3 install —upgrade tensorflow
Отмечу, что здесь мы установили tensorflow для CPU, использование GPU даёт существенный прирост скорости, но и поставить посложнее.

Общий путь
1) Создание модели
2) Компилирование модели
3) Загрузка/подготовка данных
4) Обучение нейронной сети
5) Предсказание

Импорт библиотек:
import numpy as np
# Для создания простых моделей используют Sequential,
# При использовании Sequential достаточно добавить несколько своих слоев.
# Для более сложных моделей уже надо будет использовать Functional API
from keras.models import Sequential
from keras.layers import Dense # Dense — один из типов слоёв в Keras для создания слоя нейронов

Использовать будем бинарную классификацию, т.е. по набору фич надо определить принадлежит ли объект классу или нет.
Данные можете взять свои или например из этого файла data.txt. В нём есть 8 фич, а последний столбец показывает принадлежность классу

from keras.models import Sequential
from keras.layers import Dense
import numpy as np

# загружаем данные с фичами
dataset = np.loadtxt("data.txt", delimiter=",")
# Первые 8 столбцов в примере отвечают за фичи, последний же за класс, разбиваем 
X = dataset[:,0:8]
Y = dataset[:,8]

# Создаём модель!
model = Sequential()
# Добавляем первый слой Dense, первое число 12 - это количество нейронов, 
# input_dim - количество фич на вход
# activation -  функция активации, полулинейная функция max(x, 0) 
# именно полулинейные функции позволяют получать нелинейные результаты с минимальными затратами
model.add(Dense(12, input_dim=8, activation='relu'))
# добавляем второй слой с 8ю нейронами
model.add(Dense(8, activation='relu'))
# на выходе при бинарной классификации, функцию активации чаще всего используют sigmoid , реже softmax
# Компилирование модели. binary_crossentropy - опять же не случайно, а т.к. у нас два класса.
# Метрика accuracy используется практически для всех задач классификации
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

# Наконец дошли до обучения модели, X и Y - понятно, 
# epoch - максимальное количество эпох до остановки
# batch_size - сколько объектов будет загружаться за итерацию
model.fit(X, Y, epochs=15, batch_size=10,  verbose=2)
# Предсказание
predictions = model.predict(X)

Создание высокоточной нейронной сети - непростое задание. Порой хорошо работающие сетки получают случайно, и сложно объснить почему именно они хорошо работают. Поэтому дальше можете поиграть с разными параметрами. Заглядывая наперед - один из способов подбора гиперпараметров нейронной сети - использование библиотеки hyperopt, которая пытается сделать предсказать результирующую функцию, вместо перебора всех параметров, т.к. перебор параметров может быть уж сильно долгим.
Таким образом на выходе мы получаем обученную нейронную сеть на keras . Для использования этой сети в будущем, проще всего использовать model.save(filepath) . Обращу внимание, что picke не рекомендуется. А для загрузки сохраненной ранее модели: keras.models.load_model(filepath).