Сеть Tflearn всегда моделирует линейную функцию - PullRequest
0 голосов
/ 05 ноября 2018

Я пытаюсь смоделировать график f (x) = x ^ 2, используя нейронную сеть, я делаю это в tflearn. Но даже при использовании нескольких слоев, когда я рисую некоторые точки из модели, она всегда изображает прямую линию.

import numpy as np
from matplotlib import pyplot

import tflearn

x = list()
y = list()
for i in range(100):
    x.append(float(i))
    y.append(float(i**2))
features = np.array(x).reshape(len(x),1)
labels = np.array(y).reshape(len(y), 1)

g = tflearn.input_data(shape=[None, 1])
g = tflearn.fully_connected(g, 128)
g = tflearn.fully_connected(g, 64)
g = tflearn.fully_connected(g, 1)
g = tflearn.regression(g, optimizer='sgd', learning_rate=0.01,
                        loss='mean_square')

# Model training
m = tflearn.DNN(g)
m.fit(features, labels, n_epoch=100, snapshot_epoch=False)

x = list()
y = list()
for i in range(100):
    x.append(i)
    y.append(float(m.predict([[i]])))

pyplot.plot(x, y)

pyplot.plot(features, labels)

pyplot.show()

plot

Зеленая линия - это график x ^ 2, а синяя линия - модель.

1 Ответ

0 голосов
/ 05 ноября 2018

По умолчанию tflearn.fully_connected имеет activation='linear', поэтому независимо от того, сколько слоев вы сложите, вы можете только приблизить линейную функцию.

Попробуйте другую функцию активации, например tflearn.fully_connected(g, 128, activation='tanh'), и оставьте выходной слой с activation='linear', чтобы он не обрезал ваш вывод.

...