diff --git a/core/smart_contracts/ai_contract.py b/core/smart_contracts/ai_contract.py index 2751595..653062c 100644 --- a/core/smart_contracts/ai_contract.py +++ b/core/smart_contracts/ai_contract.py @@ -3,14 +3,15 @@ import numpy as np import pandas as pd from sklearn.ensemble import RandomForestClassifier -from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score -from tensorflow.keras.models import Sequential -from tensorflow.keras.layers import Dense +from sklearn.model_selection import train_test_split from tensorflow.keras.callbacks import EarlyStopping +from tensorflow.keras.layers import Dense +from tensorflow.keras.models import Sequential from web3 import Web3 from web3.contract import Contract + class AIClassifier: def __init__(self, data, target): """ @@ -22,10 +23,12 @@ def __init__(self, data, target): self.data = data self.target = target self.model = Sequential() - self.model.add(Dense(64, activation='relu', input_shape=(data.shape[1],))) - self.model.add(Dense(32, activation='relu')) - self.model.add(Dense(1, activation='sigmoid')) - self.model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) + self.model.add(Dense(64, activation="relu", input_shape=(data.shape[1],))) + self.model.add(Dense(32, activation="relu")) + self.model.add(Dense(1, activation="sigmoid")) + self.model.compile( + loss="binary_crossentropy", optimizer="adam", metrics=["accuracy"] + ) def train(self): """ @@ -33,13 +36,23 @@ def train(self): :return: Trained model """ - X_train, X_test, y_train, y_test = train_test_split(self.data, self.target, test_size=0.2, random_state=42) - early_stopping = EarlyStopping(monitor='val_loss', patience=5, min_delta=0.001) - self.model.fit(X_train, y_train, epochs=100, batch_size=32, validation_data=(X_test, y_test), callbacks=[early_stopping]) + X_train, X_test, y_train, y_test = train_test_split( + self.data, self.target, test_size=0.2, random_state=42 + ) + early_stopping = EarlyStopping(monitor="val_loss", patience=5, min_delta=0.001) + self.model.fit( + X_train, + y_train, + epochs=100, + batch_size=32, + validation_data=(X_test, y_test), + callbacks=[early_stopping], + ) y_pred = self.model.predict(X_test) print("Accuracy:", accuracy_score(y_test, y_pred)) return self.model + class AIContract: def __init__(self, ai_classifier, blockchain, contract_address): """ @@ -62,9 +75,12 @@ def execute(self, input_data): :return: Output of the contract """ output = self.ai_classifier.model.predict(input_data) - self.contract.functions.updateState(output).transact({'from': self.blockchain.accounts[0]}) + self.contract.functions.updateState(output).transact( + {"from": self.blockchain.accounts[0]} + ) return output + class Blockchain: def __init__(self, provider_url): """ @@ -87,6 +103,7 @@ def deploy_contract(self, contract_code): self.contracts[contract_address] = contract_code return contract_address + def main(): # Load data data = pd.read_csv("data.csv") @@ -126,5 +143,6 @@ def main(): output = ai_contract.execute(input_data) print("Output:", output) + if __name__ == "__main__": main()