import pandas as pd
import numpy as np
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Dropout
from keras.layers import LSTM
from keras.optimizers import Adam
from sklearn.preprocessing import MinMaxScaler
def create_dataset(dataset, datasetClass, look_back):
dataX, dataY = [], []
for i in range(len(dataset)-look_back-1):
a = dataset[i:(i+look_back), 0]
dataX.append(a)
dataY.append(datasetClass[:,(i+look_back):(i+look_back+1)])
return np.array(dataX), np.array(dataY)
def one_hot_encode(dataset):
data = np.zeros((11, len(dataset)),dtype='int')
for i in range(len(dataset)):
data[dataset[i]-1,i] = 1
return data
#Set a seed for repeatable results
np.random.seed(12)
dataframe = pd.read_csv('time-series.csv', usecols=[1], engine='python')
dataset = dataframe.values
dataset = dataset.astype('float32')
dataframeClass = pd.read_csv('time-series-as-class.csv', usecols=[1], engine='python')
datasetClass = dataframeClass.values
datasetClass = datasetClass.astype('int')
datasetClass = one_hot_encode(datasetClass)
#normalize input vals
scaler = MinMaxScaler(feature_range=(0, 1))
dataset = scaler.fit_transform(dataset)
#separate to test/train
train_size = int(len(dataset) * 0.67)
test_size = len(dataset) - train_size
train, test = dataset[0:train_size, :], dataset[train_size:len(dataset), :]
trainClass, testClass = datasetClass[:, 0:train_size,], datasetClass[:, train_size:len(dataset)]
#set up sliding windows
look_back = 150
trainX, trainY = create_dataset(train, trainClass, look_back)
testX, testY = create_dataset(test, testClass, look_back)
#reformat for proper passing to nn
trainX = np.reshape(trainX, (trainX.shape[0], 1, trainX.shape[1]))
testX = np.reshape(testX, (testX.shape[0], 1, testX.shape[1]))
trainY = np.squeeze(trainY, 2)
testY = np.squeeze(testY, 2)
# create and fit the LSTM network
model = Sequential()
model.add(LSTM(15, input_shape=(1,look_back)))
model.add(Dense(22,activation='tanh'))
model.add(Dropout(0.2))
model.add(Dense(11,activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer=Adam(), metrics=['categorical_accuracy'])
print(model.summary())
model.fit(trainX, trainY, epochs=90, batch_size=1, verbose=2)
# make predictions
trainPredict = model.predict(trainX)
testPredict = model.predict(testX)
私はUbuntuの上およびWindows上でこれを実行しようとしました。ケラスv 2.0.4および2.0.8のウインドウで2.0.5のウブントでテスト済み(最新版はcondaから入手可能)同じコードが、ウィンドウ/ Ubuntuの上で非常に異なる精度(Keras/Tensorflow)は
ウインドウの精度は17%であり、カテゴリクロスエントロピーは〜2にあります。収束が、それは一貫し
はUbuntuの上の精度は98%で、カテゴリcrossentropyが0であるように思われ、それが実際に
コードだけ差が、CSV CSVファイルへのパスでは変更されませんが起動しますファイルはまったく同じです。このような劇的な違いを引き起こす可能性があるのは何ですか?
は私がランダムに初期化TF /ドロップアウトとしてそれを書くことができ、差がパーセントまたは2されていたが、あるとして、純粋なチャンスに
編集することが多すぎるのです:ソリューションはカテゴリcsvファイルを固定することが判明しましたファイルではありましたが、Windowsで作成されたときにLinuxでうまくプレイするために必要なことが他にもありました。あなたは問題が最初に移植されたCSVファイルを、であることが判明したkeras
あなたは2日後にあなた自身の答えを受け入れることができます。 – charlesreid1