以多个输入和输出读取CSV文件

问题描述 投票:1回答:1

我有一张下表,想找出输入和输出之间的关系以便进行预测。

稍后我要输入加热器功率,电压,加热器效率和加热器质量的输入值,并为输出生成预测。

在表中,您可以看到我有4个输入参数和3个输出参数。

table

我已经创建了一个代码。输入和输出的值被手动写入数组。

导入

import tensorflow as tf
import numpy as np

设置训练数据

inputMatrix = np.array([(100,230,0.95,100),
                        (200,245,0.99,121),
                        ( 40,250,0.91,123)],dtype=float)
outputMatrix = np.array([(120, 5,120),
                         (123,24,100),
                         (154, 3,121)],dtype=float)
for i,c in enumerate(inputMatrix):
print("{}Input Matrix={}Output Matrix".format(c,outputMatrix[i]))

创建模型

l0 = tf.keras.layers.Dense(units = 4, input_shape = [4])
l1 = tf.keras.layers.Dense(units = 64)
l2 = tf.keras.layers.Dense(units = 128)
l3 = tf.keras.layers.Dense(units = 3)

model = tf.keras.Sequential([l0,l1,l2,l3])

编译模型

model.compile(loss='mean_squared_error', optimizer=tf.keras.optimizers.Adam(0.1))

训练模型

history = model.fit(inputMatrix,outputMatrix,epochs=500,verbose=False)
print("Finished training the model!")

显示训练统计数据

import matplotlib.pyplot as plt
plt.xlabel('Epoch Number')
plt.ylabel('Loss Magnitude')
plt.plot(history.history['loss'])

使用模型预测值

print(model.predict(np.array([120,260,0.98,110]).reshape(1,4)))

我现在想从csv文件中自动读取表。数据应根据输入和输出分开并读入。

我该如何做?在这里使用数组有意义还是存在更好的可能性?

我有些怀疑我的方法基本上是正确的。我的代码似乎太短了。还是我必须为我的问题选择其他方法?

python csv tensorflow
1个回答
0
投票

您需要使用MultiIndex加载DataFrame,因为您同时具有不同级别的Input,Output和所有Feature。

下面是执行此操作的代码,我使用了A,B,C等列名,请根据您的数据进行更改。

import pandas as pd
import numpy as np 

index = pd.MultiIndex.from_tuples([("Input","B"),("Input","C"),("Input","D"),("Input","E"),("Output","F"),("Output","G"),("Output","H")])
df = pd.read_csv("sample_csv.csv",header=[0,1],index_col=0)
df.columns = index 

df:

enter image description here

df.columns

MultiIndex([( 'Input', 'B'),
            ( 'Input', 'C'),
            ( 'Input', 'D'),
            ( 'Input', 'E'),
            ('Output', 'F'),
            ('Output', 'G'),
            ('Output', 'H')],
           )
input_data = df[[( 'Input', 'B'),
            ( 'Input', 'C'),
            ( 'Input', 'D'),
            ( 'Input', 'E')]].values

input_data = list(map(lambda x:tuple(x),input_data))

#Input_data

[(100.0, 230.0, 0.95, 100.0),
 (200.0, 245.0, 0.99, 121.0),
 (40.0, 250.0, 0.91, 123.0)]



output_data = df[[('Output', 'F'),
            ('Output', 'G'),
            ('Output', 'H')]].values

output_data = list(map(lambda x:tuple(x),output_data))

#Ouput_data

[(120, 5, 120), (123, 24, 100), (154, 3, 121)]
© www.soinside.com 2019 - 2024. All rights reserved.