когда нам не нужна функция активации?

Я написал очень простую модель тензорного потока, в которой я хочу предсказать число:

import tensorflow as tf
import numpy as np


def HW_numbers(x):
    y = (2 * x) + 1
    return y

x = np.array([1.0,2.0,3.0,4.0,5.0,6.0,7.0], dtype=float)
y = np.array(HW_numbers(x))

model = tf.keras.models.Sequential([tf.keras.layers.Dense(units=1,input_shape=[1])])
model.compile(optimizer='sgd',loss='mean_squared_error')
model.fit(x,y,epochs = 30)

print(model.predict([10.0])) 

Этот код выше работает нормально. Но если я добавлю функцию активации в слой Dense, прогноз станет странным. Я пробовал relu, sigmoid, tanh и т. Д.

У меня вопрос, почему это так? Что именно делает функция активации на этом единственном слое, что нарушает предсказание? Я использовал Tensorflow 2.0


person Aditya    schedule 29.06.2020    source источник


Ответы (2)


В настоящее время вы изучаете линейную функцию. Поскольку это можно описать одним нейроном, вам просто нужен один нейрон, чтобы изучить функцию. С другой стороны, функция активации:

чтобы изучить и понять что-то действительно сложное и нелинейное комплексное функциональное сопоставление между входами и переменной ответа. Он привносит в нашу Сеть нелинейные свойства. Их основная цель - преобразовать входной сигнал узла в A-NN в выходной сигнал. Этот выходной сигнал теперь используется как вход на следующем уровне в стеке.

Следовательно, поскольку у вас здесь только один нейрон (конкретный случай), вам не нужно передавать значение на следующий уровень. Другими словами, все скрытые, входные и выходные слои объединяются. Следовательно, функция активации бесполезна для вашего случая. Если только вы не хотите принимать решения на основе выходных данных нейрона.

person OmG    schedule 29.06.2020

Ваша сеть состоит всего из одного нейрона. Таким образом, без функции активации он умножает ваш ввод на вес нейронов. Этот вес в конечном итоге сойдется примерно до 2,1.

  • Но с relu в качестве функции активации только положительные номера распространяются по вашей сети. Поэтому, если вес вашего нейрона инициализирован отрицательным числом, вы всегда получите ноль на выходе. Так что с relu у вас есть шанс 50:50 на получение хороших результатов.
  • С функциями активации tanh и сигмовидная , вывод нейрона ограничен [-1,1] и [0, 1] соответственно, поэтому ваш вывод не может быть больше единицы.

Таким образом, для такой маленькой нейронной сети эти функции активации не соответствуют задаче.

person chefhose    schedule 29.06.2020