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

Моя модель - это попытка предсказать значения в линейной регрессии после y = 2x + 5. Поэтому мои тренировочные данные напоминают следующее:

x_train = [0, 1, 2, 3, 4, ...] and y_train = [5, 7, 9, 11, 13, ...]   

Моя модель Keras выглядит следующим образом:

`model = tf.keras.Sequential([
    tf.keras.layers.Dense(16, activation='relu', input_dim=1),
    tf.keras.layers.Dense(1, activation='linear')
])
model.compile(loss='mean_squared_error', optimizer='adam', metrics=['mse'])
model.fit(x_train, y_train, epochs=1000, batch_size=10)`

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

for l in model.layers: print(l.get_weights())

[array([[-0.10382611,  0.48899287, -0.36912352, -0.11604425,  0.03658517,
     0.546786  , -0.0094437 ,  0.5393126 , -0.36325318, -0.20389882,
    -0.00112574, -0.39811927, -0.25433052, -0.16315842,  0.6172162 ,
    -0.47300738]], dtype=float32), array([ 0.        ,  1.1705374 ,  
     0.        ,  0.        , -0.41323203, 0.97515434, 0.        , 
     0.99699414,  0.        ,  0.        ,-0.2316811 , 0.        ,
     0.        ,  0.        ,  1.4638424 , 0.       ], dtype=float32)]
[array([[-0.30404267],
   [ 0.91265625],
   [ 0.3578334 ],
   [-0.23462006],
   [-0.33843294],
   [ 1.080244  ],
   [-0.5933689 ],
   [ 1.0348322 ],
   [ 0.47716653],
   [ 0.18852347],
   [-0.21219982],
   [ 0.45529807],
   [ 0.39576346],
   [-0.05013525],
   [ 0.67550814],
   [-0.19761673]], dtype=float32), array([0.7426254], dtype=float32)]

я достигаю следующих весов и смещений. У меня сложилось впечатление, что если бы я бросил значение 10, я бы ожидал значение 25в качестве вывода (или очень близко). Однако, когда я пытаюсь сделать математику самостоятельно, я не так близок. В настоящее время я понимаю, как это должно работать:

  1. Умножьте n-й элемент массива весов на 10 и добавьте n-й элемент массива смещения
  2. Возьмите n-й результат и умножьтес помощью n-го элемента второго массива весов и добавления n-го элемента второго массива смещения
  3. Результат должен быть 25 (или очень близко)

Не понимаю, как это должноработа

1 Ответ

0 голосов
/ 15 октября 2019

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

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