vul.php,vulhub-php/php_inclusion_getshell(转)

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 import numpy as np

2 import pandas as pd

3 import matplotlib.pyplot as plt

4 from scipy.io import loadmat

5 from scipy.optimize import minimize

6 def load_data(path):

7 data=loadmat(path)

8 X=data['X']

9 y=data['y']

10 # print(type(X),type(y))

11 return X,y

12 path=r'C:\Users\Earth\Desktop\Coursera-ML-using-matlab-python-master\machine-learning-ex3\ex3\ex3data1.mat'

13 X,y=load_data(path)

14 print(np.unique(y))

15 print(X.shape,y.shape)

16 print(len(X))

17

18 def plotanimage():

19 pick_one=np.random.randint(0,5000)

20 image=X[pick_one,:]

21 # 选择pick_one这一行的所有列

22 fig,ax=plt.subplots(figsize=(1,1))

23 ax.matshow(image.reshape((20,20)),cmap='gray_r')

24 plt.xticks([])

25 plt.yticks([])

26 plt.show()

27 print('this should be {}'.format(y[pick_one]))

28

29 # plotanimage()

30 def sigmoid(z):

31 return 1/(1+np.exp(-z))

32

33 def costReg(theta,X,y,lam):

34 first=np.mean(-y*np.log(sigmoid(X@theta))-(1-y)*np.log(1-sigmoid(X@theta)))

35 theta1=theta[1:]

36 second=theta1.T@theta1*lam/(2*len(X))

37 # 此处的second需要得到的是一个标量而非矩阵,所以用θ1的转置乘以它自身可以得到所有对应元素的平方和,如果用θ1*θ1得到的则是一个向量

38 return first+second

39 def gradient(theta,X,y,lam):

40 first=(X.T@(sigmoid(X@theta)-y))/len(X)

41 theta1=theta[1:]

42 second=np.concatenate([np.array([0]),lam*theta1/len(X)])

43 return first+second

44 def one_vs_all(X,y,lam,K):

45 all_theta=np.zeros((K,X.shape[1]))

46 for i in range(1,K+1):

47 theta=np.zeros(X.shape[1])

48 y_i=np.array([1 if label==i else 0 for label in y])

49 ret=minimize(fun=costReg,x0=theta,args=(X,y_i,lam),method='TNC',jac=gradient,options={'disp':True})

50 all_theta[i-1,:]=ret.x

51 # 序列为i-1的行,所有列替换成ret.x

52 return all_theta

53 def predict_all(X,all_theta):

54 h=sigmoid(X@all_theta.T)

55 h_argmax=np.argmax(h,axis=1)

56 h_argmax=h_argmax+1

57 print('the type of argmax is ',type(h_argmax))

58 print('the shape of argmax is',h_argmax.shape)

59 return h_argmax

60 raw_X,raw_y=load_data(path)

61 X=np.insert(raw_X,0,1,axis=1)

62 print('the shape of X is',X.shape)

63 # raw_X 要修改的对象,0 要在第0行或列前插入对象,要插入的值,axis=1 要插入的维度,如果为0则插入的是行,为1则插入的是列

64 y=raw_y.flatten()

65 print('the shape of y is',y.shape)

66 all_theta=one_vs_all(X,y,1,10)

67 print('the shape of all theta is ',all_theta.shape)

68 result=predict_all(X,all_theta)

69 print(result.shape)

70 def cal_accuracy(result,y):

71 res=[1 if result[i]==y[i] else 0 for i in range(len(y))]

72 return np.mean(res)

73 print(result==y)

74 # print(cal_accuracy(result,y))

75 # theta2=np.zeros((10,X.shape[1]))

76 # theta2 = theta2[1:]

77 # print(theta2.shape)

78 # t=(theta2@theta2) / (2*len(X))

79 # print(t.shape)

80 # t1=theta2*theta2

81 # print(t1.shape)

48304ba5e6f9fe08f3fa1abda7d326ab.png

思路总结:

1、首先从指定的数据中读取到X、y,根据需要初始化一个θ

2、写出假设函数和代价函数,其中需要注意的是正规化的代价函数不惩罚第一项θ0,因此需要将θ进行变化处理

3、根据公式写出梯度函数

4、用高级算法对θ进行优化,需要注意的是多分类问题根据每种分类分别去优化,最后再把值赋给θ,中间可以用for循环来实现

5、训练好θ以后将其代假设函数中,对于多分类问题,认为概率最大的值即为预测出的类别

6、对预测结果进行统计整理,再和实际的值进行比较,计算准确率

在练习过程中发现对numpy的一些常用函数掌握得还不够深刻,包括切片、降维等操作,另外对画图这一块更生疏,需要查漏补缺

套用公式矩阵相乘时,对于谁和谁相乘,是否需要转置有时候反应不过来,最好的办法就是打出它们的shape根据矩阵相乘的特点进行操作。

标签:vulhub,theta2,getshell,argmax,np,shape,print,theta,php

来源: https://www.cnblogs.com/strugglerisnd/p/10993169.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值