有数据集资料的群还没批准我加群。。。因此拿Excel用随机数生成了一些,下面先补上昨天没做的逻辑回归实验。
测试过程如下:
import tensorflow as tf import pandas as pd import numpy as np import matplotlib.pyplot as plt %matplotlib inline data = pd.read_csv('dataset/credite-a.csv') #head默认显示前五行 data.head()
x = data.iloc[:, :-1] #y轴将-1替换成0,方便显示 y = data.iloc[:, -1].replace(-1,0) #顺序模型 model = tf.keras.Sequential() #隐藏层1,规定4个隐藏单元数,input_shape:15列 model.add(tf.keras.layers.Dense(4, input_shape=(15,), activation='relu')) #隐藏层2,依然4个单元,但不用设置input_shape,因为会自己推断 model.add(tf.keras.layers.Dense(4, activation='relu')) #输出层,逻辑回归激活函数:sigmoid model.add(tf.keras.layers.Dense(1, activation='sigmoid')) model.summary()
这里dense的param计算结果不再多说,上上篇博客里的代码注释里我写过。
#ADAM算法,loss交叉熵算法,metrics运行过程中会计算正确率 model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['acc']) #训练 history = model.fit(x, y, epochs=1000)
这里训练了1000次,正确率(acc)达到了67.68%。
图示如下:
这里图示显示的很乱主要还是数据集弄的不够好,我只是随机生成了100条随机数据,原视频演示里数据量达到了600+。
下面是新学的内容了:
Softmax分类:
对数几率回归解决的是二分类问题,多选项问题可以使用softmax函数,它是对数几率回归在N个可能不同的值上的推广。
神经网络原始输出不是一个概率的值,只是输入的数值做了复杂的加权与非线性处理(relu)之后的一个值而已,softmax层的作用就是将这个输出变为概率分布。
Softmax要求每个样本必须属于某个类别,且所有可能的样本均被覆盖
Softmax个样本分量之和为1,只有两个类别时与对数几率回归完全相同。
tf.keras中对于多分类问题通常使用categorical_crossentropy和sparse_categorical_crossentropy来计算softmax的交叉熵。
为了实现softmax分类的测试,我们需要下载个数据集,这次使用的是tensorflow里就可以导入使用的数据集,经典的Fashion MNIST数据集:
Fashion MNIST数据集:作用是成为经典MNIST数据集的简单替换,此数据集中是一些服饰图像。可以通过tensorflow直接访问,只需要导入和加载数据即可。
测试过程如下:
#导入Fashion MNIST数据集 import tensorflow as tf import pandas as pd import numpy as np import matplotlib.pyplot as plt %matplotlib inline (train_image, train_label), (test_image, test_label) = tf.keras.datasets.fashion_mnist.load_data()
我好像没有配置tensorflow的下载镜像源,因此下载速度偏慢,总共用了10多分钟:
这个数据集默认存在C:Users用户名.kerasdatasets里:
数据大概是这样子的:
接下来是使用softmax分类问题:
#令取值范围变为0-1(归一化) train_image = train_image/255 test_image = test_image/255 #建立模型,注意数据为二维(28*28) model = tf.keras.Sequential() #先将二维扁平成一维 model.add(tf.keras.layers.Flatten(input_shape=(28,28))) model.add(tf.keras.layers.Dense(128, activation='relu')) #使用softmax激活 model.add(tf.keras.layers.Dense(10, activation='softmax')) #编译 ##由于label使用的是数字编码,因此这里的loss使用sparse_categorical_crossentropy model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['acc']) model.fit(train_image, train_label, epochs=5)
显然这个数据集就很好,仅训练了5次正确率就达到了89.10%
最后是评价:
使用test_image和test_label对训练出来的模型进行评价,正确率达到了87.89%
除了tensorflow的学习之外,今天还把虚拟机的配置调试好了,包括hadoop的伪分布式安装,原电脑上的hbase,hive,mongodb和redis的包什么的也拷到这台电脑上来了。另外从今天开始得调整一下作息了,这两天熬夜搞得白天整个人都不好了T_T。