Files
AI_Aimbot_Detecter/train.py
Huoji's 086db9439d first
first
2020-10-11 18:37:07 +08:00

104 lines
3.5 KiB
Python

import tensorflow as tf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import functools
import csv
import time
from tensorflow.keras.callbacks import TensorBoard
LABEL_COLUMN = 'is_cheat'
# "I:\csgoserver\steamcmd\steamapps\common\Counter-Strike Global Offensive Beta - Dedicated Server\csgo\addons\sourcemod\训练数据.csv"
train_file_path = [
r"I:\csgoserver\steamcmd\steamapps\common\Counter-Strike Global Offensive Beta - Dedicated Server\csgo\addons\sourcemod\训练数据.csv"]
test_file_path = [
r"I:\csgoserver\steamcmd\steamapps\common\Counter-Strike Global Offensive Beta - Dedicated Server\csgo\addons\sourcemod\测试数据1.csv"]
csv_data = []
csv_data_x = []
csv_data_y = []
csv_data_all_num = []
csv_data_y_avg = {}
with open(train_file_path[0], 'r') as f:
reader = csv.reader(f)
for row in reader:
csv_data.append(row)
csv_data_x = csv_data[0]
for index in range(1, len(csv_data)):
for zeus in range(len(csv_data[index])):
if csv_data_x[zeus] == 'is_cheat':
continue
if csv_data_x[zeus] in csv_data_y_avg.keys():
csv_data_y_avg[csv_data_x[zeus]] = float(
csv_data_y_avg[csv_data_x[zeus]]) + float(csv_data[index][zeus])
else:
csv_data_y_avg[csv_data_x[zeus]] = float(csv_data[index][zeus])
for key in csv_data_y_avg:
csv_data_y_avg[key] = float(csv_data_y_avg[key]) / float(len(csv_data) - 1)
print(csv_data_y_avg)
def get_dataset(file_path):
dataset = tf.data.experimental.make_csv_dataset(
file_path,
batch_size=32,
label_name=LABEL_COLUMN,
na_value="?",
num_epochs=1,
ignore_errors=True)
return dataset
def process_continuous_data(mean, data):
# 标准化数据
data = tf.cast(data, tf.float32) * 1/(2*mean)
return tf.reshape(data, [-1, 1])
raw_train_data = get_dataset(train_file_path)
raw_test_data = get_dataset(test_file_path)
examples, labels = next(iter(raw_train_data)) # 第一个批次
print("EXAMPLES: \n", examples, "\n")
print("LABELS: \n", labels)
numerical_columns = []
for feature in csv_data_y_avg.keys():
num_col = tf.feature_column.numeric_column(
feature, normalizer_fn=functools.partial(process_continuous_data, csv_data_y_avg[feature]))
numerical_columns.append(num_col)
preprocessing_layer = tf.keras.layers.DenseFeatures(numerical_columns)
model = tf.keras.Sequential([
preprocessing_layer,
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(1, activation='sigmoid'),
])
model_name = "anti_aimbot-{}".format(int(time.time()))
TensorBoardcallback = TensorBoard(
log_dir='logs/{}'.format(model_name),
histogram_freq=1, batch_size=32,
write_graph=True, write_grads=False, write_images=True,
embeddings_freq=0, embeddings_layer_names=None,
embeddings_metadata=None, embeddings_data=None, update_freq=500
)
model.compile(
loss='binary_crossentropy',
optimizer='adam',
metrics=['accuracy'])
train_data = raw_train_data.shuffle(1500)
test_data = raw_test_data
history = model.fit(train_data, epochs=85, callbacks=[TensorBoardcallback])
test_loss, test_accuracy = model.evaluate(test_data)
predict_data = model.predict(test_data)
print('anti-aimbot: \n\nTest Loss {}, Test Accuracy {}'.format(test_loss, test_accuracy))
for pre, result in zip(predict_data[:20], list(test_data)[0][1][:20]):
print("player is aimbot :{:5.2f}% ".format(
100 * pre[0]), " is cheat: ", ("yes" if bool(result) else "no"))
model.save_weights('./save/model_weight')