keras minist3

修改了可以使用多显卡训练
发现对于小模型,多显卡也没快起来
另:batchsize大了,训练速度是快了,但是同样epoch性能狂跌
但是由于训练的速度快了,同样训练时间下,性能反而能上升

import numpy as np
from keras.datasets import mnist
from keras.utils import np_utils
from keras.models import Sequential,Model
from keras.layers import Input,Conv2D,Dense,Dropout,Convolution2D,MaxPooling2D,Flatten
from keras.optimizers import Adam
import tensorflow as tf
from keras.utils import multi_gpu_model
import time

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

x_train = x_train.reshape(-1,28,28,1)/255.0
x_test = x_test.reshape(-1,28,28,1)/255.0

print(x_train.shape)
print(x_test.shape)

num_classes = 10

with tf.device('/cpu:0'):
    input_image = Input(shape=(28,28,1))
    cnn = Conv2D(32,(5,5),padding='same',activation='relu')(input_image)
    cnn = MaxPooling2D((2,2),padding='same')(cnn)
    cnn = Conv2D(64,(5,5),padding='same',activation='relu')(cnn)
    cnn = MaxPooling2D((2,2),padding='same')(cnn)
    cnn = Flatten()(cnn)
    feature = Dense(1024,activation='relu')(cnn)
    feature = Dropout(0.5)(feature)
    predict = Dense(num_classes,activation='softmax',name='softmax')(feature) 
    model = Model(inputs=input_image, outputs=predict)

adam = Adam(lr=1e-4)


model.compile(optimizer=adam,loss='sparse_categorical_crossentropy',metrics=['accuracy'])

model.summary()

model_p = multi_gpu_model(model,4)
model_p.compile(optimizer=adam,loss='sparse_categorical_crossentropy',metrics=['accuracy'])

ta = time.time()
model_p.fit(x_train,y_train,batch_size=64,epochs=10)
tb = time.time()        
print('train time = ',tb-ta)

loss,accuracy = model.evaluate(x_test,y_test)

print('test loss',loss)
print('test accuracy',accuracy)
 
model.save("Test.h5")

from keras.models import load_model

model = load_model('Test.h5')
model.summary()

1卡,batch_size=64
训练时间277s,最终准确率0.992
在这里插入图片描述
4卡,batch_size=2000*4
训练时间150s,最终准确率0.9915
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/masbbx123/article/details/84772941