def test_sgd(): ''' math: Let W = [A, B], b = [C, D], y = [E, F] MSE = 1/2*[(A+C-E)^2 + (B+D-F)^2] dA, dB, dC, dD = (A+C-E), (B+D-F), (A+C-E), (B+D-F) Assume E = 2*(A+C), F = 2*(B+D) dA, dB, dC, dD = -(A+C), -(B+D), -(A+C), -(B+D) A-=lr*dA, B-=lr*dB, C-=lr*dC, D-=lr*dD ''' lr = 0.01 W = np.array([[1, 2]]) b = np.array([3, 4]) wpb = W+b model = Sequential([Input(1), Dense(2, initial_weights=[W, b])]) optimizer = SGD(lr=lr) model.compile(optimizer, 'mse') model.fit([1], 2*wpb, nb_epoch=1) expectedW = W+lr*wpb expectedb = (b+lr*wpb).reshape((2,)) assert_allclose(B.eval(model.layers[1].W), expectedW) assert_allclose(B.eval(model.layers[1].b), expectedb)
# Let's train the model using RMSprop model.compile(loss='categorical_crossentropy', optimizer=opt, metrics=['accuracy']) x_train = x_train.astype('float32') x_test = x_test.astype('float32') x_train /= 255 x_test /= 255 if not data_augmentation: print('Not using data augmentation.') model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, validation_data=(x_test, y_test), shuffle=True) else: print('Using real-time data augmentation.') # This will do preprocessing and realtime data augmentation: datagen = ImageDataGenerator( featurewise_center=False, # set input mean to 0 over the dataset samplewise_center=False, # set each sample mean to 0 featurewise_std_normalization= False, # divide inputs by std of the dataset samplewise_std_normalization=False, # divide each input by its std zca_whitening=False, # apply ZCA whitening rotation_range= 0, # randomly rotate images in the range (degrees, 0 to 180) width_shift_range=
X_train /= 255 X_test /= 255 print(X_train.shape[0], 'train samples') print(X_test.shape[0], 'test samples') # convert class vectors to binary class matrices y_train = np_utils.to_categorical(y_train, nb_classes) y_test = np_utils.to_categorical(y_test, nb_classes) model = Sequential() model.add(Input(784)) model.add(Dense(512)) model.add(Activation('relu')) model.add(Dropout(0.2)) model.add(Dense(512)) model.add(Activation('relu')) model.add(Dropout(0.2)) model.add(Dense(10)) model.add(Activation('softmax')) model.compile(loss='categorical_crossentropy', optimizer='rmsprop', metrics=['accuracy']) history = model.fit(X_train, y_train, batch_size=batch_size, nb_epoch=nb_epoch, verbose=1, validation_data=(X_test, y_test)) score = model.evaluate(X_test, y_test) print('Test score:', score[0]) print('Test accuracy:', score[1])
print('Loading data...') (X_train, y_train), (X_test, y_test) = imdb.load_data(nb_words=max_features) print(len(X_train), 'train sequences') print(len(X_test), 'test sequences') print('Pad sequences (samples x time)') X_train = pad_sequences(X_train, maxlen=maxlen) X_test = pad_sequences(X_test, maxlen=maxlen) print('X_train shape:', X_train.shape) print('X_test shape:', X_test.shape) print('Build model...') model = Sequential() model.add(Input(None, dtype='int32')) model.add(Embedding(max_features, 128)) model.add(LSTM(128, dropout_W=0.2, dropout_U=0.2)) # try using a GRU instead, for fun model.add(Dense(1)) model.add(Activation('sigmoid')) # try using different optimizers and different optimizer configs model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) print('Train...') model.fit(X_train, y_train, batch_size=batch_size, nb_epoch=15, validation_data=(X_test, y_test)) score, acc = model.evaluate(X_test, y_test, batch_size=batch_size) print('Test score:', score) print('Test accuracy:', acc)
# convert class vectors to binary class matrices Y_train = np_utils.to_categorical(y_train, nb_classes) Y_test = np_utils.to_categorical(y_test, nb_classes) model = Sequential() model.add(Input((1, img_rows, img_cols))) model.add(Convolution2D(nb_kernel, kernel_size[0], kernel_size[1], pad='valid')) model.add(Activation('relu')) model.add(Convolution2D(nb_kernel, kernel_size[0], kernel_size[1])) model.add(Activation('relu')) model.add(Pooling2D('max', pool_size=(nb_pool, nb_pool))) model.add(Dropout(0.25)) model.add(Flatten()) model.add(Dense(128)) model.add(Activation('relu')) model.add(Dropout(0.5)) model.add(Dense(nb_classes)) model.add(Activation('softmax')) model.compile(loss='categorical_crossentropy', optimizer='adadelta', metrics=['accuracy']) model.fit(X_train, Y_train, batch_size=batch_size, nb_epoch=nb_epoch, validation_data=(X_test, Y_test)) score = model.evaluate(X_test, Y_test) print('Test score:', score[0]) print('Test accuracy:', score[1])