2017-04-03 50 views
-4

我想在ubuntu中使用keras和tensorflow api在后端运行Python 3.5版中的代码。但它在第13行显示语法错误。这是代码取自链接https://github.com/JostineHo/mememoji/tree/master/src.According我在代码中没有语法错误。python 3.5 ubuntu深度神经网络语法错误

enter code here 
from keras.preprocessing.image import ImageDataGenerator 
from keras.mo`enter code here`dels import Sequential 
from keras.layers import Convolution2D, MaxPooling2D 
from keras.layers import Activation, Dropout, Flatten, Dense 
from keras.callbacks import EarlyStopping 
from log import save_model, save_config, save_result 
from sklearn.cross_validation import train_test_split 
import numpy as np 
import time 
import sys 

def describe(X_shape, y_shape, batch_size, dropout, nb_epoch, conv_arch, dense): 
    print ' X_train shape: ', X_shape # (n_sample, 1, 48, 48) 
    print ' y_train shape: ', y_shape # (n_sample, n_categories) 
    print '  img size: ', X_shape[2], X_shape[3] 
    print ' batch size: ', batch_size 
    print '  nb_epoch: ', nb_epoch 
    print '  dropout: ', dropout 
    print 'conv architect: ', conv_arch 
    print 'neural network: ', dense 

def logging(model, starttime, batch_size, nb_epoch, conv_arch,dense, dropout, 
      X_shape, y_shape, train_acc, val_acc, dirpath): 
    now = time.ctime() 
    model.save_weights('../data/weights/{}'.format(now)) 
    save_model(model.to_json(), now, dirpath) 
    save_config(model.get_config(), now, dirpath) 
    save_result(starttime, batch_size, nb_epoch, conv_arch, dense, dropout, 
        X_shape, y_shape, train_acc, val_acc, dirpath) 

def cnn_architecture(X_train, y_train, conv_arch=[(32,3),(64,3),(128,3)], 
        dense=[64,2], dropout=0.5, batch_size=128, nb_epoch=100, validation_split=0.2, patience=5, dirpath='../data/results/'): 
    starttime = time.time() 
    X_train = X_train.astype('float32') 
    X_shape = X_train.shape 
    y_shape = y_train.shape 
    describe(X_shape, y_shape, batch_size, dropout, nb_epoch, conv_arch, dense) 

    # data augmentation: 
    # X_train, X_test, y_train, y_test = train_test_split(X_train, y_train, test_size=validation_split) 
    # datagen = ImageDataGenerator(rescale=1./255, 
    #        rotation_range=10, 
    #        shear_range=0.2, 
    #        width_shift_range=0.2, 
    #        height_shift_range=0.2, 
    #        horizontal_flip=True) 

    # datagen.fit(X_train) 
    # model architecture: 
    model = Sequential() 
    model.add(Convolution2D(conv_arch[0][0], 3, 3, border_mode='same', activation='relu',input_shape=(1, X_train.shape[2], X_train.shape[3]))) 

    if (conv_arch[0][1]-1) != 0: 
     for i in range(conv_arch[0][1]-1): 
      model.add(Convolution2D(conv_arch[0][0], 3, 3, border_mode='same', activation='relu')) 
     model.add(MaxPooling2D(pool_size=(2, 2))) 

    if conv_arch[1][1] != 0: 
     for i in range(conv_arch[1][1]): 
      model.add(Convolution2D(conv_arch[1][0], 3, 3, border_mode='same', activation='relu')) 
     model.add(MaxPooling2D(pool_size=(2, 2))) 

    if conv_arch[2][1] != 0: 
     for i in range(conv_arch[2][1]): 
      model.add(Convolution2D(conv_arch[2][0], 3, 3, border_mode='same', activation='relu')) 
     model.add(MaxPooling2D(pool_size=(2, 2))) 

    model.add(Flatten()) # this converts 3D feature maps to 1D feature vectors 
    if dense[1] != 0: 
     for i in range(dense[1]): 
      model.add(Dense(dense[0], activation='relu')) 
      if dropout: 
       model.add(Dropout(dropout)) 
    prediction = model.add(Dense(y_train.shape[1], activation='softmax')) 

    # optimizer: 
    model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) 

    # set callback: 
    callbacks = [] 
    if patience != 0: 
     early_stopping = EarlyStopping(monitor='val_loss', patience=patience, verbose=1) 
     callbacks.append(early_stopping) 

    print 'Training....' 
    # fits the model on batches with real-time data augmentation: 
    # hist = model.fit_generator(datagen.flow(X_train, y_train, batch_size=batch_size), 
    #     samples_per_epoch=len(X_train), nb_epoch=nb_epoch, validation_data=(X_test,y_test), callbacks=callbacks, verbose=1) 

    '''without data augmentation''' 
    hist = model.fit(X_train, y_train, nb_epoch=nb_epoch, batch_size=batch_size, 
       validation_split=validation_split, callbacks=callbacks, shuffle=True, verbose=1) 

    # model result: 
    train_val_accuracy = hist.history 
    train_acc = train_val_accuracy['acc'] 
    val_acc = train_val_accuracy['val_acc'] 
    print '   Done!' 
    print '  Train acc: ', train_acc[-1] 
    print 'Validation acc: ', val_acc[-1] 
    print ' Overfit ratio: ', val_acc[-1]/train_acc[-1] 

    logging(model, starttime, batch_size, nb_epoch, conv_arch, dense, 
      dropout, X_shape, y_shape, train_acc, val_acc, dirpath) 

    return model 

if __name__ == '__main__': 
    # import dataset: 
    X_fname = '../data/X_train6_5pct.npy' 
    y_fname = '../data/y_train6_5pct.npy' 
    X_train = np.load(X_fname) 
    y_train = np.load(y_fname) 
    print 'Loading data...' 

    cnn_architecture(X_train, y_train, conv_arch=[(32,3),(64,3),(128,3)], dense=[64,2], batch_size=256, nb_epoch=5, dirpath = '../data/results/') 
+0

能否请您添加错误 –

+0

了解如何创建[最小的,完整的,和可核查的示例](https://stackoverflow.com/help/mcve) – gobrewers14

+0

这是一个Python 2代码 –

回答

2

好吧,这是一个小错误。 您复制的代码是用于Python2.x,并且您正在Python 3.x上运行它。你有最终两个可选

  1. 要么使用Python 2.x的
  2. 或端口在Python 2.x的代码中使用2to3.py到3.x

附:目前,您的错误是“在打印'中缺少小括号' 因此而不是print ' X_train shape: ', X_shape使它在每个打印语句中都有 print (' X_train shape: ', X_shape)

感谢