Какво е Keras? Обяснен е API на дълбоката невронна мрежа

Въпреки че дълбоките невронни мрежи са най-яростните, сложността на основните рамки е пречка за тяхното използване за разработчици, нови за машинното обучение. Има няколко предложения за подобрени и опростени приложни програмни интерфейси (API) на високо ниво за изграждане на модели на невронни мрежи, като всички те изглеждат подобни от разстояние, но показват разлики при по-внимателно проучване.

Keras е един от водещите API на невронни мрежи на високо ниво. Той е написан на Python и поддържа множество механизми за изчисляване на невронни мрежи от задния край.

Keras и TensorFlow

Като се има предвид, че проектът за TensorFlow прие Keras като програмен интерфейс на високо ниво за предстоящото пускане TensorFlow 2.0, Keras изглежда да е по- победител, ако не непременно на победителя. В тази статия ще изследваме принципите и изпълнението на Keras, с поглед към разбирането защо това е подобрение спрямо API за дълбоко обучение на ниско ниво.

Дори в TensorFlow 1.12, официалният урок „Започнете с TensorFlow“ използва API на Keras на високо ниво, вграден в TensorFlow, tf.keras . За разлика от тях, API на TensorFlow Core изисква работа с изчислителни графики, тензори, операции и сесии на TensorFlow, някои от които могат да бъдат трудни за разбиране, когато тепърва започвате да работите с TensorFlow. Има някои предимства при използването на API на ниско ниво TensorFlow Core, най-вече при отстраняване на грешки, но за щастие можете да комбинирате API на високо ниво и ниско ниво TensorFlow, ако е необходимо.

Принципи на Керас

Keras е създаден, за да бъде лесен за използване, модулен, лесен за разширяване и да работи с Python. API е „проектиран за хора, а не за машини“ и „следва най-добрите практики за намаляване на когнитивното натоварване“.

Невронните слоеве, разходните функции, оптимизаторите, схемите за инициализация, функциите за активиране и схемите за регулиране са самостоятелни модули, които можете да комбинирате, за да създадете нови модели. Новите модули са лесни за добавяне като нови класове и функции. Моделите са дефинирани в Python код, а не отделни конфигурационни файлове на модели.

Защо Keras?

Най-големите причини да използвате Keras произтичат от неговите ръководни принципи, преди всичко тази за удобството на потребителя. Освен лекотата на обучение и лекотата на изграждане на модели, Keras предлага предимствата на широкото възприемане, поддръжка за широк спектър от възможности за внедряване на производството, интеграция с поне пет задни устройства (TensorFlow, CNTK, Theano, MXNet и PlaidML), и силна подкрепа за множество графични процесори и разпределено обучение. Освен това Keras е подкрепен от Google, Microsoft, Amazon, Apple, Nvidia, Uber и други.

Keras назад завършва

Keras Proper не извършва собствени операции на ниско ниво, като тензорни продукти и конволюции; за това се разчита на back-end двигател. Въпреки че Keras поддържа множество back-end двигатели, неговият основен (и по подразбиране) back end е TensorFlow, а основният му поддръжник е Google. API Keras се предлага опакован в TensorFlow as tf.keras, който, както беше споменато по-рано, ще стане основният TensorFlow API от TensorFlow 2.0.

За да промените задните краища, просто редактирайте $HOME/.keras/keras.jsonфайла си и посочете друго име на заден план, като theanoили CNTK. Като алтернатива можете да замените конфигурирания заден край, като дефинирате променливата на околната среда KERAS_BACKEND, или във вашата обвивка, или в кода на Python, като използвате os.environ["KERAS_BACKEND"]свойството.

Модели Keras

В модела е основната Keras структурата на данните. В Keras има два основни типа модели: Sequentialмоделът и Modelкласът, използван с функционалния API.

Модели Keras Sequential

В Sequentialмодела е линейна пакет слоеве и слоевете могат да бъдат описани много просто. Ето пример от документацията на Keras, която използва model.add()за дефиниране на два плътни слоя в Sequentialмодел:

внос кери

от keras.models импортиране на Sequential

от keras.layers импортират Плътно

# Създайте последователен модел с плътни слоеве, като използвате метода за добавяне

#Dense изпълнява операцията:

# изход = активиране (точка (вход, ядро) + пристрастие)

#Units са размерността на изходното пространство за слоя,

# което е равно на броя на скритите единици

# Функциите за активиране и загуба могат да бъдат определени чрез низове или класове

model.add (Плътно (единици = 10, активиране = "softmax"))

# Методът на компилиране конфигурира процеса на обучение на модела

              оптимизатор = "sgd",

              показатели = ['точност'])

# Подходящият метод прави обучението на партиди

# x_train и y_train са масиви на Numpy - точно като в API на Scikit-Learn.

# Методът за оценка изчислява загубите и показателите

# за обучения модел

# Методът за предсказване прилага обучения модел към входовете

# за генериране на изходи

класове = model.predict (x_test, batch_size = 128)

Коментарите в горния код заслужават да бъдат прочетени. Също така си струва да се отбележи колко малко пробив има в действителния код в сравнение с, да речем, ниско ниво TensorFlow API. Всяко определение на слоя изисква един ред код, компилацията (дефиниция на процеса на обучение) взема един ред код, а монтирането (обучение), оценяването (изчисляване на загубите и показателите) и прогнозирането на резултатите от обучения модел вземат по един ред код .

Функционален API на Keras

Моделът Keras Sequential е прост, но ограничен по топология на модела. Функционалният API на Keras е полезен за създаване на сложни модели, като модели с много входове / много изходи, насочени ациклични графики (DAG) и модели със споделени слоеве.

Функционалният API използва същите слоеве като последователния модел, но осигурява по-голяма гъвкавост при сглобяването им. Във функционалния API първо дефинирате слоевете и след това създавате Модела, компилирате го и го поставяте (обучавате). Оценката и прогнозирането по същество са същите като при последователен модел, така че са пропуснати в примерния код по-долу.

от keras.layers импортира Input, Dense

от keras.models Модел за импортиране

# Това връща тензор

# екземпляр на слой се извиква на тензор и връща тензор

x = плътен (64, активиране = "relu") (x)

прогнози = Плътно (10, активиране = "softmax") (x)

# Това създава модел, който включва

# входния слой и три плътни слоя

model.compile (оптимизатор = 'rmsprop',

              загуба = "categorical_crossentropy",

              показатели = ['точност'])

model.fit (данни, етикети)  # започва обучение

Керасови слоеве

В предишните примери използвахме само Denseслоеве. Keras има богат избор от предварително дефинирани типове слоеве и също така поддържа писане на собствени слоеве.

Основните слоеве включват Dense(точков продукт плюс пристрастия), Activation(трансферна функция или форма на неврон), Dropout(произволно задайте част от входните единици на 0 при всяка актуализация на обучението, за да се избегне прекалено монтиране), Lambda(обвийте произволен израз като Layerобект) и няколко други . Конволюционните слоеве (използването на филтър за създаване на карта на характеристиките) се изпълняват от 1D до 3D и включват най-често срещаните варианти, като изрязване и транспонирани слоеве на конволюцията за всяка измерение. 2D конволюцията, която е вдъхновена от функционалността на зрителната кора, обикновено се използва за разпознаване на изображения.

Обединяването (намаляването на мащаба) на слоевете се извършва от 1D до 3D и включва най-често срещаните варианти, като макс и средно обединяване. Локално свързаните слоеве действат като конволюционни слоеве, с изключение на това, че тежестите са споделени. Рецидивиращите слоеве включват прости (напълно свързани рецидиви), затворени, LSTM и други; те са полезни за обработка на езика, наред с други приложения. Шумовите слоеве помагат да се избегне прекалено монтиране.

Набори от данни на Keras

Keras предоставя седем от общите набори от данни за дълбоко обучение чрез keras.datasetsкласа. Това включва малки цветни изображения cifar10 и cifar100, прегледи на филми от IMDB, теми на новините на Reuters, ръкописни цифри MNIST, модни изображения MNIST и цени на жилищата в Бостън.

Приложения и примери на Keras

Keras предлага и десет добре познати модела, наречени Keras Applications, предварително обучени срещу ImageNet: Xception, VGG16, VGG19, ResNet50, InceptionV3, InceptionResNetV2, MobileNet, DenseNet, NASNet, MobileNetV2TK Можете да ги използвате, за да предскажете класификацията на изображенията, да извлечете характеристики от тях и да прецизирате моделите на различен набор от класове.

Между другото, фината настройка на съществуващите модели е добър начин за ускоряване на обучението. Например можете да добавяте слоеве, както желаете, да замразите базовите слоеве, за да обучите новите слоеве, след това да размразите някои от основните слоеве, за да фино настроите обучението. Можете да замразите слой, като зададете layer.trainable = False.

Хранилището за примери Keras съдържа повече от 40 примерни модела. Те обхващат зрителни модели, текст и последователности и генеративни модели.

Разполагане на Keras

Моделите на Keras могат да бъдат разгърнати в широк спектър от платформи, може би повече от всяка друга рамка за дълбоко обучение. Това включва iOS чрез CoreML (поддържа се от Apple); Android, чрез изпълнението на Android TensorFlow; в браузър, чрез Keras.js и WebDNN; в Google Cloud, чрез TensorFlow-Serving; в заден край на уебсайт на Python; на JVM, чрез импортиране на модел DL4J; и на Raspberry Pi.

За да започнете с Keras, прочетете документацията, разгледайте хранилището на кодове, инсталирайте TensorFlow (или друг бекенд механизъм) и Keras и изпробвайте урока Първи стъпки за модела Keras Sequential. Оттам можете да преминете към други уроци и в крайна сметка да разгледате примерите на Keras.