question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

TypeError with 3d array

See original GitHub issue

Hi @maxpumperla, thanks for all your help with this. I’m having an issue with using a 3d array for my X values. My training X values are in an array as float64 with the dimensions (926, 100, 1). These values are feed into a LSTM model. The 3d array is to fulfill the Keras format of n=926, timesteps=100, features=1. My model works when I do not use it with Hyperas. When I try to run it with Hyperas, I get this error:

File "/anaconda/lib/python3.6/inspect.py", line 636, in getfile
    'function, traceback, frame, or code object'.format(object))
TypeError: **(outputs entire array)**
is not a module, class, method, function, traceback, frame, or code object

Below is my model for reference:

def model(train_x,train_y,test_x,test_y):
    model = Sequential()

    model.add(LSTM(
        input_dim=1,
        output_dim=50,
        return_sequences=True))
    model.add(Dropout({{uniform(0,.5)}}))

    model.add(LSTM(
        100,
        return_sequences=False))
    model.add(Dropout({{uniform(0,.5)}}))
                
    model.add(Dense(
            output_dim=1))
    model.add(Activation("sigmoid"))

    start = time.time()
    model.compile(loss="binary_crossentropy", optimizer="rmsprop",metrics=['accuracy'],class_mode="binary")
    print("> Compilation Time : ", time.time() - start)
    
# Fitting model
    model.fit(
            train_x,
            train_y,
            batch_size={{choice([16,32,64,128,256,512])}},
            nb_epoch=5,
            validation_split=.05,
            show_accuracy=True)
    Score, Acc = model.evaluate(test_x,test_y)
    print('Accuracy', Acc)
    return {'loss':-Acc,'status':STATUS_OK,'model':model}


if __name__ == '__main__':
    best_run, best_model = optim.minimize(model=model,
                                          data=data(),
                                          algo=tpe.suggest,
                                          max_evals=5,
                                          trials=Trials())
    train_x, train_y, test_x, test_y = data()
    print("Evalutation of best performing model:")
    print(best_model.evaluate(test_x,test_y))
    print('Best performing hyper-paramaters:')
    print(best_run)

Any ideas? Thanks!

Issue Analytics

  • State:open
  • Created 6 years ago
  • Comments:10 (3 by maintainers)

github_iconTop GitHub Comments

5reactions
loewenmcommented, Dec 31, 2017

Hello all - I’ve figured out the issue here; at least from my standpoint…

I thought the wrapper was a bit more flexible in terms of its parameter inputs when you call optim.minimize. It’s not flexible. I believe the majority of you are likely either trying to pass in your X_train, y_train, X_test, y_test, and/or the model directly. Simply put, you can’t use this wrapper in this fashion. You must pass in a “module, class, method, function, traceback, frame, or code object”, no exceptions.

So, when Max suggests using the following code:

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

You literally need to pass in the parameters as such. You must make a data() function that returns the four data series and you must make a self-contained function that creates and returns the model i.e. create_model().

I suppose this is written explicitly in the instructions/setup and the error thrown also suggests this is the case as well… I’m a little ashamed that I didn’t read it thoroughly enough. This feels like a Zoolander moment (“the files are in the computer”). lol!

Thank you Max and team for putting hyperas together. It’s much less frustrating once you read the instructions… 😉

0reactions
anasouzaccommented, Jul 13, 2020

Hey, guys! I’m having the same problem… I’m running my code on a Jupyter Notebook. Is that a problem? Here’s the error:


TypeError Traceback (most recent call last) <ipython-input-4-27652ebc1ee2> in <module> 9 max_evals=5, 10 trials=Trials(), —> 11 notebook_name=‘teste’) 12 x_train, x_train, x_val, y_val = data() 13 print(“Evalutation of best performing model:”)

~\AppData\Local\Continuum\anaconda3\lib\site-packages\hyperas\optim.py in minimize(model, data, algo, max_evals, trials, functions, rseed, notebook_name, verbose, eval_space, return_space, keep_temp) 67 notebook_name=notebook_name, 68 verbose=verbose, —> 69 keep_temp=keep_temp) 70 71 best_model = None

~\AppData\Local\Continuum\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, keep_temp) 96 model_str = full_model_string 97 else: —> 98 model_str = get_hyperopt_model_string(model, data, functions, notebook_name, verbose, stack) 99 temp_file = ‘./temp_model.py’ 100 write_temp_files(model_str, temp_file)

~\AppData\Local\Continuum\anaconda3\lib\site-packages\hyperas\optim.py in get_hyperopt_model_string(model, data, functions, notebook_name, verbose, stack) 196 197 functions_string = retrieve_function_string(functions, verbose) –> 198 data_string = retrieve_data_string(data, verbose) 199 model = hyperopt_keras_model(model_string, parts, aug_parts, verbose) 200

~\AppData\Local\Continuum\anaconda3\lib\site-packages\hyperas\optim.py in retrieve_data_string(data, verbose) 217 218 def retrieve_data_string(data, verbose=True): –> 219 data_string = inspect.getsource(data) 220 first_line = data_string.split(“\n”)[0] 221 indent_length = len(determine_indent(data_string))

~\AppData\Local\Continuum\anaconda3\lib\inspect.py in getsource(object) 971 or code object. The source code is returned as a single string. An 972 OSError is raised if the source code cannot be retrieved.“”" –> 973 lines, lnum = getsourcelines(object) 974 return ‘’.join(lines) 975

~\AppData\Local\Continuum\anaconda3\lib\inspect.py in getsourcelines(object) 953 raised if the source code cannot be retrieved.“”" 954 object = unwrap(object) –> 955 lines, lnum = findsource(object) 956 957 if istraceback(object):

~\AppData\Local\Continuum\anaconda3\lib\inspect.py in findsource(object) 766 is raised if the source code cannot be retrieved.“”" 767 –> 768 file = getsourcefile(object) 769 if file: 770 # Invalidate cache if needed.

~\AppData\Local\Continuum\anaconda3\lib\inspect.py in getsourcefile(object) 682 Return None if no way can be identified to get the source. 683 “”" –> 684 filename = getfile(object) 685 all_bytecode_suffixes = importlib.machinery.DEBUG_BYTECODE_SUFFIXES[:] 686 all_bytecode_suffixes += importlib.machinery.OPTIMIZED_BYTECODE_SUFFIXES[:]

~\AppData\Local\Continuum\anaconda3\lib\inspect.py in getfile(object) 664 raise TypeError('module, class, method, function, traceback, frame, or ’ 665 ‘code object was expected, got {}’.format( –> 666 type(object).name)) 667 668 def getmodulename(path):

TypeError: module, class, method, function, traceback, frame, or code object was expected, got tuple


And my final code is:

from hyperopt import Trials, STATUS_OK, tpe from hyperas import optim from hyperas.distributions import choice, uniform

if name == ‘main’: best_run, best_model = optim.minimize(model=model, data=data(), algo=tpe.suggest, max_evals=5, trials=Trials(), notebook_name=‘teste’) x_train, x_train, x_val, y_val = data() print(“Evalutation of best performing model:”) print(best_model.evaluate(X_test, Y_test)) print(“Best performing model chosen hyper-parameters:”) print(best_run)

Read more comments on GitHub >

github_iconTop Results From Across the Web

html - javascript typeerror while reading 3d array - Stack Overflow
i have the following 3d array. i want to parse the 1st element of each array element, which should return all the dates....
Read more >
NumPy quickstart — NumPy v1.25.dev0 Manual
NumPy's main object is the homogeneous multidimensional array. ... TypeError: array() takes from 1 to 2 positional arguments but 4 were given >>>...
Read more >
NumPy arange(): How to Use np.arange() - Real Python
NumPy arange() is one of the array creation routines based on numerical ranges. ... to explicitly provide stop without start , then you'll...
Read more >
Chapter 4. NumPy Basics: Arrays and Vectorized Computation
ndarray , a fast and space-efficient multidimensional array providing ... (like a string that cannot be converted to float64 ), a TypeError will...
Read more >
TypeError only size-1 arrays can be converted to Python scalars
Only Arrays of Size 1 can be converted to Python. Scalars Error is a common error that appears in the terminal as a...
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found