您的位置:首页 > 编程语言 > Python开发

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

2018-01-24 17:01 190 查看
请看第七章

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@2276959997@qq.com
'''
"""基础模块"""
"""框架模块"""
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(
a747
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))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: