目录
实验10
from keras.datasets import mnist
import numpy as np
from keras.models import Sequential
from keras.layers import Dense
from keras.optimizers import SGD
import matplotlib.pyplot as plt
# from keras.utils import to_categorical
from tensorflow.keras.utils import to_categorical
(X_train,Y_train),(X_test,Y_test)=mnist.load_data()
print("X_train.shape:"+str(X_train.shape))
print("Y_train.shape:"+str(Y_train.shape))
print("X_test.shape:"+str(X_test.shape))
print("Y_test.shape:"+str(Y_test.shape))
print(Y_train[0])
plt.imshow(X_train[0],cmap='gray')
plt.show()
X_train=X_train.reshape(60000,784)/255.0
X_test=X_test.reshape(10000,784)/255.0
Y_train=to_categorical(Y_train,10)
Y_test=to_categorical(Y_test,10)
model = Sequential()
model.add(Dense(units=256,activation='relu',input_dim=784))
model.add(Dense(units=256,activation='relu'))
model.add(Dense(units=256,activation='relu'))
model.add(Dense(units=10,activation='softmax'))
model.compile(loss='categorical_crossentropy',optimizer=SGD(lr=0.05),metrics=['accuracy'])
model.fit(X_train,Y_train,epochs=5000,batch_size=4096)
loss,accuracy=model.evaluate(X_test,Y_test)
print("loss"+str(loss))
print("accuracy"+str(accuracy))
# pres=model.predict(X)
#
# plot_utils.show_scatter_surface(X,Y,model)
#
# print(model.get_weights())
往后的精确度其实都蛮高。
跑了18分钟,才训练完,第一次训练不知道是不是都用那么久,明明已经用cuda加速了。
遇到的问题
利用卷积神经网络实验11
from keras.datasets import mnist
import numpy as np
from keras.models import Sequential
from keras.layers import Dense
from keras.optimizers import SGD
import matplotlib.pyplot as plt
# from keras.utils import to_categorical
from tensorflow.keras.utils import to_categorical
from keras.layers import Conv2D
from keras.layers import AveragePooling2D
from keras.layers import Flatten
#这是隔离gpu
# import os
# os.environ["CUDA_VISIBLE_DEVICES"] = "-1"
(X_train,Y_train),(X_test,Y_test)=mnist.load_data()
X_train=X_train.reshape(60000,28,28,1)/255.0
X_test=X_test.reshape(10000,28,28,1)/255.0
Y_train=to_categorical(Y_train,10)
Y_test=to_categorical(Y_test,10)
model = Sequential()
model.add(Conv2D(filters=6,kernel_size=(5,5),strides=(1,1),input_shape=(28,28,1),padding='valid',activation='relu'))
model.add(AveragePooling2D(pool_size=(2,2)))
model.add(Conv2D(filters=16,kernel_size=(5,5),strides=(1,1),padding='valid',activation='relu'))
model.add(AveragePooling2D(pool_size=(2,2)))
model.add(Flatten())
model.add(Dense(units=120,activation='relu'))
model.add(Dense(units=84,activation='relu'))
model.add(Dense(units=10,activation='softmax'))
model.compile(loss='categorical_crossentropy',optimizer=SGD(lr=0.05),metrics=['accuracy'])
model.fit(X_train,Y_train,epochs=5000,batch_size=4096)
loss,accuracy=model.evaluate(X_test,Y_test)
print("loss"+str(loss))
print("accuracy"+str(accuracy))
遇到的问题
报错,百度原因,说是显卡缓存不足,但是跑上次的是可以的,于是我把epoch改小一些,但是还是不行,我改成1还是不行。百度说加一段代码
#这是隔离gpu
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "-1"
但是这是不用gpu跑,用cpu跑,可以正常运行,说明代码是没有错误的,百度两小时也没合适的就觉方法,于是我想,如果不是代码的问题,那肯定是自己的cuda问题。想起来今天有人在群里问缺dll包,有大佬回复说去下cudnn,于是去英伟达官网下载了对应版本的cudnn,把/bin里的包复制到自己cuda /bin下,果然运行成功。之前解决cuda问题,仅仅是把报错缺失的包下载下来。
用cpu跑的话是150ms左右,而用gpu是10ms左右,快了15倍。
keras回顾
Dense 是全连接层 units 该层用了几个神经元
Sequential是用来堆叠神经网络的载体 activation 激活函数的类型
input_dim 输入特征的维度(如果只有豆豆的大小,那就为1)
loss 是所用哪种损失函数(我们在课程一般用的mse 均方误差代价函数)
sgd 为优化器,一般为随机梯度下降算法
accuracy 评估标准,准确度
训练时我们用fit函数进行训练,我们传入样本特征数据X为输入,Y作为标准答案数据。指定下训练的回合数epochs,和每一次训练使用的样本数量batch_size.
lr 为学习率 plot_utils 里的show_scatter_curve 是画二维的函数 _surface是画三维
看大佬讨论问题。
规划
我此次学的这门课,8月份就要学完了,可能只能算是深度学习入门,在此基础上,开始看李沐的课,等到李沐的课看完,然后拿吴恩达大佬的课再顺一遍。自己的同学已经开始阅读深度学习的有关文献,希望能在学习之余多看点文献充实自己。