def open_as_needed(filename, mode='rb'): """Return a file-object given either a filename or an object. Handles opening with the right class based on the file extension. """ # Handle file-like objects if hasattr(filename, 'read'): # See if the file object is really gzipped or bzipped. lead = filename.read(4) # If we can seek, seek back to start, otherwise read all the data into an # in-memory file-like object. if hasattr(filename, 'seek'): filename.seek(0) else: filename = BytesIO(lead + filename.read()) # If the leading bytes match one of the signatures, pass into the appropriate class. try: lead = lead.encode('ascii') except AttributeError: pass if lead.startswith(b'\x1f\x8b'): filename = gzip.GzipFile(fileobj=filename) elif lead.startswith(b'BZh'): filename = bz2.BZ2File(filename) return filename # This will convert pathlib.Path instances to strings filename = str(filename) if filename.endswith('.bz2'): return bz2.BZ2File(filename, mode) elif filename.endswith('.gz'): return gzip.GzipFile(filename, mode) else: kwargs = {'errors': 'surrogateescape'} if mode != 'rb' else {} return open(filename, mode, **kwargs)
def build_model(**params): # List of parameters if 'density' not in params: params['density'] = int((params['lstmsize']//1.5)*2) if 'activation' not in params: params['activation'] = 'relu' if 'twice' not in params: params['twice'] = False if 'optimizer' not in params: params['optimizer'] = 'adam' if 'shuffle' not in params: params['shuffle'] = False # Model definition model = Sequential() model.add(LSTM(params['lstmsize'], input_shape=(92,5,), return_sequences=params['twice'])) if 'dropout' in params: model.add(Dropout(params['dropout'])) if params['twice']: model.add(LSTM(params['lstmsize'])) if 'dropout' in params: model.add(Dropout(params['dropout'])) model.add(Dense(params['density'], activation=params['activation'])) if 'full_density' in params and params['full_density']: density = params['density']//2 while density >= 12: model.add(Dense(density, activation=params['activation'])) density //= 2 model.add(Dense(5, activation='linear')) model.compile(loss='mse', optimizer=params['optimizer']) storage_client = storage.Client() bucket = storage_client.get_bucket(env["BUCKET"]) blob = bucket.blob(f"models/weights/{params['symbol']}_models/{params['tag']}.hdf5") temp_file = BytesIO() # Este pequeño hack se me hizo necesario para sortear el check que "load_weights" le hace al nombre del archivo. def endswith(suffix, start=0, end=-1): return True temp_file.endswith = endswith blob.download_to_file(temp_file) model.load_weights(temp_file) return model