Keras: удивительно сравнить простую нейронную сеть с 2 выходами и 1 выходом

#python #tensorflow #keras #neural-network #regression

#python #тензорный поток #keras #нейронная сеть #регрессия

Вопрос:

Я написал две простые модели для прогнозирования линейных данных. Во-первых, создайте 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()
  

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

Ответ №1:

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