我正在使用keras
和keras_tuner
进行超参数调整来训练神经网络,并遇到了一个与之前在网站上提出的其他问题不相似的错误。
根据我的知识,这是相关的代码:
- 拆分我的数据集
x = data.drop('label', axis=1).values
X = normalize(x)
y = pd.get_dummies(data['label']).values
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.30, random_state=40)
print("Length of train set: ", X_train.shape, "y:", y_train.shape)
print("Length of test set: ", X_test.shape, "y:", y_test.shape)
结果是这样的:
Length of train set: (7922, 26) y: (7922, 6)
Length of test set: (3396, 26) y: (3396, 6)
- 建立我的模型
def build_model(hp):
model = Sequential()
step = 100
for i in range(hp.Int('num_layers', 3, 4)):
if i == 1:
model.add(
Dense(
units=hp.Int('units_'+str(i), min_value=step*2, max_value=step*5, default=step*2, step=step),
input_dim=26,
activation=hp.Choice('dense_activation_'+str(i), values=['relu', 'tanh', 'sigmoid'])
)
)
else:
model.add(
Dense(units=hp.Int('units_' + str(i), min_value=step*2, max_value=step*5, default=step*2, step=step),
activation=hp.Choice('dense_activation_'+str(i), values=['relu', 'tanh', 'sigmoid'])
)
)
model.add(
Dropout(
hp.Float('dropout_' + str(i), min_value=0.0, max_value=0.1, default=0.1, step=0.02)
)
)
if step > 20:
step = step/2
else:
step = 10
model.add(Dense(6, activation='softmax'))
# optimizer = optimizers.Adam(learning_rate=0.001)
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
return model
- 使用 Hyperband 对参数进行超调
tuner = kt.Hyperband(
build_model,
max_epochs=100,
objective='accuracy',
seed=42,
executions_per_trial=2
)
tuner.search(X_train, y_train, epochs=500, validation_data=(X_test, y_test))
best_model = tuner.get_best_models()[0]
最后,我得到了一个错误,如图所示:
Traceback (most recent call last):
File "PycharmProjects\FYP_Project\Keras training\Keras Training.py", line 75, in <module>
best_model.evaluate(X_test, y_test)[1] * 100)
File "AppData\Roaming\Python\Python39\site-packages\tensorflow\python\keras\engine\training.py", line 1489, in evaluate
tmp_logs = self.test_function(iterator)
File "AppData\Roaming\Python\Python39\site-packages\tensorflow\python\eager\def_function.py", line 889, in __call__
result = self._call(*args, **kwds)
File "AppData\Roaming\Python\Python39\site-packages\tensorflow\python\eager\def_function.py", line 933, in _call
self._initialize(args, kwds, add_initializers_to=initializers)
File "AppData\Roaming\Python\Python39\site-packages\tensorflow\python\eager\def_function.py", line 763, in _initialize
self._stateful_fn._get_concrete_function_internal_garbage_collected( # pylint: disable=protected-access
File "AppData\Roaming\Python\Python39\site-packages\tensorflow\python\eager\function.py", line 3050, in _get_concrete_function_internal_garbage_collected
graph_function, _ = self._maybe_define_function(args, kwargs)
File "AppData\Roaming\Python\Python39\site-packages\tensorflow\python\eager\function.py", line 3444, in _maybe_define_function
graph_function = self._create_graph_function(args, kwargs)
File "AppData\Roaming\Python\Python39\site-packages\tensorflow\python\eager\function.py", line 3279, in _create_graph_function
func_graph_module.func_graph_from_py_func(
File "AppData\Roaming\Python\Python39\site-packages\tensorflow\python\framework\func_graph.py", line 999, in func_graph_from_py_func
func_outputs = python_func(*func_args, **func_kwargs)
File "AppData\Roaming\Python\Python39\site-packages\tensorflow\python\eager\def_function.py", line 672, in wrapped_fn
out = weak_wrapped_fn().__wrapped__(*args, **kwds)
File "AppData\Roaming\Python\Python39\site-packages\tensorflow\python\framework\func_graph.py", line 986, in wrapper
raise e.ag_error_metadata.to_exception(e)
ValueError: in user code:
AppData\Roaming\Python\Python39\site-packages\tensorflow\python\keras\engine\training.py:1323 test_function *
return step_function(self, iterator)
AppData\Roaming\Python\Python39\site-packages\tensorflow\python\keras\engine\training.py:1314 step_function **
outputs = model.distribute_strategy.run(run_step, args=(data,))
AppData\Roaming\Python\Python39\site-packages\tensorflow\python\distribute\distribute_lib.py:1285 run
return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs)
AppData\Roaming\Python\Python39\site-packages\tensorflow\python\distribute\distribute_lib.py:2833 call_for_each_replica
return self._call_for_each_replica(fn, args, kwargs)
AppData\Roaming\Python\Python39\site-packages\tensorflow\python\distribute\distribute_lib.py:3608 _call_for_each_replica
return fn(*args, **kwargs)
AppData\Roaming\Python\Python39\site-packages\tensorflow\python\keras\engine\training.py:1307 run_step **
outputs = model.test_step(data)
AppData\Roaming\Python\Python39\site-packages\tensorflow\python\keras\engine\training.py:1266 test_step
y_pred = self(x, training=False)
AppData\Roaming\Python\Python39\site-packages\tensorflow\python\keras\engine\base_layer.py:1030 __call__
outputs = call_fn(inputs, *args, **kwargs)
AppData\Roaming\Python\Python39\site-packages\tensorflow\python\keras\engine\sequential.py:394 call
outputs = layer(inputs, **kwargs)
AppData\Roaming\Python\Python39\site-packages\tensorflow\python\keras\engine\base_layer.py:1023 __call__
self._maybe_build(inputs)
AppData\Roaming\Python\Python39\site-packages\tensorflow\python\keras\engine\base_layer.py:2625 _maybe_build
self.build(input_shapes) # pylint:disable=not-callable
AppData\Roaming\Python\Python39\site-packages\tensorflow\python\keras\layers\core.py:1191 build
self.kernel = self.add_weight(
AppData\Roaming\Python\Python39\site-packages\tensorflow\python\keras\engine\base_layer.py:639 add_weight
variable = self._add_variable_with_custom_getter(
AppData\Roaming\Python\Python39\site-packages\tensorflow\python\training\tracking\base.py:810 _add_variable_with_custom_getter
new_variable = getter(
AppData\Roaming\Python\Python39\site-packages\tensorflow\python\keras\engine\base_layer_utils.py:127 make_variable
return tf_variables.VariableV1(
AppData\Roaming\Python\Python39\site-packages\tensorflow\python\ops\variables.py:260 __call__
return cls._variable_v1_call(*args, **kwargs)
AppData\Roaming\Python\Python39\site-packages\tensorflow\python\ops\variables.py:206 _variable_v1_call
return previous_getter(
AppData\Roaming\Python\Python39\site-packages\tensorflow\python\ops\variables.py:67 getter
return captured_getter(captured_previous, **kwargs)
AppData\Roaming\Python\Python39\site-packages\tensorflow\python\distribute\distribute_lib.py:3523 creator
return next_creator(**kwargs)
AppData\Roaming\Python\Python39\site-packages\tensorflow\python\ops\variables.py:67 getter
return captured_getter(captured_previous, **kwargs)
C:\Users\Axell\AppData\Roaming\Python\Python39\site-packages\tensorflow\python\distribute\distribute_lib.py:3523 creator
return next_creator(**kwargs)
AppData\Roaming\Python\Python39\site-packages\tensorflow\python\ops\variables.py:67 getter
return captured_getter(captured_previous, **kwargs)
AppData\Roaming\Python\Python39\site-packages\tensorflow\python\distribute\distribute_lib.py:3523 creator
return next_creator(**kwargs)
AppData\Roaming\Python\Python39\site-packages\tensorflow\python\ops\variables.py:67 getter
return captured_getter(captured_previous, **kwargs)
AppData\Roaming\Python\Python39\site-packages\tensorflow\python\eager\def_function.py:750 variable_capturing_scope
v = UnliftedInitializerVariable(
AppData\Roaming\Python\Python39\site-packages\tensorflow\python\ops\variables.py:264 __call__
return super(VariableMetaclass, cls).__call__(*args, **kwargs)
AppData\Roaming\Python\Python39\site-packages\tensorflow\python\eager\def_function.py:293 __init__
initial_value = initial_value()
AppData\Roaming\Python\Python39\site-packages\tensorflow\python\training\tracking\base.py:86 __call__
return CheckpointInitialValue(
AppData\Roaming\Python\Python39\site-packages\tensorflow\python\training\tracking\base.py:122 __init__
self.wrapped_value.set_shape(shape)
AppData\Roaming\Python\Python39\site-packages\tensorflow\python\framework\ops.py:1238 set_shape
raise ValueError(
ValueError: Tensor's shape (26, 400) is not compatible with supplied shape [26, 200]
我什至不确定 400 是从哪里来的,我意识到我的一层有一个零,但是当我删除它时,错误仍然保持不变。我所做的新更改是:
def build_model(hp):
model = Sequential()
for i in range(hp.Int('num_layers', 4, 5)):
# if i == 1:
# model.add(Dense(units=hp.Int('units_' + str(i),
# min_value=20,
# max_value=500,
# step=20),
# input_dim=26,
# activation='relu'))
# else:
model.add(Dense(units=hp.Int('units_' + str(i),
min_value=20,
max_value=500,
step=20),
activation='relu'))
model.add(Dense(6, activation='softmax'))
# optimizer = optimizers.Adam(learning_rate=0.001)
model.compile(loss='categorical_crossentropy', optimizer=keras.optimizers.Adam(
hp.Choice('learning_rate', [1e-2, 1e-3, 1e-4])), metrics=['accuracy'])
return model
仍然有来自某个地方的400,有人可以告诉我它来自哪里吗?