Как мне работать с нейронной сетью? - PullRequest
0 голосов
/ 14 марта 2019

Я новичок в углубленном изучении и использую кера с бэкэндом тензорного потока.

В любом случае, у меня есть тренировочный набор с N входами и выходами ( x_i, y_i ). Моя модель сначала строит нейронную сеть, скажем, F , затем использует функцию g , чтобы получить y . Другими словами, y = g (F (x)) , где F - нейронная сеть, а g - функция, возможно, не обратимая.

Есть ли способ построить такую ​​модель с помощью керас? Для упрощения пусть y = 3xF (x) + x . Я хочу тренировать такую ​​модель без изменений, например, (y_i-x_i) / (3x_i) .

1 Ответ

1 голос
/ 14 марта 2019

Да, вы можете использовать функциональный API Keras для определения вашей модели и использовать внутренний интерфейс Keras для вызова функций для умножения тензоров.Убедитесь, что x и F (x) имеют одинаковую форму, чтобы вы могли их умножить.Вы можете определить лямбда-слои, чтобы гарантировать, что ваш вывод - это слой Keras.

Например, допустим, наша функция F (x) = Sin ((x-1) ^ 2);и мы хотим вычислить x * F (x) + x

Define:

from keras.layers import Input,Lambda
from keras.models import Model
import keras.backend as K

def custom_function(x):
    return K.sin((x-1)*(x-1))+x



def create_model(shape=(10,10,10)):
    x=Input(shape)
    logits=Lambda(custom_function)(x)
    logits= keras.layers.multiply([x,logits])
    logits = keras.layers.add([logits,x])
    model = Model(inputs=x, outputs=logits)
    return model

Все, что вам нужно сделать, это убедиться, что формы согласованы, чтобы мы могли добавить их иумножьте их.

Для получения дополнительной информации о функциональном API смотрите: https://keras.io/models/model/

...