本文正在参加【AI】浅谈梯度下降算法(理论篇)
这里的恶意文件静态检测是将恶意文件的二进制转成灰度图,作为 CNN 模型的输入,经过一系列的过程得到输出,然后进行对比、评估等; 考虑到每个样本的大小是不固定的,本来是以 1M 大小作为区分界限的,这里的话,使用 然后进行数据加载: 最后进入模型进行训练以及验证; TIP 在模型训练中,可以使用 在启动项目时,可能会出现以下报错: 这是因为我们将 那么无非就是两个解决方案: 对于第一种方案,可以一股脑的将机子上的所有 CUDA 全部选上: 对于第二种方案,将 首先是查看模型占用了多少 GPU, 然后折半减少 由于模型跑在空闲的机子上,而样本却在另一台机子上,因此,需要通过 SFTP 进行读取,不出意外的话,要出意外了; 首先是在 然后在 好的,做完上面的之后,坑爹的来了,报错了: 不知道是因为 以上就是 浅析恶意文件静态检测及部分问题解决思路 的全部内容了,大致讲述了恶意文件静态检测的其中一种思路,以及图文结合的分析了部分问题的解决思路,希望大家有所收获! 📝 上篇精讲:【AI】浅谈梯度下降算法(实战篇) 💖 我是 𝓼𝓲𝓭𝓲𝓸𝓽,期待你的关注; 👍 创作不易,请多多支持;分析
PadSequence
来确保数据长度的一致性;class PadSequence(object):
...
def pltexe(self, arr):
arr_n = len(arr) // (1024*1024)
arr_end_len = len(arr) % (1024*1024)
re_arr = []
siz = 1024
# 矩阵转换:行列变化,总数不变
for ite in range(arr_n):
st = ite * 1024 * 1024
pggg0 = np.array(arr[st : st+1024*1024])
re_arr.append(pggg0.reshape(siz,siz) / 255)
# 用 0 补足
if arr_end_len!= 0 :
arr_ = (1024*1024-arr_end_len) * [0]
pggg0 = np.array(arr[1024*1024*arr_n:] + arr_)
re_arr.append(pggg0.reshape(siz,siz) / 255)
return re_arr
def doooo_(self, filelist):
...
# 设定列表长度不超过20
if len(featurelist) > 20:
re_feature_lab = random.sample(list(zip(featurelist,labellist)), 20)
featurelist = [x[0] for x in re_feature_lab]
labellist = [x[1] for x in re_feature_lab]
...
return featurelist_batch, labellist_batch
def __call__(self, batch):
return self.doooo_(batch)
with open(path, 'rb') as f:
train_data = pickle.load(f)
train_loader = DataLoader(train_data, batch_size=10, shuffle=True, num_workers = 20, collate_fn=PadSequence(maxlen = 0))
pad = PadSequence()
pad.__call__(train_data[:4])[0]
try...excpet
模块,即使因为意外中断训练,之前的训练结果也都保存下来了,下次训练就不用重头开始了:try:
...
except:
model = model.eval()
torch.save(model.state_dict(), 'error.pth')
问题解决
OOM
(sid10t) bash-4.2# python model_run.py
Traceback (most recent call last):
...
RuntimeError: Caught RuntimeError in replica 0 on device 0.
Original Traceback (most recent call last):
...
RuntimeError: CUDA out of memory. Tried to allocate 24.00 MiB (GPU 0; 7.80 GiB total capacity; 6.31 GiB already allocated; 6.56 MiB free; 6.46 GiB reserved in total by PyTorch)
DataLoader
里的 batch_size
参数设置的过大了,从而导致了显存溢出;
batch_size
参数调小;device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = model.to(device)
model= nn.DataParallel(model)
batch_size
参数调小,也是有讲究的,我们要尽可能的提高资源的利用率,因此需要做一些操作:
watch -n 1 nvidia-smi
:
batch_size
,查看显存占用率,调节至合适大小:
Socket exception
pad
函数里构建 SFTP 连接:class PadSequence(object):
def __init__(self, maxlen = 8000):
self.maxlen = maxlen
...
self.client = paramiko.SSHClient()
self.client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
self.client.connect(self.hostname, self.port ,self.username, self.password, compress=True)
self.sftp_client = self.client.open_sftp()
def getfile_ftp(self, file_path):
remote_file = self.sftp_client.open(file_path, 'rb')
try:
str_object_with_pe_file_data = remote_file.read()
finally:
remote_file.close()
return str_object_with_pe_file_data
def __call__(self, batch):
return self.doooo_(batch)
DataLoader
中使用到它的回显函数:train_loader = DataLoader(train_data, batch_size=4, shuffle=True, num_workers = 20, collate_fn=PadSequence(maxlen = 0))
Socket exception: Connection reset by peer (104)
DataLoader
底层逻辑问题,还是这台服务器的问题,症结就是在于不能使用多进程进行 SFTP 读取,因此这里的解决方案就是将参数 num_workers
置为 0;后记
深度学习中的恶意文件检测与数据处理方法
释放双眼,带上耳机,听听看~!
本文讨论了在深度学习中应用梯度下降算法进行恶意文件静态检测的方法,以及对数据进行处理的PadSequence类的实现。通过灰度图转换、PadSequence处理等方法,实现了对恶意文件的静态检测与评估。
本网站的内容主要来自互联网上的各种资源,仅供参考和信息分享之用,不代表本网站拥有相关版权或知识产权。如您认为内容侵犯您的权益,请联系我们,我们将尽快采取行动,包括删除或更正。