Artificial Intelligence

PyTorch: MySQL in Tensor einlesen

• Bookmarks: 148 • Comments: 7


Oft werden zum Training neuronaler Netze Daten in Tabellenform aus CSV-Dateien gelesen. Besser ist jedoch das Einlesen von Daten direkt aus MySQL, weil zum Beispiel der Zugriff auf Live-Daten besser funktioniert. In den folgenden Schritten wird gezeigt, wie man Daten aus MySQL liest, diese in Inputs und Outputs, sowie in Trainings- und Testdaten aufteilt und schließlich die Anzahl der Input- und Output Neuronen in variablen schreibt, mit denen das neuronale Netz dann konstruiert werden kann.

Verbindung zur MySQL Datenbank mit dem connector herstellen:

import mysql.connector
mydb = mysql.connector.connect(
  host="localhost",
  user="",
  password="",
  database=""
)

Im MySQL Connector die Tabelle auswählen und den Select Befehl für die Daten festlegen. In diesem Beispiel werden 10 Zeilen aus der Tabelle ausgelesen:

mycursor = mydb.cursor()
SQL = "SELECT * FROM table ORDER BY col DESC LIMIT 0,10"
mycursor.execute(SQL)
myresult = mycursor.fetchall()

Spalten für Inputs und Outputs der Datenbank in Python Lists zuweisen und einlesen. In diesem Beispiel werden die Spalten mit dem Index 0, 2 und 3 als Input und die Spalte mit dem Index 4 als Output zugewiesen (Die for-Funktion muss in Python per Tab eingerückt werden, das lässt sich hier nur nicht richtig darstellen):

alleinputs = []
alleoutputs = []
for x in myresult:
input = []
input.append(x[0])
input.append(x[2])
input.append(x[3])
output = []
output.append(x[4])
alleinputs.append(input)
alleoutputs.append(output)
print(alleinputs)
print(alleoutputs)

Zur Verbesserung des zufälligen Trainingsprozesses werden die Daten durchmischt. Dann erfolgt ein zufälliges Aufteilen der Inputs und Outputs in Trainings- und Testdaten mit Vorgabe des Verhältnisses:

from sklearn.model_selection import train_test_split
import numpy as np
RANDOM_SEED = 42
np.random.seed(RANDOM_SEED)
TrainTestRatio = 0.1
alleinputs_train, alleinputs_test, alleoutputs_train, alleoutputs_test = train_test_split(alleinputs, alleoutputs, test_size=TrainTestRatio, random_state=RANDOM_SEED)
print("alleinputs Train: ",alleinputs_train)
print("alleinputs Test: ",alleinputs_test)
print("alleoutputs Train: ",alleoutputs_train)
print("alleoutputs Test: ",alleoutputs_test)

Jetzt werden alle 4 Python Lists in PyTorch-Tensoren umgewandelt:

import torch
Tensoralleinputs_train = torch.FloatTensor(alleinputs_train) 
Tensoralleinputs_test = torch.FloatTensor(alleinputs_test) 
Tensoralleoutputs_train = torch.FloatTensor(alleoutputs_train)
Tensoralleoutputs_test = torch.FloatTensor(alleoutputs_test)
print("Tensor alleinputs Train: ",Tensoralleinputs_train)
print("Tensor alleinputs Test: ",Tensoralleinputs_test)
print("Tensor alleoutputs Train: ",Tensoralleoutputs_train)
print("Tensor alleoutputs Test: ",Tensoralleoutputs_test)

Informationen zu den 4 Tensoren werden in Variablen geschrieben, die später für den Aufbau des neuronalen Netzes relevant sind. Zum Beispiel die Anzahl der Trainings- und Testdaten, sowie die Anzahl der Input- und Output-Neuronen des neuronalen Netzes.

AnzahlInputTrainingsdaten = Tensoralleinputs_train.size(0)
print("Anzahl Trainingsdaten: ", AnzahlInputTrainingsdaten)
AnzahlInputTestdaten = Tensoralleinputs_test.size(0)
print("Anzahl Testdaten: ", AnzahlInputTestdaten)
AnzahlInputNeuronen = Tensoralleinputs_train.size(1)
print("Anzahl Input-Neuronen: ", AnzahlInputNeuronen)
AnzahlOutputNeuronen = Tensoralleoutputs_train.size(1)
print("Anzahl Output-Neuronen: ", AnzahlOutputNeuronen)

Jetzt können diese Daten für eigene neuronale Netze in PyTorch verwendet werden!

148 recommended
comments icon7 comments
7 notes
1268 views
bookmark icon

Write a comment...

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.