{"cells":[{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"5bc8fb56-d91d-c3b3-1e0b-9eba21ac0110"},"outputs":[],"source":" \nimport numpy as numpy\nimport pandas as pandas\n\nfrom subprocess import check_output\n\nimport os,cv2,random\n\nfrom keras.models import Sequential\nfrom keras.layers import Input,Dropout,Flatten,Convolution2D,MaxPooling2D,Dense,Activation\nfrom keras.optimizers import RMSprop\nfrom keras.callbacks import ModelCheckpoint,Callback,EarlyStopping\nfrom keras.utils import np_utils\n\n# Add references to test and training file directories:\n\ntrainDir = '../input/train/'\ntestDir = '../input/test/'\n\n# Specify 32 rows and columns, and only one channel, which simplifies the \n# processing (vs. 64 rows and columns, and 3 channels):\n\nrows = 32\ncols = 32\nchannels = 1"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"e805c340-2f41-466e-b2a4-b4312f492309"},"outputs":[],"source":"# 获取所有的文件名\n\ntrainImages = [trainDir+i for i in os.listdir(trainDir)]\ntestImages = [testDir+i for i in os.listdir(testDir)]\n\n\n\n# Define functions for reading in the image and preparing the image for processing:\n\ndef readImage(filePath):\n    img = cv2.imread(filePath,cv2.IMREAD_GRAYSCALE)\n    return cv2.resize(img,(rows,cols),interpolation=cv2.INTER_CUBIC)\n\ndef prepData(images):\n    count = len(images)\n    data = numpy.ndarray((count,channels,rows,cols),dtype=numpy.uint8)\n    \n    for i,imageFile in enumerate(images):\n        image = readImage(imageFile)\n        data[i] = image.T\n        if i%250 == 0: print('Processed {} of {}'.format(i,count))\n    \n    return data\n\n# Implement training and data sets, and append labels for submission:\n\ntrain = prepData(trainImages)\ntest = prepData(testImages)\n\nprint(\"Train shape: {}\".format(train.shape))\nprint(\"Test shape: {}\".format(test.shape))\n\nlabels = []\nfor i in trainImages:\n\tif 'dog' in i:\n\t\tlabels.append(1)\n\telse:\n\t\tlabels.append(0)\n\n# Train on image shape:        \n        \ntrain = train.reshape(-1,32,32,1)\ntest = test.reshape(-1,32,32,1)\nxTrain = train.astype('float32')\nxTest = test.astype('float32')\nxTrain /= 255\nxTest /= 255\nyTrain = labels\n\nxValid = xTrain[:5000,:,:,:]\nyValid = yTrain[:5000]\nxTrain = xTrain[5001:25000,:,:,:]\nyTrain = yTrain[5001:25000]\n\nprint(\"Training matrix shape\",xTrain.shape)\nprint(\"Training matrix shape\",xTest.shape)\n\n# Fit to model:\n\nmodel = Sequential()\nmodel.add(Convolution2D(16,3,3,border_mode='same',input_shape=(rows,cols,channels),activation='relu'))\nmodel.add(MaxPooling2D(pool_size=(2, 2)))\nmodel.add(Convolution2D(32,3,3,border_mode='same',activation='relu'))\nmodel.add(MaxPooling2D(pool_size=(2,2)))\nmodel.add(Flatten())\nmodel.add(Dense(100,activation='relu'))\nmodel.add(Dropout(0.5))\nmodel.add(Dense(100,activation='relu'))\nmodel.add(Dropout(0.5))\nmodel.add(Dense(1))\nmodel.add(Activation('sigmoid'))\n\nmodel.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy'])\n\nmodel.fit(xTrain,yTrain,\n\t\t  batch_size = 128, nb_epoch = 8,\n\t\t  show_accuracy = True, verbose = 1,\n\t\t  validation_data = (xValid,yValid))\n\n# Prepare submission CSV file:\n\nsubmission = model.predict_proba(xTest, verbose = 1)\ntestID = range(1,12501)\npredictionsDF = pandas.DataFrame({'id': testID, 'label': submission[:,0]})\n\npredictionsDF.to_csv(\"JoeWessel_Submissions.csv\", index = False)\n"}],"metadata":{"_change_revision":0,"_is_fork":false,"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.6.0"}},"nbformat":4,"nbformat_minor":0}