【问题标题】:how to pass array as an answer to Keras model如何将数组作为 Keras 模型的答案
【发布时间】: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


    【解决方案1】:

    看起来输入数据格式不太正确。您可以这样做:

    # generate 10 samples of data
    inputs = np.random.random((10,2,3)) 
    answers = np.random.randint(2, size=(10, 2, 1)) 
    network = BooleanNN('net1', inputs, answers)
    

    确保输入数据的形状与网络架构中定义的相同。

    【讨论】:

      猜你喜欢
      • 2021-09-01
      • 2011-04-09
      • 1970-01-01
      • 2021-02-18
      • 2012-10-01
      • 2018-11-06
      • 2019-06-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多