最简单的深度学习python程序解读(来自李宏毅)

import numpy as np
from keras.models import Sequential
from keras.layers.core import Dense,Dropout,Activation
from keras.layers import Conv2D,MaxPooling2D,Flatten
from keras.optimizers import SGD,Adam
from keras.utils import np_utils
from keras.datasets import mnist

def load_data():
    (x_train,y_train),(x_test,y_test) = mnist.load_data()
    print(x_train.shape) # (60000, 28, 28)
    print(y_train.shape)
    print(x_test.shape)
    print(y_test.shape)
    number = 10000
    x_train = x_train[0:number] # (10000, 28, 28)
    print(x_train.shape)
    y_train = y_train[0:number]
    x_train = x_train.reshape(number,28*28) #(10000, 784)
    print(x_train.shape)
    x_test = x_test.reshape(x_test.shape[0],28*28)
    x_train = x_train.astype('float32') # 转换数组的数据类型
    x_test = x_test.astype('float32')
    y_train = np_utils.to_categorical(y_train,10) # 例如把6变为 0000001000
    y_test = np_utils.to_categorical(y_test,10)
    x_train = x_train
    x_test = x_test
    x_train = x_train/255
    x_test = x_test/255
    return (x_train,y_train),(x_test,y_test)

(x_train,y_train),(x_test,y_test) = load_data()
#print(x_train[0])
print(y_train[0])
model = Sequential()
model.add(Dense(input_dtype=28*28,units=689,activation='sigmoid'))
model.add(Dense(units=689,activation='sigmoid'))

for i in range(10):
    model.add(Dense(units=689, activation='sigmoid'))

model.add(Dense(units=10,activation='softmax'))
model.compile(loss='mse',optimizer=SGD(lr=0.1),metrics=['accuracy'])
model.fit(x_train,y_train,batch_size=100,epochs=20)
result = model.evaluate(x_test,y_test)
print('\nTest Acc:', result[1])

先贴上源码。

导入模型部分我们暂且不提,首先先

(x_train,y_train),(x_test,y_test) = mnist.load_data()

通过mnist加载手写数据集。我们打印一下x_train等四个数据,可以发现,x_train是60000个数据,每个数据都是28*28像素的图像。y_train是一个一维数据,代表标签,表示该图像代表哪个数字。

x_train = x_train[0:number]

把前10000个数据提取出来,一共有60000个数据,我们只要前10000个。

x_train = x_train.reshape(number,28*28)

把数据重新排列,把代表每个图像的28*28的数组变为1*784的一维数据

y_train = np_utils.to_categorical(y_train,10)

然后该函数的作用:把数据变成一个十维的向量,因为我们是采用概率的思想进行计算(详见逻辑回归原理),例如如果是6,该函数将其转化为[0 0 0 0 0 0 1 0 0 0],第1个数据代表0,这里显示0 ,第7个数据代表6,这里显示1。

    x_train = x_train/255
    x_test = x_test/255

这里为什么要除以255,我首先验证了一下如果不除255,

左边是除以255以后的值,右边是不除255以后的值,我想了想,可能这就是个对数据特征的一次放缩罢了。

model = Sequential()

Sequential 表示是个顺序模型结构,是一个简单的线性结构,没有多余分支,是多个网络层的简单堆叠,即视频中描述的网络形状。

model.add

添加各种中间函数,可以用sigmoid,也可以用其他函数,随意。

model.compile(loss='mse',optimizer=SGD(lr=0.1),metrics=['accuracy'])
model.fit(x_train,y_train,batch_size=100,epochs=20)
result = model.evaluate(x_test,y_test)

然后我们把loss定义为mse,mse多用于回归问题,也可以用课本中将的crossentropy为交叉熵损失函数来实验。

之后我们定义每个batch里面有100个数据集,并定义20次epochs,即每次计算都要计算20*100个数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dezeming

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值