赞
踩
7.1第二种模型表示方式
- # coding=utf-8
- """
- __project_ = 'Python深度学习'
- __file_name__ = '7.1函数式API'
- __author__ = 'WIN10'
- __time__ = '2020/4/15 21:20'
- __product_name = PyCharm
- """
- from keras import Input, layers
- from keras.models import Model
-
- input_tensor = Input(shape=(64,))
- x = layers.Dense(32, activation='relu')(input_tensor)
- x = layers.Dense(32, activation='relu')(x)
- output_tensor = layers.Dense(10, activation='softmax')(x)
-
- model = Model(input_tensor, output_tensor)
- model.summary()
-
- # 双输入模型
- text_input = Input(shape=(None,), dtype='int32', name='text')
-
- embedded_text = layers.Embedding(10000, 64)(text_input)
-
- encoded_text = layers.LSTM(32)(embedded_text)
-
- question_input = Input(shape=(None,), dtype='int32', name='question')
-
- embedded_question = layers.Embedding(10000, 32)(question_input)
-
- encoded_question = layers.LSTM(16)(embedded_question)
-
- concatenated = layers.concatenate([encoded_text, encoded_question], axis=-1)
-
- answer = layers.Dense(500, activation='softmax')(concatenated)
-
- model = Model([text_input, question_input], answer)
-
- model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics='acc')
-
- # 多输出模型
-
- posts_input = Input(shape=(None,), dtype='int32', name='posts')
-
- embedded_posts = layers.Embedding(256, 50000)(posts_input)
-
- x = layers.Conv1D(128, 5, activation='relu')(embedded_posts)
- x = layers.MaxPooling1D(5)(x)
- x = layers.Conv1D(256, 5, activation='relu')(x)
- x = layers.Conv1D(256, 5, activation='relu')(x)
- x = layers.MaxPooling1D(5)(x)
- x = layers.Conv1D(256, 5, activation='relu')(x)
- x = layers.Conv1D(256, 5, activation='relu')(x)
- x = layers.GlobalMaxPool1D(x)
- x = layers.Dense(128, activation='relu')(x)
- # 输出层,必须有名字
- age_prediction = layers.Dense(1, name='age')(x)
- income_prediction = layers.Dense(10, activation='softmax', name='income')(x)
- gender_prediction = layers.Dense(1, activation='sigmoid', name='gender')(x)
-
- model = Model(posts_input, [age_prediction, income_prediction, gender_prediction])
-
- model.compile(optimizer='rmsprop',
- loss={'age': 'mse',
- 'income': 'categorical_crossentropy',
- 'gender': 'binary_crossentropy'
- },
- loss_weights={'age': 0.25,
- 'income': 1.,
- 'gender': 10.
- }
- )

7.2有向无环图
- # coding=utf-8
- """
- __project_ = 'Python深度学习'
- __file_name__ = '7.2有向无环图'
- __author__ = 'WIN10'
- __time__ = '2020/4/15 22:38'
- __product_name = PyCharm
- """
- from keras import layers,Input
-
- #inception模块
- x= Input(shape=(64,))
- branch_a=layers.Conv2D(128,1,activation='relu',strides=2)(x)
-
- branch_b=layers.Conv2D(128,1,activation='relu')(x)
- branch_b=layers.Conv2D(128,3,activation='relu',strides=2)(branch_b)
-
- branch_c=layers.AveragePooling2D(3,strides=2)(x)
- branch_c=layers.Conv2D(128,3,activation='relu',strides=2)(branch_c)
-
- branch_d=layers.Conv2D(128,1,activation='relu')(x)
- branch_b=layers.Conv2D(128,3,activation='relu')(branch_d)
- branch_b=layers.Conv2D(128,3,activation='relu',strides=2)(branch_d)
-
- output=layers.concatenate([branch_a,branch_b,branch_c,branch_d],axis=-1)
-
-
- #resnet 模块
- x= Input(shape=(64,))
- y=layers.Conv2D(128,3,activation='relu',padding='same')(x)
- y=layers.Conv2D(128,3,activation='relu',padding='same')(y)
- y=layers.Conv2D(128,3,activation='relu',padding='same')(y)
-
- y=layers.add([y,x])
-
- #resnet 模块 特征尺寸不同,使用1*1 下采样
- x= Input(shape=(64,))
- y=layers.Conv2D(128,3,activation='relu',padding='same')(x)
- y=layers.Conv2D(128,3,activation='relu',padding='same')(y)
- y=layers.Conv2D(128,3,activation='relu',padding='same')(y)
-
- residual=layers.Conv2D(128,1,strides=2,padding='same')(x)
- y=layers.add([y,residual])
-
-
-

7.3回调函数
- # coding=utf-8
- """
- __project_ = 'Python深度学习'
- __file_name__ = '7.3回调函数'
- __author__ = 'WIN10'
- __time__ = '2020/4/15 22:54'
- __product_name = PyCharm
- """
-
- import keras
- x,y,x_val,y_val=[]
- callbacks_list=[
- #监控验证精度,如果多余一轮时间精度不改善,就中断训练
- keras.callbacks.EarlyStopping(
- monitor='acc',
- patience=1,
- ),
- #如果val_loss没有改善,不需要覆盖模型
- keras.callbacks.ModelCheckpoint(
- filepath='my_model.h5',
- monitor='val_loss',
- save_best_only=True
- )
- ]
- keras.models.Model.compile(optimizer='rmsprop',
- loss='binary_crossentropy',
- metrics=['acc']
- )
- keras.models.Model.fit(x,y,
- epochs=10,
- callbacks=callbacks_list,
- validation_data=(x_val,y_val))
-
- #降低学习率
- callbacks_list=[
- #监控val_loss 10轮回没改善 ,学习率除以10
- keras.callbacks.ReduceLROnPlateau(
- monitor='val_loss',
- factor=0.1,
- patience=10
- )
- ]

7.4深度可分离卷积神经网络
- # coding=utf-8
- """
- __project_ = 'Python深度学习'
- __file_name__ = '7.4深度可分离卷积神经网络'
- __author__ = 'WIN10'
- __time__ = '2020/4/15 23:17'
- __product_name = PyCharm
- """
-
- from keras.preprocessing.image import ImageDataGenerator
- from keras.models import Sequential
- from keras import layers
- from keras import optimizers
- import matplotlib.pyplot as plt
-
- def DataGen(dir_path, img_row, img_col, batch_size, is_train):
- if is_train:
- datagen = ImageDataGenerator(rescale=1. / 255,
- zoom_range=0.2,
- rotation_range=40.,
- shear_range=0.2,
- width_shift_range=0.2,
- height_shift_range=0.2,
- horizontal_flip=True,
- fill_mode='nearest')
- else:
- datagen = ImageDataGenerator(rescale=1. / 255)
-
- generator = datagen.flow_from_directory(
- dir_path, target_size=(img_row, img_col),
- batch_size=batch_size,
- # class_mode='binary',
- shuffle=is_train)
-
- return generator
-
- # 数据准备
- image_size = 65
- image_class=3
- batch_size = 128
- epochs=100
- train_image_path='G:\\DL\\MyData\\MattingImages\\train'
- test_image_path='G:\\DL\\MyData\\MattingImages\\val'
- train_generator = DataGen(train_image_path, image_size, image_size, batch_size, True)
- validation_generator = DataGen(test_image_path, image_size, image_size, batch_size, False)
-
- model=Sequential()
- model.add(layers.SeparableConv2D(32,3,activation='relu',input_shape=(65,65,3,)))
- model.add(layers.SeparableConv2D(64,3,activation='relu'))
- model.add(layers.MaxPooling2D(2))
-
- model.add(layers.SeparableConv2D(64,3,activation='relu'))
- model.add(layers.SeparableConv2D(128,3,activation='relu'))
- model.add(layers.MaxPooling2D(2))
-
- model.add(layers.SeparableConv2D(64,3,activation='relu'))
- model.add(layers.SeparableConv2D(128,3,activation='relu'))
- model.add(layers.GlobalAveragePooling2D())
-
- model.add(layers.Dense(32,activation='relu'))
- model.add(layers.Dense(3,activation='softmax'))
-
- #编译 需要3个参数 ,损失函数、优化器、训练和测试过程中的键控指标
- model.compile(optimizer=optimizers.RMSprop(lr=1e-4),
- loss='categorical_crossentropy',
- metrics=['accuracy'])
-
- #训练
- history=model.fit_generator(
- train_generator,
- steps_per_epoch=2,
- epochs=epochs,
- validation_data=validation_generator,
- validation_steps=1)
-
- model.save('my_model_split.h5')
- #绘制训练损失和验证损失
- history_dict=history.history
- acc=history_dict['accuracy']
- val_acc=history_dict['val_accuracy']
- loss=history_dict['loss']
- val_loss=history_dict['val_loss']
-
- epochs=range(1,len(acc)+1)
- plt.plot(epochs,acc,'bo',label='Training acc')
- plt.plot(epochs,val_acc,'b',label='Validation acc')
- plt.title('training and val acc')
- plt.legend()
-
- plt.figure()
-
- plt.plot(epochs,loss,'bo',label='Training loss')
- plt.plot(epochs,val_loss,'b',label='Validation loss')
- plt.title('train and val loss')
- plt.legend()
-
- plt.show()

赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。