import pandas as pdimport matplotlib.pyplot as pltcsv = 'C:\\Users\\Alex\\Downloads\\weight-height.csv'df = pd.read_csv(csv)df.headx_train = df['Height'].values#into centimetres because im englishx_train = x_train * 2.54y_train = df['Weight'].values#into kilos because im englishy_train = y_train / 2.2046226218plt.figure()plt.scatter(x_train, y_train, c=None)plt.show()print(X[:10])print(y[:10])from tensorflow.keras.models import Sequentialfrom tensorflow.keras.layers import Dense, Activationimport numpy as npX = np.array(x_train).reshape(-1,1)y = np.array(y_train).reshape(-1,1)X = X[:5000]y = y[:5000]model = Sequential()model.add(Dense(36, activation='relu'))model.add(Dense(18))model.add(Dense(1))model.compile(optimizer='adam', loss='mean_squared_error', metrics=['accuracy'])history = model.fit(X,y, batch_size=1, epochs=1, validation_split=0.1)#plt.plot(history.history['acc'])#plt.plot(history.history['val_acc'])
我的问题主要是我是个新手,正在尝试使用Keras从头开始创建自己的线性回归模型,我不明白为什么我的损失值这么高。我需要知道这是因为我使用的优化器还是损失函数,或者是数据问题。这个数据集只是一个包含体重和身高的列表。
回答:
我会尝试以下方法:
-
将身高和体重标准化,使每个的最大值为1。深度学习通常在值约为1时更容易处理。显然,你需要对测试数据进行相同的除法操作,并在最后将答案乘以相同的数值。
-
将你的度量标准改为’mse’或’mae’(均方误差或平均绝对误差)。这不会改变你的损失值,但会让你感觉更好,因为这是一个更有意义的衡量你表现的指标。
试试这个:
x_train = df['Height'].valuesx_train = x_train * 2.54x_train = x_train / 175.0y_train = df['Weight'].valuesy_train = y_train / 2.2046226218y_train = y_train / 80.0
…
model.compile(optimizer='adam', loss='mean_squared_error', metrics=['mse'])
以及测试一些新值
x_test = 187x_test = np.array(x_test).reshape(-1,1)x_test = x_test * 2.54x_test = x_test / 175.0pred = model.predict(x_test)pred = pred * 80.0