李宏毅ML+DL学习记录:Keras初始用

step1:搭建neural network的框架

在这里插入图片描述
dense就是代表全连接
activation表示激活函数

step2: goodness of function

在这里插入图片描述
loss就是损失函数

step3: pick the best function

在这里插入图片描述
optimizer就是选择的优化方式(gradient descent 之类的)
batch_size:放在一个batch里面的样本数量(比如batch_size=10,那么这10个样本是同时运算的,即并行运算。但是batch_size也不能太大,太大的话GPU就无法完成并行运算了),
batch的数量=样本总数/batch_size
跑完一个batch更新一次参数,
如果batch_size = 1,那么就是SGD,梯度变来变去,较难收敛;
如果batch_size = 样本总数,那么就是GD,梯度较为准确,但可能收敛到初始点附近的局部最优,并且不太适合样本量较大的情况。
epoch:跑完所有的batch一次(也就是跑完了所有的样本一次)就完成了一次epoch(感觉应该就是一次iteration)

step4: 最终结果与预测:

在这里插入图片描述

import keras
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
import numpy as np


#载入数据并进行预处理:
def load_data():
    (x_train,y_train),(x_test,y_test) = mnist.load_data() #x_train.shape为(60000,28,28)说明一共有6万张图片,每张是28*28。y_train是6万维的列向量。test有1万张
    number = 10000
    x_train = x_train[0:number] #取前1万张作为训练集
    y_train = y_train[0:number]
    x_train = x_train.reshape(number,28*28) #x_train原来是(10000,28,28)现在转化为(1000,28*28)
    x_test = x_test.reshape(x_test.shape[0],28*28) #x_test原来是(10000,28,28)现在转化为(10000,28*28)
    x_train = x_train.astype('float32')
    x_test = x_test.astype('float32')
    y_train = np_utils.to_categorical(y_train,10) #onehot编码
    y_test = np_utils.to_categorical(y_test,10)
    x_train = x_train
    x_test = x_test
    x_train = x_train/255 #这个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()


#搭NN:
model = Sequential()
model.add(Dense(input_dim=28*28,units=500,activation='sigmoid'))
model.add(Dense(units=500,activation='sigmoid'))
model.add(Dense(units=10,activation='softmax'))

#选择loss function的形式与optimizer的类别
model.compile(loss='mse',optimizer=SGD(lr=0.1),metrics=['accuracy'])

#开始训练
model.fit(x_train,y_train_new,batch_size=100,epochs=30)

#用test集进行检验:
result=model.evaluate(x_test,y_test_new)
print(result[1])

发布了43 篇原创文章 · 获赞 1 · 访问量 766

猜你喜欢

转载自blog.csdn.net/weixin_41391619/article/details/104461752