bookmark_borderクラス名間違っていないのに Target class [○○] does not exist. になる- Laravel8

TL;DR

該当のControllerをuseし、::classでそのクラスの完全修飾名を取得。それをControllerとして指定する。

use App\Http\Controllers\HogeController;
Route::get('/hoge', [HogeController::class, 'hogeAction']);

起こるエラー

Illuminate\Contracts\Container\BindingResolutionExceptionTarget class [コントローラーの名前] does not exist.

問題のコードと前提

HogeController.phpはapp/Http/Controllersに間違いなく配置されている。Route::getで指定しているクラス名もtypoしていない。

Route::get('/hoge', 'HogeController@hogeAction');

対処

Laravel8系において、Controllerはクラスの完全修飾名で指定する。

use App\Http\Controllers\HogeController;
// HogeController::class の実行結果は
// 'App\Http\Controllers\HogeController'
Route::get('/hoge', [HogeController::class, 'hogeAction']);

以下でも同じ動作をしますが、Controllerのクラス名::classを使用する上記の方法の方が可読性が良さそうです。(公式ドキュメントのサンプルコードもControllerのクラス名::classの形)

Route::get('/hoge', 'App\Http\Controllers\HogeController@hogeAction');

参考

Laravel 8.x 公式ドキュメント Routing#The Default Route Files

https://laravel.com/docs/8.x/routing#the-default-route-files

bookmark_borderAttributeError … has no attribute ‘_TensorLike’

久しぶりにKerasを使ったら落ちたのでメモ。

TL;DR

from keras import ... ではなく from tensorflow.keras import ...

発生するエラー

AttributeError: module ‘tensorflow.python.framework.ops’ has no attribute ‘_TensorLike’

問題のコード

from keras import Sequential
from keras.layers import Conv2D, MaxPooling2D, Activation, Dropout, Flatten, Dense
import tensorflow as tf
model = Sequential()
# ここで落ちる
model.add(Conv2D(64,(3,3), padding='same', input_shape=(192,192,3))
opt = tf.keras.optimizers.rmsprop(lr=0.0001, decay=1e-6)
# ...

修正

# from keras import Sequential
from tensorflow.keras.models import Sequential
# from keras.layers import Conv2D, MaxPooling2D, Activation, Dropout, Flatten, Dense
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Activation, Dropout, Flatten, Dense
import tensorflow as tf
model = Sequential()
model.add(Conv2D(64,(3,3), padding='same', input_shape=(192,192,3))
# opt = tf.keras.optimizers.rmsprop(lr=0.0001, decay=1e-6)
opt = tf.keras.optimizers.RMSprop(lr=0.0001, decay=1e-6)
# ...