寒假学习日报(六)

  有数据集资料的群还没批准我加群。。。因此拿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_crossentropysparse_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。

原文地址:https://www.cnblogs.com/20183711PYD/p/14283548.html