【发布时间】:2020-01-04 08:59:12
【问题描述】:
我正在尝试将数组答案添加到我的简单模型中,但我不明白该怎么做。 我有二维数组的输入形状,一个例子 [[0, 0, 1][1, 0, 0]] 这个例子的答案是 [0, 1] 这就像 2 名玩家之间的 Rock, Paper, Scissors,答案是谁赢了,所以我有所有可能的训练数据,即 9 个示例。
到目前为止我的代码:
我创建了一个 BooleanNN 类:
class BooleanNN:
def __init__(self, name, inputs, answers, load=False, twolayers=False):
self.name = name
if load:
self.model = keras.models.load_model(f'{name}.h5')
else:
self.model = keras.models.Sequential()
self.model.add(keras.layers.InputLayer(input_shape=[2,3], name='input'))
if twolayers:
# for xor
self.model.add(keras.layers.Dense(4, activation='sigmoid', name='hidden'))
self.model.add(keras.layers.Dense(1, activation='sigmoid', name='output'))
self.model.compile(optimizer=keras.optimizers.Adam(learning_rate=0.1), loss='mean_squared_error')
for _ in range(10):
self.model.fit(inputs, answers, epochs=100, batch_size=1, verbose=0)
print(self.model.evaluate(inputs, answers, verbose=0))
self.model.save(f'{name}.h5')
self.evaluate(inputs, answers)
print(self.model.summary())
print(self.model.get_weights())
def evaluate(self, inputs, answers):
print(f'Network "{self.name}"\n-----------------------')
results = self.model.predict(inputs)
for input, result, correct in zip(inputs, results, answers):
print(f'{input} : \n got {result} \n necessary {correct}')
def train_some_more(self, inputs, answers):
for _ in range(5):
self.model.fit(inputs, answers, epochs=1000, batch_size=1, verbose=0)
print(self.model.evaluate(inputs, answers, verbose=0))
self.evaluate(inputs, answers)}
然后,当我尝试调用 BooleanNN 类时,我需要传递答案,但我真的很挣扎。我没有添加所有数据,因为我正在尝试使用许多不同的方法来传递它,我不必一直更改所有数据。
这是我走了多远:
inputs = [([0., 0.,1.], [1., 0.,0.])]
answers = [0.,1.]
network = BooleanNN('net1', inputs, answers)
后面跟着错误
ValueError: Data cardinality is ambiguous:
x sizes: 1
y sizes: 2
Please provide data which shares the same first dimension.
【问题讨论】:
标签: python tensorflow tf.keras