Tensorflow Fit 以代码 1 退出,没有任何错误消息

Tensorflow Fit exits with code 1 without any error message

我是张量流的新手。我想做的是训练一个简单的神经网络来解决牛顿 2 问题,猜测给定质量和加速度值的力值。输入层由两个神经元组成,分别是质量值和加速度值。输出层就是力

程序只是给出了一个警告,打印了一些我猜测输出的数据,然后以代码 1 退出。我无法尝试任何方法来解决这个问题。因为正如我之前所说,我是 tensorflow 的新手,没有任何错误信息。

代码如下:

   from tensorflow.keras.layers import Dense, Flatten
   from tensorflow.keras.models import Sequential
   import numpy as np
   import pickle


   X = pickle.load(open("Newton2_X.pickle", "rb"))
   y = pickle.load(open("Newton2_y.pickle", "rb"))

   model = Sequential()
   # model.add(Flatten())
   model.add(Dense(2, activation="relu"))
   model.add(Dense(128, activation="relu"))
   model.add(Dense(1, activation="softmax"))

   model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

   model.fit(X, y, epochs=3, validation_split=0.1, batch_size=100)

这里是 pickle 文件: https://drive.google.com/drive/folders/1FkKmY4px8oQJkbHYb_Z4y4Lnb1EazkvP?usp=sharing

在这部分代码之后,我有一些额外的行让网络猜测一个新值和一些打印行。这些行不执行。事实上,我发现 'problem' 必须在 model.fit(...) 部分。因为该行之后没有行被执行。

这是我从程序中得到的完整警告消息:

WARNING: Logging before flag parsing goes to stderr.
W0816 07:02:05.292823 17652 deprecation.py:506] From C:\Users\SABA\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\ops\init_ops.py:1251: calling VarianceScaling.__init__ (from tensorflow.python.ops.init_ops) with dtype is deprecated and will be removed in a future version.
Instructions for updating:
Call initializer instance with the dtype argument instead of passing it to the constructor
6, 0.2142802901764338, 0.26114980919201514, 0.2451221454091551, 0.19920049739052853, ...

有几处需要调整。

首先,我不认为数据是你认为的形状。你有:

X.shape # (45000, 2, 2, 1)

y 是一个包含 90,000 个元素的平面列表。

其次,您正在预测一个数字(因此是回归),但您试图使用 'sparse_categorical_crossentropy' 作为分类问题的损失函数。

我可以通过简单地将数据切割成我们需要的形状来让你的代码达到 运行 但显然它不会训练,因为我没有配对正确的 Xs 和 ys。你需要在数据中正确地解决这个问题

from tensorflow.keras.layers import Dense, Flatten
from tensorflow.keras.models import Sequential
import numpy as np
import pickle

### TODO - sort this out!
X = pickle.load(open("Newton2_X.pickle", "rb"))[:,0,:,0]
y = np.array(pickle.load(open("Newton2_y.pickle", "rb")))[:45000]
####

model = Sequential()
# model.add(Flatten())
model.add(Dense(2, activation="relu"))
model.add(Dense(128, activation="relu"))
model.add(Dense(1, activation="softmax"))

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

model.fit(X, y, epochs=3, validation_split=0.1, batch_size=100)