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

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')