首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在角角中使用hyperas的无效磨牙错误

在角角中使用hyperas的无效磨牙错误
EN

Stack Overflow用户
提问于 2018-08-16 05:52:28
回答 1查看 809关注 0票数 0

我一直试图使用hyperas包装器来搜索最佳的超参数。现在,我把它保持相对基本的工作第一。不幸的是,我得到了一个“无效的论点”错误。我在查皮特笔记本。

我已经读到,我可能不得不不使用jupyter笔记本,但我想继续使用它,如果可能的话。

代码语言:javascript
复制
import keras

# prevents memory allocation errors when using GPU
from keras import backend as K
cfg = K.tf.ConfigProto()
cfg.gpu_options.allow_growth = True
K.set_session(K.tf.Session(config=cfg))

from keras.models import Sequential
from keras.layers import Dropout, Dense, Activation
from keras.regularizers import l2
from keras.layers.normalization import BatchNormalization

from keras.optimizers import Adam, sgd
from keras.activations import relu
from keras.losses import categorical_crossentropy
from keras import metrics

import pandas as pd
import numpy as np

# load data
x_main = pd.read_csv("glioma DB X.csv")

y_main = pd.read_csv("glioma DB Y.csv")

# fill with median (will have to improve later, not done yet)
fill_median =['Surgery_SBRT','df','Dose','Ki67','KPS','BMI','tumor_size']

x_main[fill_median] = x_main[fill_median].fillna(x_main[fill_median].median())

x_main['Neurofc'] = x_main['Neurofc'].fillna(2)

x_main['comorbid'] = x_main['comorbid'].fillna(int(x_main['comorbid'].median()))

# drop surgery
x_main = x_main.drop(['Surgery'], axis=1)

# normalize all x

x_main_normalized = x_main.apply(lambda x: (x-np.mean(x))/(np.std(x)+1e-10))

from sklearn.model_selection import train_test_split

x_train, x_test, y_train, y_test = train_test_split(x_main, y_main, test_size=0.3)
x_test, x_val, y_test, y_val = train_test_split(x_test, y_test, test_size=0.5)

params = {'lr': 0.0001,
     'batch_size': 30,
     'epochs': 100,
     'dropout': 0.2,
     'weight_regulizer':['l2'],
     'optimizer': 'sgd',
     'losses': 'categorical_crossentropy',
     'activation':'relu',
     'last_activation': 'softmax'}

from keras.utils.np_utils import to_categorical

#categorical_labels = to_categorical(int_labels, num_classes=None)

last_layer = 1

if params['losses']=='categorical_crossentropy':
    y_train = to_categorical(y_train,num_classes=4)
    y_val = to_categorical(y_val,num_classes=4)
    y_test = to_categorical(y_test,num_classes=4)
    last_layer=4

from hyperopt import Trials, STATUS_OK, tpe

from keras.utils import np_utils

from hyperas import optim
from keras.models import model_from_json

from hyperas.distributions import choice, uniform, conditional

# Data()

def data():
    x_train = x_train
    x_val = x_val
    y_train = y_train
    y_val = y_val
    return x_train, y_train, x_val, y_val

def model(x_train, y_train, x_val, y_val, layers=[20, 20, 4], 
                 kernel_init ='he_uniform', bias_init ='he_uniform',
                 batch_norm=True, dropout=True):

    model = Sequential()

    # layer 1
    model.add(Dense({{choice([10, 20, 30, 50])}},
                    input_dim=x_train.shape[1],
                    W_regularizer=l2(l2_reg),
                    kernel_initializer=kernel_init,
                    bias_initializer=bias_init))

    if batch_norm == True:
        model.add(BatchNormalization(axis=-1, momentum=momentum, center=True))

    model.add(Activation(params['activation']))

    if dropout == True:
        model.add(Dropout({{uniform(0, 0.5)}}))

    # layer 2+    
    for layer in range(0, len(layers)-1):

        model.add(Dense({{choice([10, 20, 30, 50])}}, 
                        W_regularizer=l2(l2_reg),
                        kernel_initializer=kernel_init,
                        bias_initializer=bias_init))

        if batch_norm == True:
            model.add(BatchNormalization(axis=-1, momentum=momentum, center=True))

        model.add(Activation(params['activation']))

        if dropout == True:
            model.add(Dropout(params['dropout']))

    # Last layer
    model.add(Dense(layers[-1], activation=params['last_activation'],
                    kernel_initializer=kernel_init,
                    bias_initializer=bias_init))

    model.compile(loss=params['losses'],
                  optimizer=keras.optimizers.adam(lr=params['lr']),
                  metrics=['accuracy'])

    history = model.fit(x_train, y_train, 
                        validation_data=[x_val, y_val],
                        batch_size={{choice([5, 10, 30, 60])}},
                        epochs=params['epochs'],
                        verbose=1)

    score, acc = model.evaluate(x_test, y_test, verbose=0)
    print('Test accuracy:', acc)
    return {'loss': -acc, 'status': STATUS_OK, 'model': model}

    history_dict = history.history

    return {'model':model, 'status': STATUS_OK, 'history_dict':history_dict, 'loss':-acc}


best_run, best_model = optim.minimize(model=model,
                                      data=data,
                                      algo=tpe.suggest,
                                      max_evals=2,
                                      trials=Trials())

x_train, y_train, x_val, y_val = data()
print("Evalutation of best performing model:")
print(best_model.evaluate(x_val, y_val))
print("Best performing model chosen hyper-parameters:")
print(best_run)

错误:

代码语言:javascript
复制
OSError                                   Traceback (most recent call last)
<ipython-input-7-7cf7a7c755ab> in <module>()
     64                                       algo=tpe.suggest,
     65                                       max_evals=2,
---> 66                                       trials=Trials())
     67 
     68 x_train, y_train, x_val, y_val = data()

~\Anaconda3\lib\site-packages\hyperas\optim.py in minimize(model, data, algo, max_evals, trials, functions, rseed, notebook_name, verbose, eval_space, return_space)
     65                                      full_model_string=None,
     66                                      notebook_name=notebook_name,
---> 67                                      verbose=verbose)
     68 
     69     best_model = None

~\Anaconda3\lib\site-packages\hyperas\optim.py in base_minimizer(model, data, functions, algo, max_evals, trials, rseed, full_model_string, notebook_name, verbose, stack)
     94         model_str = full_model_string
     95     else:
---> 96         model_str = get_hyperopt_model_string(model, data, functions, notebook_name, verbose, stack)
     97     temp_file = './temp_model.py'
     98     write_temp_files(model_str, temp_file)

~\Anaconda3\lib\site-packages\hyperas\optim.py in get_hyperopt_model_string(model, data, functions, notebook_name, verbose, stack)
    176     else:
    177         calling_script_file = os.path.abspath(inspect.stack()[stack][1])
--> 178         with open(calling_script_file, 'r') as f:
    179             source = f.read()
    180 

OSError: [Errno 22] Invalid argument: 'C:\\Users\\Michael\\Desktop\\CSV data-20180807T164633Z-001\\CSV data\\<ipython-input-7-7cf7a7c755ab>'
EN

回答 1

Stack Overflow用户

发布于 2018-08-18 01:19:33

天哪,我需要多读点书。我想我的问题在github网站上已经回答了

代码语言:javascript
复制
notebook adjustment
If you find error like "No such file or directory" or OSError, Err22, you may need add notebook_name='simple_notebook'(assume your current notebook name is simple_notebook) in optim.minimize function like this:

best_run, best_model = optim.minimize(model=model,
                                      data=data,
                                      algo=tpe.suggest,
                                      max_evals=5,
                                      trials=Trials(),
                                      notebook_name='simple_notebook')

但我得把

代码语言:javascript
复制
notebook='keras_glioma_hyperopt') 

我笔记本的名字是keras_glioma_hyperopt

仍然会遇到错误,但是它可能在我的代码设置中。我将进行更新,但上面的代码帮助我取得了进展。

编辑

终于让它跑了。

我遇到的问题:

  1. 您确实需要将所有数据加载到data ()中:我将我的数据转换为 def data():load data x_main =pd.read_csv(“胶质瘤DB X.csv") y_main =pd.read_csv(”胶质瘤DB Y.csv") #填入中位数(以后需要改进,但尚未完成) fill_median =‘外科手术_SBRT’,'df',‘剂量’,'Ki67','KPS','BMI',‘x_mainfill_median.fillna(x_mainfill_median.median()) _tumor_size’x_mainfill_median =tumor_size_main‘’Neurofc‘= x_main’‘Neurofc’.tumor_size(2)x_main‘’comorbid‘= x_main'comorbid'.fillna(int(x_main'comorbid'.median())) # drop x_mainfill_median x_main=x_main.drop(外科手术),axis=1) #规范来自sklearn.model_selection import train_test_split x_train,x_test,y_train,y_test = train_test_split(x_main,y_main,test_size=0.3) x_test,x_val,y_test,y_test=y_test(,)的所有x x_main_normalized = x_main.apply(lambda:(X-np.means(X))/(np.std(X)+1e-10)( test_size=0.5) last_layer =1 last_layer= {'lr':0.0001,'batch_size':30,'epochs':100,'dropout':0.2,‘batch_regulizer’:‘L2’,‘优化器’:'sgd',‘损失’:‘范畴_交叉熵’,‘激活’:‘relu’,‘keras.utils.np_utils _activation’:'softmax'}从to_categorical导入,如果参数为‘损失’=‘绝对交叉熵’:y_train = to_categorical( y_train,num_classes=4) y_val = to_categorical( y_val,num_classes=4) y_test = to_categorical(y_test,num_classes=4) last_layer=4 x_train = x_train last_layer=4= x_train =en21#= from,y_train,x_val,y_val
  2. 我也遇到了错误 TypeError:“生成器”对象不可订阅

如果您遵循hyperas github,则修补程序是

代码语言:javascript
复制
pip install networkx==1.11
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51870384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档