Как изменить последний слой в Keras, чтобы получать логиты, а не вероятности из модели? - PullRequest
0 голосов
/ 13 июня 2019

Моя цель - получить логиты из модели нейронной сети Keras.Я читаю здесь: Керас - как получить ненормализованные логиты вместо вероятностей

Что мне нужно изменить последний уровень активации на "линейный".Вот мой код

from __future__ import absolute_import, division, print_function

import tensorflow as tf
from tensorflow import keras

import numpy as np
import matplotlib.pyplot as plt

#Preprocessing
fashion_mnist = keras.datasets.fashion_mnist

(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()
class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat', 
               'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']
train_images = train_images / 255.0
test_images = test_images / 255.0
#Preprocessing

#Generate the Model
model = keras.Sequential([
    keras.layers.Flatten(input_shape=(28, 28)),
    keras.layers.Dense(128, activation=tf.nn.relu),
    keras.layers.Dense(10, activation=tf.nn.linear)
])

model.compile(optimizer='adam', 
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])
model.fit(train_images, train_labels, epochs=5)

Проблема возникает в этой строке.Есть ли лучший способ получить логиты?Если нет, то как мне сделать активацию линейной?

keras.layers.Dense(10, activation=tf.nn.linear)

Ответы [ 2 ]

0 голосов
/ 14 июня 2019

Использование линейной активации является правильным для получения логитов. При разработке моделей keras используйте активации из keras.

Заменить

keras.layers.Dense(128, activation=tf.nn.relu),
keras.layers.Dense(10, activation=tf.nn.linear)

с

keras.layers.Dense(128, activation=keras.activations.relu),  
keras.layers.Dense(10, activation=keras.activations.linear)

В качестве альтернативы, если не указать активацию, по умолчанию используется значение linear.

keras.layers.Dense(10)
0 голосов
/ 14 июня 2019

Вы можете использовать Activation слой

#Generate the Model
model = keras.Sequential([
    keras.layers.Flatten(input_shape=(28, 28)),
    keras.layers.Dense(128, activation=tf.nn.relu),
    keras.layers.Dense(10, activation=None),
    keras.layers.Activation('relu')
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...