ValueError:张量的形状 (26, 400) 与提供的形状 [26, 200]

问题描述

我正在使用 keraskeras_tuner 训练神经网络进行超参数调整,但遇到了与之前在网站上提出的其他问题不同的错误

根据我的知识,这是相关的代码

  1. 拆分我的数据集
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_test.shape)

结果如下:

Length of train set:  (7922,26) y: (7922,6)
Length of test set:  (3396,26) y: (3396,6)
  1. 构建我的模型
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),'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
  1. 使用 Hyperband 对参数进行超调
tuner = kt.Hyperband(
    build_model,max_epochs=100,objective='accuracy',seed=42,executions_per_trial=2
)
tuner.search(X_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,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\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,optimizer=keras.optimizers.Adam(
            hp.Choice('learning_rate',[1e-2,1e-3,1e-4])),metrics=['accuracy'])
    return model

仍然有 400 来自某个地方,有人可以告诉我它是从哪里来的吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)