8 Keras使用
adam高级优化方法不需要自己设置学习速率
如果有100个batch,1个epoch就更新参数100次
可以看出,batch_size 为1 和为10,参数更新速度是一样的(相同时间下,都用166s),这是由于vectorization带来的加速,并行运算。但随着batch_size 增大,速度会减慢。
mini-batch,参数更新有较大随机性,帮助跳出local minimum。如果不使用mini=batch,计算机可能会卡(内存不足),或则容易陷入local minimum。
上面的时间是下面的两倍,所以,当有GPU计算资源时,应该使用mini-batch,否则不会带来加速。
手写数字识别
import numpy as np
from keras.models import Sequential
from keras.layers import Dense, Activation
from keras.datasets import mnist
from keras.utils import np_utils
from keras.optimizers import SGD,Adam
import keras.callbacks
import time
a = time.time()
def load_data():
(x_train,y_train),(x_test,y_test)=mnist.load_data()
# print(x_train.shape,y_train.shape) #(60000, 28, 28) (60000,)
# print(x_test.shape, y_test.shape) # (10000, 28, 28) (10000,)
number = 10000
x_train = x_train[:number]
y_train = y_train[:number]
x_train = x_train.reshape(number,28*28)
# print(y_train.shape) # (10000,)
x_test = x_test.reshape(x_test.shape[0],28*28)
x_train = x_train.astype(np.float32)
x_test = x_test.astype(np.float32)
y_train = np_utils.to_categorical(y_train,10)
y_test = np_utils.to_categorical(y_test, 10)
# print(y_train.shape) # (10000, 10)
x_train /= 255
x_test /= 255
# print(x_train.shape,y_train.shape,x_test.shape,y_test.shape) # (10000, 784) (10000, 10) (10000, 784) (10000, 10)
return (x_train,y_train),(x_test,y_test)
(x_train,y_train),(x_test,y_test) = load_data()
model = Sequential()
# 全连接层
model.add(Dense(input_dim=28*28,units=500,activation='relu')) # 'relu' 'sigmoid'
model.add(Dense(units=500,activation='relu'))
model.add(Dense(units=10,activation='softmax'))
# model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy'])
# model.compile(loss='mse',optimizer='sgd',metrics=['accuracy'])
# model.compile(loss='categorical_crossentropy',optimizer=SGD(lr=0.01, momentum=0.9, nesterov=True),metrics=['accuracy'])
model.compile(loss='categorical_crossentropy',optimizer=Adam(),metrics=['accuracy'])
#
#可视化
log_filepath = 'E:\AAA\PYTHON\conda_test\keras_log'
tb_cb = keras.callbacks.TensorBoard(log_dir=log_filepath, write_images=1)
# 设置log的存储位置,将网络权值以图片格式保持在tensorboard中显示,设置每一个周期计算一次网络的权值,每层输出值的分布直方图
cbks = [tb_cb]
model.fit(x_train,y_t