Реализация нейронной сети basi c для прогнозирования y = 2x - PullRequest
1 голос
/ 06 мая 2020

Это линейная функция. Я даю ему следующие данные:

input = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

output = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38]

Я узнал, что без скрытого слоя сеть - это просто перцептрон и, по сути, регресс. Но, скажем, после этого я хочу предсказать y = x ^ 2, что будет нелинейным для аналогичного вывода.

В тензорном потоке вы можете сделать

from __future__ import absolute_import, division, print_function

import pathlib
import pandas as pd
import seaborn as sns

import numpy as np

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers

print(tf.__version__)

xs = np.array([2,4,6,8,10,12,14,16,18,20, 22, 24, 26, 28])
ys = np.array([4,8,12,16,20,24,28,32,36,40, 44, 48, 52, 56])

model = keras.Sequential([
    layers.Dense(64, activation='relu', input_shape=[1]),
    layers.Dense(64, activation='relu'),
    layers.Dense(1)
])


model.compile(loss='mse')
model.fit(xs, ys, epochs = 500)
print(model.predict([30, 31, 32, 33]))

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

В настоящее время я умножаю вектор ввода на случайный вес -> vector_h (Выполнение в функции инициализации)

Вот с чего я начал:

import math        

def sigmoid_activation(x):
  try:
    return 1 / (1 + math.exp(-x))
  except:
    return 0

def sigmoid_derivative(self, x):
    return x * (1 - x)

class NeuralNet:
  def __init__(self, training_input, training_output, testing_input):
    self.training_input = training_input
    self.training_output = training_output
    self.testing_input = testing_input
    self.epoch = 100
    self.weight = [ random.uniform(0, 9) for i in range(len(training_input)) ]

  def neuron(self):
    return sigmoid_activation(sum([ self.training_input[i] * self.weight[i] for i in range(len(self.training_input)) ])) # I am not sure if this is correct.

  def run(self):
    for iteration in range(self.epoch):
      # Not sure how to go from here
      pass

Пара вопросов

  1. Это больше похоже на перцептрон, чем на нейронную сеть?
  2. Я с использованием функции активации, чтобы, когда выход является нелинейной функцией, он мог бы также приблизительно предсказать это.
  3. Нужно ли изменить форму входных данных, чтобы она выглядела как [[1], [2], [3] ]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...