Python 使用keras拟合深度学习模型
我是深度学习和keras的新手,我想做一项任务:使用50个历元的训练数据训练模型 我写了以下代码: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
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变量的数据?