#python #tensorflow #machine-learning #keras #neural-network
#python #тензорный поток #машинное обучение #keras #нейронная сеть
Вопрос:
Я очень новичок в этом, и у меня есть несколько вопросов. У меня есть фрагменты кода нейронной сети, созданной python с keras. Модель используется для анализа настроений. Использовался обучающий набор данных с помеченными данными (sentiment = 1 или 0). Теперь у меня есть несколько вопросов о том, как описать нейронную сеть.
model = Sequential()
model.add(Dense(512, input_shape=(max_words,), activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(256, activation='sigmoid'))
model.add(Dropout(0.5))
model.add(Dense(2, activation='softmax'))
model.compile(loss='categorical_crossentropy',
optimizer='adam',
metrics=['accuracy'])
model.fit(train_x, train_y,
batch_size=32,
epochs=5,
verbose=1,
validation_split=0.1,
shuffle=True)
Я не очень разбираюсь во многих из следующих терминов, поэтому не будьте слишком строги ко мне.
- 1: Есть ли что-нибудь, что делает это типичной моделью для анализа настроений?
- 2: Это «мешок слов»? (Я предполагаю, что да, поскольку данные были предварительно обработаны с использованием токенизатора)
- 3: Это «сверточный»?
- 4: Это глубоко?
- 5: Она плотная — насколько она плотная?
- 6: В чем причина плотности (?) -числа: 512, 256, 2
- 7: Сколько у него слоев (включен / исключен входной и выходной уровни?)
- 8: Является ли это контролируемым / неконтролируемым?
- 9. В чем причина трех разных функций активации ‘relu’, ‘sigmoid’, ‘softmax’ в порядке использования?
Я ценю любую помощь!
Комментарии:
1. Я бы также рекомендовал вам ознакомиться с этим блогом. Это поможет вам закрепить ваши концепции.
Ответ №1:
Categorical Cross Entropy
, которая является функцией потерь для этой нейронной сети, делает ее пригодной для анализа настроений. Перекрестная потеря энтропии возвращает вероятности для разных классов. В вашем случае вам нужны вероятности для двух возможных классов (0
или1
).- Я не уверен, используете ли вы токенизатор, поскольку это не видно из предоставленного вами кода, но если да, то да, это плохая модель слов. Модель пакета слов по сути создает хранилище для корней слов, которые у вас есть в вашем тексте. Из Википедии, если следующий ваш текст:
Джон любит смотреть фильмы. Мэри тоже любит фильмы.
тогда лук для этого текста будет:
{«Джон»: 1, «нравится»: 2, «кому»: 1, «смотреть»: 1, «фильмы»: 2, «Мэри»: 1, «тоже»: 1};
- Используемая вами сетевая архитектура не является сверточной, скорее это модель прямой связи, которая соединяет все блоки из одного уровня со всеми блоками в следующем, обеспечивая скалярное произведение значений из двух слоев.
- Не существует единого принятого определения глубины сети. Но, как правило, если сеть имеет более 2 средних уровней (слои, исключая входной и выходной уровни), то ее можно рассматривать как глубокую сеть.
- В приведенном выше коде
Dense
отражается тот факт, что все блоки на первом уровне (512) подключены ко всем другим блокам на следующем уровне, т.Е. В общей сложности 512×256 соединений между первым и вторым уровнями. - Да, соединения между 512 блоками на первом уровне и 256 блоками на втором уровне, приводящие к размерной матрице параметров 512×256, делают ее плотной. Но использование
Dense
здесь больше с точки зрения API, а не семантики. Аналогично, матрица параметров между вторым и третьим уровнями будет иметь размерность 256×2. - Если вы исключите входной уровень (имеющий 512 единиц) и выходной уровень (имеющий 2 возможных выхода, т. Е. 0/1), То ваша сеть здесь имеет один уровень с 256 единицами.
- Эта модель контролируется, поскольку задача анализа настроений имеет выходные данные (положительные или отрицательные), связанные с каждой входной точкой данных. Вы можете видеть этот вывод как супервизор сети, указывающий, имеет ли точка данных положительное или отрицательное отношение. Неконтролируемая задача не имеет выходного сигнала, связанного с точками данных.
- Используемые здесь функции активации служат для обеспечения нелинейности вычислений сети. Чуть подробнее,
sigmoid
обладает приятным свойством, что его выходные данные могут быть интерпретированы как вероятности. Итак, если сеть выдает 0,89 для точки данных, то это будет означать, что модель оценивает эту точку данных как положительную с вероятностью 0,89. Использование sigmoid, вероятно, предназначено для учебных целей, поскольку блоки активации ReLU предпочтительнее sigmoid / tanh из-за лучших свойств сходимости, и я не вижу убедительной причины использовать sigmoid вместо ReLU.
Комментарии:
1. Большое вам спасибо. Это отвечает на все мои вопросы. Большое спасибо, что нашли время!