画图
3D画图
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# 定义等高线高度函数
def f(x, y):
return (1 - x / 2 + x ** 3 + y ** 3) * np.exp(-x ** 4 - y ** 2)+np.tan(np.sqrt(x**2+y**2))+x**2*y**2
#蝴蝶函数
def fx(t):
return np.sin(t)*(np.e**np.cos(t)-2*np.cos(4*t)-np.sin(t/12)**5)
def fy(t):
return np.cos(t)*(np.e**np.cos(t)-2*np.cos(4*t)-np.sin(t/12)**5)
fig=plt.figure()
ax1=fig.add_subplot(121,projection='3d')
x=y=np.arange(-3,3,0.25)
t=np.arange(0,12*np.pi,0.01)
X,Y=np.meshgrid(x,y)
#Z=np.sin(np.sqrt(X**2+Y**2))
Z=f(X,Y)
#print(np.max(Z),np.min(Z))
ax1.set_xlabel('x')
ax1.set_ylabel('y')
ax1.set_zlabel('z')
ax1.plot_surface(X,Y,Z,cmap=plt.cm.hot)#'binary'##scatter
ax1.set_title("3D")
ax2=fig.add_subplot(122)
Max=int(np.max(Z))
ax2.contourf(X,Y,Z,10,cmap=plt.cm.hot,alpha=0.5)#填充等高线的颜色, 8是等高线分为几部分
print(Max)
if Max<5:
C=ax2.contour(X,Y,Z,20,cmap=plt.cm.hot)#等高线分几份,绘制等高线
else:
C=ax2.contour(X,Y,Z,levels=range(0,Max,1),cmap=plt.cm.hot)#'rainbow'#等高线分几份,绘制等高线
plt.clabel(C,inline=True,fontsize=10)#给等高线上标数字
ax2.set_title("contour")
plt.tight_layout()
plt.xticks(())
plt.yticks(())
plt.show()
首先需要导入from mpl_toolkits.mplot3d import Axes3D
,然后利用np.meshgrid
生成三维网格,plot_surface
用来生成三维立体图形;contour
生成等高线;contourf
为等高线填充背景;如果值只是单个图,可以使用以下命令:
fig=plt.figure(figsize=(10,6))
ax=Axes3D(fig)
.....
柱状图的生成
这是神经网络中观察隐藏层数据分布的柱状图表示。
import numpy as np
import matplotlib.pyplot as plt
def sigmoid(x):
return 1/(1+np.exp(-x))
def ReLu(x):
return np.maximum(0,x)
def tanh(x):
return np.tanh(x)
x=np.random.randn(1000,100)
node_num=100#个隐藏层的节点数
hidden_layer_size=5#隐藏层大小
activations={}#激活值
W={}
##########################################比较有意思的处理方式
for i in range(hidden_layer_size):
if i!=0:
x=activations[i-1]
w=np.random.randn(node_num,node_num)*1/np.sqrt(node_num)#np.sqrt(node_num)
W[i]=w
z=np.dot(x,w)
#a=sigmoid(z)
a=tanh(z)
activations[i]=a
##############################################################
#plot
for i,a in activations.items():
plt.subplot(1,len(activations),i+1)
plt.hist(a.flatten(),30,range=(0,1))#range表示x的范围(x.min,x.max)
plt.title(str(i+1)+'-layer')
plt.show()
其中关于作图最重要的是:
for i,a in activations.items():
plt.subplot(1,len(activations),i+1)
plt.hist(a.flatten(),30,range=(0,1))#range表示x的范围(x.min,x.max)
plt.title(str(i+1)+'-layer')
plt.show()
有序字典
from collections import OrderedDict
python中的字典(按照hash来存储)是无序的,模块collections的子类OrderedDict,实现了对字典对象中元素的排序。
为python导入新的运行目录
import sys, os
sys.path.append("新目录")