超参数选择每层节点数

简介: 超参数选择每层节点数

博主环境搭配

超参数选择神经网络层数与 每层节点数

sys.version_info(major=3, minor=7, micro=2, releaselevel='final', serial=0)
3.7.2 (v3.7.2:9a3ffc0492, Dec 24 2018, 02:44:43) 
[Clang 6.0 (clang-600.0.57)]
matplotlib 3.0.3
numpy 1.17.2
pandas 0.25.1
sklearn 0.21.3
tensorflow 2.0.0-beta0
tensorflow.python.keras.api._v2.keras 2.2.4-tf
import warnings 
warnings.filterwarnings('ignore')
import matplotlib as mpl
import matplotlib.pyplot as plt 
%matplotlib inline
import numpy as np
import sklearn 
import pandas as pd
import os
import sys
import time
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.layers import *
print(sys.version_info)
print(sys.version)
for module in mpl,np,pd,sklearn,tf,keras:
    print(module.__name__,module.__version__)
from sklearn.model_selection import train_test_split
#把所有的数据集 分成 验证 训练 测试 三部分
boston_housing= keras.datasets.boston_housing.load_data()
(x_train,y_train),(x_test,y_test)=boston_housing
x_train,x_valid,y_train,y_valid=train_test_split(x_train,y_train,random_state=7)
# print(housing_data)
#查看测试集形状
print(x_train.shape,y_train.shape)
print(x_valid.shape,y_valid.shape)
print(x_test.shape,y_test.shape)
#归一化
from sklearn.preprocessing import StandardScaler
scaler= StandardScaler()
x_train_scaled=scaler.fit_transform(x_train)
x_valid_scaled=scaler.transform(x_valid)
x_test_scaled=scaler.transform(x_test)
x_train.shape[1]
# RandomizedSearchCV
# 1. 转化为 sklearn 的model
# 2. 定义参数集合
# 3. 开始搜索参数
def build_model(hidden_layers=1, 
                layer_size=30,
                learning_rate=3e-3):
    model=keras.models.Sequential([
        Dense(layer_size,input_shape=x_train.shape[1:],activation='selu')
    ])
    for _ in range(hidden_layers):
        model.add(Dense(layer_size,activation='selu'))
    model.add(Dense(1))
    #定义我们自己的  学习率 优化器
    optimizer1=keras.optimizers.Adam(learning_rate)
    model.compile(loss='mse',optimizer=optimizer1)
    return model
# e这一步 build_model 不要加 ()
#把 tf model 转化为 sklearn model
sklearn_model=keras.wrappers.scikit_learn.KerasRegressor(
                build_model)
###定义回调函数
log_dir='./search_housing_logs'
if not os.path.exists(log_dir):
    os.mkdir(log_dir)
save_model_dir='./search_housing_model'
if not os.path.exists(save_model_dir):
    os.mkdir(save_model_dir)
save_model_file=os.path.join(save_model_dir,'search_housing.h5')
callback1=[
    keras.callbacks.TensorBoard(log_dir),
    keras.callbacks.ModelCheckpoint(save_model_file,save_best_only=True),
    keras.callbacks.EarlyStopping(patience=5,min_delta=1e-2)
]
# fitres=sklearn_model.fit(x_train,
#                  y_train,epochs=20,
#                  validation_data=(x_valid,
#                                   y_valid),
#                  callbacks=callback1)
from scipy.stats import reciprocal
#定义搜索空间
param_distribution ={
    'hidden_layers':[1,2,3,4,5],
    'layer_size':np.arange(1,100),
    'learning_rate':reciprocal(1e-4,1e-2)
}
from sklearn.model_selection import RandomizedSearchCV
#cross_calidation: 训练分成 n 分, 使用 n-1分 训练, 1分测试
# cv
#n_jobs=最大并行数
#保留最好的多少个 参数组合
random_search_cv= RandomizedSearchCV(
                                    sklearn_model,param_distribution,
                                    n_iter=10,n_jobs=1,
                                    cv=3)
random_search_cv.fit(x_train, y_train, epochs=20,
                     validation_data=(x_valid,y_valid),
                     callbacks=callback1)
#查看做好的参数
print(random_search_cv.best_params_)
print(random_search_cv.best_score_)
print(random_search_cv.best_estimator_)
#获得最好的模型
model=random_search_cv.best_estimator_.model
model.evaluate(x_test,y_test)

{‘hidden_layers’: 3, ‘layer_size’: 32, ‘learning_rate’: 0.0038406176766716676}

-61.8116564797883


所以在本次搜索中,层数为3 每层32 初始化学习率在 0.00384左右时,

神经网络针对本测试集,效果最好


相关文章
|
6月前
|
文件存储 数据安全/隐私保护 开发者
群晖NAS Docker镜像源加速配置教程
本教程介绍了群晖NAS用户如何通过配置轩辕镜像加速服务提升Docker镜像拉取速度。内容包括配置前准备、详细设置步骤及日常使用说明,帮助用户快速完成配置并享受高效稳定的镜像下载体验。
4034 61
|
6月前
|
人工智能 缓存 安全
Java中的反射机制:深入探索与应用
Java反射机制是程序运行时动态获取类信息并操作类成员的特性,具备高度灵活性,但也伴随性能与安全风险。本文详解反射的基本用法、高级应用及最佳实践,助你掌握这一强大工具的正确使用方式。
174 0
|
4月前
|
人工智能 运维 监控
AI加持下的容器运维:别再当“背锅侠”,让机器帮你干活!
AI加持下的容器运维:别再当“背锅侠”,让机器帮你干活!
249 8
|
算法 iOS开发 C++
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); 的作用和注意事项
默认情况下,C++的输入输出流与C标准库的输入输出函数是同步的,这会造成一定的性能损失。:使用cin.tie(0)和cout.tie(0)可以取消cin与cout之间的绑定,这意味着在进行输入操作时,不需要强行刷新输出缓冲区。:如果你的程序在输入输出中同时使用了C++的输入输出流和C标准库的输入输出函数(如scanf和printf),则不应该使用这段代码。:在使用了这段代码后,应避免使用C标准库的输入输出函数(如printf和scanf),因为这些函数与输入输出流的同步已被关闭。这段代码的主要用途是。
1288 1
|
机器学习/深度学习 数据可视化 数据挖掘
机器学习中空间和时间自相关的分析:从理论基础到实践应用
空间和时间自相关是数据分析中的重要概念,揭示了现象在空间和时间维度上的相互依赖关系。本文探讨了这些概念的理论基础,并通过野火风险预测的实际案例,展示了如何利用随机森林模型捕捉时空依赖性,提高预测准确性。
847 0
机器学习中空间和时间自相关的分析:从理论基础到实践应用
|
JavaScript 安全 前端开发
SpringBoot + VUE BBS论坛系统
SpringBoot + VUE BBS论坛系统
710 1
|
API 开发工具 Android开发
安卓与iOS开发环境对比分析
在移动操作系统的两大阵营中,安卓和iOS各占据着重要的地位。本文旨在深入探讨两种系统在开发环境方面的异同,通过对开发工具、语言、框架、API以及生态系统的综合比较,揭示各自在应用开发上的优势与挑战。文章将基于最新的市场数据和技术发展进行论述,以期为开发者提供有价值的参考信息,并预测未来可能的发展趋势。
243 1
|
前端开发 JavaScript
|
Web App开发
打包谷歌浏览器 Chrome 已安装的插件
环境: OS - win7 64bit 旗舰版 Chrome - 37.0.2062.120 m   以 Smooth Gestures (一款鼠标手势插件)为例,在扩展程序面板 chrome://extensions/ 可以看到该插件的ID 为lfkgmnnajiljnolcgolmmgn...
3263 0