Нелинейная классификация с тензорным потоком

Я новичок в машинном обучении и Tensorflow и хочу выполнить простую двумерную классификацию данных, которые нельзя разделить линейно.

Текущий результат С левой стороны вы можете увидеть обучающие данные для модели. Справа показано, что предсказывает обученная модель.

На данный момент я переоснащаю свою модель, поэтому в модель подаются все возможные входные данные. Моим ожидаемым результатом будет очень высокая точность, поскольку модель уже «знает» каждый ответ. К сожалению, глубокая нейронная сеть, которую я использую, может разделять только линейным делителем, что не соответствует моим данным.

Вот как я тренирую свою модель:

def testDNN(data):
  """ 
  * data is a list of tuples (x, y, b), 
  * where (x, y) is the input vector and b is the expected output
  """
  # Build neural network
  net = tflearn.input_data(shape=[None, 2])

  net = tflearn.fully_connected(net, 100)
  net = tflearn.fully_connected(net, 100)
  net = tflearn.fully_connected(net, 100)


  net = tflearn.fully_connected(net, 2, activation='softmax')
  net = tflearn.regression(net)

  # Define model
  model = tflearn.DNN(net)

  # check if we already have a trained model
  # Start training (apply gradient descent algorithm)
  model.fit(
    [(x,y) for (x,y,b) in data], 
    [([1, 0] if b else [0, 1]) for (x,y,b) in data], 
    n_epoch=2, show_metric=True)

  return lambda x,y: model.predict([[x, y]])[0][0]

Большая часть взята из примеров tflearn, так что я не совсем понимаю, что делает каждая строчка.


person RincewindWizzard    schedule 06.06.2017    source источник
comment
Попробуйте увеличить n_epoch?   -  person YLJ    schedule 06.06.2017
comment
Увеличение n_epoch не меняет точность, которая составляет около 50 %. как подбрасывание монеты.   -  person RincewindWizzard    schedule 06.06.2017
comment
не уверен, что это конкретный выбор модели, который вы не хотите, чтобы нелинейность следовала за вашими первоначальными тремя линейными слоями, или что-то, что tf-learn ставит по умолчанию (я мало знаю о tf-learn), но наличие нелинейности должно помочь .   -  person Akash    schedule 07.06.2017


Ответы (1)


Вам нужна функция активации в вашей сети для нелинейности. Функция активации — это способ, с помощью которого нейронная сеть может соответствовать нелинейной функции. Tflearn по умолчанию использует линейную активацию, вы можете изменить ее на «сигмоидальную» и посмотреть, улучшатся ли результаты.

person squadrick    schedule 07.06.2017