WOLFRAM NOTEBOOK

5.5 Recurrent Network

5.5.1 Sequence To Sequence

In[]:=
session=StartExternalSession["Python"]
Out[]=
ExternalSessionObject
System: Python
EvaluationCount:
None
UUID: aaf53c8f-e53e-4593-8e8a-43649c051d74
Test
In[]:=
5+6
Out[]=
11
In[]:=
x={{1},{2},{3},{2},{1},{3}};y={{2},{3},{1},{1},{3},{2}};
In[]:=
<<NeuralNets`
In[]:=
Clear[model1,fitrecord];
In[]:=
{model1,fitrecord}=NeuralARXFit[x,y,{1,2,0},FeedForwardNet,{2},1000];//Quiet
In[]:=
Information[model1]
Out[]=
Information[NeuralARX[FeedForwardNet[{{w1,w2}},{AccumulatedIterations12,CreationDate{2020,2,7,11,32,25.6647835},NeuronSigmoid,FixedParametersNone,OutputNonlinearityNone,NumberOfInputs3}],Regressor{1,2,0}]]
In[]:=
NetOut=NetPredict[x,y,model1]
Out[]=
{{3.02793},{3.},{1.},{1.},{3.},{2.}}
In[]:=
X=Partition[Flatten[x],1]
Out[]=
{{1},{2},{3},{2},{1},{3}}
In[]:=
Y=Flatten[y]
Out[]=
{2,3,1,1,3,2}
In[]:=
train={XY}
Out[]=
{{{1},{2},{3},{2},{1},{3}}{2,3,1,1,3,2}}
In[]:=
netLSTM=NetInitialize@NetChain[{LongShortTermMemoryLayer[1],LinearLayer[6]},"Input"{6,1},"Output"6]
Out[]=
NetChain
Input
matrix
(size: 6×1)
1
LongShortTermMemoryLayer
matrix
(size: 6×1)
2
LinearLayer
vector
(size: 6)
Output
vector
(size: 6)
In[]:=
NetGraph[netLSTM]
Out[]=
NetGraph
Inputs
Outputs
Input:
matrix
(size: 6×1)
Output:
vector
(size: 6)
In[]:=
pLSTM=NetTrain[netLSTM,train]//Quiet
Out[]=
NetChain
Input
matrix
(size: 6×1)
1
LongShortTermMemoryLayer
matrix
(size: 6×1)
2
LinearLayer
vector
(size: 6)
Output
vector
(size: 6)
In[]:=
pLSTM[X]
Out[]=
{2.,3.,1.,1.,3.,2.}

5.5.2 Time Series Prediction

import pandas
import matplotlib.pyplot as plt
dataset = pandas.read_csv('M:\\international-airline-passengers.csv', usecols=[1], engine='python', skipfooter=3)
plt.plot(dataset)
plt.show()
In[]:=
# LSTM for international airline passengers problem with regression framingimport numpyimport matplotlib.pyplot as pltfrom pandas import read_csvimport mathfrom keras.models import Sequentialfrom keras.layers import Densefrom keras.layers import LSTMfrom sklearn.preprocessing import MinMaxScalerfrom sklearn.metrics import mean_squared_error# convert an array of values into a dataset matrixdef create_dataset(dataset, look_back=1): dataX, dataY = [], [] for i in range(len(dataset)-look_back-1): a = dataset[i:(i+look_back), 0] dataX.append(a) dataY.append(dataset[i + look_back, 0]) return numpy.array(dataX), numpy.array(dataY) # fix random seed for reproducibilitynumpy.random.seed(7)# load the datasetdataframe = read_csv('M:\\international-airline-passengers.csv', usecols=[1], engine='python', skipfooter=3)dataset = dataframe.valuesdataset = dataset.astype('float32')# normalize the datasetscaler = MinMaxScaler(feature_range=(0, 1))dataset = scaler.fit_transform(dataset)# split into train and test setstrain_size = int(len(dataset) * 0.67)test_size = len(dataset) - train_sizetrain, test = dataset[0:train_size,:], dataset[train_size:len(dataset),:]# reshape into X=t and Y=t+1look_back = 1trainX, trainY = create_dataset(train, look_back)testX, testY = create_dataset(test, look_back)# reshape input to be [samples, time steps, features]trainX = numpy.reshape(trainX, (trainX.shape[0], 1, trainX.shape[1]))testX = numpy.reshape(testX, (testX.shape[0], 1, testX.shape[1]))# create and fit the LSTM networkmodel = Sequential()model.add(LSTM(4, input_shape=(1, look_back)))model.add(Dense(1))model.compile(loss='mean_squared_error', optimizer='adam')model.fit(trainX, trainY, epochs=100, batch_size=1, verbose=0)# make predictionstrainPredict = model.predict(trainX)testPredict = model.predict(testX)# invert predictionstrainPredict = scaler.inverse_transform(trainPredict)trainY = scaler.inverse_transform([trainY])testPredict = scaler.inverse_transform(testPredict)testY = scaler.inverse_transform([testY])# calculate root mean squared errortrainScore = math.sqrt(mean_squared_error(trainY[0], trainPredict[:,0]))print('Train Score: %.2f RMSE' % (trainScore))testScore = math.sqrt(mean_squared_error(testY[0], testPredict[:,0]))print('Test Score: %.2f RMSE' % (testScore))# shift train predictions for plottingtrainPredictPlot = numpy.empty_like(dataset)trainPredictPlot[:, :] = numpy.nantrainPredictPlot[look_back:len(trainPredict)+look_back, :] = trainPredict# shift test predictions for plottingtestPredictPlot = numpy.empty_like(dataset)testPredictPlot[:, :] = numpy.nantestPredictPlot[len(trainPredict)+(look_back*2)+1:len(dataset)-1, :] = testPredict# plot baseline and predictionsplt.plot(scaler.inverse_transform(dataset))plt.plot(trainPredictPlot)plt.plot(testPredictPlot)plt.show()

5.5.3 A Simple Optical Character Recognition

Wolfram Cloud

You are using a browser not supported by the Wolfram Cloud

Supported browsers include recent versions of Chrome, Edge, Firefox and Safari.


I understand and wish to continue anyway »

You are using a browser not supported by the Wolfram Cloud. Supported browsers include recent versions of Chrome, Edge, Firefox and Safari.