keras merged model

来源:互联网 发布:电脑服装设计软件 编辑:程序博客网 时间:2024/06/06 13:57

keras merged model
可参考网址
http://www.cnblogs.com/qianboping/p/6509794.html
https://www.kaggle.com/nikosias/keras-merged-model

import numpy as npimport pandas as pdfrom keras.optimizers import SGDfrom keras.models import Sequentialfrom keras.layers import Mergefrom keras.layers.convolutional import Convolution2D, MaxPooling2D, ZeroPadding2Dfrom keras.layers.core import Dense, Activation, Dropout, Reshape, Flattenfrom keras.utils.np_utils import to_categoricaldata = pd.read_csv('../input/train.csv')images = data.iloc[:,1:].valuesimages = images.astype(np.float)images = np.multiply(images, 1.0 / 255.0)print ('Train\'s shape =>({0[0]},{0[1]})'.format(images.shape))labelsFlat = data[[0]].valuesclasses = len(np.unique(labelsFlat))labelsCategorical = to_categorical(labelsFlat,classes)labelsCategorical = labelsCategorical.astype(np.uint8)print ('Train\'s classes =>({0})'.format(classes))test = pd.read_csv('../input/test.csv').valuestestX = testtestX = testX.astype(np.float)testX = np.multiply(testX, 1.0 / 255.0)print ('Test\'s shape =>({0[0]},{0[1]})'.format(testX.shape))leftBranch = Sequential()leftBranch.add(Reshape((1,28,28), input_shape=(784,)))leftBranch.add(Convolution2D(classes, 3, 1, activation='relu'))leftBranch.add(MaxPooling2D((2, 2), strides=(2, 2)))leftBranch.add(Flatten())rightBranch = Sequential()rightBranch.add(Reshape((1,28,28), input_shape=(784,)))rightBranch.add(Convolution2D(classes, 1, 3, activation='relu'))rightBranch.add(MaxPooling2D((2, 2), strides=(2, 2)))rightBranch.add(Flatten())centralBranch = Sequential()centralBranch.add(Reshape((1,28,28), input_shape=(784,)))centralBranch.add(Convolution2D(classes, 5, 5, activation='relu'))centralBranch.add(MaxPooling2D((2, 2), strides=(2, 2)))centralBranch.add(Flatten())merged = Merge([leftBranch, centralBranch, rightBranch], mode='concat')model = Sequential()model.add(merged)model.add(Dense(28*3, activation='relu'))model.add(Dropout(0.5))model.add(Dense(28, activation='relu'))model.add(Dense(input_dim=10, output_dim=classes))model.add(Activation("softmax"))sgd = SGD(lr=0.5, momentum=0.0, decay=0.0, nesterov=False)model.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['accuracy'])model.fit([images,images,images], labelsCategorical,            nb_epoch=5, batch_size=100, verbose=2)yPred = model.predict_classes([testX,testX,testX])np.savetxt('dr.csv', np.c_[range(1,len(yPred)+1),yPred], delimiter=',',            header = 'ImageId,Label', comments = '', fmt='%d')