Шаг 57.
Глубокое обучение на Python. Математические основы нейронных сетей. ... . Повторная реализация первого примера в TensorFlow. Простой класс Dense

    На этом шаге мы приведем реализацию этого класса.

    Ранее вы узнали, что слой Dense реализует следующее преобразование входных данных, где W и b - параметры модели, а activation - поэлементная функция (обычно relu, но в последнем слое - softmax):

output = activation(dot(W, input) + b)

    Реализуем на Python простой класс NaiveDense, создающий две переменные TensorFlow, W и b, и имеющий метод __call__(), который применяет предыдущее преобразование.

import tensorflow as tf


class NaiveDense:
    def __init__(self, input_size, output_size, activation):
        self.activation = activation

        #  Создать матрицу W с формой (input_size, output_size), 
        #  инициализированную случайными значениями
        w_shape = (input_size, output_size) 
        w_initial_value = tf.random.uniform(w_shape, minval=0, maxval=1e-1) 
        self.W = tf.Variable(w_initial_value)

        #  Создать вектор b с формой (output_size,), инициализированный нулями
        b_shape = (output_size,) 
        b_initial_value = tf.zeros(b_shape) 
        self.b = tf.Variable(b_initial_value)


def __call__(self, inputs):
    #  Выполнить прямой проход
    return self.activation(tf.matmul(inputs, self.W) + self.b)


#  Вспомогательный метод для получения весов из слоя
@property
def weights(self):
    return [self.W, self.b]

    На следующем шаге мы рассмотрим простой класс Sequential.




Предыдущий шаг Содержание Следующий шаг