Автор оригинала: Pankaj Kumar.
Что такое керас?
KERAS – это высокоуровневые нейронные сети API. Он написан в Python и может работать на вершине Theano, Tensorflow или CNTK. Это было разработано с идеей:
KERAS – это удобная, расширяемая и модульная библиотека, которая облегчает прототипирование легко и быстро. Он поддерживает сверточные сети, рекуррентные сети и даже комбинацию обоих.
Первоначальное развитие KERAS было частью исследования проекта OneiROS (открытая операционная система неврологической интеллектуальной робота).
Почему керас?
Сегодня имеются бесчисленные структуры глубокого обучения, но есть некоторые из областей, в которых Керас оказался лучше, чем другие альтернативы.
KERAS ориентирован на минимальные требования к действию пользователей, когда общие случаи использования касаются, если пользователь делает ошибку, прозрачную и доступную обратную связь предоставляется. Это делает Keras Легко учиться и использовать Отказ
Когда вы хотите поставить свои модели KERAS в некоторое приложение, вам нужно развернуть его на других платформах, которые сравнительно просты, если вы используете KERAS. Он также поддерживает несколько бэкэндов, а также позволяет переносимость по всему спинам топливо. Вы можете тренировать, используя одну бэкэнд и загрузить его другим.
Он получил сильную спину со встроенной поддержкой GPU, она также поддерживает распределенную тренировку.
Керс Учебник
Установка керас
Нам нужно установить одну из бэкэндских двигателей, прежде чем мы на самом деле добраться до установки KERAS. Пойдем и установлю любой из Tensorflow или Theano или CNTK модули.
Теперь мы готовы установить керас. Мы можем либо использовать монтаж PIP или клонировать репозиторий из Git. Чтобы установить использование PIP, откройте терминал и запустите следующую команду:
pip install keras
В случае установки PIP не работает или вы хотите другой метод, вы можете клонировать репозиторий Git, используя
git clone https://github.com/keras-team/keras.git
После клонирования переходите в клонированный каталог и запустите:
sudo python setup.py install
Используя керас
Чтобы использовать KERAS в любом из ваших сценариев Python, нам просто нужно импортировать его, используя:
import keras
Плотно подключенная сеть
Последовательная модель, вероятно, является лучшим выбором для создания такой сети, но мы просто начинаем, так что это лучший выбор, чтобы начать с чего-то действительно простого:
from keras.layers import Input, Dense from keras.models import Model # This returns a tensor inputs = Input(shape=(784,)) # a layer instance is callable on a tensor, and returns a tensor x = Dense(64, activation='relu')(inputs) x = Dense(64, activation='relu')(x) predictions = Dense(10, activation='softmax')(x) # This creates a model that includes # the Input layer and three Dense layers model = Model(inputs=inputs, outputs=predictions) model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])
Теперь, когда вы видели, как создать простую плотно подключенную сетевую модель, вы можете тренировать ее с вашими тренировочными данными и могут использовать его в своем глубоком модуле обучения.
Последовательная модель
Модель является основной структурой данных KERAS. Самый простой тип модели представляет собой линейную стопку слоев, мы называем его последовательной моделью. Давайте поставим наши руки в код и попробуйте построить один:
# import required modules from keras.models import Sequential from keras.layers import Dense import numpy as np # Create a model model= Sequential() # Stack Layers model.add(Dense(units=64, activation='relu', input_dim=100)) model.add(Dense(units=10, activation='softmax')) # Configure learning model.compile(loss='categorical_crossentropy', optimizer='sgd',metrics=['accuracy']) # Create Numpy arrays with random values, use your training or test data here x_train = np.random.random((64,100)) y_train = np.random.random((64,10)) x_test = np.random.random((64,100)) y_test = np.random.random((64,10)) # Train using numpy arrays model.fit(x_train, y_train, epochs=5, batch_size=32) # evaluate on existing data loss_and_metrics = model.evaluate(x_test, y_test, batch_size=128) # Generate predictions on new data classes = model.predict(x_test, batch_size=128)
Давайте запустим программу, чтобы увидеть результаты:
Давайте попробуем еще несколько моделей и как создавать их, как остаточное соединение на слое свертки:
from keras.layers import Conv2D, Input # input tensor for a 3-channel 256x256 image x = Input(shape=(256, 256, 3)) # 3x3 conv with 3 output channels (same as input channels) y = Conv2D(3, (3, 3), padding='same')(x) # this returns x + y. z = keras.layers.add([x, y])
Общее видение модели
Модель Shared Vision помогает классифицировать, являются ли две цифры Mnist такими же цифрами или различными цифрами, повторно используя тот же модуль обработки изображений на двух входах. Давайте создадим один, как показано ниже.
from keras.layers import Conv2D, MaxPooling2D, Input, Dense, Flatten from keras.models import Model import keras # First, define the vision modules digit_input = Input(shape=(27, 27, 1)) x = Conv2D(64, (3, 3))(digit_input) x = Conv2D(64, (3, 3))(x) x = MaxPooling2D((2, 2))(x) out = Flatten()(x) vision_model = Model(digit_input, out) # Then define the tell-digits-apart model digit_a = Input(shape=(27, 27, 1)) digit_b = Input(shape=(27, 27, 1)) # The vision model will be shared, weights and all out_a = vision_model(digit_a) out_b = vision_model(digit_b) concatenated = keras.layers.concatenate([out_a, out_b]) out = Dense(1, activation='sigmoid')(concatenated) classification_model = Model([digit_a, digit_b], out)
Визуальный вопрос, отвечая на модель
Давайте создадим модель, которая может выбрать правильный ответ на одно слово на натуральный язык о картинке.
Это можно сделать, кодируя вопрос и изображение на два отдельных вектора, объединяя их обоих, так и обучение на вершине логистической регрессии над каким-то словарным запасом потенциальных ответов. Давайте попробуем модель:
from keras.layers import Conv2D, MaxPooling2D, Flatten from keras.layers import Input, LSTM, Embedding, Dense from keras.models import Model, Sequential import keras # First, let's define a vision model using a Sequential model. # This model will encode an image into a vector. vision_model = Sequential() vision_model.add(Conv2D(64, (3, 3), activation='relu', padding='same', input_shape=(224, 224, 3))) vision_model.add(Conv2D(64, (3, 3), activation='relu')) vision_model.add(MaxPooling2D((2, 2))) vision_model.add(Conv2D(128, (3, 3), activation='relu', padding='same')) vision_model.add(Conv2D(128, (3, 3), activation='relu')) vision_model.add(MaxPooling2D((2, 2))) vision_model.add(Conv2D(256, (3, 3), activation='relu', padding='same')) vision_model.add(Conv2D(256, (3, 3), activation='relu')) vision_model.add(Conv2D(256, (3, 3), activation='relu')) vision_model.add(MaxPooling2D((2, 2))) vision_model.add(Flatten()) # Now let's get a tensor with the output of our vision model: image_input = Input(shape=(224, 224, 3)) encoded_image = vision_model(image_input) # Next, let's define a language model to encode the question into a vector. # Each question will be at most 100 word long, # and we will index words as integers from 1 to 9999. question_input = Input(shape=(100,), dtype='int32') embedded_question = Embedding(input_dim=10000, output_dim=256, input_length=100)(question_input) encoded_question = LSTM(256)(embedded_question) # Let's concatenate the question vector and the image vector: merged = keras.layers.concatenate([encoded_question, encoded_image]) # And let's train a logistic regression over 1000 words on top: output = Dense(1000, activation='softmax')(merged) # This is our final model: vqa_model = Model(inputs=[image_input, question_input], outputs=output) # The next stage would be training this model on actual data.
Если вы хотите узнать больше о визуальном вопросе, отвечающем (VQA), ознакомьтесь с этим Руководство для начинающих к VQA Отказ
Обучение нейронной сети
Теперь, когда мы видели, как построить разные модели, используя KERAS, давайте поставить вещи вместе и работать в полном примере. В следующем примере поезда нейронная сеть на множестве данных Mnist:
import keras from keras.datasets import mnist from keras.models import Sequential from keras.layers import Dense, Dropout from keras.optimizers import RMSprop batch_size = 128 num_classes = 10 epochs = 20 # the data, shuffled and split between train and test sets (x_train, y_train), (x_test, y_test) = mnist.load_data() x_train = x_train.reshape(60000, 784) x_test = x_test.reshape(10000, 784) x_train = x_train.astype('float32') x_test = x_test.astype('float32') x_train /= 255 x_test /= 255 print(x_train.shape[0], 'train samples') print(x_test.shape[0], 'test samples') # convert class vectors to binary class matrices y_train = keras.utils.to_categorical(y_train, num_classes) y_test = keras.utils.to_categorical(y_test, num_classes) model = Sequential() model.add(Dense(512, activation='relu', input_shape=(784,))) model.add(Dropout(0.2)) model.add(Dense(512, activation='relu')) model.add(Dropout(0.2)) model.add(Dense(num_classes, activation='softmax')) model.summary() # Compile model model.compile(loss='categorical_crossentropy', optimizer=RMSprop(), metrics=['accuracy']) history = model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, verbose=1, validation_data=(x_test, y_test)) score = model.evaluate(x_test, y_test, verbose=0) # Print the results print('Test loss:', score[0]) print('Test accuracy:', score[1])
Давайте запустим этот пример и жди результатов: вывод показывает только последнюю часть, для программы может потребоваться несколько минут для завершения выполнения в зависимости от машины
Заключение
В этом уроке мы обнаружили, что KERAS – это мощная структура и позволяет пользователю создавать прототипы и что слишком быстро. Мы также видели, как могут быть созданы разные модели с использованием KERAS. Эти модели могут быть использованы для добычи функций, тонкой настройки и прогнозирования. Мы также видели, как обучить нейронную сеть, используя Керы.
KERAS популярен с другими рамками, и это одна из самых популярных рамх на Kaggle Отказ