Seite 1 von 1

'int' object is not iterable

Verfasst: Dienstag 20. Oktober 2020, 07:56
von fischer-klaus3
Guten Morgen zusammen,

folgendes ich habe eine Klasse und diese rufe ich auch auf.
Ich erhalte folgenden Fehler:

Code: Alles auswählen

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-18-26d84a172398> in <module>()
      1 i = 10
      2 
----> 3 model = NeuMF(5, num_users, num_items, i)
      4 model.compile(
      5      #loss=tf.keras.losses.BinaryCrossentropy(),

<ipython-input-14-6d2d92018d1b> in __init__(self, num_factors, num_users, num_items, nums_hiddens, **kwargs)
      8         self.V = nn.Embedding(num_items, num_factors)
      9         self.mlp = nn.Sequential()
---> 10         for num_hiddens in nums_hiddens:
     11             self.mlp.add(nn.Dense(num_hiddens, activation='relu',
     12                                   use_bias=True))

TypeError: 'int' object is not iterable

Wie kann ich diesen Fehler beheben? Habt mir jemand einen Tipp? Ich würde mich sehr über eine Antwort freuen!
Nach folgend noch mein Code:

Code: Alles auswählen

class NeuMF(nn.Block):
    def __init__(self, num_factors, num_users, num_items, nums_hiddens,
                 **kwargs):
        super(NeuMF, self).__init__(**kwargs)
        self.P = nn.Embedding(num_users, num_factors)
        self.Q = nn.Embedding(num_items, num_factors)
        self.U = nn.Embedding(num_users, num_factors)
        self.V = nn.Embedding(num_items, num_factors)
        self.mlp = nn.Sequential()
        for num_hiddens in nums_hiddens:
            self.mlp.add(nn.Dense(num_hiddens, activation='relu',
                                  use_bias=True))
        self.prediction_layer = nn.Dense(1, activation='sigmoid', use_bias=False)

    def forward(self, user_id, item_id):
        p_mf = self.P(user_id)
        q_mf = self.Q(item_id)
        gmf = p_mf * q_mf
        p_mlp = self.U(user_id)
        q_mlp = self.V(item_id)
        mlp = self.mlp(np.concatenate([p_mlp, q_mlp], axis=1))
        con_res = np.concatenate([gmf, mlp], axis=1)
        return self.prediction_layer(con_res)

model = NeuMF(5, num_users, num_items, 10)
model.compile(
     #loss=tf.keras.losses.BinaryCrossentropy(),
    loss=tf.keras.losses.MeanSquaredError(),
    optimizer=keras.optimizers.Adam(lr=0.001)
)

Re: 'int' object is not iterable

Verfasst: Dienstag 20. Oktober 2020, 08:01
von sparrow
Schau dir mal deine for-Schleife an. Du iterierst über die Elemente von num_hiddens und bindest die an eben den selben Namen.

Re: 'int' object is not iterable

Verfasst: Dienstag 20. Oktober 2020, 08:03
von fischer-klaus3
sparrow hat geschrieben: Dienstag 20. Oktober 2020, 08:01 Schau dir mal deine for-Schleife an. Du iterierst über die Elemente von num_hiddens und bindest die an eben den selben Namen.
Vielen Dank! :) Sollte anstelle eines Wertes mehrere Werte übergeben, sprich ein Array!
Wünsche dir einen tollen Tag und danke für die schnelle Antwort.