Керас: Удивительно сравнить простую нейронную сеть с 2 выходами и 1 выходом - PullRequest
0 голосов
/ 20 апреля 2019

Я написал две простые модели для прогнозирования линейных данных. Во-первых, создайте 1-выход и работайте правильно, в отличие от второго, который производит 2-выход (но я использую только первый выход).

model1 = Sequential([
    Dense(1, input_shape=(1,))
])

model2 = Sequential([
    Dense(2, input_shape=(1,))
])

Я использую стандартную mse в обоих случаях.

def mse1(y_true, y_pred):
    return K.mean(K.square(y_pred - y_true), axis=-1)

def mse2(y_true, y_pred): 
    return K.mean(K.square(y_pred[:,0] - y_true), axis=-1)

model1.compile(optimizer='adam', loss=mse1)
model2.compile(optimizer='adam', loss=mse2)

model1.fit(np.asarray(range(len(data)),dtype=np.float32), np.asarray(data), epochs=10000, batch_size=100)
model2.fit(np.asarray(range(len(data)),dtype=np.float32), np.asarray(data), epochs=10000, batch_size=100)

out1 = model1.predict(np.asarray(range(len(data))))
out2 = model2.predict(np.asarray(range(len(data))))[:,0]

plt.scatter(range(len(l)), data,  color='r')
plt.scatter(range(len(l)), out1, color='b')
plt.scatter(range(len(l)), out2, color='g') 
plt.show()

Я пытаюсь повторить этот эксперимент несколько раз и всегда получаю один и тот же результат - синий (модель1) работает правильно, но зеленый (модель2) находится ниже большинства точек данных. model1 vs model2

1 Ответ

1 голос
/ 20 апреля 2019

В плотных слоях в модели 1 есть только одна единица, а в модели 2 - две. Это означает, что у вас есть больше параметров для изучения в model2. Модель2 более надежна, чем модель1 в вашем случае. Но обе ваши модели имеют очень мало параметров для изучения. Вы можете увеличить единицы или слои, чтобы улучшить производительность, но будьте осторожны с проблемами переоснащения

...