app.py / APP.PY
Kwackwon101's picture
requirements.txt
be25142 verified
import streamlit as st
import numpy as np
import pandas as pd
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense
from sklearn.preprocessing import MinMaxScaler
import plotly.express as px
# إعدادات الصفحة
st.set_page_config(
page_title="Aviator Predictor",
layout="wide",
initial_sidebar_state="collapsed"
)
# إعدادات النموذج
WINDOW_SIZE = 2 # تم التخفيض لتقليل استهلاك الذاكرة
EPOCHS = 30 # تم التخفيض لتسريع التدريب
# إعداد حالة الجلسة
if "values" not in st.session_state:
st.session_state.values = []
if "model" not in st.session_state:
st.session_state.model = None
if "scaler" not in st.session_state:
st.session_state.scaler = MinMaxScaler(feature_range=(0, 1))
# وظائف التحكم
def prepare_data(data):
scaled_data = st.session_state.scaler.fit_transform(np.array(data).reshape(-1,1))
X, y = [], []
for i in range(len(scaled_data)-WINDOW_SIZE):
X.append(scaled_data[i:i+WINDOW_SIZE, 0])
y.append(scaled_data[i+WINDOW_SIZE, 0])
return np.array(X), np.array(y)
def build_model():
model = Sequential([
LSTM(32, activation='relu', input_shape=(WINDOW_SIZE, 1)), # تم التبسيط
Dense(1)
])
model.compile(
optimizer='adam',
loss='mse'
)
return model
# واجهة المستخدم
st.title("🛩 Aviator Predictor Pro")
st.markdown("أدخل القيم (مثال: 1.23) ثم اضغط إضافة")
col1, col2 = st.columns([3, 1])
with col1:
new_value = st.number_input("القيمة الجديدة:", format="%.2f", key="input", step=0.1)
with col2:
if st.button("➕ إضافة"):
st.session_state.values.append(float(new_value))
st.rerun()
if st.button("🗑️ مسح البيانات"):
st.session_state.values = []
st.session_state.model = None
st.rerun()
# عرض البيانات
if len(st.session_state.values) > 0:
st.subheader("📊 التطور التاريخي")
df = pd.DataFrame({'القيم': st.session_state.values})
fig = px.line(df, y='القيم', markers=True)
st.plotly_chart(fig, use_container_width=True)
# التدريب والتنبؤ
if len(st.session_state.values) >= WINDOW_SIZE + 1:
try:
X, y = prepare_data(st.session_state.values)
X = X.reshape((X.shape[0], X.shape[1], 1))
if st.session_state.model is None:
st.session_state.model = build_model()
history = st.session_state.model.fit(
X, y,
epochs=EPOCHS,
verbose=0
)
last_sequence = st.session_state.scaler.transform(
np.array(st.session_state.values[-WINDOW_SIZE:]).reshape(-1,1)
).reshape(1, WINDOW_SIZE, 1)
prediction = st.session_state.scaler.inverse_transform(
st.session_state.model.predict(last_sequence, verbose=0)
)[0][0]
st.success(f"التنبؤ للجولة القادمة: {prediction:.2f}x")
st.info(f"آخر {WINDOW_SIZE} قيم: {st.session_state.values[-WINDOW_SIZE:]}")
except Exception as e:
st.error(f"حدث خطأ تقني: {str(e)}")
elif len(st.session_state.values) > 0:
needed = WINDOW_SIZE + 1 - len(st.session_state.values)
st.warning(f"أدخل {needed} قيم أخرى لبدء التنبؤات")
st.markdown("---")
st.caption("الإصدار 4.0 | تم التطوير باستخدام خوارزميات التعلم العميق")