Как решить или определить проблемы в нейронных сетях, которые можно увидеть на графиках Tensorboard - PullRequest
0 голосов
/ 27 августа 2018

Я создал свой собственный набор данных с 5000 точками данных. Используя эти данные, я создал сеть, чтобы тренироваться с одним скрытым слоем.

  • входной слой содержит 3 входных нейрона
  • В скрытом слое 100 нейронов
  • выходной слой имеет 3 нейрона

Я использовал функцию активации тангенса-сигмоида (tanh) для скрытых нейронов и функцию активации лайнера для выходного слоя. Я использовал тензорную доску, чтобы визуализировать результат на предмет точности и потерь.

Проблема в том, что мои графики (посмотрите на рисунок) очень размыты и означают меньше. И я не получу точность более 40%. И сеть не похоже на наклон.

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

import random
import math
import csv
import numpy as np
from matplotlib import pyplot as plt
from sklearn import preprocessing
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.callbacks import TensorBoard


linkLength = 2
def Xe (a,b,c):
    return linkLength*math.cos(a)+linkLength*math.cos(a+b)+linkLength*math.cos(a+b+c)
def Ye (e,f,g):
    return linkLength*math.sin(e) + linkLength*math.sin(e + f) + linkLength*math.sin(e + f + g)
def tita (h,i,j):
      return math.degrees(h)+math.degrees(i)+math.degrees(j)

Q1 = []
Q2 = []
Q3 = []
posX = []
posY = []
titaEnd = []

# data set creation 
for i in range (0,5000):
    q1= round(random.uniform(0,math.pi),2)
    q2= round(random.uniform(-math.pi,0),2)
    q3= round(random.uniform(-math.pi/2, math.pi/2), 2)
    Q1.append(q1)
    Q2.append(q2)
    Q3.append(q3)
    posX.append(Xe(q1,q2,q3))
    posY.append(Ye(q1,q2,q3))
    titaEnd.append(tita(q1,q2,q3))



for i in range(0,len(posX)):
    plt.plot([posX[i],posX[i]+0.2*math.cos(math.radians(titaEnd[i]))],[posY[i],posY[i]+0.2*math.sin(math.radians(titaEnd[i]))],'k-')

plt.scatter(posX,posY)
plt.xlabel("X Axis")
plt.ylabel("Y Axis")
plt.title("data set of 1000 possible endeffector positions and orientations")
plt.show()
dataMat =np.c_[Q1,Q2,Q3,posX,posY,titaEnd]
#removing duplicated end effeector positions
for i in range (0,4999):
    check1 = dataMat[i,3]
    check2 = dataMat[i,4]
    check3 = dataMat[i,5]
    for j in range (0,4999):
        if i != j:
            #print(i,j,'checking..')
            if (dataMat[j,3] == check1 and dataMat[j,4] == check2 and dataMat[j,5] == check3):
                print(i,j,dataMat[j,3],dataMat[j,4],dataMat[j,5])
#Preprocessing
MinMaxNorm = preprocessing.minmax_scale(dataMat,(-1,1))

plt.scatter(MinMaxNorm[:,3],MinMaxNorm[:,4])
plt.title("Preprocessed data")
plt.show()

#print(MinMaxNorm)

data =MinMaxNorm[:,[3,4,5]]
output =MinMaxNorm[:,[0,1,2]]


#Building NN

random.shuffle(data)
random.shuffle(output)

model = keras.Sequential()
model.add(keras.layers.Dense(100, activation ='tanh'))
model.add(keras.layers.Dense(3, activation ='linear'))


NAME = "Trajectry Tracking"
tensorboard = TensorBoard(log_dir="logs/{}".format(NAME))

model.compile(optimizer=tf.train.AdamOptimizer(0.01),loss='mse',metrics=['accuracy'])       # mean squared error

model.fit(data,output, epochs=20, batch_size =40, callbacks=[tensorboard])

model.evaluate(data,output)

#_Tensor Board
#tensorboard --logdir=logs/`     

enter image description here

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