'int' object is not iterable

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
fischer-klaus3
User
Beiträge: 27
Registriert: Donnerstag 17. September 2020, 08:07

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)
)
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Schau dir mal deine for-Schleife an. Du iterierst über die Elemente von num_hiddens und bindest die an eben den selben Namen.
fischer-klaus3
User
Beiträge: 27
Registriert: Donnerstag 17. September 2020, 08:07

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.
Antworten