# -*- coding: UTF-8 -*- """ 此为样例代码,之后第三个案例录制时会完全重制代码,跟这个代码基本没什么关系 """ import numpy as np from keras.models import Sequential from keras.layers import Dense, Dropout, Flatten from keras.layers import Conv2D from keras import optimizers from keras import backend as K from utils import Sample OUT_SHAPE = 5 INPUT_SHAPE = (Sample.IMG_H, Sample.IMG_W, Sample.IMG_D) def customized_loss(y_true, y_pred, loss='euclidean'): if loss == 'L2': L2_norm_cost = 0.001 val = K.mean(K.square((y_pred - y_true)), axis=-1) \ + K.sum(K.square(y_pred), axis=-1)/2 * L2_norm_cost elif loss == 'euclidean': val = K.sqrt(K.sum(K.square(y_pred-y_true), axis=-1)) return val def create_model(keep_prob = 0.8): model = Sequential() model.add(Conv2D(24, kernel_size=(5, 5), strides=(2, 2), activation='relu', input_shape= INPUT_SHAPE)) model.add(Conv2D(36, kernel_size=(5, 5), strides=(2, 2), activation='relu')) model.add(Conv2D(48, kernel_size=(5, 5), strides=(2, 2), activation='relu')) model.add(Conv2D(64, kernel_size=(3, 3), activation='relu')) model.add(Conv2D(64, kernel_size=(3, 3), activation='relu')) model.add(Flatten()) model.add(Dense(1164, activation='relu')) drop_out = 1 - keep_prob model.add(Dropout(drop_out)) model.add(Dense(100, activation='relu')) model.add(Dropout(drop_out)) model.add(Dense(50, activation='relu')) model.add(Dropout(drop_out)) model.add(Dense(10, activation='relu')) model.add(Dropout(drop_out)) model.add(Dense(OUT_SHAPE, activation='softsign')) return model if __name__ == '__main__': x_train = np.load("data/X.npy") y_train = np.load("data/y.npy") print(x_train.shape[0], 'train samples') epochs = 100 batch_size = 50 model = create_model() model.compile(loss=customized_loss, optimizer=optimizers.adam()) model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, shuffle=True, validation_split=0.1) model.save_weights('model_weights.h5')