Что значит иметь больше нейронов, чем битов во входном слое в TensorFlow?

Я создаю подобную модель для ввода 32-битных целых чисел в мой nn:

model = Sequential()
model.add(Dense(32, input_dim=32, activation='relu'))

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

Я задавался вопросом, что также возможно сделать это:

model = Sequential()
model.add(Dense(40, input_dim=32, activation='relu'))

Теперь у меня есть 40 нейронов для 32 бит. Он работает нормально. Но почему это работает и что это значит?

Редактировать: я попытаюсь объяснить это немного дальше. Я хочу ввести 32-битное целое число без знака. Итак, у меня 32 бита. Когда у меня есть 32 нейрона в слое функций/входа, это очень просто:

bit 0 goes into neuron 0
bit 1 goes into neuron 1
...
bit 31 goes into neuron 31

Теперь, когда у меня есть 32 бита и 40 нейронов, это выглядит так:

bit 0 goes into neuron 0
bit 1 goes into neuron 1
...
bit 31 goes into neuron 31
What goes into neuron 32?

На Playground.tensorflow.org вы можете увидеть такие вещи, как sin(x1) в слое признаков. Я хочу знать, как именно рассчитываются эти значения.

«Выход каждого нейрона равен -1, если бит равен 0, и 1, если он равен 1». Хм? Откуда вы взяли эту идею?

xdurch0 09.02.2023 18:40

@xdurch0 Можете ли вы меня исправить?

zomega 09.02.2023 18:42

@xdurch0 Я получил это от площадка.tensorflow.org Цвет между оранжевым и синим. Оранжевый означает -1, а синий означает +1.

zomega 09.02.2023 18:52
Udacity Nanodegree Capstone Project: Классификатор пород собак
Udacity Nanodegree Capstone Project: Классификатор пород собак
Вы можете ознакомиться со скриптами проекта и данными на github .
1
3
122
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Наличие во входном слое большего количества нейронов, чем битов, означает, что нейронная сеть может изучать более сложные представления входных данных за пределами отдельных битов. В приведенном вами примере дополнительные нейроны могут изучать функции более высокого порядка, которые объединяют значения нескольких битов нелинейным образом, позволяя сети фиксировать более сложные отношения между входными переменными. Это может привести к повышению производительности в таких задачах, как классификация или регрессия.

Как именно рассчитываются входные значения? Когда у меня есть 32 бита для 32 нейронов, тогда 1 нейрон получает один бит. Но что, если у меня 32 бита на 40 нейронов? На playground.tensorflow.org есть странные значения вроде sin(x1). Итак, как именно рассчитываются входные значения?

zomega 19.02.2023 09:33

Вы говорите, что они объединены нелинейным образом. Как именно выглядит формула/алгоритм?

zomega 19.02.2023 09:41

Формула или алгоритм, используемый для нелинейного объединения входных данных, зависит от конкретной архитектуры нейронной сети и используемых функций активации.

bugs dev 19.02.2023 10:01

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

bugs dev 19.02.2023 10:01

Веса определяют важность каждого входа, а функция активации вносит нелинейность в выход нейрона.

bugs dev 19.02.2023 10:02

Наиболее часто используемые функции активации включают сигмовидную, ReLU (выпрямленную линейную единицу) и тангенс (гиперболический тангенс). Каждая из этих функций имеет разную форму и поведение и подходит для разных типов задач.

bugs dev 19.02.2023 10:04

Что касается вашего конкретного примера с 32 битами для 40 нейронов, неясно, что вы подразумеваете под «один нейрон получает один бит». Если у вас есть 32 бита для 40 нейронов,

bugs dev 19.02.2023 10:07

вам нужно будет определить, как разделить эти биты между нейронами.

bugs dev 19.02.2023 10:07

Вы говорите, что в целом нейрон принимает взвешенную сумму на входе. Но я думаю, что это не относится к самому первому слою, входному слою (слою функций). «вам нужно будет определить, как разделить эти биты между нейронами». Это именно то, что я хочу знать. Как это определяется? Я знаю, как вычисляются нейроны в скрытом и выходном слое. Это легко (взвешенная сумма). Но я хочу знать это для самого первого слоя (входной слой, также известный как слой функций).

zomega 19.02.2023 11:27

Вы правы в том, что входной слой, который является первым слоем нейронной сети, не выполняет взвешенную сумму своих входов. Вместо этого входной слой просто берет значения входных объектов и передает их следующему слою.

bugs dev 19.02.2023 11:42

Я добавил больше информации к моему вопросу. Взгляни, пожалуйста.

zomega 19.02.2023 11:44

Для самого первого слоя (входной слой) нейроны фактически не выполняют никаких вычислений. Вместо этого каждый нейрон во входном слое просто получает один входной признак из входных данных.

bugs dev 19.02.2023 11:44

Определение того, как разделить входные биты между нейронами во входном слое, обычно выполняется на основе конкретной проблемы и структуры входных данных.

bugs dev 19.02.2023 11:46

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

bugs dev 19.02.2023 11:48
Ответ принят как подходящий

Наличие большего количества нейронов, чем битов, во входном слое в TensorFlow означает, что нейронная сеть предназначена для того, чтобы иметь больше узлов в первом слое, чем количество входных функций. Это может быть полезно в определенных случаях, например, при попытке зафиксировать сложные взаимосвязи между входными данными или при работе с многомерными данными, где многие входные признаки могут быть коррелированы или избыточны.

Когда у вас больше нейронов во входном слое, чем количество входных объектов, дополнительные нейроны получат нулевые значения в качестве входных данных. Эти дополнительные нейроны можно рассматривать как «фиктивные нейроны», которые не вносят никакой значимой информации в сеть, но и не наносят вреда ее производительности.

В вашем примере первые 32 нейрона во входном слое получат входные биты, а оставшиеся 8 нейронов получат нулевые значения. Эти лишние нейроны в данном случае могут быть бесполезны, но и никакого вреда для работы сети они не наносят.

Что касается вашего вопроса о таких функциях, как sin(x1) во входном слое, они не имеют прямого отношения к входным значениям, а вместо этого являются функциями входных значений. В этом случае sin(x1) будет принимать значение синусоидальной функции, примененной к первому входному объекту, x1. Функция будет оцениваться для каждого входного образца, а полученные значения будут подаваться в сеть в качестве входных данных. Это может быть полезно для определенных типов данных, где преобразование входных объектов может помочь сети лучше фиксировать базовые отношения в данных.

Отличный ответ. Можете ли вы предоставить ссылку на документацию о том, что дополнительные нейроны (в моем случае 8 нейронов) инициализируются нулем?

zomega 19.02.2023 18:02

Конечно! В Keras инициализация по умолчанию для весов слоя Dense обычно представляет собой униформную инициализацию Glorot, также известную как инициализация Xavier. Согласно документации Keras (keras.io/api/layers/initializers), стратегия инициализации Xavier отбирает веса из равномерного распределения с центром вокруг нуля.

Abdullah Anwar 20.02.2023 14:51

Другие вопросы по теме