深度学习:python教程 实践(一)

请看第七章
https://cnbeining.github.io/deep-learning-with-python-cn/3-multi-layer-perceptrons/ch9-use-keras-models-with-scikit-learn-for-general-machine-learning.html
目的:训练个模型出来

由于文中的资源和数据并没有交代清楚
所以我自己搞了一下下

从原文7.3的一段代码可以看出
# load pima indians dataset
dataset = numpy.loadtxt("pima-indians-diabetes.csv", delimiter=",")
# split into input (X) and output (Y) variables
X = dataset[:,0:8]
Y = dataset[:,8]
之后所需的是一个nparrray()的二维数组

仅做学习用,自己构造了测试数据
以下 为构造测试数据的方法
 
   
def get_range(range_one, range_two):
    list_one = []
    for x in range(range_one):
        list_two = []
        for y in range(range_two):
            if y == 0:
                value = random.randint(0, 10)
            else:
                value = random.randint(0, 1)
            list_two.append(value)
        list_one.append(list_two)
    return np.array(list_one)
其实就是两个循环构造一个二位数组
文中选择的案例是皮马印第安人糖尿病数据集
有8个属性,太多了,砍 成两个属性就好

于是生成的二维数组就可以如下生成
 
   
# 对应含义
name_list = ["怀孕次数", "是否糖尿病"]
# 生成数据集
test_data_np = get_range(1000, 2)
一千行二维数组
怀孕次数在0-10之间,是否糖尿病用1,0表示
因为仅测试,所以数据集中的含义并无所谓

以上是从原文推导出来的数据格式,有兴趣的也可以自己试试


ok,让我们接着往下做

inputLayer->hiddenLayer->outputLayer
此处的概念不做详细解释,仅注意输入层和输出层,


7.5 7.6 7.7代码写不出来了,没关系,直接拉到网页最底就可以看到通篇代码

注意以下几点:

X = test_data_np[:, 0:1]
Y = test_data_np[:, 1]

input_dim=8
此处因为简化,所以改成了1

相应的调整Dense里的参数,12->4, 8->2

nb_epoch=25 # 训练轮数
batch_size=2    # 每次数据2个,猜测就是用两行

其实生成了1000行
1000/25 = 40
就是训练25次,每次40行,最后把数据都用上了。
不过
无所谓!
用pycharm运行一下程序,即可看到输出
文中的一些警告其实是参数名字改掉了,如果强迫症的可以把参数名字按要求修改(比如说我就有点强迫症)

最后实践成果

附上输出结果
红框部分会出现25次,最后有个acc:50.15%

附上所有代码
# /usr/bin/evn python
# -*- coding: utf-8 -*-
'''
author: liuweixing@[email protected]
'''
"""基础模块"""
"""框架模块"""
from keras.models import Sequential
from keras.layers import Dense
import numpy as np
# import pandas as pd

"""工具模块"""
import random

"""实现"""

"""
a = [[0,1,2,3],[0,1,2,3],[0,1,2,3]]
a_np = np.array(a)
print(a_np[:,0:1])
"""

name_list = ["怀孕次数", "是否糖尿病"]


def get_range(range_one, range_two):
    list_one = []
    for x in range(range_one):
        list_two = []
        for y in range(range_two):
            if y == 0:
                value = random.randint(0, 10)
            else:
                value = random.randint(0, 1)
            list_two.append(value)
        list_one.append(list_two)
    return np.array(list_one)


test_data_np = get_range(1000, 2)
X = test_data_np[:, 0:1]
Y = test_data_np[:, 1]
print(test_data_np)

model = Sequential()
model.add(Dense(12, input_dim=1, kernel_initializer='uniform', activation='relu'))
model.add(Dense(8, kernel_initializer='uniform', activation='relu'))
model.add(Dense(1, kernel_initializer='uniform', activation='sigmoid'))

model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(X, Y, epochs=25, batch_size=40)

scores = model.evaluate(X, Y)
print("%s: %.2f%%" % (model.metrics_names[1], scores[1] * 100))



你可能感兴趣的:(AI)