You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
1.6 KiB
40 lines
1.6 KiB
import tensorflow as tf
|
|
import numpy as np
|
|
import matplotlib.pyplot as plt
|
|
input_size=1
|
|
hidden_size=50
|
|
output_size=1
|
|
seq_length=20
|
|
learning_rate=0.01
|
|
num_epochs=100
|
|
batch_size=32
|
|
def generate_data(seq_length,num_samples):
|
|
x=[]
|
|
y=[]
|
|
for _ in range(num_samples):
|
|
start =np.random.rand()*2*np.pi
|
|
seq=np.sin(np.linspace(start,start+2*np.pi,seq_length+1,endpoint=False))
|
|
x.append(seq[:-1].reshape(-1,1))
|
|
y.append(seq[1:].reshape(-1,1))
|
|
return np.array(x,dtype=np.float32),np.array(y,dtype=np.float32)
|
|
train_x,train_y=generate_data(seq_length,1000)
|
|
test_x,test_y=generate_data(seq_length,100)
|
|
train_dataset=tf.data.Dataset.from_tensor_slices((train_x,train_y))
|
|
train_dataset=train_dataset.shuffle(buffer_size=1024).batch(batch_size)
|
|
test_dataset=tf.data.Dataset.from_tensor_slices((test_x,test_y))
|
|
test_dataset=test_dataset.batch(batch_size)
|
|
model=tf.keras.Sequrntial([tf.keras.layers.SimpleRNN(hidden_size,return_sequences=True,input_shape=(seq_length,input_size)),tf.keras.layers.Dense(output_size)])
|
|
model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate),loss='mse')
|
|
history=model.fit(train_dataset,epochs=num_epochs,validation_data=test_dataset)
|
|
test_loss=model.evaluate(test_dataset)
|
|
print(f'Test Loss: {test_loss:.4f}')
|
|
sample_input=test_x[0:1]
|
|
sample_predict=model.predict(sample_input)
|
|
plt.figure(figsize=(12,6))
|
|
plt.plot(range(seq_length),test_y[0],label='True Values')
|
|
plt.plot(range(seq_length),sample_predict[0],label='Predictions')
|
|
plt.legend()
|
|
plt.title('RNN Time Series Prediction(TensorFlow)')
|
|
plt.xlabel('Time Step')
|
|
plt.ylabel('Value')
|
|
plt.savefig('tf_rnn_prediciton.png') |