Bootstrap

基于深度神经网络的室内可见光定位算法

项目定位效果展示:

 

平均定位误差是2.5cm

源代码:

import torch
import torch.nn as nn
import torch.utils.data as Data
import torchvision.transforms as transforms
import torch.nn.functional as f
from torch.autograd import Variable
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from matplotlib import mlab
from matplotlib import rcParams
import statsmodels.api as sm
import tkinter as tk
from tkinter import messagebox  # import this to fix messagebox error
import pickle
from tkinter import filedialog
import time  # 用于计算训练时间


global t1, t2, t3, t4
global file_path_TrL
global file_path_TrD
global file_path_TeL
global file_path_TeD



def file_adress_TrD(t1):
    global file_path_TrD
    root = tk.Tk()
    root.withdraw()
    file_path_TrD = filedialog.askopenfilename()
    t1.delete(1.0, tk.END)  # 清空整个框内的数据
    t1.insert('end', str(file_path_TrD))

def file_adress_TrL(t2):
    global file_path_TrL
    root = tk.Tk()
    root.withdraw()
    file_path_TrL = filedialog.askopenfilename()
    t2.delete(1.0, tk.END)
    t2.insert('end', str(file_path_TrL))

def file_adress_TeD(t3):
    global file_path_TeD
    root = tk.Tk()
    root.withdraw()
    file_path_TeD = filedialog.askopenfilename()
    t3.delete(1.0, tk.END)
    t3.insert('end', str(file_path_TeD))


def file_adress_TeL(t4):
    global file_path_TeL
    root = tk.Tk()
    root.withdraw()
    file_path_TeL = filedialog.askopenfilename()
    t4.delete(1.0, tk.END)
    t4.insert('end', str(file_path_TeL))


def save(if_train_new):
    # 处理数据集
    global file_path_TrL
    global file_path_TrD
    global file_path_TeL
    global file_path_TeD
    global t

    if if_train_new:
        TrainLabel = torch.from_numpy(np.loadtxt(str(file_path_TrL), delimiter=',', dtype=np.float32))
        TrainData = torch.from_numpy(np.loadtxt(str(file_path_TrD), delimiter=',', dtype=np.float32))
        TestLabel = np.loadtxt(str(file_path_TeL), delimiter=',', dtype=np.float32)
        TestData = torch.from_numpy(np.loadtxt(str(file_path_TeD), delimiter=',', dtype=np.float32))
        trainlabel = Variable(TrainLabel)
        traindata = Variable(TrainData)
        testdata = Variable(TestData)
    else:
        TrainLabel = torch.from_numpy(np.loadtxt('./dataset/TrainLabel_fromrealworld.csv', delimiter=',', dtype=np.float32))
        TrainData = torch.from_numpy(np.loadtxt('./dataset/TrainData_fromrealworld.csv', delimiter=',', dtype=np.float32))
        TestLabel = np.loadtxt('./dataset/TestLabel_fromrealworld.csv', delimiter=',', dtype=np.float32)
        TestData = torch.from_numpy(np.loadtxt('./dataset/TestData_fromrealworld.csv', delimiter=',', dtype=np.float32))
        trainlabel = Variable(TrainLabel)
        traindata = Variable(TrainData)
        testdata = Variable(TestData)


    # 定义神经网络
    class Net(torch.nn.Module):
        def __init__(self):
            super(Net, self).__init__()
            self.hidden1 = torch.nn.Linear(4, 64)
            self.hidden2 = torch.nn.Linear(64, 32)
            self.hidden3 = torch.nn.Linear(32, 20)
            self.hidden4 = torch.nn.Linear(20, 10)
            self.predict = torch.nn.Linear(10, 3)

        def forward(self, x):
            x = f.relu(self.hidden1(x))
            x = f.relu(self.hidden2(x))
           
;