|
|
import numpy as np |
|
|
import gradio as gr |
|
|
from tensorflow.keras.models import Sequential |
|
|
from tensorflow.keras.layers import LSTM, Dense |
|
|
|
|
|
|
|
|
WINDOW_SIZE = 3 |
|
|
SEQUENCE_LIMIT = 1000 |
|
|
|
|
|
|
|
|
seq = np.array(range(1, SEQUENCE_LIMIT + 1)) |
|
|
x, y = [], [] |
|
|
for i in range(len(seq) - WINDOW_SIZE): |
|
|
x.append(seq[i:i + WINDOW_SIZE]) |
|
|
y.append(seq[i + WINDOW_SIZE]) |
|
|
x = np.array(x).reshape(-1, WINDOW_SIZE, 1) |
|
|
y = np.array(y) |
|
|
|
|
|
|
|
|
model = Sequential([ |
|
|
LSTM(64, input_shape=(WINDOW_SIZE, 1)), |
|
|
Dense(1) |
|
|
]) |
|
|
model.compile(optimizer="adam", loss="mse") |
|
|
model.fit(x, y, epochs=1000, batch_size=512, verbose=0) |
|
|
|
|
|
|
|
|
def predict_next(n1, n2, n3): |
|
|
try: |
|
|
|
|
|
for val in [n1, n2, n3]: |
|
|
if not (1 <= val <= SEQUENCE_LIMIT): |
|
|
return f"Input numbers must be between 1 and {SEQUENCE_LIMIT}" |
|
|
|
|
|
input_seq = np.array([n1, n2, n3]).reshape(1, 3, 1) |
|
|
prediction = model.predict(input_seq, verbose=0)[0][0] |
|
|
return f"Predicted next number: {prediction:.2f}" |
|
|
|
|
|
except Exception as e: |
|
|
return f"Error: {str(e)}" |
|
|
|
|
|
|
|
|
demo = gr.Interface( |
|
|
fn=predict_next, |
|
|
inputs=[ |
|
|
gr.Number(label="1st Number (≤ 1000)"), |
|
|
gr.Number(label="2nd Number (≤ 1000)"), |
|
|
gr.Number(label="3rd Number (≤ 1000)") |
|
|
], |
|
|
outputs="text", |
|
|
title="RNN Number Sequence Predictor", |
|
|
description="Enter any 3 increasing numbers (up to 1000). Model predicts the next number.", |
|
|
) |
|
|
|
|
|
demo.launch() |
|
|
|