Tensorflow模型准确性低

时间:2020-03-04 21:40:41

标签: python tensorflow machine-learning keras deep-learning

所以我的主要目标是使用2018年的数据并尝试预测2019年的数据。我使用的是GRU模型,我有以下代码。我有几个问题,我不确定代码是否正确或是否丢失了某些东西,以及对于model.fit,我应该使用validation_split = 0.1或validation_data = X_test,y_test,因为我使用的是不同的数据框进行测试。

关于准确性,它很小,没有任何意义,我也不知道为什么。

enter image description here

import pandas as pd
import tensorflow as tf
from keras.layers.core import Dense
from keras.layers.recurrent import GRU
from keras.models import Sequential
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
from tensorboardcolab import TensorBoardColab, TensorBoardColabCallback


df = pd.read_csv('IF 10 PERCENT.csv',index_col=None)



#Loading Second Dataframe


df2 = pd.read_csv('2019 10minutes IF 10 PERCENT.csv',index_col=None)


tbc=TensorBoardColab() # Tensorboard




X_train= df[['WindSpeed_mps','AmbTemp_DegC','RotorSpeed_rpm','RotorSpeedAve','NacelleOrientation_Deg','MeasuredYawError','Pitch_Deg','WindSpeed1','WindSpeed2','WindSpeed3','GeneratorTemperature_DegC','GearBoxTemperature_DegC']]
X_train=X_train.values

y_train= df['Power_kW']
y_train=y_train.values

X_test= df2[['WindSpeed_mps','AmbTemp_DegC','RotorSpeed_rpm','RotorSpeedAve','NacelleOrientation_Deg','MeasuredYawError','Pitch_Deg','WindSpeed1','WindSpeed2','WindSpeed3','GeneratorTemperature_DegC','GearBoxTemperature_DegC']]
X_test=X_test.values

y_test= df2['Power_kW']
y_test=y_test.values

# conversion to numpy array



# scaling values for model


x_scale = MinMaxScaler()
y_scale = MinMaxScaler()

X_train= x_scale.fit_transform(X_train)
y_train= y_scale.fit_transform(y_train.reshape(-1,1))
X_test=x_scale.fit_transform(X_test)
y_test=y_scale.fit_transform(y_test.reshape(-1,1))



X_train = X_train.reshape((-1,1,12)) 
X_test = X_test.reshape((-1,1,12))


# splitting train and test




# creating model using Keras
model = Sequential()
model.add(GRU(units=512, return_sequences=True, input_shape=(1,12)))
model.add(GRU(units=256, return_sequences=True))
model.add(GRU(units=256))
model.add(Dense(units=1, activation='sigmoid'))
model.compile(loss=['mse'], optimizer='adam',metrics=['accuracy']) 
model.summary() 

#model.fit(X_train, y_train, batch_size=250, epochs=10, validation_split=0.1, verbose=1, callbacks=[TensorBoardColabCallback(tbc)])  
model.fit(X_train, y_train, batch_size=250, epochs=10, validation_data=(X_test,y_test), verbose=1, callbacks=[TensorBoardColabCallback(tbc)])

score = model.evaluate(X_test, y_test)
print('Score: {}'.format(score))
print('Accuracy: {}'.format(acc))
y_predicted = model.predict(X_test)
y_predicted = y_scale.inverse_transform(y_predicted)
y_t
est = y_scale.inverse_transform(y_test)
plt.plot(y_predicted, label='Predicted')
plt.plot(y_test, label='Measurements')
plt.legend()
plt.show()

谢谢

1 个答案:

答案 0 :(得分:3)

在我看来,您正在尝试解决回归问题。如果是这样,则将accuracy作为度量标准是没有意义的,因为准确性将用于测量精确的标签匹配。 MSE对于回归应该会很好