我只是深度学习领域的新手 .
我用Keras Conv1D做了我的第一次基本尝试 . 不知道我做了什么以及我是否做得对 . 我的输入数据仅为每周(总共313周)的总销售额,适用于美国各地的商店,时间步长为1 .
这是我的代码:
from pandas import read_csv
import matplotlib.pyplot as plt
import numpy
from keras.datasets import imdb
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Flatten
from keras.layers.convolutional import Conv1D
from keras.layers.convolutional import MaxPooling1D
from keras.layers.embeddings import Embedding
from keras.preprocessing import sequence
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import mean_squared_error
def create_dataset(dataset, look_back=1):
dataX, dataY = [], []
for i in range(len(dataset)-look_back):
a = dataset[i:(i+look_back), 0]
dataX.append(a)
dataY.append(dataset[i + look_back, 0])
return numpy.array(dataX), numpy.array(dataY)
seed = 7
numpy.random.seed(seed)
dataframe = read_csv('D:/MIS793/Dataset/Academic Dataset External 2/Python scripts/totalsale _byweek.csv', usecols=[1], engine='python')
plt.plot(dataframe)
plt.show()
dataset = dataframe.values
dataset = dataset.astype('float32')
# normalize the dataset
scaler = MinMaxScaler(feature_range=(0, 1))
dataset = scaler.fit_transform(dataset)
train_size = int(len(dataset) * 0.67)
test_size = len(dataset) - train_size
train, test = dataset[0:train_size,:], dataset[train_size:len(dataset),:]
# reshape into X=t and Y=t+1
look_back = 1
trainX, trainY = create_dataset(train, look_back)
testX, testY = create_dataset(test, look_back)
trainX = trainX.reshape(trainX.shape[0], trainX.shape[1], 1).astype('float32')
testX = testX.reshape(testX.shape[0], testX.shape[1], 1).astype('float32')
model = Sequential()
model.add(Conv1D(filters=10, kernel_size=1, padding='same', strides=1, activation='relu',input_shape=(1,1)))
model.add(MaxPooling1D(pool_size=1))
model.add(Flatten())
model.add(Dense(250, activation='relu'))
model.add(Dense(1, activation='linear'))
model.compile(loss='mse', optimizer='adam', metrics=['mae'])
print(model.summary())
model.fit(trainX, trainY, validation_data=(testX, testY), epochs=10, batch_size=100)
scores = model.evaluate(testX, testY, verbose=0)
print("Accuracy: %.2f%%" % (scores[1]*100))
不确定这里的一些事情:
-
重新训练trainX和testX .
-
kernel_size和input_shape的值
我的想法是它只是销售 Value 的一个向量 . 10个过滤器,每个大小为1,从一个值移动到另一个值 . 输入形状的格式为时间步长,尺寸 .
我只有10.91%的准确率!所以我的第一个问题是我是否正在喂食正确的参数 .
谢谢
ASC
2 回答
我尝试使用准确性而不是mae . 但是我的准确率为0% . 只是想知道这是关于预测数值,我真的应该使用准确度吗?这是我的最新代码 .
或者我应该选择MAE吗?
如果我选择MAE,我的分数将如下所示:
[0.12740663779013364,0.31208728355111426]
第一个是损失,第二个是MAE . 在这种情况下,这不是更好的指标吗?
最后一行将是这样的:
print(“MAE:% . 2f %%”%(得分[1]))
谢谢Anindya
使用 model.metrics_names ,您可以获得 scores 变量的标签 .
在你的情况下,它将是 ['loss', 'mean_absolute_error'] .
所以你打印的不是 accuracy ,而是 mae 乘以100 .