def train(self, x_train, x_test, y_train, y_test, embedding_matrix, num_classes, seq_length=200, emb_dim=100, train_emb=True, windows=(3, 4, 5, 6), dropouts=(0.2, 0.4), filter_sz=100, hid_dim=100, bch_siz=50, epoch=8): #setup and train the nueral net from tensorflow.contrib.keras.api.keras.models import Model from tensorflow.contrib.keras.api.keras.layers import Activation, Dense, Dropout, Embedding, Flatten, Input, Concatenate, Conv1D, MaxPool1D inp = Input(shape=(seq_length, )) out = Embedding(input_dim=len(embedding_matrix[:, 1]), output_dim=emb_dim, input_length=seq_length, weights=[embedding_matrix], trainable=train_emb)(inp) out = Dropout(dropouts[0])(out) convs = [] for w in windows: conv = Conv1D(filters=filter_sz, kernel_size=w, padding='valid', activation='relu', strides=1)(out) conv = MaxPool1D(pool_size=2)(conv) conv = Flatten()(conv) convs.append(conv) out = Concatenate()(convs) out = Dense(hid_dim, activation='relu')(out) out = Dropout(dropouts[1])(out) out = Activation('relu')(out) out = Dense(num_classes, activation='softmax')(out) model = Model(inp, out) model.compile(loss='categorical_crossentropy', optimizer='nadam', metrics=['accuracy']) model.fit(x_train, y_train, batch_size=bch_siz, epochs=epoch, verbose=2, validation_data=(x_test, y_test)) return model
row, col, pixel = x_train.shape[1:] # 4D input. x = Input(shape=(row, col, pixel)) # Encodes a row of pixels using TimeDistributed Wrapper. encoded_rows = TimeDistributed(LSTM(row_hidden))(x) # Encodes columns of encoded rows. encoded_columns = LSTM(col_hidden)(encoded_rows) # Final predictions and model. prediction = Dense(num_classes, activation='softmax')(encoded_columns) model = Model(x, prediction) model.compile(loss='categorical_crossentropy', optimizer='rmsprop', metrics=['accuracy']) # Training. model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, verbose=1, validation_data=(x_test, y_test)) # Evaluation. scores = model.evaluate(x_test, y_test, verbose=0) print('Test loss:', scores[0]) print('Test accuracy:', scores[1])
def train(data, file_name, nlayer, num_epochs=10, batch_size=128, train_temp=1, init=None, activation=tf.nn.relu): """ Train a n-layer CNN for MNIST and CIFAR """ inputs = Input(shape=(28, 28, 1)) if nlayer == 2: x = Residual2(8, activation)(inputs) x = Lambda(activation)(x) x = Residual2(16, activation)(x) x = Lambda(activation)(x) x = AveragePooling2D(pool_size=7)(x) x = Flatten()(x) x = Dense(10)(x) if nlayer == 3: x = Residual2(8, activation)(inputs) x = Lambda(activation)(x) x = Residual(8, activation)(x) x = Lambda(activation)(x) x = Residual2(16, activation)(x) x = Lambda(activation)(x) x = AveragePooling2D(pool_size=7)(x) x = Flatten()(x) x = Dense(10)(x) if nlayer == 4: x = Residual2(8, activation)(inputs) x = Lambda(activation)(x) x = Residual(8, activation)(x) x = Lambda(activation)(x) x = Residual2(16, activation)(x) x = Lambda(activation)(x) x = Residual(16, activation)(x) x = Lambda(activation)(x) x = AveragePooling2D(pool_size=7)(x) x = Flatten()(x) x = Dense(10)(x) if nlayer == 5: x = Residual2(8, activation)(inputs) x = Lambda(activation)(x) x = Residual(8, activation)(x) x = Lambda(activation)(x) x = Residual(8, activation)(x) x = Lambda(activation)(x) x = Residual2(16, activation)(x) x = Lambda(activation)(x) x = Residual(16, activation)(x) x = Lambda(activation)(x) x = AveragePooling2D(pool_size=7)(x) x = Flatten()(x) x = Dense(10)(x) model = Model(inputs=inputs, outputs=x) # load initial weights when given if init != None: model.load_weights(init) # define the loss function which is the cross entropy between prediction and true label def fn(correct, predicted): return tf.nn.softmax_cross_entropy_with_logits(labels=correct, logits=predicted / train_temp) # initiate the Adam optimizer sgd = Adam() # compile the Keras model, given the specified loss and optimizer model.compile(loss=fn, optimizer=sgd, metrics=['accuracy']) model.summary() # run training with given dataset, and print progress history = model.fit(data.train_data, data.train_labels, batch_size=batch_size, validation_data=(data.validation_data, data.validation_labels), epochs=num_epochs, shuffle=True) # save model to a file if file_name != None: model.save(file_name) return {'model': model, 'history': history}
embedding_layer = Embedding(num_words, EMBEDDING_DIM, weights=[embedding_matrix], input_length=MAX_SEQUENCE_LENGTH, trainable=False) print('Training model.') # train a 1D convnet with global maxpooling sequence_input = Input(shape=(MAX_SEQUENCE_LENGTH,), dtype='int32') embedded_sequences = embedding_layer(sequence_input) x = Conv1D(128, 5, activation='relu')(embedded_sequences) x = MaxPooling1D(5)(x) x = Conv1D(128, 5, activation='relu')(x) x = MaxPooling1D(5)(x) x = Conv1D(128, 5, activation='relu')(x) x = MaxPooling1D(35)(x) x = Flatten()(x) x = Dense(128, activation='relu')(x) preds = Dense(len(labels_index), activation='softmax')(x) model = Model(sequence_input, preds) model.compile(loss='categorical_crossentropy', optimizer='rmsprop', metrics=['acc']) model.fit(x_train, y_train, batch_size=128, epochs=10, validation_data=(x_val, y_val))
output = lenet(myinput) # 建立模型 model = Model(myinput, output) # 定义优化器,这里选用Adam优化器,学习率设置为0.0003 adam = Adam(lr=0.0003) # 编译模型 model.compile(optimizer=adam, loss="categorical_crossentropy", metrics=['accuracy']) # 准备数据 # 获取输入的图像 X = GetTrainDataByLabel('data') # 获取图像的label,这里使用to_categorical函数返回one-hot之后的label Y = to_categorical(GetTrainDataByLabel('labels')) # 开始训练模型,batch设置为200,一共50个epoch model.fit(X, Y, 200, 50, 1, callbacks=[ TensorBoard('./LeNet/log', write_images=1, histogram_freq=1) ], validation_split=0.2, shuffle=True) # 保存模型 model.save("lenet-no-activation-model.h5")