深度学习的学习记录(五)

目录

cuda加速问题的解决

tensorflow游乐园

数据集1

 数据集2

 数据集3

 数据集4

第九节豆子编程实验

学习网站


 

cuda加速问题的解决

之前下的cuda是9.0 的。然后运行缺失包,然后我就下了11.4的,然后缺的那几个包也有了,但是G盘的Cuda9.0的没了,只有C盘的11.4的,但是我的pycharm还是9.0G盘的路径

一直纠结的问题终于解决了,6月27的时候就有这个问题,当时和一个群友进行讨论,然后下匹配版本的cudnn,把cudnn中/bin下的包复制到cuda  /bin下的包,但是还是显示缺失包,然后去搜解决方法,有大佬说    去https://www.dll-files.com/search/  下载缺失的包,但是搜索缺失的包有的搜不到

 

 只有部分的包可以,下下来后放到cuda  目录下的/bin里面。其他的包还是没有。

 今天看到群里有人和我出现了同样的问题,过了一会他在群里说已经解决。然后问他是怎么解决的,他的方法就是下载缺失的包,但是有的包我搜了搜不到。继续百度也没合适的解决方法,然后有人让我去英伟达官网下载  cuda toolkits

https://developer.nvidia.com/cuda-downloads?target_os=Windows&target_arch=x86_64&target_version=10&target_type=exe_local


 下载下来以后说把缺的包放到cuda  的/bin下面。下载下来以后是11.4版本的cuda,然后下载完了以后发现这个版本的cuda  /bin目录下有那些缺失的包。于是我想着把11.4版本cuda的包复制到9.0版本cuda的包。但是打开G盘,发现9.0版本的cuda文件没了。

 然后运行项目,还是出现包缺失的问题,于是逐渐失去耐心。继续百度,因为有两个版本的cuda,我就在想是不是pycharm面对两个版本的cuda而不知道用谁而导致的?正好看到了一个帖子说用在pycharm的项目选择不同版本的cuda进行运行。于是我打开自己的pycharm,按照他的方法,发现路径是G盘的cuda 下的development路径,因为我的G盘cuda丢失,我误认为是路径问题,解决问题后发现与路径无关,只要是tf的版本和cuda版本对应就好,缺失的cudnn64_8.dll包去下一个放到11.4版本cuda  下的/bin目录下即可。

import tensorflow as tf


tf.test.is_gpu_available()

print(tf.test.is_gpu_available())

 打开任务管理器        gpu也是在被占用,终于是解决了,这里是计算5000个数据,不知道是不是我自己的显卡太low 的缘故,感觉和cpu进行计算用的时间差不多。

tensorflow游乐园

playground.tensorflow.org

其实这些数据集其实都是三维图像的俯视图 ,所提供的数据集大多都已见过

数据集1

 

 简单的定性分析,一个神经元的等高线是一条直线,两个是两条直线,但是在平面上两条直线是无法闭合的,但是3个可以。把这三个神经元的计算结果再通过一个输出层神经元汇合,通过sigmoid激活函数修饰一下即可。

 

 

 数据集2

 异或问题,如果两个数一样,结果就是0;两个数不一样结果就是1。

 想要分割这种分布数据的类型,单个神经元的感知器无法做到这一点

 

 数据集3

要组合出分割这种豆豆的预测曲面。也就是让他的0.5等高线在俯视图上呈现一个闭环,至少需要一层三个神经元的隐藏层。

 

使用单个的神经元就能完成分类,把隐藏层减少到0层,只保留一个输出层的神经元。

 数据集4

即此次豆豆实验所用数据集

对于此类分割问题,所需更深层的神经网络。不妨把隐藏层的层数设置为3,每层4个神经元。

但是随着训练次数的增加,预测结果不咋动,这是由于我们所使用的激活函数是sigmoid函数,之前我们选择sigmoid作为激活函数是因为它相比于阶跃函数,sigmoid函数处处可导且导数处处不为0,这样在反向传播时候我们知道使用梯度下降算法计算函数的导数,然后用这个导数去修正参数,但是sigmoid函数有一个很严重的问题,一旦进入了sigmoid函数远离中心点的位置虽然仍旧可导,导数仍旧不为0,但导数却极小,这样梯度下降就很难进行了。这也就是所谓的梯度消失问题。越深的神经网络就越容易出现这种梯度消失的问题。再此我们使用relu函数作为激活函数。

 如果陷入了导数小于0的部分,很有可能让这个神经元死亡。也就是所谓的“dead relu problem"

这会使权重无法更新,所以提出改进的relu函数。

 

 

 

使用神经网络解决分类问题主要有四个步骤:

  1. 提取问题中实体的特征向量作为神经网络的输入
  2. 定义神经网络的结构,并定义如何从神经网络的输入得到输出(隐藏层)
  3. 通过训练数据来调整神经网络中参数的取值(神经网络的训练过程)
  4. 使用训练好的神经网络来预测未知数据

第九节豆子编程实验

dataset9.py

import numpy as np
import random

def get_beans(counts):
	posX,posY = genSpiral(int(counts/2),0,1)
	negX,negY = genSpiral(int(counts/2),np.pi,0)
	X = np.vstack((posX,negX))
	Y = np.hstack((posY,negY))
	return X,Y

def genSpiral(counts,deltaT, label):
	X = np.zeros((counts,2))
	Y = np.zeros(counts)
	for i in range(counts):
		r = i / counts * 5
		t = 1.75 * i / counts * 2 * np.pi + deltaT;
		x1 = r * np.sin(t) + random.uniform(-0.1,0.1)
		x2 = r * np.cos(t) + random.uniform(-0.1,0.1)
		X[i] = np.array([x1,x2])
		Y[i] = label
	return X,Y 

def dist(a, b):
	dx = a['x'] - b['x'];
	dy = a['y']- b['y'];
	return np.sqrt(dx * dx + dy * dy);
def getCircleLabel(p, center):
	radius = 1;
	if dist(p, center) < (radius * 0.5):
		return 1
	else:
		return 0

def randUniform(a=-1, b=1):
  return np.random.rand() * (b - a) + a;

def classifyCircleData(numSamples=100, noise=0):
	points = [];
	Y = []
	X = []
	radius = 1;
	num = int(numSamples/2)
	for i in range(num):
		r = randUniform(0, radius * 0.5);
		angle = randUniform(0, 2 * np.pi);
		x = r * np.sin(angle);
		y = r * np.cos(angle);
		noiseX = randUniform(-radius, radius) * noise;
		noiseY = randUniform(-radius, radius) * noise;
		label = getCircleLabel({'x': x + noiseX, 'y': y + noiseY}, {'x': 0, 'y': 0});
		X.append([x+1,y+1])
		Y.append(label)
  

	for i in range(num):
		r = randUniform(radius * 0.7, radius);
		angle = randUniform(0, 2 * np.pi);
		x = r * np.sin(angle);
		y = r * np.cos(angle);
		noiseX = randUniform(-radius, radius) * noise;
		noiseY = randUniform(-radius, radius) * noise;
		label = getCircleLabel({'x': x + noiseX, 'y': y + noiseY}, {'x': 0, 'y': 0});
		X.append([x+1,y+1])
		Y.append(label)

	X = np.array(X)
	Y = np.array(Y)

	return X,Y
    

plot_utils.py

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
from keras.models import Sequential#导入keras


def show_scatter_curve(X,Y,pres):
	plt.scatter(X, Y) 
	plt.plot(X, pres) 
	plt.show()

def show_scatter(X,Y):
	if X.ndim>1:
		show_3d_scatter(X,Y)
	else:
		plt.scatter(X, Y) 
		plt.show()


def show_3d_scatter(X,Y):
	x = X[:,0]
	z = X[:,1]
	fig = plt.figure()
	ax = Axes3D(fig)
	ax.scatter(x, z, Y)
	plt.show()

def show_surface(x,z,forward_propgation):
	x = np.arange(np.min(x),np.max(x),0.1)
	z = np.arange(np.min(z),np.max(z),0.1)
	x,z = np.meshgrid(x,z)
	y = forward_propgation(X)
	fig = plt.figure()
	ax = Axes3D(fig)
	ax.plot_surface(x, z, y, cmap='rainbow')
	plt.show()



def show_scatter_surface(X,Y,forward_propgation):
	if type(forward_propgation) == Sequential:
		show_scatter_surface_with_model(X,Y,forward_propgation)
		return
	x = X[:,0]
	z = X[:,1]
	y = Y

	fig = plt.figure()
	ax = Axes3D(fig)
	ax.scatter(x, z, y)

	x = np.arange(np.min(x),np.max(x),0.1)
	z = np.arange(np.min(z),np.max(z),0.1)
	x,z = np.meshgrid(x,z)

	X = np.column_stack((x[0],z[0]))
	for j in range(z.shape[0]):
		if j == 0:
			continue
		X = np.vstack((X,np.column_stack((x[0],z[j]))))

	print(X.shape)
	r = forward_propgation(X)
	y = r[0]
	if type(r) == np.ndarray:
		y = r

	
	y = np.array([y])
	y = y.reshape(x.shape[0],z.shape[1])
	ax.plot_surface(x, z, y, cmap='rainbow')
	plt.show()

def show_scatter_surface_with_model(X,Y,model):
	#model.predict(X)

	x = X[:,0]
	z = X[:,1]
	y = Y

	fig = plt.figure()
	ax = Axes3D(fig)
	ax.scatter(x, z, y)

	x = np.arange(np.min(x),np.max(x),0.1)
	z = np.arange(np.min(z),np.max(z),0.1)
	x,z = np.meshgrid(x,z)



	X = np.column_stack((x[0],z[0]))

	for j in range(z.shape[0]):
		if j == 0:
			continue
		X = np.vstack((X,np.column_stack((x[0],z[j]))))

	print(X.shape)
	y = model.predict(X)
	
	# return
	# y = model.predcit(X)
	y = np.array([y])
	y = y.reshape(x.shape[0],z.shape[1])
	ax.plot_surface(x, z, y, cmap='rainbow')
	plt.show()

def pre(X,Y,model):
	model.predict(X)

 

 

学习网站

https://mp.weixin.qq.com/s?src=3&timestamp=1626275191&ver=1&signature=HnqUSx2r1Ut60GP*G0NEs61AZX48XBVP1G8y3Y*4aQSFel-l-lupMbidNqNdX-kc973aD79Ud8yltGYxlKAjHlI9wRJ1kiR*PFb9rN2IwyOuH2UoeCww-C79wguakNB6QFm0fpbyALSL-pYNJz96qraC1eeOAIpmcHu6RctixFc=

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值