Python 使用keras拟合深度学习模型

Python 使用keras拟合深度学习模型,python,machine-learning,keras,deep-learning,Python,Machine Learning,Keras,Deep Learning,我是深度学习和keras的新手,我想做一项任务:使用50个历元的训练数据训练模型 我写了以下代码: import pandas as pd from tensorflow.python.keras import Sequential from tensorflow.python.keras.layers import Dense from sklearn.model_selection import train_test_split concrete_data = pd.read_csv('h

我是深度学习和keras的新手,我想做一项任务:使用50个历元的训练数据训练模型

我写了以下代码:

import pandas as pd
from tensorflow.python.keras import Sequential
from tensorflow.python.keras.layers import Dense
from sklearn.model_selection import train_test_split

concrete_data = pd.read_csv('https://cocl.us/concrete_data')

n_cols = concrete_data.shape[1]
model = Sequential()
model.add(Dense(units=10, activation='relu', input_shape=(n_cols,)))

model.compile(loss='mean_squared_error',
          optimizer='adam')


x = concrete_data.Cement
y = concrete_data.drop('Cement', axis=1)
xTrain, xTest, yTrain, yTest = train_test_split(x, y, test_size = 0.3)
但当我想以这种方式适合我的模型时:

model.fit(xTrain, yTrain, validation_data=(xTrain, yTrain), epochs=50)
我有以下错误:

Epoch 1/50
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-83-489dd99522b4> in <module>()
----> 1 model.fit(xTrain, yTrain, validation_data=(xTrain, yTrain), epochs=50)

10 frames
/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/func_graph.py in wrapper(*args, **kwargs)
    966           except Exception as e:  # pylint:disable=broad-except
    967             if hasattr(e, "ag_error_metadata"):
--> 968               raise e.ag_error_metadata.to_exception(e)
    969             else:
    970               raise

ValueError: in user code:

    /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py:503 train_function  *
        outputs = self.distribute_strategy.run(
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/distribute/distribute_lib.py:951 run  **
        return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/distribute/distribute_lib.py:2290 call_for_each_replica
        return self._call_for_each_replica(fn, args, kwargs)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/distribute/distribute_lib.py:2649 _call_for_each_replica
        return fn(*args, **kwargs)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py:464 train_step  **
        y_pred = self(x, training=True)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/base_layer.py:885 __call__
        self.name)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/input_spec.py:216 assert_input_compatibility
        ' but received input with shape ' + str(shape))

    ValueError: Input 0 of layer sequential_2 is incompatible with the layer: expected axis -1 of input shape to have value 9 but received input with shape [None, 1]
1/50纪元
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在()
---->1模型拟合(xTrain,yTrain,验证数据=(xTrain,yTrain),历元=50)
10帧
/包装器中的usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/func_graph.py(*args,**kwargs)
966例外情况为e:#pylint:disable=broad Exception
967如果hasattr(e,“ag\u错误\u元数据”):
-->968将e.ag\u错误\u元数据引发到\u异常(e)
969其他:
970加薪
ValueError:在用户代码中:
/usr/local/lib/python3.6/dist包/tensorflow/python/keras/engine/training.py:503 train_函数*
输出=self.distribution\u strategy.run(
/usr/local/lib/python3.6/dist包/tensorflow/python/distribute/distribute_lib.py:951运行**
返回self.\u扩展。为每个\u副本调用\u(fn,args=args,kwargs=kwargs)
/usr/local/lib/python3.6/dist包/tensorflow/python/distribute/distribute_lib.py:2290为每个复制副本调用
返回自我。为每个副本(fn、ARG、kwargs)调用
/usr/local/lib/python3.6/dist-packages/tensorflow/python/distribute/distribute\u-lib.py:2649\u为每个复制副本调用
返回fn(*args,**kwargs)
/usr/local/lib/python3.6/dist包/tensorflow/python/keras/engine/training.py:464 train_步骤**
y_pred=self(x,training=True)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/base\u-layer.py:885\u调用__
(姓名)
/usr/local/lib/python3.6/dist packages/tensorflow/python/keras/engine/input\u spec.py:216 assert\u input\u兼容性
'但收到的输入带有形状'+str(形状))
ValueError:layer sequential_2的输入0与层不兼容:输入形状的轴-1应具有值9,但接收到形状为[None,1]的输入
我的具体数据是:

这是x和y的形状(用*隔开):
我真的不知道是什么问题。

我认为您需要更改输入形状,如下所示:

input_shape=(n_cols,) =>>  input_shape=(n_cols-1,)
在开始时,您的数据包含特征和目标数据,因此形状由这两部分组成。您需要从该零件中减去1以指定输入形状

另一个问题是需要在
x
y
之间切换数据。我认为您需要使用数据集的其余部分预测
水泥
。因此,
Cement
信息应该存储在
y
中,数据集的其余部分应该存储在
x

另外,您需要更改代码的这一部分

model.fit(xTrain, yTrain, validation_data=(xTrain, yTrain), epochs=50)

在培训和验证中使用相同的数据没有意义。您可以指定验证比率,这样keras将使您自动执行。

我认为您需要更改输入形状,如下所示:

input_shape=(n_cols,) =>>  input_shape=(n_cols-1,)
在开始时,您的数据包含特征和目标数据,因此形状由这两部分组成。您需要从该零件中减去1以指定输入形状

另一个问题是需要在
x
y
之间切换数据。我认为您需要使用数据集的其余部分预测
水泥
。因此,
Cement
信息应该存储在
y
中,数据集的其余部分应该存储在
x

另外,您需要更改代码的这一部分

model.fit(xTrain, yTrain, validation_data=(xTrain, yTrain), epochs=50)

在培训和验证中使用相同的数据没有意义。您可以指定验证比率,以便KERA将自动进行验证。

请提供有关您的“具体数据”的更多信息。它的形状等等。。你的x和y是什么形状?@BatuhanBardak谢谢。我编辑了这个问题,我对x和y不太确定,我编写了代码来回答这个问题:通过持有30%的数据进行测试,将数据随机分割成训练集和测试集。您可以使用Scikit-LERN中的训练测试分割辅助功能。请提供有关“具体数据”的更多信息。它的形状等等。。你的x和y是什么形状?@BatuhanBardak谢谢。我编辑了这个问题,我对x和y不太确定,我编写了代码来回答这个问题:通过持有30%的数据进行测试,将数据随机分割成训练集和测试集。您可以使用Scikit学习中的训练测试分割辅助功能。我编辑了我的答案,您是否切换了x和y变量的数据?我编辑了我的答案,您是否切换了x和y变量的数据?