tensorflow + keras —— optimizer、loss、metrics、regularizers(dropout)

1. model.compile(optimizer=)

https://www.jianshu.com/p/4f1469745598

  • 字符串形式的 optimizer:
    • sgd:
    • rmsprop:
  • 类对象形式:
    • keras.optimizers.SGD(lr=0.01, momentum=0., decay=0., nesterov=False)
    • keras.optimizers.Adagrad(lr=0.01, epsilon=1e-6)
    • keras.optimizers.Adadelta(lr=1.0, rho=0.95, epsilon=1e-6)
    • keras.optimizers.RMSprop(lr=0.001, rho=0.9, epsilon=1e-6)
    • keras.optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-8, kappa=1-1e-8)

      这里写图片描述

m1m2=(1γ)g1=γm1+(1γ)g2=γ(1γ)g1+(1γ)g2 m 1 = ( 1 − γ ) g 1 m 2 = γ m 1 + ( 1 − γ ) g 2 = γ ( 1 − γ ) g 1 + ( 1 − γ ) g 2

如上图所示的 Momentum 形式, mt=γmt1+(1γ)gt m t = γ m t − 1 + ( 1 − γ ) g t mt m t 不仅与当前梯度 gt g t 有关,还跟 mt1 m t − 1 有关,而 mt1 m t − 1 则携带有上次梯度相关信息。

2. model.compile(loss=)

  • 字符串形式:
    • 回归问题:
      • mean_squared_error/mse
    • 分类问题:
      • 二分类:binary_crossentropy
      • 多分类:categorical_crossentropy
  • 对象形式:
    • loss=losses.binary_crossentropy

3. model.compile(metrics=[”, ”])

  • 字符串形式:
    • ’accuracy’
  • 对象形式:
    • metrics=[metrics.binary_accuracy]

4. 过拟合的避免 —— 正则化

  • 不同的正则化项:

    from keras import regularizers
    regularizers.l2(0.001)
    regularizers.l1(0.001)
    regularizers.l1_l2(l1=0.001, l2=0.001)

    这些正则化项作为layer的可选参数:

    model.add(layers.Dense(16, kernel_regularizer=regularizers.l1(0.001), 
                    activation='relu', input_shape=(10000, )))

5. 引入 dropout

  • dropout 应用于前面一层的输出

    dropout_rate = 0.5      # 0.3~0.5 之间
    model = models.Sequential()
    
    model.add(layers.Dense(16, activation='relu', input_shape=(10000, )))
    model.add(layers.dropout(dropout_rate))
    
    model.add(layers.Dense(16, activation='relu'))
    model.add(layers.dropout(dropout_rate))
    
    model.add(layers.Dense(1, activation='sigmoid'))
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一个基于Python+Tensorflow+CNN的车牌识别系统的示例代码,供您参考: 首先,需要安装必要的库: ```python pip install tensorflow-gpu==1.14.0 pip install opencv-python pip install imutils ``` 然后,我们需要下载数据集。此处我们使用的是CCPD数据集,可以从以下链接下载:https://github.com/detectRecog/CCPD。 接下来,我们定义一个函数`load_data`,用于加载数据集: ```python import os import cv2 import numpy as np def load_data(data_dir): data = [] labels = [] for root, dirs, files in os.walk(data_dir): for file in files: if file.endswith('.jpg'): image_path = os.path.join(root, file) image = cv2.imread(image_path) image = cv2.resize(image, (120, 32)) data.append(image) label = os.path.basename(root) labels.append(label) data = np.array(data, dtype='float32') data /= 255.0 labels = np.array(labels) return data, labels ``` 接下来,我们定义一个函数`build_model`,用于构建模型: ```python from keras.models import Sequential from keras.layers.convolutional import Conv2D, MaxPooling2D from keras.layers.core import Dense, Dropout, Activation, Flatten def build_model(input_shape, num_classes): model = Sequential() model.add(Conv2D(32, (3, 3), padding='same', input_shape=input_shape)) model.add(Activation('relu')) model.add(Conv2D(32, (3, 3))) model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.25)) model.add(Conv2D(64, (3, 3), padding='same')) model.add(Activation('relu')) model.add(Conv2D(64, (3, 3))) model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.25)) model.add(Flatten()) model.add(Dense(512)) model.add(Activation('relu')) model.add(Dropout(0.5)) model.add(Dense(num_classes)) model.add(Activation('softmax')) return model ``` 接下来,我们加载数据集并构建模型: ```python data_dir = '/path/to/dataset' input_shape = (32, 120, 3) num_classes = 65 data, labels = load_data(data_dir) model = build_model(input_shape, num_classes) model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) ``` 接下来,我们训练模型: ```python from keras.utils import to_categorical num_epochs = 10 batch_size = 32 labels = to_categorical(labels, num_classes=num_classes) model.fit(data, labels, batch_size=batch_size, epochs=num_epochs, validation_split=0.1) ``` 最后,我们可以使用训练好的模型对车牌进行识别: ```python import imutils from keras.preprocessing.image import img_to_array def recognize_plate(image, model): gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) gray = cv2.GaussianBlur(gray, (7, 7), 0) edged = cv2.Canny(gray, 50, 200) cnts = cv2.findContours(edged.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) cnts = imutils.grab_contours(cnts) cnts = sorted(cnts, key=cv2.contourArea, reverse=True) for c in cnts: x, y, w, h = cv2.boundingRect(c) if w / h > 4 and w > 100: roi = gray[y:y + h, x:x + w] thresh = cv2.threshold(roi, 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1] thresh = cv2.resize(thresh, (120, 32)) thresh = thresh.astype("float") / 255.0 thresh = img_to_array(thresh) thresh = np.expand_dims(thresh, axis=0) preds = model.predict(thresh) label = chr(preds.argmax(axis=1)[0] + 48) cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2) cv2.putText(image, label, (x - 10, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 1.2, (0, 255, 0), 2) break return image ``` 使用示例: ```python image = cv2.imread('/path/to/image') image = recognize_plate(image, model) cv2.imshow('Image', image) cv2.waitKey(0) ``` 以上就是一个基于Python+Tensorflow+CNN的车牌识别系统的示例代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五道口纳什

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值