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